写了一个可配置表头的表格

该博客展示了如何在Vue.js应用中使用El-Tree组件实现节点的拖拽排序,并与El-Table组件联动,根据选择的树节点动态显示表格内容。拖拽功能确保在同一级别间进行,同时处理了拖拽后的选中状态问题。此外,还提供了初始数据和逻辑处理方法。
摘要由CSDN通过智能技术生成

这个文章有问题

HTML
<template>
  <div id="app">
    <el-tree
  :data="data"
  draggable
  show-checkbox
  ref='tree'
  :allow-drop="allowDrop"
  node-key="id"
  @check-change='checkChange'
  :default-checked-keys="list"
  :props="defaultProps">
</el-tree>
<button @click='clickOK'>确认</button>

<template>
    <el-table
      :data="tableData"
      v-if="labelList.length > 0"
      style="width: 100%">
      <el-table-column
        prop="date"
        :label="labelList[0]"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        :label="labelList[1]"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        v-if="labelList[2]"
        :label="labelList[2] && labelList[2]">
      </el-table-column>
      <el-table-column
      v-if="labelList[3]"
        prop="address"
        :label="labelList[3] && labelList[3]">
      </el-table-column>
      <el-table-column
        prop="date"
      v-if="labelList[4]"
        :label="labelList[4] && labelList[4]"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        v-if="labelList[5]"
        :label="labelList[5] && labelList[5]"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        v-if="labelList[6]"
        :label="labelList[6] && labelList[6]">
      </el-table-column>
      <el-table-column
        prop="address"
        v-if="labelList[7]"
        :label="labelList[7] && labelList[7]">
      </el-table-column>
        <el-table-column
        prop="address"
        v-if="labelList[8]"
        :label="labelList[8] && labelList[8]">
      </el-table-column>
        <el-table-column
        prop="address"
        v-if="labelList[9]"
        :label="labelList[9] && labelList[9]">
      </el-table-column>
    </el-table>
  </template>
  </div>
</template>

//逻辑

<script>
 export default {
    data() {
      return {
       data: [{
          disabled: true,
          id: 1,
          label: '序号1(必选)',
          level: 1,
        }, {
          id: 2,
          level: 1,
          disabled: true,
          label: '企业名称(必选)',
        }, {
          level: 1,
          id: 3,
          label: '省市县',
        },{
          level: 1,
          id: 4,
          label: '限定能耗',
        }, {
          level: 1,
          id: 5,
          label: '目标能耗',
        }, {
          level: 1,
          id: 6,
          label: '期望能耗',
        },{
          level: 1,
          id: 7,
          label: '2D地址',
        }, {
          level: 1,
          id: 8,
          label: '3D地址',
        }, {
          level: 1,
          id: 9,
          label: '能源报表地址',
        }],
        list: [],
        labelList: [],
        show:true,
        defaultProps: {
          children: 'children',
          label: 'label'
        },
        tableData: [{
            date: '2016-05-02',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            date: '2016-05-04',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1517 弄'
          }, {
            date: '2016-05-01',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1519 弄'
          }, {
            date: '2016-05-03',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1516 弄'
          }],
        draggingList: []
      };
    },
    mounted() {
this.$refs.tree.setCheckedKeys([1,2,3,4]);
      this.clickOK()
    },
    methods: {
      // 只能在同级别下拖拽
      allowDrop(draggingNode, dropNode, type) {
        //   排序后的新数组
        this.draggingList = draggingNode.store.data
      if (draggingNode.data.level === dropNode.data.level) {
        if (draggingNode.parent.id === dropNode.parent.id) {
          return type === "prev" || type === "next";
        }
      } else {
        // 不同级进行处理
        return false;
      }
    },
      clickOK() {
        this.labelList = []
        //默认走这段逻辑是没有进行过拖拽的
        let keyList = this.$refs.tree.getCheckedKeys()
        this.data.map((item,index) => {
          if(this.data[keyList[index] - 1]){
            this.labelList.push(this.data[keyList[index] - 1].label)
          }
        })
         //如果拖拽了,就走这段程序
        if(this.draggingList.length > 0 ){
          this.labelList = []
          this.draggingList.forEach((item) => {
            keyList.forEach(el => {
              if(item.id === el) {
                this.labelList.push(item.label)
              }
            })
          })
        }
        this.$forceUpdate()
      },
      // 解决拖拽后选中的数据变为不选中了
      checkChange(a) {
        let checkedLists = this.$refs.tree.getCheckedKeys()
        if(!checkedLists.includes(a.id)){
          checkedLists.push(a.id)
          this.$refs.tree.setCheckedKeys(checkedLists);
        }
      }
    }
  };
</script>

初始化页面时这样的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值