vue js table colspan rowspan

el-table动态合并行(相邻行) 【代码】el-table动态合并行。 阅读详情

需求,要写一个菜单权限表。需要做到单元格合并,本来用的antd-vue的表格,然后构造customRender,总感觉有点本末倒置,其实自己实现,更快,而且想改哪里,改哪里。下面是写这个功能前的测试demo。
效果图
请添加图片描述
代码

<template>
  <div class="class-table">
    <div class="table-wrapper">
      <div class="tabel-container">
        <table>
          <thead>
            <tr>
              <th v-for="(week, index) in weeks" :key="index">{{ '周' + digital2Chinese(index + 1, 'week') }}</th>
            </tr>
          </thead>
          <tbody>
            <tr v-for="(item, index) in classTableData" :key="index">
              <td v-for="(week, index) in weeks" :key="index" :colspan="item[week].colspan" :rowspan="item[week].rowspan" v-show="item[week].colspan !== 0 && item[week].rowspan !== 0">
                {{ item[week].name || '-' }}
                <div style="margin-top: 5px">{{ item[week].colspan }} | {{ item[week].rowspan }}</div>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      weeks: ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'],
      classTableData: [
        {
          classesTime: '08:00-09:00',
          monday: { name: 'CSS', rowspan: 1, colspan: 2 },
          tuesday: { name: 'JS', rowspan: 1, colspan: 0 },
          wednesday: { name: 'VUE', rowspan: 1, colspan: 3 },
          thursday: { name: 'JQUERY', rowspan: 1, colspan: 0 },
          friday: { name: 'REACT', rowspan: 1, colspan: 0 },
          saturday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          sunday: { name: 'REACT', rowspan: 2, colspan: 1 },
        },
        {
          classesTime: '09:00-10:00',
          monday: { name: 'DATA', rowspan: 1, colspan: 1 },
          tuesday: { name: 'CSS', rowspan: 1, colspan: 1 },
          wednesday: { name: 'REACT', rowspan: 1, colspan: 1 },
          thursday: { name: 'JS', rowspan: 1, colspan: 1 },
          friday: { name: 'REACT', rowspan: 1, colspan: 1 },
          saturday: { name: 'DATA', rowspan: 1, colspan: 1 },
          sunday: { name: 'REACT', rowspan: 0, colspan: 1 },
        },
        {
          classesTime: '10:00-11:00',
          monday: { name: 'DATA', rowspan: 1, colspan: 1 },
          tuesday: { name: 'CSS', rowspan: 1, colspan: 1 },
          wednesday: { name: 'DATA', rowspan: 1, colspan: 1 },
          thursday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          friday: { name: 'DATA', rowspan: 1, colspan: 1 },
          saturday: { name: 'JS', rowspan: 1, colspan: 1 },
          sunday: { name: 'VUE', rowspan: 1, colspan: 1 },
        },
        {
          classesTime: '11:00-12:00',
          monday: { name: '', rowspan: 1, colspan: 1 },
          tuesday: { name: 'VUE', rowspan: 1, colspan: 1 },
          wednesday: { name: 'CSS', rowspan: 1, colspan: 1 },
          thursday: { name: 'VUE', rowspan: 1, colspan: 1 },
          friday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          saturday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          sunday: { name: 'DATA', rowspan: 1, colspan: 1 },
        },
        {
          classesTime: '13:00-14:00',
          monday: { name: 'DATA', rowspan: 1, colspan: 1 },
          tuesday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          wednesday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          thursday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          friday: { name: '', rowspan: 1, colspan: 1 },
          saturday: { name: 'JS', rowspan: 1, colspan: 1 },
          sunday: { name: 'REACT', rowspan: 1, colspan: 1 },
        },
        {
          classesTime: '14:00-15:00',
          monday: { name: 'REACT', rowspan: 1, colspan: 1 },
          tuesday: { name: 'JS', rowspan: 1, colspan: 1 },
          wednesday: { name: 'CSS', rowspan: 1, colspan: 1 },
          thursday: { name: 'REACT', rowspan: 1, colspan: 1 },
          friday: { name: '语文', rowspan: 1, colspan: 1 },
          saturday: { name: 'CSS', rowspan: 1, colspan: 1 },
          sunday: { name: 'JS', rowspan: 1, colspan: 1 },
        },
        {
          classesTime: '15:00-16:00',
          monday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          tuesday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          wednesday: { name: '语文', rowspan: 1, colspan: 1 },
          thursday: { name: 'JQUERY', rowspan: 1, colspan: 1 },
          friday: { name: 'DATA', rowspan: 1, colspan: 1 },
          saturday: { name: 'JS', rowspan: 1, colspan: 1 },
          sunday: { name: '', rowspan: 1, colspan: 1 },
        },
      ],
      tableShow: false,
    }
  },
  created() {
    // /* mock随机数据*/
    //  Mock.mock({
    //     'data|7': [
    //         {
    //             'classesTime|+1': ['08:00-09:00', '09:00-10:00', '10:00-11:00', '11:00-12:00', '13:00-14:00', '14:00-15:00', '15:00-16:00', '16:00-17:00'],
    //             'monday|1': ['DATA', 'CSS', 'REACT', 'VUE', 'JQUERY', 'JS', '', '语文'],
    //             'tuesday|1': ['DATA', 'CSS', 'REACT', 'VUE', 'JQUERY', 'JS', '', '语文'],
    //             'wednesday|1': ['DATA', 'CSS', 'REACT', 'VUE', 'JQUERY', 'JS', '', '语文'],
    //             'thursday|1': ['DATA', 'CSS', 'REACT', 'VUE', 'JQUERY', 'JS', '', '语文'],
    //             'friday|1': ['DATA', 'CSS', 'REACT', 'VUE', 'JQUERY', 'JS', '', '语文'],
    //             'saturday|1': ['DATA', 'CSS', 'REACT', 'VUE', 'JQUERY', 'JS', '', '语文'],
    //             'sunday|1': ['DATA', 'CSS', 'REACT', 'VUE', 'JQUERY', 'JS', '', '语文']
    //         }
    //     ]
    // });
  },
  methods: {
    /**
     * 数字转中文
     * @param {Number} num 需要转换的数字
     * @param {String} identifier 标识符
     * @returns {String} 转换后的中文
     */
    digital2Chinese(num, identifier) {
      const character = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二']
      return identifier === 'week' && (num === 0 || num === 7) ? '日' : character[num]
    },
  },
}
</script>

<style lang="less" scoped>
.class-table {
  .table-wrapper {
    width: 100%;
    height: 100%;
    overflow: auto;
  }
  .tabel-container {
    margin: 7px;

    table {
      table-layout: fixed;
      width: 100%;

      thead {
        background-color: #67a1ff;
        th {
          color: #fff;
          line-height: 17px;
          font-weight: normal;
        }
      }
      tbody {
        background-color: #eaf2ff;
        td {
          color: #677998;
          line-height: 12px;
        }
      }
      th,
      td {
        width: 60px;
        padding: 12px 2px;
        font-size: 12px;
        text-align: center;
        border: 1px solid grey;
      }

      tr td:first-child {
        color: #333;
        .period {
          font-size: 8px;
        }
      }
    }
  }
}
</style>

备注:表格数据参考这位博主:vue实现table课程表

【Eement】- Table 表格 多级合并单元格方式 最近遇到一个需求,需要实现多级合并单元格,在此记录一下。 1.需求 需要得到如下所示的表格: 后端给的数据如下: tableData6: [ { id: "1", config_name: "配置名称", name: "商品名称1", config_id: "配置id", project_id: "一级项目id1", project_name: "一级项目名称", . 阅读详情

相关推荐

关于三维全波电磁场仿真软件CST的安装和问题解决

百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。

weixin_60728441的博客 3617

Vue 动态实现合并table表格多列多行

官网网址:https://element.eleme.cn/#/zh-CN/component/table

hylshyshm的博客 2146

C#实战:如何用TSCLIB.dll实现TSC打印机的状态监控与异常处理(附完整代码)

本文详细介绍了如何利用C#和TSCLIB.dll构建企业级TSC打印机状态监控与智能异常处理系统。通过解析十六进制状态码、设计高可靠性的轮询引擎以及实现事件驱动的报警机制,开发者可以打造一个稳定、可观测的打印服务,有效保障物流仓储、生产制造等高频打印场景的业务连续性。

weixin_29227585的博客 64

HTML_合并单元格

首先我们创建一个3行3列的表格: <table border="1px" width="400px" height="300px" style="text-align: center"> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <

qq_39509610的博客 511

Vivado IP核综合失败别慌:除了打补丁,这个TCL命令也能救急(以Video Frame Buffer为例)

本文详细解析了Vivado IP核综合失败的排查方法,特别是针对Video Frame Buffer Read IP的常见问题。从补丁安装到深入分析DCP文件生成机制,再到使用强大的TCL命令`foreach ip_in_proj [get_ips] {compile_c [get_ips $ip_in_proj]}`强制重编译,提供了一套完整的解决方案。帮助开发者快速定位并解决IP核综合失败问题,确保项目顺利进行。

weixin_30892889的博客 424

通达信强龙趋势幅图指标 - 精准捕捉趋势,把握强势行情,多角度分析个股,强弱一目了然

STICKLINE(趋势>0 AND SJTJ,4.8,5.8,1.5,0),COLORYELLOW;STICKLINE(资金>0 AND SJTJ,1.2,2.2,1.5,0),COLOR0080FF;STICKLINE(异动>0 AND SJTJ,0,1,1.5,0),COLORFF0080;STICKLINE(异动=0 AND SJTJ,0,1,1.5,1),COLORGRAY;

Q1809330692的博客 5640

vue横向的table表格

最后的实现效果如下: HTML代码如下::colspan="alarms_models.length + 1"意思是规定单元格可横跨的列数,此处我动态设置为报警设备alarms_models+1,也可以写成colspan="10" <table class="list-table"> <thead> <tr class="table-title"> <th class="tac" :colspan="al

weixin_55966654的博客 4121

睿尔曼超轻量仿人机械臂-ROS第一篇 启动机械臂的Moveit

本文主要讲述了睿尔曼六轴机械臂在ROS中的功能包配置,及如何根据文件启动Moveit做仿真。

realman_Rop的博客 7490

vue中的table合并单元格用法

colspan用来指定单元格横向跨越的列数:colspan就是合并列的,colspan=2的话就是合并两列 rowspan用来指定单元格纵向跨越的行数:rowspan就是用来合并行的,比如rowspan=2就是合并两行, vue中的table合并单元格 </td> <td width="130px" :rowspan="infoa.infoList.length" v-if="i...

weixin_43819610的博客 6020

瑞数6.5逆向实战:手把手教你用RPC搞定cookie sign加密(附环境补全技巧)

本文深入解析瑞数6.5逆向实战,重点探讨如何结合环境补全与RPC调用技术来应对其动态加密机制。文章详细介绍了环境指纹采集、双重验证等核心防护原理,并提供了基于Puppeteer的RPC实现方案,手把手教你搞定cookie sign加密,附有实用的环境补全技巧与完整代码示例。

weixin_29315091的博客 1273

OpenCV实战(1)——OpenCV与图像处理基础

OpenCV 是一个跨平台计算机视觉和机器学习库,实现了图像处理和计算机视觉方面的很多通用算法。本节将介绍 OpenCV 的基础知识,以及如何编译运行 OpenCV 程序,并介绍如何完成最基本的图像处理任务——读取、显示和保存图像。除此之外,鼠标事件和图形绘制也是 OpenCV 计算机视觉项目中常用的基本功能,本节介绍了如何使用这两个重要的 OpenCV 功能。

盼小辉丶的博客 12万+

antd-vue table表头行合并

在官网是不支持表头的行合并的: 表头只支持列合并,使用 column 里的 colSpan 进行设置。 表格支持行/列合并,使用 render 里的单元格属性 colSpan 或者 rowSpan 设值为 0 时,设置的表格不会渲染。 所以只能自己想办法了,用了一个比较low的思路:把需要合并的单元格拆分为n个单元格(flex布局使之垂直排列),然后在每行加上border-bottom let theadSolts = [{ type: 'filed9Title', labels: ['

qq_43272035的博客 1884

2026年海能达嵌入式岗位面试题集(含参考答案)

本文总结了嵌入式系统开发中的常见面试题,涵盖项目经验、外设接口、存储系统、编程基础、操作系统等核心模块。主要内容包括:1)项目核心经历的硬件/软件架构及问题解决思路;2)SPI、I2C等接口协议的时序特点与应用要点;3)NAND Flash存储管理中的ECC校验原理和文件系统对接方案;4)USB设备枚举流程等关键知识点。这些题目针对嵌入式岗位的技术考察重点,既包含底层硬件接口细节,也涉及系统级设计与优化策略,全面考察开发者的嵌入式系统能力。

Open 362

记录使用el-table 实现表头固定,数据列一列对应多行的写法

本文介绍了在Element UI表格中实现横向单元格合并的方法。由于el-table不支持colspan和rowspan属性,作者通过自定义span-method函数实现横向合并。文章展示了包含48个时间列的数据表格示例,并详细说明了如何通过arraySpanMethod方法处理单元格合并逻辑。该方法适用于需要展示大量时间点数据的场景,通过自定义合并策略可以优化表格展示效果。

qq_35111210的博客 796

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

el-table 动态合并相同的表格

【代码】el-table 动态合并相同的表格。

weixin_43942866的博客 273

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

el-table行列合并原理

el-table和并相同数据的行单元格 rowspan为当前单元格所需要的合并的行数(包括本行),若当前行的rowspan为n(n不为0),后面的n-1行的rowspan则需要为0。如当前行的rowspan为3,则后面2行的rowspan需要为0 colspan同理 methods:{ filterData(arr, key) { let result = []; let concatOne = 0; arr.forEach((item, index) =&g

m0_47354578的博客 1141

Vue Element ui table 合并单元格

<el-table :data="tableData" border :span-method="objectSpanMethod" style="w...

chuotangbang2061的博客 561

vue3 element-plus el-table:列表中相同名称的数据实现行合并

element-plus el-table:列表中相同名称的数据实现行合并

唐唐唐行的博客 5364

element-Plus:Table表格组件动态合并相同数据

在Table组件中处理相同数据列合并,需要根据交易号为合并条件,在交易号相同的数据中,找出表格列相同的数据进行合并。实现效果大概是这个样子。

qq_45061461的博客 536

vue2 a-table合并列 colSpan

vue2 a-table合并列 colSpan

收集、分享 286

自定义合并el-table多行多列表格--方案2(转载)

【代码】自定义合并el-table多行多列表格--方案2(转载)

爬坑之路 572

element-UI动态渲染表格时相同数据表格合并,比如日期等数据相同的地方合并单元格,具体看代码

element-UI动态渲染表格时相同数据表格合并,比如日期等数据相同的地方合并单元格,具体看代码

大宽的博客 572

用原生js实现html表格单元格任意合并后如何获取某个单元格原始的行和列

用原生js实现html表格单元格任意合并后如何获取某个单元格原始的行和列

phplife的技术专栏,专注于php,golang,ai等技术应用 679

判断需要合并table表格哪几列

表格合并列

程序媛的博客 160

表格合并单元格

el-table span-method 合并单元格

qq_41008008的博客 199

el-table 表头合并

理解这个之后,其实代码也就很好理解了,找到表头这一行要合并的两列,将第一列的colSpan设为2,代表单元格可以占据两列,将第二列隐藏。合并表头代码思路是将两个列通过handerMethod隐藏第一列的同时,让第二列占据两个单元格的宽度来实现合并效果。效果如下,圈起来的是一个表头对应两列,这里是多级表头(本篇借鉴而来,如有需要请留言删除!如上就是列头合并,接来下是内容合并,依据列中的值进行表格合并,也可以多条件多单元格合并。比如说表头是第一行,行号是0,表头第一行第一列,行号和列号都是0。

chen_wei_yx的博客 7022
上一篇: js 树形json转以叶子结点为基准的扁平结构
下一篇: table 权限 展示页面
曹天骄
博客等级 码龄14年 795粉丝 635原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值