Element UI表格拖拽(vue中) —— 行拖拽、列拖拽

简介: Element UI表格拖拽(vue中) —— 行拖拽、列拖拽

安装依赖 vuedraggable

安装  vuedraggable 的同时,会自动安装 sortablejs

npm i -S vuedraggable

或直接安装  sortablejs

npm install sortablejs --save

更多配置参考—— vue.draggable中文文档

http://www.itxst.com/vue-draggable/tutorial.html

实现拖拽的要点

使用class为 draggable 的div 包裹整个表格,以便拖拽代码中,准确抓取到拖拽元素的父容器

行拖拽要点

需在 el-table 标签中,根据行的内容指定行的唯一标识  row-key="id"

列拖拽要点

需额外定义两个数组,分别存储拖拽前的列顺序和拖拽后的列顺序

完整范例代码

<template>
    <div class="draggable" style="padding: 20px">
        <el-table
                row-key="id"
                :data="tableData"
                style="width: 100%"
                border
        >
            <el-table-column
                    v-for="(item,index) in oldList"
                    :key="`col_${index}`"
                    :prop="newList[index].prop"
                    :label="item.label"
                    align="center"
            >
            </el-table-column>
        </el-table>
    </div>
</template>
<script>
    import Sortable from 'sortablejs';
 
    export default {
        mounted() {
            this.oldList = JSON.parse(JSON.stringify(this.tableConfig.tableItems))
            this.newList = JSON.parse(JSON.stringify(this.tableConfig.tableItems))
            this.columnDrop()
            this.rowDrop()
        },
        data() {
            return {
                oldList: [],
                newList: [],
                tableData: [
                    {
                        id:1,
                        name:'李一',
                        gender:'男',
                        age:30,
                        job:"会计"
                    },
                    {
                        id:2,
                        name:'王二',
                        gender:'未知',
                        age:18,
                        job:"无业游民"
                    },
                    {
                        id:3,
                        name:'张三',
                        gender:'男',
                        age:50,
                        job:"老板"
                    },
                ],
                tableConfig: {
                    tableItems: [
                        {
                            label: '姓名',
                            prop: 'name',
                        },
                        {
                            label: '性别',
                            prop: 'gender',
                        },
                        {
                            label: '年龄',
                            prop: 'age',
                        },
                        {
                            label: '工作',
                            prop: 'job',
                        },
                    ]
                }
            }
        },
        methods: {
            // 行拖拽
            rowDrop() {
                // 此时找到的元素是要拖拽元素的父容器
                const tbody = document.querySelector('.draggable .el-table__body-wrapper tbody');
                const _this = this;
                Sortable.create(tbody, {
                    //  指定父元素下可被拖拽的子元素
                    draggable: ".draggable .el-table__row",
                    onEnd({newIndex, oldIndex}) {
                        const currRow = _this.tableData.splice(oldIndex, 1)[0];
                        _this.tableData.splice(newIndex, 0, currRow);
                    }
                });
            },
            // 列拖拽
            columnDrop() {
                const wrapperTr = document.querySelector('.draggable .el-table__header-wrapper tr');
                this.sortable = Sortable.create(wrapperTr, {
                    animation: 180,
                    delay: 0,
                    onEnd: evt => {
                        const oldItem = this.newList[evt.oldIndex];
                        this.newList.splice(evt.oldIndex, 1);
                        this.newList.splice(evt.newIndex, 0, oldItem);
                    }
                });
            }
        }
    }
</script>
<style scoped>
</style>


目录
相关文章
|
2月前
|
Web App开发 前端开发 JavaScript
Element UI框架中自定义input组件的placeholder样式。
确保这些样式在你的应用程序CSS文件中定义,且该文件已正确加载到项目中。通过以上方法,可以控制Element UI组件中input的placeholder样式,使其满足特定的设计要求。这些更改都是基于CSS伪元素进行的,因此并不会对DOM结构产生改变,保持了原有结构的简洁和高效。
317 12
|
2月前
|
存储 JavaScript 前端开发
element ui <el-date-picker> 设置展示当前月
在 Element UI 中,使用 `el-date-picker` 的 `value-format` 属性可将日期值格式化为指定字符串。设置 `type=&quot;month&quot;` 时,绑定值默认为 Date 对象,通过 `value-format=&quot;yyyy-MM&quot;` 可将其转为如 &quot;2023-05&quot; 格式,便于存储与处理。
765 0
|
7月前
|
JavaScript 数据安全/隐私保护
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
468 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
|
11月前
|
API UED 容器
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
在这篇博客中,我们将深入探讨 Element UI 中的自定义滚动条及弹出层管理技巧。文章详细介绍了 el-scrollbar 组件的使用和参数设置,以及 PopupManager 如何有效管理弹出层的 z-index。我们还将探讨如何实现灵活的全屏组件,利用 vue-popper 创建自定义弹出层,最后介绍 ClickOutside 指令的用法。这些高级技巧将帮助你提升 Element UI 应用程序的用户体验与交互灵活性。
1082 1
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
这篇文章介绍了如何使用Ant Design Vue UI框架创建一个简单的后台管理模板,包括创建Vue项目、安装和使用ant-design-vue、以及编写后台管理通用页面的代码和样式。
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
|
JavaScript
element-ui table表格多选后再打开默认选中
element-ui table表格多选后再打开默认选中
|
11月前
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
867 0
|
4月前
|
开发框架 前端开发 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发一
本文介绍了方舟开发框架(ArkUI)及其两种开发范式:基于ArkTS的声明式开发范式和类Web开发范式。ArkUI是用于构建HarmonyOS应用界面的UI框架,提供极简UI语法和基础设施。声明式开发范式使用ArkTS语言,以组件、动画和状态管理为核心,适合复杂团队协作;类Web开发范式采用HML、CSS、JavaScript三段式开发,适用于简单界面应用,贴近Web开发者习惯。文中还概述了两者的架构和基础能力,帮助开发者选择合适的范式进行高效开发。
162 15
|
4月前
|
编解码 前端开发 Java
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发三
本文介绍了基于声明式UI范式的图形绘制与动画效果实现方法,涵盖绘制图形、添加动画效果及常见组件说明三部分内容。在绘制图形部分,详细讲解了如何通过Circle组件为食物成分表添加圆形标签,以及使用Path组件结合SVG命令绘制自定义图形(如应用Logo)。动画效果部分则展示了如何利用animateTo实现闪屏动画,包括渐出、放大效果,并设置页面跳转;同时介绍了页面间共享元素转场动画的实现方式。最后,文章列举了声明式开发范式中的各类组件及其功能,帮助开发者快速上手构建复杂交互页面。
150 11
|
11天前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
121 0
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例

热门文章

最新文章