瀏覽代碼

Merge branch 'feature/bpm_fix_250121' of https://github.com/zws-code/yudao-ui-admin-vue3-fix into feature/bpm

YunaiV 6 月之前
父節點
當前提交
bf437421bb

+ 7 - 12
src/directives/permission/hasPermi.ts

@@ -1,5 +1,5 @@
-import type { App } from 'vue'
-import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+import type {App} from 'vue'
+import {useUserStore} from "@/store/modules/user";
 
 const { t } = useI18n() // 国际化
 
@@ -18,14 +18,9 @@ export function hasPermi(app: App<Element>) {
     }
   })
 }
-
+const userStore = useUserStore();
+const all_permission = '*:*:*'
 export const hasPermission = (permission: string[]) => {
-  const { wsCache } = useCache()
-  const all_permission = '*:*:*'
-  const userInfo = wsCache.get(CACHE_KEY.USER)
-  const permissions = userInfo?.permissions || []
-
-  return permissions.some((p: string) => {
-    return all_permission === p || permission.includes(p)
-  })
-}
+  return userStore.permissionsSet.has(all_permission) ||
+    permission.some(permission => userStore.permissionsSet.has(permission))
+}

+ 3 - 0
src/store/modules/user.ts

@@ -16,6 +16,7 @@ interface UserVO {
 interface UserInfoVO {
   // USER 缓存
   permissions: string[]
+  permissionsSet: Set<string>
   roles: string[]
   isSetUser: boolean
   user: UserVO
@@ -24,6 +25,7 @@ interface UserInfoVO {
 export const useUserStore = defineStore('admin-user', {
   state: (): UserInfoVO => ({
     permissions: [],
+    permissionsSet: new Set<string>(),
     roles: [],
     isSetUser: false,
     user: {
@@ -58,6 +60,7 @@ export const useUserStore = defineStore('admin-user', {
         userInfo = await getInfo()
       }
       this.permissions = userInfo.permissions
+      this.permissionsSet = new Set(userInfo.permissions)
       this.roles = userInfo.roles
       this.user = userInfo.user
       this.isSetUser = true

+ 4 - 15
src/utils/permission.ts

@@ -1,4 +1,6 @@
 import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+import {hasPermission} from "@/directives/permission/hasPermi";
+
 
 const { t } = useI18n() // 国际化
 
@@ -7,21 +9,8 @@ const { t } = useI18n() // 国际化
  * @param {Array} value 校验值
  * @returns {Boolean}
  */
-export function checkPermi(value: string[]) {
-  if (value && value instanceof Array && value.length > 0) {
-    const { wsCache } = useCache()
-    const permissionDatas = value
-    const all_permission = '*:*:*'
-    const userInfo = wsCache.get(CACHE_KEY.USER)
-    const permissions = userInfo?.permissions || []
-    const hasPermission = permissions.some((permission: string) => {
-      return all_permission === permission || permissionDatas.includes(permission)
-    })
-    return !!hasPermission
-  } else {
-    console.error(t('permission.hasPermission'))
-    return false
-  }
+export function checkPermi(permission: string[]) {
+  return hasPermission(permission)
 }
 
 /**

+ 24 - 7
src/views/bpm/model/CategoryDraggableModel.vue

@@ -158,7 +158,7 @@
               link
               type="primary"
               @click="openModelForm('update', scope.row.id)"
-              v-hasPermi="['bpm:model:update']"
+              v-if="hasPermiUpdate"
               :disabled="!isManagerUser(scope.row)"
             >
               修改
@@ -167,7 +167,7 @@
               link
               type="primary"
               @click="openModelForm('copy', scope.row.id)"
-              v-hasPermi="['bpm:model:update']"
+              v-if="hasPermiUpdate"
               :disabled="!isManagerUser(scope.row)"
             >
               复制
@@ -177,7 +177,7 @@
               class="!ml-5px"
               type="primary"
               @click="handleDeploy(scope.row)"
-              v-hasPermi="['bpm:model:deploy']"
+              v-if="hasPermiDeploy"
               :disabled="!isManagerUser(scope.row)"
             >
               发布
@@ -185,20 +185,20 @@
             <el-dropdown
               class="!align-middle ml-5px"
               @command="(command) => handleModelCommand(command, scope.row)"
-              v-hasPermi="['bpm:process-definition:query', 'bpm:model:update', 'bpm:model:delete']"
+              v-if="hasPermiMore"
             >
               <el-button type="primary" link>更多</el-button>
               <template #dropdown>
                 <el-dropdown-menu>
                   <el-dropdown-item
                     command="handleDefinitionList"
-                    v-if="checkPermi(['bpm:process-definition:query'])"
+                    v-if="hasPermiPdQuery"
                   >
                     历史
                   </el-dropdown-item>
                   <el-dropdown-item
                     command="handleChangeState"
-                    v-if="checkPermi(['bpm:model:update']) && scope.row.processDefinition"
+                    v-if="hasPermiUpdate && scope.row.processDefinition"
                     :disabled="!isManagerUser(scope.row)"
                   >
                     {{ scope.row.processDefinition.suspensionState === 1 ? '停用' : '启用' }}
@@ -214,7 +214,7 @@
                   <el-dropdown-item
                     type="danger"
                     command="handleDelete"
-                    v-if="checkPermi(['bpm:model:delete'])"
+                    v-if="hasPermiDelete"
                     :disabled="!isManagerUser(scope.row)"
                   >
                     删除
@@ -278,6 +278,23 @@ const originalData: any = ref([]) // 原始数据
 const modelList: any = ref([]) // 模型列表
 const isExpand = ref(false) // 是否处于展开状态
 
+const hasPermiUpdate = computed(() => {
+  return checkPermi(['bpm:model:update'])
+})
+const hasPermiDelete = computed(() => {
+  return checkPermi(['bpm:model:delete'])
+})
+const hasPermiDeploy = computed(() => {
+  return checkPermi(['bpm:model:deploy'])
+})
+const hasPermiMore = computed(() => {
+  return checkPermi(['bpm:process-definition:query', 'bpm:model:update', 'bpm:model:delete'])
+})
+const hasPermiPdQuery = computed(() => {
+  return checkPermi(['bpm:process-definition:query'])
+})
+
+
 /** '更多'操作按钮 */
 const handleModelCommand = (command: string, row: any) => {
   switch (command) {