田源
2024-01-24 e1c14ac427ccf3437ca371e40394ef7265dbc59e
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: [],
      // 树popos替换值
      // 树prpos替换值
      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为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) {
@@ -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>