效果要求

先看需求效果:

多个数据授权项,配置的时候,业务名称大多数都是一样的,需要合并单元格处理

在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】单元格合并,与动态校验的更多相关文章

  1. NG-ZORRO + angular-cli11 表格横纵向单元格合并,按需设置背景色,解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题,也适用VUE,REACT

    NG-ZORRO + angular-cli11 实现表格横纵向单元格合并,按需设置背景色,并解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题 HTML代码 <!-- 1. ...

  2. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

  3. NPOI 教程 - 2.1单元格合并

    来源:http://liyingchun343333.blog.163.com/blog/static/3579731620091018212990/ 合并单元格在制作表格时很有用,比如说表格的标题就 ...

  4. asp.net使用控件datagrid实现表头单元格合并

    合并的要点: 1.datagid的单元格合并原理是table中tr,td的布局实现; 2.合并的时机实在其datagridcreate事件中实现; 3.认识一个对象TableCellCollectio ...

  5. DataGridView单元格合并

    本文章转载:http://www.cnblogs.com/xiaofengfeng/p/3382094.html 图: 代码就是如此简单 文件下载:DataGridView单元格合并源码 也可以参考: ...

  6. devexpress实现单元格合并以及依据条件合并单元格

    1.devexpress实现单元格合并非常的简单,只要设置属性[AllowCellMerge=True]就可以了,实现效果如下图: 2.但是在具体要求中并非需要所有的相同单元格都合并,可能需要其他的条 ...

  7. SNF快速开发平台MVC-表格单元格合并组件

    1.   表格单元格合并组件 1.1.      效果展示 1.1.1.    页面展现表格合并单元格 图 4.1 1.1.2.    导出excel合并单元格 图 4.2 1.2.      调用说 ...

  8. 关于table动态添加数据 单元格合并 数组合并

    var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName&qu ...

  9. excel技巧--单元格合并与拆分

    如果要将上图的地区列做成下图的合并单一列: 有如下做法: (以下图表格为例) 1.选择要排序的表格,点击“开始”-->排序和筛选-->自定义排序.在对话框选择“业务项目”进行排序: 2.选 ...

  10. element-ui table 最后一行合计,单元格合并

    接着写两个方法--最后一行合计的方法 --单元格合并的方法 先写一个rowspan方法,计算出spanArr数组是怎么单元格合并的,注意rowspan方法要在渲染完成之前使用,可以在mounted中使 ...

随机推荐

  1. itest(爱测试) 紧急 BUG 修复版(4.5.6)发布,,开源BUG 跟踪管理 & 敏捷测试管理&极简项目管理软件

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理4合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代(含任务, ...

  2. Java中类的构造 与 方法的重载

    类的构造方法 定义:构造方法与类名相同,且没有返回值,且不需要void修饰 Car bmcar = new Car(); 特点:类中没有定义时,会默认有一个无参的构造方法,在无参的构造方法中为成员变量 ...

  3. Git简介以及下载安装和配置

    什么是版本控制? ​ 版本控制是指对软件开发过程中各种程序代码,控制文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一 ​ 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了 ...

  4. 阿里云ECS后台CPU占用100%,top却找不到

    上周公司阿里云服务器后台报警,CPU占用瞬间飙升到100%: 首先想到使用top命令查询CPU占用详情: 发现进程占用CPU都比较低,在CPU占用一栏发现只有ni的占用比较高. 先了解一下CPU相关监 ...

  5. Java线程池maximumPoolSize和workQueue哪个先饱和?

    先说结论,真正的饱和顺序是corePoolSize -> workQueue -> maximumPoolSize. 我们都知道,线程池有以下参数 ThreadPoolExecutor(i ...

  6. python logging日志没有写入到指定文件,写到其他项目的日志文件

    背景: 项目A为主框架项目,使用到了项目B的方法 项目A.B均有封装好的日志方法,且均在封装好的日志文件里面,增加了logger = MyLogger().info,其他文件要使用日志时,引入logg ...

  7. iOS11之后刷新tableview会出现漂移的现象解决办法

    首先要注意这只是在iOS11下会出现的bug,如果iOS10以及以下也有问题的情况不属于此列 问题的动图如下所示,如果要做每隔一段短时间就刷新一个section甚至整个tableview的操作的时候会 ...

  8. python 第一次主要是if while 奇偶数的练习

    例如输出1-10的数字,但是7除外. a=1 while a < 11: if a == 7: pass else: print(a) a=a+1 输出1-100所以的偶数 a=1 while ...

  9. Java实现管线拓扑关系连通性分析

    管线拓扑关系的连通性分析通常涉及图论(Graph Theory)中的概念,特别是无向图(Undirected Graph)的遍历算法,如深度优先搜索(DFS, Depth-First Search)或 ...

  10. 基于人类反馈的强化学习,Reinforcement Learning from Human Feedback (RLHF)

    基于人类反馈的强化学习, RLHF,转载参考链接 RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,可以按三个步骤分解: 预训练一个语言模型 (LM) : 聚合问答数据并训练一个奖励模型 (Rew ...