Files
xl-root/src/pinia/SystemStore/index.js

77 lines
2.2 KiB
JavaScript
Raw Normal View History

2025-02-27 14:38:47 +08:00
import {defineStore} from "pinia";
2025-05-27 19:01:22 +08:00
import {reactive, ref} from "vue";
2025-03-10 19:01:21 +08:00
import router from "../../router/index.js";
import generateRouter from "../../router/generateRouter.js";
2025-04-19 15:28:32 +08:00
import Api from "../../api/index.js";
2025-02-27 14:38:47 +08:00
export const useSystemStore = defineStore("SystemStore", () => {
2025-03-07 17:35:39 +08:00
const isRoot = ref(false);
2025-03-10 19:01:21 +08:00
const RoutesTemp = ref([]);
2025-05-27 19:01:22 +08:00
const NOW_ROUTER = ref(null);
const NOW_ROUTER_QUERY = reactive({});
2025-03-10 19:01:21 +08:00
const installRoute = async () => {
const routes = generateRouter(RoutesTemp.value);
router.removeRoute('home');
router.addRoute({
path: '/home',
name: 'home',
component: () => import('../../pages/layout/index.vue'),
redirect: `/home/${routes[0].path}`,
children: routes
});
await router.replace(router.currentRoute.value.fullPath);
}
2025-03-17 17:41:02 +08:00
const setRouter = async (_isRoot) => {
isRoot.value = _isRoot;
2025-03-10 19:01:21 +08:00
RoutesTemp.value.length = 0;
2025-04-29 19:43:06 +08:00
2025-03-10 19:01:21 +08:00
// 请求资源 mockRoutes
2025-04-29 19:43:06 +08:00
if (isRoot.value) { // root
const {data} = await Api.admin.getMenu();
RoutesTemp.value.push(...data);
} else {
const {data} = await Api.merchant.getMenu();
RoutesTemp.value.push(...data);
}
2025-03-10 19:01:21 +08:00
await installRoute();
}
2025-03-17 17:41:02 +08:00
const clearRouter = async () => {
const routes = generateRouter(RoutesTemp.value);
RoutesTemp.value.length = 0;
router.removeRoute('home');
router.addRoute({
path: '/home',
name: 'home',
component: () => import('../../pages/layout/index.vue'),
redirect: `/home/${routes[0].path}`,
children: []
});
2025-04-21 10:30:45 +08:00
isRoot.value = false;
2025-03-17 17:41:02 +08:00
await router.replace(router.currentRoute.value.fullPath);
}
2025-02-27 14:38:47 +08:00
return {
2025-03-10 19:01:21 +08:00
isRoot,
RoutesTemp,
2025-05-27 19:01:22 +08:00
NOW_ROUTER,
NOW_ROUTER_QUERY,
2025-03-10 19:01:21 +08:00
setRouter,
installRoute,
2025-03-17 17:41:02 +08:00
clearRouter,
2025-03-10 19:01:21 +08:00
}
}, {
persist: {
key: 'SystemStore',
storage: localStorage,
afterHydrate: (val) => {
val.store.installRoute && val.store.installRoute();
},
2025-05-27 19:01:22 +08:00
pick: ['RoutesTemp', 'NOW_ROUTER', 'NOW_ROUTER_QUERY'],
2025-02-27 14:38:47 +08:00
}
});