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