|
@@ -1,83 +1,109 @@
|
|
|
-import { defineStore } from 'pinia'
|
|
|
|
|
-import loginApi from '@/api/login'
|
|
|
|
|
-import tool from '@/utils/tool'
|
|
|
|
|
-import router from '@/router'
|
|
|
|
|
-import webRouter from '@/router/webRouter'
|
|
|
|
|
-import { isUndefined } from 'lodash'
|
|
|
|
|
-import { homePage } from '@/router/homePageRoutes'
|
|
|
|
|
-import { useAppStore, useTagStore, useDictStore } from '@/store'
|
|
|
|
|
-
|
|
|
|
|
-const useUserStore = defineStore('user', {
|
|
|
|
|
|
|
+import { defineStore } from "pinia";
|
|
|
|
|
+import loginApi from "@/api/login";
|
|
|
|
|
+import tool from "@/utils/tool";
|
|
|
|
|
+import router from "@/router";
|
|
|
|
|
+import webRouter from "@/router/webRouter";
|
|
|
|
|
+import { isUndefined } from "lodash";
|
|
|
|
|
+import { homePage } from "@/router/homePageRoutes";
|
|
|
|
|
+import { useAppStore, useTagStore, useDictStore } from "@/store";
|
|
|
|
|
+
|
|
|
|
|
+const useUserStore = defineStore("user", {
|
|
|
state: () => ({
|
|
state: () => ({
|
|
|
codes: undefined,
|
|
codes: undefined,
|
|
|
roles: undefined,
|
|
roles: undefined,
|
|
|
routers: undefined,
|
|
routers: undefined,
|
|
|
user: undefined,
|
|
user: undefined,
|
|
|
- menus: undefined
|
|
|
|
|
|
|
+ menus: undefined,
|
|
|
}),
|
|
}),
|
|
|
|
|
|
|
|
getters: {
|
|
getters: {
|
|
|
getState() {
|
|
getState() {
|
|
|
- return { ...this.$state }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return { ...this.$state };
|
|
|
|
|
+ },
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
actions: {
|
|
actions: {
|
|
|
setToken(token) {
|
|
setToken(token) {
|
|
|
- tool.local.set(import.meta.env.VITE_APP_TOKEN_PREFIX, token)
|
|
|
|
|
|
|
+ tool.local.set(import.meta.env.VITE_APP_TOKEN_PREFIX, token);
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
getToken() {
|
|
getToken() {
|
|
|
- return tool.local.get(import.meta.env.VITE_APP_TOKEN_PREFIX)
|
|
|
|
|
|
|
+ return tool.local.get(import.meta.env.VITE_APP_TOKEN_PREFIX);
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
clearToken() {
|
|
clearToken() {
|
|
|
- tool.local.remove(import.meta.env.VITE_APP_TOKEN_PREFIX)
|
|
|
|
|
|
|
+ tool.local.remove(import.meta.env.VITE_APP_TOKEN_PREFIX);
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
setInfo(data) {
|
|
setInfo(data) {
|
|
|
- this.$patch(data)
|
|
|
|
|
|
|
+ this.$patch(data);
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
resetUserInfo() {
|
|
resetUserInfo() {
|
|
|
- this.$reset()
|
|
|
|
|
|
|
+ this.$reset();
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
setMenu(data) {
|
|
setMenu(data) {
|
|
|
- const routers = flatAsyncRoutes(filterAsyncRouter(data))
|
|
|
|
|
|
|
+ const routers = flatAsyncRoutes(filterAsyncRouter(data));
|
|
|
routers.map((item) => {
|
|
routers.map((item) => {
|
|
|
if (isUndefined(item.meta.layout)) {
|
|
if (isUndefined(item.meta.layout)) {
|
|
|
- router.addRoute('layout', item)
|
|
|
|
|
|
|
+ router.addRoute("layout", item);
|
|
|
} else {
|
|
} else {
|
|
|
if (item.meta.layout) {
|
|
if (item.meta.layout) {
|
|
|
- router.addRoute('layout', item)
|
|
|
|
|
|
|
+ router.addRoute("layout", item);
|
|
|
} else {
|
|
} else {
|
|
|
- router.addRoute(item)
|
|
|
|
|
|
|
+ router.addRoute(item);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- })
|
|
|
|
|
|
|
+ });
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
requestUserInfo() {
|
|
requestUserInfo() {
|
|
|
return new Promise((resolve, reject) => {
|
|
return new Promise((resolve, reject) => {
|
|
|
loginApi.getInfo().then(async (response) => {
|
|
loginApi.getInfo().then(async (response) => {
|
|
|
if (!response || !response.data) {
|
|
if (!response || !response.data) {
|
|
|
- this.clearToken()
|
|
|
|
|
- await router.push({ name: 'login' })
|
|
|
|
|
- reject(false)
|
|
|
|
|
|
|
+ this.clearToken();
|
|
|
|
|
+ await router.push({ name: "login" });
|
|
|
|
|
+ reject(false);
|
|
|
} else {
|
|
} else {
|
|
|
- this.setInfo(response.data)
|
|
|
|
|
- const dictStore = useDictStore()
|
|
|
|
|
- await dictStore.initData()
|
|
|
|
|
|
|
+ // 如果当前用户不在 VITE_APP_KAIFA 列表中,递归过滤掉"系统工具"菜单
|
|
|
|
|
+ let routers = response.data.routers;
|
|
|
|
|
+ let kaifaIds = import.meta.env.VITE_APP_KAIFA.split(",");
|
|
|
|
|
+ let isKaifa = kaifaIds.includes(String(response.data.user.id));
|
|
|
|
|
+ console.log("isKaifa", isKaifa);
|
|
|
|
|
+
|
|
|
|
|
+ if (!isKaifa) {
|
|
|
|
|
+ // 递归过滤函数
|
|
|
|
|
+ const filterSystemTool = (routes) => {
|
|
|
|
|
+ return routes.filter((item) => {
|
|
|
|
|
+ // 过滤掉标题为"系统工具"的菜单项
|
|
|
|
|
+ if (item.meta && item.meta.title === "系统工具") {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 递归处理子菜单
|
|
|
|
|
+ if (item.children && item.children.length > 0) {
|
|
|
|
|
+ item.children = filterSystemTool(item.children);
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ routers = filterSystemTool(routers);
|
|
|
|
|
+ }
|
|
|
|
|
+ response.data.routers = routers;
|
|
|
|
|
+
|
|
|
|
|
+ this.setInfo(response.data);
|
|
|
|
|
+ const dictStore = useDictStore();
|
|
|
|
|
+ await dictStore.initData();
|
|
|
// homePage.children = webRouter[0].children
|
|
// homePage.children = webRouter[0].children
|
|
|
- this.setMenu(this.routers)
|
|
|
|
|
- this.routers = removeButtonMenu(this.routers)
|
|
|
|
|
- this.routers.unshift(homePage)
|
|
|
|
|
- await this.setApp()
|
|
|
|
|
- resolve(response.data)
|
|
|
|
|
|
|
+ this.setMenu(this.routers);
|
|
|
|
|
+ this.routers = removeButtonMenu(this.routers);
|
|
|
|
|
+ this.routers.unshift(homePage);
|
|
|
|
|
+ await this.setApp();
|
|
|
|
|
+ resolve(response.data);
|
|
|
}
|
|
}
|
|
|
- })
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
login(form) {
|
|
login(form) {
|
|
@@ -85,87 +111,87 @@ const useUserStore = defineStore('user', {
|
|
|
.login(form)
|
|
.login(form)
|
|
|
.then((r) => {
|
|
.then((r) => {
|
|
|
if (r.code === 200) {
|
|
if (r.code === 200) {
|
|
|
- this.setToken(r.data.access_token)
|
|
|
|
|
- return true
|
|
|
|
|
|
|
+ this.setToken(r.data.access_token);
|
|
|
|
|
+ return true;
|
|
|
} else {
|
|
} else {
|
|
|
- return false
|
|
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
.catch((e) => {
|
|
.catch((e) => {
|
|
|
- console.error(e)
|
|
|
|
|
- return false
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ console.error(e);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ });
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
async logout() {
|
|
async logout() {
|
|
|
// await loginApi.logout()
|
|
// await loginApi.logout()
|
|
|
- const tagStore = useTagStore()
|
|
|
|
|
- tool.local.remove('tags')
|
|
|
|
|
- tagStore.clearTags()
|
|
|
|
|
- this.clearToken()
|
|
|
|
|
- this.resetUserInfo()
|
|
|
|
|
|
|
+ const tagStore = useTagStore();
|
|
|
|
|
+ tool.local.remove("tags");
|
|
|
|
|
+ tagStore.clearTags();
|
|
|
|
|
+ this.clearToken();
|
|
|
|
|
+ this.resetUserInfo();
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
async setApp() {
|
|
async setApp() {
|
|
|
- const appStore = useAppStore()
|
|
|
|
|
|
|
+ const appStore = useAppStore();
|
|
|
const setting =
|
|
const setting =
|
|
|
- typeof this.user.backend_setting === 'string'
|
|
|
|
|
|
|
+ typeof this.user.backend_setting === "string"
|
|
|
? JSON.parse(this.user.backend_setting)
|
|
? JSON.parse(this.user.backend_setting)
|
|
|
- : this.user.backend_setting
|
|
|
|
|
- appStore.toggleMode(setting?.mode ?? appStore.mode)
|
|
|
|
|
- appStore.toggleMenu(setting?.menuCollapse ?? appStore.menuCollapse)
|
|
|
|
|
- appStore.toggleTag(setting?.tag ?? appStore.tag)
|
|
|
|
|
- appStore.toggleRound(setting?.roundOpen ?? appStore.roundOpen)
|
|
|
|
|
- appStore.toggleWs(setting?.ws ?? appStore.ws)
|
|
|
|
|
- appStore.changeMenuWidth(setting?.menuWidth ?? appStore.menuWidth)
|
|
|
|
|
- appStore.changeLayout(setting?.layout ?? appStore.layout)
|
|
|
|
|
- appStore.useSkin(setting?.skin ?? appStore.skin)
|
|
|
|
|
- appStore.changeColor(setting?.color ?? appStore.color)
|
|
|
|
|
- appStore.toggleWater(setting?.waterMark ?? appStore.waterMark)
|
|
|
|
|
|
|
+ : this.user.backend_setting;
|
|
|
|
|
+ appStore.toggleMode(setting?.mode ?? appStore.mode);
|
|
|
|
|
+ appStore.toggleMenu(setting?.menuCollapse ?? appStore.menuCollapse);
|
|
|
|
|
+ appStore.toggleTag(setting?.tag ?? appStore.tag);
|
|
|
|
|
+ appStore.toggleRound(setting?.roundOpen ?? appStore.roundOpen);
|
|
|
|
|
+ appStore.toggleWs(setting?.ws ?? appStore.ws);
|
|
|
|
|
+ appStore.changeMenuWidth(setting?.menuWidth ?? appStore.menuWidth);
|
|
|
|
|
+ appStore.changeLayout(setting?.layout ?? appStore.layout);
|
|
|
|
|
+ appStore.useSkin(setting?.skin ?? appStore.skin);
|
|
|
|
|
+ appStore.changeColor(setting?.color ?? appStore.color);
|
|
|
|
|
+ appStore.toggleWater(setting?.waterMark ?? appStore.waterMark);
|
|
|
appStore.changeWaterContent(
|
|
appStore.changeWaterContent(
|
|
|
setting?.waterContent ?? appStore.waterContent
|
|
setting?.waterContent ?? appStore.waterContent
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-})
|
|
|
|
|
|
|
+ );
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+});
|
|
|
|
|
|
|
|
//路由扁平化
|
|
//路由扁平化
|
|
|
const flatAsyncRoutes = (routes, breadcrumb = []) => {
|
|
const flatAsyncRoutes = (routes, breadcrumb = []) => {
|
|
|
- let res = []
|
|
|
|
|
|
|
+ let res = [];
|
|
|
routes.forEach((route) => {
|
|
routes.forEach((route) => {
|
|
|
- const tmp = { ...route }
|
|
|
|
|
|
|
+ const tmp = { ...route };
|
|
|
if (tmp.children) {
|
|
if (tmp.children) {
|
|
|
- let childrenBreadcrumb = [...breadcrumb]
|
|
|
|
|
- childrenBreadcrumb.push(route)
|
|
|
|
|
- let tmpRoute = { ...route }
|
|
|
|
|
- tmpRoute.meta.breadcrumb = childrenBreadcrumb
|
|
|
|
|
- delete tmpRoute.children
|
|
|
|
|
- res.push(tmpRoute)
|
|
|
|
|
- let childrenRoutes = flatAsyncRoutes(tmp.children, childrenBreadcrumb)
|
|
|
|
|
|
|
+ let childrenBreadcrumb = [...breadcrumb];
|
|
|
|
|
+ childrenBreadcrumb.push(route);
|
|
|
|
|
+ let tmpRoute = { ...route };
|
|
|
|
|
+ tmpRoute.meta.breadcrumb = childrenBreadcrumb;
|
|
|
|
|
+ delete tmpRoute.children;
|
|
|
|
|
+ res.push(tmpRoute);
|
|
|
|
|
+ let childrenRoutes = flatAsyncRoutes(tmp.children, childrenBreadcrumb);
|
|
|
childrenRoutes.map((item) => {
|
|
childrenRoutes.map((item) => {
|
|
|
- res.push(item)
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ res.push(item);
|
|
|
|
|
+ });
|
|
|
} else {
|
|
} else {
|
|
|
- let tmpBreadcrumb = [...breadcrumb]
|
|
|
|
|
- tmpBreadcrumb.push(tmp)
|
|
|
|
|
- tmp.meta.breadcrumb = tmpBreadcrumb
|
|
|
|
|
- res.push(tmp)
|
|
|
|
|
|
|
+ let tmpBreadcrumb = [...breadcrumb];
|
|
|
|
|
+ tmpBreadcrumb.push(tmp);
|
|
|
|
|
+ tmp.meta.breadcrumb = tmpBreadcrumb;
|
|
|
|
|
+ res.push(tmp);
|
|
|
}
|
|
}
|
|
|
- })
|
|
|
|
|
- return res
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ });
|
|
|
|
|
+ return res;
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
-const views = import.meta.glob('../../views/**/**.vue')
|
|
|
|
|
-const empty = import.meta.glob('../../layout/empty.vue')
|
|
|
|
|
|
|
+const views = import.meta.glob("../../views/**/**.vue");
|
|
|
|
|
+const empty = import.meta.glob("../../layout/empty.vue");
|
|
|
|
|
|
|
|
// 菜单转换路由
|
|
// 菜单转换路由
|
|
|
const filterAsyncRouter = (routerMap) => {
|
|
const filterAsyncRouter = (routerMap) => {
|
|
|
- const accessedRouters = []
|
|
|
|
|
|
|
+ const accessedRouters = [];
|
|
|
routerMap.forEach((item) => {
|
|
routerMap.forEach((item) => {
|
|
|
- if (item.meta.type !== 'B') {
|
|
|
|
|
- if (item.meta.type === 'I') {
|
|
|
|
|
- item.meta.url = item.path
|
|
|
|
|
- item.path = `/maIframe/${item.name}`
|
|
|
|
|
|
|
+ if (item.meta.type !== "B") {
|
|
|
|
|
+ if (item.meta.type === "I") {
|
|
|
|
|
+ item.meta.url = item.path;
|
|
|
|
|
+ item.path = `/maIframe/${item.name}`;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const route = {
|
|
const route = {
|
|
@@ -174,26 +200,26 @@ const filterAsyncRouter = (routerMap) => {
|
|
|
hidden: item.hidden === 1,
|
|
hidden: item.hidden === 1,
|
|
|
meta: item.meta,
|
|
meta: item.meta,
|
|
|
children: item.children ? filterAsyncRouter(item.children) : null,
|
|
children: item.children ? filterAsyncRouter(item.children) : null,
|
|
|
- component: views[`../../views/${item.component}.vue`]
|
|
|
|
|
- }
|
|
|
|
|
- accessedRouters.push(route)
|
|
|
|
|
|
|
+ component: views[`../../views/${item.component}.vue`],
|
|
|
|
|
+ };
|
|
|
|
|
+ accessedRouters.push(route);
|
|
|
}
|
|
}
|
|
|
- })
|
|
|
|
|
- return accessedRouters
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ });
|
|
|
|
|
+ return accessedRouters;
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
// 去除按钮菜单
|
|
// 去除按钮菜单
|
|
|
const removeButtonMenu = (routers) => {
|
|
const removeButtonMenu = (routers) => {
|
|
|
- let handlerAfterRouters = []
|
|
|
|
|
|
|
+ let handlerAfterRouters = [];
|
|
|
routers.forEach((item) => {
|
|
routers.forEach((item) => {
|
|
|
- if (item.meta.type !== 'B' && !item.meta.hidden) {
|
|
|
|
|
- let route = item
|
|
|
|
|
|
|
+ if (item.meta.type !== "B" && !item.meta.hidden) {
|
|
|
|
|
+ let route = item;
|
|
|
if (item.children && item.children.length > 0) {
|
|
if (item.children && item.children.length > 0) {
|
|
|
- route.children = removeButtonMenu(item.children)
|
|
|
|
|
|
|
+ route.children = removeButtonMenu(item.children);
|
|
|
}
|
|
}
|
|
|
- handlerAfterRouters.push(route)
|
|
|
|
|
|
|
+ handlerAfterRouters.push(route);
|
|
|
}
|
|
}
|
|
|
- })
|
|
|
|
|
- return handlerAfterRouters
|
|
|
|
|
-}
|
|
|
|
|
-export default useUserStore
|
|
|
|
|
|
|
+ });
|
|
|
|
|
+ return handlerAfterRouters;
|
|
|
|
|
+};
|
|
|
|
|
+export default useUserStore;
|