首页 > 其他分享 >vue3.0 el-table 动态合并单元格

vue3.0 el-table 动态合并单元格

时间:2023-09-05 16:44:40浏览次数:44  
标签:el 支行 金谷 单元格 合并 汉峪 inventoryStatus vue3.0 branchName

<el-table 
        v-resize:34 style="margin: 10px 0 10px" :data="tableData"     
        :header-cell-style="{background: '#F6F6F6', height: '10px','text-align':'center'}"
        :span-method="objectSpanMethod">
        <el-table-column type="index" label="NO." width="55" />
          <el-table-column prop="branchName" label="网点名称" align="center" />
          <el-table-column prop="boxName" label="款箱名称" align="center" />
          <el-table-column prop="isEmpty" label="是否空箱" align="center" />
          <el-table-column prop="inventoryStatus" label="盘点状态" align="center"/>
          <el-table-column label="操作" align="center" fixed="right" width='100px'>
            <template #default="scope">
              <el-button-group>
                <el-button link type="danger" title="删除" :icon="Delete" @click="handleDelete(scope.row.id)"/>
              </el-button-group>
            </template>
          </el-table-column>
      </el-table>

2、方法

// 给列表赋值
const tableData = [
  {
    branchName: '舜泰支行',
    boxName: '舜泰支行一号箱',
    isEmpty: '是',
    inventoryStatus:'有交接未盘点'
  },
  {
    branchName: '舜泰支行',
    boxName: '舜泰支行二号箱',
    isEmpty: '是',
    inventoryStatus:'有交接未盘点'
  },
  {
    branchName: '舜泰支行',
    boxName: '舜泰支行三号箱',
    isEmpty: '否',
    inventoryStatus:'有交接未盘点'
  },
  {
    branchName: '汉峪金谷支行',
    boxName: '汉峪金谷一号箱',
    isEmpty: '否',
    inventoryStatus:'无交接'
  },
   {
    branchName: '汉峪金谷支行',
    boxName:'汉峪金谷二号箱',
    isEmpty: '是',
    inventoryStatus:'有交接未盘点'
  },
  {
    branchName: '汉峪金谷支行',
    boxName: '汉峪金谷三号箱',
    isEmpty: '是',
    inventoryStatus:'有交接未盘点'
  },
  {
    branchName: '汉峪金谷支行',
    boxName: '汉峪金谷四号箱',
    isEmpty: '否',
    inventoryStatus:'有交接已盘点'
  },
]
// 正常应该是获得后台数据之后调用setTableRowSpan()方法
onMounted(()=>{
  // 需要合并的字段名,按照合并登记来排序
  const colFields=['branchName']
  // 表格数据,表格字段
  setTableRowSpan(tableData,colFields)
})

// 设置合并的行和列
const setTableRowSpan = (tableData:any,colFields:any) =>{
  let lastItem:any = []
  // 循环需要合并的列
  colFields.forEach((field:any, index:any) =>{
    tableData.forEach((item:any) =>{
      // 存值,把合并字段存入行,为了合并单元格时检索列是否含有该字段
      item.mergeCell = colFields
      // 合并的字段出现的次数
      const rowSpan = `rowspan_${field}`
      // 比较上一次的存值和该轮的合并字段,判断是否合并到上个单元格
      if( colFields.slice(0,index + 1).every(e =>lastItem[e] === item[e] )){
          // 如果是,合并行;
          item[rowSpan] = 0 // 该轮合并字段数量存0
          // 上轮合并字段数量+1
          lastItem[rowSpan] +=1
      }else{
          //初始化进入&& 如果不是,完成一次同类合并,lastItem重新赋值,进入下一次计算
          item[rowSpan] = 1 // 该轮合并字段第一次出现,数量存1
          // 改变比较对象,重新赋值,进行下一次计算
          lastItem = item
      }
    })
  })
}
// 列表合并单元格发方法
const objectSpanMethod = ({row, column, rowIndex, columnIndex}) => {
  if(row.mergeCell.includes(column.property)){
    const rowspan = row[`rowspan_${column.property}`]
    if(rowspan){
      return { rowspan:rowspan, colspan:1}
    }else {
       return { rowspan:0, colspan:0}
    }
  }
}

3、效果图

 

标签:el,支行,金谷,单元格,合并,汉峪,inventoryStatus,vue3.0,branchName
From: https://www.cnblogs.com/flyShare/p/17680082.html

相关文章

  • 笔记 | element table show-overflow-tooltip 位置偏移的问题
    一、问题因为我目前的项目是微前端的工程,最外层有一个50px的通用头部,所以页面要减去50px。所有页面看似都很完美,但是使用el-table-column的show-overflow-tooltip属性时,tooltip会向下偏移50px。想到的解决办法:按照el-tooltip的属性更改placement="right"能解决。但......
  • element table 表格控件实现单选功能
      <el-table:data="tableData"borderstriperef="tableData"@row-click="singleElection"><el-table-columnlabel=""width="65"><templateslot-scope="......
  • $('.panel-collapse').on('show.bs.collapse', function () {})详解
    $('.panel-collapse').on('show.bs.collapse',function(){});这段代码是在使用jQuery来绑定事件。$('.panel-collapse')部分是一个选择器,它选择了当前页面上所有有panel-collapse这个类的元素。如果你在HTML中有这样的元素:<divclass="panel-collapse"></div>,那么这......
  • 使用ASP.NET实现Model View Presenter(MVP)
    作者:BillyMcCafferty翻译:张善友原文地址:http://www.codeproject.com/useritems/ModelViewPresenter.asp这篇文章描述了ASP.NET2.0使用Model-View-Presenter模式实现业务逻辑与表现层的适当分离。DownloadtrivialexampleofMVP-18KbDownloadsimpleEvent-HandlingMVP-......
  • 打开Excel文件
    要通过Python的os模块来打开Excel文件,你可以使用os.system()来运行Excel可执行文件,并将要打开的文件路径作为参数传递给Excel。通常,Excel可执行文件的路径是excel.exe,但在某些系统上可能会有所不同。以下是一个示例代码:importos#Excel可执行文件的路径(根据你的系统可能有所不同......
  • python用tkinter写一个文件对比的小工具,将两个excel文件进行对比,将两个列表差异保存到
    先写文件对比的逻辑代码,包括读取文件,对比文件,将对比出来的差异写入另一个excel文件1.读取文件,我这里是选取自己需要的不同的列,选定了指定的sheet列表,读者可根据需求更改defreadexcel(file):#打开Excel文件workbook=openpyxl.load_workbook(file)#选择指定......
  • elasticsearch wildcard 慢查询原因分析(深入到源码!!!)
    大家好,我是蓝胖子,前段时间线上elasticsearch集群遇到多次wildcard产生的性能问题,elasticsearchwildcard一直是容易引发elasticsearch容易宕机的一个风险点,但究竟它为何消耗cpu呢?又该如何理解elasticsearchprofileapi的返回结果呢?在探索了部分源码后,我将在这篇文章一一揭......
  • CentOS Linux release 7.6.1810 Zabbix 4.2 快速入门与实践:构建强大的企业级资源监控
    目录:0x00Zabbix介绍0x01Zabbix安装0x02Zabbix配置0x03Zabbix-Web配置与使用0x04Zabbix实战配置0x0nZabbix入坑配置0x00Zabbix介绍描述:zabbix是一个开源的企业级性能监控解决方案,可以实时监控服务器/网络设备等硬件资源与其相关的各项指标是否是正常的,而且能够更加方便......
  • django-celery定时任务(beat)
    前言Celery可以异步执行,也可以通过定时任务触发Django中使用Celery要在Django项目中使用Celery,您必须首先定义Celery库的一个实例(称为“应用程序”)如果你有一个现代的Django项目布局,比如: 创建一个celery模块,来定义celery实例importo......
  • HBASE shell操作CLI
    server查看hbase(main)>statushbase(main)>version创建命名空间:namespace指的是一个表的逻辑分组,同一组中的表有类似的用途,相当于关系型数据库中的database创建该命名空间的表:hbase(main):060:0>create_namespace'test1'hbase(main):061:0>create'test1:test','f1',�......