feat: 设置菜单权限

This commit is contained in:
lzhizhao 2025-07-02 01:20:15 +08:00
parent c50758dcb8
commit 6cda281507
3 changed files with 181 additions and 118 deletions

View File

@ -103,7 +103,7 @@ router.beforeEach((to, from, next) => {
$api $api
.getUserInfo() .getUserInfo()
.then(async ({ data }) => { .then(async ({ data }) => {
let permissionsData = getMenu(data.data.role); let permissionsData = getMenu(data.data.role, data.data.manageMode);
if (permissionsData === null) { if (permissionsData === null) {
let res = await $api.role.getRoleList({ roleId: data.data.role }); let res = await $api.role.getRoleList({ roleId: data.data.role });
permissionsData = res.data.data; permissionsData = res.data.data;

View File

@ -1,16 +1,14 @@
import Vue from "vue"; import Vue from 'vue'
import router from "@/router"; import router from '@/router'
import store from "@/store"; import store from '@/store'
/** /**
* 获取uuid * 获取uuid
*/ */
export function getUUID() { export function getUUID() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
return (c === "x" ? (Math.random() * 16) | 0 : "r&0x3" | "0x8").toString( return (c === 'x' ? (Math.random() * 16) | 0 : 'r&0x3' | '0x8').toString(16)
16 })
);
});
} }
/** /**
@ -19,9 +17,9 @@ export function getUUID() {
*/ */
export function isAuth(key) { export function isAuth(key) {
return ( return (
JSON.parse(sessionStorage.getItem("permissions") || "[]").indexOf(key) !== JSON.parse(sessionStorage.getItem('permissions') || '[]').indexOf(key) !==
-1 || false -1 || false
); )
} }
/** /**
@ -30,87 +28,87 @@ export function isAuth(key) {
* @param {*} id * @param {*} id
* @param {*} pid * @param {*} pid
*/ */
export function treeDataTranslate(data, id = "id", pid = "parentId") { export function treeDataTranslate(data, id = 'id', pid = 'parentId') {
var res = []; var res = []
var temp = {}; var temp = {}
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
temp[data[i][id]] = data[i]; temp[data[i][id]] = data[i]
} }
for (var k = 0; k < data.length; k++) { for (var k = 0; k < data.length; k++) {
if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) { if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) {
if (!temp[data[k][pid]]["children"]) { if (!temp[data[k][pid]]['children']) {
temp[data[k][pid]]["children"] = []; temp[data[k][pid]]['children'] = []
} }
if (!temp[data[k][pid]]["_level"]) { if (!temp[data[k][pid]]['_level']) {
temp[data[k][pid]]["_level"] = 1; temp[data[k][pid]]['_level'] = 1
} }
data[k]["_level"] = temp[data[k][pid]]._level + 1; data[k]['_level'] = temp[data[k][pid]]._level + 1
temp[data[k][pid]]["children"].push(data[k]); temp[data[k][pid]]['children'].push(data[k])
} else { } else {
res.push(data[k]); res.push(data[k])
} }
} }
return res; return res
} }
/** /**
* 清除登录信息 * 清除登录信息
*/ */
export function clearLoginInfo() { export function clearLoginInfo() {
Vue.cookie.delete("token"); Vue.cookie.delete('token')
store.commit("resetStore"); store.commit('resetStore')
sessionStorage.removeItem("password"); sessionStorage.removeItem('password')
sessionStorage.removeItem("role"); sessionStorage.removeItem('role')
sessionStorage.removeItem("userInfo"); sessionStorage.removeItem('userInfo')
router.options.isAddDynamicMenuRoutes = false; router.options.isAddDynamicMenuRoutes = false
} }
// 深拷贝对象 // 深拷贝对象
export function deepClone(obj) { export function deepClone(obj) {
const _toString = Object.prototype.toString; const _toString = Object.prototype.toString
// null, undefined, non-object, function // null, undefined, non-object, function
if (!obj || typeof obj !== "object") { if (!obj || typeof obj !== 'object') {
return obj; return obj
} }
// DOM Node // DOM Node
if (obj.nodeType && "cloneNode" in obj) { if (obj.nodeType && 'cloneNode' in obj) {
return obj.cloneNode(true); return obj.cloneNode(true)
} }
// Date // Date
if (_toString.call(obj) === "[object Date]") { if (_toString.call(obj) === '[object Date]') {
return new Date(obj.getTime()); return new Date(obj.getTime())
} }
// RegExp // RegExp
if (_toString.call(obj) === "[object RegExp]") { if (_toString.call(obj) === '[object RegExp]') {
const flags = []; const flags = []
if (obj.global) { if (obj.global) {
flags.push("g"); flags.push('g')
} }
if (obj.multiline) { if (obj.multiline) {
flags.push("m"); flags.push('m')
} }
if (obj.ignoreCase) { if (obj.ignoreCase) {
flags.push("i"); flags.push('i')
} }
return new RegExp(obj.source, flags.join("")); return new RegExp(obj.source, flags.join(''))
} }
const result = Array.isArray(obj) const result = Array.isArray(obj)
? [] ? []
: obj.constructor : obj.constructor
? new obj.constructor() ? new obj.constructor()
: {}; : {}
for (const key in obj) { for (const key in obj) {
result[key] = deepClone(obj[key]); result[key] = deepClone(obj[key])
} }
return result; return result
} }
/** /**
@ -119,100 +117,164 @@ export function deepClone(obj) {
* @param {*} max * @param {*} max
*/ */
export function getDay(day) { export function getDay(day) {
let today = new Date(); let today = new Date()
let targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day; let targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day
today.setTime(targetday_milliseconds); //注意,这行是关键代码 today.setTime(targetday_milliseconds) //注意,这行是关键代码
let tYear = today.getFullYear(); let tYear = today.getFullYear()
let tMonth = today.getMonth(); let tMonth = today.getMonth()
let tDate = today.getDate(); let tDate = today.getDate()
tMonth = doHandleMonth(tMonth + 1); tMonth = doHandleMonth(tMonth + 1)
tDate = doHandleMonth(tDate); tDate = doHandleMonth(tDate)
return tYear + "-" + tMonth + "-" + tDate; return tYear + '-' + tMonth + '-' + tDate
} }
function doHandleMonth(month) { function doHandleMonth(month) {
let m = month; let m = month
if (month.toString().length === 1) { if (month.toString().length === 1) {
m = "0" + month; m = '0' + month
} }
return m; return m
} }
/** /**
* 权限 * 权限
* @param {*} min * @param {*} min
* @param {*} max * @param {*} max
*/ */
export function getMenu(role) { export function getMenu(role, manageMode) {
if (role == "ROLE_MERCHANT" || role == "ROLE_MANAGER") { if (role == 'ROLE_MANAGER') {
return [ return [
"operation-management", 'operation-management',
"operation-management/commodity/index", 'operation-management/commodity/index',
"operation-management/order/index", 'operation-management/order/index',
"operation-management/banner/index", 'operation-management/banner/index',
"operation-management/notice/index", 'operation-management/notice/index',
"operation-management/paynotice/index", 'operation-management/paynotice/index',
"operation-management/role/index", 'operation-management/role/index',
"datacenter", 'datacenter',
"datacenter/customer-analysis/index", 'datacenter/customer-analysis/index',
"datacenter/product-analysis/index", 'datacenter/product-analysis/index',
"datacenter/order-analysis/index", 'datacenter/order-analysis/index',
"coupon/index", 'coupon/index',
"presale", 'presale',
"presale/products/index", 'presale/products/index',
"presale/order/index", 'presale/order/index',
"marketing", 'marketing',
"marketing/level/index", 'marketing/level/index',
"marketing/user/index", 'marketing/user/index',
"marketing/points-setting/index", 'marketing/points-setting/index',
"marketing/points-mall/index", 'marketing/points-mall/index',
"marketing/points-order/index", 'marketing/points-order/index',
"local-course/resources", 'local-course/resources',
"wallet/index", 'wallet/index',
"ogistics-fare", 'ogistics-fare',
"logistics-fare/logistics-template/index", 'logistics-fare/logistics-template/index',
"bank-card/index", 'bank-card/index',
"operation-management/total-order/index", 'operation-management/total-order/index',
"operation-management/accountNumber/index", 'operation-management/accountNumber/index'
]; ]
} else if (role == "ROLE_BRAND_MANAGER") { } else if (role == 'ROLE_MERCHANT') {
if (manageMode === 1) {
return [
'operation-management',
'operation-management/commodity/index',
'operation-management/order/index',
'operation-management/banner/index',
'operation-management/notice/index',
'operation-management/paynotice/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',
'bank-card/index',
'operation-management/total-order/index',
'operation-management/accountNumber/index'
]
} else {
return [
'operation-management',
'operation-management/commodity/index',
'operation-management/order/index',
'operation-management/banner/index',
'operation-management/notice/index',
'operation-management/paynotice/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',
'bank-card/index',
'operation-management/total-order/index',
'operation-management/accountNumber/index'
]
}
} else if (role == 'ROLE_BRAND_MANAGER') {
return [ return [
"operation-management", 'operation-management',
// "operation-management/shop-list/index", // "operation-management/shop-list/index",
"operation-management/brand-market/index", 'operation-management/brand-market/index',
"operation-management/brand-store/index", 'operation-management/brand-store/index',
// "operation-management/order/index", // "operation-management/order/index",
"operation-management/brand-order/index", 'operation-management/brand-order/index',
// "operation-management/role/index", // "operation-management/role/index",
"datacenter", 'datacenter',
"datacenter/customer-analysis/index", 'datacenter/customer-analysis/index',
"datacenter/product-analysis/index", 'datacenter/product-analysis/index',
"datacenter/order-analysis/index", 'datacenter/order-analysis/index',
"brand", 'brand',
"brand/config/index", 'brand/config/index',
"local-course/resources", 'local-course/resources',
"wallet/index", 'wallet/index'
// "operation-management/accountNumber/index", // "operation-management/accountNumber/index",
]; ]
} else if (role == "ROLE_AGENT") { } else if (role == 'ROLE_AGENT') {
return [ return [
"operation-management", 'operation-management',
"operation-management/shop-list/index", 'operation-management/shop-list/index',
"operation-management/market-list/index", 'operation-management/market-list/index',
// "operation-management/order/index", // "operation-management/order/index",
"operation-management/brand-order/index", 'operation-management/brand-order/index',
// "operation-management/role/index", // "operation-management/role/index",
"datacenter", 'datacenter',
"datacenter/customer-analysis/index", 'datacenter/customer-analysis/index',
"datacenter/product-analysis/index", 'datacenter/product-analysis/index',
"datacenter/order-analysis/index", 'datacenter/order-analysis/index',
"local-course/resources", 'local-course/resources',
"wallet/index", 'wallet/index'
// "operation-management/accountNumber/index", // "operation-management/accountNumber/index",
]; ]
} else { } else {
return null; return null
} }
} }
export function isNumberStr(str) { export function isNumberStr(str) {
return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str); return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
} }

View File

@ -109,7 +109,8 @@ export default {
}, },
queryList(pageNo, pageSize) { queryList(pageNo, pageSize) {
let permissionsData = getMenu( let permissionsData = getMenu(
JSON.parse(sessionStorage.getItem("userInfo")).role JSON.parse(sessionStorage.getItem("userInfo")).role,
JSON.parse(sessionStorage.getItem("userInfo")).manageMode
); );
this.data = this.filterTreeData(FULL_ROUTERS.menuList, permissionsData); this.data = this.filterTreeData(FULL_ROUTERS.menuList, permissionsData);