# 字典系统使用指南
## 概述
字典系统是为了解决项目中数据字典不统一、硬编码问题而设计的统一管理方案。系统支持静态字典(本地定义)和动态字典(API获取),并提供了便捷的访问接口。
## 系统架构
字典系统由以下几个部分组成:
1. **工具类** (`src/utils/dict.ts`) - 提供静态字典数据和工具函数
2. **Store** (`src/stores/dict.ts`) - 管理动态字典数据,与现有Pinia架构集成
3. **API服务** (`src/service/api/dict.ts`) - 提供动态字典获取接口
4. **组件示例** - 展示如何在组件中使用字典系统
## 使用方法
### 1. 在组件中使用字典
```typescript
```
### 2. 在模板中使用
```vue
选中值: {{ dictStore.getDictLabel('professionalCategory', selectedValue) }}
```
### 3. 静态字典工具函数
```typescript
// 获取字典项列表
const items = getDictItems('professionalCategory')
// 获取字典标签
const label = getDictLabel('professionalCategory', 'science')
// 获取字典值
const value = getDictValue('professionalCategory', '理工类')
// 获取字典颜色
const color = getDictColor('professionalCategory', 'science')
// 获取字典项对象
const item = getDictItem('professionalCategory', 'science')
```
### 4. 动态字典管理
```typescript
// 加载动态字典
await dictStore.loadDynamicDicts()
// 加载特定类型的动态字典
await dictStore.loadDynamicDicts(['dynamic_type1', 'dynamic_type2'])
// 手动设置动态字典
dictStore.setDynamicDict('custom_type', [
{ label: '自定义项1', value: 'custom1' },
{ label: '自定义项2', value: 'custom2' }
])
// 清空动态字典
dictStore.clearDynamicDicts()
```
## 字典数据结构
字典项接口定义:
```typescript
interface DictItem {
label: string // 显示标签
value: string | number // 实际值
disabled?: boolean // 是否禁用
color?: string // 颜色值
order?: number // 排序
[key: string]: any // 扩展属性
}
```
## 静态字典类型
目前系统已内置以下静态字典:
- `professionalCategory` - 专业类别
- `educationalLevel` - 学历层次
- `provinces` - 省份
- `subjectList` - 科目列表
- `gender` - 性别
- `status` - 状态
- `type` - 类型
## 动态字典API
动态字典通过API获取,支持以下接口:
- `GET /dict/list` - 获取字典列表
- `GET /dict/type/{type}` - 获取指定类型的字典
## 在现有组件中集成
以ScoreForm.vue为例,展示了如何将现有硬编码的选项替换为字典系统:
1. 导入字典Store
2. 使用computed属性获取字典项
3. 在模板中使用字典数据
## 扩展字典类型
如需添加新的静态字典类型:
1. 在 `src/utils/dict.ts` 中的 `staticDicts` 对象中添加新类型
2. 确保遵循 `DictItem[]` 的数据结构
如需添加新的动态字典类型:
1. 在后端API中提供相应的字典数据接口
2. 在前端调用 `dictStore.loadDynamicDicts()` 时指定类型
## 最佳实践
1. **优先使用字典系统** - 避免在代码中硬编码选项数据
2. **统一管理** - 所有字典数据通过字典系统统一管理
3. **性能优化** - 字典数据通常在应用初始化时加载一次,后续直接使用
4. **扩展性** - 支持静态和动态字典,满足不同业务场景需求
5. **类型安全** - 提供完整的TypeScript类型定义
## 注意事项
1. 动态字典加载失败时,系统会继续使用静态字典数据
2. 字典数据在应用生命周期内会被缓存,避免重复请求
3. 在组件中使用字典前,确保字典数据已加载完成
4. 动态字典会覆盖同名的静态字典数据