el-table自定义表格数据

如上所示:

表格内的数据是:当前班级所在名次段的人数 / 当前班级1至n名的累计人数    5/12  也就是  5/7+5

需要变更为:

  • 截至到当前名次段总人数(上次考试) / 截至到当前名次段总人数(本次考试)

  • 人数最多的班级 标红,加粗;人数最少的班级 标蓝,加粗。

 先说一下第一种的实现方式:就是用这种笨办法,也能实现

 <el-table:data="rankData"style="width: 100%":header-cell-style="headerStyleEvent"borderclass="pptTable":cell-style="cellStyle"><el-table-column prop="l51A100" label="51-100" align="center"><template slot-scope="scope"><span>{{ scope.row.l51A100 }}/{{ scope.row.l1A50 + scope.row.l51A100 }}</span></template></el-table-column><el-table-column prop="l401A450" label="401-450" align="center"><template slot-scope="scope"><span>{{ scope.row.l401A450 }}/{{scope.row.l1A50 +scope.row.l51A100 +scope.row.l101A150 +scope.row.l151A200 +scope.row.l201A250 +scope.row.l251A300 +scope.row.l301A350 +scope.row.l351A400 +scope.row.l401A450}}</span></template></el-table-column></el-table>

优化后的代码:

<template><div><p class="pptTitle">各班各名次段人数(年级所有人)</p><el-table:data="rankData"style="width: 100%":header-cell-style="headerStyleEvent"borderclass="pptTable":cell-style="cellStyle"><el-table-column prop="classNo" label="班级"> </el-table-column><el-table-columnv-for="(item, index) in range":key="index":prop="item.value":label="item.name"align="center"><template slot-scope="scope"><span>{{ scope.row[item.value] }}/{{ accumulate(index, scope.$index) }}</span></template></el-table-column></el-table></div>
</template><script>
import { mixins } from "./mixins";
import _ from "lodash";
export default {mixins: [mixins],props: {rankData: {type: Array,default: () => []}},data() {return {};return {range: [{name: "1-50",value: "l1A50"},{name: "51-100",value: "l51A100"},{name: "101-150",value: "l101A150"},{name: "151-200",value: "l151A200"},{name: "201-250",value: "l201A250"},{name: "251-300",value: "l251A300"},{name: "301-350",value: "l301A350"},{name: "351-400",value: "l351A400"},{name: "401-450",value: "l401A450"}]};},computed: {rankArr() {let newRank = _.cloneDeep(this.rankData);const accumulation = newRank.map(v => {delete v.classNo;return Object.values(v);});return accumulation;}},methods: {accumulate(index, columnIndex) {const countArr = this.rankArr[columnIndex].slice(0, index + 1);const sumByIndex = countArr.reduce((prev, cur, i) => {return prev + cur;}, 0);return sumByIndex;}}
};
</script>
<style lang="scss" scoped>
.el-table {border: 1px solid #000;
}
</style>

关键代码: 

computed: {
    rankArr() {
      let newRank = _.cloneDeep(this.rankData);
      const accumulation = newRank.map(v => {
        delete v.classNo;
        return Object.values(v);
      });
      return accumulation;
    }
  },


  methods: {
    accumulate(index, columnIndex) {
      const countArr = this.rankArr[columnIndex].slice(0, index + 1);
      const sumByIndex = countArr.reduce((prev, cur, i) => {
        return prev + cur;
      }, 0);
      return sumByIndex;
    }
  } 

页面使用 accumulate方法:

 <template slot-scope="scope">
          <span>{{ scope.row[item.value] }}/{{ accumulate(index, scope.$index) }}</span>
 </template>

以上是第一版的实现方式

现在来说说更新需求后的实现方式:(这里稍微复杂的点在颜色)

  • 截至到当前名次段总人数(上次考试) / 截至到当前名次段总人数(本次考试)

  • 人数最多的班级 标红,加粗;人数最少的班级 标蓝,加粗。

<template><div style="height: 100vh"><p class="pptTitle">各班各名次段人数变化(上次/本次)</p><el-table:data="rankData"style="width: 100%":header-cell-style="headerStyleEvent"borderclass="pptTable":cell-style="cellStyle"><el-table-column prop="classNo" label="班级"> </el-table-column><el-table-columnv-for="(item, index) in range":key="index":prop="item.value":label="item.name"align="center"><template slot-scope="scope"><span :style="computedStyle(scope.row[item.label], item.label)">{{scope.row[item.label]}}</span><span>/</span><span :style="computedStyle(scope.row[item.value], item.value)">{{scope.row[item.value]}}</span></template></el-table-column></el-table></div>
</template><script>
import { mixins } from "./mixins";
export default {mixins: [mixins],props: {rankData: {type: Array,default: () => []}},data() {return {range: [{name: "1-50",value: "before50",label: "previousBefore50"},{name: "1-100",value: "before100",label: "previousBefore100"},{name: "1-150",value: "before150",label: "previousBefore150"},{name: "1-200",value: "before200",label: "previousBefore200"},{name: "1-250",value: "before250",label: "previousBefore250"},{name: "1-300",value: "before300",label: "previousBefore300"},{name: "1-350",value: "before350",label: "previousBefore350"},{name: "1-400",value: "before400",label: "previousBefore400"},{name: "1-450",value: "before450",label: "previousBefore450"}]};},methods: {// 颜色computedStyle(value, prop) {const propData = this.rankData.map(e => e[prop]);// console.log(value, propData, prop);// console.log(Math.max.apply(null, propData), "ll");const max = Math.max.apply(null, propData);const min = Math.min.apply(null, propData);if (value === max) {return { color: "red", fontWeight: "bold" };}if (value === min) {return { color: "blue", fontWeight: "bold" };}return {};}}
};
</script>
<style lang="scss" scoped>
.el-table {border: 1px solid #000;
}
</style>

 完成如下:

 

 

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

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

相关文章

C++共享和保护——(5)编译预处理命令

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 耕耘者的汗水是哺育种子成长的乳汁&am…

【数据结构】栈的使用|模拟实现|应用|栈与虚拟机栈和栈帧的区别

目录 一、栈(Stack) 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1. 改变元素的序列 2. 将递归转化为循环 3. 括号匹配 4. 逆波兰表达式求值 5. 出栈入栈次序匹配 6. 最小栈 1.5 概念区分 一、栈(Stack) 1.1 概念 栈&#xff1a;一种特殊的线性表&…

SpringBoot之分层解耦以及 IOCDI的详细解析

### 3.2 分层解耦 刚才我们学习过程序分层思想了&#xff0c;接下来呢&#xff0c;我们来学习下程序的解耦思想。 解耦&#xff1a;解除耦合。 #### 3.2.1 耦合问题 首先需要了解软件开发涉及到的两个概念&#xff1a;内聚和耦合。 - 内聚&#xff1a;软件中各个功能模块内…

3d抄数逆向建模服务造纸机械叶轮三维扫描曲面建模-CASAIM

在造纸机械中&#xff0c;叶轮是重要的组成部分&#xff0c;造纸机械叶轮在使用过程中会承受较大外力的摩擦&#xff0c;长期使用容易导致外观变形破损&#xff0c;从而降低叶轮的工作效率和精度。因此&#xff0c;定期生产制作同类型的造纸机械叶轮产品&#xff0c;以用于替换…

YOLOv5改进 | SPPF | 将RT-DETR模型AIFI模块和Conv模块结合替换SPPF(全网独家改进)

一、本文介绍 本文给大家带来是用最新的RT-DETR模型中的AIFI模块来替换YOLOv5中的SPPF。RT-DETR号称是打败YOLO的检测模型&#xff0c;其作为一种基于Transformer的检测方法&#xff0c;相较于传统的基于卷积的检测方法&#xff0c;提供了更为全面和深入的特征理解&#xff0c…

2023.12.17Linux基础命令

ls -l详细信息 -a所有 springcloud微服务 ctrlalt鼠标左键&#xff0c;从虚拟机中回到本机 执行这两条语句 拿到远程主机的ip地址之后就要试图连接 要实现连接&#xff0c;就要有远程连接的软件 ssh和http一样&#xff0c;也是一种协议 SSH 是 Secure Shell&am…

GD32F4中断向量查询

中断向量表 中断向量对应函数 __Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI HandlerDCD HardFault_Handler ;…

客户关系管理系统 crm

系统开发环境以及版本 操作系统&#xff1a; Windows_7集成开发工具&#xff1a; Eclipse EE_4.7编译环境&#xff1a;JDK_1.8Web服务器&#xff1a;Tomcat_9.0数据库&#xff1a;MySQL_5.7.23 系统框架 spring框架springmvc框架mybatis框架Logback日志框安全验证框架maven框架…

std::mem_fn函数

第一次遇到这个函数&#xff0c;记录一下 std::mem_fn 是 C 标准库 <functional> 头文件中提供的函数模板&#xff0c;用于生成成员函数的函数对象。它允许将成员函数包装成可调用对象&#xff0c;用于传递给标准库算法、函数对象、以及一些支持可调用对象的函数。 templ…

车载软件易受攻击,如何规避嵌入式软件漏洞

在汽车开发中&#xff0c;汽车网络安全至关重要&#xff0c;特别是现在汽车软件变得日益互联。阅读本文&#xff0c;了解如何预防汽车网络安全漏洞。 为什么汽车网络安全很重要&#xff1f; 如今&#xff0c;互联汽车的解决方案远不只有简单的从A点到B点。通过实时数据共享、应…

kali-WinRaR高级配置

文章目录 操作环境一、下载WinRaR二、准备工作三、文件名处理四、开始监听 操作环境 kali windows 一、下载WinRaR http://www.winrar.com.cn/ 二、准备工作 msfvenom -p windows/meterpreter/reverse_tcp LHOST192.168.64.129 LPORT4444 -f exe -o YouGuess.exe┌──(…

【论文阅读】FreeU: Free Lunch in Diffusion U-Net

paper&#xff1a;https://arxiv.org/abs/2309.11497 code&#xff1a;GitHub - ChenyangSi/FreeU: FreeU: Free Lunch in Diffusion U-Net 1.intro 贡献&#xff1a; •研究并揭示了U-Net架构在扩散模型中去噪的潜力&#xff0c;并确定其主要骨干主要有助于去噪&#xff0c…