3.5 KiB
3.5 KiB
Why
系统里「启用/禁用」「菜单/按钮/接口」「数据权限档位」等枚举值以中文字面量硬编码在前端 6+ 个页面,后端虽已收敛在 common/enums.ts,但前端每个页面各自重复一份 STATUS_MAP/TYPE_MAP/DATA_SCOPE_MAP,改一处文案/颜色要改多处,且无法按租户定制展示。字典表(dict_type/dict_item)与字典管理页已存在但 seed 为空、无任何内置数据,等于「有字典能力却无字典可读」。本次把系统枚举真正字典化:内置字典 seed 预置、值受保护、前端用 useDict 读字典渲染,并让组件库支持按字典 code 声明下拉/枚举,从根上消除硬编码。
What Changes
- 数据模型:
dict_type加built_in(内置类型标记),dict_item加built_in(内置项标记)与color_type(标签色 primary/success/warning/danger/info,可空)。 - 内置字典:seed 预置 5 个系统内置字典及其字典项(值 + 中文 label + 标签色 + 排序):
common_status(启用/停用)、user_status(启用/停用/锁定)、resource_type(菜单/按钮/接口)、data_scope(全部/本部门/本部门及以下/仅本人/自定义)、login_status(成功/失败)。 - 保护规则(后端):内置类型不可删;内置项不可删、
value不可改;label/sort/color_type可改;内置类型下可新增「非内置」项(完全自由)。普通字典类型/项不受影响。 - 聚合查询接口:新增
GET /dicts一次返回全部启用字典类型及其启用字典项(按 sort 升序),供前端缓存。 - 前端字典机制:新增 dict store +
useDict(dictCode)Hook(登录后一次性拉取并缓存),提供「字典项数组 / 标签映射 / 下拉选项」三种形态。 - 组件库扩展:
ty-form/ty-search-form的 JSON Schema 字段支持dictCode(替代手写enum/enumNames自动解析下拉选项);ty-table的列支持dictCode(自动渲染标签)。 - 页面去硬编码:用户/角色/资源/组织/租户/字典/审计/登录日志等页面,删除本地
*_MAP,改为useDict读字典。http_method(请求方法)为固定标准,不进字典。
Capabilities
New Capabilities
backend/dict: 字典保护规则(内置类型/项不可删、value 不可改)+ 内置字典 seed 预置frontend/AD/dict: 前端字典驱动渲染(useDict + dict store + 组件 dictCode 支持 + 页面去硬编码)
Modified Capabilities
shared/data-model: dict_type/dict_item 新增 built_in / color_type 字段,并锚定 5 个内置枚举字典的取值集合shared/api-contract: 新增字典聚合查询接口GET /dicts
Impact
- 数据库
sys_dict_type/sys_dict_item各加列(built_in、color_type),需 Prisma migration。 - 后端
sources/sysmgr-nest:dicts/:新增保护规则校验(update/delete 时按 built_in 拦截)、新增GET /dicts聚合接口prisma/seed.ts:预置 5 个内置字典类型 + 字典项
- 前端
sources/sysmgr-admin:- 新增
src/stores/modules/dict.ts+src/composables/useDict.ts src/types/crud.ts:JsonSchemaProperty 增加dictCode、TableColumn 增加dictCodesrc/components/ty-form.vue、ty-search-form.vue、ty-table.vue:支持 dictCode 解析- 字典管理页:内置标记展示、value 保护、颜色编辑;用户/角色/资源/组织/租户/审计/登录日志页去硬编码
- 新增