vue项目中使用el-table表格动态拖拽数据,并根据拖拽滚动条也下拉

项目中实现动态拖拽表格数据

1 使用sortablejs插件

npm install sortablejs --save

2 页面引入

import Sortable from "sortablejs";

3 使用

 绑定row-key为后端的拖拽顺序

//行拖拽
    rowDrop() {
      const tbody = document.querySelector(".el-table__body-wrapper tbody");
      const _this = this;
      if (tbody) {
        Sortable.create(tbody, {
          onEnd({ newIndex, oldIndex }) {
            const currRow = _this.form.sourceDaTemplateFieldList.splice(
              oldIndex,
              1
            )[0];
            _this.form.sourceDaTemplateFieldList.splice(newIndex, 0, currRow);
          },
        });
      }
    },

在mounted中引入

 动态拖拽就完成了。

但是如果数据过多,表格会出现滚动条这时候拖拽就只能一个个的往下拖拽,所以针对这个问题优化了随着鼠标拖动滚动条也往下拖动。

在表格上监听鼠标点击,抬起和移动事件

然后使用表格的ref的监听

// 按下鼠标记录鼠标位置
    mouseDownHandler(e) {
      this.mouseOffset = e.clientY;
      this.mouseFlag = true;
    },
    mouseUpHandler(e) {
      this.mouseFlag = false;
    },
    mouseMoveHandler(e) {
      // 这里面需要注意,通过ref需要那个那个包含table元素的父元素
      let divData = this.$refs.table.bodyWrapper;
      if (this.mouseFlag) {
        // 设置垂直方向的元素的位置
        divData.scrollTop -= -this.mouseOffset + (this.mouseOffset = e.clientY);
      }
    },

在watch监听列表表格数据变化时重置mouseFlag

watch: {
    "form.sourceDaTemplateFieldList"(val) {
      this.mouseFlag = false;
    },
  },

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 `el-table` 表格的输入框字段进行校验并且点击按钮新增一条数据,可以通过以下步骤实现: 1. 在表格将要进行校验的字段设置为可编辑的输入框,并绑定一个 `v-model` 指令,用于实时获取输入框的值。 2. 在需要校验的时候,通过正则表达式或其他方式校验输入框的值是否符合要求。 3. 如果输入框的值不符合要求,可以通过 `this.$message` 提示用户输入不合法,并将输入框的值重置为之前的值或者让用户重新输入。 4. 当用户点击新增按钮时,先对输入框的值进行校验,如果校验通过,将输入框的值插入到表格数据。 以下是一个简单的示例代码,以手机号码为例进行校验并新增数据: ```html <template> <div> <el-table :data="tableData" style="width: 100%"> <el-table-column label="姓名" prop="name"></el-table-column> <el-table-column label="手机号码" prop="phone"> <template slot-scope="{ row }"> <el-input v-model="row.phone" @blur="checkPhone(row)"></el-input> </template> </el-table-column> </el-table> <el-button type="primary" @click="addData">新增数据</el-button> </div> </template> <script> export default { data() { return { tableData: [ { name: '张三', phone: '13888888888' }, { name: '李四', phone: '13999999999' }, { name: '王五', phone: '13000000000' } ], newRecord: { name: '', phone: '' } } }, methods: { checkPhone(row) { const reg = /^1[3-9]\d{9}$/ // 手机号码正则表达式 if (!reg.test(row.phone)) { this.$message.error('请输入正确的手机号码') row.phone = '' // 重置输入框的值 } }, addData() { const reg = /^1[3-9]\d{9}$/ // 手机号码正则表达式 if (this.newRecord.name && reg.test(this.newRecord.phone)) { this.tableData.push(this.newRecord) this.newRecord = { name: '', phone: '' } } else { this.$message.error('请输入正确的姓名和手机号码') } } } } </script> ``` 在上面的示例代码,当用户点击新增按钮时,先对输入框的值进行校验,如果校验通过,将输入框的值插入到表格数据。如果校验不通过,通过 `this.$message` 提示用户输入不合法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值