From 78825797e7877c4d3baf5457ec82018259b535e1 Mon Sep 17 00:00:00 2001 From: oneao Date: Sun, 6 Sep 2026 21:47:57 +0800 Subject: [PATCH] 20260906214757 --- code/fms/.workbuddy/memory/2026-09-06.md | 63 + code/fms/demo.html | 523 +------- .../fmsapi/service/LoginLogService.class | Bin 4150 -> 4120 bytes .../fms/fms-vue/src/views/dashboard/index.vue | 1071 +++++++++++++---- 4 files changed, 950 insertions(+), 707 deletions(-) create mode 100644 code/fms/.workbuddy/memory/2026-09-06.md diff --git a/code/fms/.workbuddy/memory/2026-09-06.md b/code/fms/.workbuddy/memory/2026-09-06.md new file mode 100644 index 00000000..211e9a94 --- /dev/null +++ b/code/fms/.workbuddy/memory/2026-09-06.md @@ -0,0 +1,63 @@ +# 2026-09-06 + +## fms-vue dashboard 列表页布局重构:改为分层白卡 + 灰缝 + +背景:`src/views/dashboard/index.vue` 原为「单张白卡 + 内部 4 条 border-bottom 硬切分区」, +违反 `layouts/DefaultLayout.vue` 注释里定下的约定(分层白卡 + 卡间留灰缝,不用 border 画分隔线)。 +另外 search-area / preview-bar / list-footer 三处同刷 `--fms-table-header-bg`,底色分层失效。 + +改动: +- 页面根 `.dashboard-page` 去掉白卡样式,改为 `flex column + gap: 8px`(灰缝)承载两张卡 +- 卡片 1 `.filter-card`:筛选 / 操作区(方案 A 搜索条 + 高级搜索面板;方案 B 操作栏 + 浮层) +- 卡片 2 `.table-card`:操作栏(仅方案 A)+ 表格 + 分页,`flex:1 + min-height:320px` 内部滚动; + min-height 兜底,高级搜索展开挤压空间时由 `.fms-content` 纵向滚动,避免表格被压扁 +- 删除常驻 40px 的 `preview-bar` 调试条;两种布局方案改由 URL query 控制:`?layout=popover` + (layoutMode 由 ref 改为可写 computed,读写路由 query) +- 删除全部 `border-bottom` 分隔线与 3 处 `--fms-table-header-bg` 灰底 +- 留白改由各区块自身承担(search-bar / action-bar / advanced-panel),卡片不再设 padding, + 避免方案 B 下操作栏 padding 与卡片 padding 叠加 +- 表格区 padding 14px → 16px,与其它区块对齐 + +验证:oxlint 0 warning 0 error;用 `vue/compiler-sfc` 跑 parse + compileScript + compileTemplate 通过。 + +未处理(本次用户只要求改布局结构,已在回复中列出): +- 分页器与表格未联动:dataSource 恒 1w 行全量渲染,切页无反应 +- `min-width: 1040px` + `overflow: hidden`,窄屏内容被裁且无法横向滚动 +- quick-search 固定 320px + space-between,中间大片留白 +- 方案 A / B 两套模板重复 quick-search 与 advanced-grid 代码块,未抽组件 + +## dashboard 列表页布局:第二轮讨论 + 清空重建 + +定位拍板:dashboard = **列表布局样板**(不是工作台),后续 `FmsModuleListPage` 跟进它的结构; +本轮只动 dashboard,业务页下一轮再说。 + +纵向预算(1366×768,浏览器可视高约 640px,实测值:顶栏 40 / 页签 40 / 控制高 28 / +表格行高 30 / 表头 34):扣完顶栏+页签+padding,**页面可用 544px**。其中分页 44 + +操作栏 48 + gap 8 必须留,表格保底 8 行需 274 → **筛选区(含标签行)总预算仅 170px**。 + +关键结论(推翻了「平铺 vs grid 是主要矛盾」的第一轮判断): +- 平铺式与 grid 式只差约 1 行(40px),是次要矛盾;真正的分水岭是 + **挤压 vs 浮层,差 140px(约 4 行表格)** +- 用户确认填条件时**需要同时看表格** → 方案 B(popover 浮层)出局 +- 因此设计目标改为:展开态下表格仍保证 7~8 行可见、分页条不被滚走 + +三条硬约束: +1. **列密度决定行数**——平铺式真正的价值不是「少点击」,而是同样宽度塞更多字段、 + 从而同样高度少换行。现状 grid `minmax(240px,1fr)` 在 1040px 下只有 **3 列**, + 12 个条件要 4 行超预算;按字段类型给宽度(select 120 / text 160 / date-range 235) + 可排到 **5 列**、12 项压进 3 行 +2. **展开后不另起底部操作条**(demo.html 的 `.expanded-actions` 占 48px,近 1/3 预算); + 查询/重置/展开按钮贴首行右侧 +3. **溢出时滚动的是筛选区,不是整页**——现状 `.table-card` 的 `min-height:320px` + 把挤压转成 `.fms-content` 整页滚动,分页条被滚走,违背「边调边看」前提。 + 原则:**筛选区可以委屈,表格和分页不能** + +遗留待定:「常用条件」从哪来(查询字段来自 `s_field_query` 后台配置,前端写死不了), +候选:按 `b_xh` 取前 N / 配置加常用标记 / 记住用户上次展开的条件。 + +改动:按用户要求**删除 dashboard 中除表格外的全部代码**——查询区(queryItems / +quick-search / 高级搜索 / 已选标签)、操作栏、分页、A/B 两套布局与 `?layout=popover` +URL 切换、相关 import 与样式全部移除,只保留 columns / dataSource / rowClassName + +一张白卡承载 FmsTable。文件 591 → 139 行。 +验证:oxlint 0 warning 0 error;`vue/compiler-sfc` parse + compileScript + +compileTemplate + compileStyle 均通过。 diff --git a/code/fms/demo.html b/code/fms/demo.html index c84ae5ba..d5d85d87 100644 --- a/code/fms/demo.html +++ b/code/fms/demo.html @@ -1,509 +1,38 @@ - + - - -ERP 列表页 · 工作台版 + + +ERP 查询构建器 Demo
- - - - -
- - -
-
-
- - -
- -
- -
-
- -
- -
- - - - - -
-
- 用户列表 - -
- 未选择 - - -
- - -
- -
- -
-
- -
- - -
+
费用列表
费用单与账单、发票、收付款状态统一查询
+
当前查询
+
费用数据
已应用 4 个条件 · 共 18 条
☐费用单号 客户 费用类型 金额 状态 创建时间 操作
□FY20260906001上海东方物流有限公司海运费¥12,800.00待审核2026-09-06审核详情
□FY20260906002深圳华南供应链港杂费¥8,620.00待审核2026-09-05审核详情
□FY20260906003宁波海联国际拖车费¥4,200.00已审核2026-09-05详情
□FY20260906004上海东方物流有限公司报关费¥16,300.00待审核2026-09-04审核详情
- - -
-
-
列设置✕
-
-
- - -
-
-
- +
高级查询当前列表列是快捷字段,也可以查询未展示的关联业务字段
普通列条件与关联单据条件会组合成同一个查询
快捷字段 · 点击即可添加
+
diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/LoginLogService.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/LoginLogService.class index 5fffaf2897d3b5cc84279d2c71442f9616048cdc..f7efd3a6e74dce913ab88625a1652402790c7e92 100644 GIT binary patch delta 1617 zcmYjR>30)V6#u>Vme4XIDP2YdgPaN*#&9y-D`O3VFQO%*(ZO_YIHPA` z1G)!mv5uo!#d_43b<%a-4XER&SFsTd=5DE}XcL1oqQz1kG^2&1RmBbFd8stp&TxUS zQ@&_86H6w9V2g?nN*O${R7=4u<3*TN*TVgJA|r(5DHV5EA%(q0m}MBE&_V;!x-l3h=^%zU zhE?2&5p$iZV%rWYZC^MR*V1~}NG4?LwBj4OA--CRQKzyDu1q)*rxxDJ;59_dd|Vm3 z=`*(LBU)cfkCXHPI>%UoYRDK~Jcx%l9#*jzkC;EZs=fR1D92+e9>){rRqhtAi6=Rp zQt>pNF?YF}7VgKGif7@bbkVpTPIElRP-On16nPZLcwWT|c+vdJUBX^A7xOajt2o5* znu-a$Zg%lT?u2{@%3GPd=ufYZiz2V8l493?$Rv7}N7 zDE@o=y9xruf1f{S zLov#!U8`^{uEz#yavLh3p%MwK!A?|Vv5$T><5-7DR8y1IW1fCnKcN=ClKfB9F&8$n z1!!Q4(8#XDCbkOAtOBj99&M}Yj6`)6#i~rcayzX*p6bV9V6;6Bh*eEov{H*3#~1+)RxvlMH`cJTLK{)vT18U ziEjZPsH;Ln#3%J_OQ8f1@PP5jjg*`4!!=Y02^`#AUR4NZmu zQ~w-41)vUpjt4HeTKus{G#)nwQdtGn3?ddu8vTh>Bs-ke6)a&;(oxeKGBUjimNAsX zB1Swukm-$P^=x9Z9>8+ca?}Z|z)I^*_Z?~j?&fF|Xu>Kh>uxT+hrttzB+>z_Mk~j? z0&UieyCS!SVUF}uy?8X6Fj7*`DR3Vu7y^lOOVO=hEd$LmmNAA*JtI}!0{2T5FZvWb zz%b8|LV8C)+Jv#d*2egNPs z!pBwFAh`eh&85$*rYY1&Tl?Skr2f|syvR7l}L_cHj-mqI8NB_BDV~JLMQO0 zOhj2n;FErqvu+oSxy8qDn;UC`iguS4cJR_XYVxRecyo|XqQ#-@l6E+>OVV`?T`%c_ z4t+?{m_v0*`)6rR+bDT*mTQKjTO67#9|8A_!sE_k(D6PJ^f-8X&|APKP~LqMH-!B` zzxJ5+L{Z?^p3*`NekQ2ov7o@@^~sp1+IM+e(ZFN*ArG#&4J)`*ih1&&aT)!;O~fhS1mA!`aA-mQE zr`84daq~0$DntYA2P;#h5YOBPf}z)3^*q|y$$u3+r{MtJO@TT5=* zRvaovQ{I`&;43)xUvJ-oppVuCS`l!T{&V!7r+; b7$+yQPf|*NYiWVMl6B!X{7zPS{{a34yk}!z diff --git a/code/fms/fms-vue/src/views/dashboard/index.vue b/code/fms/fms-vue/src/views/dashboard/index.vue index ffc405eb..4e137407 100644 --- a/code/fms/fms-vue/src/views/dashboard/index.vue +++ b/code/fms/fms-vue/src/views/dashboard/index.vue @@ -1,23 +1,418 @@