Commit Graph
617 Commits
Author SHA1 Message Date
oneao 549c8bd2eb 20260914172820 2026-09-14 17:28:20 +08:00
oneao c31329d387 20260913231607 2026-09-13 23:16:08 +08:00
oneao f3ad727f1c 20260911173133 2026-09-11 17:31:34 +08:00
oneao 3838ed74b1 20260910173853 2026-09-10 17:38:53 +08:00
oneao 19267be58d 20260909224013 2026-09-09 22:40:13 +08:00
oneao d8acf69533 20260909173147 2026-09-09 17:31:47 +08:00
oneao ead8e66626 20260908223921 2026-09-08 22:39:22 +08:00
oneao 8734b43a2a 20260908170359 2026-09-08 17:03:59 +08:00
oneao 2f5eac079e 20260907224521 2026-09-07 22:45:21 +08:00
oneao 1b596ffa5b 20260907172356 2026-09-07 17:23:56 +08:00
oneao 78825797e7 20260906214757 2026-09-06 21:47:57 +08:00
oneao 3b03eccdb5 20260905172602 2026-09-05 17:26:03 +08:00
oneao 7b00eeb88c 20260905172534 2026-09-05 17:25:35 +08:00
oneao 1b01a31252 20260904232445 2026-09-04 23:24:45 +08:00
oneao 4e167df0f0 20260904173136 2026-09-04 17:31:36 +08:00
oneao 0928437c67 20260903221055 2026-09-03 22:10:55 +08:00
oneao 3d4e2c7413 20260903173136 2026-09-03 17:31:37 +08:00
oneao 0faf44cffc 20260903173038 2026-09-03 17:30:39 +08:00
oneao c8940f6e03 20260902223822 2026-09-02 22:38:23 +08:00
oneao db7813a2d2 20260902173133 2026-09-02 17:31:35 +08:00
oneao 6b9cda5424 20260901222055 2026-09-01 22:20:55 +08:00
oneao 53aba8b956 20260901173242 2026-09-01 17:32:43 +08:00
oneao 3bbcafc5be 20260831223203 2026-08-31 22:32:03 +08:00
oneao 4d46ce6c53 20260831172912 2026-08-31 17:29:13 +08:00
oneao d6a56eb17f 20260830215003 2026-08-30 21:50:03 +08:00
oneao 47c0bf08aa refactor(module-management): 参与勾选改用 FmsTable 内置 checkbox,删除自制 ParticipationCell
- 参与状态物化为字段行的 __form/__list/__query 虚拟字段(watch 就地 patch,
  不替换数组引用,不触发整表重建),参与列用内置 editor: checkbox 渲染——
  居中/事件隔离/Enter 切换与「启用」列同款,自制 cell 与配套 scss 删除
- FmsTable change 按列路由:参与列 → toggle 写对应配置草稿;普通列照旧走
  字段 i18n 同步。emitUpdate 剥离 __ 虚拟字段,不进草稿与保存请求
- 新 spec module-fields-panel-participation:物化勾选态、勾选路由生成默认
  查询行、普通编辑剥离虚拟字段(jsdom 无布局,patch clientWidth 关闭虚拟列裁剪)
2026-08-30 21:47:40 +08:00
oneao 59b91e9a7b fix(module-management): 参与勾选列表头与内容居中——对齐「启用」列
- 表头:参与列补 headerAlign: 'center'(stk-table 中 th 与 td 的对齐分开配置,
  此前仅 align 只作用于内容,表头走 getHeaderAlign 默认 left)
- 内容:.mm-part-cell 补 height:100% + line-height:1,与 FmsTable 内置
  勾选列 .fms-checkbox 同构(铺满单元格后 flex 居中)
2026-08-30 21:28:27 +08:00
oneao ac346f929c refactor(module-management): 参与开关由 Switch 改为 Checkbox
与「启用」列的表格勾选交互保持一致,视觉更轻。
2026-08-30 21:14:41 +08:00
oneao f019a1c1ac feat(module-management): 字段定义面板增加 表单/列表/查询 参与开关
跨 tab 的「字段参与了哪些界面」在字段定义一行内表达并可就地切换,
tab 结构不变。「参与是选择不是缺失」——不引入任何完整性提示。

- 语义沿用 fieldAreaDefaults 既有约定:行存在=已配置,行内开关=是否参与
  (表单/列表 b_visible、查询 b_canuse);关=置 0 不删行,保留画布布局与既有查询配置
- fieldParticipation.js(纯逻辑):判定与切换;行不存在时按默认工厂生成且强制参与
  (显式意愿覆盖大文本默认 参与=0),表单新行 b_colspan=24 追加到末尾序号
- fieldAreaDefaults 增加列表/查询默认行工厂,useModuleConfig.buildMissingDefaultConfigs
  改用工厂——「同步字段自动补全」与「手动打开开关」生成的行结构同源
- ParticipationCell(h 渲染 ui Switch)接 FmsTable customCell;表单列仅 data 模块展示
- 新 spec field-participation 9 用例:判定/两路切换/大文本强制参与/不变性
2026-08-30 21:05:57 +08:00
oneao 08646c547f revert(module-management): 撤回表单设计「缺 N」徽标(阶段二)
并非所有启用字段都应出现在表单里(审计字段等常有意不布局),
「缺 N」口径对表单设计是假警报。revert 6bfa0d81,计划文档记录决策。
阶段一(tab 脏点)保留;查询配置的「缺 N」为使用者既有实现,不动。
2026-08-30 20:23:04 +08:00
oneao 2ab502b4a5 revert(module-management): 撤回概览配置完成度 checklist(阶段三)
使用者试用后决定不要:清单信息与 tab 徽标(脏点/缺 N)重复,且占据概览篇幅。
revert 29f98494(组件、spec、index.vue 接线全部移除),计划文档记录该决策。
阶段一(脏点)与阶段二(表单设计缺 N 徽标)保留。
2026-08-30 20:16:14 +08:00
oneao 29f98494af feat(module-management): 导航状态化阶段三——概览配置完成度 checklist
- 新组件 ModuleOverviewChecklist:字段/表单/列表/查询/权限按依赖顺序排列,
  状态以文案表达(缺 N/已配置 N,不只靠颜色),空态给引导文案
- 条目点击与 Enter 跳转对应分节;查询缺配提供「一键补充」
  (复用 fillMissingConfigs,不冒泡为跳转);仅数据/查询模块渲染
- index.vue 补 fieldsEnabledCount/listVisibleCount/powersCount 派生统计;
  表单/查询缺配复用阶段二/既有的 missingEditCount/missingQueryCount
- 新 spec module-overview-checklist 7 用例:条目显隐、缺配/完整/空态文案、
  跳转与一键补充事件
2026-08-30 20:10:53 +08:00
oneao 6bfa0d816f feat(module-management): 导航状态化阶段二——表单设计「缺 N」徽标
- 复用既有 missingConfigCount 通用口径,新增 missingEditCount(启用字段
  未被 editConfig 任何行 b_field_id 引用的数量),子表表格编辑方式下同样成立
- configGroups 表单设计项挂「缺 N」徽标,样式与语义沿用查询配置;
  拖入画布后徽标消失
- spec 新增 4 用例:缺配计数、停用字段不计、b_field_id 类型不一致按字符串比较、空态为 0
2026-08-30 20:07:56 +08:00
oneao 4f89f373e6 feat(module-management): 导航状态化阶段一——分 section 脏检查 + tab 脏点
- useModuleConfig 新增 dirtySections(逐段 JSON.stringify 对比),hasModuleChanges
  改为其派生;先以整树对比语义为基准写等价断言(含「加载补全默认行即脏」的
  既有怪癖),新 spec module-dirty-sections 7 用例全绿
- index.vue #label 插槽给脏 tab 渲染 6px 圆点(title/aria-label,不只靠颜色),
  ui/Tabs 组件零改动;groups 由列表/表单两面板共享编辑,两 tab 联动标脏
- 计划文档 docs/module-management-tab-status-plan.md(横排保留、不做分组为已决策)
2026-08-30 20:06:36 +08:00
oneao 05d0c7f304 chore(fms-vue): WIP 基线快照——收编工作区未提交的前端改动
不含 fms-api Java 侧改动与后续导航状态化阶段提交。主要内容:
- ui 组件库:date/dropdown/form/input/popover/select/tooltip 调整,
  新增 Segmented 组件;fms-table 可编辑单元格渲染器与 FileCard 更新
- 模块管理:列表配置加载自动补全、查询缺配徽标与一键补充、
  结构编辑内核 useStructureEditing/useBandLayout、子表表格编辑方式、
  分组标题多语言、I18nKeyCell 等(含配套 spec)
- 布局/主题/仪表盘/演示页小幅更新
2026-08-30 20:06:19 +08:00
oneao a1079a7150 refactor(ui): Dropdown/Popover 增加 stretch-trigger,结构树宽度改为组件级解决
antdv-next 的 Dropdown/Popover 触发器不额外包裹 span,block 内容天然撑满;
我们组件因统一挂载事件/ref 用 span.popover-trigger(inline-flex 收缩)包裹,
导致结构树(.mst-tree)只有内容宽度。

参照其语义化定制思路,改为组件提供显式能力而非业务侧 :deep 打补丁:
- Popover 新增 stretchTrigger prop:true 时 trigger 加 .popover-trigger--stretch
  (display:block + width:100%,特异性 0,2,0 高于默认)
- Dropdown 透传 stretchTrigger
- ModuleStructureTree 使用 stretch-trigger 撑满分组树面板
- 移除 TableEditPanel 的 :deep(.popover-trigger) 覆盖(回归组件自身能力)
2026-08-28 19:28:40 +08:00
oneao 5e63ef8e50 fix(module-management): 子表设计器 mst-tree 宽度异常——撑开 Popover trigger
根因:ModuleStructureTree 外层是 Dropdown→Popover 的 span.popover-trigger
(display:inline-flex,收缩到内容宽度),导致内部 .mst-tree 即使自身是 block
也只有内容宽度,无法填满分组树面板。

修复:
- TableEditPanel 结构树滚动容器内 :deep(.popover-trigger) 覆盖为
  display:block + width:100%(特异性 0,3,0 高于 Popover 自身 0,2,0)
- ModuleStructureTree .mst-tree 加 width:100% 双保险
2026-08-28 19:25:00 +08:00
oneao c2fee5a294 refactor(module-management): 清理未使用的代码——解构、导出、返回槽、死 computed、死 CSS
- groupNodeMap 在 TableEditPanel/ModuleStructureTree 中解构却未使用 → 移除
- useGroupTree 返回对象中 groupTree/groupNodeMap 无消费者 → 移除
- FIELD_TYPE_LABELS 导出仅内部使用 → 去 export
- sortGroupNodesByXh 导出仅内部使用 → 去 export
- buildBreadcrumb + moduleBreadcrumb 完全死代码 → 删除
- useModuleTree 返回对象中未消费的 moduleTreeLoading/moduleKeyword/moduleExpandedKeys/deleteModule/moduleBreadcrumb → 移除
- useModuleSave 返回对象中未消费的 validateAutoCode/configSaving → 移除
- useModuleConfig 返回对象中未消费的 8 个成员 → 移除(仅保留 index.vue 解构的 5 个)
- FormInspector 中 .mm-fdesign__stale-tag 死样式(预留样式,模板未使用) → 删除
- ModuleBasicPanel 中 .mm-basic__hint 死样式(模板未使用) → 删除

lint: 零新增告警(54w/3e 不变);test: 184/185 通过(唯一失败为既有 fms-table 判断)
2026-08-28 19:21:28 +08:00
oneao fefdcb9ca8 refactor(module-management): R3 完成——form-edit 拆分收尾
- 接 index.vue:ModuleFormEditPanel import 改为 ./components/form-edit/FormEditPanel.vue
- 删除旧 components/ModuleFormEditPanel.vue(3168 行)
- 清理壳组件死样式(lib/ inspector/ prop/ toggle 等已迁至子组件)
- 验证:form-edit 组件图编译通过,dnd 14 例全绿,lint 零新增告警

按停损条款:FormCanvas/useFormDrag 交织最深且无测试保护,保留现状,留待下轮。
2026-08-28 19:04:13 +08:00
oneao a85f9b0120 20260828173144 2026-08-28 17:31:45 +08:00
oneao 76b12cc5e1 refactor(module-management): R2c 表单设计面板 UI 归一
- 字段库搜索/占位符/栅格宽度/文本域高度输入 → ui Input(change 载荷改为值)
- 编辑方式切换 → ui RadioGroup;设计/数据视图切换 → ui Tabs(nav-only)
- 帮助气泡 → ui Popover(hover),删除自绘 help-pop/.mm-edit__help 样式
- 属性面板折叠/展开钮 → ui Button;状态开关×4 → ui Switch
- 分组名称内联编辑 → ui Input;确认/取消/齿轮/删除 → ui Button(type=ghost)
- 删除废弃 .mm-fdesign__toggle、.mm-edit__mode-btn、.mm-edit__view-btn 样式
- 适配 .mm-edit__mode / .mm-edit__view-switch 为紧凑字号
- 所有 Button 覆写样式加 .button 后缀(确保覆盖 ui Button 默认尺寸)
- 所有 Input 覆写样式加 .input-wrapper 后缀
- 替换 .mm-fdesign__span-control input[type=number] 为 .mm-fdesign__span-input.input-wrapper
2026-08-28 17:00:00 +08:00
oneao 8c506ae56c refactor(module-management): R2b 表格设计面板 UI 归一
- 字段库搜索/带标题/列宽输入 → ui Input(change 载荷改为值)
- 编辑方式切换 → ui RadioGroup;设计/数据视图切换 → ui Tabs(nav-only)
- 帮助气泡 → ui Popover(hover),删除自绘 help-pop 样式
- 属性面板折叠/步进钮 → ui Button;状态开关×5 → ui Switch
- 删除 .mm-fdesign__toggle、.mm-edit__mode-btn、__view-btn 等死样式
2026-08-28 16:37:58 +08:00
oneao ce3a9d87f8 refactor(module-management): R2a UI 归一——小文件替换为 ui 组件
- ui Input 补 defineExpose(focus/select/blur),供内联重命名程序化聚焦
- index.vue 树头新建按钮、ModuleBasicPanel 多语言按钮 → ui Button
- StructureTreeNode 内联重命名 input → ui Input,六个操作钮 → ui Button
- ModuleStructureTree 自绘右键菜单 → ui Dropdown(trigger=contextmenu),
  删除自绘定位/关闭监听与 .mst-context-* 样式
2026-08-28 16:25:58 +08:00
oneao 2dba857880 refactor(module-management): R1 清场——删除无引用的 MenuDetailPanel/IconSelect 与过期 spec,useConfirm 合回 index.vue 2026-08-28 16:15:30 +08:00
oneao 91237c4a47 refactor(module-management): 阶段三——index.vue 拆出 useModuleTree/useModuleConfig/useModuleSave/useConfirm 2026-08-28 16:11:57 +08:00
oneao 27752351b9 refactor(module-management): 阶段二——抽取字段查询与共享纯函数
- 新建 composables/useFieldLookup.js:FIELD_TYPE_LABELS 常量 +
  useFieldLookup(fieldsRef) 返回 fieldNameMap/fieldMap/fieldOf/fieldName/controlTypeLabel
- 新建 editPanelShared.js(纯函数,无 Vue 依赖):renumberRows/buildVisibilityMap/
  buildClipboardProps/applyClipboardProps/toggleFlag/filterLibraryFields/createEditRowFactory
- ModuleTableEditPanel/ModuleFormEditPanel/ModuleStructureTree 三处同体字段查询
  统一改用 useFieldLookup,删除各自 FIELD_TYPE_LABELS/fieldNameMap/fieldMap/fieldOf/
  fieldName/controlTypeLabel 复制体
- 两面板 syncToList/syncToQuery 共享 buildVisibilityMap(emit 与提示文案留在各自面板)
- 两面板 copyRowProps/pastePropsToSelected 共享 buildClipboardProps/applyClipboardProps:
  键集合 diff 后参数化(子表 b_width / 主表 b_colspan+spanOf 归一),行为不变
- createEditRow 语义相同、细节不同(子表写 b_width、主表写 b_colspan)→
  抽参数化工厂 createEditRowFactory({ moduleId, getExtra }),两面板各自传参
- 主表 groupIdOf 与 useGroupTree.groupIdOfRow 函数体逐字相同 → 改导入(别名保持调用点不变)
- 字段库 libraryFields 的过滤排序逻辑抽为 filterLibraryFields(.sort→.toSorted,
  消除 oxlint 变异告警);toggleInspector/toggleRowFlag 核心抽为 toggleFlag

行为不变;测试 184 通过(2 个既有失败与本重构无关);lint 告警 60→59(净减 1)
2026-08-28 15:22:04 +08:00
oneao 158eb3c029 refactor(module-management): 阶段一——抽取分组树推导 composable useGroupTree
- 新建 composables/useGroupTree.js:buildGroupTree/sortGroupNodesByXh/groupIdOfRow
  纯函数导出 + useGroupTree(groupsRef, rowsRef) 返回 groupTree/groupNodeMap/
  groupColumnsMap/bandMeta(统一含 maxLevel)/isDescendantGroup/groupIdOfRow
- ModuleTableEditPanel.vue:删除本地 7 份同体实现,改用 composable;
  isDescendantOf 重命名为 isDescendantGroup(两处函数体逐字相同)
- structure-tree/ModuleStructureTree.vue:同样替换;删除「与面板 bandMeta 同源」注释
  (复制关系已不成立);bandMeta 多出的 maxLevel 字段对其消费处无害
- ModuleTableEditPanel 中 watch(props.editConfig, …, { immediate: true }) 注册位置
  保持不变,仍位于 bandMeta 等 computed 之后(避免 immediate 回调 TDZ)

行为不变;测试结果与基线一致(184 通过,2 个既有失败与本重构无关)
2026-08-28 14:20:58 +08:00
oneao 61ac01075b chore: 重构前基线快照(工作区既有改动 + 重构计划文档) 2026-08-28 14:14:03 +08:00
oneao 35ca496b5f 20260827230636 2026-08-27 23:06:36 +08:00
oneao 3824af0f12 20260827173205 2026-08-27 17:32:05 +08:00