From beca65f4d01ca07c358102a35b949c2a4f277afe Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期三, 24 五月 2023 10:36:27 +0800 Subject: [PATCH] 增加车间监控界面 --- src/store/modules/permission.ts | 533 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 266 insertions(+), 267 deletions(-) diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index ac4fcdf..c09c301 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -1,305 +1,304 @@ -import type { AppRouteRecordRaw, Menu } from '/@/router/types'; +import type { AppRouteRecordRaw, Menu } from '/@/router/types' -import { defineStore } from 'pinia'; -import { store } from '/@/store'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { useUserStore } from './user'; -import { useAppStoreWithOut } from './app'; -import { toRaw } from 'vue'; -import { transformObjToRoute, flatMultiLevelRoutes, addSlashToRouteComponent } from '/@/router/helper/routeHelper'; -import { transformRouteToMenu } from '/@/router/helper/menuHelper'; +import { defineStore } from 'pinia' +import { toRaw } from 'vue' +import { useAppStoreWithOut } from './app' +import { useUserStore } from './user' +import { useI18n } from '/@/hooks/web/useI18n' +import { transformRouteToMenu } from '/@/router/helper/menuHelper' +import { addSlashToRouteComponent, flatMultiLevelRoutes, transformObjToRoute } from '/@/router/helper/routeHelper' +import { store } from '/@/store' -import projectSetting from '/@/settings/projectSetting'; +import projectSetting from '/@/settings/projectSetting' -import { PermissionModeEnum } from '/@/enums/appEnum'; +import { PermissionModeEnum } from '/@/enums/appEnum' -import { asyncRoutes } from '/@/router/routes'; -import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; +import { asyncRoutes } from '/@/router/routes' +import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic' -import { filter } from '/@/utils/helper/treeHelper'; +import { filter } from '/@/utils/helper/treeHelper' -import { getMenuList,switchVue3Menu } from '/@/api/sys/menu'; -import { getPermCode } from '/@/api/sys/user'; +import { getMenuList, switchVue3Menu } from '/@/api/sys/menu' +import { getPermCode } from '/@/api/sys/user' -import { useMessage } from '/@/hooks/web/useMessage'; -import { PageEnum } from '/@/enums/pageEnum'; +import { PageEnum } from '/@/enums/pageEnum' +import { useMessage } from '/@/hooks/web/useMessage' // 绯荤粺鏉冮檺 interface AuthItem { - // 鑿滃崟鏉冮檺缂栫爜锛屼緥濡傦細鈥渟ys:schedule:list,sys:schedule:info鈥�,澶氫釜閫楀彿闅斿紑 - action: string; - // 鏉冮檺绛栫暐1鏄剧ず2绂佺敤 - type: string | number; - // 鏉冮檺鐘舵��(0鏃犳晥1鏈夋晥) - status: string | number; - // 鏉冮檺鍚嶇О - describe?: string; - isAuth?: boolean; + // 鑿滃崟鏉冮檺缂栫爜锛屼緥濡傦細鈥渟ys:schedule:list,sys:schedule:info鈥�,澶氫釜閫楀彿闅斿紑 + action: string + // 鏉冮檺绛栫暐1鏄剧ず2绂佺敤 + type: string | number + // 鏉冮檺鐘舵��(0鏃犳晥1鏈夋晥) + status: string | number + // 鏉冮檺鍚嶇О + describe?: string + isAuth?: boolean } interface PermissionState { - // Permission code list - permCodeList: string[] | number[]; - // Whether the route has been dynamically added - isDynamicAddedRoute: boolean; - // To trigger a menu update - lastBuildMenuTime: number; - // Backstage menu list - backMenuList: Menu[]; - frontMenuList: Menu[]; - // 鐢ㄦ埛鎵�鎷ユ湁鐨勬潈闄� - authList: AuthItem[]; - // 鍏ㄩ儴鏉冮檺閰嶇疆 - allAuthList: AuthItem[]; - // 绯荤粺瀹夊叏妯″紡 - sysSafeMode: boolean; - // online瀛愯〃鎸夐挳鏉冮檺 - onlineSubTableAuthMap: object; + // Permission code list + permCodeList: string[] | number[] + // Whether the route has been dynamically added + isDynamicAddedRoute: boolean + // To trigger a menu update + lastBuildMenuTime: number + // Backstage menu list + backMenuList: Menu[] + frontMenuList: Menu[] + // 鐢ㄦ埛鎵�鎷ユ湁鐨勬潈闄� + authList: AuthItem[] + // 鍏ㄩ儴鏉冮檺閰嶇疆 + allAuthList: AuthItem[] + // 绯荤粺瀹夊叏妯″紡 + sysSafeMode: boolean + // online瀛愯〃鎸夐挳鏉冮檺 + onlineSubTableAuthMap: object } export const usePermissionStore = defineStore({ - id: 'app-permission', - state: (): PermissionState => ({ - permCodeList: [], - // Whether the route has been dynamically added - isDynamicAddedRoute: false, - // To trigger a menu update - lastBuildMenuTime: 0, - // Backstage menu list - backMenuList: [], - // menu List - frontMenuList: [], - authList: [], - allAuthList: [], - sysSafeMode: false, - onlineSubTableAuthMap: {}, - }), - getters: { - getPermCodeList(): string[] | number[] { - return this.permCodeList; - }, - getBackMenuList(): Menu[] { - return this.backMenuList; - }, - getFrontMenuList(): Menu[] { - return this.frontMenuList; - }, - getLastBuildMenuTime(): number { - return this.lastBuildMenuTime; - }, - getIsDynamicAddedRoute(): boolean { - return this.isDynamicAddedRoute; - }, + id: 'app-permission', + state: (): PermissionState => ({ + permCodeList: [], + // Whether the route has been dynamically added + isDynamicAddedRoute: false, + // To trigger a menu update + lastBuildMenuTime: 0, + // Backstage menu list + backMenuList: [], + // menu List + frontMenuList: [], + authList: [], + allAuthList: [], + sysSafeMode: false, + onlineSubTableAuthMap: {}, + }), + getters: { + getPermCodeList(): string[] | number[] { + return this.permCodeList + }, + getBackMenuList(): Menu[] { + return this.backMenuList + }, + getFrontMenuList(): Menu[] { + return this.frontMenuList + }, + getLastBuildMenuTime(): number { + return this.lastBuildMenuTime + }, + getIsDynamicAddedRoute(): boolean { + return this.isDynamicAddedRoute + }, - //update-begin-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒� - getOnlineSubTableAuth: (state) => { - return (code) => state.onlineSubTableAuthMap[code]; - }, - //update-end-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒� - }, - actions: { - setPermCodeList(codeList: string[]) { - this.permCodeList = codeList; - }, + //update-begin-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒� + getOnlineSubTableAuth: (state) => { + return (code) => state.onlineSubTableAuthMap[code] + }, + //update-end-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒� + }, + actions: { + setPermCodeList(codeList: string[]) { + this.permCodeList = codeList + }, - setBackMenuList(list: Menu[]) { - this.backMenuList = list; - list?.length > 0 && this.setLastBuildMenuTime(); - }, + setBackMenuList(list: Menu[]) { + this.backMenuList = list + list?.length > 0 && this.setLastBuildMenuTime() + }, - setFrontMenuList(list: Menu[]) { - this.frontMenuList = list; - }, + setFrontMenuList(list: Menu[]) { + this.frontMenuList = list + }, - setLastBuildMenuTime() { - this.lastBuildMenuTime = new Date().getTime(); - }, + setLastBuildMenuTime() { + this.lastBuildMenuTime = new Date().getTime() + }, - setDynamicAddedRoute(added: boolean) { - this.isDynamicAddedRoute = added; - }, - resetState(): void { - this.isDynamicAddedRoute = false; - this.permCodeList = []; - this.backMenuList = []; - this.lastBuildMenuTime = 0; - }, - async changePermissionCode() { - const systemPermission = await getPermCode(); - const codeList = systemPermission.codeList; - this.setPermCodeList(codeList); - this.setAuthData(systemPermission); - }, - async buildRoutesAction(): Promise<AppRouteRecordRaw[]> { - const { t } = useI18n(); - const userStore = useUserStore(); - const appStore = useAppStoreWithOut(); + setDynamicAddedRoute(added: boolean) { + this.isDynamicAddedRoute = added + }, + resetState(): void { + this.isDynamicAddedRoute = false + this.permCodeList = [] + this.backMenuList = [] + this.lastBuildMenuTime = 0 + }, + async changePermissionCode() { + const systemPermission = await getPermCode() + const codeList = systemPermission.codeList + this.setPermCodeList(codeList) + this.setAuthData(systemPermission) + }, + async buildRoutesAction(): Promise<AppRouteRecordRaw[]> { + const { t } = useI18n() + const userStore = useUserStore() + const appStore = useAppStoreWithOut() - let routes: AppRouteRecordRaw[] = []; - const roleList = toRaw(userStore.getRoleList) || []; - const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig; + let routes: AppRouteRecordRaw[] = [] + const roleList = toRaw(userStore.getRoleList) || [] + const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig - const routeFilter = (route: AppRouteRecordRaw) => { - const { meta } = route; - const { roles } = meta || {}; - if (!roles) return true; - return roleList.some((role) => roles.includes(role)); - }; + const routeFilter = (route: AppRouteRecordRaw) => { + const { meta } = route + const { roles } = meta || {} + if (!roles) return true + return roleList.some((role) => roles.includes(role)) + } - const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => { - const { meta } = route; - const { ignoreRoute } = meta || {}; - return !ignoreRoute; - }; + const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => { + const { meta } = route + const { ignoreRoute } = meta || {} + return !ignoreRoute + } - /** - * @description 鏍规嵁璁剧疆鐨勯椤祊ath锛屼慨姝outes涓殑affix鏍囪锛堝浐瀹氶椤碉級 - * */ - const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { - if (!routes || routes.length === 0) return; - let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME; - function patcher(routes: AppRouteRecordRaw[], parentPath = '') { - if (parentPath) parentPath = parentPath + '/'; - routes.forEach((route: AppRouteRecordRaw) => { - const { path, children, redirect } = route; - const currentPath = path.startsWith('/') ? path : parentPath + path; - if (currentPath === homePath) { - if (redirect) { - homePath = route.redirect! as string; - } else { - route.meta = Object.assign({}, route.meta, { affix: true }); - throw new Error('end'); - } - } - children && children.length > 0 && patcher(children, currentPath); - }); - } - try { - patcher(routes); - } catch (e) { - // 宸插鐞嗗畬姣曡烦鍑哄惊鐜� - } - return; - }; + /** + * @description 鏍规嵁璁剧疆鐨勯椤祊ath锛屼慨姝outes涓殑affix鏍囪锛堝浐瀹氶椤碉級 + * */ + const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { + if (!routes || routes.length === 0) return + let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME + function patcher(routes: AppRouteRecordRaw[], parentPath = '') { + if (parentPath) parentPath = parentPath + '/' + routes.forEach((route: AppRouteRecordRaw) => { + const { path, children, redirect } = route + const currentPath = path.startsWith('/') ? path : parentPath + path + if (currentPath === homePath) { + if (redirect) { + homePath = route.redirect! as string + } else { + route.meta = Object.assign({}, route.meta, { affix: true }) + throw new Error('end') + } + } + children && children.length > 0 && patcher(children, currentPath) + }) + } + try { + patcher(routes) + } catch (e) { + // 宸插鐞嗗畬姣曡烦鍑哄惊鐜� + } + return + } - switch (permissionMode) { - case PermissionModeEnum.ROLE: - routes = filter(asyncRoutes, routeFilter); - routes = routes.filter(routeFilter); - // 灏嗗绾ц矾鐢辫浆鎹负浜岀骇 - routes = flatMultiLevelRoutes(routes); - break; + switch (permissionMode) { + case PermissionModeEnum.ROLE: + routes = filter(asyncRoutes, routeFilter) + routes = routes.filter(routeFilter) + // 灏嗗绾ц矾鐢辫浆鎹负浜岀骇 + routes = flatMultiLevelRoutes(routes) + break - case PermissionModeEnum.ROUTE_MAPPING: - routes = filter(asyncRoutes, routeFilter); - routes = routes.filter(routeFilter); - const menuList = transformRouteToMenu(routes, true); - routes = filter(routes, routeRemoveIgnoreFilter); - routes = routes.filter(routeRemoveIgnoreFilter); - menuList.sort((a, b) => { - return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0); - }); + case PermissionModeEnum.ROUTE_MAPPING: + routes = filter(asyncRoutes, routeFilter) + routes = routes.filter(routeFilter) + const menuList = transformRouteToMenu(routes, true) + routes = filter(routes, routeRemoveIgnoreFilter) + routes = routes.filter(routeRemoveIgnoreFilter) + menuList.sort((a, b) => { + return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0) + }) - this.setFrontMenuList(menuList); - // 灏嗗绾ц矾鐢辫浆鎹负浜岀骇 - routes = flatMultiLevelRoutes(routes); - break; + this.setFrontMenuList(menuList) + // 灏嗗绾ц矾鐢辫浆鎹负浜岀骇 + routes = flatMultiLevelRoutes(routes) + break - // 鍚庡彴鑿滃崟鏋勫缓 - case PermissionModeEnum.BACK: - const { createMessage, createWarningModal } = useMessage(); - // 鑿滃崟鍔犺浇鎻愮ず - // createMessage.loading({ - // content: t('sys.app.menuLoading'), - // duration: 1, - // }); + // 鍚庡彴鑿滃崟鏋勫缓 + case PermissionModeEnum.BACK: + const { createMessage, createWarningModal } = useMessage() + // 鑿滃崟鍔犺浇鎻愮ず + // createMessage.loading({ + // content: t('sys.app.menuLoading'), + // duration: 1, + // }); - // 浠庡悗鍙拌幏鍙栨潈闄愮爜锛� - // 杩欎釜鍑芥暟鍙兘鍙渶瑕佹墽琛屼竴娆★紝骞朵笖瀹為檯鐨勯」鐩彲浠ュ湪姝g‘鐨勬椂闂磋鏀剧疆 - let routeList: AppRouteRecordRaw[] = []; - try { - this.changePermissionCode(); - routeList = (await getMenuList()) as AppRouteRecordRaw[]; - // update-begin----author:sunjianlei---date:20220315------for: 鍒ゆ柇鏄惁鏄� vue3 鐗堟湰鐨勮彍鍗� --- - let hasIndex: boolean = false; - let hasIcon: boolean = false; - for (let menuItem of routeList) { - // 鏉′欢1锛氬垽鏂粍浠舵槸鍚︽槸 layouts/default/index - if (!hasIndex) { - hasIndex = menuItem.component === 'layouts/default/index'; - } - // 鏉′欢2锛氬垽鏂浘鏍囨槸鍚﹀甫鏈� 鍐掑彿 - if (!hasIcon) { - hasIcon = !!menuItem.meta?.icon?.includes(':'); - } - // 婊¤冻浠讳綍涓�涓潯浠堕兘鐩存帴璺冲嚭寰幆 - if (hasIcon || hasIndex) { - break; - } - } - // 涓や釜鏉′欢閮戒笉婊¤冻锛屽氨寮瑰嚭鎻愮ず妗� - if (!hasIcon && !hasIndex) { - // 寤惰繜1.5绉掍箣鍚庡啀鍑虹幇鎻愮ず锛屽惁鍒欐彁绀烘鍑轰笉鏉� - setTimeout( - () => - createWarningModal({ - title: '妫�娴嬫彁绀�', - content: - '褰撳墠鑿滃崟琛ㄦ槸 <b>Vue2鐗堟湰</b>锛屽鑷磋彍鍗曞姞杞藉紓甯�!<br>鐐瑰嚮纭锛屽垏鎹㈠埌Vue3鐗堣彍鍗曪紒', - onOk:function () { - switchVue3Menu(); - location.reload(); - } - }), - 100 - ); - } - // update-end----author:sunjianlei---date:20220315------for: 鍒ゆ柇鏄惁鏄� vue3 鐗堟湰鐨勮彍鍗� --- - } catch (error) { - console.error(error); - } - // 缁勪欢鍦板潃鍓嶅姞鏂滄潬澶勭悊 author: lsq date:2021-09-08 - routeList = addSlashToRouteComponent(routeList); - // 鍔ㄦ�佸紩鍏ョ粍浠� - routeList = transformObjToRoute(routeList); + // 浠庡悗鍙拌幏鍙栨潈闄愮爜锛� + // 杩欎釜鍑芥暟鍙兘鍙渶瑕佹墽琛屼竴娆★紝骞朵笖瀹為檯鐨勯」鐩彲浠ュ湪姝g‘鐨勬椂闂磋鏀剧疆 + let routeList: AppRouteRecordRaw[] = [] + try { + this.changePermissionCode() + routeList = (await getMenuList()) as AppRouteRecordRaw[] + // update-begin----author:sunjianlei---date:20220315------for: 鍒ゆ柇鏄惁鏄� vue3 鐗堟湰鐨勮彍鍗� --- + let hasIndex = false + let hasIcon = false + for (const menuItem of routeList) { + // 鏉′欢1锛氬垽鏂粍浠舵槸鍚︽槸 layouts/default/index + if (!hasIndex) { + hasIndex = menuItem.component === 'layouts/default/index' + } + // 鏉′欢2锛氬垽鏂浘鏍囨槸鍚﹀甫鏈� 鍐掑彿 + if (!hasIcon) { + hasIcon = !!menuItem.meta?.icon?.includes(':') + } + // 婊¤冻浠讳綍涓�涓潯浠堕兘鐩存帴璺冲嚭寰幆 + if (hasIcon || hasIndex) { + break + } + } + // 涓や釜鏉′欢閮戒笉婊¤冻锛屽氨寮瑰嚭鎻愮ず妗� + if (!hasIcon && !hasIndex) { + // 寤惰繜1.5绉掍箣鍚庡啀鍑虹幇鎻愮ず锛屽惁鍒欐彁绀烘鍑轰笉鏉� + setTimeout( + () => + createWarningModal({ + title: '妫�娴嬫彁绀�', + content: '褰撳墠鑿滃崟琛ㄦ槸 <b>Vue2鐗堟湰</b>锛屽鑷磋彍鍗曞姞杞藉紓甯�!<br>鐐瑰嚮纭锛屽垏鎹㈠埌Vue3鐗堣彍鍗曪紒', + onOk: function () { + switchVue3Menu() + location.reload() + }, + }), + 100 + ) + } + // update-end----author:sunjianlei---date:20220315------for: 鍒ゆ柇鏄惁鏄� vue3 鐗堟湰鐨勮彍鍗� --- + } catch (error) { + console.error(error) + } + // 缁勪欢鍦板潃鍓嶅姞鏂滄潬澶勭悊 author: lsq date:2021-09-08 + routeList = addSlashToRouteComponent(routeList) + // 鍔ㄦ�佸紩鍏ョ粍浠� + routeList = transformObjToRoute(routeList) - // 鏋勫缓鍚庡彴璺敱鑿滃崟 - const backMenuList = transformRouteToMenu(routeList); - this.setBackMenuList(backMenuList); + // 鏋勫缓鍚庡彴璺敱鑿滃崟 + const backMenuList = transformRouteToMenu(routeList) + this.setBackMenuList(backMenuList) - // 鍒犻櫎meta.ignoreRoute椤� - routeList = filter(routeList, routeRemoveIgnoreFilter); - routeList = routeList.filter(routeRemoveIgnoreFilter); + // 鍒犻櫎meta.ignoreRoute椤� + routeList = filter(routeList, routeRemoveIgnoreFilter) + routeList = routeList.filter(routeRemoveIgnoreFilter) - routeList = flatMultiLevelRoutes(routeList); - routes = [PAGE_NOT_FOUND_ROUTE, ...routeList]; - break; - } + routeList = flatMultiLevelRoutes(routeList) + routes = [PAGE_NOT_FOUND_ROUTE, ...routeList] + break + } - routes.push(ERROR_LOG_ROUTE); - patchHomeAffix(routes); - return routes; - }, - setAuthData(systemPermission) { - this.authList = systemPermission.auth; - this.allAuthList = systemPermission.allAuth; - this.sysSafeMode = systemPermission.sysSafeMode; - }, - setAuthList(authList: AuthItem[]) { - this.authList = authList; - }, - setAllAuthList(authList: AuthItem[]) { - this.allAuthList = authList; - }, + routes.push(ERROR_LOG_ROUTE) + patchHomeAffix(routes) + return routes + }, + setAuthData(systemPermission) { + this.authList = systemPermission.auth + this.allAuthList = systemPermission.allAuth + this.sysSafeMode = systemPermission.sysSafeMode + }, + setAuthList(authList: AuthItem[]) { + this.authList = authList + }, + setAllAuthList(authList: AuthItem[]) { + this.allAuthList = authList + }, - //update-begin-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒� - setOnlineSubTableAuth(code, hideBtnList) { - this.onlineSubTableAuthMap[code] = hideBtnList; - }, - //update-end-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒� - }, -}); + //update-begin-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒� + setOnlineSubTableAuth(code, hideBtnList) { + this.onlineSubTableAuthMap[code] = hideBtnList + }, + //update-end-author:taoyan date:2022-6-1 for: VUEN-1162 瀛愯〃鎸夐挳娌℃帶鍒� + }, +}) // 闇�瑕佸湪璁剧疆涔嬪浣跨敤 export function usePermissionStoreWithOut() { - return usePermissionStore(store); + return usePermissionStore(store) } -- Gitblit v1.9.3