admin-vben5/apps/web-antd/src/utils/dict.ts

56 lines
1.8 KiB
TypeScript
Raw Normal View History

2024-08-08 14:05:08 +08:00
import type { DictData } from '#/api/system/dict/dict-data-model';
import { dictDataInfo } from '#/api/system/dict/dict-data';
import { type Option, useDictStore } from '#/store/dict';
// todo 重复代码的封装
/**
*
*
* api的问题(abortController )
* index表单 modal drawer总共会请求三次
*/
const dictRequestCache = new Map<string, Promise<DictData[] | void>>();
export function getDict(dictName: string): DictData[] {
const { getDict, setDictInfo } = useDictStore();
// 这里拿到
const dictList = getDict(dictName);
if (
dictList.length === 0 && // 检查请求状态缓存
!dictRequestCache.has(dictName)
) {
dictRequestCache.set(
dictName,
dictDataInfo(dictName).then((resp) => {
// 缓存到store 这样就不用重复获取了
// 内部处理了push的逻辑 这里不用push
setDictInfo(dictName, resp);
// 移除请求状态缓存
dictRequestCache.delete(dictName);
}),
);
}
return dictList;
}
export function getDictOptions(dictName: string): Option[] {
const { getDictOptions, setDictInfo } = useDictStore();
const dictOptionList = getDictOptions(dictName);
if (
dictOptionList.length === 0 && // 检查请求状态缓存
!dictRequestCache.has(dictName)
) {
dictRequestCache.set(
dictName,
dictDataInfo(dictName).then((resp) => {
// 缓存到store 这样就不用重复获取了
// 内部处理了push的逻辑 这里不用push
setDictInfo(dictName, resp);
// 移除请求状态缓存
dictRequestCache.delete(dictName);
}),
);
}
return dictOptionList;
}