【Vue】单元格合并,与动态校验
效果要求
先看需求效果:
多个数据授权项,配置的时候,业务名称大多数都是一样的,需要合并单元格处理

在elementUI组件文档中有说明[合并列行]:
https://element.eleme.io/#/zh-CN/component/table
实际解决办法参考的是:
https://www.jianshu.com/p/67fab89b4c55
代码实现:
1、准备合并行计算变量:
spanArr: [],
spanIdx: 0,
2、接口初始化表格数据时先计算合并的数值:
async initialUsableGrantItems() {
/* 每次加载重置合并行计算 */
this.spanArr = []
this.spanIdx = 0
this.role.corpList = [{ id: this.role.sysArCoId }]
const { data: tableData } = await listOptionalGrantItems(this.role)
tableData.forEach((row, idx) => {
if (this.isDtmDrVal(row) || this.isKeyDrVal(row)) row.drValue = JSON.parse(row.drValue)
/* 动态合并列 执行计算 */
if (idx === 0) {
this.spanArr.push(1)
this.spanIdx = 0
} else {
// 判断当前元素与上一个元素是否相同 ,accountType是我后台返回的标识符
if (row.drServIdent === tableData[idx - 1].drServIdent) {
this.spanArr[this.spanIdx] += 1
this.spanArr.push(0)
} else {
this.spanArr.push(1)
this.spanIdx = idx
}
}
})
this.form.tableData = tableData
},
3、表格组件声明合并的方法实现:
<el-table :span-method="arraySpanMethod" ... />
4、合并方法:
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 2) {
const _row = this.spanArr[rowIndex]
const _col = 1
console.log(`rowspan:${_row} colspan:${_col}`)
return {
// [0,0] 表示这一行不显示, [2,1]表示行的合并数
rowspan: _row,
colspan: _col
}
}
},
表格表单,勾选行动态校验
动态校验勾选行是否填充了数值,没有勾选的行不需要校验

思路时,提供一个空的rules对象,在勾选时为勾选行添加校验对象
取消勾选时删除这个勾选行的校验对象
1、绑定表格的勾选事件函数
<el-table ... @selection-change="handleSelectChange">
2、勾选事件触发,每次都要遍历比较
handleSelectChange(val) {
const fullArr = this.form.tableData
if (val.length !== 0) {
for (let i = 0; i < fullArr.length; i++) {
delete fullArr[i].drValRule
delete fullArr[i].dtmRule
for (let j = 0; j < val.length; j++) {
if (i === fullArr.indexOf(val[j])) {
/* DTM类型需要单独设置校验对象 */
if (val[j].drType === 'DTM') {
this.$set(fullArr[i], 'dtmRule', this.dtmRule)
} else {
this.$set(fullArr[i], 'drValRule', JSON.parse(JSON.stringify(this.drValRule)))
}
break
}
}
}
} else {
/* 没有选中的记录,清除每行的校验 */
for (let i = 0; i < fullArr.length; i++) {
delete fullArr[i].drValRule
delete fullArr[i].dtmRule
}
}
this.checkedRows = val
},
3、普通值的校验对象:
drValRule: [
{ required: true, message: '请选择数据值', trigger: ['blur', 'change'] }
],
4、两个选择日期的校验对象:
dtmRule: [
{ validator: dtmValCheck, trigger: ['blur', 'change'] }
] /* 校验方法, 判断是不是选择数组中的value都是空的 */
const dtmValCheck = (rule, value, callback) => {
const isAllEmpty = value.every(timeStr => !timeStr)
if (isAllEmpty) {
callback(new Error('至少选择一项[限制日期]'))
} else {
callback()
}
}
【Vue】单元格合并,与动态校验的更多相关文章
- NG-ZORRO + angular-cli11 表格横纵向单元格合并,按需设置背景色,解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题,也适用VUE,REACT
NG-ZORRO + angular-cli11 实现表格横纵向单元格合并,按需设置背景色,并解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题 HTML代码 <!-- 1. ...
- ExtJS 4.2 Grid组件的单元格合并
ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...
- NPOI 教程 - 2.1单元格合并
来源:http://liyingchun343333.blog.163.com/blog/static/3579731620091018212990/ 合并单元格在制作表格时很有用,比如说表格的标题就 ...
- asp.net使用控件datagrid实现表头单元格合并
合并的要点: 1.datagid的单元格合并原理是table中tr,td的布局实现; 2.合并的时机实在其datagridcreate事件中实现; 3.认识一个对象TableCellCollectio ...
- DataGridView单元格合并
本文章转载:http://www.cnblogs.com/xiaofengfeng/p/3382094.html 图: 代码就是如此简单 文件下载:DataGridView单元格合并源码 也可以参考: ...
- devexpress实现单元格合并以及依据条件合并单元格
1.devexpress实现单元格合并非常的简单,只要设置属性[AllowCellMerge=True]就可以了,实现效果如下图: 2.但是在具体要求中并非需要所有的相同单元格都合并,可能需要其他的条 ...
- SNF快速开发平台MVC-表格单元格合并组件
1. 表格单元格合并组件 1.1. 效果展示 1.1.1. 页面展现表格合并单元格 图 4.1 1.1.2. 导出excel合并单元格 图 4.2 1.2. 调用说 ...
- 关于table动态添加数据 单元格合并 数组合并
var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName&qu ...
- excel技巧--单元格合并与拆分
如果要将上图的地区列做成下图的合并单一列: 有如下做法: (以下图表格为例) 1.选择要排序的表格,点击“开始”-->排序和筛选-->自定义排序.在对话框选择“业务项目”进行排序: 2.选 ...
- element-ui table 最后一行合计,单元格合并
接着写两个方法--最后一行合计的方法 --单元格合并的方法 先写一个rowspan方法,计算出spanArr数组是怎么单元格合并的,注意rowspan方法要在渲染完成之前使用,可以在mounted中使 ...
随机推荐
- MyBatis实现MySQL表字段及结构的自动增删
前言 在开发过程中,总会涉及到数据库表结构字段的增加或者删除,或者是索引的增加和减少,这个时候能把修改表结构字段这些工作都交给程序来进行,那能大大方便开发.正好有一个现成的工具可以在springboo ...
- == 和 equals 的区别是什么
== : 它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象.(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址) equals() : 它的作用也是判断两个 ...
- 计算机网络实验一:vlan的创建与划分
这个是 pkt文件 有两道题 所以我是两个文件 https://pan.quark.cn/s/d4170897cb59 https://pan.quark.cn/s/da48878c77f5 发现 复 ...
- mongodb连接类
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.cl ...
- JSON文件存储
JSON 文件存储 JSON,全称为 JavaScript Object Notation, 也就是 JavaScript 对象标记,通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一 ...
- VUE CLI中使用Jquery无法获取到dom节点
mounted 类型:Function 详细: 实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了.如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文 ...
- FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架,可用于RTMP直播和RTSP直播,其升级版还支持SRT直播(腾讯视频云就采用SRT协议).RTMP Streamer支持的视频编 ...
- Centos编译加载toa模块
什么是toa模块 toa模块是为了让后端的realserver能够看到真实的clientip而不是lvs的dip 安装步骤 安装依赖包 yum -y install kernel-devel gcc ...
- C++获取商店应用(msix应用)桌面快捷方式的安装目录
传统应用的快捷方式目标指向可执行文件的路径,但是对于商店应用(也叫msix打包应用),则指向一个奇怪的字符串,使用IShellLink::GetPath获取路径时,则得到的是空字符串,而我们的最终目的 ...
- 图最短路径之BellmanFord
Bellman–Ford Algorithm 算法参考地址:Bellman–Ford Algorithm | DP-23 - GeeksforGeeks 算法的简介 在图中给定一个图形和一个源顶点 s ...