首页 > 其他分享 >【Vue】单元格合并,与动态校验

【Vue】单元格合并,与动态校验

时间:2022-12-09 14:58:08浏览次数:34  
标签:Vue const val spanArr 单元格 校验 row fullArr

 

效果要求

先看需求效果:

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

 

 

在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,const,val,spanArr,单元格,校验,row,fullArr
From: https://www.cnblogs.com/mindzone/p/16968899.html

相关文章

  • vue-router路由
    安装先查看node_modules中是否存在vue-routervue-router是一个插件包,所以我们还是需要用npm/cnpm来进行安装的,在第一个vue-cli文件下输入以下命令npminstallvue-route......
  • vue fullcalendar日历拖拽插入整理
    <!--交易时间管理--><template><divclass="container"><Row><Colspan="6"><divclass="module-title">假期列表</div><divclass="......
  • bootstrap列表页展示合并单元格
    bootstrap列表页展示合并单元格​​页面展示效果​​​​页面代码​​页面展示效果页面代码$(function(){varoptions={url:prefix+"/li......
  • vue3 使用vue3-video-play
    1.安装版本"vue3-video-play":"^1.3.1-beta.6",2.在main.ts中进行组件注册import{createApp}from'vue'importAntdfrom'ant-design-vue'importAppfrom'......
  • vue之vue-router路由
    vue-router简介:VueRouter是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:嵌套的路由/视图表模块化的、基于组件的路......
  • vue之element-ui
    注意:命令行都要使用管理员模式运行第一步:创建vue工程下面处理项目,创建安装依赖等,都是在命令行进行处理。创建一个工程(vue)vueinitwebpackvue安装依赖,我们需要安装vue-ro......
  • vue3 Vuex使用
    首先src下要有src\store\index.jsindex.js先引入creatStoreimport{createStore}from'vuex'exportdefaultcreateStore({state(){return{......
  • 基于Python+Django+Vue+MYSQL的社团管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Avue 在table表中悬浮显示数据
      <templateslot-scope="scope"slot="details"><el-popovertrigger="hover"placement="top"><!--客户名称、原数据、更新后数据-......
  • 原生开发小程序 和 wepy 、 mpvue 对比
    1.三者的开发文档以及介绍:原生开发小程序文档:​​点此进入​​​ wepy开发文档:​​​点此进入​​​ mpvue开发文档:​​​点此进入​​2.三者的简单对比:以下用一张图来......