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

---
 Source/UBCS-WEB/src/views/integration/integrationIndex.vue | 1152 ++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 733 insertions(+), 419 deletions(-)

diff --git a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
index c7cff47..083d865 100644
--- a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
+++ b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
@@ -1,442 +1,756 @@
 <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="groupVal" 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="handleMapingUpdate" @row-click="handleMapingClick"
-                            @row-dblclick="handleMapingRowClick" @selection-change="selectionChange" @select="setCurrentRow"
-                            @select-all="handleSelectAll">
-                            <template slot="menuLeft">
-                                <el-button icon="el-icon-plus" size="small" type="primary" :disabled="disabledPush"
-                                    @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>
-                            </template>
-                        </avue-crud>
-                    </el-card>
-                    <el-card :style="{ marginTop: '20px'}">
-                        <avue-crud :style="{ marginTop: '-20px'}" :data="rangeData" :option="optinoRange" ref="crudRange" @row-update="handleUpdate"
-                            @row-dblclick="handleRowClick">
-                        </avue-crud>
-                    </el-card>
-                </el-card>
-            </el-main>
-        </el-container>
-        <integration-transfer :visible.sync="dialogPush" :data="transferData" :disabledData="filtermapping"
-            :props="transferProps" @save="handelTransferSave"></integration-transfer>
-    </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="radio"
+                        slot-scope="{row}">
+
+                <el-radio v-model="selectRow" :label="row.$index">-</el-radio>
+              </template>
+              <template slot="menuLeft">
+                <!--                <el-button :disabled="disabledPush" icon="el-icon-plus" size="small" type="primary"-->
+                <!--                           @click="dialogPush = true">鏂� 澧�-->
+                <!--                </el-button>-->
+                <el-button v-if="permissionList.saveBtn" icon="el-icon-check" size="small" type="primary"
+                           @click="handleSave">淇� 瀛�
+                </el-button>
+                <el-button v-if="permissionList.allSyncBtn" icon="el-icon-connection" size="small"
+                           type="primary" @click="handleSync('all')">鍚屾涓绘ā鍨�
+                </el-button>
+                <el-button v-if="permissionList.oneSyncBtn" icon="el-icon-connection" size="small"
+                           type="primary" @click="handleSync('one')">鍚屾璇︾粏妯″瀷
+                </el-button>
+                <el-button v-if="permissionList.autoBtn" 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 v-if="permissionList.bottomAutoBtn" icon="el-icon-coordinate" size="small"
+                           type="primary" @click="handlerBottomAuto">鑷姩濉厖
+                </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 integrationTransfer from './integrationTransfer.vue'
 import pinyin from 'js-pinyin'
-import { referCodeClassifyTree, referTree, gridAttrMapping, gridAttrRanges, batchAddSave, listCodeAttributeByClassId, syncClassifyModel } from '@/api/integration/integration.js'
+import {mapGetters} from "vuex";
+import {
+  referCodeClassifyTree,
+  referTree,
+  gridAttrMapping,
+  gridAttrRanges,
+  batchAddSave,
+  listCodeAttributeByClassId,
+  syncClassifyModel
+} from '@/api/integration/integration.js'
+import {getByGroupAttrMapping, getEnumAttrByClsOidAndAttrId} from "@/api/vciAttrbute";
+
 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 {
-            // 琛ㄥ崟鍊�
-            form: {
-                // 闆嗗洟鏍戞樉绀哄��
-                groupValue: ''
-            },
-            // 妫�娴嬫柊澧炴寜閽姸鎬�
-            disabledPush: true,
-            // 琛ㄦ牸鍔犺浇涓�
-            loading: false,
-            // 绌挎妗嗘暟鎹�
-            transferData: [],
-            // dialog寮圭獥寮�鍏�
-            dialogPush: false,
-            // 灞炴�ф槧灏勮〃鏁版嵁
-            mappingData: [],
-            // 灞炴�ф槧灏勫彇鍊艰〃鏁版嵁
-            rangeData: [],
-            // 涓绘暟鎹爲鎼滅储杩囨护
-            filterText: '',
-            // 灞炴�ф槧灏勫彇鍊艰〃閰嶇疆
-            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',
-                selection: false,
-                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: [],
-            // 鏍憄opos鏇挎崲鍊�
-            defaultProps: {
-                children: 'children',
-                label: 'name',
-                id: 'oid',
-                isLeaf: ''
-            },
-            transferProps: {
-                key: 'oid',
-                label: 'name'
-
-            },
-            // 闆嗗洟鍒嗙被鏍戝��
-            groupVal: '',
-            // 宸︿晶鏍戦�夋嫨鐨刬d鍊�
-            treeParam: {},
-            // 琛ㄦ牸閫夋嫨鐨勮
-            rangeForm: {},
-            mappingForm: {},
-            // 瀹氭椂鍣�
-            times: null,
-
-        }
-    },
-    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
-        }
-    },
-    methods: {
-        // 鎺ュ彛宸︿晶鏍�
-        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
-                console.log(this.filtermapping)
-            }
-        },
-        // 鎺ュ彛鑾峰彇灞炴�ф槧灏勫彇鍊艰寖鍥�
-        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
-            }
-        },
-        // 鎺ュ彛鑾峰彇闆嗗洟鍒嗙被鏍�
-        async referTree(oid, checked) {
-            this.groupTreeData = []
-            const response = await referTree({ 'conditionMap[codeclsfid]': oid, parentOid: null })
-            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.mappingData })
-            console.log(response)
-            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 {
-                console.log(param)
-                const response = await syncClassifyModel(param)
-                if (response.status === 200) {
-                    console.log(response)
-                }
-            }
-        },
-        handelTransferSave(event) {
-            let that = this
-            console.log(event)
-            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
-                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)
-            }
-        },
-        // 闆嗗洟鍒嗙被鏍戠偣鍑�
-        handleNodeClick(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) {
-            console.log(row)
-            console.log(index)
-            const findRow = this.mappingData.findIndex(item => item.metaListId === row.metaListId)
-            this.rangeData[index] = row
-            console.log(this.rangeData)
-            this.mappingData[findRow].dockingPreAttrRangeVoList = (this.rangeData)
-            console.log('淇敼鍚�', row)
-            this.$message({
-                showClose: true,
-                message: "淇敼鎴愬姛",
-                type: "success",
-            });
-            done();
-        },
-        // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫鍚�
-        handleMapingUpdate(row, index, done) {
-            console.log(row)
-            console.log('淇敼鍚�', row)
-            this.$message({
-                showClose: true,
-                message: "淇敼鎴愬姛",
-                type: "success",
-            });
-            done();
-        },
-        // 闆嗗洟鏄犲皠灞炴�ч�夋嫨锛堝崟閫夛級
-        selectionChange(selection) {
-            console.log(selection)
-            console.log(this.mappingForm)
-            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) {
-            console.log(row)
-            this.mappingForm = row
-            this.disabledPush = false
-        },
-        handleSelectAll(selection) {
-            console.log(selection)
-            this.$refs.crudMapping.toggleSelection()
-        }
+  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 {
+      selectRow: "",
+      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,
+        columnBtn: false,
+        searchShow: true,
+        emptyBtn: false,
+        searchBtn: false,
+        searchShowBtn: false,
+        cellBtn: true,
+        border: true,
+        searchMenuSpan: 8,
+        highlightCurrentRow: true,
+        $cellEdit: true,
+        column: [
+          {label: '', prop: 'radio', width: 60, hide: false},
+          {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,
+      TreeOid: "",
+      tableSelectId: ''
+
+    }
+  },
+  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');
+    },
+    ...mapGetters(["permission"]),
+    permissionList() {
+      return {
+        allSyncBtn: this.vaildData(this.permission.integration.integration_allSync, false),
+        autoBtn: this.vaildData(this.permission.integration.integration_auto, false),
+        bottomAutoBtn: this.vaildData(this.permission.integration.integration_bottomAuto, false),
+        oneSyncBtn: this.vaildData(this.permission.integration.integration_oneSync, false),
+        saveBtn: this.vaildData(this.permission.integration.integration_save, false),
+      }
+    },
+  },
+  methods: {
+    handlerAuto() {
+      if (!this.TreeOid || this.TreeOid === "") {
+        return;
+      }
+      // 杩囨护鍑洪泦鍥㈠睘鎬х殑key鍊�
+      const groupArray = this.mappingData ? this.mappingData.map(obj => obj.sourceAttrKey) : [];
+      // 鑾峰彇鍒伴渶瑕佽嚜鍔ㄥ~鍏呯殑鍊�
+      getByGroupAttrMapping({classifyId: this.TreeOid, groupAttrKeyList: groupArray})
+        .then(res => {
+          //  鍗曠嫭鎶婅繑鍥炲�肩殑groupAttrKey鏀句竴涓暟缁勶紝鐒跺悗杩囨护鍑鸿繑鍥炲�肩殑groupAttrKey鏄惁绛変簬琛ㄦ牸鏁版嵁涓殑sourceAttrKey
+          // const groupReturnData = res.data && res.data.data ? res.data.data.map(item => item.groupAttrKey) : [];
+          const groupReturnData = res.data.data;
+          // 杩囨护鍖归厤
+          // console.log(groupReturnData)
+          this.mappingData.forEach(mappingItem => {
+            groupReturnData.forEach(groupItem => {
+              if (mappingItem.sourceAttrKey === groupItem.groupAttrKey) {
+                const result = this.transferData.find(obj => obj.id.toLowerCase() === groupItem.codeMetaAttrKey.toLowerCase());
+                if (result) {
+                  mappingItem.targetAttrId = groupItem.codeMetaAttrOid.toLowerCase();
+                  mappingItem.targetAttrName = groupItem.codeMetaAttrName.toLowerCase();
+                  mappingItem.targetAttrKey = groupItem.codeMetaAttrKey.toLowerCase();
+                } else {
+                  mappingItem.targetAttrId = '';
+                  mappingItem.targetAttrName = '';
+                  mappingItem.targetAttrKey = '';
+                }
+              }
+            })
+          })
+          this.$message.success('鑷姩濉厖鎴愬姛锛岃纭灞炴�у悗鐐瑰嚮淇濆瓨锛�');
+        })
+        .catch(error => {
+          console.log(error)
+          this.$message.error('濉厖澶辫触锛岃绋嶅悗鍐嶈瘯锛�');
+        });
+    },
+    handlerBottomAuto() {
+      if (this.rangeData.length <= 0) {
+        this.$message.warning('璇烽�夋嫨涓�鏉℃灇涓剧被鍨嬪睘鎬�!')
+        return
+      }
+      getEnumAttrByClsOidAndAttrId({classifyId: this.TreeOid, codeMetaAttrKey: this.tableSelectId}).then(res => {
+        const data = res.data.data;
+        this.rangeData.forEach(rangeItem => {
+          data.forEach(dataItem => {
+            const similarity = this.calculateSimilarity(rangeItem.numText, dataItem.itemName);
+            if (similarity > 70) {
+              rangeItem.targetNumTextValue = rangeItem.numTextValue;
+              rangeItem.targetNumText = dataItem.itemName;
+            }
+          })
+        })
+        this.$message.success('鑷姩濉厖鎴愬姛锛岃纭灞炴�у悗鐐瑰嚮淇濆瓨锛�')
+      })
+    },
+    calculateSimilarity(str1, str2) {
+      // 璁$畻缂栬緫璺濈
+      function editDistance(s1, s2) {
+        s1 = s1.toLowerCase();
+        s2 = s2.toLowerCase();
+
+        const costs = [];
+        for (let i = 0; i <= s1.length; i++) {
+          let lastValue = i;
+          for (let j = 0; j <= s2.length; j++) {
+            if (i === 0)
+              costs[j] = j;
+            else {
+              if (j > 0) {
+                let newValue = costs[j - 1];
+                if (s1.charAt(i - 1) !== s2.charAt(j - 1))
+                  newValue = Math.min(Math.min(newValue, lastValue),
+                    costs[j]) + 1;
+                costs[j - 1] = lastValue;
+                lastValue = newValue;
+              }
+            }
+          }
+          if (i > 0)
+            costs[s2.length] = lastValue;
+        }
+        return costs[s2.length];
+      }
+
+      // 璁$畻鐩镐技搴︾櫨鍒嗘瘮
+      function similarityPercent(s1, s2) {
+        let maxLength = Math.max(s1.length, s2.length);
+        let distance = editDistance(s1, s2);
+        return ((maxLength - distance) / maxLength) * 100;
+      }
+
+      // 璋冪敤鐩镐技搴﹁绠楀嚱鏁板苟杩斿洖鐧惧垎姣斿舰寮忕殑鐩镐技搴�
+      const similarity = similarityPercent(str1, str2);
+      return similarity;
+    },
+    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 && !item.targetAttrId && !item.targetAttrKey) {
+          const {targetAttrId, targetAttrKey, targetAttrName} = await getTargetCorresponding(item);
+          Object.assign(item, {targetAttrId, targetAttrKey, targetAttrName});
+        }
+      }
+      this.mappingData[this.selectRow].dockingPreAttrRangeVoList = (this.rangeData)
+      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.TreeOid = event.oid;
+      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) {
+      // console.log(row)
+      this.tableSelectId = row.targetAttrKey || "";
+      this.selectRow = row.$index;
+      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: targetAttrId.toLowerCase(),
+          targetAttrKey: targetAttrKey.toLowerCase(),
+          targetAttrName: targetAttrName.toLowerCase()
+        });
+
+        const response = await batchAddSave({dockingPreAttrMappingVOList: [row]});
+
+        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) {
+      console.log(selection, row)
+      this.mappingForm = row
+      this.disabledPush = false
+    },
+    handleSelectAll(selection) {
+      this.$refs.crudMapping.toggleSelection()
+    },
+
+  }
 }
 </script>
 <style lang="scss" scoped>
 .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;
 }
 
-::v-deep(.el-transfer-panel__list) {
+::v-deep {
+  .el-transfer-panel__list {
     width: 100%;
     height: 370px;
-}
+  }
 
-::v-deep(.el-transfer-panel__body) {
+  .el-transfer-panel__body {
     height: 370px;
-}
+  }
 
-::v-deep(.el-input) {
+  .el-input {
     width: auto;
+  }
+
+  .el-transfer-panel {
+    width: 270px;
+  }
+
+  .el-scrollbar__view {
+    height: 100px;
+  }
 }
 
-::v-deep(.el-transfer-panel) {
-    width: 270px;
-}
 </style>

--
Gitblit v1.9.3