el-table进行列的拖拽

1、使用Sortable插件

下载:

npm install sortablejs --save

引入到当前使用的页面

    import Sortable from 'sortablejs'

代码重点:可以参考以下代码(不是拿来就可以用的,需要摘取重要代码的内容)

 row-key="id" 必须添加且唯一

el-table添加一个id

主要是initSort()方法

<template><div class="diff-container"><div><el-tablev-loading ="loading":data="tableData"height="calc(100vh - 180px)"style="width: 100%"ref="table"row-key="branch"id="sortExample"><el-table-columnprop="order"label="排序"width="65"><template><div class="drag"><img src="@/assets/img/drag.png" alt=""></div></template></el-table-column><el-table-columnprop="branch"label="分支名"width="180"></el-table-column><el-table-columnprop="remark"label="备注信息"><template slot-scope="{row}"><div v-if="row.edit" class="flex-align-center"><el-input v-model="row.remark" placeholder="请输入内容"></el-input><el-button size="mini" style="margin-left:10px"@click="cancle(row)">取 消</el-button><el-buttonsize="mini"@click="remarkSubmit(row)">确 认</el-button></div><div v-else class="flex-align-center"><span>{{ row.remark ? row.remark : '--'}}</span><img style="margin-left:12px" class="cursor-pointer"src="@/assets/img/edit-icon.png" alt=""@click="editRemark(row)"></div></template></el-table-column><el-table-columnprop="show"label="显示分支"width="300"><template slot-scope="{row}"><!-- <div :class="[row.show ? 'show' : 'not-show','flex-align-center']"><div :class="[row.show ? 'show-title':'hidden']">{{ row.show ? '显示' : '隐藏' }}</div><div class="circle cursor-pointer"@click="updateDiffShow(row)"></div></div> --><div class="el-switch-demo defineSwitch"><el-switchv-model="row.show"active-text=""@change="updateDiffShow(row)"inactive-text=""></el-switch></div></template></el-table-column><el-table-columnprop="diffName"label="操作"width="250"><template slot-scope="{row}"><el-button class="button-hover"size="mini"  icon="el-icon-delete"@click="deleteDiff(row)">删除</el-button></template></el-table-column></el-table></div><!-- 后缀名称添加的模态框 --><div><el-dialogtitle="添加可点击文件后缀":visible.sync="suffixVisible"width="600px":close-on-click-modal="false":before-close="handleClose"><div><el-form ref="form" :model="form" label-width="100px"><el-form-item label="生效分支:"><el-select v-model="form.region" placeholder="请选择活动区域"><el-option label="区域一" value="shanghai"></el-option><el-option label="区域二" value="beijing"></el-option></el-select></el-form-item><el-form-item label="文件后缀:"><el-input v-model="form.name" placeholder="请输入,多个文件后缀用英文逗号分隔开 (例如: h,json,xlsx,xlsm,xls)"></el-input></el-form-item></el-form></div><span slot="footer" class="dialog-footer"><el-button size="mini"@click="suffixVisible = false">取 消</el-button><el-button size="mini"type="primary"@click="suffixVisible = false">确 定</el-button></span></el-dialog></div><!-- 删除提示框 --><div class="delete"><el-dialogtitle="提示":close-on-click-modal="false":visible.sync="deleteVisible"width="30%":before-close="closeDelete"><div slot="title"><div class="flex-align-center"><img src="@/assets/img/warning-red.png" alt=""><div style="margin-left:4px">提示</div></div></div><span>确认删除分支 {{ row.branch }} 吗?</span><span slot="footer" class="dialog-footer"><el-button @click="closeDelete" size="mini">取 消</el-button><el-button type="primary" @click="deleteConfirm"size="mini">确 定</el-button></span></el-dialog></div><div><delete-tip:deleteVisible="tipVisible"@close="close"@confirm="confirm":message="message"></delete-tip></div></div>
</template>
<script>import deleteTip from '@/components/common/deleteTip.vue';import Sortable from 'sortablejs'export default {components: {deleteTip,},data() {return {tipVisible:false,message:'',confirmMark:"",deleteVisible: false,suffixVisible: false,editTime:null,deleteRow: {},row: {},radio: 0,form: {name: '',region: '',date1: '',date2: '',delivery: false,type: [],resource: '',desc: ''},showRow:[{prop:'diffName',label:'分支名'},],loading: true,tableData: [],typeTimer: null}},watch: {},methods: {onTypeEnd(){let ids = []this.tableData.map(item => {ids.push(item.branch)})if (this.typeTimer) {window.clearTimeout(this.typeTimer);}this.typeTimer = setTimeout(() => {let params = {project_code: this.$store.state.project,branch: this.$store.state.brand,new_order_list: JSON.stringify(ids)}this.$api.projectSetting.updateBranchOrde(params, res => {})}, 2000);},initSort() {this.$nextTick(() => {const example1 = document.getElementById('sortExample').querySelector('.el-table__body-wrapper tbody');;const _this = this;Sortable.create(example1, {draggable: '.el-table__row', //指定样式类的元素才允许拖动animation: 100,//过渡动画时间//拖拽结束时事件onEnd: function (evt) {const { newIndex, oldIndex } = evt;//实时更换list中的数据const currRow = _this.tableData.splice(oldIndex, 1)[0];_this.tableData.splice(newIndex, 0, currRow);_this.onTypeEnd()},});})},cancle(row) {row.edit = falsethis.getDiffList()},// 获取分配列表getDiffList(){this.loading = truethis.$api.projectSetting.getDiff({project_code: this.$store.state.project,project_id: this.$store.state.version}, res => {this.loading = falsethis.tableData = res.data})},close() {this.tipVisible = false},confirm(){if(this.confirmMark === 'diff'){// this.editList()this.tipVisible = false}else if(this.confirmMark === 'delete'){this.tipVisible = falselet params = {branch: this.row.branch,project_code: this.$store.state.project,project_id: this.$store.state.version}this.$api.projectSetting.deleteDiff(params,res=>{this.$message.success('删除成功')this.getDiffList()})}},// 编辑功能editList(){let params = {id:'editid',branch:this.form.branch,mark: this.row.remark,showDiff: !this.row.show}this.$api.projectSetting.editDiff(params, res => {this.getDiffList()})},closeDelete() {this.deleteVisible = falsethis.$message({type: 'info',message: '已取消删除'});   },deleteConfirm () {this.deleteVisible = falsethis.$message({type: 'success',message: '删除成功!'});},handleClose() {this.suffixVisible = false},deleteDiff(row) {if(this.tableData.length === 1){this.$message.error('请至少保留一个分支,不可删除')} else {this.row = JSON.parse(JSON.stringify(row))this.tipVisible = truethis.message = `确认删除分支 ${row.branch} 吗?`this.confirmMark ='delete'}},editRemark(row) {this.$set(row,'edit',true)},addSuffix(){this.suffixVisible = true},remarkSubmit(row) {row.edit = falsethis.row = JSON.parse(JSON.stringify(row))// if(this.editTime){//   window.clearTimeout(this.editTime)//}//this.editTime = setTimeout(() => {// this.editList()//},2000)let params = {project_code: this.$store.state.project,project_id: this.$store.state.version,branch:row.branch,update_col:'remark',update_data:row.remark,}this.$api.projectSetting.editDiff(params,res=>{this.getDiffList()this.$message.success("修改成功")})},updateDiffShow(row){// row.show = !row.show//this.tipVisible = true//this.message = '确定要修改显示分支?'//this.confirmMark ='diff'//editDifflet params = {project_code: this.$store.state.project,project_id: this.$store.state.version,branch:row.branch,update_col:'is_show',update_data: row.show ? 1 : 0,}this.$api.projectSetting.editDiff(params,res=>{this.getDiffList()this.$message.success("修改成功")}).then(res => {this.getDiffList()}).catch(res => {this.getDiffList()})}},mounted () {this.getDiffList()this.$nextTick(() => {this.initSort()})}};</script><style lang="less" scoped>.defineSwitch {/deep/.el-switch.is-checked .el-switch__core {border-color: #467FF2 !important;background-color: #467FF2 !important;}/deep/.el-switch__core {margin: 0;position: relative;width: 55px !important;height: 20px;border: 1px solid #D0D0D0 !important;outline: 0;border-radius: 10px;-webkit-box-sizing: border-box;box-sizing: border-box;background: #D0D0D0 !important;-webkit-transition: border-color .3s,background-color .3s;transition: border-color .3s,background-color .3s;vertical-align: middle;}/deep/ .el-switch__core::before {content: "隐藏";position: absolute;top: -1px;right: 5px;color: #fff;}.is-checked /deep/ .el-switch__core::before {content: "显示 ";position: absolute;top: -1px;left: 5px;color: #fff;}}el-switch-demo{}::v-deep .el-table__body .el-table__row:nth-child(n) td {background-color: #fff !important;}.delete  /deep/ .el-dialog__body {padding: 13px 20px;color: #606266;font-size: 14px;word-break: break-all;border-top: 1px solid transparent; 
}/deep/ .el-message-box__title {padding-left: 0;margin-bottom: 0;font-size: 18px;line-height: 1;color: red;}.button-hover:hover{color:rgba(255, 99, 71, 1);background: #FFFFFF;border: 1px solid rgba(255, 99, 71, 1);}.show{background:rgba(70, 127, 242, 1);width: 50px;height: 20px;line-height: 50px;border-radius: 10px;}.not-show{background:rgba(208, 208, 208, 1);width: 50px;height: 20px;line-height: 50px;border-radius: 10px;}.show-title{color: #FFFFFF;font-size: 12px;padding: 0 2px 0 5px;  }.hidden{color: #FFFFFF;font-size: 12px;padding: 0 2px 0 5px;  }.circle{background: #FFFFFF;border-radius: 10px;width: 16px;height: 16px;}.diff-container{margin-top: 16px;}.suffix{background: rgba(70, 127, 242, 0.1);padding: 8px 8px;margin-right:10px;color: #467FF2;font-size: 14px;border-radius: 4px;}.el-icon-style{color: rgba(208, 208, 208, 1);font-size: 12px;&:hover{color:rgba(255, 99, 71, 1)}}.diff-button{/deep/ .el-button {border: 1px solid #467FF2;color: rgba(70, 127, 242, 1);&:hover{background: rgba(70, 127, 242, 0.1);}}}.warning-tip{font-size: 14px;/* 文字/次要文字#898989 */color: #898989;}</style>

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

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

相关文章

Linux | tar,bc,uname指令

Linux | tar&#xff0c;bc&#xff0c; 文章目录 Linux | tar&#xff0c;bc&#xff0c;tar指令【重要】bc指令uname –r指令 tar指令【重要】 tar [-cxtzjvf] 文件与目录 … 参数&#xff1a; -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b;-x &am…

为什么对中小企业来说,数字化转型很难?

引言 数字化转型对中小企业至关重要&#xff0c;然而&#xff0c;实施这一转型却充满挑战。中小企业面临着资源、技术、文化和安全方面的种种难题&#xff0c;这些困难限制了它们在数字化领域的发展和竞争力。这种挑战不仅影响企业内部运营&#xff0c;还直接影响其与客户和市…

中国的下一个风口:数字化!

——“中国的下一个风口是什么&#xff1f;数字化&#xff1f;你赞同吗&#xff1f;” ——“中国的下一个风口是不是‘数字化’&#xff0c;不敢妄下定论。” 但可以肯定的是&#xff0c;企业想站上未来产业的风口&#xff0c;“数字化”是必经之路。也就是说&#xff0c;数…

HarmonyOS 开发 Java 与 ArkTS 如何抉择?

本文详细分析 Java 与 ArkTS 在 HarmonyOS 开发过程的区别&#xff0c;力求解答学员的一些困惑。 何为 HarmonyOS&#xff1f; 在讨论语言的差异时&#xff0c;我们先了解下什么是 HarmonyOS。华为官方是这么解释 HarmonyOS 的&#xff1a; “鸿蒙操作系统”特指华为智能终端…

Java Scheduled定时任务(二)——开启多线程定时任务

我们在Java Scheduled定时任务中已经学到了如何开启定时任务&#xff0c;但却在同时开启多个定时任务的时候&#xff0c;遇到了新的问题&#xff0c;Scheduled定时任务是单线程的&#xff0c;无法满足同一个时间开启多个定时任务&#xff0c;因此&#xff0c;我们进行了如下调整…

视频集中存储/智能分析融合云平台EasyCVR平台接入rtsp,突然断流是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Halcon 机械视觉 使用仿射变换 机械手实现孔位定位

要推算机械手平面坐标系A与相机平面坐标系B的关系&#xff0c;我们可以首先找到两个平面坐标系之间的平移量和旋转量。 平移量&#xff1a;选择一个公共的参考点&#xff0c;比如某个标志物&#xff0c;假设在坐标系A中的坐标为(Ax, Ay)&#xff0c;在坐标系B中的坐标为(Bx, B…

GD32F303移植RT-Thread

我的平台&#xff1a; 芯片&#xff1a;GD32F303CCT6 编译器&#xff1a;KEIL5 一、下载keil专用 RT-Thread 安装包 https://www.keil.arm.com/packs/ 。。。。 。。。。 二、准备一个干净的GD32F303裸机工程&#xff0c;我就增加了串口功能 三、开始移植 1.rt-thread系统…

微信管理神器,一起看看能解决哪些问题?

对于很多公司的销售来说&#xff0c;最大的一个特点就是需要进行外出拜访客户&#xff0c;很多的时候&#xff0c;尤其是在出差或者是外出的时候&#xff0c;我们不能及时的回复客户消息&#xff0c;导致客户流失。 所以我们需要在手机上随时能管理我们的客户&#xff0c;并且第…

Java网络编程——非阻塞通信

对于用ServerSocket以及Socket编写的服务器程序和客户程序&#xff0c;它们在运行过程中常常会阻塞。例如当一个线程执行ServerSocket的accept()方法时&#xff0c;假如没有客户连接&#xff0c;该线程就会一直等到有了客户连接才从accept()方法返回。再例如当线程执行Socket的…

【Java 基础】08 面向对象

面向对象是一种程序设计范式&#xff0c;它以对象为中心&#xff0c;将数据和操作数据的方法组织在一起。 Java 正是一门面向对象的编程语言&#xff0c;它的设计理念强调代码的重用性、可维护性和可扩展性。 本文将简要介绍Java面向对象编程的基本概念和特性。 1. 对象和类…

使用 WITH 语句和临时表

文章目录 WITH 语句和临时表员工部门案例&#xff08;单个 WITH 查询&#xff09;建表&#xff1a;写入数据&#xff1a;使用WITH查询 扩展案例&#xff1a;员工、部门、薪水和级别&#xff08;多个 WITH 查询&#xff09;建表和插入数据&#xff1a;使用多个WITH查询 结语 WIT…

python入门级简易教程

Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创建。它是一种通用的、解释型的、高级的、动态的、面向对象的编程语言。 Python的编程哲学是简洁明了&#xff0c;强调代码的可读性和简洁性&#xff0c;使开发人员能够快速开发出正确的代码。Python被广泛用…

Chart 5 性能优化概述

文章目录 前言5.1 可移植性5.2 优化梗概5.3 OpenCL 移植的初始评估5.4 将CPU代码移植到OpenCL GPU5.5 并行化GPU和CPU工作负载5.6 瓶颈分析5.6.1 识别瓶颈5.6.2 解决瓶颈 5.7 API层面性能优化5.7.1 API函数调用的正确安排5.7.2 使用基于事件驱动的pipeline5.7.3 内核编译和构建…

2023-12-04 AIGC-Stable Diffusion和SadTalker-搭建及使用

摘要: 2023-12-04 AIGC-SadTalker-搭建及使用 代码仓库: https://github.com/Stability-AI/stablediffusion https://github.com/camenduru/stable-diffusion-webui-colab https://github.com/OpenTalker/SadTalker https://github.com/adofsauron/SadTalker-Video-Lip-Sync 文…

0基础学习云计算难吗?

很多人经常会问云计算是什么&#xff1f;云计算能干什么&#xff1f;学习云计算能做什么工作&#xff1f;其实我们有很多人并不知道云计算是什么&#xff0c;小知今天来给大家讲讲学习云计算能做什么。 中国的云计算行业目前正处于快速发展阶段&#xff0c;随着互联网和数字化…

人脸识别安卓主板_MTK方案智能闸机门禁工业安卓主板定制开发

人脸识别主板广泛应用于各个领域&#xff0c;包括人脸支付系统、人脸识别监控系统、写字楼办公楼门禁闸机、校园、地铁、住宅门禁、考勤机、智能门锁、广告机、售卖机等。 主板基于联发科MTK方案&#xff0c;并由行业PCBA和MTK的核心板组成。根据产品需求&#xff0c;可以选择…

7、类型转换构造、析构、深拷贝、类的静态成员

1、类型转换构造 |自定义转换 利用一个已定义的对象,来定义另一个不同类型的对象 实现从源类型到目标类型的隐式类型转换的目的 总结下已知构造&#xff0c;包括类型转换构造 如下&#xff0c;如果Person给Human赋值时&#xff0c;Person有私有变量&#xff0c;则需要在Pers…

浅聊JAVA开发下环境部署与使用工具的安装与部署

Java开发环境的部署涉及到安装Java Development Kit&#xff08;JDK&#xff09;、配置系统环境变量、选择一个集成开发环境&#xff08;IDE&#xff09;等步骤。以下是一般情况下的Java开发环境部署步骤&#xff1a; 安装Java Development Kit (JDK): 访问 Oracle JDK下载页面…

qt creator配置opencv库 (MSVC版本)

目录 1. MSVC版本 1.1 使用cmake编译opencv 1.2 再使用visual studio 2019生成opencv的lib,dll 1.3 配置opencv的系统环境变量 1.4 新建qt项目 1. MSVC版本 1.1 使用cmake编译opencv 1.2 再使用visual studio 2019生成opencv的lib,dll 1.3 配置opencv的系统环境变量 D:…