2022-01-03 22:20:10 +08:00
|
|
|
import type { Router } from 'vue-router';
|
|
|
|
import { defineStore } from 'pinia';
|
|
|
|
import { fetchUserRoutes } from '@/service';
|
2022-01-06 11:22:14 +08:00
|
|
|
import { transformAuthRouteToMenu, transformAuthRoutesToVueRoutes } from '@/utils';
|
2022-01-06 02:00:42 +08:00
|
|
|
import type { GlobalMenuOption } from '@/interface';
|
2022-01-03 22:20:10 +08:00
|
|
|
|
2022-01-16 20:13:11 +08:00
|
|
|
interface RouteState {
|
2022-01-03 22:20:10 +08:00
|
|
|
/** 是否添加过动态路由 */
|
2022-01-16 20:13:11 +08:00
|
|
|
isAddedDynamicRoute: boolean;
|
2022-01-11 08:22:31 +08:00
|
|
|
/** 菜单 */
|
2022-01-16 20:13:11 +08:00
|
|
|
menus: GlobalMenuOption[];
|
2022-01-03 22:20:10 +08:00
|
|
|
}
|
|
|
|
|
2022-01-16 20:13:11 +08:00
|
|
|
export const useRouteStore = defineStore('route-store', {
|
|
|
|
state: (): RouteState => ({
|
|
|
|
isAddedDynamicRoute: false,
|
|
|
|
menus: []
|
|
|
|
}),
|
|
|
|
actions: {
|
|
|
|
/**
|
|
|
|
* 初始化动态路由
|
|
|
|
* @param router - 路由实例
|
|
|
|
*/
|
|
|
|
async initDynamicRoute(router: Router) {
|
|
|
|
const { data } = await fetchUserRoutes();
|
|
|
|
if (data) {
|
|
|
|
this.menus = transformAuthRouteToMenu(data.routes);
|
2022-01-03 22:20:10 +08:00
|
|
|
|
2022-01-16 20:13:11 +08:00
|
|
|
const vueRoutes = transformAuthRoutesToVueRoutes(data.routes);
|
|
|
|
vueRoutes.forEach(route => {
|
|
|
|
router.addRoute(route);
|
|
|
|
});
|
2022-01-06 02:00:42 +08:00
|
|
|
|
2022-01-16 20:13:11 +08:00
|
|
|
this.isAddedDynamicRoute = true;
|
|
|
|
}
|
2022-01-06 02:00:42 +08:00
|
|
|
}
|
2022-01-03 22:20:10 +08:00
|
|
|
}
|
|
|
|
});
|