refactor: dictOptions代码重构

This commit is contained in:
dap
2025-07-04 14:24:58 +08:00
parent 8c2718a49e
commit 7535bd6096
2 changed files with 12 additions and 37 deletions

View File

@@ -4,6 +4,10 @@
- Modal/Drawer中使用VxeTable tooltip需要设置更高的z-index 防止被遮挡 - Modal/Drawer中使用VxeTable tooltip需要设置更高的z-index 防止被遮挡
**OTHERS**
- 移除`getDict`方法
# 1.4.1 # 1.4.1
**FEATURES** **FEATURES**

View File

@@ -3,20 +3,17 @@ import { dictDataInfo } from '#/api/system/dict/dict-data';
import { useDictStore } from '#/store/dict'; import { useDictStore } from '#/store/dict';
/** /**
* 抽取公共逻辑的基础方法 * 一般是Select, Radio, Checkbox等组件使用
* @warning 注意内部为异步实现 所以不要写这种`getDictOptions()[0]`的代码 会获取不到
* @warning 需要保持`formatNumber`统一 在所有调用地方需要一致 不能出现A处为string B处为number
*
* @param dictName 字典名称 * @param dictName 字典名称
* @param dataGetter 获取字典数据的函数
* @param formatNumber 是否格式化字典value为number类型 * @param formatNumber 是否格式化字典value为number类型
* @returns 数据 * @returns Options数组
*/ */
function fetchAndCacheDictData<T>( export function getDictOptions(dictName: string, formatNumber = false) {
dictName: string, const { dictRequestCache, setDictInfo, getDictOptions } = useDictStore();
dataGetter: () => T[], const dataList = getDictOptions(dictName);
formatNumber = false,
): T[] {
const { dictRequestCache, setDictInfo } = useDictStore();
// 有调用方决定如何获取数据
const dataList = dataGetter();
// 检查请求状态缓存 // 检查请求状态缓存
if (dataList.length === 0 && !dictRequestCache.has(dictName)) { if (dataList.length === 0 && !dictRequestCache.has(dictName)) {
@@ -54,29 +51,3 @@ function fetchAndCacheDictData<T>(
} }
return dataList; return dataList;
} }
/**
* 这里是提供给渲染标签使用的方法
* @deprecated 使用getDictOptions代替 于下个版本删除
* @param dictName 字典名称
* @returns 字典信息
*/
export function getDict(dictName: string) {
const { getDictOptions } = useDictStore();
return fetchAndCacheDictData(dictName, () => getDictOptions(dictName));
}
/**
* 一般是Select, Radio, Checkbox等组件使用
* @param dictName 字典名称
* @param formatNumber 是否格式化字典value为number类型
* @returns Options数组
*/
export function getDictOptions(dictName: string, formatNumber = false) {
const { getDictOptions } = useDictStore();
return fetchAndCacheDictData(
dictName,
() => getDictOptions(dictName),
formatNumber,
);
}