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 || '' })); };