vue-element-table表格实现每一条数据绑定定时器实现倒计时或者持续时间

前言

  • 最近在开发中遇到一个需求,每一条数据前端计算处理时间,或者是倒计时时间。

  • 第一表格不可能展示所有数据,所以我们需要当前时间和数据库开始时间获取一个初始值。

  • 第二我们需要把定时器持续时间绑给每一条数据中,方便展示,和操作时候传递给后端存储。

  • 这样一来就解决这个需求,并且不管展示多少数据都不会出错,而且用户体验感较好.

代码实现-可以直接赋值看案例

html 复制代码
<template>
  <div class="app-container">
    <el-table :data="tableData" v-loading="loading" border style="width: 100%">
      <el-table-column prop="a" label="视频类别" align="center" />
      <el-table-column prop="b" label="开始时间" align="center" />
      <el-table-column prop="c" label="持续时间" align="center">
        <template v-slot="{ row }">{{ timeFormatdispose(row.c) }}</template>
      </el-table-column>
      <el-table-column prop="d" label="更新时间" align="center" />
​
      <el-table-column fixed="right" label="操作" width="150" align="center">
        <template v-slot="{ row }">
          <el-button @click="dispose(row)" type="text" size="small"
            >处 理</el-button
          >
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
​
<script>
export default {
  name: 'ContinueTime',
  data () {
    return {
      // 加载动画
      loading: false,
      // 表格数据
      tableData: []
    }
  },
  created () {
    // 获取数据
    this.getdata()
  },
  methods: {
    // 查询数据
    getdata () {
      // 模拟调用数据
      this.loading = true
      setTimeout(() => {
        this.tableData = [
          {
            a: '教育',
            b: '2024-1-18 00:00:00',
            c: '',
            d: '接口后端回显'
          },
          {
            a: '搞笑',
            b: '2023-12-25 12:00:00',
            c: '',
            d: '接口后端回显'
          },
          {
            a: '爱国',
            b: '1949-10-01 08:00:00',
            c: '',
            d: '接口后端回显'
          },
          {
            a: '军事',
            b: '2024-01-01 23:59:59',
            c: '',
            d: '接口后端回显'
          }
        ]
        // 给每一个数据绑定一个定时器
        // 报错-forEach-是因为表格数组键名不一样
        this.tableData.forEach(el => {
          //调用定时器-传入每一条数据
          this.continueTime(el)
        })
      }, 1500)
      this.loading = false
    },
    // 持续时间计算
    continueTime (row) {
      // 用当前时间-开始时间 获取一个时间初始值 转换成时间戳方便计算
      // row.b-是数据库每一条数据开始时间
      let calltime = new Date().getTime() - new Date(row.b).getTime()
      // row.c-是持续时间的键值
      row.c = calltime
      row.countDown = setInterval(() => {
        // 1000-一秒
        // 持续时间就是 + 1000
        // 倒计时就是 - 1000 (需要处理倒计时到了时候处理)
        // 并且把值绑到每一条数据中,方便取值调用接口
        row.c = row.c + 1000
      }, 1000)
    },
    // 时间替换方法
    timeFormatdispose (Time) {
      // console.log('Time', Time)
      if (Time) {
        let days = this.addZero(Math.floor(Time / 1000 / 60 / 60 / 24)) //天
        let hours = this.addZero(Math.floor((Time / 1000 / 60 / 60) % 24)) //时
        let minutes = this.addZero(Math.floor((Time / 1000 / 60) % 60)) //分
        let seconds = this.addZero(Math.floor((Time / 1000) % 60)) //秒
        return `${days}天${hours}小时${minutes}分钟${seconds}秒`
      }
    },
    // 处理
    dispose (row) {
      console.log('持续时间',row.c);
      // 调用接口-把数据传递给后端
    }
  }
}
</script>
​
<style lang="scss" scoped></style>
复制代码

总结:

经过这一趟流程下来相信你也对 vue-element-table表格实现每一条数据绑定定时器实现倒计时或者持续时间 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

有什么不足的地方请大家指出谢谢 -- 風过无痕

相关推荐
庸俗今天不摸鱼22 分钟前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下29 分钟前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox40 分钟前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞43 分钟前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行43 分钟前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_5937581044 分钟前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox
掘金一周1 小时前
金石焕新程 >> 瓜分万元现金大奖征文活动即将回归 | 掘金一周 4.3
前端·人工智能·后端
三翼鸟数字化技术团队1 小时前
Vue自定义指令最佳实践教程
前端·vue.js
Jasmin Tin Wei2 小时前
蓝桥杯 web 学海无涯(axios、ecahrts)版本二
前端·蓝桥杯
圈圈编码2 小时前
Spring Task 定时任务
java·前端·spring