liuyun 7a5af292fb chore: track dict-driven-enums change
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-11 14:30:50 +08:00

3.5 KiB
Raw Blame History

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 增加 dictCode
    • src/components/ty-form.vue、ty-search-form.vue、ty-table.vue:支持 dictCode 解析
    • 字典管理页:内置标记展示、value 保护、颜色编辑;用户/角色/资源/组织/租户/审计/登录日志页去硬编码