From 2353af8edf94434cd571100bb16ed9fe9f12819d Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期二, 16 四月 2024 20:15:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS-WEB/src/views/integration/integrationIndex.vue |  334 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 251 insertions(+), 83 deletions(-)

diff --git a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
index ed218ad..9e77493 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,30 +22,38 @@
           </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"
-                           @click="dialogPush = true">鏂� 澧�
-                </el-button>
+                <!--                <el-button :disabled="disabledPush" icon="el-icon-plus" size="small" type="primary"-->
+                <!--                           @click="dialogPush = true">鏂� 澧�-->
+                <!--                </el-button>-->
                 <el-button icon="el-icon-check" size="small" type="primary" @click="handleSave">淇� 瀛�
                 </el-button>
                 <el-button icon="el-icon-connection" size="small" type="primary"
@@ -54,6 +62,9 @@
                 <el-button icon="el-icon-connection" size="small" type="primary"
                            @click="handleSync('one')">鍚屾璇︾粏妯″瀷
                 </el-button>
+                <el-button icon="el-icon-coordinate" size="small" type="primary"
+                           @click="handlerAuto">鑷姩濉厖
+                </el-button>
               </template>
             </avue-crud>
           </el-card>
@@ -61,6 +72,11 @@
             <avue-crud ref="crudRange" :data="rangeData" :option="optinoRange" :style="{ marginTop: '-20px'}"
                        @row-update="handleUpdate"
                        @row-dblclick="handleRowClick">
+              <template slot="menuLeft">
+                <el-button icon="el-icon-coordinate" size="small" type="primary"
+                           @click="handlerAuto">鑷姩濉厖
+                </el-button>
+              </template>
             </avue-crud>
           </el-card>
         </el-card>
@@ -82,6 +98,7 @@
   listCodeAttributeByClassId,
   syncClassifyModel
 } from '@/api/integration/integration.js'
+import {getPage} from "@/api/omd/OmdAttribute";
 
 export default {
   components: {
@@ -105,6 +122,9 @@
       highlightCurrentRow: true,
     }
     return {
+      targetNameList: [], // 鍏冩暟鎹繑鍥炲悕绉�
+      defaultCheckedKeys: [],
+      isNodeDisabled: true,
       // 琛ㄥ崟鍊�
       form: {
         // 闆嗗洟鏍戞樉绀哄��
@@ -128,8 +148,8 @@
       optinoRange: {
         title: '灞炴�ф槧灏勫彇鍊艰寖鍥�',
         maxHeight: '280px',
-        header: false,
         rowKey: 'oid',
+        refreshBtn: false,
         column: [
           {label: '灞炴�ч泦鍥㈡灇涓惧��', prop: 'numTextValue', minWidth: 80},
           {label: '闆嗗洟灞炴�ф灇涓炬樉绀哄悕绉�', prop: 'numText', minWidth: 80},
@@ -156,6 +176,20 @@
         header: true,
         rowKey: 'oid',
         selection: false,
+        refreshBtn: false,
+        delBtn: false,
+        addBtn: false,
+        index: true,
+        columnBtn: false,
+        searchShow: true,
+        emptyBtn: false,
+        searchBtn: false,
+        searchShowBtn: false,
+        cellBtn: true,
+        border: true,
+        searchMenuSpan: 8,
+        highlightCurrentRow: true,
+        $cellEdit: true,
         column: [
           {label: '闆嗗洟鍒嗙被', prop: 'sourceClassifyName', minWidth: 80},
           {label: '鎵�灞炶鍥�', prop: 'viewName', minWidth: 80},
@@ -164,28 +198,38 @@
           {
             label: '灞炴�у悕绉�',
             prop: 'targetAttrName',
-            minWidth: 80,
-          },
-          {
-            label: '榛樿鍊�',
-            prop: 'defaultValue',
-            minWidth: 140,
+            type: 'select',
             cell: true,
-            blur: (value) => window.handleBlur(value, 'mapping')
+            filterable: true,
+            minWidth: 80,
+            props: {
+              label: 'targetAttrName',
+              value: 'targetAttrName'
+            },
+            dicData: [],
           },
+          // {
+          //   label: '榛樿鍊�',
+          //   prop: 'defaultValue',
+          //   minWidth: 140,
+          //   cell: true,
+          //   blur: (value) => window.handleBlur(value, 'mapping')
+          // },
         ],
-        ...options
       },
       // 涓绘暟鎹垎绫绘爲
       treeData: [],
       // 闆嗗洟鍒嗙被鏍�
       groupTreeData: [],
-      // 鏍憄opos鏇挎崲鍊�
+      // 鏍憄rpos鏇挎崲鍊�
       defaultProps: {
         children: 'children',
         label: 'name',
         id: 'oid',
-        isLeaf: ''
+        isLeaf: '',
+        // disabled:()=>{
+        //   return true
+        // }
       },
       transferProps: {
         key: 'oid',
@@ -201,6 +245,7 @@
       mappingForm: {},
       // 瀹氭椂鍣�
       times: null,
+      TreeSelectOid: ""
 
     }
   },
@@ -216,7 +261,6 @@
   mounted() {
     let that = this
     window.handleBlur = that.handleBlur
-
   },
   computed: {
     filtermapping() {
@@ -227,9 +271,23 @@
         return obj.targetAttrName
       })
       return transfer
+    },
+    targetColumn() {
+      return this.optionMapping.column.find(column => column.prop === 'targetAttrName');
     }
   },
   methods: {
+    getTargetName(data) {
+      this.targetColumn.dicData = data.filter(item => item.name && item.name.trim() !== "") // 杩囨护鎺塶ame涓虹┖鐨勫睘鎬�
+        .map(item => {
+          return {
+            targetAttrId: item.oid,
+            targetAttrKey: item.id,
+            targetAttrName: item.name,
+            disabled: false
+          }
+        });
+    },
     // 鎺ュ彛宸︿晶鏍�
     async getReferCodeClassifyTree() {
       this.treeData = []
@@ -253,7 +311,13 @@
       if (response.status === 200) {
         this.loading = false
         this.mappingData = response.data.data
-        // console.log(this.filtermapping)
+
+        for (const item of this.mappingData) {
+          if (item.targetAttrName && item.targetAttrId && item.targetAttrKey) {
+            const targetObject = this.targetColumn.dicData.find(obj => obj.targetAttrName === item.targetAttrName);
+            targetObject.disabled = true;
+          }
+        }
       }
     },
     // 鎺ュ彛鑾峰彇灞炴�ф槧灏勫彇鍊艰寖鍥�
@@ -272,29 +336,86 @@
       const response = await listCodeAttributeByClassId({codeClassifyId: oid})
       if (response.status === 200) {
         const data = response.data.data
-        this.transferData = data
+        this.transferData = data;
+        this.getTargetName(data)
+        // console.log(data)
       }
     },
     // 鎺ュ彛鑾峰彇闆嗗洟鍒嗙被鏍�
-    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) {
@@ -303,6 +424,16 @@
     },
     // 淇濆瓨鎸夐挳
     async handleSave() {
+      const getTargetCorresponding = (row) => {
+        return this.targetColumn.dicData.find(column => column.targetAttrName === row.targetAttrName);
+      }
+      for (const item of this.mappingData) {
+        item.$cellEdit = false;
+        if (item.targetAttrName) {
+          const {targetAttrId, targetAttrKey, targetAttrName} = await getTargetCorresponding(item);
+          Object.assign(item, {targetAttrId, targetAttrKey, targetAttrName});
+        }
+      }
       const response = await batchAddSave({dockingPreAttrMappingVOList: this.mappingData})
       if (response.status === 200) {
         this.$message({
@@ -323,13 +454,18 @@
           message: "璇烽�夋嫨涓�鏉¢泦鍥㈠垎绫�"
         });
       } else {
-        const response = await syncClassifyModel(param)
-        if (response.status === 200) {
-          console.log(response)
+        try {
+          const response = await syncClassifyModel(param);
+          if (response.status === 200) {
+            this.$message.success(response.data.msg)
+          }
+        } catch (error) {
+          console.error(error);
         }
       }
     },
     handelTransferSave(event) {
+      // console.log(event)
       let that = this
       const transferValue = event.value
       if (Object.keys(that.mappingForm).length == 0) {
@@ -339,25 +475,25 @@
         });
       } else {
         const findRow = that.mappingData.findIndex(item => item.metaListId === that.mappingForm.metaListId)
-        that.mappingData[findRow].targetAttrName = transferValue[0].name
-        that.mappingData[findRow].targetAttrId = transferValue[0].oid
+        that.mappingData[findRow].targetAttrName = transferValue[0].name;
+        that.mappingData[findRow].targetAttrId = transferValue[0].oid;
+        that.mappingData[findRow].targetAttrKey = transferValue[0].id;
         this.dialogPush = false;
       }
 
     },
     // 宸︿晶鏍戠偣鍑�
     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()
@@ -405,13 +541,37 @@
       done();
     },
     // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫鍚�
-    handleMapingUpdate(row, index, done) {
-      this.$message({
-        showClose: true,
-        message: "淇敼鎴愬姛",
-        type: "success",
-      });
-      done();
+    async handleMapingUpdate(row, index, done) {
+      const getTargetCorresponding = async (row) => {
+        return this.targetColumn.dicData.find(column => column.targetAttrName === row.targetAttrName);
+      };
+
+      try {
+        if (!row.targetAttrName) {
+          this.$message.warning('璇烽�夋嫨瑕佷繚瀛樼殑灞炴�у悕绉帮紒');
+          done();
+          return;
+        }
+
+        // 鑾峰彇鐩爣灞炴�т俊鎭�
+        const {targetAttrId, targetAttrKey, targetAttrName} = await getTargetCorresponding(row);
+
+        // 鏇存柊琛屾暟鎹�
+        Object.assign(row, {targetAttrId, targetAttrKey, targetAttrName});
+
+        const response = await batchAddSave({dockingPreAttrMappingVOList: this.mappingData});
+
+        if (response.status === 200) {
+          this.$message({
+            type: "success",
+            message: "淇敼鎴愬姛!"
+          });
+        }
+      } catch (error) {
+        console.error('澶勭悊鏄犲皠鏇存柊鏃跺嚭閿欙細', error);
+      } finally {
+        done();
+      }
     },
     // 闆嗗洟鏄犲皠灞炴�ч�夋嫨锛堝崟閫夛級
     selectionChange(selection) {
@@ -435,27 +595,35 @@
 }
 </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;
+  }
+
+  .el-scrollbar__view {
+    height: 100px;
+  }
+}
+
 </style>

--
Gitblit v1.9.3