diff --git a/src/api/system/dict.ts b/src/api/system/dict.ts new file mode 100644 index 00000000..ed29b7df --- /dev/null +++ b/src/api/system/dict.ts @@ -0,0 +1,180 @@ +import request from "@/utils/request"; + +const DICT_BASE_URL = "/api/v1/dict"; + +const DictAPI = { + /** + * 获取字典分页列表 + * + * @param queryParams 查询参数 + * @returns 字典分页结果 + */ + getPage(queryParams: DictPageQuery) { + return request>({ + url: `${DICT_BASE_URL}/page`, + method: "get", + params: queryParams, + }); + }, + + /** + * 获取字典表单数据 + * + * @param id 字典ID + * @returns 字典表单数据 + */ + getFormData(id: number) { + return request>({ + url: `${DICT_BASE_URL}/${id}/form`, + method: "get", + }); + }, + + /** + * 新增字典 + * + * @param data 字典表单数据 + */ + add(data: DictForm) { + return request({ + url: `${DICT_BASE_URL}`, + method: "post", + data: data, + }); + }, + + /** + * 修改字典 + * + * @param id 字典ID + * @param data 字典表单数据 + */ + update(id: number, data: DictForm) { + return request({ + url: `${DICT_BASE_URL}/${id}`, + method: "put", + data: data, + }); + }, + + /** + * 删除字典 + * + * @param ids 字典ID,多个以英文逗号(,)分隔 + */ + deleteByIds(ids: string) { + return request({ + url: `${DICT_BASE_URL}/${ids}`, + method: "delete", + }); + }, + + /** + * 获取字典列表 + * + * @returns 字典列表 + */ + getList() { + return request({ + url: `${DICT_BASE_URL}/list`, + method: "get", + }); + }, +}; + +export default DictAPI; + +/** + * 字典查询参数 + */ +export interface DictPageQuery extends PageQuery { + /** + * 关键字(字典名称/编码) + */ + keywords?: string; + + /** + * 字典状态(1:启用,0:禁用) + */ + status?: number; +} + +/** + * 字典分页对象 + */ +export interface DictPageVO { + /** + * 字典ID + */ + id: number; + /** + * 字典名称 + */ + name: string; + /** + * 字典编码 + */ + dictCode: string; + /** + * 字典状态(1:启用,0:禁用) + */ + status: number; +} + +/** + * 字典 + */ +export interface DictForm { + /** + * 字典ID + */ + id?: number; + /** + * 字典名称 + */ + name?: string; + /** + * 字典编码 + */ + dictCode?: string; + /** + * 字典状态(1-启用,0-禁用) + */ + status?: number; + /** + * 备注 + */ + remark?: string; +} + +/** + * 字典数据项分页VO + * + * @description 字典数据分页对象 + */ +export interface DictVO { + /** 字典名称 */ + name: string; + + /** 字典编码 */ + dictCode: string; + + /** 字典数据集合 */ + dictDataList: DictData[]; +} + +/** + * 字典数据 + * + * @description 字典数据 + */ +export interface DictData { + /** 字典数据值 */ + value: string; + + /** 字典数据标签 */ + label: string; + + /** 标签类型 */ + tagType: string; +} diff --git a/src/components/Dictionary/DictLabel.vue b/src/components/Dict/DictLabel.vue similarity index 51% rename from src/components/Dictionary/DictLabel.vue rename to src/components/Dict/DictLabel.vue index 7aff7778..e3862cc9 100644 --- a/src/components/Dictionary/DictLabel.vue +++ b/src/components/Dict/DictLabel.vue @@ -8,9 +8,8 @@ diff --git a/src/components/Dictionary/index.vue b/src/components/Dictionary/index.vue deleted file mode 100644 index 325337ee..00000000 --- a/src/components/Dictionary/index.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - diff --git a/src/store/modules/dict.ts b/src/store/modules/dict.ts new file mode 100644 index 00000000..f87ec5b5 --- /dev/null +++ b/src/store/modules/dict.ts @@ -0,0 +1,41 @@ +import { store } from "@/store"; +import DictionaryAPI, { type DictVO, type DictData } from "@/api/system/dict"; + +export const useDictStore = defineStore("dict", () => { + const dictionary = useStorage>("dictionary", {}); + + const setDictionary = (dict: DictVO) => { + dictionary.value[dict.dictCode] = dict.dictDataList; + }; + + const loadDictionaries = async () => { + const dictList = await DictionaryAPI.getList(); + dictList.forEach(setDictionary); + }; + + const getDictionary = (dictCode: string): DictData[] => { + return dictionary.value[dictCode] || []; + }; + + const clearDictionaryCache = () => { + dictionary.value = {}; + }; + + const updateDictionaryCache = async () => { + clearDictionaryCache(); // 先清除旧缓存 + await loadDictionaries(); // 重新加载最新字典数据 + }; + + return { + dictionary, + setDictionary, + loadDictionaries, + getDictionary, + clearDictionaryCache, + updateDictionaryCache, + }; +}); + +export function useDictStoreHook() { + return useDictStore(store); +} diff --git a/src/utils/cache.ts b/src/utils/cache.ts deleted file mode 100644 index 2a3b8c53..00000000 --- a/src/utils/cache.ts +++ /dev/null @@ -1,79 +0,0 @@ -const DEFAULT_CACHE_EXPIRY_TIME = 5 * 60 * 1000; // 默认缓存有效期为5分钟 - -/** - * 通用缓存工具类 - */ -class Cache { - private cachePrefix: string; - - constructor(prefix: string = "cache_") { - this.cachePrefix = prefix; - } - - /** - * 设置缓存 - * - * @param key 缓存的键 - * @param data 缓存的数据 - * @param expiryTime 缓存有效期(毫秒),默认5分钟 - */ - setCache( - key: string, - data: any, - expiryTime: number = DEFAULT_CACHE_EXPIRY_TIME - ) { - const expiryTimestamp = new Date().getTime() + expiryTime; - const cacheKey = this.cachePrefix + key; - const cacheData = { data, expiryTimestamp }; - - localStorage.setItem(cacheKey, JSON.stringify(cacheData)); - } - - /** - * 获取缓存 - * - * @param key 缓存的键 - * @returns 如果缓存有效则返回缓存的数据,否则返回 null - */ - getCache(key: string) { - const cacheKey = this.cachePrefix + key; - const cached = localStorage.getItem(cacheKey); - - if (cached) { - const { data, expiryTimestamp } = JSON.parse(cached); - const now = new Date().getTime(); - - // 如果缓存未过期,返回数据 - if (now < expiryTimestamp) { - return data; - } else { - // 如果缓存过期,移除缓存 - localStorage.removeItem(cacheKey); - } - } - return null; - } - - /** - * 移除缓存 - * - * @param key 缓存的键 - */ - removeCache(key: string) { - const cacheKey = this.cachePrefix + key; - localStorage.removeItem(cacheKey); - } - - /** - * 清空当前前缀下的所有缓存 - */ - clearCache() { - for (const key in localStorage) { - if (key.startsWith(this.cachePrefix)) { - localStorage.removeItem(key); - } - } - } -} - -export default Cache; diff --git a/src/utils/requestCache.ts b/src/utils/requestCache.ts deleted file mode 100644 index c3ed9a90..00000000 --- a/src/utils/requestCache.ts +++ /dev/null @@ -1,4 +0,0 @@ -// 创建一个共享的 requestCache -const requestCache = new Map>(); - -export default requestCache; diff --git a/src/views/demo/dict.vue b/src/views/demo/dictionary.vue similarity index 53% rename from src/views/demo/dict.vue rename to src/views/demo/dictionary.vue index 41191914..da817faf 100644 --- a/src/views/demo/dict.vue +++ b/src/views/demo/dictionary.vue @@ -2,12 +2,13 @@