liuyun 8743e68451 chore: archive dict-driven-enums change + sync specs to main specs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-11 14:44:56 +08:00

36 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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 保护、颜色编辑;用户/角色/资源/组织/租户/审计/登录日志页去硬编码