字典数据
这篇解决什么
下拉和表格状态色从哪来、新类型要改哪三处。读完用 DICT_TYPE + getDictOptions,不要在页面里写死 0 启用 / 1 停用。
登录守卫会拉一次 /system/dict-data/simple-list 填进 useDictStore。请求封装见 请求封装。
示意图:先缓存,再按类型取值。改库后要刷新页面。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 类型 / 数据 API | /system/dict-type、/system/dict-data | ruoyi-office/yudao-module-system/.../DictDataController.java |
| 表 | 类型与数据都忽略租户 | @TableName("system_dict_type")、system_dict_data |
| 常量 | 字符串 type,不要手写散串 | ruoyi-office-vben/packages/constants/src/dict-enum.ts |
| 读取 | getDictOptions / getDictLabel | packages/effects/hooks/src/use-dict.ts |
| 标签 | 列表、表单 | apps/web-antd/src/components/dict-tag/ |
| 管理页 | 字典维护 | apps/web-antd/src/views/system/dict/ |
getDictOptions(DICT_TYPE.COMMON_STATUS, 'number') 的第二参决定 value 类型。后端常返回数字状态,不转 number 时选中对不上。
表格用 cellRender: { name: 'CellDict', props: { type: DICT_TYPE.xxx } }。实现读的是 props.type,不是注释里的 dictType。
新字典:增量 SQL 进 system_dict_type / system_dict_data,再在 DICT_TYPE 加一项,页面才引用。只改前端常量、库里没有 type,下拉是空的。
DictTypeDO / DictDataDO 带 @TenantIgnore。字典是全库一份,不要按租户各写一套启用停用。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
dictType | 类型字符串,如 iot_device_state | system_dict_data |
value / label | 存库值与展示 | DictDataDO |
colorType / cssClass | 标签颜色 | DictTag |
缓存只在进系统时拉一次
守卫里 setDictCacheByApi(getSimpleDictDataList)。管理页改了字典,已打开的浏览器仍用旧缓存,刷新或重新登录。
数字状态显式传 number
COMMON_STATUS、多数业务状态用 'number'。字符串类型(部分组织类型)才用默认 'string'。
java
@RequestMapping("/system/dict-data")
public class DictDataController { }
@TableName("system_dict_data")
public class DictDataDO extends BaseDO { }