build / build (push) Successful in 2m50s
回收(§2.2):删本地旧皮肤 layout.css/icons.css/icons.css.bak 及 main.ts 两处 import——消除「接了通道却被本地旧皮肤同优先级盖住」的根因;layout.vue 同批三改:删顶栏房子图标钮、面包屑改 -0.125em 基线流 + icon-category→icon-shouye、getMenuIcon 改读 item.icon 兜底 icon-list。
表格高度(§4.3/§4.4):引入 useElementHeight.ts(与 UserBase 逐字节一致);TablePageAlovaNew 换三端同构版(.table-region + 实测高);4 个列表页清 useTableHeight/ResizeObserver(document.body)/:tableHeight,根节点补 yh-fill;无分页两页不套组件,各包 .table-region + 独立实测。
工具条/tab/操作列(§4.1/§4.2/§5/§8.1):去 size="large"×5;ServiceFormManage 工具条右端说明文案改表格上方常驻 Alert(type=info/show-icon/无 closable);ServiceItemList「同步部门名」归左;ServiceDictManage 去 Tabs type="card" 改 tabs-wrapper yh-fill > main-container yh-tabs-card > Tabs.tabs-panel + 双 tab-body;引入 tableActions.ts,4 页迁 actionColumn({mode:"icon"}),发布/下架等互斥动作改 disabledWhen 置灰保位;h("Tag") 改真组件 ×5。
收尾(P2):view-ui-plus ^1.3.24(lock/node_modules 同版);删死代码 TablePage.vue/TablePageAlova.vue/TreeNode/index copy.vue;main.scss 去 bscroll import 并删文件。未动 service/**、public/libs/**(ztree 仍在用)与规范文档。
37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
import { ref, onMounted, onBeforeUnmount, watch, type Ref } from "vue";
|
|
|
|
/**
|
|
* 实测某容器元素的可用高度(px),随尺寸变化实时更新。
|
|
*
|
|
* 用途:表格页把 <Table> 放进 flex:1 的 .table-region 里,用本组合式量出该区域
|
|
* 的真实高度喂给 view-ui 的 `:height`(固定表头需要一个数值高度),从而彻底替代
|
|
* 旧的 useTableHeight()「视口高 - 一堆写死常量」的算法——加/删工具条、改顶栏高
|
|
* 都不再需要同步改任何魔法数字。
|
|
*
|
|
* @param el 目标容器 ref(模板里 ref 绑定的那个元素)
|
|
* @returns 响应式高度(px);挂载测量前为 0,调用方可 `:height="h || undefined"` 兜底
|
|
*/
|
|
export function useElementHeight(el: Ref<HTMLElement | null>): Ref<number> {
|
|
const height = ref(0);
|
|
let ro: ResizeObserver | null = null;
|
|
|
|
const measure = () => {
|
|
if (el.value) height.value = Math.floor(el.value.clientHeight);
|
|
};
|
|
|
|
const observe = () => {
|
|
ro?.disconnect();
|
|
if (!el.value || typeof ResizeObserver === "undefined") return;
|
|
measure();
|
|
ro = new ResizeObserver(measure);
|
|
ro.observe(el.value);
|
|
};
|
|
|
|
onMounted(observe);
|
|
// v-if / v-show 切换导致容器重建时,重新挂观察
|
|
watch(el, observe);
|
|
onBeforeUnmount(() => ro?.disconnect());
|
|
|
|
return height;
|
|
}
|