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
	 ahao
					ahao