Files
workspace/code/fms/重构进度.md
T
2026-08-28 17:31:45 +08:00

7.7 KiB
Raw Blame History

模块管理重构进度交接报告(截至当前工作区状态)

一、整体进度

阶段 状态 提交
阶段一:useGroupTree 抽取 ✅ 完成 158eb3c0
阶段二:字段查询与共享纯函数 ✅ 完成 27752351
阶段三:index.vue 拆分 composables ✅ 完成 91237c4a
R1 清场(删遗留文件、useConfirm 合回) ✅ 完成 2dba8578
R2a 小文件 UI 归一 ✅ 完成 ce3a9d87
R2b 表格面板 UI 归一 ✅ 完成 8c506ae5
R2c 表单面板 UI 归一 ✅ 完成 76b12cc5
R3 阶段四:目录化拆分 🔄 进行中(未提交) —

R3 是当前唯一未提交的工作,工作区全部改动都属于它。

二、R3 当前进度(核心)

✅ 已完成:table-edit/ 完整拆分(测试全绿)

旧 ModuleTableEditPanel.vue(2614 行)已删除,拆为 6 个文件(均在 components/table-edit/):

新文件 行数 内容
TableEditPanel.vue 860 壳:状态、分组树推导、commitColDrag/commitBandDrag、结构树编排、快捷键
TablePreview.vue 482 多级表头预览表 + mock 行 + 拖拽落点指示
TableInspector.vue 416 列/分组带/空态三态属性面板
useTablePreviewDrag.js 113 预览表拖拽(onPreviewDragStart/Over/Drop 等)
useColumnResize.js 66 列宽拖拽(pointer capture 三件套)
edit-panels/FieldLibrary.vue 212 共享字段库(native/sortable 双模式,两编辑器共用)
edit-panels/EditDataView.vue 75 共享数据视图(工具栏 + FmsTable)
  • index.vue 已改为 import ModuleTableEditPanel from './components/table-edit/TableEditPanel.vue'
  • 测试 tests/unit/module-table-edit-panel-dnd.spec.js 的 import 已改为新路径(断言未动)
  • 验证结果:30/30 测试全绿(dnd 14 例 + tree-external-drag 3 例 + utils 13 例);lint 总数 57 < 基线 58(零新增告警,还消掉 1 个)

🔄 进行中:form-edit/ 部分拆分(半成品,未验证编译、未接 index.vue)

旧 ModuleFormEditPanel.vue(3168 行)仍在原位、未被引用改动,index.vue 仍指向它。已新建 3 个文件:

新文件 行数 状态
form-edit/useFormGrid.js 95 ✅ 完成:collectLineIndexes / rebalanceInsert / distributeLine / rebalanceRowByIds / sectionEndIndex / spanOf(纯逻辑)
form-edit/FormInspector.vue 350 ✅ 完成:属性面板(占位符/栅格宽度/textarea 高度/4 开关),全部变更经 emits 转发
form-edit/FormEditPanel.vue 2902 🔄 半成品:从 ModuleFormEditPanel.vue 复制改造的壳组件

form-edit/FormEditPanel.vue 已完成的改造(lint 零告警):

  • ✅ imports:相对路径改为 ../../,移除 PanelLeft/Right* 图标、Switch、FmsTable;新增 ./useFormGrid、./FormInspector、../edit-panels/FieldLibrary、../edit-panels/EditDataView
  • ✅ 删除本地重复定义:collectLineIndexes / rebalanceInsert / sectionEndIndex / distributeLine / rebalanceRowByIds / spanOf / TEXTAREA_HEIGHT_OPTIONS / isRowSelectedByField / libSearch / libraryFields / isFieldAdded(改为从 useFormGrid 导入或由 FieldLibrary 内部处理)
  • ✅ 模板替换:字段库 → <FieldLibrary drag-mode="sortable" :sortable="{group: libGroup, clone: libClone, filter: LIB_ADDED_FILTER, onStart: onLibDragStart, onEnd: onLibDragEnd}">;属性面板 → <FormInspector>;数据视图 → <EditDataView>
  • ✅ 注意:toggleInspector / onColspanChange / onColspanInput / onHeightChange / onPlaceholderChange 已重新加回壳组件(FormInspector 只转发事件,写 localEdit 的处理器必须留在壳里)——接手的 AI 不要再删

三、剩余工作(明确 todo)

  1. 验证 form-edit/FormEditPanel.vue 能编译(无测试覆盖表单面板,最稳妥是 pnpm build 或 vite 编译该组件;也可以先接 index.vue 后手工冒烟)
  2. 接 index.vue:ModuleFormEditPanel 的 import 改为 ./components/form-edit/FormEditPanel.vue
  3. 删除旧文件 components/ModuleFormEditPanel.vue
  4. 清理壳组件死样式(无害但冗余,仍在 FormEditPanel.vue 的 <style> 里):.mm-fdesign__lib*、.mm-fdesign__inspector*、.mm-fdesign__subhead*、.mm-fdesign__prop*、.mm-fdesign__span-control、.mm-fdesign__span-input、.mm-fdesign__toggles、.mm-fdesign__toggle-line、.mm-fdesign__delete、.mm-edit__data、.mm-panel__*(这些已迁到 FieldLibrary/FormInspector/EditDataView,删的时候只删这些,别碰 .mm-fdesign__canvas*、.mm-fdesign__section*、.mm-fdesign__field*、.mm-fdesign__drag-*、.mm-fdesign__sortable-*)
  5. pnpm test + pnpm lint 回归(验收口径:dnd spec 14 例全绿、lint 警告不新增)
  6. 提交 R3(建议 message 注明:table-edit 重组完成 + form-edit 按停损条款部分交付——FormCanvas/useFormDrag 未拆,留待下轮)

四、注意事项(易踩坑)

  • 计划停损条款:docs/module-management-code-refactor-plan.md 阶段四明确允许「完成 table-edit/ 重组 + form-edit 仅抽 useFormGrid.js」即达标。form-edit 的 FormCanvas(画布模板)与 useFormDrag(拖拽状态机 createDragBadge/updateDragIntent/rowRectAt)交织最深且无测试保护,建议保持现状、在交付说明记录,不要贸然继续拆。
  • FieldLibrary 双模式:表格面板用 drag-mode="native"(原生 HTML5 DnD),表单面板用 drag-mode="sortable"(vuedraggable + sortable 配置注入);两面板原字段库样式一致,已合并进 FieldLibrary。
  • 测试基线:module-table-edit-panel-dnd.spec.js 只 stub 了 draggable,依赖壳组件真实渲染 ModuleStructureTree(.mst-node 类),壳组件 import 路径别改错(../structure-tree/ModuleStructureTree.vue)。
  • 无关改动别动:工作区还有 fms-api/*(Java 后端多文件)、DefaultLayout.vue、dashboard/index.vue 的未提交改动,与本重构无关,提交时只 stage module-management 相关文件。
  • R2c 遗留约定:ui 组件覆写样式用 .button / .input-wrapper 后缀(保证 specificity 覆盖 ui 默认尺寸),新文件里已沿用。

五、当前未提交改动清单

 D components/ModuleTableEditPanel.vue          (已删,table-edit 顶替)
 M index.vue                                    (表格 import 已改新路径)
 M tests/unit/module-table-edit-panel-dnd.spec.js(仅 import 路径,断言未动)
?? components/table-edit/   (6 个新文件,完成)
?? components/form-edit/    (useFormGrid/FormInspector 完成,FormEditPanel 半成品)
?? components/edit-panels/  (FieldLibrary/EditDataView,完成)

(另有 fms-api/、DefaultLayout.vue、dashboard/index.vue 的无关改动,勿碰。)