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