el-table表格还可以这么玩

article/2025/4/25 0:18:59

六年代码两茫茫,不思量,自难忘
6年资深前端主管一枚,只分享技术干货,教你如何优雅地写代码

关注博主不迷路~

文章目录

      • 前言
      • 案例介绍
      • 案例截图
      • 效果预览
      • template模板
      • script部分
      • css
      • 总结


前言

我们都知道表格是横向渲染的,一行一行去展示。不过博主这里有个需求是纵向渲染,一列一列去展示…嗯…不难…做出来了,下面是全部代码,分享出来或许能帮到你们。

案例介绍

本案例点击添加可添加一列(为后一天时间),新添加列可取消,有数据了按钮会变成保存,当添加到10条数据,自动往后推一天,永远显示10条数据

案例截图

点击添加列
可取消和保存

效果预览

地址:https://1024code.com/codecubes/vpbfix9

template模板

<template><div class="app-container"><template><el-buttontype="primary"v-if="isAdd"icon="el-icon-plus"size="mini"v-hasPermi="['manager:trader:add']"@click="tableAdd":disabled="is10">添加</el-button><el-buttontype="primary"@click="dataSave"v-elsesize="mini":disabled="nonum"v-hasPermi="['manager:trader:edit']">{{isSave ? "保存":"取消"}}</el-button></template><el-table border  v-loading="loading" :data="tableData"><el-table-column label="日期" align="right"><el-table-column prop="name" align="center" label="汇率"><el-table-columnwidth="100px"prop="tableName"align="center"label="星期"><template slot-scope="scope"><div>{{ tableData[scope.$index].name }}</div></template></el-table-column></el-table-column></el-table-column><el-table-columnalign="center"v-for="(item, index) in headerData.length":key="index"><template slot-scope="scope"><div v-if="islastDay(headerData[index])"><el-input type="number" v-model="tableData[scope.$index].data[index]" @input="updataInput(tableData[scope.$index].data[index],tableData[scope.$index].ids[index],scope.$index,index)" controls-position="right"></el-input></div><div v-else>{{ tableData[scope.$index].data[index]}}</div></template><!-- 时间区域 --><template slot="header" slot-scope="{ $index }">{{ headerData[$index-1] }}</template></el-table-column><!-- 添加区域 --><el-table-columnalign="center"v-for="(item, index) in tableAdds":key="index + Date()"><template slot-scope="scope" v-if="tableAdds.length > 0"><el-input v-model="tableAdds[0]['data'+scope.$index]" controls-position="right"></el-input></template><template slot="header">{{ newTime }}</template></el-table-column></el-table></div>
</template>

script部分

export default {name: "trader",components: {},data() {return {width:"100%",height:"400px",is10:false,//数据是否已添加到10天后loading:false,cancel: false, //是否取消添加数据isAdd: true, //是否添加数据isSave:false,//是否保存loading: false, // 遮罩层ids: [], // 选中数组single: true, // 非单个禁用multiple: true, // 非多个禁用showSearch: true, // 显示搜索条件tableName: [],tableData: [{name:'星期一',data:[0.11,0.51]},{name:'星期二',data:[0.32,0.22]}], //表格数据headerData:['2022-08-25','2022-08-26'],//表格表头tableAdds: [], //添加的数据total: 0, // 总条数title: "", // 弹出层标题open: false, // 是否显示弹出层mustHitOptions: [], // 是否必中,0是  1否字典claimTypeOptions: [], // 领取类型字典prizeRewardOptions: [], // 是否有奖字典 0无奖 1有奖statusOptions: [], // 状态字典queryParams: {queryTime: "",}, // 查询参数newTime:undefined, // 新增的时间nonum:false,isUpdata:false,// 是否是修改操作upDated:{}, //修改后的数据(这里用对象可去重)aaa:[]};},watch:{//监听是否全部填写tableAdds:{handler(val, oldVal) {this.isSave = this.is0();if(this.isSave){this.isAdd = false;}},deep: true},//时间输入框'queryParams.queryTime'(val){if(val == ''){}}},created() {//this.getList();},methods: {//判断每列数据是否全部填写  是返回true 否则falseis0(){var is0;const adds = this.tableAdds[0];if(this.tableAdds.length > 0){for(let i in adds){if(adds[i] == ''){is0 = false;break;}else{is0 = true;}}}else{is0 = false;}return is0;},//判断日期是否超过今天 超过返回true  不超过返回falseislastDay(nowtime){var fan = false;var timearr = nowtime.split('-');var Year = new Date().getFullYear();//当前年var Month = new Date().getMonth() + 1;//当前月var Day = new Date().getDate();//当前日if(timearr[0] > Year || (timearr[0] == Year && timearr[1] > Month) || (timearr[1] == Month && timearr[2] > Day)){fan = true;}else{fan = false;}return fan;},//input修改事件//参数1:当前汇率  参数2:当前汇率对应的id//参数3:tableData的索引  参数4:当前汇率对应的id的索引updataInput(num,fromid,dataindex,idsindex){const arr = [];const tableData = this.tableData;const headerData = this.headerData;//遍历出全部数据for(let j=0;j<tableData.length;j++){for(let i=0;i<headerData.length;i++){arr.push({//'createTime':headerData[i],//'cardId':tableData[j].cardId,'id':tableData[j].ids[i],'moneyRate':tableData[j].data[i],})}}//遍历出修改了的数据for(let k=0;k<arr.length;k++){if(arr[k].id == fromid){this.upDated[fromid] = arr[k];}}this.isAdd = false;this.isSave = true;this.isUpdata = true;// if(num < -3 || num > 3){//   this.$message({//     message: '汇率配置范围-3至3',//     type: 'warning'//   });//   if(num < -3) this.tableData[dataindex].data[idsindex] = -3;//   if(num > 3) this.tableData[dataindex].data[idsindex] = 3;//    }if(num === '' || num === undefined || num === null){this.$message({message: '请配置汇率',type: 'warning'});this.nonum = true;}else{this.nonum = false;}},//保存或取消dataSave(){if(this.isSave){this.addFn();}else{this.tableAdds = [];this.isAdd = true;}},//保存数据addFn() {if(this.isUpdata){//是修改const data = [];const xindata = {};const xin2data = [];const upDated = this.upDated;//对象转数组for(let item in upDated){data.push(upDated[item]);}updateTrader(data).then(response=>{if(response.code == 200){this.$message.success("修改成功");this.isAdd = true;this.getList();}})}else{//是新增const arr = [];const adds = this.tableAdds[0];const tableData = this.tableData;for(let i in adds){arr.push({moneyRate:adds[i]})}for(let j=0;j<tableData.length;j++){arr[j].cardId = tableData[j].cardId}const data={createTime:this.newTime,tabData:arr}addTrader(data).then(response=>{if(response.code == 200){this.$message.success("添加成功");this.isAdd = true;this.tableAdds = [];this.getList();}})}},// 添加操作tableAdd() {this.isAdd = false;//获取到表格最后一个时间加一天let endtime = this.headerData.length == 0 ? this.formatDay(new Date().getTime()) : this.headerData[this.headerData.length-1];this.newTime = this.formatDay(new Date(endtime).getTime() + 3600 * 1000 * 24);//确保10条数据(数据大于10条,删除首条)const tableData = this.tableData;let datalength = this.headerData.length;if(datalength >= 10){for(let i =0;i<tableData.length;i++){tableData[i].data.splice(0,1);}this.headerData.splice(0,1);}const add ={};for(var i =0;i<tableData.length;i++){add['data'+i] = '';}this.tableAdds.push(add);},/*** 日期格式化*/formatDay(cellValue) {if (cellValue == null || cellValue == "") return "";var date = new Date(cellValue);var year = date.getFullYear();var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();return year + '-' + month + '-' + day;}},
};

返回表头的长度对应数据的长度,这是关键,否则表格不成立
必须要后端配合返回相应的数据结构哦

      tableData: [{name:'星期一',data:[0.11,0.51]},{name:'星期二',data:[0.32,0.22]}], //表格数据headerData:['2022-08-25','2022-08-26'],//表格表头

css

<style lang="scss" scoped>
// 给表头加斜线的css
::v-deep .el-table th {overflow: initial;
}
::v-deep .el-table .el-table__header-wrapper th {height: 30px !important;
}
::v-deep .el-table--medium th {padding: 0 !important;
}
::v-deep .el-table thead tr:first-of-type th:first-of-type,
::v-deep .el-table thead tr:nth-of-type(2) th:first-of-type {border-bottom: none;
}
::v-deep .el-table thead tr:first-of-type th:first-of-type .cell {text-align: right;
}
::v-deep .el-table thead tr:nth-of-type(2) th:first-of-type .cell {padding-left: 0;position: absolute;top: 12px;left: 16px;z-index: 99;
}
::v-deep .el-table thead tr:last-of-type th:first-of-type .cell {text-align: left;
}
::v-deep .el-table thead tr:first-of-type th:first-of-type:before,
::v-deep .el-table thead tr:last-of-type th:first-of-type:before {content: "";position: absolute;width: 1px;background-color: #dfe6ec;display: block;
}
::v-deep .el-table thead tr:first-of-type th:first-of-type:before {height: 198px; //根据情况调整top: 0;left: 0; //根据情况调整transform: rotate(-32deg); //根据情况调整transform-origin: top;z-index: 2;
}
::v-deep .el-table thead tr:last-of-type th:first-of-type:before {height: 112px; //根据情况调整top: -60px;left: 0; //根据情况调整transform: rotate(-62deg); //根据情况调整transform-origin: top;z-index: 2;
}
::v-deep .el-input{width: 90%;.el-input__decrease,.el-input__increase{background: #FFFFFF;}
}
</style>

当我们需要覆盖element-ui中的样式时只能通过深度作用选择器,即::v-deep,也叫样式穿透

总结

不论遇到一些多棘手的需要,首先要先静下心去思考,其次多看文档,利用文档里的方法或一些参数,相互结合去寻求解决的办法,举一反三,多尝试。

✨原 创 不 易 , 还 希 望 各 位 支 持
👍 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 !
⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 !
✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 !


http://chatgpt.dhexx.cn/article/sDGWb99X.shtml

相关文章

html使table整体居中,如何让整个table表格居中?

早期做网站都离开表格的使用&#xff0c;表格的对齐方式居中又是常用属性。居中最简章的方法就是直接在作用域写上&#xff1a;text-align:center&#xff0c;表格的话直接在table里写上aligncenter就可以了。不过表格已不是当下布局主流&#xff0c;如果习惯于表格布局的同学们…

Html——之table表格

表格&#xff08;table&#xff09;的应用&#xff1a; 表格的创建&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>test1</title> <--表格标记--> </head> <body><table>…

前端table表格的用法

文章目录 一、table的基础用法二、table属性三、合并单元格拓展总结 一、table的基础用法 代码如下&#xff1a; <table><tr>//第一行<td>第一行第1列</td><td>第一行第2列</td></tr><tr>//第二行<td>第二行第1列<…

HTML table表格详解

一、表格属性 表格属性 用法 border 代表表格边框厚度 width height 表格宽高 align table tr td 设置水平方向对齐方式 默认值left center right cellspacing 单元格到单元格距离 cellpadding 单元格文字到单元格边框距离 bgcolor 表格背景颜色 table tr td 都可以…

element-ui实现table表格的嵌套(table表格嵌套)功能实现

最近在做电商类型的官网&#xff0c;希望实现的布局如下&#xff1a;有表头和表身&#xff0c;所以我首先想到的就是table表格组件。 表格组件中常见的就是&#xff1a;标题和内容一一对应&#xff1a; 像效果图中的效果&#xff0c;只用基础的表格布局是不行的&#xff0c;因…

table表格

在HTML中&#xff0c;创建表格需要使用table标签 学习table之前&#xff0c;先了解下table标签的常用属性 属性值说明align left center right 规定标的的对齐方式&#xff0c;left左对齐&#xff0c;center居中&#xff0c;right右对齐&#xff1b;bgcolor rgb(x,x,x) #xxx…

table(表格)的简单介绍

table&#xff08;表格&#xff09;的创建 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><table border"1" width"500" height"300" bgcolor…

table表格详细介绍

表格标签 table 我们在浏览网页时经常能发现段落、列表、图片等等元素出现比较多&#xff0c;但偶尔呢&#xff0c;也会看到一些表格元素&#xff0c;那么表格在代码中如何实现呢&#xff1f; 一个完整的表格应该是由table、thead、tbody、tfoot、tr、th、td组成。那么这么多…

table表格基础知识及简单运用

1.什么是table表格 在HTML中我们用< table >标签来定义表格&#xff0c;它和Excel表格类似&#xff0c;都包括行、列、单元格、表头等&#xff0c;但是在功能方面HTML的表格远不如Excel强大。 2.table的常用属性 margin&#xff1a;主要设置表格的外边框padding&#…

HTML中Table表格的使用与漂亮的表格模板

1、表格标记 表格是网页中十分重要的组成元素。表格用来存储数据&#xff0c;包含标题、表头、行和单元格。在HTML语言中&#xff0c;表格标记使用符号<table>表示。定义表格光使用<table>是不够的&#xff0c;还需要定义表格中的行、列、标题等内容。 标记说明表…

西方世界的劫难Ⅳ:真神的国度--十大支线攻略

西方世界的劫难&#xff0c;是在大一即将放暑假的前几天&#xff0c;两位大佬带我打的(犹记当时一个三射箭抢了全部的兵&#xff0c;偷笑)&#xff0c;几经挫折&#xff0c;加上一些前辈的经验&#xff0c;自己也算是真正意义上稍微理解了这个地图&#xff0c;于是记录一下西方…

如何评价伊隆·马斯克创办的脑机接口公司 Neuralink ?

作者&#xff1a;李明骏 链接&#xff1a;https://www.zhihu.com/question/57713553/answer/154395266 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 以此为引&#xff0c;从定义和原理出发谈谈脑机接口的商业发展…

第一视角:深度学习框架这几年

‍‍‍‍‍‍‍‍ 作者 | Peter潘欣 转自 | 夕小瑶的卖萌屋 和深度学习框架打交道已有多年时间。从Google的TensorFlow, 到百度的PaddlePaddle&#xff0c;再到现在腾讯的无量。很庆幸在AI技术爆发的这些年横跨中美几家公司&#xff0c;站在一个比较好的视角看着世界发生巨大的…

挠场的科学丨五、二十一世纪的挠力文明

摘自李嗣涔教授《挠场的科学》 十九世纪末&#xff0c;特斯拉发明多相交流马达&#xff0c; 促成了二十世纪电力文明的开展&#xff0c; 他也提出几项当时认为科幻的创新概念。 这些基于挠场作用的概念&#xff0c; 及挠场侦测器的发明&#xff0c; 将会在二十一世纪促成挠…

带你快速看完9.8分神作《Effective Java》—— 序列化篇(所有RPC框架的基石)

&#x1f525; Java学习&#xff1a;Java从入门到精通总结 &#x1f525; Spring系列推荐&#xff1a;Spring源码解析 &#x1f4c6; 最近更新&#xff1a;2022年1月20日 &#x1f34a; 个人简介&#xff1a;通信工程本硕&#x1f4aa;、阿里新晋猿同学&#x1f315;。我的故…

青岛黄海学院《燃情世界杯》

《燃情世界杯》发行海报 “真的被抢了。虽然来之前就做过很多思想准备&#xff0c;但没想到那么快。刚才在亚历山大贫民区&#xff0c;一伙人突然拔出两把枪,青岛黄海学院&#xff0c;顶着我们录音师的肚子和大腿&#xff0c;一瞬间就抢了他手机&#xff0c;然后飞速逃跑。”北…

“香港女车神”李慧诗场地自行车世界杯香港站连夺两金纪录

1月27日&#xff0c;场地单车世界杯香港站赛事举行。中国香港队主将李慧诗(中)在女子凯琳赛中夺金。图为颁奖礼现场。中新社记者 麦尚旻 摄 中新社香港1月27日电 (香企容)场地自行车世界杯香港站27日在香港举行。“港队王牌女将”李慧诗在凯琳赛上再夺一金&#xff0c;累计26日…

纯CSS写个绿荫足球场,为世界杯喝彩

​ 那要写出这样一个界面,首先了解一下球场结构,如图,具体比例就不坐详细说明了自行百度. ​ 颜色上白线绿地没啥问题,发球弧和角球线通过父级的覆盖可以做到部分弧线效果. 先看一下整体效果: 具体地: 1 )场地外围我们使用混合色: background: radial-gradient(sandybrown,…

历届世界杯冠军

1930年7月13日&#xff0c;第一届世界足球锦标赛&#xff08;后称世界杯赛&#xff09;&#xff0c;在乌拉圭首都蒙得维的亚的“百周年纪念”体育场&#xff08;1930年正值乌拉圭独立一百周年&#xff0c;由此得名&#xff09;隆重开幕。玻利维亚、巴西、智利、墨西哥、巴拉圭、…

世界杯看不明白?没事咱们还会画足球吗。

2022卡塔尔世界杯如期而至&#xff0c;看到朋友圈&#xff0c;群聊里大家对“战况”分析的头头是道&#xff0c;我只能在一旁干瞪眼&#xff0c;插不上嘴。我的世界杯记忆源自于2014巴西世界杯&#xff0c;球员记忆也只有梅西&#xff0c;可以说是个“球盲”了。眼看自己没啥参…