From dedbadd96ab7e1533572b25511fd201678c64dad Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期四, 17 十月 2024 09:56:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS-WEB/src/views/integration/systemInfo.vue |  222 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 189 insertions(+), 33 deletions(-)

diff --git a/Source/UBCS-WEB/src/views/integration/systemInfo.vue b/Source/UBCS-WEB/src/views/integration/systemInfo.vue
index a0c1f05..90d9aac 100644
--- a/Source/UBCS-WEB/src/views/integration/systemInfo.vue
+++ b/Source/UBCS-WEB/src/views/integration/systemInfo.vue
@@ -1,13 +1,16 @@
 <template>
   <basic-container>
-    <avue-crud ref="crud" :data="data" :option="option" :page.sync="page" :search.sync="search" :table-loading="loading"
+    <avue-crud ref="crud" :data="data" :option="option" :page.sync="page" :permission="permissionList"
+               :search.sync="search"
+               :table-loading="loading"
                @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete" @row-update="handleEdit"
                @refresh-change="handleRefresh" @size-change="handleSizePage" @current-change="handleCurrentPage"
                @selection-change="selectionChange" @row-click="handleRowClick">
       <template slot="menuLeft">
         <!-- <el-button icon="el-icon-search" size="small" type="primary" @click="handleStatus">鏌� 璇�
         </el-button> -->
-        <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">鍒� 闄�
+        <el-button v-if="permissionList.delBtn" icon="el-icon-delete" size="small" type="danger"
+                   @click="handleDeleteByIds">鍒� 闄�
         </el-button>
       </template>
       <template slot="search" slot-scope="{row,size}">
@@ -19,12 +22,14 @@
                   :size="size" clearable style="width:300px;margin-left: 10px;"
                   @clear="handleClear" @keyup.enter.native="handleEnter"></el-input>
       </template>
-      <template #menu="{row,index,size}">
+      <template v-if="permissionList.empower" #menu="{row,index,size}">
         <el-button icon="el-icon-menu" size="small" type="text" @click="classifyHandler(row)">鍒嗙被鎺堟潈</el-button>
-
       </template>
+
+
     </avue-crud>
-    <el-dialog :visible.sync="dialogVisible" append-to-body class="avue-dialog avue-dialog--top" title="鍒嗙被鎺堟潈" top="-50px">
+    <el-dialog :visible.sync="dialogVisible" append-to-body class="avue-dialog avue-dialog--top" title="鍒嗙被鎺堟潈"
+               top="-50px">
 
       <el-row>
         <el-col :span="10">
@@ -36,20 +41,31 @@
           </avue-tree>
         </el-col>
       </el-row>
+
       <div slot="footer" class="dialog-footer" style="height: 50px;line-height: 50px">
-        <el-button type="primary" icon="el-icon-plus" size="small" @click="empower">鎺� 鏉�</el-button>
-        <el-button icon="el-icon-close"  size="small" type="danger">閲� 缃�</el-button>
-    </div>
+        <el-button icon="el-icon-plus" size="small" type="primary" @click="empower">鎺� 鏉�</el-button>
+        <el-button icon="el-icon-close" size="small" type="danger" @click="resetting">閲� 缃�</el-button>
+      </div>
     </el-dialog>
   </basic-container>
 </template>
 <script>
-import {getSysInfoList, sysInfoAdd, sysInfoEdit, sysInfoDel, sysInfoTree,batchAddSave} from '@/api/integration/sysInfo.js'
+import {
+  getSysInfoList,
+  sysInfoAdd,
+  sysInfoEdit,
+  sysInfoDel,
+  sysInfoTree,
+  batchAddSave
+} from '@/api/integration/sysInfo.js'
+import {mapGetters} from "vuex";
 
 export default {
   data() {
     return {
-      checkAll:[],
+      checkAll: {},
+      ParentList: [],
+      ParentRemoveList: [],
       //閬垮厤缂撳瓨
       reload: Math.random(),
       TreeLoading: false,
@@ -79,8 +95,25 @@
       search: {},
       delIds: [],
       data: [],
-      option: {
+
+    }
+  },
+  created() {
+  },
+  computed: {
+    ...mapGetters(["permission"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(this.permission.systemInfo.systemInfo_add, false),
+        editBtn: this.vaildData(this.permission.systemInfo.systemInfo_edit, false),
+        delBtn: this.vaildData(this.permission.systemInfo.systemInfo_delete, false),
+        empower: this.vaildData(this.permission.systemInfo.systemInfo_empower, false),
+      }
+    },
+    option() {
+      return {
         height: "auto",
+        calcHeight: 20,
         tip: false,
         border: true,
         align: 'center',
@@ -123,36 +156,156 @@
             type: 'textarea'
           }
         ]
-      },
+      }
     }
   },
-
   methods: {
-    empower(){
-      batchAddSave({systemOid: this.checkAll.oid, systemId: this.checkAll.id}).then(res=>{
-        console.log(res)
+    //閲嶇疆
+    resetting() {
+      this.$refs.tree.setCheckedKeys([])
+      // console.log(this.ParentList)
+    },
+    empower() {
+      batchAddSave(this.checkAll.oid, this.checkAll.id, this.ParentList).then(res => {
+        // console.log(res.data)
+        if (res.data.code === 200) {
+          this.$message.success(res.data.msg)
+          this.dialogVisible = false;
+        }
       })
     },
     //鍒嗙被鎺堟潈澶氶�夊洖璋�
-    checkChange(row,checked) {
-      if(checked){
-        console.log('row',row)
-        this.checkAll.push(row);
-        // console.log('checkAll',this.checkAll)
+    checkChange(row, checked) {
+      if (checked) {
+        this.addAllChildren(row.children);
+        this.addToParentList(row);
+        // 鍕鹃�夎鏃跺皢鎵�鏈夎妭鐐规坊鍔犲埌ParentList涓�
+      } else {
+        this.removeAllChildren(row.children);
+        this.removeFromParentList(row);
+        // 鍙栨秷鍕鹃�夊皢鎵�鏈夎妭鐐规坊鍔犱粠ParentList涓Щ闄�
       }
+      // console.table(this.ParentList);
+    },
+    //瀛愯妭鐐规坊鍔�
+    addAllChildren(children) {
+      for (let child of children) {
+        this.addToParentList(child);
+        // 灏嗗瓙鑺傜偣娣诲姞鍒� ParentList 涓�
+        if (child.children && child.children.length > 0) {
+          this.addAllChildren(child.children);
+        }
+      }
+    },
+    //瀛愯妭鐐圭Щ闄�
+    removeAllChildren(children) {
+      for (let child of children) {
+        this.removeFromParentList(child);
+        // 灏嗗瓙鑺傜偣浠� ParentList 涓Щ闄�
+        if (child.children && child.children.length > 0) {
+          this.removeAllChildren(child.children);
+        }
+      }
+    },
+    //褰撳墠鐖惰妭鐐规坊鍔�
+    addToParentList(item) {
+      const classifyOid = item.attributes.classifyOid;
+      if (!this.isClassifyOidExists(classifyOid)) {
+        const record = {
+          oid: item.oid,
+          classifyId: item.attributes.classifyId,
+          classifyOid: classifyOid,
+        };
+        this.ParentList.push(record);
+      }
+    },
+    //褰撳墠鐖惰妭鐐圭Щ闄�
+    removeFromParentList(item) {
+      const classifyOid = item.attributes.classifyOid;
+      if (this.isClassifyOidExists(classifyOid)) {
+        const index = this.findIndexByClassifyOid(classifyOid);
+        if (index !== -1) {
+          this.ParentList.splice(index, 1);
+        }
+      }
+    },
+    //鍒ら噸-ParentList
+    isClassifyOidExists(classifyOid) {
+      return this.ParentList.some(item => item.classifyOid === classifyOid);
+    },
+    //鏌ユ壘index浣嶇疆
+    findIndexByClassifyOid(classifyOid) {
+      return this.ParentList.findIndex(item => item.classifyOid === classifyOid);
     },
     //鍒嗙被鎺堟潈
     classifyHandler(row) {
       this.loading = true;
+      this.checkAll = row
       sysInfoTree({systemOid: row.oid, systemId: row.id}).then(res => {
-        this.TreeData = res.data;
-        this.ModifyProperties(this.TreeData, 'text', 'label');
-        // 鏍规嵁 this.TreeData 鐨勯暱搴﹁绠楀欢杩熸椂闂�
+        let List = [];
+        let value = 0;
+        let NumberList = [];
+
+        function traverse(obj, parent) {
+          //閲嶆柊鏋勫缓涓�娆¢�変腑褰撳墠row鐨勬暟鎹�
+          const record = {
+            label: obj.text,
+            oid: obj.oid,
+            attributes: {
+              classifyId: obj.attributes.classifyId,
+              classifyOid: obj.attributes.classifyOid,
+              selected: obj.attributes.selected
+            },
+            classParentOid: obj.parentId,
+            value: value,
+            children: []
+          };
+          //褰撳墠宸查�夋嫨鏁版嵁鍥炲~
+          if (record.attributes.selected == 'true') {
+            NumberList.push(record.value);
+          }
+          if (parent) {
+            const stingChild = parent.children.find(child => child.label === record.label);
+            if (stingChild) {
+              record.value = stingChild.value; // 浣跨敤宸插瓨鍦ㄧ殑瀛愯妭鐐圭殑value鍊�
+            } else {
+              parent.children.push(record);
+              value++;
+            }
+          } else {
+            const stingRecord = List.find(item => item.label === record.label);
+            if (stingRecord) {
+              record.value = stingRecord.value; // 浣跨敤宸插瓨鍦ㄧ殑椤跺眰鑺傜偣鐨剉alue鍊�
+            } else {
+              List.push(record);
+              value++;
+            }
+          }
+          if (obj.children && obj.children.length > 0) {
+            for (let child of obj.children) {
+              traverse(child, record);
+            }
+          }
+        }
+
+        for (let item of res.data) {
+          traverse(item, null);
+        }
+        // console.log('list', List);
+        this.TreeData = List;
+        // this.ModifyProperties(this.TreeData, 'text', 'label');
+        // 鏍规嵁this.TreeData鐨勯暱搴﹁绠楀欢杩熸椂闂�
         const delayTime = this.TreeData.length * 1;
         setTimeout(() => {
           this.loading = false;
-          this.reload = Math.random()
+          this.reload = Math.random();
           this.dialogVisible = true;
+
+          this.$nextTick(() => {
+            if (this.$refs.tree) {
+              this.$refs.tree.setCheckedKeys(NumberList);
+            }
+          });
         }, delayTime);
       });
     },
@@ -170,7 +323,6 @@
     },
     async getDataList() {
       this.loading = true;
-      console.log(this.search);
       const {pageSize, currentPage} = this.page;
       const conditions = {};
       if (Object.keys(this.search).length > 0) {
@@ -182,7 +334,7 @@
       }
       const response = await getSysInfoList(pageSize, currentPage, conditions);
       if (response.status === 200) {
-        console.log(response);
+        // console.log(response);
         this.loading = false;
         const data = response.data.data;
         this.data = data.records;
@@ -201,6 +353,7 @@
             message: '鏂板鏁版嵁鎴愬姛锛�'
           })
           done(row)
+          await this.getDataList();
           // this.$refs.crud.refreshTable()
           // this.getDataList()
         }
@@ -221,6 +374,7 @@
           })
           done(row)
         }
+        await this.getDataList();
       } catch {
         loading()
       }
@@ -251,12 +405,12 @@
       }).then(async () => {
         const response = await sysInfoDel(param)
         if (response.status === 200) {
-          console.log(response)
+          // console.log(response)
           this.$message({
             type: 'success',
             message: '鍒犻櫎鎴愬姛!'
           });
-          this.getDataList()
+          await this.getDataList()
         }
       })
     },
@@ -273,7 +427,7 @@
     },
     // enter鎼滅储
     handleEnter() {
-     this.getDataList()
+      this.getDataList()
     },
     // 杈撳叆妗嗘竻绌�
     handleClear() {
@@ -307,7 +461,9 @@
 }
 </script>
 <style lang="scss" scoped>
-::v-deep(.avue-crud .el-select) {
-  width: 100px !important;
-}
+  ::v-deep{
+      .avue-crud .el-select {
+      width: 100px !important;
+    }
+  }
 </style>

--
Gitblit v1.9.3