This commit is contained in:
Ray.Hao
2025-03-31 20:23:12 +08:00
5 changed files with 39 additions and 1 deletions

View File

@@ -388,6 +388,32 @@ export default defineMock([
params: null,
},
},
{
path: "drag",
component: "demo/drag",
name: "Drag",
meta: {
title: "拖拽组件",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
{
path: "text-scroll",
component: "demo/text-scroll",
name: "TextScroll",
meta: {
title: "滚动文本",
icon: "",
hidden: false,
keepAlive: true,
alwaysShow: false,
params: null,
},
},
],
},
{

View File

@@ -4,8 +4,10 @@ import DictAPI, { type DictItemOption } from "@/api/system/dict.api";
export const useDictStore = defineStore("dict", () => {
// 字典数据缓存
const dictCache = useStorage<Record<string, DictItemOption[]>>("dict_cache", {});
// 请求队列(防止重复请求)
const requestQueue: Record<string, Promise<void>> = {};
/**
* 缓存字典数据
* @param dictCode 字典编码
@@ -14,6 +16,7 @@ export const useDictStore = defineStore("dict", () => {
const cacheDictItems = (dictCode: string, data: DictItemOption[]) => {
dictCache.value[dictCode] = data;
};
/**
* 加载字典数据(如果缓存中没有则请求)
* @param dictCode 字典编码
@@ -29,6 +32,7 @@ export const useDictStore = defineStore("dict", () => {
}
await requestQueue[dictCode];
};
/**
* 获取字典项列表
* @param dictCode 字典编码
@@ -37,12 +41,14 @@ export const useDictStore = defineStore("dict", () => {
const getDictItems = (dictCode: string): DictItemOption[] => {
return dictCache.value[dictCode] || [];
};
/**
* 清空字典缓存
*/
const clearDictCache = () => {
dictCache.value = {};
};
return {
loadDictItems,
getDictItems,

View File

@@ -97,6 +97,7 @@ export const useUserStore = defineStore("user", () => {
clearToken();
usePermissionStoreHook().resetRouter();
useDictStoreHook().clearDictCache();
userInfo.value = {} as UserInfo;
resolve();
});
}

View File

@@ -36,6 +36,7 @@ declare module "vue" {
ElIcon: (typeof import("element-plus/es"))["ElIcon"];
ElImage: (typeof import("element-plus/es"))["ElImage"];
ElInput: (typeof import("element-plus/es"))["ElInput"];
ElInputTag: (typeof import("element-plus/es"))["ElInputTag"];
ElInputNumber: (typeof import("element-plus/es"))["ElInputNumber"];
ElLink: (typeof import("element-plus/es"))["ElLink"];
ElMenu: (typeof import("element-plus/es"))["ElMenu"];

View File

@@ -94,7 +94,8 @@ export default defineConfig(({ mode }: ConfigEnv) => {
"pinia",
"axios",
"@vueuse/core",
"sortablejs",
"codemirror-editor-vue3",
"default-passive-events",
"exceljs",
"path-to-regexp",
"echarts/core",
@@ -103,8 +104,10 @@ export default defineConfig(({ mode }: ConfigEnv) => {
"echarts/components",
"vue-i18n",
"nprogress",
"sortablejs",
"qs",
"path-browserify",
"@stomp/stompjs",
"@element-plus/icons-vue",
"element-plus/es",
"element-plus/es/locale/lang/en",
@@ -139,6 +142,7 @@ export default defineConfig(({ mode }: ConfigEnv) => {
"element-plus/es/components/image-viewer/style/index",
"element-plus/es/components/image/style/index",
"element-plus/es/components/input-number/style/index",
"element-plus/es/components/input-tag/style/index",
"element-plus/es/components/input/style/index",
"element-plus/es/components/link/style/index",
"element-plus/es/components/loading/style/index",