From e1c14ac427ccf3437ca371e40394ef7265dbc59e Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期三, 24 一月 2024 11:25:22 +0800
Subject: [PATCH] 集团属性映射需求完善

---
 Source/UBCS-WEB/src/const/code/codeKeyAttrRepeat.js        |    9 --
 Source/UBCS-WEB/src/views/integration/integrationIndex.vue |  183 +++++++++++++++++++++++++++++++--------------
 2 files changed, 127 insertions(+), 65 deletions(-)

diff --git a/Source/UBCS-WEB/src/const/code/codeKeyAttrRepeat.js b/Source/UBCS-WEB/src/const/code/codeKeyAttrRepeat.js
index 693c4bb..4aba109 100644
--- a/Source/UBCS-WEB/src/const/code/codeKeyAttrRepeat.js
+++ b/Source/UBCS-WEB/src/const/code/codeKeyAttrRepeat.js
@@ -329,14 +329,5 @@
         trigger: "blur"
       }],
     },
-    {
-      required: true,
-      label: '娣锋穯瀛楃杞崲',
-      prop:'confound',
-      labelWidth : 110,
-      search: false,
-      formslot:true,
-      display:true
-    }
   ]
 }
diff --git a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
index 6b902af..d399a31 100644
--- a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
+++ b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
@@ -5,8 +5,8 @@
         <el-aside style="background-color: #fff;" width="210px">
           <el-input v-model="filterText" placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�">
           </el-input>
-          <el-menu :default-openeds="['1', '3']" >
-            <el-tree  ref="tree" :data="treeData" :filter-node-method="filterNode" :props="defaultProps"
+          <el-menu :default-openeds="['1', '3']">
+            <el-tree ref="tree" :data="treeData" :filter-node-method="filterNode" :props="defaultProps"
                      accordion class="filter-tree" empty-text="鏆傛棤鏁版嵁" @node-click="handelTreeCell">
               <template slot-scope="{ node, data }" class="el-tree-node__label">
                 <el-tooltip :content="$createElement('div', { domProps: { innerHTML: node.label } })" class="item"
@@ -22,25 +22,33 @@
           </el-menu>
         </el-aside>
       </el-card>
-      <el-main >
+      <el-main>
         <el-card style="height: calc(100vh - 128px)">
           <el-form :model="form">
             <el-form-item label="闆嗗洟鍒嗙被" label-width="80px" size="small">
               <el-select ref="selectTree" v-model="groupVal" clearable placeholder="璇烽�夋嫨"
                          popper-class="popperTreeSelect">
-                <el-option :label="groupVal" :value="groupVal">
-                  <el-tree ref="groupTree" :data="groupTreeData" :props="defaultProps" empty-text="鏆傛棤鏁版嵁"
-                           @node-click="handleNodeClick">
+                <el-option :disabled="true" :label="groupVal" :value="groupVal">
+                  <el-tree ref="groupTree"
+                           :data="groupTreeData"
+                           :default-checked-keys="defaultCheckedKeys"
+                           :default-expanded-keys="defaultCheckedKeys"
+                           :props="defaultProps"
+                           empty-text="鏆傛棤鏁版嵁"
+                           node-key="oid"
+                           show-checkbox
+                           @check="handleCheck">
                   </el-tree>
                 </el-option>
               </el-select>
 
             </el-form-item>
           </el-form>
-          <el-card  style="height:38vh">
+          <el-card style="height:38vh">
             <avue-crud ref="crudMapping" :data="mappingData" :option="optionMapping" :table-loading="loading"
                        @select="setCurrentRow" @row-update="handleMapingUpdate"
-                       @row-click="handleMapingClick" @row-dblclick="handleMapingRowClick" @selection-change="selectionChange"
+                       @row-click="handleMapingClick" @row-dblclick="handleMapingRowClick"
+                       @selection-change="selectionChange"
                        @select-all="handleSelectAll">
               <template slot="menuLeft">
                 <el-button :disabled="disabledPush" icon="el-icon-plus" size="small" type="primary"
@@ -105,6 +113,8 @@
       highlightCurrentRow: true,
     }
     return {
+      defaultCheckedKeys: [],
+      isNodeDisabled: true,
       // 琛ㄥ崟鍊�
       form: {
         // 闆嗗洟鏍戞樉绀哄��
@@ -180,12 +190,15 @@
       treeData: [],
       // 闆嗗洟鍒嗙被鏍�
       groupTreeData: [],
-      // 鏍憄opos鏇挎崲鍊�
+      // 鏍憄rpos鏇挎崲鍊�
       defaultProps: {
         children: 'children',
         label: 'name',
         id: 'oid',
-        isLeaf: ''
+        isLeaf: '',
+        // disabled:()=>{
+        //   return true
+        // }
       },
       transferProps: {
         key: 'oid',
@@ -201,6 +214,7 @@
       mappingForm: {},
       // 瀹氭椂鍣�
       times: null,
+      TreeSelectOid: ""
 
     }
   },
@@ -277,25 +291,80 @@
       }
     },
     // 鎺ュ彛鑾峰彇闆嗗洟鍒嗙被鏍�
-    async referTree(oid, checked) {
-      this.groupTreeData = []
-      const response = await referTree({'conditionMap[codeclsfid]': oid, parentOid:'0'})
+    async referTree(oid) {
+      this.groupTreeData = [];
+      const response = await referTree({'conditionMap[codeclsfid]': oid, parentOid: '0'});
       if (response.status === 200) {
-        if (checked) {
-          let items = response.data.map(item => {
-            let obj = {}
-            if (item.checked) obj = {...item}
-            else obj = null
-            return obj
-          })
-          var r = items.filter(s => {
-            return s && s.trim()
-          });
-          this.groupTreeData = r
-        } else {
-          this.groupTreeData = response.data
+        this.groupTreeData = response.data;  // 灏嗚幏鍙栧埌鐨勬暟鎹祴鍊肩粰闆嗗洟鍒嗙被鏍戞暟鎹�
+
+        await this.filterCheckedNodes(this.groupTreeData, this.defaultCheckedKeys);
+        await this.$nextTick(() => {
+          this.$refs.groupTree.setCheckedKeys(this.defaultCheckedKeys);
+        });
+
+        this.handlerTreeData(this.groupTreeData);
+
+        this.defaultCheckedKeys = [];
+      }
+    },
+    // 杩囨护鍑烘潵checked涓簍rue鐨勮妭鐐�
+    filterCheckedNodes(data, checkedNodes) {
+      data.forEach(node => {
+        if (node.checked) {
+          checkedNodes.push(node.oid);
+          this.getGridAttrMapping(node.oid);
+          this.form.groupValue = node.oid;
+          this.groupVal = node.name;
+        }
+
+        if (node.children && node.children.length > 0) {
+          this.filterCheckedNodes(node.children, checkedNodes);
+        }
+      });
+    },
+    // 杩囨护澶勭悊姣忎釜鑺傜偣
+    handlerTreeNode(node) {
+      // 鏍规嵁鑺傜偣绂佺敤鐘舵�佽缃妭鐐规槸鍚︾鐢�
+      this.$set(node, 'disabled', !node.checked);
+      if (node.children && node.children.length > 0) {
+        // 閫掑綊寰幆澶勭悊鎵�鏈夊瓙鑺傜偣
+        node.children.forEach(child => this.handlerTreeNode(child));
+      }
+    },
+    // 妫�鏌ユ墍鏈夎妭鐐规槸鍚﹂兘鏄湭绂佺敤鐘舵��
+    allNodeChecked(data) {
+      for (const node of data) {
+        // 濡傛灉瀛樺湪绂佺敤鑺傜偣杩斿洖false
+        if (node.checked) {
+          return false;
+        }
+        // 濡傛灉瀛樺湪瀛愯妭鐐逛笖瀛愯妭鐐瑰瓨鍦ㄧ鐢ㄨ妭鐐癸紝鍒欒繑鍥瀎alse
+        if (node.children && !this.allNodeChecked(node.children)) {
+          return false;
         }
       }
+      // 娌℃湁绂佺敤鑺傜偣杩斿洖true
+      return true;
+    },
+    // 闆嗗洟鍒嗙被鏍戠鐢ㄦ暟鎹鐞嗘暣鍚堟柟娉�
+    handlerTreeData(data) {
+      if (this.allNodeChecked(data)) {
+        // 濡傛灉鎵�鏈夎妭鐐归兘鏈鐢ㄥ皢鎵�鏈夎妭鐐硅缃负false
+        data.forEach(node => {
+          this.$set(node, 'disabled', false); // Vue 3 涓彲鑳戒笉闇�瑕佽繖鏍峰仛
+        });
+        return;
+      }
+      // 鏌ユ壘绂佺敤鑺傜偣
+      let checkedNode = data.find(node => node.checked);
+      data.forEach(node => {
+        // 濡傛灉鑺傜偣涓嶆槸绂佺敤鑺傜偣璁剧疆涓簍rue
+        this.$set(node, 'disabled', node !== checkedNode);
+        if (node.children && node.children.length > 0) {
+          // 璋冪敤寰幆鑺傜偣
+          this.handlerTreeNode(node);
+        }
+      });
     },
     // 宸︿晶鏍戣繃婊ゆ悳绱�
     filterNode(value, data) {
@@ -350,17 +419,16 @@
     },
     // 宸︿晶鏍戠偣鍑�
     handelTreeCell(event) {
-      if (event.leaf) {
-        this.treeParam.codeClassifyId = event.oid
-        this.form.groupValue = ''
-        this.groupVal = ''
-        this.tableData = []
-        this.referTree(event.oid, event.checked)
-        this.getListCodeByClassId(event.oid)
-      }
+      this.treeParam.codeClassifyId = event.oid
+      this.form.groupValue = ''
+      this.groupVal = ''
+      this.tableData = []
+      this.mappingData = []
+      this.referTree(event.oid)
+      this.getListCodeByClassId(event.oid)
     },
-    // 闆嗗洟鍒嗙被鏍戠偣鍑�
-    handleNodeClick(data) {
+    // 闆嗗洟鍒嗙被鏍戦�夋嫨
+    handleCheck(data) {
       this.form.groupValue = data.oid
       this.groupVal = data.name
       this.$refs.selectTree.blur()
@@ -438,27 +506,30 @@
 }
 </script>
 <style lang="scss" scoped>
-  .setstyle {
-    min-height: 200px;
-    padding: 0 !important;
-    margin: 0;
-    overflow: auto;
-    cursor: default !important;
+.setstyle {
+  min-height: 200px;
+  padding: 0 !important;
+  margin: 0;
+  overflow: auto;
+  cursor: default !important;
+}
+
+::v-deep {
+  .el-transfer-panel__list {
+    width: 100%;
+    height: 370px;
   }
 
-  ::v-deep{
-    .el-transfer-panel__list {
-      width: 100%;
-      height: 370px;
-    }
-    .el-transfer-panel__body {
-      height: 370px;
-    }
-    .el-input {
-      width: auto;
-    }
-    .el-transfer-panel {
-      width: 270px;
-    }
+  .el-transfer-panel__body {
+    height: 370px;
   }
+
+  .el-input {
+    width: auto;
+  }
+
+  .el-transfer-panel {
+    width: 270px;
+  }
+}
 </style>

--
Gitblit v1.9.3