| | |
| | | <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-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" |
| | |
| | | highlightCurrentRow: true, |
| | | } |
| | | return { |
| | | defaultCheckedKeys: [], |
| | | isNodeDisabled: true, |
| | | // 表单值 |
| | | form: { |
| | | // 集团树显示值 |
| | |
| | | treeData: [], |
| | | // 集团分类树 |
| | | groupTreeData: [], |
| | | // 树popos替换值 |
| | | // 树prpos替换值 |
| | | defaultProps: { |
| | | children: 'children', |
| | | label: 'name', |
| | | id: 'oid', |
| | | isLeaf: '' |
| | | isLeaf: '', |
| | | // disabled:()=>{ |
| | | // return true |
| | | // } |
| | | }, |
| | | transferProps: { |
| | | key: 'oid', |
| | |
| | | mappingForm: {}, |
| | | // 定时器 |
| | | times: null, |
| | | TreeSelectOid: "" |
| | | |
| | | } |
| | | }, |
| | |
| | | } |
| | | }, |
| | | // 接口获取集团分类树 |
| | | 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 = response.data; // 将获取到的数据赋值给集团分类树数据 |
| | | |
| | | await this.filterCheckedNodes(this.groupTreeData, this.defaultCheckedKeys); |
| | | await this.$nextTick(() => { |
| | | this.$refs.groupTree.setCheckedKeys(this.defaultCheckedKeys); |
| | | }); |
| | | this.groupTreeData = r |
| | | } else { |
| | | this.groupTreeData = response.data |
| | | |
| | | this.handlerTreeData(this.groupTreeData); |
| | | |
| | | this.defaultCheckedKeys = []; |
| | | } |
| | | }, |
| | | // 过滤出来checked为true的节点 |
| | | 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; |
| | | } |
| | | // 如果存在子节点且子节点存在禁用节点,则返回false |
| | | 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 => { |
| | | // 如果节点不是禁用节点设置为true |
| | | this.$set(node, 'disabled', node !== checkedNode); |
| | | if (node.children && node.children.length > 0) { |
| | | // 调用循环节点 |
| | | this.handlerTreeNode(node); |
| | | } |
| | | }); |
| | | }, |
| | | // 左侧树过滤搜索 |
| | | filterNode(value, data) { |
| | |
| | | }, |
| | | // 左侧树点击 |
| | | handelTreeCell(event) { |
| | | if (event.leaf) { |
| | | this.treeParam.codeClassifyId = event.oid |
| | | this.form.groupValue = '' |
| | | this.groupVal = '' |
| | | this.tableData = [] |
| | | this.referTree(event.oid, event.checked) |
| | | 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() |
| | |
| | | width: 100%; |
| | | height: 370px; |
| | | } |
| | | |
| | | .el-transfer-panel__body { |
| | | height: 370px; |
| | | } |
| | | |
| | | .el-input { |
| | | width: auto; |
| | | } |
| | | |
| | | .el-transfer-panel { |
| | | width: 270px; |
| | | } |