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 |  950 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 609 insertions(+), 341 deletions(-)

diff --git a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
index 9e65713..9e77493 100644
--- a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
+++ b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
@@ -1,361 +1,629 @@
 <template>
-    <div>
-        <el-container style="height: 100%; border: 1px solid #fff">
-            <el-card :style="{ marginRight: '10px' }">
-                <el-aside width="300px" style="background-color: #fff">
-                    <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" v-model="filterText">
-                    </el-input>
-                    <el-menu :default-openeds="['1', '3']">
-                        <el-tree class="filter-tree" :data="treeData" accordion :props="defaultProps"
-                            :filter-node-method="filterNode" empty-text="鏆傛棤鏁版嵁" ref="tree" @node-click="handelTreeCell">
-                        </el-tree>
-                    </el-menu>
-                </el-aside>
-            </el-card>
-            <el-main>
-                <el-card>
-                    <el-form :model="form">
-                        <el-form-item label="闆嗗洟鍒嗙被" label-width="70px" size="small">
-                            <el-select clearable ref="selectTree" v-model="form.groupValue" placeholder="璇烽�夋嫨"
-                                popper-class="popperTreeSelect">
-                                <el-option :value="groupVal" :label="groupVal">
-                                    <el-tree ref="groupTree" :data="groupTreeData" empty-text="鏆傛棤鏁版嵁" :props="defaultProps"
-                                        @node-click="handleNodeClick">
-                                    </el-tree>
-                                </el-option>
-                            </el-select>
+  <div>
+    <el-container style="height: 100%; border: 1px solid #fff">
+      <el-card style="margin-right: 10px;height:  calc(100vh - 125px);overflow: auto">
+        <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"
+                     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"
+                            effect="dark"
+                            open-delay="500"
+                            placement="right-start">
+                <span style="font-size: 14px;">
+                {{ (node || {}).label }}
+              </span>
+                </el-tooltip>
+              </template>
+            </el-tree>
+          </el-menu>
+        </el-aside>
+      </el-card>
+      <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 :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>
-                        <avue-crud :table-loading="loading" :data="mappingData" :option="optionMapping" ref="crudMapping"
-                            @row-update="handleUpdate" @row-click="handleMapingRowClick">
-                            <template slot="menuLeft">
-                                <el-button 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" @click="handleSync">鍚屾妯″瀷
-                                </el-button>
-                            </template>
-                        </avue-crud>
-                    </el-card>
-                    <el-card :style="{ marginTop: '20px' }">
-                        <avue-crud :data="rangeData" :option="optinoRange" ref="crudRange" @row-update="handleUpdate"
-                            @row-dblclick="handleRowClick">
-                        </avue-crud>
-                    </el-card>
-                </el-card>
-            </el-main>
-        </el-container>
-        <el-dialog title="缂栫爜灞炴��" :visible.sync="dialogPush" append-to-body="true" destroy-on-close width="30%"
-            :before-close="handleClose">
-            <el-form :model="form">
-                <el-form-item label="鏌ヨ鏉′欢" label-width="70px" size="small">
-                    <el-input v-model="form.name" autocomplete="off" @change="handleQuery"></el-input>
-                </el-form-item>
-            </el-form>
-            <p class="text_tip">*閫夋嫨鍒嗙被杩涜灞炴�ц繃婊�, 鎴栬�呰緭鍏ュ睘鎬х殑鍏ㄦ嫾鎴栬�呯畝鎷艰繘琛屾煡璇�! 濡�: 濮撳悕 (鍙緭鍏m鎴杧inming )</p>
-            <transfer v-model="transferValue" :data="transferData" :filter-method="filterMethod"
-                filter-placeholder="璇疯緭鍏ユ嫾闊冲叏鎷兼垨鑰呮嫾闊崇缉鍐�" @left-check-change="handelLeftCheck"></transfer>
-            <span slot="footer" class="dialog-footer">
-                <el-button @click="dialogPush = false">鍙� 娑�</el-button>
-                <el-button type="primary" @click="dialogPush = false">淇� 瀛�</el-button>
-            </span>
-        </el-dialog>
-    </div>
+            </el-form-item>
+          </el-form>
+          <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"
+                       @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 icon="el-icon-check" size="small" type="primary" @click="handleSave">淇� 瀛�
+                </el-button>
+                <el-button icon="el-icon-connection" size="small" type="primary"
+                           @click="handleSync('all')">鍚屾涓绘ā鍨�
+                </el-button>
+                <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>
+          <el-card style="margin-top: 10px;height: 38vh">
+            <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>
+      </el-main>
+    </el-container>
+    <integration-transfer :data="transferData" :disabledData="filtermapping" :props="transferProps"
+                          :visible.sync="dialogPush" @save="handelTransferSave"></integration-transfer>
+  </div>
 </template>
 <script>
-import transfer from '@/components/transfer/index'
+import integrationTransfer from './integrationTransfer.vue'
 import pinyin from 'js-pinyin'
-import { referCodeClassifyTree, referTree, gridAttrMapping, gridAttrRanges, batchAddSave, listCodeAttributeByClassId, syncClassifyModel } from '@/api/integration/integration.js'
-export default {
-    components: {
-        transfer
-    },
-    data() {
-        const generateData = () => {
-            pinyin.setOptions({ checkPolyphone: false, charCase: 1 });
-            const data = [];
-            const cities = ['涓婃捣', '鍖椾含', '骞垮窞', '娣卞湷', '鍗椾含', '瑗垮畨', '鎴愰兘'];
-            cities.forEach((city, index) => {
-                data.push({
-                    label: city,
-                    key: index,
-                    pinyin: pinyin.getFullChars(city),
-                    pinyins: pinyin.getCamelChars(city),
-                });
-            });
-            return data;
-        };
-        const options = {
-            menu: false,
-            delBtn: false,
-            addBtn: false,
-            index: true,
-            columnBtn: false,
-            searchShow: true,
-            emptyBtn: false,
-            searchBtn: false,
-            searchShowBtn: false,
-            cellBtn: true,
-            border: true,
-            searchMenuSpan: 8,
-        }
-        return {
-            form: {
-                name: '',
-                groupValue: ''
-            },
-            loading: false,
-            ishowTree: false,
-            search: '',
-            transferData: generateData(),
-            transferValue: [],
-            dialogPush: false,
-            mappingData: [],
-            rangeData: [],
-            filterText: '',
-            tableRowIndex: null,
-            tableColumnIndex: null,
-            optinoRange: {
-                title: '闆嗗洟灞炴��',
-                maxHeight: '300px',
-                header: false,
-                rowKey: 'oid',
-                column: [
-                    { label: '灞炴�ч泦鍥㈡灇涓惧��', prop: 'numTextValue', minWidth: 80 },
-                    { label: '闆嗗洟灞炴�ф灇涓炬樉绀哄悕绉�', prop: 'numText', minWidth: 80 },
-                    { label: 'MDM鏋氫妇鍊�', prop: 'targetNumTextValue', minWidth: 80, cell: true, blur: (value) => window.handleBlur(value, 'range') },
-                    { label: 'MDM鏋氫妇鏄剧ず鍚嶇О', prop: 'targetNumText', minWidth: 80, cell: true, blur: (value) => window.handleBlur(value, 'range') },
-                ],
-                ...options
-            },
-            optionMapping: {
-                maxHeight: '500px',
-                header: true,
-                rowKey: 'oid',
-                column: [
-                    { label: '闆嗗洟鍒嗙被', prop: 'sourceClassifyName', minWidth: 80 },
-                    { label: '鎵�灞炶鍥�', prop: 'viewName', minWidth: 80 },
-                    { label: '闆嗗洟灞炴��', prop: 'sourceAttrName', minWidth: 80 },
-                    { label: '鍒嗙被鍚嶇О', prop: 'targetClassifyName', minWidth: 80 },
-                    { label: '灞炴�у悕绉�', prop: 'targetAttrName', minWidth: 80 },
-                    { label: '榛樿鍊�', prop: 'defaultValue', minWidth: 140, cell: true, blur: (value) => window.handleBlur(value, 'mapping') },
-                ],
-                ...options
-            },
-            treeData: [],
-            groupTreeData: [],
-            defaultProps: {
-                children: 'children',
-                label: 'name',
-                id: 'oid',
-                isLeaf: ''
-            },
-            groupVal: '',
-            treeParam: {},
-            rangeForm: {},
-            mappingForm: {},
-        }
-    },
-    watch: {
-        filterText(val) {
-            console.log(this.$refs.tree)
-            this.$refs.tree.filter(val);
-        }
-    },
-    created() {
-        this.getReferCodeClassifyTree()
-        pinyin.setOptions({ checkPolyphone: false, charCase: 1 });
-    },
-    mounted() {
-        window.handleBlur = this.handleBlur
-    },
-    methods: {
-        // 鎺ュ彛宸︿晶鏍�
-        async getReferCodeClassifyTree() {
-            const param = {
-                parentBtmName: "jclass",
-                valueField: "oid",
-                textField: "name",
-                parentFieldName: "id"
-            }
-            const response = await referCodeClassifyTree(param)
-            console.log(response)
-            if (response.status === 200) {
-                let data = response.data;
-                this.treeData = data.map(item => item.children ? { ...item, ...{ isLeaf: false } } : { ...item, ...{ isLeaf: true } })
-            }
-        },
-        // 鎺ュ彛鑾峰彇灞炴�ф槧灏�
-        async getGridAttrMapping(oid) {
-            this.loading = true
-            console.log(this.treeParam)
-            const response = await gridAttrMapping({ sourceClassifyId: oid, ...this.treeParam })
-            console.log(response)
-            if (response.status === 200) {
-                this.loading = false
-                this.mappingData = response.data.data
-            }
-        },
-        // 鎺ュ彛鑾峰彇灞炴�ф槧灏勫彇鍊艰寖鍥�
-        async getGridAttrRanges(oid) {
-            this.tablesData = []
-            const response = await gridAttrRanges({ meatId: oid })
-            console.log(response)
-            if (response.status === 200) {
-                this.rangeData = response.data
-            }
-        },
-        // 鎺ュ彛鑾峰彇涓绘暟鎹垎绫诲睘鎬т俊鎭�
-        async getListCodeByClassId(oid) {
-            // this.tablesData = []
-            const response = await listCodeAttributeByClassId({ codeClassifyId: oid })
-            console.log(response)
-        },
-        // 鎺ュ彛鑾峰彇闆嗗洟鍒嗙被鏍�
-        async referTree(oid, checked) {
-            this.groupTreeData = []
-            const response = await referTree({ 'conditionMap[codeclsfid]': oid, parentOid: null })
-            console.log(response)
-            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
-                }
-            }
-        },
-        // 宸︿晶鏍戣繃婊ゆ悳绱�
-        filterNode(value, data) {
-            if (!value) return true;
-            return data.name.indexOf(value) !== -1;
-        },
-        // 淇濆瓨鎸夐挳
-        async handleSave() {
-            console.log(this.mappingData)
-            // const response = await batchAddSave({ dockingPreAttrMappingVOList: this.tableData })
-            // console.log(response)
-        },
-        // 鍚屾鏁版嵁
-        async handleSync() {
-            const response = await syncClassifyModel({ dockingPreAttrMappingVOList: this.tableData })
-            console.log(response)
-        },
-        handelLeftCheck(event) {
-            console.log(event)
-        },
-        // 鏂板寮圭獥鏌ヨ鎸夐挳
-        handleQuery(event) {
-            console.log(event)
-            this.form.name = event
-        },
-        filterMethod(item) {
-            return item.pinyins.indexOf(this.form.name) > -1;
-        },
-        // 宸︿晶鏍戠偣鍑�
-        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)
-            }
-        },
-        // 闆嗗洟鍒嗙被鏍戠偣鍑�
-        handleNodeClick(data) {
-            console.log(data)
-            this.form.groupValue = data.name
-            this.groupVal = data.name
-            this.$refs.selectTree.blur()
-            this.getGridAttrMapping(data.oid)
-        },
-        inputBlur() {
-            this.tableColumnIndex = ''
-            this.tableRowIndex = null
-        },
-        // 灞炴�ф槧灏勭偣鍑绘瘡琛�
-        handleCellClick(event) {
-            console.log('鍗曞嚮', event)
-            // this.tableRowIndex = row.index
-            // this.tableColumnIndex = column.index
-            // this.getGridAttrRanges(event.metaListId)
-        },
-        handleBlur(value, event) {
-            console.log(value)
-            if (event === 'range') this.$refs.crudRange.rowCell(this.rangeForm, this.rangeForm.$index)
-            if (event === 'mapping') this.$refs.crudMapping.rowCell(this.mappingForm, this.mappingForm.$index)
-        },
-        // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫
-        handleMapingRowClick(row, column, cell, event) {
-            this.mappingForm = row
-            if (column.label === '榛樿鍊�') this.$refs.crudMapping.rowCell(row, row.$index)
-            else this.getGridAttrRanges(row.metaListId)
+import {
+  referCodeClassifyTree,
+  referTree,
+  gridAttrMapping,
+  gridAttrRanges,
+  batchAddSave,
+  listCodeAttributeByClassId,
+  syncClassifyModel
+} from '@/api/integration/integration.js'
+import {getPage} from "@/api/omd/OmdAttribute";
 
-        },
-        // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫
-        handleRowClick(row, column, cell, event) {
-            this.rangeForm = row
-            console.log('鍗曞嚮', row)
-            this.$refs.crudRange.rowCell(row, row.$index)
-        },
-        // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫
-        handleUpdate(row, index, done, loading) {
-            const findRow = this.mappingData.findIndex(item => item.metaListId === row.metaListId)
-            console.log(findRow)
-            this.mappingData[0].dockingPreAttrRangeVoList = [row]
-            console.log('淇敼鍚�', row)
-            this.$message({
-                showClose: true,
-                message: "淇敼鎴愬姛",
-                type: "success",
-            });
-            done();
-        }
+export default {
+  components: {
+    integrationTransfer
+  },
+  name: 'Integration',
+  data() {
+    const options = {
+      menu: 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,
     }
+    return {
+      targetNameList: [], // 鍏冩暟鎹繑鍥炲悕绉�
+      defaultCheckedKeys: [],
+      isNodeDisabled: true,
+      // 琛ㄥ崟鍊�
+      form: {
+        // 闆嗗洟鏍戞樉绀哄��
+        groupValue: ''
+      },
+      // 妫�娴嬫柊澧炴寜閽姸鎬�
+      disabledPush: true,
+      // 琛ㄦ牸鍔犺浇涓�
+      loading: false,
+      // 绌挎妗嗘暟鎹�
+      transferData: [],
+      // dialog寮圭獥寮�鍏�
+      dialogPush: false,
+      // 灞炴�ф槧灏勮〃鏁版嵁
+      mappingData: [],
+      // 灞炴�ф槧灏勫彇鍊艰〃鏁版嵁
+      rangeData: [],
+      // 涓绘暟鎹爲鎼滅储杩囨护
+      filterText: '',
+      // 灞炴�ф槧灏勫彇鍊艰〃閰嶇疆
+      optinoRange: {
+        title: '灞炴�ф槧灏勫彇鍊艰寖鍥�',
+        maxHeight: '280px',
+        rowKey: 'oid',
+        refreshBtn: false,
+        column: [
+          {label: '灞炴�ч泦鍥㈡灇涓惧��', prop: 'numTextValue', minWidth: 80},
+          {label: '闆嗗洟灞炴�ф灇涓炬樉绀哄悕绉�', prop: 'numText', minWidth: 80},
+          {
+            label: 'CODE鏋氫妇鍊�',
+            prop: 'targetNumTextValue',
+            minWidth: 80,
+            cell: true,
+            blur: (value) => window.handleBlur(value, 'range')
+          },
+          {
+            label: 'CODE鏋氫妇鏄剧ず鍚嶇О',
+            prop: 'targetNumText',
+            minWidth: 80,
+            cell: true,
+            blur: (value) => window.handleBlur(value, 'range')
+          },
+        ],
+        ...options
+      },
+      // 灞炴�ф槧灏勮〃閰嶇疆
+      optionMapping: {
+        maxHeight: '280px',
+        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},
+          {label: '闆嗗洟灞炴��', prop: 'sourceAttrName', minWidth: 80},
+          {label: '鍒嗙被鍚嶇О', prop: 'targetClassifyName', minWidth: 80},
+          {
+            label: '灞炴�у悕绉�',
+            prop: 'targetAttrName',
+            type: 'select',
+            cell: true,
+            filterable: true,
+            minWidth: 80,
+            props: {
+              label: 'targetAttrName',
+              value: 'targetAttrName'
+            },
+            dicData: [],
+          },
+          // {
+          //   label: '榛樿鍊�',
+          //   prop: 'defaultValue',
+          //   minWidth: 140,
+          //   cell: true,
+          //   blur: (value) => window.handleBlur(value, 'mapping')
+          // },
+        ],
+      },
+      // 涓绘暟鎹垎绫绘爲
+      treeData: [],
+      // 闆嗗洟鍒嗙被鏍�
+      groupTreeData: [],
+      // 鏍憄rpos鏇挎崲鍊�
+      defaultProps: {
+        children: 'children',
+        label: 'name',
+        id: 'oid',
+        isLeaf: '',
+        // disabled:()=>{
+        //   return true
+        // }
+      },
+      transferProps: {
+        key: 'oid',
+        label: 'name'
+
+      },
+      // 闆嗗洟鍒嗙被鏍戝��
+      groupVal: '',
+      // 宸︿晶鏍戦�夋嫨鐨刬d鍊�
+      treeParam: {},
+      // 琛ㄦ牸閫夋嫨鐨勮
+      rangeForm: {},
+      mappingForm: {},
+      // 瀹氭椂鍣�
+      times: null,
+      TreeSelectOid: ""
+
+    }
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getReferCodeClassifyTree()
+    pinyin.setOptions({checkPolyphone: false, charCase: 1});
+  },
+  mounted() {
+    let that = this
+    window.handleBlur = that.handleBlur
+  },
+  computed: {
+    filtermapping() {
+      const data = this.mappingData.filter(item => {
+        return !(Object.prototype.hasOwnProperty.call(item, 'targetAttrName') && (item.targetAttrName === null || item.targetAttrName === undefined || item.targetAttrName === ""))
+      })
+      const transfer = data.map(obj => {
+        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 = []
+      const param = {
+        parentBtmName: "jclass",
+        valueField: "oid",
+        textField: "name",
+        parentFieldName: "id"
+      }
+      const response = await referCodeClassifyTree(param)
+      if (response.status === 200) {
+        let data = response.data;
+        this.treeData = data.map(item => item.children ? {...item, ...{isLeaf: false}} : {...item, ...{isLeaf: true}})
+      }
+    },
+    // 鎺ュ彛鑾峰彇灞炴�ф槧灏�
+    async getGridAttrMapping(oid) {
+      this.mappingData = []
+      this.loading = true
+      const response = await gridAttrMapping({sourceClassifyId: oid, ...this.treeParam})
+      if (response.status === 200) {
+        this.loading = false
+        this.mappingData = response.data.data
+
+        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;
+          }
+        }
+      }
+    },
+    // 鎺ュ彛鑾峰彇灞炴�ф槧灏勫彇鍊艰寖鍥�
+    async getGridAttrRanges(oid) {
+      this.rangeData = []
+      const response = await gridAttrRanges({meatId: oid})
+      if (response.status === 200) {
+        // console.log(response.data)
+        this.rangeData = response.data.data
+      }
+    },
+    // 鎺ュ彛鑾峰彇涓绘暟鎹垎绫诲睘鎬т俊鎭�
+    async getListCodeByClassId(oid) {
+      this.transferData = []
+      pinyin.setOptions({checkPolyphone: false, charCase: 1});
+      const response = await listCodeAttributeByClassId({codeClassifyId: oid})
+      if (response.status === 200) {
+        const data = response.data.data
+        this.transferData = data;
+        this.getTargetName(data)
+        // console.log(data)
+      }
+    },
+    // 鎺ュ彛鑾峰彇闆嗗洟鍒嗙被鏍�
+    async referTree(oid) {
+      this.groupTreeData = [];
+      const response = await referTree({'conditionMap[codeclsfid]': oid, parentOid: '0'});
+      if (response.status === 200) {
+        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) {
+      if (!value) return true;
+      return data.name.indexOf(value) !== -1;
+    },
+    // 淇濆瓨鎸夐挳
+    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({
+          type: "success",
+          message: "淇濆瓨鎴愬姛!"
+        });
+      }
+    },
+    // 鍚屾鏁版嵁
+    async handleSync(type = 'all') {
+      let param = {operationType: type}
+      if (type === 'one') {
+        param.classifyId = this.form.groupValue
+      }
+      if (this.form.groupValue === '' && type === 'one') {
+        this.$message({
+          type: "error",
+          message: "璇烽�夋嫨涓�鏉¢泦鍥㈠垎绫�"
+        });
+      } else {
+        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) {
+        this.$message({
+          type: "error",
+          message: "璇烽�夋嫨涓�鏉℃暟鎹�!"
+        });
+      } 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].targetAttrKey = transferValue[0].id;
+        this.dialogPush = false;
+      }
+
+    },
+    // 宸︿晶鏍戠偣鍑�
+    handelTreeCell(event) {
+      this.treeParam.codeClassifyId = event.oid
+      this.form.groupValue = ''
+      this.groupVal = ''
+      this.tableData = []
+      this.mappingData = []
+      this.referTree(event.oid)
+      this.getListCodeByClassId(event.oid)
+    },
+    // 闆嗗洟鍒嗙被鏍戦�夋嫨
+    handleCheck(data) {
+      this.form.groupValue = data.oid
+      this.groupVal = data.name
+      this.$refs.selectTree.blur()
+      this.getGridAttrMapping(data.oid)
+    },
+    // 闆嗗洟鍒嗙被澶卞幓鐒︾偣
+    inputBlur() {
+      this.tableColumnIndex = ''
+      this.tableRowIndex = null
+    },
+    // 澶卞幓鐒︾偣
+    handleBlur(value, event) {
+      if (event === 'range') this.$refs.crudRange.rowCell(this.rangeForm, this.rangeForm.$index)
+      if (event === 'mapping') this.$refs.crudMapping.rowCell(this.mappingForm, this.mappingForm.$index)
+    },
+    // 闆嗗洟鏄犲皠灞炴�ц閫夋嫨鍗曞厓鏍肩紪杈戯紙鍙屽嚮锛�
+    handleMapingRowClick(row, column) {
+      clearTimeout(this.times)
+      this.mappingForm = row
+      if (column.label === '榛樿鍊�' || column.label === '灞炴�у悕绉�') this.$refs.crudMapping.rowCell(row, row.$index)
+    },
+    // 闆嗗洟鏄犲皠灞炴�ц閫夋嫨锛堝崟鍑伙級
+    handleMapingClick(row) {
+      clearTimeout(this.times)
+      this.mappingForm = row
+      this.times = setTimeout(() => {
+        this.$refs.crudMapping.toggleSelection([row]);
+      }, 300)
+    },
+    // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫锛堝弻鍑伙級
+    handleRowClick(row) {
+      this.rangeForm = row
+      this.$refs.crudRange.rowCell(row, row.$index)
+    },
+    // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫鍚�
+    handleUpdate(row, index, done) {
+      const findRow = this.mappingData.findIndex(item => item.metaListId === row.metaListId)
+      this.rangeData[index] = row
+      this.mappingData[findRow].dockingPreAttrRangeVoList = (this.rangeData)
+      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) {
+      if (selection.length > 1) {
+        const nowVal = selection.shift();
+        this.$refs.crudMapping.toggleRowSelection(nowVal, false);
+      } else if (selection.length === 1) {
+        // 瀵瑰崟閫夋暟鎹殑鎿嶄綔鍐欏湪杩欓噷
+        this.disabledPush = false
+        this.getGridAttrRanges(this.mappingForm.metaListId)
+      }
+    },
+    setCurrentRow(selection, row) {
+      this.mappingForm = row
+      this.disabledPush = false
+    },
+    handleSelectAll(selection) {
+      this.$refs.crudMapping.toggleSelection()
+    }
+  }
 }
 </script>
 <style lang="scss" scoped>
-.text_tip {
-    padding: 10px 0;
-    color: #F56C6C;
-}
-
 .setstyle {
-    min-height: 200px;
-    padding: 0 !important;
-    margin: 0;
-    overflow: auto;
-    cursor: default !important;
+  min-height: 200px;
+  padding: 0 !important;
+  margin: 0;
+  overflow: auto;
+  cursor: default !important;
 }
 
-/deep/ .el-transfer-panel__list {
+::v-deep {
+  .el-transfer-panel__list {
     width: 100%;
-}
+    height: 370px;
+  }
 
-/deep/ .el-input {
+  .el-transfer-panel__body {
+    height: 370px;
+  }
+
+  .el-input {
     width: auto;
-}
+  }
 
-/deep/ .el-transfer-panel {
+  .el-transfer-panel {
     width: 270px;
+  }
+
+  .el-scrollbar__view {
+    height: 100px;
+  }
 }
 
-/deep/ .el-transfer-panel__list {
-    height: 370px;
-}
-
-/deep/ .el-transfer-panel__body {
-    height: 370px;
-}
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3