# 阶段一:模块管理 ## 目标 在不开发通用 `ModuleTable`、`ModuleForm` 的前提下,完成可通过页面操作验证的模块管理纵向闭环。 ## 本阶段范围 - 建立模块、字段、表单分组、选项来源和功能节点的数据库结构。 - 写入模块管理自身的种子配置。 - 复用现有通用查询、分页和事务保存接口。 - 提供手写的功能树与模块详情工作区。 - 支持模块基本信息、字段设计、表单分组、菜单绑定和功能树位置维护。 - 统一将 SQL Server `bigint` 作为字符串返回前端,避免雪花 ID 精度丢失。 ## 数据库对象 | 对象 | 用途 | | --- | --- | | `dbo.s_module` | 模块定义 | | `dbo.s_module_field` | 模块字段配置 | | `dbo.s_module_group` | 表单分组配置 | | `dbo.s_option_source` | 固定或模块查询选项来源 | | `dbo.s_option_item` | 固定选项明细 | | `dbo.s_function_node` | 目录、页面、技术分组和模块位置 | 数据库脚本位于: `fms-api/src/main/resources/db/migration/001_module_management.sql` 脚本可以重复执行,首次执行时创建配置表并写入 `s_module` 模块种子数据。 ## 页面入口 - 菜单:`系统管理 / 模块管理` - 路由:`/system/modules` 页面采用左侧功能树、右侧模块详情的桌面工作布局(不兼容移动端)。未被功能节点引用的模块统一进入“未归档模块”。详情包含: - 基本信息。 - 字段设计,字段与表单分组在同一工作区维护。 - 功能树中的菜单绑定和隐藏子模块位置。 功能树可以在页面内维护目录、页面、模块绑定和隐藏子模块。目录与页面的 `b_show_in_menu` 配置会投影到侧边栏,并与尚未迁移的静态菜单合并,避免迁移期间丢失入口。 ## 接口边界 本阶段没有新增模块管理 CRUD 接口,继续复用: - `/api/data/page` - `/api/data/loaddata` - `/api/data/saveobjt` - `/api/data/nextid` 模块、字段和分组通过一次 `saveobjt` 请求在同一事务中保存,功能树节点独立保存。删除模块时同时清理功能节点引用;存在下级功能节点时禁止直接删除。 ## 页面验收步骤 1. 使用机构 `G3HD` 登录新系统。 2. 进入“系统管理 / 模块管理”。 3. 确认能够看到内置的“模块管理”模块。 4. 打开该模块,检查基本信息、5 个字段配置和 1 个表单分组。 5. 在功能树管理中新增一个临时目录和页面节点。 6. 新建一个临时模块,填写裸查询对象名、裸保存对象名、可选业务主键字段和默认排序;页面不应出现主键策略和保存模式。 7. 为临时模块新增字段、表单分组和功能树位置并保存。 8. 将一个页面菜单绑定到临时模块,并在它下面增加隐藏子模块。 9. 重新进入临时模块,确认字段、分组和树形位置能够完整加载。 10. 修改字段标题或排序并保存,重新加载后确认修改生效。 11. 删除临时模块,确认模块、字段、分组和无下级节点的功能树引用一起删除。 12. 确认内置的 `s_module` 模块不能从页面删除。 ## 本阶段暂不包含 - 通用 `ModuleTable`。 - 通用 `ModuleForm`。 - 独立的选项来源管理页面。 - 正式模块权限内核。 - 结构化模块查询接口。 - 业务模块迁移。 这些能力在模块管理页面验证配置模型稳定后继续建设。