el-table实现嵌套表格的展示

需求

一个表单中存在子表
在这里插入图片描述
列表返回格式
在这里插入图片描述
实现
在这里插入图片描述

实现思路

el-table中在嵌套一个el-table,这样数据格式就没问题了,主要就是样式

  1. 将共同的列放到一列中,通过渲染自定义表头render-header,将表头按照合适的宽度渲染出来
 <el-table-columnprop="table"label="子表"class-name="has-child":render-header="renderHeader":width="childColumn.length * 120 + 2 + 'px'"><template slot-scope="scope"><el-tableborder:data="scope.row.details"class="child-table":show-header="false"><el-table-columnprop="startDate"align="center"label="起始日期"width="120px"></el-table-column><el-table-columnprop="endDate"align="center"label="结束日期"width="120px"></el-table-column><el-table-columnprop="applyDay"align="center"label="申请天数"width="120px"></el-table-column><el-table-columnprop="destination"align="center"label="目的地"width="120px"></el-table-column><el-table-columnprop="transportation"align="center"label="交通方式"width="120px"></el-table-column><el-table-columnprop="businessTripReason"align="center"label="出差事由"width="120px"></el-table-column><el-table-columnprop="returnDate"align="center"label="返程日期"width="120px"></el-table-column><el-table-columnprop="actualDay"align="center"label="实际出差天数"width="120px"></el-table-column><el-table-columnprop="subsidyDay"align="center"label="差补天数"width="120px"></el-table-column><el-table-columnprop="remark"align="center"label="备注"width="120px"></el-table-column></el-table></template></el-table-column>

根据数据渲染表头

      childColumn: [{label: "起始日期",width: "120px",},{label: "结束日期",width: "120px",},{label: "申请天数",width: "120px",},{label: "目的地",width: "120px",},{label: "交通方式",width: "120px",},{label: "出差事由",width: "120px",},{label: "返程日期",width: "120px",},{label: "实际出差天数",width: "120px",},{label: "差补天数",width: "120px",},{label: "备注",width: "120px",},],/*** @description 渲染子表*/renderHeader(h, { column, $index }) {const childTable = this.childColumn.map((item) => {return h("div",{style: {width: item.width,padding: "0 10px",textAlign: "center",flexShrink: 0,flexGrow: 0,},},item.label);});return h("div",{class: ["child-head"],},childTable);},

调样式,慢慢调到合适就行

.has-child {padding: 0px !important;// display: none;& > .cell {padding: 0 !important;}::before {height: 0;}.child-table {background-color: transparent;.cell{line-height: 34px;}}.el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell {background-color: transparent;}.el-table__body tr.current-row > td.el-table__cell,.el-table__body tr.selection-row > td.el-table__cell {background-color: transparent;}tr {background-color: transparent;}.child-head {display: flex;}
}

完整代码

<template><div><Search :config="searchConfig" @search="search"><el-button type="primary" @click="addItem" icon="el-icon-plus">新增</el-button></Search><el-tableborder:data="tableData"v-loading="loading"class="el-child-table"><el-table-columnprop="applyDate"label="申请日期"align="center"width="120px"></el-table-column><el-table-columnprop="nickName"label="申请人"align="center"width="140px"></el-table-column><el-table-columnprop="deptName"label="申请部门"align="center"width="120px"></el-table-column><el-table-columnprop="table"label="子表"class-name="has-child":render-header="renderHeader":width="childColumn.length * 120 + 2 + 'px'"><template slot-scope="scope"><el-tableborder:data="scope.row.details"class="child-table":show-header="false"><el-table-columnprop="startDate"align="center"label="起始日期"width="120px"></el-table-column><el-table-columnprop="endDate"align="center"label="结束日期"width="120px"></el-table-column><el-table-columnprop="applyDay"align="center"label="申请天数"width="120px"></el-table-column><el-table-columnprop="destination"align="center"label="目的地"width="120px"></el-table-column><el-table-columnprop="transportation"align="center"label="交通方式"width="120px"></el-table-column><el-table-columnprop="businessTripReason"align="center"label="出差事由"width="120px"></el-table-column><el-table-columnprop="returnDate"align="center"label="返程日期"width="120px"></el-table-column><el-table-columnprop="actualDay"align="center"label="实际出差天数"width="120px"></el-table-column><el-table-columnprop="subsidyDay"align="center"label="差补天数"width="120px"></el-table-column><el-table-columnprop="remark"align="center"label="备注"width="120px"></el-table-column></el-table></template></el-table-column><el-table-columnprop="processStatusName"width="120px"label="状态"align="center"></el-table-column><el-table-column label="操作" align="center" width="100px" fixed="right"><template slot-scope="{ row }"><!-- 1、状态为被退回  2、申请人为当前登陆人 --><el-buttonv-if="row.approveJurisdiction == 1"type="text"@click="approval(row)">审批</el-button><el-buttontype="text"@click="check(row)"v-if="row.checkJurisdiction == 1">核定</el-button><el-buttonv-if="row.processStatusName == '被退回' &&row.nickName === $store.state.user.nickName"type="text"@click="editItem(row)">修改</el-button><el-button type="text" @click="viewItem(row)">查看</el-button></template></el-table-column></el-table><pagination:total="pageInfo.total":page.sync="pageInfo.pageNum":limit.sync="pageInfo.pageSize"@pagination="getList"/><DialogForm ref="dialogFormRef" @success="submitSuccess"></DialogForm></div>
</template><script>
import Search from "@/components/Search/index.vue";
import DialogForm from "./components/form.vue";
import { checkRole } from "@/utils/permission";
import {apiGetBusinessTripList,apiGetStatusOption,
} from "@/api/businessTrip/index";export default {name: "BusinessTrip",components: {Search,DialogForm,},data() {return {searchConfig: [{label: "申请日期",prop: "publishTime",type: "daterange",},{type: "select",label: "状态",prop: "processStatus",option: [],},{type: "input",label: "模糊查询",prop: "queryCondition",},],pageInfo: {pageNum: 1,pageSize: 10,total: 0,},tableData: [],childColumn: [{label: "起始日期",width: "120px",},{label: "结束日期",width: "120px",},{label: "申请天数",width: "120px",},{label: "目的地",width: "120px",},{label: "交通方式",width: "120px",},{label: "出差事由",width: "120px",},{label: "返程日期",width: "120px",},{label: "实际出差天数",width: "120px",},{label: "差补天数",width: "120px",},{label: "备注",width: "120px",},],disabled: true,currentItem: {},searchForm: {},loading: false,};},mounted() {this.getStatusOption();this.toApproval();},activated() {this.getList();this.toApproval();},methods: {checkRole,/*** @description 从首页过来自动打开弹窗*/toApproval() {const id = this.$route.query.approvalId;const jumpType = this.$route.query.jumpType;this.$nextTick(() => {if (jumpType == 21) {this.$refs.dialogFormRef.open("审批", id);} else if (jumpType == 22) {this.$refs.dialogFormRef.open("核定", id);}});},search(form) {this.searchForm = form;this.getList();},getList() {this.loading = true;const params = {...this.searchForm,...this.pageInfo,startApplyDate:this.searchForm.publishTime && this.searchForm.publishTime[0],endApplyDate:this.searchForm.publishTime && this.searchForm.publishTime[1],};Reflect.deleteProperty(params, "publishTime");apiGetBusinessTripList(params).then((response) => {this.tableData = response.data.records;this.pageInfo.total = response.data.total;}).finally(() => {this.loading = false;});},/*** @description 获取流程状态下拉*/getStatusOption() {apiGetStatusOption().then((response) => {this.searchConfig[1].option = response.data.map((item) => {return {label: item.name,value: item.id,};});});},addItem() {this.$refs.dialogFormRef.open("新增");},approval(row) {this.$refs.dialogFormRef.open("审批", row.id);},check(row) {this.$refs.dialogFormRef.open("核定", row.id);},editItem(row) {this.$refs.dialogFormRef.open("修改", row.id);},viewItem(row) {this.$refs.dialogFormRef.open("详情", row.id);},/*** @description 渲染子表*/renderHeader(h, { column, $index }) {const childTable = this.childColumn.map((item) => {return h("div",{style: {width: item.width,padding: "0 10px",textAlign: "center",flexShrink: 0,flexGrow: 0,},},item.label);});return h("div",{class: ["child-head"],},childTable);},submitSuccess() {this.$router.replace({ path: "/businessTrip", query: {} });this.getList();},},
};
</script><style lang="scss" scoped></style>

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

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

相关文章

品牌如何做好话题营销?这三点很关键

从“野性消费”到“疯四文学”&#xff0c;这些品牌让人记住的并不是某个内容&#xff0c;而是一个社交谈资&#xff0c;这些都算是成功的品牌话题&#xff0c;品牌话题的优势在于激活品牌&#xff0c;始终保持品牌活力&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;品牌…

免费3D模型网站大盘点,你推荐哪一个?

越来越多的设计师开始使用3D模型来提高效率、降低成本、提升效果和用户体验等。然而&#xff0c;寻找高质量的免费3D模型网站并不是一件容易的事情。今天&#xff0c;我们就来为大家介绍一些优秀的免费3D模型网站。 一、建e网 建e网是一个专业的室内设计资源平台&#xff0c;为…

Java的Lock(二)

自旋锁 VS 适应性自旋锁 堵塞或者notify一个Java线程需要操作系统切换CPU状态来完成(详情请参考11408)。这种状态切换需要耗费CPU时间。如果同步代码块种的内容过于简单。状态切换消耗的时间可能比用户代码执行的时间还要长。 在许多场景中,同步资源的锁定时间很短,为了这一…

初识aurora

高速接口 传输速率达到Gbit/s 硬件上的高速接口 SFP VPX FMC等 软件上的高速接口 高速接口的IP核 &#xff0c;起到串并转换等作用 &#xff0c;一般高速接口就调用IP核 auroraIP核 将有效数据打包成aurora帧格式再通过gt收发器传输出去 &#xff0c;一般用在两个fpga之…

电子防潮柜如何应对潮湿问题?

智能化时代的到来&#xff0c;让电子产品成为人们生活中的必需品&#xff0c;电子产品对存储环境的要求非常高。潮湿会产生发霉、生锈、氧化、腐蚀、变形等现象&#xff0c;缩短了电子产品的寿命。绝大部分电子产品都要求在清洁低湿干燥的环境中存放&#xff0c;环境中的温湿度…

【每周AI简讯】OpenAI推出王炸文生视频模型Sora

ChatGPT中文版https://ai7.pro OpenAI推出王炸文生视频模型Sora OpenAI 宣布推出名为 Sora 的新型文本到视频模型。Sora 能根据用户的文本提示&#xff0c;生成长达一分钟的逼真视频。它可以创造出细节丰富的场景、复杂的摄影机运动以及表情丰富的多个角色。Sora 是一种扩散模…

提取游戏音频文件.bnk

提取游戏音频文件.bnk 什么是.bnk准备Wwise-Unpacker工具使用Wwise-Unpacker工具总结 什么是.bnk .bnk其实是一种对音频的加密方式&#xff0c;一个.bnk文件中通常包含了多个语音文件&#xff0c;一般可以使用Wwise-Unpacker来解码.bnk格式文件 准备Wwise-Unpacker工具 Wwis…

网络原理 - HTTP/HTTPS(3)

HTTP请求 认识请求"报头" header的整体的格式也是"键值对"的结构. 每个键值对占一行,键和值之间使用分号进行分割. 报头的种类有很多,此处仅介绍几个常见的. Host 表示服务器主机的地址和端口.(Host和URL中的ip地址端口啥的,绝大部分情况下都是一样的,少…

解决Ubuntu中vscode右键没有create catkin package

右键发现没有这个create catkin package 解决方案&#xff1a; 查了一会发现安装个拓展就可以了 效果&#xff1a;

xilinx除法器的使用

平台&#xff1a;Vivado2018.3. 芯片&#xff1a;xcku115-flva1517-2-i (active) 最近学习使用了xilinx除法器&#xff0c;在使用过程中出现了很多次除法器的结果和我预计的结果不一致&#xff0c;特此记录学习一下。 参考文件&#xff1a;pg151.下载地址 pg151-div-gen.pdf …

【linux】查看openssl程序的安装情况

【linux】查看openssl程序的安装情况 1、查看安装包信息 $ rpm -qa |grep openssl 2、安装路径 $ rpm -ql openssl $ rpm -ql openssl-libs $ rpm -ql openssl-devel 3、相关文件和目录 /usr/bin/openssl /usr/include/openssl /usr/lib64/libssl.so.* /usr/lib64/libcrypto…

uniapp项目准备工作

1.封装请求 export const baseUrl function getHeaders () {let token uni.getStorageSync(token)let header {"access-token":token,// X-Requested-With: XMLHttpRequest,Content-Type: application/json; charsetUTF-8}return header } function reLogin(){/…

Filezilla 银河麒麟桌面操作系统V10(sp1)与Windows主机数据传输问题

银河麒麟桌面操作系统V10&#xff08;sp1&#xff09;与Windows主机数据传输问题 1. 关闭Windows主机的防火墙和KylinOS V10的防火墙 如果不知道怎么关闭的参考这两篇文章&#xff1a; https://blog.csdn.net/m0_70885101/article/details/127271517 https://blog.csdn.net/w…

扫盲:什么是webGPU,和webGL对比哪些优点?

web端的3D图像渲染&#xff0c;大都采用webGL&#xff0c;不过其性能让大家很崩溃&#xff0c;webGPU的出现&#xff0c;让大家看到了访问加速的可能&#xff0c;本文通过对比webGPU与webGL&#xff0c;给老铁们普及一下。老铁们如有数据可视化的设计和开发需求&#xff0c;可以…

算法之力扣数青蛙

题目连接 文章目录 题目解析算法原理第一步第二步第三步第三步第四步指向o 代码讲解代码实现 题目解析 先给大家来讲解一下这个题目的意思吧&#xff0c;这个题目是说呢给你一个蛙叫的字符串让你去设计一个算法求出发出这种蛙叫最少需要几只青蛙。比如说第一个样例发出这种叫声…

DAY55:动态规划(买卖股票的最佳时机3)

Leetcode: 309 最佳买卖股票时机含冷冻期 这道题比上面状态更多&#xff0c;是因为卖出股票后&#xff0c;你无法在第二天买入股票 (即冷冻期为1天)。 状态 状态一&#xff1a;持有股票状态&#xff08;今天买入股票&#xff0c;或者是之前就买入了股票然后没有操作&#xf…

【C/C++】实现Reactor高并发服务器 完整版

代码结构 文件介绍 InetAddress.h InetAddress类 ip和端口设置 Socket.h Socket类 设置fd Epoll.h epollfd 管理类 Channel.h Channel类 管理epoll以及对应回调函数实现 EventLoop.h EventLoop事件循环类 TcpServer.h 服务器类 tcpepoll.cpp 主函数 InetAddress.h #if…

桌面便签怎么设置提醒,哪个备忘录便签好?

2024年终于开工了&#xff0c;第一天上班比较迷茫&#xff0c;不知道做什么比较好&#xff0c;这个时候如果有一款简单好用且可提醒的桌面便签软件该多好。那么&#xff0c;桌面便签怎么设置提醒&#xff0c;哪个备忘录便签好&#xff1f; 桌面便签怎么设置提醒&#xff0c;哪个…

216961-98-7,BODIPY 493/503 SE,具有相对较长的激发状态寿命

文章关键词&#xff1a;216961-98-7&#xff0c;BODIPY 493/503 NHS 活化酯&#xff0c;BODIPY 493/503 NHS ester&#xff0c;BODIPY 493/503 SE 一、基本信息 产品简介&#xff1a;BODIPY染料是一种独特的荧光染料&#xff0c;由于其具有疏水性&#xff0c;特别适合用于染色…

基于芯驰 X9HP PTG4.1 在 yocto 中添加 Linux 应用

1.参考例程并添加应用 1.1 参考例程 &#xff08;1&#xff09;查看自带的串口测试例程 uart_test &#xff0c;查看 bb 文件怎么写的。 1.2 添加 printf-test 应用 &#xff08;1&#xff09;在 yocto/meta-semidrive/recipes-bsp/ 目录中 copy 自带例程 uart-test 改名为 …