vex-table使用Sortable.js实现行拖拽+编辑

vex-table:https://vxetable.cn/v3/#/table/base/basic
sortablejs: http://www.sortablejs.com/
在这里插入图片描述

<template>
  <vxe-table ref="xTable" resizable show-overflow :data="tableData"
    :edit-config="{ trigger: 'click', mode: 'row', icon: ' ' }">
    <vxe-column type="seq" width="60"></vxe-column>
    <vxe-column field="name" title="Name" :edit-render="{}">
      <template #edit="{ row }">
        <vxe-input v-model="row.name" type="text"></vxe-input>
      </template>
    </vxe-column>
    <vxe-column field="role" title="Role" :edit-render="{}">
      <template #edit="{ row }">
        <vxe-input v-model="row.name" type="text"></vxe-input>
      </template>
    </vxe-column>
    <vxe-column field="sex" title="Sex" :edit-render="{}">
      <template #default="{ row }">
        <span>{{ formatSex(row.sex) }}</span>
      </template>
      <template #edit="{ row }">
        <vxe-select v-model="row.sex" transfer>
          <vxe-option v-for="item in sexList" :key="item.value" :value="item.value" :label="item.label"></vxe-option>
        </vxe-select>
      </template>
    </vxe-column>
    <vxe-column field="num1" title="Number" :edit-render="{}">
      <template #edit="{ row }">
        <vxe-input v-model="row.num1" type="number" placeholder="请输入数值"></vxe-input>
      </template>
    </vxe-column>
    <vxe-column field="date12" title="Date" :edit-render="{}">
      <template #edit="{ row }">
        <vxe-input v-model="row.date12" type="date" placeholder="请选择日期" transfer></vxe-input>
      </template>
    </vxe-column>
    <vxe-column field="date13" title="Week" :edit-render="{}">
      <template #edit="{ row }">
        <vxe-input v-model="row.date13" type="week" placeholder="请选择日期" transfer></vxe-input>
      </template>
    </vxe-column>
    <vxe-column field="address" title="Address" :edit-render="{}">
      <template #edit="{ row }">
        <vxe-input v-model="row.address" type="text"></vxe-input>
      </template>
    </vxe-column>
    <vxe-column title="操作" width="160">
      <template #default="{ row }">
        <vxe-button @click="editRowEvent(row)">编辑</vxe-button>
      </template>
    </vxe-column>
  </vxe-table>
</template>

<script>
import Sortable from 'sortablejs'
export default {
  data() {
    return {
      tableData: [
        { id: 10001, name: 'Test1', nickname: 'T1', role: 'Develop', sex: '0', sex2: ['0'], num1: 40, age: 28, address: 'Shenzhen', date12: '', date13: '' },
        { id: 10002, name: 'Test2', nickname: 'T2', role: 'Designer', sex: '1', sex2: ['0', '1'], num1: 44, age: 22, address: 'Guangzhou', date12: '', date13: '2020-08-20' },
        { id: 10003, name: 'Test3', nickname: 'T3', role: 'Test', sex: '0', sex2: ['1'], num1: 200, age: 32, address: 'Shanghai', date12: '2020-09-10', date13: '' },
        { id: 10004, name: 'Test4', nickname: 'T4', role: 'Designer', sex: '1', sex2: ['1'], num1: 30, age: 23, address: 'Shenzhen', date12: '', date13: '2020-12-04' },
        { id: 10005, name: 'Test5', nickname: 'T5', role: 'Develop', sex: '0', sex2: ['1', '0'], num1: 20, age: 30, address: 'Shanghai', date12: '2020-09-20', date13: '' },
        { id: 10006, name: 'Test6', nickname: 'T6', role: 'Designer', sex: '1', sex2: ['0'], num1: 10, age: 21, address: 'Shenzhen', date12: '', date13: '' },
        { id: 10007, name: 'Test7', nickname: 'T7', role: 'Develop', sex: '0', sex2: ['0'], num1: 5, age: 29, address: 'Shenzhen', date12: '2020-01-02', date13: '2020-09-20' },
        { id: 10008, name: 'Test8', nickname: 'T8', role: 'PM', sex: '1', sex2: ['0'], num1: 2, age: 35, address: 'Shenzhen', date12: '', date13: '' }
      ],
      sexList: [
        { label: '', value: '' },
        { label: '男', value: '1' },
        { label: '女', value: '0' }
      ]
    }
  },
  mounted() {
    this.rowDrop()
  },
  methods: {
    formatSex(value) {
      if (value === '1') {
        return '男'
      }
      if (value === '0') {
        return '女'
      }
      return ''
    },
    editRowEvent(row) {
      const $table = this.$refs.xTable
      $table.setActiveRow(row)
    },
    // 行拖动
    rowDrop() {
      this.$nextTick(() => {
        let xTable = this.$refs.xTable
        this.sortable = Sortable.create(xTable.$el.querySelector('.body--wrapper>.vxe-table--body tbody'), {
          handle: '.vxe-body--row',
          onEnd: ({ newIndex, oldIndex }) => {
            let currRow = this.tableData.splice(oldIndex, 1)[0]
            this.tableData.splice(newIndex, 0, currRow)
          }
        })
      })
    }
  }
}
</script>


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值