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

基于Vue2+elementUi实现树形 横向 合并 table不规则表格

1、实现效果

共N行,但是每一列对应的单元格列数固定,行数不固定
在这里插入图片描述

2、实现方式

说明:使用的是vue2 + elementUI表格组件 + js实现

 <template><div class="table-container" ><el-table  height="100%" :span-method="spanMethod" :data="tableTemData" :cell-style="cellStyle" border :show-header="false"><el-table-column align="center" prop="name" label="" /><el-table-column align="center" prop="name2" label="时间" /><el-table-column align="center" prop="name3" label="" /><el-table-column align="center" prop="name4" label="8:00" /></el-table></div></template><script>export default {data() {return {//所需数据格式tableData: [{ name: '集控中心', name2: '器器器1', name3: '电压A', name4: '8:00', name5: '1111', rowspan_0: 11, rowspan_1: 4,rowspan_2: 1 },{ name: '集控中心', name2: '器器器1', name3: '电压B', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 0, rowspan_2: 1 },{ name: '集控中心', name2: '器器器1', name3: '电压C', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 0, rowspan_2: 1 },{ name: '集控中心', name2: '器器器1', name3: '电压D', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 0, rowspan_2: 1 },{ name: '集控中心', name2: '器器器2', name3: '电压E', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 2, rowspan_2: 1 },{ name: '集控中心', name2: '器器器2', name3: '电压F', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 0, rowspan_2: 1 },{ name: '集控中心', name2: '器器器3', name3: '电压G', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 3, rowspan_2: 1 },{ name: '集控中心', name2: '器器器3', name3: '电压H', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 0, rowspan_2: 1 },{ name: '集控中心', name2: '器器器3', name3: '电压I', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 0, rowspan_2: 2 },{ name: '集控中心', name2: '器器器4', name3: '电压J', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 2, rowspan_2: 0 },{ name: '集控中心', name2: '器器器4', name3: '电压K', name4: '8:00', name5: '1111', rowspan_0: 0, rowspan_1: 0, rowspan_2: 1 },],//原数据格式treeData: [{name: '单位B-A',children: [{name2: '视频',children: [{ name3: '0000s', children:[{name4: '5G'},{name4: '有线网'}] }]},{name2: '视频',children: [{ name3: ':0000s',children: [{name4: '5G'},{name4: '有线网'}] },{ name3: ':0000s', children:[{name4: '5G'},{name4: '有线网'}] }]},{name2: '视频3',children: [{ name3: '0000s', children:[{name4: '5G'},{name4: '有线网'}] },{ name3: '8976s', children:[{name4: '5G'},{name4: '有线网'}] }]}]}, {name: '单位A-C',children: [{name2: '5视频1',children: [{ name3: 'xxx', children:[{name4: '5G'},{name4: '有线网'}] }]},{name2: '视频2',children: [{ name3: ':0000s',children: [{name4: '5G'},{name4: '有线网'}] },{ name3: ':0000s', children:[{name4: '5G'},{name4: '有线网'}] }]}]}],count: 0,tableTemData: [],maxArr: []};},mounted() {this.tree_To_table(this.treeData, 0);},methods: {tree_To_table(arr, num) {arr.forEach((item, index) => {//   初始化数量this.count = 0if (item.children) {// 计算所有所有子集数量this.getnum(item.children)item['rowspan_' + num] = this.count//   深复制后删除children,否则可能会造成死循环let itemVar = JSON.parse(JSON.stringify(item))delete itemVar.childrenitem.children.forEach((m, n) => {//   将除第一行之外的重置为0if (n != 0) {for (let o = 0; o <= num; o++) {itemVar['rowspan_' + o] = 0}}// 合并父子级Object.assign(m, itemVar)})this.tree_To_table(item.children, num + 1)} else {item['rowspan_' + num] = 1this.maxArr.push(num)this.tableTemData.push(item)}})},getnum(arr) {arr.forEach((item, index) => {if (item.children) {this.getnum(item.children)} else {this.count += 1}})},spanMethod ({ row, column, rowIndex, columnIndex }) {let index = this.tableTemData.indexOf(row)if (columnIndex < Math.max(...this.maxArr)) {let rowspan = row['rowspan_' + columnIndex]// 这里可以特殊处理:设置第一列横跨所有行// if (rowIndex == 0 && columnIndex == 0) {//    rowspan = this.tableTemData.length// }return {rowspan,colspan: rowspan == 0 ? 0 : 1}}return {rowspan: 1,colspan: 1}},cellStyle({ row, column, rowIndex, columnIndex }) {return {backgroundColor: 'rgba(50, 247, 255, 0.08)'}}}}</script>
<style lang="scss">
.table-container {width: 100%;overflow-x: auto; /* 横向滚动条,如果内容过宽 */
}table {width: 100%;border-collapse: collapse;
}td {border: 1px solid #ccc;padding: 8px;text-align: center;background-color: #f9f9f9;
}
</style>

end~
希望记录的问题能帮助到你

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

相关文章:

  • 华为S5720S重置密码
  • 前沿技术观察:从AI 时代到量子计算的下一站
  • 智能物联网(AIoT)核心技术落地路径与企业数字化转型适配方案
  • 如何通俗的理解操作系统的IO多路复用
  • H5 本地跨域设置
  • “帕萨特B5钳盘式制动器结构设计三维PROE模型7张CAD图纸PDF图“
  • UE5.5模型导入FBX强制x轴向前Force Front XAxis
  • 上线问题——Mac系统下如何获取鸿蒙APP证书公钥和MD5指纹
  • 密码管理中
  • 多线程 【详解】| Java 学习日志 | 第 14 天
  • Ansys Icepak AEDT 中的后处理脚本
  • 护网面经总结(三)
  • 三维细节呈现核心技术:法线、凹凸与置换贴图全解析与应用指南
  • 物业满意度调查数据分析——从 “数据杂乱” 到 “精准改进” 的落地经验(满意度调查问卷)
  • Linux系统资源分配算法在VPS云服务器调优-性能优化全指南
  • ​突破RAG知识库中的PDF解析瓶颈:从文本错乱到多模态处理的架构跃迁​
  • 【C++成长之旅】C++入门基础:从 Hello World 到命名空间与函数重载的系统学习
  • NV002NV003美光固态闪存NV026NV030
  • 数组替代map实现性能优化
  • Multimodal Transformer Training in Personalized Federated Learning
  • 配送算法17 AFramework for Multi-stage Bonus Allocation in meal delivery Platform
  • 替换数字(字符串算法)
  • 宋红康 JVM 笔记 Day08|堆
  • SMTPman,smtp协议是什么协议的核心功能!
  • 大数据毕业设计选题推荐-基于大数据的存量房网上签约月统计信息可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • MySQL 8.0 事务深度解析:从核心特性到实战应用
  • 国产化Excel开发组件Spire.XLS教程:Python 将 CSV 转换为 Excel(.XLSX)
  • 【重磅发布】flutter_chen_updater-版本升级更新
  • 【开题答辩全过程】以 汽车售后管理系统的设计与实现为例,包含答辩的问题和答案
  • 首次创建Django项目初始化