dict.js
2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import globalConfig from '@/common/config/global';
import cache from '@/common/utils/cache';
import { useUserStore } from '@/pinia/user';
/**
* 内部辅助函数:获取完整字典数据(优先从userStore,其次缓存)
* @returns {Array} 字典数组
*/
const getDictData = () => {
const userStore = useUserStore();
// 优先取userStore中的字典,无则从缓存取,兜底空数组
return userStore.dictData || cache.get(globalConfig.cache.dictDataKey) || [];
};
/**
* 获取指定dictType的所有字典项
* @param {string} dictType 字典类型(如:ai_image_status)
* @returns {Array} 对应字典类型的[{value, label, ...}]数组
*/
export const getDictList = (dictType) => {
if (!dictType) return [];
const dictData = getDictData();
// 过滤时增加空值保护,避免filter报错
return Array.isArray(dictData) ? dictData.filter(item => item?.dictType === dictType) : [];
};
/**
* 根据dictType和value获取对应的label
* @param {string} dictType 字典类型
* @param {string|number} value 字典值
* @returns {string} 对应的label(未找到返回空字符串)
*/
export const getDictLabel = (dictType, value) => {
if (!dictType || value === undefined || value === null) return '';
const dictData = getDictData();
if (!Array.isArray(dictData)) return '';
const targetItem = dictData.find(
item => item?.dictType === dictType && String(item?.value) === String(value)
);
return targetItem?.label || '';
};
/**
* 根据dictType和label获取对应的value
* @param {string} dictType 字典类型
* @param {string} label 字典标签
* @returns {string} 对应的value(未找到返回空字符串)
*/
export const getDictValue = (dictType, label) => {
if (!dictType || !label) return '';
const dictData = getDictData();
if (!Array.isArray(dictData)) return '';
const targetItem = dictData.find(
item => item?.dictType === dictType && item?.label === label
);
return targetItem?.value || '';
};
/**
* 获取指定dictType的字典项,仅返回{value, label}结构的简化数组
* @param {string} dictType 字典类型
* @returns {Array} 简化后的[{value, label}]数组
*/
export const getDictSimpleList = (dictType) => {
return getDictList(dictType).map(item => ({
value: item.value || '',
label: item.label || ''
}));
};