From 9334cc877dddd161382008613bccca27b3448701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=99=E5=90=8C=E5=AD=A6?= <2495967527@qq.com> Date: Mon, 30 Dec 2024 17:58:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/full-routers.js | 15 +- src/router/index.js | 44 +-- src/utils/index.js | 63 ++++ .../operation-management/role/index.vue | 280 ++++++++++++++++++ .../role/popup/add-or-update.vue | 207 +++++++++++++ 5 files changed, 588 insertions(+), 21 deletions(-) create mode 100644 src/views/modules/operation-management/role/index.vue create mode 100644 src/views/modules/operation-management/role/popup/add-or-update.vue diff --git a/src/router/full-routers.js b/src/router/full-routers.js index c80e994..7760a68 100644 --- a/src/router/full-routers.js +++ b/src/router/full-routers.js @@ -64,7 +64,7 @@ export default { open: null, list: [], }, - { + { menuId: getUUID(), parentId: 0, parentName: null, @@ -116,6 +116,19 @@ export default { open: null, list: [], }, + { + menuId: getUUID(), + parentId: 0, + parentName: null, + name: "角色管理", + url: "operation-management/role/index", + perms: "", + type: 1, + elIcon: "el-icon-user", + orderNum: 0, + open: null, + list: [], + }, ], }, { diff --git a/src/router/index.js b/src/router/index.js index 87756a4..d3f8feb 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -8,7 +8,7 @@ import Vue from "vue"; import Router from "vue-router"; import http from "@/utils/httpRequest"; import { isURL } from "@/utils/validate"; -import { clearLoginInfo } from "@/utils"; +import { clearLoginInfo, getMenu } from "@/utils"; import FULL_ROUTERS from "./full-routers"; import $api from "@/api/index.js"; import store from "@/store"; @@ -103,23 +103,24 @@ router.beforeEach((to, from, next) => { $api .getUserInfo() .then(({ data }) => { + let permissionsData = getMenu(data.data.role); const filterTreeData = (data, permissions) => { console.log(data); - - return data; //临时性返回所有菜单方便调试 - // return data.reduce((filtered, node) => { - // // 如果节点的权限在权限数组中 - // if (permissions.includes(node.url)) { - // // 递归过滤子节点 - // const list = filterTreeData(node.list || [], permissions); - // // 创建一个新的节点,包含过滤后的子节点 - // filtered.push({ - // ...node, - // list, - // }); - // } - // return filtered; - // }, []); + + // return data; //临时性返回所有菜单方便调试 + return data.reduce((filtered, node) => { + // 如果节点的权限在权限数组中 + if (permissions.includes(node.url)) { + // 递归过滤子节点 + const list = filterTreeData(node.list || [], permissions); + // 创建一个新的节点,包含过滤后的子节点 + filtered.push({ + ...node, + list, + }); + } + return filtered; + }, []); }; console.log(data, "用户信息"); sessionStorage.setItem("role", JSON.stringify(data.data.role)); @@ -162,10 +163,13 @@ router.beforeEach((to, from, next) => { JSON.stringify(data.data.permissions || "[]") ); //添加全量菜单,根据权限进行过滤 - let _menu = filterTreeData( - FULL_ROUTERS.menuList, - data.data.permissions - ); + // let _menu = filterTreeData( + // FULL_ROUTERS.menuList, + // data.data.permissions + // ); + console.log(permissionsData); + + let _menu = filterTreeData(FULL_ROUTERS.menuList, permissionsData); fnAddDynamicMenuRoutes(_menu); sessionStorage.setItem("menuList", JSON.stringify(_menu)); router.options.isAddDynamicMenuRoutes = true; diff --git a/src/utils/index.js b/src/utils/index.js index 31edfcf..81eeef1 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -136,6 +136,69 @@ function doHandleMonth(month) { } return m; } +/** + * 权限 + * @param {*} min + * @param {*} max + */ +export function getMenu(role) { + if (role == "ROLE_MERCHANT" || role == "ROLE_MANAGER") { + return [ + "operation-management", + "operation-management/commodity/index", + "operation-management/order/index", + "operation-management/banner/index", + "operation-management/notice/index", + "operation-management/role/index", + "datacenter", + "datacenter/customer-analysis/index", + "datacenter/product-analysis/index", + "datacenter/order-analysis/index", + "coupon/index", + "presale", + "presale/products/index", + "presale/order/index", + "marketing", + "marketing/level/index", + "marketing/user/index", + "marketing/points-setting/index", + "marketing/points-mall/index", + "marketing/points-order/index", + "local-course/resources", + "wallet/index", + "ogistics-fare", + "logistics-fare/logistics-template/index", + ]; + } else if (role == "ROLE_BRAND_MANAGER") { + return [ + "operation-management", + "operation-management/shop-list/index", + "operation-management/order/index", + "operation-management/role/index", + "datacenter", + "datacenter/customer-analysis/index", + "datacenter/product-analysis/index", + "datacenter/order-analysis/index", + "brand", + "brand/config/index", + "local-course/resources", + "wallet/index", + ]; + } else if (role == "ROLE_AGENT") { + return [ + "operation-management", + "operation-management/shop-list/index", + "operation-management/order/index", + "operation-management/role/index", + "datacenter", + "datacenter/customer-analysis/index", + "datacenter/product-analysis/index", + "datacenter/order-analysis/index", + "local-course/resources", + "wallet/index", + ]; + } +} export function isNumberStr(str) { return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str); diff --git a/src/views/modules/operation-management/role/index.vue b/src/views/modules/operation-management/role/index.vue new file mode 100644 index 0000000..cbdf777 --- /dev/null +++ b/src/views/modules/operation-management/role/index.vue @@ -0,0 +1,280 @@ + + + + + \ No newline at end of file diff --git a/src/views/modules/operation-management/role/popup/add-or-update.vue b/src/views/modules/operation-management/role/popup/add-or-update.vue new file mode 100644 index 0000000..788177b --- /dev/null +++ b/src/views/modules/operation-management/role/popup/add-or-update.vue @@ -0,0 +1,207 @@ + + + \ No newline at end of file