当前位置: 首页 > ops >正文

element基于表头返回 merge: true 配置列合并

<template><div class="wrap" v-loading="listLoading"><div class="content_wrap mt-10"><div style="text-align: center;"><h3>酿造交酒酒罐统计表({{month}}{{day}}日)</h3></div><div class="fr"><h4>单位:个</h4></div><el-table :data="dataList" style="width: 100%" border :span-method="objectSpanMethod"><!-- 遍历表头 --><template v-for="(column, index) in tableHeader"><el-table-columnv-if="column.children":label="column.propName"align="center"width="150px"><!-- 遍历二级表头 --><el-table-columnv-for="(childColumn, childIndex) in column.children":key="childIndex":label="childColumn.propName":prop="childColumn.prop"width="150px"align="center"></el-table-column></el-table-column><!-- 如果是一级表头(没有子表头) --><el-table-columnv-else:label="column.propName":prop="column.prop"align="center"width="150px"></el-table-column></template></el-table></div></div>
</template><script> 
import { mapGetters } from 'vuex'
import { Message } from 'element-ui'
import { stamnosstatistics } from "../../api/TasteandgradeApi";export default {name: 'Winecanstatistics',data() {return {tableHeader: [],dataList: [], tableColumnList: [],listLoading: false,month: '',day: '',spanMaps: {}, // 存储所有需要合并列的合并规则mergeColumns: [] // 存储所有需要合并的列prop}},mounted() {this.getdata()this.getTableData()},methods: {getdata() {const now = new Date();this.month = now.getMonth() + 1;this.day = now.getDate();},getTableData() {stamnosstatistics().then((response) => {this.dataList = response.data.result.dataListthis.tableHeader = response.data.result.columnList// 提取需要合并的列this.extractMergeColumns()// 计算合并规则this.calculateSpans()})},// 递归提取所有标记了merge:true的列extractMergeColumns() {this.mergeColumns = []const findMergeColumns = (columns) => {columns.forEach(column => {if (column.merge) {this.mergeColumns.push(column.prop)}if (column.children) {findMergeColumns(column.children)}})}findMergeColumns(this.tableHeader)},// 计算所有需要合并列的合并规则calculateSpans() {this.spanMaps = {}this.mergeColumns.forEach(prop => {const spanMap = new Map()let pos = 0// 初始化,所有行默认不合并(rowspan=1)for (let i = 0; i < this.dataList.length; i++) {spanMap.set(i, 1)}// 计算合并规则for (let i = 1; i < this.dataList.length; i++) {// 当前行与上一行值相同则合并if (this.dataList[i][prop] === this.dataList[i - 1][prop]) {spanMap.set(pos, spanMap.get(pos) + 1) // 合并行数+1spanMap.set(i, 0) // 当前行设置为0表示被合并} else {pos = i // 值不同,重置合并位置}}this.spanMaps[prop] = spanMap})},// Element表格合并单元格方法objectSpanMethod({ row, column, rowIndex, columnIndex }) {// 获取当前列的propconst currentProp = this.getColumnProp(columnIndex)// 如果当前列是需要合并的列if (currentProp && this.spanMaps[currentProp]) {const rowspan = this.spanMaps[currentProp].get(rowIndex)const colspan = rowspan > 0 ? 1 : 0return {rowspan,colspan}}},// 根据列索引获取列的propgetColumnProp(columnIndex) {let currentIndex = 0const findProp = (columns) => {for (const column of columns) {if (column.children) {const prop = findProp(column.children)if (prop) return prop} else {if (currentIndex === columnIndex) {return column.prop}currentIndex++}}return null}return findProp(this.tableHeader)}}
}
</script><style rel="stylesheet/scss" lang="scss">
</style>
[{propName: '分类',prop: 'category',merge: true // 此列需要合并},{propName: '春天酒',children: [{propName: '货场空罐',prop: 'chuntianjiu_inEmpty',merge: true // 此列需要合并},{propName: '货场满罐',prop: 'chuntianjiu_inFull'}]}
]

在这里插入图片描述

http://www.xdnf.cn/news/6196.html

相关文章:

  • Oracle版本、补丁及升级(12)——补丁及补丁集
  • REVERSE学习笔记(攻防世界xxxorrr)
  • 【Java学习笔记】==运算符
  • 解决常见数据库问题:保障数据安全与稳定的全方位指南
  • 模板源码建站、定制建站和SaaS 建站有什么区别?企业建站应该怎么选?
  • C++引用编程练习
  • XILINX-DDR4-自定义componet(x8)-之一
  • 六西格玛觉醒:一场数据思维的启蒙运动​
  • 【江苏省】《信息技术应用创新软件适配改造成本评估规范》(DB32/T 4935-2024)-标准解读系列
  • 【Linux Nano Vim快捷键大全】
  • 基于EFISH-SCB-RK3576/SAIL-RK3576的康复训练机器人技术方案‌
  • Linux下批量提取子文件夹文件到当前目录
  • libmemcached库api接口讲解二
  • 股指期货套期保值怎么操作?
  • 【Linux】shell内置命令fg,bg和jobs
  • tensorflow安装及简单例程学习
  • 字符田字格绘制
  • Java的多线程笔记
  • 企业报表平台如何实现降本增效
  • requestAnimationFrame 与 requestIdleCallback 对比
  • JavaScript中执行上下文和执行栈是什么?
  • Linux `whoami` 命令深度解析与高阶应用指南
  • 【USRP】在linux下安装python API调用
  • 保姆级!MeloTTS部署 且支持流式接口
  • Vue3在使用渲染函数h时候使用v-loading
  • 最小二乘拟合曲线
  • C#强类型枚举的入门理解
  • C++矩阵操作:正交矩阵(旋转矩阵)
  • 级联与端到端对话系统架构解析:以Moshi为例
  • 材料×工艺×AI:猎板PCB重构汽车电子四层板技术逻辑