From a99b3073cf1473bcdd1e0b5f290b944d16ad8a43 Mon Sep 17 00:00:00 2001 From: lijing Date: Tue, 20 Oct 2026 12:19:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E9=A1=B5=E9=9D=A2=E8=A1=A5=E9=80=9A?= =?UTF-8?q?=E9=81=93=E5=8D=A1=E7=89=87=E9=AA=A8=E6=9E=B6=EF=BC=8C=E7=99=BD?= =?UTF-8?q?=E5=8D=A1=E4=B8=8E=E5=88=86=E9=A1=B5=E6=81=A2=E5=A4=8D=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - App 不统一包卡片(会与页面级卡片叠加),改由各页面根节点提供,与 Notice 一致 - 25 个视图套 .page-wrapper.yh-fill > .main-container;日志管理重写为 .search-wrap + .table-region + .page-panel 规范结构(卡片自动转 flex 纵向) - 新增 element_height mixin:ResizeObserver 实测 .table-region 高度喂 Table, 替代视口高度减常量的旧模型 - self_viewport 高度基准扣除卡片留白 64px,避免表格溢出被卡片裁切 - .env.dev 恢复真实后端地址 --- .env.dev | 2 +- src/App.vue | 1 + src/mixins/element_height.js | 39 +++ src/mixins/self_viewport.js | 18 +- src/views/areaOperateDaily.vue | 4 + src/views/classManage/Christianity.vue | 4 + src/views/classManage/ChristianityDetail.vue | 4 + src/views/classManage/HigherEducation.vue | 4 + src/views/dailySearch.vue | 293 ++++++++---------- src/views/electiveClassManage.vue | 4 + src/views/electiveClassManageDetail.vue | 4 + src/views/historySearch.vue | 4 + src/views/historySearchDetail.vue | 4 + src/views/itemSet.vue | 4 + src/views/schoolSetting.vue | 4 + src/views/studentManage/Christianity.vue | 4 + src/views/studentManage/HigherEducation.vue | 4 + src/views/studentYDManage/Christianity.vue | 4 + src/views/studentYDManage/HigherEducation.vue | 4 + src/views/studySystemChoice.vue | 4 + src/views/subjectManForZy.vue | 4 + src/views/subjectSetzhi.vue | 4 + src/views/teacherManage/Teachergrouping.vue | 4 + src/views/teacherManage/Teachertransfer.vue | 4 + src/views/teacherManage/teacherinfo.vue | 4 + src/views/teacherManage/teachseeting.vue | 4 + src/views/zhuanruinfo.vue | 4 + src/views/zhuanruinfostu/Christianity.vue | 4 + src/views/zhuanruinfostu/HigherEducation.vue | 4 + 29 files changed, 279 insertions(+), 170 deletions(-) create mode 100644 src/mixins/element_height.js diff --git a/.env.dev b/.env.dev index 9ac090e..d7dffbe 100644 --- a/.env.dev +++ b/.env.dev @@ -6,5 +6,5 @@ # serviceHost 留空 → API 走同源相对 /api/*,由 vite proxy 转发到本地后端(规避 CAS 不回 CORS 头) VITE_BASE_HOST=http://base.yunhaixingtong.com VITE_SSO_HOST=http://sso.yunhaixingtong.com -VITE_SERVICE_HOST= +VITE_SERVICE_HOST=http://base.yunhaixingtong.com/userclass VITE_IS_MOCK=false diff --git a/src/App.vue b/src/App.vue index 9fe4c39..5d2f65d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -129,6 +129,7 @@ onMounted(async () => {

暂无权限

如需查看,请联络管理员为您分配权限
+ diff --git a/src/mixins/element_height.js b/src/mixins/element_height.js new file mode 100644 index 0000000..ee16c64 --- /dev/null +++ b/src/mixins/element_height.js @@ -0,0 +1,39 @@ +/** + * 卡片内表格高度实测(Vue3) + * 用法:mixin + 在表格容器上写 class="table-region" ref="tableRegion" + * Table 用 :height="tableRegionHeight" + */ +export const element_height = { + data() { + return { + tableRegionHeight: 0, + }; + }, + mounted() { + this.__measureTableRegion(); + if (typeof ResizeObserver !== "undefined") { + this.__tableRegionRO = new ResizeObserver(() => this.__measureTableRegion()); + const el = this.$refs.tableRegion; + if (el) this.__tableRegionRO.observe(el); + } + window.addEventListener("resize", this.__measureTableRegion); + }, + beforeUnmount() { + if (this.__tableRegionRO) { + this.__tableRegionRO.disconnect(); + this.__tableRegionRO = null; + } + window.removeEventListener("resize", this.__measureTableRegion); + }, + methods: { + __measureTableRegion() { + const el = this.$refs.tableRegion; + if (!el) return; + const h = Math.floor(el.clientHeight); + // 0 常见于隐藏容器/首帧,保留上次有效值 + if (h > 0) this.tableRegionHeight = h; + }, + }, +}; + +export default element_height; diff --git a/src/mixins/self_viewport.js b/src/mixins/self_viewport.js index 63a68fe..506ab89 100644 --- a/src/mixins/self_viewport.js +++ b/src/mixins/self_viewport.js @@ -1,3 +1,6 @@ +// 卡片留白预算(通道 §4.4):.main-container 上下各 16 外边距 + 16 内边距 +const CARD_OVERHEAD = 64; + export const self_viewport = { data() { return { @@ -26,11 +29,16 @@ export const self_viewport = { } }, mounted() { - this.tableHeight = document.body.clientHeight; - window.onresize = () => { - return (() => { - this.tableHeight = document.body.clientHeight; - })(); + const sync = () => { + // 页面已包在 .main-container 卡片内:从视口高度里扣掉卡片留白, + // 否则沿用旧视口基准会多算 64px,表格溢出被卡片裁切 + this.tableHeight = document.body.clientHeight - CARD_OVERHEAD; }; + sync(); + window.addEventListener("resize", sync); + this.__syncTableHeight = sync; + }, + beforeUnmount() { + if (this.__syncTableHeight) window.removeEventListener("resize", this.__syncTableHeight); } }; diff --git a/src/views/areaOperateDaily.vue b/src/views/areaOperateDaily.vue index 54fb15e..ab8cad3 100644 --- a/src/views/areaOperateDaily.vue +++ b/src/views/areaOperateDaily.vue @@ -1,4 +1,6 @@ - - \ No newline at end of file +}; + + + diff --git a/src/views/electiveClassManage.vue b/src/views/electiveClassManage.vue index e12543f..92e7323 100644 --- a/src/views/electiveClassManage.vue +++ b/src/views/electiveClassManage.vue @@ -1,4 +1,6 @@ + +