fix 修复 vue 类型识别问题
This commit is contained in:
@ -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
|
||||
};
|
||||
});
|
||||
|
||||
// 动态路由遍历,验证是否具备权限
|
||||
|
@ -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;
|
||||
|
@ -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());
|
||||
|
Reference in New Issue
Block a user