tnblog
首页
视频
资源
登录

element ui table表格行转列,月份数据行转列

838人阅读 2024/10/16 15:50 总访问:689269 评论:0 收藏:0 手机
分类: 前端

我们需要展示一个这样的表格数据

接口返回的数据源是这个样子

有评估,实验,产教的数据接口回来,这里只展示了评估的数据接口作为示例,相当于每个平台每月一条数据:

  1. {
  2. "code": 0,
  3. "data": [
  4. {
  5. "systemName": null,
  6. "year": 2024,
  7. "month": 9,
  8. "quantity": 0,
  9. "completPr": 0.2164,
  10. "planCompletePr": 0.8455172413793103448275862069
  11. },
  12. {
  13. "systemName": null,
  14. "year": 2024,
  15. "month": 10,
  16. "quantity": 0,
  17. "completPr": 0.3224,
  18. "planCompletePr": 0.4787902592301649646504320503
  19. },
  20. {
  21. "systemName": null,
  22. "year": 2024,
  23. "month": 11,
  24. "quantity": 0,
  25. "completPr": 0.0,
  26. "planCompletePr": 0.0
  27. },
  28. {
  29. "systemName": null,
  30. "year": 2024,
  31. "month": 12,
  32. "quantity": 0,
  33. "completPr": 0.0,
  34. "planCompletePr": 0.0
  35. },
  36. {
  37. "systemName": null,
  38. "year": 2025,
  39. "month": 1,
  40. "quantity": 0,
  41. "completPr": 0.0,
  42. "planCompletePr": 0.0
  43. }
  44. ],
  45. "success": true,
  46. }

接口出来的数据源要先处理成这个样子的,这样行专列好处理一点

  1. const rawData = [
  2. { "type": "评估", "month": 9, "CompleteType": "目标达成率", "CompleteValue": 0.2164 },
  3. { "type": "评估", "month": 10, "CompleteType": "整体完成率", "CompleteValue": 0.7164 },
  4. { "type": "审计", "month": 9, "CompleteType": "目标达成率", "CompleteValue": 0.6164 },
  5. { "type": "审计", "month": 10, "CompleteType": "整体完成率", "CompleteValue": 0.5164 },
  6. ];

具体的处理逻辑

数据源按照类型(type)、月份(month)、完成类型(CompleteType)和完成值(CompleteValue)组织好的,那么处理起来会简单很多。你可以直接使用这个数据来生成表格,其中月份可以转换为“9月”、“10月”等格式,完成值可以格式化为百分比。

以下是一个处理这种数据源的JavaScript函数,它将数据转换为适合Element UI表格的格式:

  1. const rawData = [
  2. { "type": "评估", "month": 9, "CompleteType": "目标达成率", "CompleteValue": 0.2164 },
  3. { "type": "评估", "month": 10, "CompleteType": "整体完成率", "CompleteValue": 0.7164 },
  4. { "type": "审计", "month": 9, "CompleteType": "目标达成率", "CompleteValue": 0.6164 },
  5. { "type": "审计", "month": 10, "CompleteType": "整体完成率", "CompleteValue": 0.5164 },
  6. // 可以添加更多数据
  7. ];
  8. const monthMap = {
  9. 9: "9月",
  10. 10: "10月",
  11. // 添加更多月份映射
  12. };
  13. const transformData = (data) => {
  14. const result = [];
  15. const types = [...new Set(data.map(item => item.type))];
  16. const completeTypes = [...new Set(data.map(item => item.CompleteType))];
  17. types.forEach(type => {
  18. completeTypes.forEach(completeType => {
  19. const row = {
  20. type: type,
  21. indicator: completeType,
  22. ...Object.keys(monthMap).reduce((acc, month) => {
  23. const value = data.find(item => item.type === type && item.CompleteType === completeType && item.month === parseInt(month, 10))?.CompleteValue;
  24. let returnValue = "0%"
  25. if(value>=0){
  26. returnValue=(value * 100).toFixed(2)
  27. }
  28. else{
  29. returnValue="-"
  30. }
  31. return { ...acc,[monthMap[month]]:returnValue };
  32. // return { ...acc, [monthMap[month]]: value ? (value * 100).toFixed(2) + "%" : "-" };
  33. }, {})
  34. };
  35. result.push(row);
  36. });
  37. });
  38. return result;
  39. };
  40. const tableData = transformData(rawData);
  41. console.log(tableData);

这个函数transformData会生成一个数组,每个元素都是一个对象,包含type(类型)、indicator(指标,即CompleteType)、以及各个月份的完成值(已经转换为百分比格式)。如果某个月份没有对应的数据,则显示为'-'

在Vue组件中,你可以直接使用这个tableData来渲染Element UI表格:

  1. <template>
  2. <el-table :data="tableData">
  3. <el-table-column prop="type" label="类型" />
  4. <el-table-column prop="indicator" label="指标" />
  5. <el-table-column
  6. v-for="(month, key) in monthMapValues"
  7. :key="key"
  8. :label="month"
  9. :prop="month"
  10. :formatter="formatPercentage"
  11. />
  12. </el-table>
  13. </template>
  14. <script>
  15. export default {
  16. data() {
  17. return {
  18. tableData: [], // 这里将使用transformData函数的结果来赋值
  19. monthMapValues: [
  20. "9月",
  21. "10月",
  22. // 添加更多月份
  23. ]
  24. };
  25. },
  26. created() {
  27. this.tableData = transformData(this.rawData); // 假设this.rawData是上面定义的rawData
  28. },
  29. methods: {
  30. formatPercentage(row, column, cellValue) {
  31. // 这个方法用于格式化百分比,但在这个例子中我们已经在transformData中完成了格式化
  32. // 所以这里可以直接返回cellValue,或者根据需要进行进一步处理
  33. return cellValue;
  34. },
  35. // 如果你想在组件中直接使用transformData函数,也可以将它定义在这里
  36. // 然后调用this.transformData(this.rawData)来赋值给this.tableData
  37. // 但注意,这样做的话,你需要将rawData也定义在data中,或者以props的形式传入组件
  38. },
  39. // 注意:由于我们在created钩子中已经赋值了tableData,所以不需要再使用computed属性来动态计算它
  40. // 同时,我们直接在data中定义了monthMapValues数组来作为表格的列名(月份)
  41. };
  42. </script>
  43. <!-- 注意:在实际代码中,你应该将rawData替换为从API或其他来源获取的数据 -->
  44. <!-- 并且确保在created钩子或其他适当的生命周期钩子中调用transformData函数 -->

请注意,上面的Vue组件示例中,我假设rawData已经在组件的某个地方定义好了(可能是作为data属性,或者是作为props传入的)。在实际应用中,你需要根据你的数据来源来相应地调整这部分代码。同时,由于我们已经在transformData函数中完成了百分比的格式化,所以formatPercentage方法在这里可能并不需要做什么额外的处理,除非你有其他的格式化需求。

更多详细逻辑参考

https://www.tnblog.net/aojiancc2/article/details/8481#%E5%AF%B9%E6%8E%A5%E7%9C%9F%E5%AE%9E%E7%9A%84%E6%8E%A5%E5%8F%A3%EF%BC%8C%E5%8A%A0%E4%B8%8A%E8%A1%8C%E8%BD%AC%E5%88%97%E7%9A%84%E6%95%88%E6%9E%9C


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

element ui table 表格行颜色自定义。单元格颜色 。根据条件改变行或者单元格的颜色

行列样式主要是这几个 属性名 描述 回调函数 row-class-name 行的 className 的回调方法,也可以使用字符...

element ui table 表格获取 行号列数

方法一:页面 &lt;el-table-column prop=&quot;courseName&quot; label=&quot;测试获取行号&quot; align=&quot;center&quo...

element ui table 表格行颜色自定义单元格颜色自定义。背景颜色自定义。风格自定义

[TOC]实现效果一效果图 代码如下template:&lt;template&gt; &lt;div class=&quot;emergencyEvents-container&quot;&gt;...

element ui table 表格自定义边框样式边框颜色。合并单元格合并行。element ui table表格行转列

设计图: [TOC]具体的代码和样式(表格没有加上合并行的)关于自定义边框样式都加了星号的 &lt;template&gt; &lt;di...

css弹性盒子flex布局

css弹性盒子由于版本不同浏览器问题造成了一些不同的写法display:flexbox;在google浏览器中如果使用下面的写法就不行displa...

可输入下拉文本框据输入动态加载数据 jquery-editable-select

用到一个jquery-editable-select的控件github地址:https://github.com/indrimuska/jquery-editable-select这个插件的原理是...

.net mvc分部页.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

css中单位pxemrem和vh/vw的理解

&gt;px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。em是相对长度单位。相对于当前对象内文本的字...

让IIS支持webp格式图片让IIS支持vtt格式iis设置mime类型iis配置支持的类型

webp格式图片可以让图片体积变小。也让下载图片变得更加困难一点 在线制作webp工具 https://www.upyun.com/webp?utm_mediu...

网页上传文件断点续传的实现无视文件大小上传以及datatables基本用法

首先明白js是客户带执行代码,c#是服务器上执行代码。本地文件需要用到js处理,服务器端接受c#代码处理1.HTML页面,文件信...

如何使用图标像使用文字一样使用文本图标的方法

1.首先在Iconfont-阿里巴巴矢量图标库上面找到你需要的图标然后加入你的购物车然后选择图标;注意:每个类型的图标会大小不...

使用七牛云的cdn服务提高图片的加载速度

CDN介绍CDN的全称是Content Delivery Network,即内容分发网络。CDN加速主要是加速静态资源,如网站上面上传的图片、媒体,...

通俗易懂什么是.NET?什么是.NET Framework?什么是.NET Core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

JS监听input、keydown有输入法时打字完成后触发事件

在给输入框绑定input或keydown事件时预期效果是有输入法时,输入中文后触发事件,不希望输一个字母就触发一次事件可以用到c...
如果有缘,错过了还会重来,如果无缘,相遇了也会离开
排名
9
文章
115
粉丝
5
评论
5
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术