elementui+vue实现表格行拖拽

  • 安装

    npm install sortablejs --save
    
  • 引入

    import Sortable from 'sortablejs';
    
  • 代码

    • template

      注意:在表格上一定要加row-key,否则拖拽效果无效。(row-key的值必须是数据结构tableData中已有的字段否则效果也是无效的)

      <el-table :data="tableData" @selection-change="handleSelectionField" ref="tableFileds" row-key="key"> <!--  注意row-key-->
        <el-table-column type="selection" width="55" :reserve-selection='true'> </el-table-column>
        <el-table-column label="表格字段" prop="name"></el-table-column>
        <el-table-column label="列宽">
          <template slot-scope="scope">
            <div class="flex dialogWidth">
              <el-input v-model="scope.row.width"></el-input>
              <span>Px</span>
            </div>
          </template>
        </el-table-column>
         <!-- 拖拽排序的图标 -->
        <el-table-column label="排序">
          <img src="@/assets/images/icon_sort.svg" class="dragImg" alt="" />
        </el-table-column>
      </el-table>
      
    • 数据结构

      tableData: [
        { key: "productName", name: "配件名称" },
        { key: "specificationName", name: "规格型号" },
        { key: "unitId", name: "计量单位" },
        { key: "unitPrice", name: "单价" },
        { key: "quantity", name: "数量" },
        { key: "amount", name: "金额" }
      ]
      
    • 方法

      mounted(){
      	this.openDialog();
      },
      methods: {
      	openDialog(){
      	  const tbody = document.querySelector('.el-table__body-wrapper tbody');  
            Sortable.create(tbody, {
              animation: 300,
              easing: "cubic-bezier(1, 0, 0, 1)",
              handle: ".dragImg", // 控制拖拽的区域
              onEnd: evt => {
                const targetRow = this.columnData.data.splice(evt.oldIndex, 1)[0];
                this.tableData.splice(evt.newIndex, 0, targetRow);
              }
            })
      	},
      	handleSelectionField(val) {
            val.forEach(element => {
              element.disabled = true;
            });
          }
      },
      
  • 效果
    在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ElementUI是一个基于Vue.js的组件库,提供了丰富的UI组件和便捷的开发体验。其中,ElementUI的树形表格组件提供了功能,可以方便地调整树形表格的层级关系。 在ElementUI的树形表格中,可以通过节点来改变节点的层级关系。操作主要包括两个方面:节点的开始和节点的结束。 在节点的开始时,我们可以通过监听ElementUI提供的drag-start事件来进处理。在该事件的处理函数中,可以获取到的节点对象以及的相关信息。可以根据需求对节点的限制,比如不允许某些节点进或者进一些其他自定义的处理。 在节点的结束时,我们可以通过监听ElementUI提供的drop事件来进处理。在该事件的处理函数中,可以获取到的节点对象以及的目标节点对象。可以根据需求对节点的层级关系进调整,比如将的节点作为目标节点的子节点、兄弟节点或者进其他自定义的调整。 使用ElementUI提供的树形表格组件功能,可以方便地实现树形结构的调整和排序。通过监听drag-start事件和drop事件,并在事件的处理函数中对节点的处理,可以灵活地控制节点的为和层级关系。同时,结合Vue.js的数据双向绑定特性,可以轻松地实现节点的后在界面上的实时更新。 总之,ElementUI提供了便捷的树形表格功能,可以方便地实现节点的和层级关系的调整。通过监听事件并在事件的处理函数中进逻辑处理,可以根据需求灵活控制节点的为,以及实现节点后界面的更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值