--- name: module-management-full-implementation overview: 基于新数据库结构.md和开发规范.md完整实现模块管理页面。左侧模块树+右侧7个子Tab,子Tab操作按钮靠左。不创建独立的service文件,数据加载/保存逻辑直接写在index.vue中。 todos: - id: create-main-page content: 重写 index.vue 主页面:左侧 a-tree 模块树 + 右侧 a-tabs 布局,编写全部数据加载/保存逻辑(loadDataApi、saveObjectApi、diff、typeFromSqlType) status: completed - id: create-basic-panel content: 使用 [skill:antdv-next] 创建 ModuleBasicPanel.vue 基本信息表单,根据模块类型控制字段可见性,支持新增和编辑 status: completed dependencies: - create-main-page - id: create-fields-panel content: 创建 ModuleFieldsPanel.vue 字段定义面板,FmsTable 展示字段列表,实现「同步字段」功能,操作按钮靠左 status: completed dependencies: - create-main-page - id: create-list-edit-query-panels content: 创建 ModuleListConfigPanel.vue、ModuleEditConfigPanel.vue、ModuleQueryConfigPanel.vue 三个配置面板,FmsTable 展示数据,操作按钮靠左 status: completed dependencies: - create-main-page - id: create-group-manager content: 创建 FieldGroupManager.vue 共用分组管理弹窗,a-modal + a-tree 管理分组树增删改 status: completed dependencies: - create-list-edit-query-panels - id: create-powers-i18n-panels content: 创建 ModulePowersPanel.vue 权限配置面板和 ModuleI18nPanel.vue 多语言面板,FmsTable 管理数据,操作按钮靠左 status: completed dependencies: - create-main-page --- ## 用户需求 根据新数据库结构.md和开发规范.md,完整实现模块管理页面。当前页面是空占位,需要构建左侧模块树+右侧子Tab布局。 ## 核心功能 ### 主页面布局 - 左侧:使用 `a-tree` 展示模块树(directory/page/data 三级),选中节点加载详情 - 右侧:使用 `a-tabs` 展示子Tab,根据选中模块的 `b_module_type` 动态显示对应Tab ### 模块类型与Tab对应 | 模块类型 | 可见Tab | | --- | --- | | directory | 基本信息、权限配置、多语言 | | page | 基本信息、权限配置、多语言 | | data | 基本信息、字段定义、列表配置、编辑配置、查询配置、权限配置、多语言 | ### 各子Tab功能 1. **基本信息**:`a-form` 编辑 `b_module` 核心字段(b_code、b_name、b_module_type、b_parent_id、b_route、b_viewtable、b_savetable、b_keyfield、b_orderfield、b_canmenu、b_canuse、b_xh),根据模块类型控制字段可见性。新增模块先调 `nextIdApi` 2. **字段定义**:`FmsTable` 展示 `b_module_field`,不可手工增删行。提供「同步字段」按钮调用 `describeApi` 获取 `b_viewtable` 列结构并与已有字段合并(保留已有配置、追加新列、标记已删列为不可用)。可编辑 `b_name`、`b_type`、`b_default_value`、`b_options`、`b_canuse` 3. **列表配置**:`FmsTable` 展示 `b_module_field_list`,支持新增/删除行。可选字段来自 `b_module_field`(b_canuse=1)。`FieldGroupManager` 弹窗管理 `b_module_field_group` 分组树 4. **编辑配置**:`FmsTable` 展示 `b_module_field_edit`,支持新增/删除行。同样通过 `FieldGroupManager` 管理分组 5. **查询配置**:`FmsTable` 展示 `b_module_field_query`(b_component、b_operator 下拉选择),支持新增/删除行 6. **权限配置**:`FmsTable` 展示 `b_module_power`(b_code、b_name),支持新增/删除行 7. **多语言**:`FmsTable` 展示 `b_i18n`(b_key、b_locale、b_value),支持新增/删除行 ### 操作按钮排列 所有子Tab面板内,新增、删除、保存等操作按钮**靠左对齐**(`justify-content: flex-start`) ### 数据架构(不创建独立 service 文件) - `index.vue` 承担全部数据职责:加载模块树、加载完整配置、维护草稿、对比diff、调用 `saveObjectApi` - 子组件只通过 `props` 接收数据,通过 `emit('update', newRows)` 上报变更 - `index.vue` 保存流程:`diffRows(draft, original)` → `allocateTemporaryIds` → `saveObjectApi` ## 技术方案 ### 实现策略 **数据流集中管理**:`index.vue` 作为数据中枢,直接调用 `loadDataApi`、`saveObjectApi`、`nextIdApi`、`describeApi` 等通用接口。所有子组件是无状态的展示/编辑组件,仅通过 props/emit 与父组件通信。 ### 数据流 ``` index.vue 选中模块 → loadDataApi 加载 b_module + 各子表(Promise.all) → cloneData 生成 originals(原始快照)和 drafts(编辑草稿) → 各子组件接收 drafts 对应部分,用户编辑后 emit('update', newRows) → index.vue 更新对应 draft → 用户点击「保存」 → 遍历各子表 diffRows(draft, original) → allocateTemporaryIds 分配临时ID → 构建 saveObjectApi 请求数组 → 提交保存 → 重新加载刷新 originals ``` ### 关键设计决策 1. **无独立 service 文件**:所有 `loadDataApi`/`saveObjectApi` 调用直接写在 `index.vue` 的 `