首页 > 其他分享 >el-table表格行状态进度条

el-table表格行状态进度条

时间:2023-10-13 14:12:30浏览次数:39  
标签:el 定时器 timeArry 进度条 per waitTime table size row

一、场景引入

项目某些表格,需要展示每条数据不同进度状态,使用进度条来展示

二、解决方案

利用定时器+el-progress组件,列表数据需要返回数据总时间,计算得出进度

代码如下:

getTableData() {
            let _that = this;
            if (this.showLoading) {
                this.loading = true;
            }
            const { url, method, start, size } = this;
            const params = {
                ...this.params,
                start,
                size,
            };
            this.$http({ url, method, params })
                .then(res => {
                    this.clearAll(this.timeArry);  //清除之前的定时器
                    let dataBody = this.encryptionFlag ? res : res.body;
                    this.loading = false;
                    this.total = dataBody.count || 0;
                    this.end =
                        parseInt((this.currentPage - 1) * this.size + this.size) > this.total
                            ? this.total
                            : parseInt((this.currentPage - 1) * this.size + this.size);
                    let _that = this
                    //给每一列生成一个时间戳
                    dataBody.data.forEach(row => {
                            // 总任务时间秒数 = 任务截止时间 - 任务开始时间
                            const startEnd = new Date(row.sendEndTime).getTime() - new Date(row.sendTime).getTime()
                            // 剩余时间秒数 = 任务截止时间 - 服务器当前时间
                            row.waitTime = new Date(row.sendEndTime).getTime() - new Date(row.nowTime).getTime()
                            // 任务状态
                            row._taskStatus = row.taskStatusif (row.waitTime > 0) {
                                row.waitTime = row.waitTime - 1000;
                                if (row._taskStatus == xxx) {
                                    let per = parseInt(((startEnd - row.waitTime) / startEnd) * 100);
                                    row.percent = per < 1 ? 1 : per >= 99 ? 99 : per;
                                }
                                row.countInterval = setInterval(() => {
                                    row.waitTime = row.waitTime - 1000;
                                    if (row._taskStatus == xxx) {
                                        let per = parseInt(((startEnd - row.waitTime) / startEnd) * 100);
                                        row.percent = per < 1 ? 1 : per >= 99 ? 99 : per;
                                    }
                                }, 1000);
                                this.timeArry.push(row.countInterval)
                            } else {
                                if (row.waitTime == 0 && (row.sendEndTime || row.nowTime)) {
                                    // sendEndTime/nowTime都为null,waitTime为0,无限刷新列表。此处需注意判断条件
                                    // 剩余时间为0更新列表
                                    _that.update()
                                }
                                if (row.waitTime <= 0) {
                                    if (row._taskStatus == 2 || row._taskStatus == 3 || row._taskStatus == 5) {
                                        row.percent = 99;
                                    }
                                }
                                clearInterval(row.countInterval)
                                row.countInterval = null
                            }
                    })
                    this.tableData = dataBody.data;
                    this.$emit('returnData', this.tableData);
                    this.$emit('returnCount', this.total);
                    this.$emit('returnCurrentPage', _that.currentPage);
                    //部分table操作删除,重新定位当前页码
                    if (this.tableData.length == 0 && this.currentPage != 1) {
                        this.update(this.currentPage - 1);
                    }
                })
                .catch(() => {
                    this.loading = false;
                });
        },

为一个定时器数组 timeArry ,在列表数据返回时做数据处理,每一行加入定时器;剩余时间为0时更新列表数据

update(val = 1) {
            this.currentPage = val;
            this.start = this.size * (val - 1);
            this.getTableData();
        },

注意,组件销毁时需清空定时器

// 清除所有定时器
        clearAll(list) {
            list.forEach(el => {
                clearInterval(el)
                el = null;
            })
            this.timeArry = []
        },

beforestory钩子

beforeDestroy() {
        if (this.timeArry && this.timeArry.length) {
            this.clearAll(this.timeArry);  //清除之前的定时器
        }
    },

 

标签:el,定时器,timeArry,进度条,per,waitTime,table,size,row
From: https://www.cnblogs.com/younghxp/p/17761950.html

相关文章

  • 一些shell脚本
    1.判断目录是否为空DIRECTORY=$1#在此加上是不是目录的判断。if["ls-A$DIRECTORY"=""];thenecho"$DIRECTORY目录是空的"elseecho"$DIRECTORY目录非空"fi2.判断文件夹是否存在if[-d"/data/"];thenecho"文件夹存在"elseech......
  • 文件包含漏洞在phpinfo条件竞争下获取WebShell
    PHP文件包含漏洞(利用phpinfo与条件竞争)在PHP环境下,如果网站存在本地文件包含漏洞,但找不到可以包含的文件时,我们可以通过条件竞争来包含缓存文件的方法来获取webshell。又因为临时文件名是随机的,如果目标网站上存在phpinfo,则可以通过phpinfo来获取临时文件名,进而进行包含。前提......
  • PowerShell IDE - PowerShellPlus 使用(2)
    PowerShellPlus提供的快速点击库的第二部分是活动目录(ActiveDirectory),Windows的活动目录ActiveDirectory是自Windows2000的目录服务,它取代了NT4.0版中的安全帐户管理器(SAM)。ActiveDirectory由目录林、域、组织单位、容器和对象等组成。PowerShell也提供了强大的AD管理Cmdle......
  • [iOS开发教程-1]Hello UITableView!
    http://www.iphonedevcentral.com/hello-uitableview/ HelloUITableView!Ok,let’sstartwithsomethingreallysimple.We’llbecreatinganapptokeeptrackofyourDVDlibrary. Theappwillhaveatableview,adetailviewandsomebasicnavigationalcompo......
  • 使用NPOI修改Excel数据
    读取excel文件阿松大读取excel文件读取excel文件读取excel文件publicvoidSignIn(){Useruser=_userService.GetUserByName(Username);if(user!=null&&user.Password==Password){#region记住登录信息//将当前的配置序列化为j......
  • 在vue中使用XLSX库实现Excel的导入导出
    XLSX库是个十分强大的利用前端js处理excel文档的库,官网:https://www.sheetjs.com/vue中安装即使用:安装pnpminstallxlsxpnpminstallxlsx-style-hzx//设置边框与格式用 使用<div@click="exportExcel"style="width:40px;height:40px;position:absolute;z-index......
  • 使用Shell为UOS中的所有用户创建网页的快捷方式
    本脚本通过域管下发默认为root权限执行 #!/bin/bashcd/home#快捷方式图标名称string_imgName="temp1.png"#快捷方式文件名称string_fileName="/changePassword.desktop"#快捷方式内容functioninsertInfo(){cat>>$1$string_fileName<<EOF[DesktopEntry]#......
  • xshell中Ctrl+S锁定屏幕
    xshell下使用vim的编辑一个文件,保存文件时习惯性的按Ctrl+S,结果按什么键都没有反应。原来Ctrl+S在Linux里,是锁定屏幕的快捷键。如果要解锁,按下Ctrl+Q就可以了。Ctrl+S:锁定屏幕Ctrl+Q:解锁 ......
  • 前后端部署 vercel
    vercel是国外一个部署平台 用的时候可以选择在本地安装一个客户端部署数据或者使用githubgitlab等仓库进行部署部署的过程主要是各种命令和路径要选择好,但是我在部署springboot的时候命令出错了mvncleanpackage失败......
  • 《Mastering the FreeRTOS Real Time Kernel》读书笔记(3)队列管理
    4.队列管理队列,在一些系统中被称为消息队列,可以理解为信息中转站。是任务和任务,任务和中断之间可以互相读和写的一个共享空间。4.2队列的特征存储数据队列本质上是一个先进先出的缓冲区(FIFO),所以可以存储一定容量的数据。有两种方式可以实现FIFO队列:1.将发送给队列的数据复......