--- name: module-management-index-重构-面板自治 overview: 重构 fms-vue 模块管理页:将 index.vue(1600 行)中散落的面板数据回写回调与业务逻辑下放到各面板组件,index 只持有 drafts/originals 两份数据,通过 v-model 与面板双向绑定,保存时统一 diff。目标是将 index.vue 精简到 500 行以内。 todos: - id: diff-foundation content: 改造 utils/dataChanges.js:diffRows 增加剔除 _ / v_ 前缀字段,抽出 stripInternalKeys 供 diffRows 与 hasUnsavedChanges 共用 status: completed - id: model-table-form-panels content: 模式 A/C 改造表格类与表单类面板:ModuleFieldsPanel、ModuleQueryConfigPanel、ModuleBasicPanel、ModuleAutoCodePanel 改 defineModel,去掉 local 副本、watch 同步与虚拟字段剥离 status: completed dependencies: - diff-foundation - id: model-designers content: 用 [subagent:code-explorer] 与 [skill:lsp-code-analysis] 定位并改造 FormDesignEditor、TableDesignEditor 及壳组件 ModuleListConfigPanel、ModuleEditPanel 为 defineModel,useStructureEditing 只换写入口 status: completed dependencies: - model-table-form-panels - id: index-rewire content: 重接 index.vue:全部面板改 v-model 双向绑定,删除 4 个 proxy 回调,新增分组引用清理、自动编码只读、i18n reconcile 三个跨面板 watch status: completed dependencies: - model-designers - id: sync-fields-down content: 将 buildSyncPlan、applySyncPlan、syncFields 迁入 ModuleFieldsPanel,同步按钮移至字段面板工具栏,index 相应删除调用与按钮 status: completed dependencies: - index-rewire - id: extract-module-tree content: 新建 useModuleTree.js 抽出模块树的加载、新增、删除、拖拽排序与右键菜单逻辑,index.vue 改为解构接入 status: completed dependencies: - sync-fields-down - id: verify-regression content: 编译校验与关键流程回归:新建模块保存、字段同步、分组增删、自动编码、i18n、模块拖拽排序、切换模块脏检查 status: completed dependencies: - extract-module-tree --- ## 用户要求 对 `fms-vue/src/views/module/module-management/index.vue`(1600 行)进行职责解耦重构: - **index.vue 只保留两个核心状态**:`drafts`(草稿数组对象)与 `originals`(基线数组对象),保存时执行一次 diff 即可。 - **各面板自治**:字段、列表、编辑、查询、自动编码、多语言、基础信息各自的编辑逻辑与数据写入,下沉到各自组件内部,通过 `v-model` 双向绑定自己那份数据,不再由父级中转。 ## 产品概述 模块管理页面(左侧模块树 + 右侧分节配置面板)的内部架构重构,属纯前端逻辑层改造,页面功能与视觉表现保持不变,仅"同步字段"按钮从顶部通栏移入字段定义面板工具栏。 ## 核心特性 - **数据所有权下沉**:7 个配置面板通过 `defineModel` 直接读写 `drafts` 中属于自己的那一份数据,父级不再提供 proxy 回调。 - **保存时统一 diff**:index.vue 保留 `drafts` / `originals` 两份快照,`handleSave` 时按主表 `diffRow`、子表 `diffRows`、i18n `buildI18nChangeRequest` 生成差异请求。 - **跨面板联动改为响应式**:分组删除清理引用、自动编码字段置只读、受管 i18n 键补齐,由事件回调改为父级 `watch` 幂等联动。 - **字段同步内聚**:`syncFields` / `buildSyncPlan` / `applySyncPlan` 整体移入 `ModuleFieldsPanel`,同步按钮随行迁至字段面板工具栏。 - **树逻辑外移**:模块树的加载、新增、删除、拖拽排序、右键菜单(约 250 行)抽为 `useModuleTree.js`。 ## 预期效果 `index.vue` 由 1600 行降至 500 行以内,仅剩编排职责(树 + 草稿加载 + 保存编排 + 3 个跨面板 watch + 模板接线);面板组件各自内聚、可独立测试。 ## 技术栈 沿用项目现有技术栈,不引入新依赖: - Vue 3 `