element table表格,动态生成表头,基于可拖拽组件,拖动排序

article/2025/9/14 7:42:07

效果展示

 

 使用步骤

    所需页面根据解释粘入 表格页面(父组件).txt 中代码,
    引入dragList.vue组件

1.表格页面(父组件)

<dragList  @radio="ssss" ></dragList>   //引用子组件<el-tablev-if="asa":data="tableData"row-key="id"borderref="purchaseTable"@selection-change="handleSelectionChange"><template   v-for="column in tableColumns"><el-table-column:key="column.id":prop="column.prop"v-if="column.isture":class-name="column.isDrag":label="column.label":align="column.align":type="column.type":width="column.width"></el-table-column></template></el-table>


1. data中动态表头数据

 tableColumns:[{id:"0",type:"selection",width:"55",align:"center",isture:false},{id:"1",type:"index",label:"序号",align:"center",scope:"scope",isture:true},{id:"2",label:"采购合同号",prop:"contractNo",align:"center",isDrag:"drag",isture:true},{id:"3",label:"原产国",prop:"countryName",align:"center",isDrag:"drag",isture:true},{id:"4",label:"产品",prop:"productName",align:"center",isDrag:"drag",scope:"ClientTag",isture:true},{id:"5",label:"合同总数量",prop:"contractNum,quantityUnit",isDrag:"drag",align:"center",scope: "slot-scope",isture:true},{id:"6",label:"合同总金额",prop:"contractPrice",align:"center",isture:true},],

2. methods方法中

ssss(data){此方法为子向父传参触发事件this.asa = falsethis.tableColumns = datathis.$nextTick(() => { //在数据加载完,重新渲染表格this.asa = truethis.$refs['purchaseTable'].doLayout();})},

2.拖拽组件

<template><el-popoverplacement="top"v-model="visible"><div class="test_wrapper" @dragover="dragover($event)"><div class="text" >字段设置</div><el-divider></el-divider><transition-group class="transition-wrapper" name="sort"><div v-for="(item,index) in dataList" :key='item.id' class="sort-item":draggable="true"@dragstart="dragstart(item)"@dragenter="dragenter(item,$event)"@dragend="dragend(item,$event)"@dragover="dragover($event)"><el-checkbox style="margin-right: 10px" v-model="dataList[index].isture" @change="rediochange" ></el-checkbox>{{ item.label }}</div></transition-group></div><div style="text-align: right; margin: 0"><el-button size="mini" type="text" @click="visible = false">取消</el-button><el-button type="primary" size="mini" @click="visible = false">确定</el-button></div><i v-if="visibleclose" @click="visclose" slot="reference" class="el-icon-s-fold"></i><i v-if="visibleon" @click="vison" slot="reference" class="el-icon-s-unfold"></i>
<!--    <el-button slot="reference">删除</el-button>--></el-popover></template>
<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script>
<script>
import draggable from "vuedraggable";
import Sortable from "sortablejs";
export default {components: {draggable,Sortable,},data() {return {visible:false,visibleclose:true,visibleon:false,name: null,oldData: null,newData: null,dataLists:[],dataList:[{id:"0",type:"selection",width:"55",align:"center",isture:false},{id:"1",type:"index",label:"序号",align:"center",scope:"scope",isture:true},{id:"2",label:"采购合同号",prop:"contractNo",align:"center",isDrag:"drag",isture:true},{id:"3",label:"原产国",prop:"countryName",align:"center",isDrag:"drag",isture:true},{id:"4",label:"产品",prop:"productName",align:"center",isDrag:"drag",scope:"ClientTag",isture:true},{id:"5",label:"合同总数量",prop:"contractNum,quantityUnit",isDrag:"drag",align:"center",scope: "slot-scope",isture:true},{id:"6",label:"合同总金额",prop:"contractPrice",align:"center",isture:true},],}},methods: {// 拖拽事件handleEdit(index, row) {console.log(index, row);},handleDelete(index, row) {console.log(index, row);},dragstart(value) {this.oldData = value},// 记录移动过程中信息dragenter(value, e) {this.newData = valuee.preventDefault()},// 拖拽最终操作dragend(value, e) {if (this.oldData !== this.newData) {let oldIndex = this.dataList.indexOf(this.oldData)let newIndex = this.dataList.indexOf(this.newData)let newItems = [...this.dataList]// 删除老的节点newItems.splice(oldIndex, 1)// 在列表中目标位置增加新的节点newItems.splice(newIndex, 0, this.oldData)this.dataList = [...newItems]this.$emit('radio',this.dataList)}},// 拖动事件(主要是为了拖动时鼠标光标不变为禁止)dragover(e) {e.preventDefault()},
// 拖拽事件结束
//   点击展开拖拽框visclose(){this.visibleclose = falsethis.visibleon = true},//   点击关闭拖拽框vison(){this.visibleclose = truethis.visibleon = false},rediochange(){this.$emit('radio',this.dataList)}}
}
</script>
<style>
.test_wrapper {padding-top: 20px;width: 250px;/*background-color: pink;*/
}
.el-divider--horizontal {margin: 15px 0;
}
.test_wrapper .text {font-size: 16px;margin-left: 20px;color: #0e0e9d;
}
.transition-wrapper {display: inline-block;margin-left: 20px
}
.transition-wrapper .sort-item{margin-bottom: 6px;
}
</style>


http://chatgpt.dhexx.cn/article/b2SjunWL.shtml

相关文章

vue-draggable的多列拖动与拷贝拖拽(不删除源数据列)

vue-draggable的多列拖动与拷贝拖拽&#xff08;不删除源数据列&#xff09; Demo所用属性所遇困难源码 Demo 官方文档 录屏软件&#xff1a;screenToGif (将视频转为Gif&#xff0c;我认为简单又好操作) 我深知&#xff0c;文字的感知不如图片&#xff0c;图片的感知不如视频…

【JavaScript】列表拖拽升级,支持双击添加和时间轴左右拖动

TOC H5实现时间揍拖动 实现双击文件列表的项添加到时间揍的最后一条。 时间轴里可以左右拖动位置。 主要代码&#xff1a; /*** 时间轴拖动结束* param $event* constructor*/ const lineDragEnd ( $event ) > {console.log( 时间轴拖动结束 , $event )console.log(移动了,…

echarts拖拽echarts实现多条可拖动节点的折线图

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="js/echarts/echarts.js"></script> <title>在指定位置画多个点</title> <style> …

html拖拽页面特效,div+css实现网页模块或栏目拖动(即拖拽效果)

//为Number增加一个属性,判断当前数据类型是否是数字 Number.prototype.NaN0function(){return isNaN(this)?0:this;} //全局变量 var iMouseDownfalse; var dragObjectnull; //获得鼠标的偏移量(对象2-对象1) function getMouseOffset(target,ev) { evev||window.event; var …

RecyclerView实现Item可拖拽(拖动、删除)

RecyclerView实现Item可拖拽&#xff08;拖动、删除&#xff09; 话不多说&#xff0c;先附上效果图&#xff1a; ItemTouchHelper 这是一个RecyclerView的工具&#xff0c;提供了drag & swipe 的功能&#xff0c;可以帮助我们处理RecyclerView中的Item的拖拽和滑动事件…

原生drag拖拽后元素过大,挡住其他可拖动位置无法拖动问题

写一个蒙层&#xff0c;还未拖动前原始层在上面&#xff0c; 拖动那过程中&#xff08;dragover&#xff09;原始层在下面&#xff0c; 拖进目标元素后&#xff08;drop&#xff09;&#xff0c;此时蒙层在上面&#xff0c;根据drop的$event获取落在蒙层哪个div上&#xff0c…

html5播放器禁止拖拽功能实例(教学内容禁止拖动观看)

html5播放器禁止拖拽功能实例&#xff08;常用于场景&#xff1a;企业培训、在线教学内容禁止学员拖动视频进行观看&#xff09; 实例1&#xff1a;参数开启后&#xff0c;视频教学内容或视频课件将不允许拖动进度条。 <div id"player"></div> <scr…

html5播放器禁止拖拽、视频禁止拖动的实例

阿酷TONY / 2023-3-8 / 长沙 html5播放器禁止拖拽功能,常用于场景&#xff1a;企业培训、在线教学内容禁止学员拖动视频进行观看。 应用代码实例&#xff1a; <div id"player"></div> <script src"//player.polyv.net/script/player.js">…

WPF TreeView拖动排序拖拽排列

底部附有Demo示例。需要的朋友可以去下载参考 一、图示 先上图&#xff0c;不知为啥&#xff0c;GIF总看起来特别卡&#xff0c;实际却很流畅。 由于录制问题&#xff0c;GIF动画只会播放一次&#xff0c;需要重复观看的&#xff0c;请将网页关闭后重新打开再观看 WPF的资料…

js原生拖拽的两种方法

一.mousedown、mousemove和mouseup 拖着目标元素在页面任意位置 如果要设置物体拖拽&#xff0c;那么必须使用三个事件&#xff0c;并且这三个事件的使用顺序不能颠倒。 1.onmousedown&#xff1a;鼠标按下事件 2.onmousemove&#xff1a;鼠标移动事件 3.onmouseup&#xff…

前端原生拖拽(drag drop)的一点小总结

新工作中&#xff0c;第一个手生的功能&#xff0c;遇到了很多诡异的问题&#xff0c;今天终于解惑了。最终原因还是对代码没有透彻的了解&#xff0c;jquery的运用也不熟练导致的。稍稍的记录一下。 原始功能 对项目列表中的元素进行拖拽&#xff0c;拖拽到一定的位置&#xf…

Vue2 _ 实现拖拽功能

老项目重构&#xff0c;其中有一些拖拽功能&#xff0c;不过用的是两个开源 JS 拖拽文件实现的效果&#xff0c;版本太老了&#xff0c;所以需要换代了&#xff0c;然后就查阅了能够用 Vue 来简单快速实现拖拽的功能实现方法 &#xff1a; 目录 一、HTML 拖放 二、Vue.Dragg…

vue2 使用 Sortable 库进行拖拽操作

一、vue 项目使用 文档地址&#xff1a; https://www.itxst.com/sortablejs/neuinffi.html 1、安装依赖 npm i -S vuedraggable2、.vue 文件引入组件 import draggable from "vuedraggable"; components: { draggable },3、.使用 查看文档中的示例即可&#xff…

空指针、悬空指针、野指针

文章目录 前言一、指针&#xff1f;二、指针的应用场景三、 空指针四、 悬空指针五、 野指针正确用法 总结 前言 相信很多小伙伴对指针的使用都有一定的了解了。但更多的人可能对指针又爱又恨。这次我们谈点重要的&#xff0c;进一步加深对指针的理解 一、指针&#xff1f; 指…

【C语言】指针(野指针)

目录 1&#xff1a;什么是野指针&#xff1f; 2&#xff1a;如何规避野指针 1.1&#xff1a;指针变量的初始化 2.2&#xff1a;指针越界访问 3.3&#xff1a;指针指向的空间如果我们还回去的话&#xff0c;就把指针指针置为NULL 4.4&#xff1a;指针使用之前检查有效性…

C语言的野指针

1.野指针 指针变量中的值是非法的内存地址&#xff0c;进而形成野指针野指针不是NULL指针&#xff0c;是指向不可用内存地址的指针NULL指针并无危害&#xff0c;很好判断&#xff0c;也很好调试C语言中无法判断一个指针所保存的地址是否合法&#xff0c;合法的地址是通过变量或…

初识C语言---野指针

野指针概念&#xff1a; 野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#xff09;。 一、野指针成因 1、指针未初始化就使用 #include<stdio.h> int main() {int* p; *p 10; return 0; }此段代码中&#…

野指针(概念,产生原因,危害,避免方法)

思维导图: 1.野指针与垂悬指针的区别: 野指针:访问一个已销毁或者访问受限的内存区域的指针,野指针不能判断是否为NULL来避免 垂悬指针:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。 2.概念 指针指向了一块随机的空间,不受…

野指针概念、定义、及如何规避野指针

野指针 野指针的概念&#xff1a; 野指针就是指针指向的位置不可知的。&#xff08;随机的、不正确的、没有明确限制的&#xff09; 野指针的三种情况 1、指针未定义 #include <stdio.h> int main() {int* p; //局部变量指针未初始化&#xff0c;默认就是随机值*p10;r…

使用 OKTA 作为 SAML IdP 为 FortiClient配置 SAML SSO 登录

描述 随着用于 FortiGate 和 FortiClient 6.4 的 FortiOS 6.4 的发布,现在可以创建SSL SSO 单点登录解决方案,该解决方案可以集成第三方 SAML SSO 身份提供商 (IdP) 并利用其 MFA 功能。 前置条件 FortiGate 运行 FortiOS 6.4.0 或更高版本FortiClient 6.4.0 或更高版本OK…