岗位菜单权限与日报审核
This commit is contained in:
+35
-16
@@ -6,8 +6,9 @@ import {
|
||||
computed,
|
||||
watch
|
||||
} from 'vue'
|
||||
import {pastelColors,defaultApps} from '@/utils/constant.js'
|
||||
import {pastelColors,defaultApps,postMenuPermissions,scanPathFuncKeyMap} from '@/utils/constant.js'
|
||||
import {reqMenuPowerList} from '@/api/auth.js'
|
||||
import { useUserStore } from '@/store'
|
||||
|
||||
export const useMenuStore = defineStore('menu', () => {
|
||||
// 持久化:仅缓存快捷应用的 menuId 列表,不缓存全部菜单
|
||||
@@ -34,17 +35,44 @@ export const useMenuStore = defineStore('menu', () => {
|
||||
// 菜单的权限列表(后端返回的有权限的菜单 code 数组)
|
||||
const menuProwerList = ref([])
|
||||
|
||||
/**
|
||||
* 岗位权限校验:现场人员(UserType=3)按 WorkPostName 硬编码限制(见 constant.js postMenuPermissions),
|
||||
* 其余用户不限制
|
||||
* @param {string} funcKey 功能 key;空表示非扫码类菜单(pipe 管理应用),对现场人员一律隐藏
|
||||
*/
|
||||
const hasPostPermission = (funcKey) => {
|
||||
const userStore = useUserStore()
|
||||
const info = userStore.userInfo
|
||||
if (String(info?.UserType) !== '3') return true
|
||||
if (!funcKey) return false
|
||||
const allows = postMenuPermissions[info?.WorkPostName]
|
||||
return !!allows && allows.includes(funcKey)
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验扫码跳转的页面路径是否有岗位权限(非扫码类路径不限制)
|
||||
* @param {string} path 页面路径
|
||||
*/
|
||||
const canAccessPath = (path) => {
|
||||
const funcKey = scanPathFuncKeyMap[path]
|
||||
if (!funcKey) return true
|
||||
return hasPostPermission(funcKey)
|
||||
}
|
||||
|
||||
// 应用是否可见:后端菜单权限 + 岗位权限双重过滤
|
||||
const appVisible = (app) => hasMenuPermission(app.menuId) && hasPostPermission(app.funcKey)
|
||||
|
||||
// 快捷应用列表(已选择的)
|
||||
const quickApps = computed(() => appsList.value.filter(app => app.selected && hasMenuPermission(app.menuId)))
|
||||
const quickApps = computed(() => appsList.value.filter(app => app.selected && appVisible(app)))
|
||||
|
||||
// 业务查询列表(未选择的)
|
||||
const queryApps = computed(() => appsList.value.filter(app => !app.selected && hasMenuPermission(app.menuId)))
|
||||
const queryApps = computed(() => appsList.value.filter(app => !app.selected && appVisible(app)))
|
||||
|
||||
/**
|
||||
* 打开编辑弹窗(备份当前状态)
|
||||
*/
|
||||
const openEdit = () => {
|
||||
editCache.value = appsList.value.filter(app => hasMenuPermission(app.menuId))
|
||||
editCache.value = appsList.value.filter(appVisible)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -89,22 +117,11 @@ export const useMenuStore = defineStore('menu', () => {
|
||||
return menuProwerList.value.includes(menuCode)
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据权限过滤快捷应用
|
||||
*/
|
||||
const quickAppsWithPermission = computed(() => {
|
||||
if (menuProwerList.value.length === 0) return quickApps.value
|
||||
return quickApps.value.filter(app => {
|
||||
return hasMenuPermission(app.permissionCode)
|
||||
})
|
||||
})
|
||||
|
||||
return {
|
||||
appsList,
|
||||
quickAppIds,
|
||||
editCache,
|
||||
quickApps,
|
||||
quickAppsWithPermission,
|
||||
queryApps,
|
||||
menuProwerList,
|
||||
pastelColors,
|
||||
@@ -112,7 +129,9 @@ export const useMenuStore = defineStore('menu', () => {
|
||||
toggleSelect,
|
||||
confirmEdit,
|
||||
fetchMenuPowerList,
|
||||
hasMenuPermission
|
||||
hasMenuPermission,
|
||||
hasPostPermission,
|
||||
canAccessPath
|
||||
}
|
||||
}, {
|
||||
persist: {
|
||||
|
||||
Reference in New Issue
Block a user