首页 > 其他分享 >element+Sortable 实现表格拖拽

element+Sortable 实现表格拖拽

时间:2023-08-24 11:47:23浏览次数:37  
标签:const newList element state splice Sortable 拖拽

<template>
    <div class="draggable" style="padding: 20px">
        <el-table row-key="id" :data="state.tableData" style="width: 100%">
            <el-table-column v-for="(item, index) in state.oldList" :key="`col_${index}`" :prop="state.newList[index].prop"
                :label="item.label" align="center">
            </el-table-column>
        </el-table>
    </div>
</template>
<script setup>
import Sortable from 'sortablejs';
import { reactive, onMounted } from 'vue';

const state = reactive({
    oldList: [],
    newList: [],
    tableData: [
        {
            id: 1,
            name: '李四',
            gender: '男',
            age: 20,
        },
        {
            id: 2,
            name: '王五',
            gender: '未知',
            age: 18,
        },
        {
            id: 3,
            name: '张三',
            gender: '男',
            age: 22,
        },
    ],
    tableConfig: {
        tableItems: [
            {
                label: '姓名',
                prop: 'name',
            },
            {
                label: '性别',
                prop: 'gender',
            },
            {
                label: '年龄',
                prop: 'age',
            },
        ]
    }

})
// 行拖拽
const rowDrop = function () {
    // 要拖拽元素的父容器
    const tbody = document.querySelector('.draggable .el-table__body-wrapper tbody');
    Sortable.create(tbody, {
        //  可被拖拽的子元素
        draggable: ".draggable .el-table__row",
        onEnd({ newIndex, oldIndex }) {
            const currRow = state.tableData.splice(oldIndex, 1)[0];
            state.tableData.splice(newIndex, 0, currRow);
        }
    });
}
// 列拖拽
const columnDrop = function () {
    const wrapperTr = document.querySelector('.draggable .el-table__header-wrapper tr');
    Sortable.create(wrapperTr, {
        animation: 180,
        delay: 0,
        onEnd: evt => {
            const oldItem = state.newList[evt.oldIndex];
            state.newList.splice(evt.oldIndex, 1);
            state.newList.splice(evt.newIndex, 0, oldItem);
        }
    });
}
onMounted(() => {
    state.oldList = JSON.parse(JSON.stringify(state.tableConfig.tableItems))
    state.newList = JSON.parse(JSON.stringify(state.tableConfig.tableItems))
    columnDrop()
    rowDrop()
})
</script>

从其他大佬那里抄来的,方便自己以后借鉴

标签:const,newList,element,state,splice,Sortable,拖拽
From: https://www.cnblogs.com/awench/p/17653779.html

相关文章

  • element表单验证~提交
    ......
  • vuedraggable和vue-fragment冲突导致连续多次拖拽报错问题
    项目中使用了vuedraggable实现拖拽功能。同时为了不产生多余标签,引入了vue-fragment。在连续多次拖动之后,总是报错。 解决办法:卸载vue-fragment。如果不想引入多余的标签,可以直接使用<template>,而且<template>标签是标准的HTML标签,更具可移植性。......
  • element 树形控件,父节点不显示复选框,子节点显示复选框,需增加特定样式
      代码复用参考: /deep/.stafftree.el-tree.el-tree-node.is-leaf+.el-checkbox.el-checkbox__inner{display:inline-block;}/deep/.stafftree.el-tree.el-tree-node.el-checkbox.el-checkbox__inner{display:none;}::v-deep.el-tr......
  • Vite + Vue3 + Element-Plus
    搭建Vite项目注意Vite需要 Node.js 版本14.18+,16+。然而,有些模板需要依赖更高的Node版本才能正常运行,当你的包管理器发出警告时,请注意升级你的Node版本。使用NPM: npmcreatevite@latest使用Yarn:yarncreatevite使用PNPM:pnpmcreatevite输入项......
  • elementUI使用echarts的空气质量地图统计
    准备工作:前端安装:yarninstallecharts 、 yarninstallvue-baidu-map--save前端在public文件夹下的index.html中head标签中加入:<scriptsrc="https://api.map.baidu.com/api?v=2.0&ak=你的AK"></script>其中,key的申请地址:https://lbsyun.baidu.com/apiconsole/k......
  • [React Typescript] JSX.IntrinsicElements
    interfaceIntrinsicElements{//HTMLa:React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>,HTMLAnchorElement>;abbr:React.DetailedHTMLProps<React.HTMLAttributes<HTMLElemen......
  • vue-draggable跨iframe拖拽
    环境vue3"vuedraggable":"^4.1.0"物料区<draggableclass="dragArealist-groupcomponents-draggable":list="material":group="{name:'formGroup',pull:'clone',put:fals......
  • 通过一个实际的 Fiori Elements 扩展开发需求,介绍什么是 SAP Fiori Extension API 试
    本教程前一篇文章,介绍了如何在SAPFioriElementsListReport应用的Table区域里创建自定义Action,并且在该Action对应按钮的点击事件处理函数里,使用JavaScript代码打印出当前选中的表格行项目的业务数据。效果如下图所示:前一篇教程的解决方案,根据按钮的press事件点......
  • SAP Fiori Elements List Report 如何在扩展开发里使用代码获得当前选中的表格行项目
    笔者从2007年电子科技大学计算机专业硕士毕业后加入SAP成都研究院,一直从事SAP产品设计和研发工作至今,对SAP多项技术有着深入透彻的研究,尤其精通ABAP编程,SAPUI5(Fiori)应用开发和SAPOData服务开发。笔者将自己在SAP领域16年(2007~2023)的技术沉淀,进行了系统的归......
  • 如何使用 Guided Development 给 Fiori Elements List Report 的工具栏添加自定义按钮
    本教程之前的步骤,我们介绍了如何使用SAPFioriTools这个扩展包的ApplicationModeler提供的PageMap来给ListReport的Table控件添加自定义列的步骤。本文介绍另一种在FioriElements应用里进行扩展开发的方式,即FioriElementsGuidedDevelopment工具向导。按照......