当前位置: 首页 > news >正文

vue elementui table给表格中满足条件的每一条记录添加计时器

需求:
在前端给表格中给满足条件的每一条记录增加一个计时器,用于计算工作时长。

1.数据库中存储的有每条记录的作业开始时间,将当前时间和作业开始时间计算一个差值,作为作业时长的初始值;
2.把满足条件的每条记录绑定一个计时器,且将每条记录作业时长的初始值作为计时开始值,在此基础上每分钟增加计时;
3.数据状态变化时及时清除不需要的定时器,每次加载表格数据时清除所有的计时器,重新初始化计时器数组,重新绑定计时器。

    <el-table ref="tableData" v-loading="listLoading" :data="tableData" border stripe style="width: 100%" max-height="250" highlight-current-row><el-table-column  prop="carNumber" label="车牌号"  align="center" /><el-table-column prop="carState" label="车辆状态" align="center"  /><el-table-column prop="workStartTime" label="作业开始时间" align="center" /><el-table-column prop="workEndTime" label="作业结束时间" align="center"/><el-table-column prop="duration" label="作业时长(分)" align="center" /><el-table-column align="center" label="操作" fixed="right" width="240" class-name="small-padding"><template slot-scope="scope"><el-button type="primary" size="small" @click="endRow(scope.$index, scope.row)">结束工作</el-button></template></el-table-column></el-table><script>export default {data() {return {tableData: [],  //列表数据timers: [] // 计时器数组}},mounted() {// 加载表格数据this.getDataList()},beforeDestroy() {if (this.timers.length > 0) {// 清除所有的定时器this.timers.forEach((timer) => {clearInterval(timer)})}},methods:{// 加载表格数据getDataList() {if (this.timers.length > 0) {// 清除所有的定时器this.timers.forEach((timer) => {clearInterval(timer)})}// 初始化计时器数组this.timers = []// 调用后台接口获取表格数据(此处省略.)// 给符合条件的每条数据绑定一个计时器this.tableData.forEach((element) => {if (element.carState === '3') {//调用计时器,传入每条数据this.continueTime(element)}})},// 持续时间计算continueTime(row) {//用当前时间-工作开始时间,获取一个时间初始值,转换成时间戳方便计算,单位是毫秒let calltime = new Date().getTime() - new Date(row.workStartTime).getTime()// row.duration-是持续时间的键值,转换成分钟 (即为当前实际工作时长)row.duration = Math.floor(calltime / 1000 / 60)let intervalId = setInterval(() => {// 1000-一秒, 1000*60_一分钟// 持续时间就是 + 1min// 并且把值绑到每一条数据中,方便取值调用接口row.duration = row.duration + 1console.info(row.carNumber + ' , ' + row.duration + ' , ' + intervalId)}, 1000 * 60)// 把计时器添加到数组中this.timers.push(intervalId)},//结束工作endRow(index, row) {console.info('工作时长为:'+row.duration)//调用接口处理数据CARAPI.endInfo(row).then((res) => {//重新加载数据this.getDataList()this.$message({type: 'success',message: '作业已结束!'})})}}}</script>

效果图:
在这里插入图片描述
一分钟后,界面上的作业时长(分)自动刷新为:
在这里插入图片描述

相关文章:

  • 低代码平台框架:开源选型、实践与应用深度解析
  • C++拷贝构造函数、运算符重载函数、赋值运算符重载函数、前置++和后置++重载等的介绍
  • ThreadLocal的原理
  • 深入浅出简单工厂模式及其在 Spring 框架中的应用
  • 【专业英语 复习】第9章 Privacy, Security,and Ethics
  • 【Flask】学习
  • 丰臣秀吉-读书笔记六
  • 沙奇里再造世界波,容声注定与经典结缘
  • 如何验证证书的合法性
  • MaxWell实时监控Mysql并把数据写入到Kafka主题中
  • Linux下VSCode的安装和基本使用
  • 数组和链表的区别是什么?
  • Pycharm怎么默认终端连接远程服务器
  • 【因果推断python】50_去偏/正交机器学习2
  • 深入讲解C++基础知识(一)
  • [译]如何构建服务器端web组件,为何要构建?
  • javascript 哈希表
  • Laravel Mix运行时关于es2015报错解决方案
  • Otto开发初探——微服务依赖管理新利器
  • rc-form之最单纯情况
  • Vue 动态创建 component
  • 从setTimeout-setInterval看JS线程
  • 飞驰在Mesos的涡轮引擎上
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 模型微调
  • 如何解决微信端直接跳WAP端
  • 深入浏览器事件循环的本质
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 手机端车牌号码键盘的vue组件
  • 鱼骨图 - 如何绘制?
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​人工智能书单(数学基础篇)
  • # dbt source dbt source freshness命令详解
  • ## 1.3.Git命令
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (AngularJS)Angular 控制器之间通信初探
  • (Python) SOAP Web Service (HTTP POST)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (七)Java对象在Hibernate持久化层的状态
  • (一)kafka实战——kafka源码编译启动
  • (一)基于IDEA的JAVA基础10
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net dataexcel 脚本公式 函数源码
  • .NET Framework .NET Core与 .NET 的区别
  • .net framework 4.8 开发windows系统服务