由于项目vben admin的 vue antd的版本是2.2.8,在看了table的文档之后发现只有用Surely vue才支持封装好的拖拽功能。只有自己动手去实现vben里的useTable的拖拽功能了

在useTable的配置项里面添加customRow的属性,然后定义一个函数:

 定义的dataSource必须用reactive包裹起来,否则在页面不能看到拖拽的变化。

      let source= 0; // 源目标数据序号
      let target= 0; // 目标数据序号
         // Table拖拽
      function customRow(record, index) {
        console.log(record, index); // 这里输出是表格全部的数据
        return {
          props: {
            // draggable: 'true'
          },
          style: {
            cursor: 'pointer',
          },
          // 鼠标移入
          onMouseenter: (event) => {
            // 兼容IE
            let ev = event || window.event;
            ev.target.draggable = true; // 让你要拖动的行可以拖动,默认不可以
          },
          // 开始拖拽
          onDragstart: (event) => {
            // 兼容IE
            let ev = event || window.event;
            // 阻止冒泡
            ev.stopPropagation();
            // 得到源目标数据序号
            source= index;
            console.log(record, index, 'source');
          },
          // 拖动元素经过的元素
          onDragover: (event) => {
            // 兼容 IE
            let ev = event || window.event;
            // 阻止默认行为
            ev.preventDefault();
          },
          // 鼠标松开
          onDrop: (event) => {
            // 兼容IE
            let ev = event || window.event;
            // 阻止冒泡
            ev.stopPropagation();
            // 得到目标数据序号
            target= index;
            // 这里就是让数据位置互换,让视图更新 你们可以看record,index的输出,看是什么
            [dataSource[source], dataSource[target]] = [dataSource[target], dataSource[source]];
            console.log(record, index, 'target', source, target);
          },
        };
      }

 然后页面上就可以实现拖拽的功能了,并且可以拿到目标行和源数据行的所有数据和序号

Logo

前往低代码交流专区

更多推荐