From cb98465a22cc88684c5798df88f2e0795a5e6ba8 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期二, 10 九月 2024 09:48:53 +0800
Subject: [PATCH] 修改资源配置中菜单界面bug

---
 src/views/authority/role/index.vue |  254 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 245 insertions(+), 9 deletions(-)

diff --git a/src/views/authority/role/index.vue b/src/views/authority/role/index.vue
index f049890..76db54f 100644
--- a/src/views/authority/role/index.vue
+++ b/src/views/authority/role/index.vue
@@ -87,11 +87,19 @@
         </template>
         <template #operations="{ record }">
           <a-space>
+            <a-button type="outline" @click="operation(2, record)"
+            >缂栬緫</a-button
+            >
             <a-button
               type="dashed"
               status="warning"
               @click="operation(4, record)"
-            >瑙掕壊鏉冮檺</a-button>
+            >璧勬簮閰嶇疆</a-button>
+            <a-button
+              type="dashed"
+              status="success"
+              @click="operation(5, record)"
+            >閮ㄩ棬閰嶇疆</a-button>
             <a-popconfirm
               content="璇风‘璁ゆ槸鍚﹀垹闄わ紵"
               type="success"
@@ -99,8 +107,6 @@
             >
               <a-button type="outline" status="danger">鍒犻櫎</a-button>
             </a-popconfirm>
-
-
           </a-space>
         </template>
       </a-table>
@@ -136,6 +142,7 @@
               <icon-calendar />
               鑿滃崟
             </template>
+            <div class="cdtree">
             <a-tree
               class="tree-demo"
               v-model:checked-keys="checkedKeysMenu"
@@ -151,6 +158,7 @@
               }"
             >
             </a-tree>
+            </div>
           </a-tab-pane>
           <a-tab-pane key="2">
             <template #title>
@@ -205,6 +213,24 @@
               </a-checkbox>
             </a-checkbox-group>
           </a-tab-pane>
+          <a-tab-pane key="4">
+            <template #title>
+              <icon-user />
+              妯″瀷
+            </template>
+            <a-checkbox-group
+              v-model="checkedKeysModel"
+              @change="onCheckModel"
+            >
+              <a-checkbox
+                v-for="(model, index) of ModelList"
+                :value="model.id"
+                @change="onCheckModel"
+                style="width:100%">
+                {{ model.llm_factory+" "+model.llm_name+" "+model.model_type }}
+              </a-checkbox>
+            </a-checkbox-group>
+          </a-tab-pane>
         </a-tabs>
         <a-card
           :style="{
@@ -256,6 +282,57 @@
               {{ tag.agentTitle }}
             </a-tag>
           </a-space>
+          <a-divider />
+          <a-space wrap>
+            妯″瀷:
+            <a-tag
+              v-for="(tag, index) of checkStrictlyModel"
+              :key="tag.modelId"
+            >
+              {{ tag.modelTitle }}
+            </a-tag>
+          </a-space>
+        </a-card>
+      </div>
+    </a-modal>
+    <a-modal
+      width="50%"
+      v-model:visible="deptvisible"
+      title="閮ㄩ棬閰嶇疆"
+      @cancel="handleCancel(3)"
+      @ok="editDeptHandleOk"
+    >
+      <div :style="{ display: 'flex' }">
+        <a-card
+          :style="{ 'width': '460px', 'height': '500px', 'overflow-y': 'auto' }"
+          title="閮ㄩ棬閰嶇疆"
+          hoverable
+        >
+          <a-tree
+            class="tree-demo"
+            v-model:checked-keys="checkedKeys"
+            v-model:expanded-keys="expandKdys"
+            :checkable="true"
+            :data="treeData"
+            :show-line="showLine"
+            @check="onCheck"
+            :fieldNames="{
+              key: 'deptId',
+              title: 'deptName',
+              children: 'children',
+            }"
+          >
+          </a-tree>
+        </a-card>
+        <a-card class="card-demo" title="瑙掕壊鎵�灞為儴闂�" hoverable>
+          <a-space wrap>
+            <a-tag
+              v-for="(tag, index) of checkStrictly"
+              :key="tag.deptId"
+            >
+              {{ tag.deptName }}
+            </a-tag>
+          </a-space>
         </a-card>
       </div>
     </a-modal>
@@ -284,9 +361,14 @@
   import { Modal } from '@arco-design/web-vue';
   import Authheader from '@/views/authority/components/authheader.vue';
   import router from "@/router";
-  import { queryCanvasList } from "@/api/Agent";
-  import { getUserResources } from "@/utils/auth";
+  import { queryCanvasList, queryModelList } from "@/api/Agent";
+  import { getUserInfo, getUserResources } from "@/utils/auth";
   import { forEach } from "lodash";
+
+  let treeData = ref([]);
+  let checkedKeys = ref([]);
+  let expandKdys = ref([]);
+  let checkStrictly = ref([]);
 
   let treeDataMenu = ref([]);
   let checkedKeysMenu = ref([]);
@@ -301,10 +383,15 @@
 
   let checkedKeysAgent = ref([]);
   let checkStrictlyAgent = ref([]);
+  let checkStrictlyModel = ref([]);
+  let checkedKeysModel = ref([]);
+
 
   let knowledgeList = ref([]);
   let DialogsList = ref([]);
   let AgentList = ref([]);
+  let ModelList = ref([]);
+
 
   let menuTips = ref(['鏉冮檺绠$悊', '瑙掕壊']);
   type SizeProps = 'mini' | 'small' | 'medium' | 'large';
@@ -335,9 +422,78 @@
 
   let size = ref<SizeProps>('medium');
   let visible = ref(false);
+  let deptvisible = ref(false);
   let resourcevisible = ref(false);
   let selectRole = ref({});
 
+  let u =JSON.parse(getUserInfo());
+
+
+  const editDeptHandleOk = async () => {
+    let depts: Array = [],
+      role: Role = { roleId: selectRole.value.roleId };
+    checkStrictly.value.forEach((val) => {
+      depts.push(val.deptId);
+    });
+    role.dept = depts;
+    await RoleEdit(role).then((res) => {
+      fetchData();
+    });
+  };
+
+  const onCheck = (newCheckedKeys, event) => {
+    if (event.checked) {
+      if (event.node.children.length > 0) {
+        event.checkedNodes.forEach((node) => {
+          let o = { deptId: node.deptId, deptName: node.deptName,parentId: node.parentId };
+          checkStrictly.value.push(o);
+        });
+      } else {
+        let o = { deptId: event.node.deptId, deptName: event.node.deptName,parentId: event.node.parentId };
+        checkStrictly.value.push(o);
+      }
+    } else {
+      let depts = [];
+      let isParent = false;
+      let parentNode;
+      checkStrictly.value.forEach((val, idx, array) => {
+        if (val.deptId == event.node.parentId) {
+          parentNode = { deptId: val.deptId, deptName: val.deptName, parentId: val.parentId };
+        } else {
+          if (val.deptId != event.node.deptId && !findDeptChild(event.node, val)) {
+            depts.push({ deptId: val.deptId, deptName: val.deptName, parentId: val.parentId });
+            if (val.parentId == event.node.parentId && val.parentId.length>0) {
+              isParent = true;
+            }
+          }
+        }
+      });
+      if (isParent && parentNode) {
+        depts.push(parentNode);
+      }
+      checkStrictly.value = depts;
+    }
+  };
+
+  const findDeptChild = (node, val): boolean => {
+    let isExist = false;
+    if (node.children?.length > 0) {
+      node.children.forEach((child) => {
+        if (val.deptId == child.deptId) {
+          isExist = isExist || true;
+        } else {
+          isExist = isExist || findDeptChild(child, val);
+        }
+      });
+    }
+    return isExist;
+  };
+
+  const OrganizationData = async (key) => {
+    await OrganizationList(key).then((res) => {
+      treeData.value = [...res.rows];
+    });
+  };
 
   const eachChildrenAdd=(node)=>{
     if (node.children?.length > 0) {
@@ -419,6 +575,24 @@
       });
     }
   };
+  const onCheckModel = (newCheckedKeys, event) => {
+    let o = {
+      modelId: event.target.value,
+      modelTitle: event.target.labels[0].innerText,
+    };
+    if (event.target.checked) {
+      checkStrictlyModel.value.push(o);
+    } else {
+      checkStrictlyModel.value.forEach((val, idx, array) => {
+        // val: 褰撳墠鍊�
+        if (val.modelId == event.target.value) {
+          checkStrictlyModel.value.splice(idx, 1);
+          return true;
+        }
+      });
+    }
+  };
+
   const onCheckDialog = (newCheckedKeys, event) => {
     let o = {
       dialogId: event.target.value,
@@ -513,6 +687,9 @@
     if (type == 2) {
       resourcevisible.value = false;
     }
+    if (type == 3) {
+      deptvisible.value = false;
+    }
   };
 
 
@@ -521,6 +698,7 @@
       dialogs: Array = [],
       agents: Array = [],
       Knowledges: Array = [],
+      llms: Array = [],
       role: Role = { roleId: selectRole.value.roleId };
     checkStrictlyMenu.value.forEach((val) => {
       resources.push(val.menuId);
@@ -541,6 +719,11 @@
       agents.push(val.agentId);
     });
     role.agents = agents;
+
+    checkStrictlyModel.value.forEach((val) => {
+      llms.push(val.modelId);
+    });
+    role.llms = llms;
 
     await RoleEdit(role).then((res) => {
       fetchData();
@@ -580,6 +763,14 @@
       editform.value.remark = "";
     }
 
+    if (t == 2) {
+      visible.value = true;
+      formRef.value?.resetFields();
+      save.value = '缂栬緫';
+      editform.value.roleId=record.roleId
+      editform.value.roleName = record.roleName;
+    }
+
     //鍒犻櫎
     if (t == 3) {
       await RoleDelete(record.roleId).then((res) => {
@@ -597,6 +788,8 @@
       checkStrictlyKnowledge.value = [];
       checkedKeysKnowledge.value = [];
       checkStrictlyDialog.value = [];
+      checkStrictlyAgent.value = [];
+      checkStrictlyModel.value = [];
       checkedKeysDialog.value = [];
       selectRole.value = record;
       if (record.resources) {
@@ -634,6 +827,35 @@
             agentTitle: val.title,
           });
           checkedKeysAgent.value.push(val.id);
+        });
+      }
+      if (record.llms) {
+        record.llms.forEach((val) => {
+          checkStrictlyModel.value.push({
+            modelId: val.id,
+            modelTitle: val.llm_name,
+          });
+          checkedKeysModel.value.push(val.id);
+        });
+      }
+
+    }
+    //閮ㄩ棬閰嶇疆
+    if (t == 5) {
+      deptvisible.value = true;
+      checkedKeys.value = [];
+      expandKdys.value = [];
+      checkStrictly.value = [];
+      selectRole.value = record;
+      expandKdys.value.push('0');
+      if (record?.dept) {
+        record.dept.forEach((val) => {
+          checkStrictly.value.push({
+            deptId: val.deptId,
+            deptName: val.deptName,
+          });
+          checkedKeys.value.push(val.deptId);
+          expandKdys.value.push(val.deptId);
         });
       }
     }
@@ -694,24 +916,31 @@
 
   const MenuData = async (key) => {
     await ResourceList(key).then((res) => {
-      let newTree=[]
-      removeChild(res.rows,newTree)
+      let newTree = [];
+      if (u.role != "admin") {
+        removeChild(res.rows, newTree);
+      }
       treeDataMenu.value = [...res.rows];
     });
   };
 
-  KnowledgeList().then((res) => {
+  KnowledgeList(u.role).then((res) => {
     knowledgeList.value = res.data;
   });
 
-  DialogList().then((res) => {
+  DialogList(u.role).then((res) => {
     DialogsList.value = res.data;
   });
   queryCanvasList(null).then((canvas) => {
     AgentList= canvas.data
   });
+  queryModelList().then((models) => {
+    ModelList = models.data;
+  });
+
   fetchData();
   MenuData();
+  OrganizationData("");
 
   const reset = () => {
     formModel.value = generateFormModel();
@@ -803,3 +1032,10 @@
     }
   }
 </style>
+<style>
+.cdtree {
+  .arco-tree-node-is-leaf {
+    display: inline-flex;
+  }
+}
+</style>
\ No newline at end of file

--
Gitblit v1.8.0