fix 修复 vue 类型识别问题

This commit is contained in:
ahao
2023-12-27 12:12:51 +08:00
parent 321f21c498
commit 3922c16601
19 changed files with 204 additions and 91 deletions

View File

@ -18,6 +18,16 @@ export const usePermissionStore = defineStore('permission', () => {
const topbarRouters = ref<RouteRecordRaw[]>([]);
const sidebarRouters = ref<RouteRecordRaw[]>([]);
const getRoutes = (): RouteRecordRaw[] => {
return routes.value;
};
const getSidebarRoutes = (): RouteRecordRaw[] => {
return sidebarRouters.value;
};
const getTopbarRoutes = (): RouteRecordRaw[] => {
return topbarRouters.value;
};
const setRoutes = (newRoutes: RouteRecordRaw[]): void => {
addRoutes.value = newRoutes;
routes.value = constantRoutes.concat(newRoutes);
@ -108,7 +118,20 @@ export const usePermissionStore = defineStore('permission', () => {
});
return children;
};
return { routes, setRoutes, generateRoutes, setSidebarRouters, topbarRouters, sidebarRouters, defaultRoutes };
return {
routes,
topbarRouters,
sidebarRouters,
defaultRoutes,
getRoutes,
getSidebarRoutes,
getTopbarRoutes,
setRoutes,
generateRoutes,
setSidebarRouters
};
});
// 动态路由遍历,验证是否具备权限

View File

@ -1,38 +1,53 @@
import { TagView, RouteRecordNormalized, RouteLocationNormalized } from 'vue-router';
import { RouteLocationNormalized } from 'vue-router';
export const useTagsViewStore = defineStore('tagsView', () => {
const visitedViews = ref<TagView[]>([]);
const visitedViews = ref<RouteLocationNormalized[]>([]);
const cachedViews = ref<string[]>([]);
const iframeViews = ref<TagView[]>([]);
const iframeViews = ref<RouteLocationNormalized[]>([]);
const addView = (view: TagView) => {
const getVisitedViews = (): RouteLocationNormalized[] => {
return visitedViews.value;
};
const getIframeViews = (): RouteLocationNormalized[] => {
return iframeViews.value;
};
const getCachedViews = (): string[] => {
return cachedViews.value;
};
const addView = (view: RouteLocationNormalized) => {
addVisitedView(view);
addCachedView(view);
};
const addIframeView = (view: TagView): void => {
if (iframeViews.value.some((v: TagView) => v.path === view.path)) return;
const addIframeView = (view: RouteLocationNormalized): void => {
if (iframeViews.value.some((v: RouteLocationNormalized) => v.path === view.path)) return;
iframeViews.value.push(
Object.assign({}, view, {
title: view.meta?.title || 'no-name'
})
);
};
const delIframeView = (view: TagView): Promise<TagView[]> => {
const delIframeView = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
return new Promise((resolve) => {
iframeViews.value = iframeViews.value.filter((item: TagView) => item.path !== view.path);
iframeViews.value = iframeViews.value.filter((item: RouteLocationNormalized) => item.path !== view.path);
resolve([...iframeViews.value]);
});
};
const addVisitedView = (view: TagView): void => {
if (visitedViews.value.some((v: TagView) => v.path === view.path)) return;
const addVisitedView = (view: RouteLocationNormalized): void => {
if (visitedViews.value.some((v: RouteLocationNormalized) => v.path === view.path)) return;
visitedViews.value.push(
Object.assign({}, view, {
title: view.meta?.title || 'no-name'
})
);
};
const delView = (view: TagView): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
const delView = (
view: RouteLocationNormalized
): Promise<{
visitedViews: RouteLocationNormalized[];
cachedViews: string[];
}> => {
return new Promise((resolve) => {
delVisitedView(view);
if (!isDynamicRoute(view)) {
@ -45,7 +60,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
});
};
const delVisitedView = (view: TagView): Promise<TagView[]> => {
const delVisitedView = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
return new Promise((resolve) => {
for (const [i, v] of visitedViews.value.entries()) {
if (v.path === view.path) {
@ -56,7 +71,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
resolve([...visitedViews.value]);
});
};
const delCachedView = (view?: TagView): Promise<string[]> => {
const delCachedView = (view?: RouteLocationNormalized): Promise<string[]> => {
let viewName = '';
if (view) {
viewName = view.name as string;
@ -67,7 +82,12 @@ export const useTagsViewStore = defineStore('tagsView', () => {
resolve([...cachedViews.value]);
});
};
const delOthersViews = (view: TagView): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
const delOthersViews = (
view: RouteLocationNormalized
): Promise<{
visitedViews: RouteLocationNormalized[];
cachedViews: string[];
}> => {
return new Promise((resolve) => {
delOthersVisitedViews(view);
delOthersCachedViews(view);
@ -78,15 +98,15 @@ export const useTagsViewStore = defineStore('tagsView', () => {
});
};
const delOthersVisitedViews = (view: TagView): Promise<TagView[]> => {
const delOthersVisitedViews = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
return new Promise((resolve) => {
visitedViews.value = visitedViews.value.filter((v: TagView) => {
visitedViews.value = visitedViews.value.filter((v: RouteLocationNormalized) => {
return v.meta?.affix || v.path === view.path;
});
resolve([...visitedViews.value]);
});
};
const delOthersCachedViews = (view: TagView): Promise<string[]> => {
const delOthersCachedViews = (view: RouteLocationNormalized): Promise<string[]> => {
const viewName = view.name as string;
return new Promise((resolve) => {
const index = cachedViews.value.indexOf(viewName);
@ -99,7 +119,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
});
};
const delAllViews = (): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
const delAllViews = (): Promise<{ visitedViews: RouteLocationNormalized[]; cachedViews: string[] }> => {
return new Promise((resolve) => {
delAllVisitedViews();
delAllCachedViews();
@ -109,9 +129,9 @@ export const useTagsViewStore = defineStore('tagsView', () => {
});
});
};
const delAllVisitedViews = (): Promise<TagView[]> => {
const delAllVisitedViews = (): Promise<RouteLocationNormalized[]> => {
return new Promise((resolve) => {
visitedViews.value = visitedViews.value.filter((tag: TagView) => tag.meta?.affix);
visitedViews.value = visitedViews.value.filter((tag: RouteLocationNormalized) => tag.meta?.affix);
resolve([...visitedViews.value]);
});
};
@ -123,7 +143,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
});
};
const updateVisitedView = (view: TagView): void => {
const updateVisitedView = (view: RouteLocationNormalized): void => {
for (let v of visitedViews.value) {
if (v.path === view.path) {
v = Object.assign(v, view);
@ -131,13 +151,13 @@ export const useTagsViewStore = defineStore('tagsView', () => {
}
}
};
const delRightTags = (view: TagView): Promise<TagView[]> => {
const delRightTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
return new Promise((resolve) => {
const index = visitedViews.value.findIndex((v: TagView) => v.path === view.path);
const index = visitedViews.value.findIndex((v: RouteLocationNormalized) => v.path === view.path);
if (index === -1) {
return;
}
visitedViews.value = visitedViews.value.filter((item: TagView, idx: number) => {
visitedViews.value = visitedViews.value.filter((item: RouteLocationNormalized, idx: number) => {
if (idx <= index || (item.meta && item.meta.affix)) {
return true;
}
@ -150,13 +170,13 @@ export const useTagsViewStore = defineStore('tagsView', () => {
resolve([...visitedViews.value]);
});
};
const delLeftTags = (view: TagView): Promise<TagView[]> => {
const delLeftTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
return new Promise((resolve) => {
const index = visitedViews.value.findIndex((v: TagView) => v.path === view.path);
const index = visitedViews.value.findIndex((v: RouteLocationNormalized) => v.path === view.path);
if (index === -1) {
return;
}
visitedViews.value = visitedViews.value.filter((item: TagView, idx: number) => {
visitedViews.value = visitedViews.value.filter((item: RouteLocationNormalized, idx: number) => {
if (idx >= index || (item.meta && item.meta.affix)) {
return true;
}
@ -170,7 +190,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
});
};
const addCachedView = (view: TagView): void => {
const addCachedView = (view: RouteLocationNormalized): void => {
const viewName = view.name as string;
if (!viewName) return;
if (cachedViews.value.includes(viewName)) return;
@ -179,15 +199,20 @@ export const useTagsViewStore = defineStore('tagsView', () => {
}
};
const isDynamicRoute = (view: any): boolean => {
const isDynamicRoute = (view: RouteLocationNormalized): boolean => {
// 检查匹配的路由记录中是否有动态段
return view.matched.some((m: RouteRecordNormalized) => m.path.includes(':'));
return view.matched.some((m) => m.path.includes(':'));
};
return {
visitedViews,
cachedViews,
iframeViews,
getVisitedViews,
getIframeViews,
getCachedViews,
addVisitedView,
addCachedView,
delVisitedView,
@ -205,5 +230,4 @@ export const useTagsViewStore = defineStore('tagsView', () => {
delIframeView
};
});
export default useTagsViewStore;

View File

@ -1,9 +1,9 @@
import { to } from 'await-to-js';
import defAva from '@/assets/images/profile.jpg';
import store from '@/store';
import { getToken, removeToken, setToken } from '@/utils/auth';
import { login as loginApi, logout as logoutApi, getInfo as getUserInfo } from '@/api/login';
import { LoginData } from '@/api/types';
import defAva from '@/assets/images/profile.jpg';
import store from '@/store';
export const useUserStore = defineStore('user', () => {
const token = ref(getToken());