位置: IT常识 - 正文

element-ui表格自定义动态列(element-ui 表格)

编辑:rootadmin
element-ui表格自定义动态列 element-ui表格自定义动态列实现效果

推荐整理分享element-ui表格自定义动态列(element-ui 表格),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:elementui表格自己写合计行,elementui表格自己写合计行,elementui表格自定义表头,elementui表格自定义列,elementui表格自定义排序,elementui表格自定义列,elementui表格自定义列,elementui表格自定义列,内容如对您有帮助,希望把文章链接给更多的朋友!

element-ui表格自定义动态列(element-ui 表格)

具体功能拖拽表头改变宽度限制最小宽度, 实时保存设置。隐藏列选中列隐藏, 不显示在表格中。“勾选” 列和"操作" 列不可隐藏, 并且不包含在列控制组件中。隐藏后, 无论是否冻结均不显示。有特殊标识则要另外做判断。列冻结开启时, 表示选中列靠左冻结。只有"操作" 列允许靠右冻结且禁止更改。列按照冻结>不冻结的顺序动态排序。列拖动排序拖动结束按照冻结>不冻结的顺序自动排序。恢复默认配置恢复表格的默认配置, 清除用户的自定义设置。保存只有保存后用户的相关设置才会生效(包含隐藏列, 列冻结和列拖动排序)。取消不保存用户的相关设置(包含隐藏列, 列冻结和列拖动排序)。实现原理相关数据格式// 利用当前页面路由name值当作唯一标识, 存储到数据库中pathSign: 'DataGnGoodsReport'// 表头数据格式[{"isFixed": "false","isSortable": false,"label": "所属部门","minWidth": 108,"show": true,"specialMask": "isStoreSp",// 特殊标识, 可用于该特殊标识和show 双层判断隐藏该列, 需要做字符串转变量的处理"value": "departId",// 值标识"width": 108}]页面配置// 页面Table<el-table border// 边框 row-key="id" :data="tableDataFormat" :row-style="{'height': '100%'}" @sort-change="sortChange"// 排序方法 @header-dragend="headerDragend"// 表头拖拽方法>// 根据表头数组动态渲染数据<template v-for="(item, index) in renderArr"> <el-table-column v-if="item.specialMask ? item.show && strToVariable(item.specialMask) : item.show"// 是否显示 :key="index" resizable :prop="item.value"// 列的值 :label="item.label"// 表头文案 :min-width="item.minWidth"// 最小宽度 :width="item.width"// 宽度 :fixed="item.isFixed === 'false' ? false : item.isFixed"// 是否冻结 :align="item.align || 'center'"// 文本对齐方式 :sortable="item.isSortable && 'custom'"// 当前列是否可排序(升降序) > <template #default="{row}">/* 根据显示类型不同, 做不同处理 */ <span v-if="item.value == name">{{ row[item.value] }}</span> ...... </template> </el-table-column></template></el-table>// 引入列控制组件<column-control ref="columnControl" :visible.sync="columnControlDialogVisible" :render-arr.sync="renderArr" @save="saveRenderArr" />拖拽表头改变宽度

鼠标悬浮在表头上方才显示右边框

.table-container >>> .el-table--border th{  border-right: none;}.table-container >>> .el-table__header th:hover {  border-right: 1px solid #939599;}.table-container >>> .el-table--border td{  border: 0!important;}

表头拖拽

// 表头拖拽, 使用表格header-dragend钩子完成headerDragend(newWidth, oldWidth, column, event) { const item = this.renderArr.find(item => item.label === column.label) // 取最小宽度 if (newWidth <= item.minWidth) { column.width = item.minWidth } else { item.width = parseInt(column.width) } // 保存配置 this.saveRenderArr(this.renderArr)},列控制组件封装

HTML

<template> <el-dialog title="列控制" :visible.sync="visible" width="60%" top="4vh" :before-close="handleColumnControl" > <div class="table-column"> <el-table ref="columnTable" row-key="label" :data="renderArrCopy" height="70vh" :row-style="{'height': '100%'}" > <el-table-column label="#" type="index" width="50" /> <el-table-column prop="label" label="列名" /> <el-table-column prop="show" label="隐藏列" > <template slot-scope="{row}"> // 隐藏值取反判断 <el-switch v-model="row.show" :active-value="false" :inactive-value="true" /> </template> </el-table-column> <el-table-column prop="show" label="列冻结" > <template slot-scope="{row}"> <el-select v-model="row.isFixed" placeholder="请选择" :disabled="row.value === 'action'" @change="sortRenderArr"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </template> </el-table-column> <el-table-column label="拖动排序" align="center" > <svg-icon icon-class="drag2" class="drag-icon move" /> </el-table-column> </el-table> </div> <div class="submit-box"> <el-button @click="handleColumnControl">取消</el-button> <el-button type="primary" @click="save">保存</el-button> </div> <div class="default-box" @click="restoreDefault">恢复出厂设置</div> <div class="tips">表格列根据 冻结>不冻结 的顺序排序</div> </el-dialog></template>

JS

<script>import Sortable from 'sortablejs'import { deepClone } from '@/utils/index'export default { name: 'ColumnControl', props: { visible: { type: Boolean, default: false }, renderArr: { type: Array, default: function() { return [] } } }, data() { return { options: [ { value: 'left', label: '冻结' }, { value: 'false', label: '不冻结' } ], renderArrCopy: []// 拷贝的表头数据 } }, computed: { }, watch: { visible: function(newVal, oldVal) { newVal && this.rowDrop() this.deepClone() } }, methods: { // 深拷贝 deepClone() { // 组件内部表头数据和页面表头数据分离 this.renderArrCopy = deepClone(this.renderArr) }, // 列拖动排序 rowDrop() { this.$nextTick(() => { // 要侦听拖拽响应的DOM对象 const tbody = document.querySelector('.table-column .el-table__body-wrapper .el-table__body tbody') const _this = this Sortable.create(tbody, { animation: 20, // 结束拖拽后的回调函数 onEnd({ newIndex, oldIndex }) { const currRow = _this.renderArrCopy.splice(oldIndex, 1)[0] _this.renderArrCopy.splice(newIndex, 0, currRow) const timer = setTimeout(() => { _this.sortRenderArr() clearTimeout(timer) }, 0) } }) // 删除最后一项操作('操作' 列项不显示在该组件中。因数据上需要保留该项, 所以不可采用删除数据的方法来达到该效果, 只能从页面渲染做隐藏处理) const lastIndex = this.renderArrCopy.length - 1 if (this.renderArrCopy[lastIndex].label === '操作') { // 获取'操作'项的那一行并删除 const rows = document.querySelectorAll('.table-column .el-table__row') // 类数组转为数组 Array.from(rows).forEach((item, index) => { index === lastIndex && item.remove() }) } }) }, // 按冻结 > 不冻结排序 sortRenderArr() { this.renderArrCopy.sort((star, next) => { const arr = ['left', 'false'] return arr.indexOf(star.isFixed) - arr.indexOf(next.isFixed) }) }, // 取消 handleColumnControl() { this.$emit('update:visible', false) }, // 保存 async save() { this.$emit('update:renderArr', this.renderArrCopy) this.handleColumnControl() this.$emit('save', this.renderArrCopy) }, // 恢复默认配置 restoreDefault() { this.$emit('save', []) } }} </script>全局方法import { getRenderArr, saveRenderArr } from '@/api/common'export const columnControlMixin = { data() { return { renderArr: [], // 动态列表头数组 columnControlDialogVisible: false, // 动态列组件显示设置 } }, computed: { // 字符串转变量 strToVariable() { return function(text) { return this[text] } } }, created() { // 获取表头数据 this.getRenderArr() }, methods: { // 表头拖拽 headerDragend(newWidth, oldWidth, column, event) { const item = this.renderArr.find(item => item.label === column.label) if (newWidth <= item.minWidth) { column.width = item.minWidth } else { item.width = parseInt(column.width) } this.saveRenderArr(this.renderArr) }, // 根据name值获取表头数据 async getRenderArr() { try { const res = await getRenderArr({ pathSign: this.$route.name }) if (res.code === 200) { this.renderArr = res?.data } } catch (error) { console.log(error) } }, // 保存页面表头数据和重置 async saveRenderArr(arr) { try { await saveRenderArr({ pathSign: this.$route.name, content: arr || [] }) if (!arr.length) { await this.getRenderArr() // 列控制组件重新拷贝数据 await this.$refs.columnControl.deepClone() this.$message({ message: '恢复出厂设置成功', type: 'success' }) } } catch (error) { console.log(error) } } }}
本文链接地址:https://www.jiuchutong.com/zhishi/298573.html 转载请保留说明!

上一篇:D435i相机的标定及VINS-Fusion config文件修改(最详细、最完整的相机标定讲解)

下一篇:浏览器隐藏滚动条(不影响内容滚动)(ie浏览器网页滚动条怎么隐藏)

  • 腾讯微视能进行直播吗(微视里的腾讯视频会员怎么用)

    腾讯微视能进行直播吗(微视里的腾讯视频会员怎么用)

  • 荣耀x10可以插内存卡吗(荣耀x10可以插卡吗)

    荣耀x10可以插内存卡吗(荣耀x10可以插卡吗)

  • 苹果11刷新率(苹果11刷新率是多少Hz)

    苹果11刷新率(苹果11刷新率是多少Hz)

  • 苹果8p如何设置门卡(苹果8p如何设置灵动岛)

    苹果8p如何设置门卡(苹果8p如何设置灵动岛)

  • 微信吐舌头表情怎么打(微信吐舌头表情是哪个)

    微信吐舌头表情怎么打(微信吐舌头表情是哪个)

  • 换手机号绑定软件太多(换手机号绑定软件安全吗)

    换手机号绑定软件太多(换手机号绑定软件安全吗)

  • 华为nova7se什么屏幕(华为nova7se什么时候升级鸿蒙3)

    华为nova7se什么屏幕(华为nova7se什么时候升级鸿蒙3)

  • 苹果手机系统触感反馈是什么意思(苹果手机系统触感反馈怎么不能用了)

    苹果手机系统触感反馈是什么意思(苹果手机系统触感反馈怎么不能用了)

  • 奔腾e6500相当于i几(奔腾e6700相当于i几)

    奔腾e6500相当于i几(奔腾e6700相当于i几)

  • 安卓typec接口是什么(安卓的typec)

    安卓typec接口是什么(安卓的typec)

  • 苹果手机能插几张卡(苹果手机能插几张电信卡)

    苹果手机能插几张卡(苹果手机能插几张电信卡)

  • 电脑cad怎么下载安装(cad下载电脑版免费下载)

    电脑cad怎么下载安装(cad下载电脑版免费下载)

  • 华为字幕功能有什么用(华为字幕开启后怎么用)

    华为字幕功能有什么用(华为字幕开启后怎么用)

  • 微信清理的照片怎么恢复(微信清理的照片怎么看)

    微信清理的照片怎么恢复(微信清理的照片怎么看)

  • 4g独显和8g独显的区别(4g和4g独显)

    4g独显和8g独显的区别(4g和4g独显)

  • 实时单什么意思(花小猪实时单什么意思)

    实时单什么意思(花小猪实时单什么意思)

  • 抖音怎么找逗拍(抖音逗拍在哪里,怎么找不到呢?)

    抖音怎么找逗拍(抖音逗拍在哪里,怎么找不到呢?)

  • 退群后发的消息还在吗(退群后发的消息能撤回吗)

    退群后发的消息还在吗(退群后发的消息能撤回吗)

  • 手机怎么制作文字图片(手机怎么制作文字图片教程)

    手机怎么制作文字图片(手机怎么制作文字图片教程)

  • vue怎么添加手机音乐(vue怎么添加手机里的音乐)

    vue怎么添加手机音乐(vue怎么添加手机里的音乐)

  • 华为荣耀9x有耳机吗(华为荣耀9x耳机设置在哪?)

    华为荣耀9x有耳机吗(华为荣耀9x耳机设置在哪?)

  • 支付宝充话费显示暂不支持此号码(支付宝充话费显示备货中)

    支付宝充话费显示暂不支持此号码(支付宝充话费显示备货中)

  • 手机怎样拉黑一个网址(手机如何拉黑)

    手机怎样拉黑一个网址(手机如何拉黑)

  • 网页标签字体怎么更改(网页标签格式)

    网页标签字体怎么更改(网页标签格式)

  • 华为praal00x什么型号(华为praal00什么型号)

    华为praal00x什么型号(华为praal00什么型号)

  • 苹果x玩游戏卡怎么解决(苹果x玩游戏卡顿掉帧)

    苹果x玩游戏卡怎么解决(苹果x玩游戏卡顿掉帧)

  • 荣耀20出厂自带钢化膜吗(荣耀出厂自带的膜怎么样)

    荣耀20出厂自带钢化膜吗(荣耀出厂自带的膜怎么样)

  • 如何制作视频封面(如何制作视频封面教程)

    如何制作视频封面(如何制作视频封面教程)

  • java事件处理机制的组件(java事件处理机制三个重要概念)

    java事件处理机制的组件(java事件处理机制三个重要概念)

  • 公司不开票要交工会经费吗
  • 注册资本没有到位可以注销吗
  • 缴纳购销合同印花税怎么算
  • 增值税专票如何作废
  • etc开增值税票税率
  • 劳保用品发放制度文件
  • 凭证附件的粘法
  • 国税地税电子钥匙价格
  • 企业收到利息发票怎么做分录
  • 企业开出的普票和专票对税额有影响吗
  • 基本医疗保险基金与生育保险基金
  • 收到的货款与发票数不符,怎么做账
  • 银行收回贷款本息企业怎么做分录
  • 管理费用中的五项费用
  • 收的标书收入增值税多少
  • 开具红字专用发票的情形
  • 汽车维修单位提成比例
  • 应付职工薪酬包括公积金吗
  • 现金流量表附表的其他指的是什么
  • 个人所得税成本费用怎么算
  • 预付卡发给员工如何入账
  • 资产负债率如何评价
  • 合伙企业需要交哪些税
  • 上海个人所得税计算器
  • php扩展编写
  • 不征税收入如何记账
  • 最早的拍照手机是哪一年
  • 其他货币资金明细账填写样本
  • 调整以前年度管理费用会计分录
  • anaconda的虚拟环境的作用
  • Vue Admin Template关闭eslint校验,lintOnSave:false设置无效解决办法
  • java项目中redis使用实例
  • ChatGLM-6B (介绍以及本地部署)
  • 应交税费为负数在资产负债表里怎么填
  • 企业所得税年报滞纳金从哪天开始算
  • 税前扣除是什么时候
  • 通过MySQL日志实时查看执行语句以及更新日志的教程
  • 织梦生成出现500
  • 软件企业主营业务活动说明范文
  • 发票上的货物要怎么填?
  • 公司充话费
  • 食堂的帐怎么做
  • 抵押贷款评估费自己出吗
  • 不需要计提折旧的情况
  • 电影赠票怎么用
  • 开票未收到款会计分录
  • 发票怎么跨月作废申请
  • 国家规定房屋买卖中介费
  • 在网上订机票怎么订
  • 稳岗补贴如何入账
  • 其他综合收益属于什么科目借贷方向
  • mysql读写分离实现原理
  • mybatis报错invalid bound statement
  • sql2005 存储过程 某个字段小于某个值时变颜色
  • win10禁用windows键
  • win7怎么删除桌面图标
  • windows防病毒
  • Windows Server 2008故障转移群集简介
  • issch.exe
  • vmmem进程是什么
  • windows自带软件有哪些
  • 怎么从win8装回win7
  • window10的ie
  • cocos2d-x2.2.3和android平台环境的搭建
  • 给网页添加javascript
  • cocos2dx4.0入门
  • cocos html
  • javascript create
  • jquery左滑切换
  • 第四章之BootStrap表单与图片
  • 安卓手机wifi界面
  • shell判断文件
  • 批处理列出文件名
  • nodejs实现HTTPS发起POST请求
  • javascript canvas方法有哪些
  • 安卓手机管家怎么关闭
  • 三分钟带你玩转灭火器
  • jquery数组的方法
  • android 获取手机屏幕截图
  • 亏损可以结转吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设