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

Vue父组件调用子组件设置table表格合并

父组件控制合并函数办法

父组件

<CreateTableComp ref="table" style="margin-top: 15px;" @handleClick="handleClick" 
                 :urls="urls" :baseTable="baseTable"
                 delName="username"
                 :tableData.sync="tableData"
                 :arraySpanMethod="arraySpanMethod">
</CreateTableComp>

子组件 CreateTableComp

props: {
    // 合并单元格
    arraySpanMethod: {
      type: Function,
      default: () => {}
    }
}

<el-table :data="tableData || []" fit highlight-current-row 
          :span-method="arraySpanMethod"
          :size="baseTableData.size || 'small'"
          v-if="showTable"
          :border="baseTableData.border">
</table>

使用 props 父组件传函数到子组件,达到使用合并函数的办法。

合并逻辑

// 合并行
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
  // 只对某一列(如 category 列,columnIndex === 1)进行合并
  if (columnIndex === 1) {
    const prop = column.property; // 获取列属性名

    // 判断是否是当前分组的第一行(第一行或与上一行不同)
    if (rowIndex === 0 || row[prop] !== this.tableData[rowIndex - 1]?.[prop]) {
      // 计算当前值需要合并的行数
      let rowspan = 1;
      for (let i = rowIndex + 1; i < this.tableData.length; i++) {
        if (row[prop] === this.tableData[i][prop]) {
          rowspan++; // 统计连续相同的行数
        } else {
          break; // 遇到不同值就停止
        }
      }
      return [rowspan, 1]; // 第一行合并 rowspan 行
    } else {
      return [0, 1]; // 其余相同行隐藏
    }
  }

  return [1, 1]; // 其他列不合并
},

数组中的 0 表示隐藏行或者列。

思路:1. 先获取表格的所有数据 this.tableData ; 2. 确定要修改的列;3. 设置行合并判断条件;4. 设置初始值,检查tableData里的数据是否相同,修改统计变量实现合并。

http://www.dtcms.com/a/108772.html

相关文章:

  • chromium魔改——修改 navigator.webdriver 检测
  • 【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器 —— 进阶篇
  • Leetcode hot 100(day 4)
  • 03.01、三合一
  • 使用Amazon Bedrock Guardrails保护你的DeepSeek模型部署
  • 一问讲透redis持久化机制-rdb aof
  • 深度优化:解决SpringBoot应用启动速度慢的8个关键策略
  • 部署大模型实战:如何巧妙权衡效果、成本与延迟?
  • 智慧园区大屏如何实现全局监测:监测意义、内容、方式
  • .NET WebApi的详细发布流程——及其部署到Linux与Windows平台
  • AG32:MCU和CPLD如何交互?
  • 6.3 八皇后问题搜索
  • 几个在面试中遇到的计算机基础问题
  • C与指针的神秘面纱
  • 【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
  • sshd启动报错“Failed to start OpenSSH Server daemon”
  • Python不可变数据类型全解析:原理、优势与实战指南
  • C#游戏开发【第18天】 | 深入理解队列(Queue)与栈(Stack):从基础到任务队列实战
  • 关闭Chrome提示更新失败的弹窗
  • 前端:v-html和v-text在使用上的区别
  • Scala相关知识学习总结4
  • Ubuntu安装Elasticsearch
  • 【通信观察家】2025年Q1通信业技术跃迁与生态重构:AI+低空经济双轮驱动
  • ffmpeg视频转码相关
  • 统计项目代码行数工具—cloc
  • 001英超:切尔西VS热刺, 伦敦德比“大”战可期
  • 查看进程,认识fork
  • Python 设计模式:外观模式
  • 汽车 HMI 设计的发展趋势与设计要点
  • 《MyBatis CRUD实战与核心配置详解:从基础操作到高级应用》