el-table 指定表格合并行与单元格,以及表头合并单元格

 

 

1:页面html

<template><div class="container"><div class="flex-end"><el-button type="primary" @click="allEndBtn">批量办结</el-button><el-button type="primary" @click="downLoadBtn">导出</el-button><el-button type="primary" @click="printBtn">打印</el-button><el-button type="primary" @click="backBtn">返回</el-button></div><div class="flex-center red lineH40 fontSize16">生成汇总签单成功,可到汇总签单数据列表查看审批情况</div><div class="lineH30"><div class="flex-center fontSize18">{{tableTitle}}</div> <div class="flex-center fontSize18">{{ tableName }}</div><div class="flex-center fontSize12">填单日期:{{ tableCreatTime }}</div></div> <div class="" ref="hzqdREF"><div class="flex-end">编号:{{ codeNum }}</div><el-table:data="tableData":span-method="objectSpanMethod"borderstyle="width: 100%; margin-bottom: 20px":header-cell-style="headerCellStyle":cell-style="{textAlign:'center'}"><el-table-columnprop="label"label="会签项目"width="150"><template slot-scope="scope"><div v-if="scope.$index==3">{{ scope.row.label }}</div> <div v-else>{{ scope.row.label }}</div></template></el-table-column><el-table-columnprop=""label=""width="60"><template slot-scope="scope"><div v-if="scope.$index==3">小写</div><div v-else-if="scope.$index==4">大写</div><div v-else>{{ scope.row.labelLater }}</div></template></el-table-column><el-table-column min-width="160"prop="labelLater":label="tableObj.projectName"><template slot-scope="scope"><div v-if="scope.$index==3||scope.$index==4">{{ scope.row.labelLater }}</div><div v-else>{{ scope.$index+1 }}</div></template></el-table-column><el-table-columnwidth="60"prop="index"label="序号"><template slot-scope="scope"><div v-if="scope.$index==3||scope.$index==4">{{ scope.$index+1 }}</div><div class="flex" v-else><div>{{ scope.row.unit }}</div> <div><div class="backTag " v-if="scope.row.backed==1"><div class="sanJiao"></div><div class="backColor">有退回</div></div></div></div></template></el-table-column><el-table-columnmin-width="260"prop="unit"label="单位/内容"><template slot-scope="scope"><div class="flex" v-if="scope.$index==3||scope.$index==4"><div>{{ scope.row.unit }}</div> <div><div class="backTag " v-if="scope.row.backed==1"><div class="sanJiao"></div><div class="backColor">有退回</div></div></div></div><div v-else>{{ scope.row.amount }}</div></template></el-table-column><el-table-columnwidth="120"prop="amount"label="金额"><template slot-scope="scope"><div v-if="scope.$index==3||scope.$index==4">{{ scope.row.amount }}</div><div v-else></div></template></el-table-column></el-table></div><div v-if="bottomTableData.length>0" ref="bottomTableREF"><el-tableclass="margin-B30" v-loading="loading":data="bottomTableData":border="true"style="width: 100%":header-cell-style="{textAlign:'center'}":cell-style="{textAlign:'center'}"><el-table-column fixed label="处理人" width="100"><template slot-scope="scope">{{ scope.row.userName }}</template></el-table-column><el-table-column fixed label="处理单位" width="200"><template slot-scope="scope">{{ scope.row.unitName }}</template></el-table-column><el-table-column fixed label="处理时间" width="100"><template slot-scope="scope">{{ scope.row.creatTime }}</template></el-table-column><el-table-column fixed label="付款申请编号" width="160"><template slot-scope="scope">{{ scope.row.paymentCode }}</template></el-table-column><el-table-column fixed label="申请金(元)" width="130"><template slot-scope="scope">{{ scope.row.applyAmount }}</template></el-table-column><el-table-column fixed label="处理意见" min-width="240"><template slot-scope="scope">{{ scope.row.opinion }}</template></el-table-column></el-table></div></div>
</template>

2:js部分

<script>
import { downloadPdf, printPdf } from "@/utils/index";
import { numberToQianFenWei } from "@/utils/qianFenWei.js";
export default {data () {return {tableTitle:"上海申通地铁建设集团有限公司",tableName:"工程项目汇总签单",tableCreatTime:"2023年06月10日",codeNum:"",mergeObj: {}, // 用来记录需要合并行的下标// 表格中的列名tableProps: ['label','labelLater','index','unit','amount',] ,tableData: [],tableObj:{projectName:"会签项目111",// 会签项目paymentDate:"支付日期22",// 支付日期allcCountersign:"会签总笔数33",// 会签总笔数dataList:"单据数量44",// 单据数量countersignAllAmount:"11111",// 会签总金额countersignAllAmountDX:"十一元整",// 会签总金额CWFZRsign:"财务负责人签字",// 财务负责人签字JTDSZsign:"集团董事长签字",// 集团董事长签字},loading:false,bottomTableData:[{}],};},watch:{"tableData":function (newVal,oldVal){if(newVal.length>0){this.getSpanArr(this.tableData);}}},created () {// setTimeout(()=>{this.getData();},1000)},computed: {// 千分位元 保留两位小数QFWYBLLWXS(){return (val) => {if(val===null||val===""){return "";}else if(val==="0"||val===0){return "0.00";}else{let LiangWeiXaioShu=(val-0).toFixed(2);if( isNaN(LiangWeiXaioShu)){return "";}else{if(LiangWeiXaioShu>=0){return numberToQianFenWei(LiangWeiXaioShu);}else{return "-"+numberToQianFenWei(String(LiangWeiXaioShu).slice(1));}} }}}},methods:{// 批量办结allEndBtn(){},// 导出downLoadBtn(){downloadPdf(this.$refs["refsPayOrderListTable"],this.tableTitle + this.tableName,"1300px",this.codeNum,{textAlign: "left",font: "30px Vedana",x: 10,conHeight: 500,conWidth: 600,});if(this.$refs["bottomTableREF"]){downloadPdf(this.$refs["bottomTableREF"],this.tableTitle + this.tableName + '意见',"1300px",this.codeNum,{textAlign: "left",font: "30px Vedana",x: 10,conHeight: 500,conWidth: 1000,});}},// 打印printBtn(){if(this.bottomTableData.length > 0){this.$refs["bottomTableREF"].style.width =  '1530px'printPdf([this.$refs["hzqdREF"],this.$refs["bottomTableREF"],],"","","1",this.codeNum,{textAlign: "left",font: "30px Vedana",x: 10,conHeight: 500,conWidth: 1000,});setTimeout(() => {this.$refs["bottomTableREF"].style.width =  ''}, 500)} else {printPdf([this.$refs["hzqdREF"]],"","","1",this.codeNum,{textAlign: "left",font: "30px Vedana",x: 10,conHeight: 500,conWidth: 1000,});}},// 返回backBtn(){this.$router.go(-1);},//表格头部样式headerCellStyle({ row, column, rowIndex, columnIndex }){// 第一步:设置表头的第0列暂不操作,将地1列和第2列隐去使其消失if ((columnIndex == 1)) {return { display: "none" };}// // 第二步, 由于1、2列没有了,后续列就会贴上来(后续列往左错位问题)if ((rowIndex == 0) & (columnIndex == 0)) {// 解决后续列错位问题,就是将隐去的第1列的位置再补上,通过第0列来补this.$nextTick(() => {/*原来第0列只占据一个位置,现在要去占据两个位置。即占据两列,即设置为横向两个单元格*/ document.querySelector(`.${column.id}`).setAttribute("colspan", "2");/*这里的column.id实际是dom元素的class,故用点.不用井#,可审查dom验证所以 --通过设置原生的colspan属性,让原来的第一列只占据一个单元格的表头占据2个单元格即可*/  });}return { textAlign:'center',backgroundColor:"white", }},// getSpanArr方法getSpanArr(data) {this.tableProps.forEach(propVal=> {let count = 0; // 用来记录需要合并行的起始位置this.mergeObj[propVal] = []; // 记录每一列的合并信息data.forEach((item, index) => {// index == 0表示数据为第一行,直接 push 一个 1if(index === 0) {this.mergeObj[propVal].push(1);} else {/*判断当前行是否与上一行其值相等如果相等 在 count 记录的位置其值 +1 表示当前行需要合并 并push 一个 0 作为占位*/  if(item[propVal] === data[index - 1][propVal]) { this.mergeObj[propVal][count] += 1;this.mergeObj[propVal].push(0);} else {// 如果当前行和上一行其值不相等 count = index; // 记录当前位置 this.mergeObj[propVal].push(1); // 重新push 一个 1}}})})},// objectSpanMethod方法/*默认接受四个值----row==当前行的数据----column==当前列的数据----rowIndex==行的下标----columnIndex==列的下标*/objectSpanMethod({ row, column, rowIndex, columnIndex }) {// 只有 第一列  合并行if(columnIndex===0){// 判断列的属性if(this.tableProps.indexOf(column.property) !== -1) {// 判断其值是不是为0 if(this.mergeObj[column.property][rowIndex]) { return {rowspan: this.mergeObj[column.property][rowIndex],colspan: rowIndex===3?1: 2};} else {// 如果为0则为需要合并的行return {rowspan: 0,colspan: 0}; }}}},// 获取表格数据getData(){this.tableData=[];//{},{},{},{},{},{},{},{},{}, {unit:"a阿萨达"}this.tableData=[];if(this.tableData.length<10){let zeroData={label:"支付日期",labelLater:this.tableObj.paymentDate,unit:this.tableData[0]!=undefined?this.tableData[0].unit:"阿达阿达是的",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"1",amount:this.tableData[0]!=undefined?this.tableData[0].amount:""};let oneData={label:"会签总笔数",labelLater:this.tableObj.allcCountersign,unit:this.tableData[1]!=undefined?this.tableData[1].unit:"阿达阿达是的阿达阿达是",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"",amount:this.tableData[1]!=undefined?this.tableData[1].amount:""};let twoData={label:"单据数量",labelLater:this.tableObj.dataList,unit:this.tableData[2]!=undefined?this.tableData[2].unit:"",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"",amount:this.tableData[2]!=undefined?this.tableData[2].amount:""};let threeData={label:"会签总金额",labelLater:this.QFWYBLLWXS(this.tableObj.countersignAllAmount),unit:this.tableData[3]!=undefined?this.tableData[3].unit:"",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"",amount:this.tableData[3]!=undefined?this.tableData[3].amount:""};let fourData={label:"会签总金额",labelLater:this.tableObj.countersignAllAmountDX,unit:this.tableData[4]!=undefined?this.tableData[4].unit:"",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"",amount:this.tableData[4]!=undefined?this.tableData[4].amount:""};let fiveData={label:"财务负责人",labelLater:this.tableObj.CWFZRsign,unit:this.tableData[5]!=undefined?this.tableData[5].unit:"",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"",amount:this.tableData[5]!=undefined?this.tableData[5].amount:""};let sixData={label:"集团董事长",labelLater:this.tableObj.JTDSZsign,unit:this.tableData[6]!=undefined?this.tableData[6].unit:"",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"",amount:this.tableData[6]!=undefined?this.tableData[6].amount:""};let sevenData={label:"网银录入",labelLater:"",unit:this.tableData[7]!=undefined?this.tableData[7].unit:"",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"",amount:this.tableData[7]!=undefined?this.tableData[7].amount:""};let eightData ={label:"网银复核",labelLater:"",unit:this.tableData[8]!=undefined?this.tableData[8].unit:"",backed:this.tableData[0]!=undefined?this.tableData[0].backed:"",amount:this.tableData[8]!=undefined?this.tableData[8].amount:""};this.tableData.splice(0,1,zeroData);this.tableData.splice(1,1,oneData);this.tableData.splice(2,1,twoData);this.tableData.splice(3,1,threeData);this.tableData.splice(4,1,fourData);this.tableData.splice(5,1,fiveData);this.tableData.splice(6,1,sixData);this.tableData.splice(7,1,sevenData);this.tableData.splice(8,1,eightData);console.log("少于9条数据========",this.tableData)}else{this.addArrPoperty(this.tableData,0,"支付日期",this.tableObj.paymentDate);this.addArrPoperty(this.tableData,1,"会签总笔数",this.tableObj.allcCountersign);this.addArrPoperty(this.tableData,2,"单据数量",this.tableObj.dataList);this.addArrPoperty(this.tableData,3,"会签总金额",this.QFWYBLLWXS(this.tableObj.countersignAllAmount));this.addArrPoperty(this.tableData,4,"会签总金额",this.tableObj.countersignAllAmountDX);this.addArrPoperty(this.tableData,5,"财务负责人",this.tableObj.CWFZRsign);this.addArrPoperty(this.tableData,6,"集团董事长",this.tableObj.JTDSZsign);this.addArrPoperty(this.tableData,7,"网银录入","");this.addArrPoperty(this.tableData,8,"网银复核","");console.log("多于9条数据========",this.tableData)}},addArrPoperty(arr,index,label,labelLater){arr[index].label=label;arr[index].labelLater=labelLater;},}
}
</script>

3:样式

<style scoped>.red{color: red;}.lineH40{line-height: 40px;}.lineH30{line-height: 30px;}.fontSize16{font-size: 16px;}.fontSize18{font-size: 18px;font-weight: 500;}.fontSize12{font-size: 12px;font-weight: 600;}table {border-spacing: 0;border-collapse: collapse;border: 1px solid #7f7f7f;width: 100%;margin-bottom: 30px;}table td {padding: 8px;border: 1px solid #7f7f7f;text-align: center;min-width: 80px;min-height: 30px;}.headStyle td{text-align: center; font-weight: 600;}.margin-B30{margin-bottom: 30px;}.backTag{margin-left: 3px;display: flex;justify-content: center;align-items: center;}.sanJiao{content:"";border:11px solid red;border-top-color:transparent;border-left-color:transparent;border-bottom-color:transparent;width:0px;height:0px;}.backColor{border: none;background-color: red;padding-right: 5px;color: white;}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象编程入门:掌握C++类的基础(2/3):深入理解C++中的类成员函数

在C编程中&#xff0c;类是构建程序的基石&#xff0c;而理解类的默认成员函数对于高效使用C至关重要。本文将深入探讨这六个默认成员函数及其他相关概念&#xff0c;提供给读者一个全面的视角。 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为…

【前端素材】推荐优质后台管理系统Dashy平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

MySQL 如何从 Binlog 找出变更记录并回滚

文章目录 前言1. 案例模拟1.1 确认信息1.2 下载 Binlog1.3 准备环境1.4 注册 Binlog1.5 准备结构信息1.6 Python 订阅1.7 输出结果展示 2. 原理解析2.1 程序设计2.2 模块版本 总结 前言 最近有研发同学问我&#xff1a;有一个问题&#xff0c;想查一个 ID 为 xxxx 的 sku 什么…

经典DP-最长单调子序列

最长递增子序列 思路 定义状态&#xff1a; 我们定义一个数组 dp&#xff0c;其中 dp[i] 表示以 nums[i] 结尾的最长递增子序列的长度。初始化状态&#xff1a; 对于数组中的每个元素 nums[i]&#xff0c;初始时都可以被视为一个长度为1的递增子序列&#xff0c;因此 dp[i] 的…

常用的桌面端自动化测试工具

桌面端软件相比Web端软件而言&#xff0c;因为界面元素的多种形态&#xff0c;导致其定位更难&#xff0c;目前市面上常见的定位方式一般是两种&#xff0c;一种是通过控件本身的属性定位&#xff0c;第二种是通过图片识别来定位&#xff0c;市面上常用的可以支持不同操作系统的…

Qt6内嵌CEF

一、下载CEF CEF下载地址&#xff1a;https://cef-builds.spotifycdn.com/index.html 或https://bitbucket.org/chromiumembedded/cef/src/master/ 选择对应系统的版本&#xff08;本教程选择的是116.0.19&#xff09; CMake下载地址&#xff1a;https://cmake.org/download…

thefour--Love is like a tide

最后一部分了&#xff0c;要开始进行我们的训练了。 先上代码&#xff1a; import os import numpy as np from tqdm import tqdm import tensorflow as tf from thetwo import NeuralStyleTransferModel import theone import thethree #创建模型 modelNeuralStyleTransferM…

代码随想录训练营第31天 | 理论基础、LeetCode 455.分发饼干、

目录 理论基础 视频讲解&#xff1a;手把手带你学会操作链表 | 贪心算法理论基础&#xff01;_哔哩哔哩_bilibili LeetCode 455.分发饼干 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;贪心算法&#xff0c;你想先喂哪个小孩&#xff1f;| Le…

【GameFramework框架内置模块】7、事件(Event)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a; https://blog.csdn.net/q7…

【Vue】路由

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue ⛺️稳中求进&#xff0c;晒太阳 目录 路由 单页应用程序 总结&#xff1a; VueRouter 核心步骤&#xff1a; 组件存放目录的问题 路由的封装 声明式导航 声明式导航 - 导航链…

Go语言必知必会100问题-11 使用选项模式

使用选项模式 在设计API时&#xff0c;可能会遇到一个问题&#xff1a;如何处理可选配置&#xff1f;有效的解决可选配置问题可以提高API的灵活性。本文通过一个具体示例说明处理可选配置的一些方法。该示例的要求是设计一个对外提供创建HTTP服务器的库函数。函数定义如下&…

服了,阿里云服务器和腾讯云服务器价格差不多怎么选择?

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器62元一年&#xff0c;2核2G3M、2核4G、4核8G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配置价格表…

高级语言期末2011级B卷(计算机学院)

1.编写函数&#xff0c;实现按照如下公式计算的功能&#xff0c;其中n为自然数 #include <stdio.h>int fac(int n) {if(n0)return 1;elsereturn n*fac(n-1); }float fun(int n) {float flag;float sum0;for(int i0; i<n; i) {flagi/((i1)*fac(i2));sumflag;}return su…

重推请求之curl和fiddler

在实际的项目中会有出现问题&#xff0c;想重现的场景&#xff0c;比较重新调用一个服务&#xff0c;那么如何进行快速的重推请求呢&#xff0c;记录下来&#xff0c;方便备查。 主要有curl和fiddler两种方式&#xff0c;下面详细说。 方式一、curl 命令 curl 是一个利用URL规…

云上攻防-云服务篇弹性计算服务器云数据库实例元数据控制角色AK控制台接管

知识点: 1、云服务-弹性计算服务器-元数据&SSRF&AK 2、云服务-云数据库-外部连接&权限提升 章节点&#xff1a; 云场景攻防&#xff1a;公有云&#xff0c;私有云&#xff0c;混合云&#xff0c;虚拟化集群&#xff0c;云桌面等 云厂商攻防&#xff1a;阿里云&am…

租赁小程序|租赁系统|租赁软件开发带来高效运营

随着社会的不断发展和科技的不断进步&#xff0c;越来越多的企业开始关注设备租赁业务。设备租赁作为一种短期使用设备的方式&#xff0c;为企业提供了灵活和成本节约的优势。针对设备租赁业务的管理和提升企业竞争力的需求&#xff0c;很多企业选择定制开发设备租赁系统。本文…

js 面试 1判断变量是否是数组 2 检测数据类型方法

1 是否是数组 1) typeof 检测数据类型运算符 优点&#xff1a;使用简单 缺点&#xff1a;只能检测基本类型&#xff08;除null外&#xff09; console.log(typeof(10)) //Number console.log(typeof(false)) //boolean console.log(typeof(hello)) //string console.log(typeof…

vue使用gitshot生成gif

vue使用gitshot生成gif 问题背景 本文将介绍vue中使用gitshot生成gif。 问题分析 解决思路&#xff1a; 使用input组件上传一个视频&#xff0c;获取视频文件后用一个video组件进行播放&#xff0c;播放过程进行截图生成图片数组。 demo演示上传一个视频&#xff0c;然后生…

如何使用Docker部署IT-Tools并结合内网穿透实现公网访问本地工具箱服务

作为程序员&#xff0c;在日常工作中&#xff0c;需要借助一些工具来提高我们工作效率&#xff0c;IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能&#xff0c;使开发者能以更高效方式完成任务。经由IT-Tools&#xff0c;开发人员能轻松应对各类技术挑战&…

C++之数组

1&#xff0c;概述 所谓数组&#xff0c;就是一个集合&#xff0c;里面存放了相同类型的数据元素 特点1&#xff1a;数组中没干过数据元素都是相同的数据类型 特点2&#xff1a;数组都是连续存放位置组成的 2&#xff0c;一维数组 2.1 一维数组的定义 一维数组定义有三种…