效果要求

先看需求效果:

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

在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. ansible搭建

    ansible配置步骤 1.创建用户 2.用户提权 3.用户免密 4.cp ansible配置文件 5.配置主机清单 6.修改ansible 用户路径下的配置文件 1.创建用户(都要做) [root@ ...

  2. Grafana监控系统的构建与实践

    本文深入探讨了Grafana的核心技术.数据源集成.仪表盘与可视化构建以及监控与告警配置,旨在为专业从业者提供全面的Grafana技术指南. 关注[TechLeadCloud],分享互联网架构.云服务 ...

  3. Redux之combineReducers方法

    Redux 提供了一个combineReducers方法,用于 Reducer 的拆分.你只要定义各个子 Reducer 函数,然后用这个方法,将它们合成一个大的 Reducer. import { ...

  4. Cage 字符串听课笔记

    困困困! KMP 注意到 KMP 的复杂度是均摊的,那么是否可以绕开? 注意到 KMP 实际上一个串的 ACAM,那么考虑可以类似的,在加入一个字符的同时维护 ACAM(考虑 ACAM 的构建过程,前 ...

  5. kettle从入门到精通 第五十六课 ETL之kettle Microsoft Excel Output

    1.9.4 版本的kettle中有两个Excel输出,Excel输出和Microsoft Excel输出.前者只支持xls格式,后者支持xls和xlsx两种格式,本节课主要讲解步骤Microsoft ...

  6. CF1777E

    problem & blog 反转的边最大权值最小,想到二分. 于是二分代价即可. 反转代价小于二分的代价的边可以反转,所以再建一条反向边即可. 在 DAG 中,存在一个点可以到达所有的点的条 ...

  7. flutter 调用环信sdk 实现即时通讯

    首先下载依赖 导包 import 'package:im_flutter_sdk/im_flutter_sdk.dart';登录 import 'package:flutter/material.da ...

  8. hibernate映射对照表

    2.3. Basic Types Basic value types usually map a single database column, to a single, non-aggregated ...

  9. Python中multiprocessing.Pool进程池实现守护进程的方法

    前言 在multiprocessing.Process中可以使用p.daemon=True将子进程p设置为守护进程. 那么在multiprocessing.Pool进程池中怎么实现这个功能呢? 什么是 ...

  10. Linux安全审计之audit安装与使用

    场景 安全最重要的一步是内部安全,如何监控用户的行为是一个永恒不变的话题. audit可以详细监控用户的行为,详细到查看或修改了某个文件.这些都可以在日志中查看到. 安装 小贴士: CentOS默认已 ...