Skip to content

表格拖拽

开源插件: vuedraggable

二次封装

  • 由于项目中使用的是element-ui这个UI库,无法直接拖拽,这里就自己实现一个简易的table组件,接收一些自定义配置,与element同风格。

自定义table

  • vuedraggable基础配置

vuedraggable基础配置

  • 编写组件
点击查看代码
js
export default {
  name: 'DragTable',
  components: { dragable },
  props: {
    tableLable: {
      type: Array,
      required: true
    },
    tableList: {
      type: Array,
      required: true
    },
    singleData: {
      type: Object,
      default: null
    },
    specialOptions: {
      type: Object,
      default: null
    },
    submitLoading: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      btnLoading: this.submitLoading,
      lastIndex: 0,
      oldLastIndex: 0,
      orderId: 0,
      tableOverflow: false,
      tableData: this.tableList.length > 0 ? this.tableList : [],
      dragOptions: {
        animation: 150,
        ghostClass: 'drag-class'
      }
    }
  },
  computed: {
    tdData(data) {
      return data => {
        if (!data) return ''
        return Object.keys(data)
      }
    }
  }
}
  • 组件中使用
js
<drag-table 
  :key="dragTableKey"
  :table-lable="lessonTableLable"
  :table-list="lessonTableData"
  :special-options="specialOptions"
  :single-data="lessonFormData"
  :submit-loading="submitLoading"
  @submitTableData="submitAllLesson"
/>
  • 关于组件的key: 由于项目需要每次都要更新组件数据,给组件加上一个不断变化的key值,每次重新渲染组件。

效果

表格拖拽效果

Updated at: