Files
svc-hall-front/src/utils/hook/useElementHeight.ts
T
chenxing 24c980d1dc
build / build (push) Successful in 2m50s
refactor(spec): 按《云海子应用前端接入规范》v1.10 全量对齐(回收旧皮肤+高度实测模型+工具条/操作列收口)
回收(§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 仍在用)与规范文档。
2026-10-13 11:37:35 +08:00

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;
}