Browse Source

Merge branch 'all-v4-liufei' into 'all-v4'

fix: 解决相机树节点value重复的问题

See merge request skyeye/skyeye_frontend/skyeye-admin!300
Fei Liu 1 year ago
parent
commit
5a37960c1f

+ 3 - 2
src/router/full-routes.ts

@@ -471,13 +471,14 @@ const fullRoutes: AppRouteRecordRaw[] = [
         }
       },
       {
-        // 反馈处理
+        // 反馈处理 (菜单不可见)
         path: 'feedback-handle',
         name: 'SystemFeedbackHandle',
         component: '/feedback/handleFeedback',
         meta: {
           icon: '',
-          title: '反馈处理'
+          title: '反馈处理',
+          activeMenu: 'SystemFeedback',
         }
       },
       {

+ 4 - 1
src/views/system/role/components/PermissionTreeCard.vue

@@ -69,7 +69,10 @@
   /**
    * 编辑角色时,勾选已分配的权限
    */
-  const setAssignedPermissions = (keys: PermissionTreeKey[]) => {
+  const setAssignedPermissions = (keys: PermissionTreeKey[], keyPrefix = '') => {
+    if (keyPrefix) {
+      keys = keys.map(key => `${keyPrefix}-${key}`);
+    }
     treeInstance.value?.setCheckedKeys(keys, true);
     leafCheckedKeys.value = keys;
   };

+ 19 - 2
src/views/system/role/components/RoleDrawer.vue

@@ -38,6 +38,7 @@
   import useFuncPermTree from '../hooks/useFunctionPermissionTree';
   import useCameraPermTree from '../hooks/useCameraPermissionTree';
   import { createRole, editRole, getAssignedPerms } from '@/api/system/role';
+  import { PermissionTreeKey } from '@/types/permission/type';
 
   defineProps<{
     title: string;
@@ -104,7 +105,8 @@
   }
 
   const displayAssignedPermissions = (result: AssignedPermissions) => {
-    cameraCardInstance.value?.setAssignedPermissions(result.cameraIds ?? []);
+    // 相机树很有可能会有 id 重复的情况,比如说 一个camera id 和 一个 workspace id 相同,这样会导致 tree 节点 value 不唯一,因此需要给个前缀
+    cameraCardInstance.value?.setAssignedPermissions(result.cameraIds ?? [], 'camera');
     menuCardInstance.value?.setAssignedPermissions(result.menuIds ?? []);
     funcCardInstance.value?.setAssignedPermissions(result.permIds ?? []);
   }
@@ -124,7 +126,7 @@
    * 提交。创建和编辑统一
    */
   const submit = async () => {
-    formData.cameraIds = cameraCardInstance.value!.getSelectedPermissions();
+    formData.cameraIds = cleanCameraPermissions(cameraCardInstance.value!.getSelectedPermissions());
     formData.menuIds = menuCardInstance.value!.getSelectedPermissions();
     formData.permIds = funcCardInstance.value!.getSelectedPermissions();
 
@@ -140,5 +142,20 @@
     }
   }
 
+  /**
+   * 获取到的相机的权限码是 camera-xxx, 例如 camera-11, 提交后端转换成数字 11
+   */
+  const cleanCameraPermissions = (perms: PermissionTreeKey[]) => {
+    return perms.map(perm => {
+      if (typeof perm === 'string' && perm.includes('-')) {
+        const splits = perm.split('-');
+        return +splits[1];
+      }
+
+      // 否则正常返回
+      return perm;
+    });
+  }
+
   defineExpose({ open });
 </script>

+ 2 - 1
src/views/system/role/utils/tree.ts

@@ -13,7 +13,8 @@ export function transformToViewTree<T>(rawTree: Array<T>, labelKey='label', valu
 
   for (const item of rawTree) {
     const viewItem: PermissionView = {
-      value: item[valueKey],
+      // @ts-ignore
+      value: item.nodeType ? `${item.nodeType}-${item[valueKey]}` : item[valueKey],
       label: item[labelKey],
       children: [],
     };