岗位菜单权限与日报审核

This commit is contained in:
zhanghj
2026-08-10 15:51:44 +08:00
parent f1a88239f6
commit b46d9f6cbc
18 changed files with 26203 additions and 18 deletions
+35 -16
View File
@@ -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: {