可拖动表格

news2024/11/19 20:41:09

支持行拖动,列拖动

插件:sortablejs   

UI: elementUI 

<template>
  <div>
    <hr style="margin: 30px 0;">
    <div>
      <!-- 数据里面要有主键id, 否则拖拽异常 -->
      <h2 style="margin-bottom: 30px">【sortablejs】实现行拖拽和列拖拽</h2>
      <el-table :data="tableData" row-key="id" border style="width: 50%">
        <el-table-column
          v-for="(item, index) in colList"
          align="center"
          show-overflow-tooltip
          :key="`col_${index+1}`"
          :prop="dropCol[index].prop"
          :label="item.label"
          :min-width="item.minWidth"
          :class-name="item.className"
          :fixed="item.fixed"
        >
          <template v-if="item.prop =='setting'">
            <slot :name="item.prop" slot-scope="scope">
              <!-- 加上这列,如果不固定到右侧,会使得列拖拽异常 -->
              <!-- 右侧固定列不动   应该有特殊写法 -->
              <el-button size="mini">编辑{{scope.setting}}</el-button>
            </slot>
          </template>
        </el-table-column>
      </el-table>
    </div>
  </div>
</template>

<script>
import draggable from "vuedraggable";
import Sortable from "sortablejs";
import { mapState } from 'vuex';
export default {
  components: {
    draggable,
  },
  data() {
    return {
      dropCol: [
        {
          label:'日期',
          prop: 'date'
        },
        {
          label:'姓名',
          prop:'name'
        },
        {
          label:'地址',
          prop: 'address'
        },
        {
          label:'操作',
          prop: 'setting',
          width: 120
        }
      ],
      colList: [//多写了一个,和上面dropCol相同,为了防止列拖拽时数据不跟随
        {
          label:'日期',
          prop: 'date'
        },
        {
          label:'姓名',
          prop:'name'
        },
        {
          label:'地址',
          prop: 'address'
        },
        {
          label:'操作',
          prop: 'setting',
          width: 120,
          className: 'disabled',
          fixed: 'right'//固定到右侧,否则列拖拽异常
        }
      ],
      tableData: [
        {
          date: "2016-05-03",
          name: "A",
          address: "No. 189, Grove St, Los Angeles",
          id: 1,
          setting: 'setting1'
        },
        {
          date: "2016-05-02",
          name: "B",
          address: "No. 189, Grove St, Los Angeles",
          id: 2,
          setting: 'setting2'
        },
        {
          date: "2016-05-04",
          name: "C",
          address: "No. 189, Grove St, Los Angeles",
          id: 3,
          setting: 'setting3'
        },
        {
          date: "2016-05-01",
          name: "D",
          address: "No. 189, Grove St, Los Angeles",
          id: 4,
          setting: 'setting4'
        },
      ],
    };
  },
  mounted(){
    this.rowDrop()
    this.columnDrop()
  },
  methods: {
    rowDrop(){//行拖拽
      const tbody = document.querySelector('.el-table__body-wrapper tbody');
      const _this = this;
      Sortable.create(tbody,{
        animation: 180,
        delay: 0,
        onEnd({ newIndex, oldIndex }){
          const currRow = _this.tableData.splice(oldIndex, 1)[0];
          console.log(currRow,currRow.name)
          _this.tableData.splice(newIndex, 0, currRow)
          console.log('_this.tableData',_this.tableData)
        }
      })
    },
    columnDrop(){//列拖拽
      const theader = document.querySelector('.el-table__header-wrapper tr');
      this.sortable = Sortable.create(theader,{
        animation: 180,
        filter: '.disabled',
        onEnd: e=> {
          const oldItem = this.dropCol[e.oldIndex];
          this.dropCol.splice(e.oldIndex, 1);
          this.dropCol.splice(e.newIndex, 0, oldItem)
        }
      })
    }
  },
};
</script>

<style lang="less" scoped>
.drag-resize{
  height: 400px;
  width: 100%;
  background: rgb(196, 196, 139);
  border: 1px solid #888;
  border-radius: 2px;
  position: relative;//不设置这个,被拖拽的元素就跑外面去了
}
.drag-element-seat{
  width: 100%;
  height: 100%;
}
</style>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/945960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大山里的女孩】

我生来就是高山而非溪流&#xff0c;我欲于群峰之巅仰视平庸的沟壑。 这是她们的呐喊&#xff01; “我不知道我还有多少时间&#xff0c;现在还能动&#xff0c;我想做点事。” 这是张桂梅平凡的宣言&#xff0c;也是她一生都在践行的梦想。 17岁的她&#xff0c;为了祖国建…

Python-matplotlib画图时标题中的指数表示

1.示例 2.核心代码 # 修改横轴的刻度 # 生成刻度的位置和标签 total_steps 1000000 # 总共100万步 num_segments 10 # 分成10段 segment_length total_steps // num_segments # 每段的步数# 生成刻度的位置 custom_ticks np.arange(0, total_steps 1, segment_length…

基于孪生神经网络Siamese开发构建牛脸识别分析系统

关于牛脸识别相关的项目开发实践&#xff0c;在我前面的一篇文章中已经有非常详细的实践记录了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a;《助力养殖行业数字化转型&#xff0c;基于深度学习模型开发构建牛脸识别系统》 在我们以往接触到的项目或者是业务场景中…

L1-044 稳赢(Python实现) 测试点全过

题目 大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现要求你编写一个稳赢不输的程序&#xff0c;根据对方的出招&#xff0c;给出对应的赢招。但是&#xff01;为了不让对方输得太惨&#xff0c;你需要每隔K次就…

小红书运营 变现方法总结

大家好&#xff0c;我是网媒智星&#xff0c;今天跟大家分享一下小红书如何变现的方法。介绍四个赛道和玩法给大家参考。 想在小红书成为博主的同学们要牢记一句话&#xff1a;赛道的选择比流量更重要。方向错误&#xff0c;再怎么努力也是徒劳。小红书是近几年最值得投资的平台…

JUC并发编程--------基础篇

一、多线程的相关知识 栈与栈帧 我们都知道 JVM 中由堆、栈、方法区所组成&#xff0c;其中栈内存是给谁用的呢&#xff1f;其实就是线程&#xff0c;每个线程启动后&#xff0c;虚拟 机就会为其分配一块栈内存。 每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xf…

Linux 常用命令 2

Linux 常用命令 2 1、组和权限管理1.1、ls 指令1.2、chown 指令1.3、chgrp 指令1.4、chmod 指令1.5、chown 指令1.6、chgrp 指令 2、crond 任务调度2.1、crontab2.2、时间格式2.3、脚本无法执行问题2.4、案例 3、进程管理3.1、ps 指令3.2、kill 和 killall 指令3.3、pstree 指令…

《开发实战》12 | 异常处理:别让自己在出问题的时候变为瞎子

12 | 异常处理&#xff1a;别让自己在出问题的时候变为瞎子 捕获和处理异常容易犯的错 “统一异常处理”方式正是我要说的第一个错&#xff1a;不在业务代码层面考虑异常处理&#xff0c;仅在框架层面粗犷捕获和处理异常。为了理解错在何处&#xff0c;先看看大多数业务应用都…

python学习2之sublime text编辑器安装配置使用

1、在windows系统中使用sublime text 下载地址 https://www.sublimetext.com/3 2、在sublime text中运行python程序 代码运行可选择菜单Tools->Build或者按CtrlB 3、定制sublime text的设置 3.1将制表符转换为空格 选择菜单view->indentation,核实选择了复选框indent u…

【1++的数据结构】之AVL树

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的数据结构】 文章目录 一&#xff0c;什么是AVL树二&#xff0c;AVL树的插入三&#xff0c;AVL树的旋转3.1 向左旋转3.2 向右旋转3.3 左右双旋3.4 右左双旋 四&#xff0c;验证AVL树是否平衡 …

前端学习之轮播图

前端学习之轮播图 该案例涉及到定时器的使用&#xff0c;元素的活获取&#xff0c;函数的调用等知识的运用 显示图如下&#xff1a;可以点击图标跳转图片&#xff0c;也可以自动轮播 源码如下 <!DOCTYPE html> <html><head><meta charset"UTF-8&q…

监控抽烟检测识别算法

监控抽烟检测识别算法采用yolov7系列网络模型深度学习图像识别技术&#xff0c;监控抽烟检测识别算法能够准确识别人员抽烟的动作和烟雾&#xff0c;监控抽烟检测识别算法一旦发现有人员在禁烟区域内抽烟&#xff0c;将立即触发预警。YOLO的结构非常简单&#xff0c;就是单纯的…

正中优配:“核污染防治”炒作按下暂停键, 中电环保、建龙微纳大跌

连日大涨的核污染防治炒作“步伐”放缓。 8月29日上午&#xff0c;核污染防治概念股多数低开&#xff0c;截止到午间休市&#xff0c;此前4个交易日累计涨超80%的中电环保&#xff08;300172.SZ&#xff09;大跌6.76%。 8月28日晚间&#xff0c;中电环保发布异动公告&#xff…

遗传算法决策变量降维的matlab实现

1.案例背景 1.1遗传算法概述 遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。它最初由美国Michigan大学的J. Holland教授提出,1967年, Holland 教授的学生 Bagley在其博士论文中首次提出了“遗传…

三电平离网逆变器接不平衡负载仿真

文章目录 **0、系统框图****1、纯阻性负载R****2、纯感性负载L****3、纯容性负载C****4、 RL负载****5、RC负载****6、CL负载****7、RLC负载** 0、系统框图 闭环控制 PWM调制 逆变桥 LCL滤波电路 负载&#xff08;可配置&#xff09; 坐标变换&#xff08;采样得到&#xff09;…

SAP_ABAP_FUNCTION_ALV案例

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型https://blog.csdn.net/java_zhong1990/article/details/132469977 一、Function ALV 1.1 基于退货采购订单创建&#xff0c;解释 FUNCTION_ALV开发的程序结构与代码模板参考 1.2 程序结构 to…

ORA-00604 ORA-00069报错

在测试环境上删除用户&#xff0c;报错如下 rop user "USR_EOS" cascade; * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-00069: cannot acquire lock -- table locks disabled for T_EMPLOYEE 解决方法 alter table USR_EOS.T_EMPL…

运维架构师:驱动企业运维向高效发展“

运维架构师是高级运维工程师的角色&#xff0c;主要负责运维工作的策划和执行。他们需要熟练掌握开源工具&#xff0c;但更重要的是运用思维来进行运维工作&#xff0c;实现DevOps理念和解决各种企业运营中的挑战。他们的职责包括设计各种运维解决方案&#xff0c;例如自动化代…

Python框架【模板继承、继承模板实战、装饰器、蓝图(介绍、单文件、目录结构、模版文件、静态文件 url_for函数子域名实现)】(五)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

深入解析SNMP协议及其在网络设备管理中的应用

SNMP&#xff08;Simple Network Management Protocol&#xff0c;简单网络管理协议&#xff09;作为一种用于网络设备管理的协议&#xff0c;在实现网络设备的监控、配置和故障排除方面发挥着重要的作用。本文将深入解析SNMP协议的工作原理、重要概念和功能&#xff0c;并探讨…