记一次elementui时间线的实现

news2024/11/18 18:05:33

实现效果

点击展开,每次累加五条数据进行展示

image.png

实现思路

  1. 起始本质上就是一个分页查询,只不过按新的形式展示,然后也不统计总数,每次只展示固定的5条数据
  2. 点击加载更多,就展示下一页,页的页数进行+1,请求后端接口获取下一页数据
  3. 获取到的新数据,通过与原数据集合找一个唯一维度比如ID,进行对比,不存在于原数据集中的,进行添加
  4. 还有一些小优化,比如数据为0时,以及最后一页时就不展示显示更多

具体代码

时间线自定义组件

<template>
  <div style="display: flex; justify-content: center;">
    <el-timeline style="max-width: 600px">
      <el-timeline-item v-for="item in eventLogTableData" :timestamp="item.occurredAt" placement="top">
        <el-card>
          <h4>{{ item.channelName }}</h4>
          <p>{{ item.actionDesc }}</p>
        </el-card>
      </el-timeline-item>
    </el-timeline>
  </div>
  <div style="display: flex; justify-content: center;" v-if="eventLogTableData.length >0">
    <el-button link type="primary" :icon="ArrowDownBold" @click="loadMore">加载更多</el-button>
  </div>
  <el-empty description="暂无数据" v-else/>

</template>

<script>
import {
  h,
  onUnmounted,
  computed,
  watch,
  onMounted,
  toRefs,
  reactive,
  ref,
} from "vue";
import {ArrowDownBold} from "@element-plus/icons-vue";
import {useStore} from "vuex";

export default {
  components: {},
  props: {
    getDataSource: Function,
  },
  setup: function (props, context) {
    const store = useStore();
    const eventLogTableData = computed(() => store.state.member.eventLogTableData);
    const eventLogPageSize = computed(() => store.state.member.eventLogPageSize);
    const eventLogCurPage = computed(() => store.state.member.eventLogCurPage);

    onUnmounted(() => {
      store.commit("member/SET_EVENT_LOG_TABLE_PAGE_SIZE", 5, {root: true});
      store.commit("member/SET_EVENT_LOG_TABLE_CUR_PAGE", 1, {root: true});
      store.commit("member/SET_EVENT_LOG_TABLE_LIST", []);
    });

    const loadMore = () => {
      store.commit("member/SET_EVENT_LOG_TABLE_CUR_PAGE", (eventLogCurPage.value + 1), {root: true});
      // 调用父组件传来的加载数据函数
      props.getDataSource();
    };
    return {
      loadMore,
      ArrowDownBold,
      eventLogTableData,
      eventLogPageSize,
      eventLogCurPage
    };
  }
}

</script>

<style scoped lang="scss">

</style>

全局状态管理

import requestHttp from "@/server/request";
import {ElMessage} from "element-plus";
import util from "@/utils/utils";
import apiConstants from "@/api/apiConstants";

const state = {
  eventLogTableData: [],
  // 当前页
  eventLogCurPage: 1,
  // 页数量
  eventLogPageSize: 5,
};

const mutations = {
  SET_EVENT_LOG_TABLE_LIST: (state, payload) => {
    state.eventLogTableData = payload || [];
  },
  SET_EVENT_LOG_TABLE_CUR_PAGE: (state, payload) => {
    state.eventLogCurPage = payload;
  },
  SET_EVENT_LOG_TABLE_PAGE_SIZE: (state, payload) => {
    state.eventLogPageSize = payload;
  },
};


const actions = {
  async pageQueryMemberEventLog({commit}, params) {
    try {
      const result = await requestHttp({
        // 这里按情况写自己的
        url: apiConstants.HOST_HOME_GET_MEMBER_EVENT_LOG_INFO,
        method: "POST",
        data: params,
      });
      if (result.data && result.data.code == 200) {
        let data = result.data?.data.list;
        let copiedArray = state.eventLogTableData.slice();
        let ids = copiedArray.map(item => item.id);
        // 这里将不存在于原数据的返回结果写入
        let canUseData = data.filter(item => !ids.includes(item.id));
        copiedArray.push(...canUseData);
        commit("SET_EVENT_LOG_TABLE_LIST", copiedArray);
      } else {
        ElMessage.warning(result.data.message);
      }
    } catch (e) {
      console.log(e);
    }
  },
};

export default {
  namespaced: true,
  state,
  mutations,
  actions,
};

父组件

<template>
<MemberEventLogTimeLine :getDataSource="getMemberEventLogDataSource"></MemberEventLogTimeLine>
</template>

<script>
import MemberEventLogTimeLine from "views/member/MemberEventLogTimeLine.vue";
import {useStore} from "vuex";
// 分页查询事件
export default {
  components: {MemberEventLogTimeLine},
  props: {},
  setup: function (props, context) {
    const store = useStore();
    const memberId = computed(() => store.state.member.currentMemberId);
    const eventLogCurPage = computed(() => store.state.member.eventLogCurPage);
    const eventLogPageSize = computed(() => store.state.member.eventLogPageSize);
    const getMemberEventLogDataSource = () => {
      const params = {
        pageNum: eventLogCurPage?.value,
        pageSize: eventLogPageSize?.value,
        param: {memberId: memberId?.value}
      };
      store.dispatch("member/pageQueryMemberEventLog", params);
    }
  }
}
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树莓派pico入坑笔记,uart使用

uart原理自行百度&#xff0c;相关内容很多其他博主写过并且质量很高&#xff0c;这里不再赘述。 调用circuitpy的busio模块来使用uart&#xff0c;除此以外&#xff0c;spi、iic等要需要使用该模块&#xff0c;使用方法见 官方教程 &#xff0c;详细信息见文档 官方的例子简…

Mysql索引的实现原理,B+Tree,WAL

InnoDB 引擎&#xff0c;每一个数据表有两个文件 .frm和.ibd&#xff0c;分别为表结构&#xff0c;数据和索引&#xff0c;数据挂在主索引的叶子节点上&#xff0c;此主索引称为聚簇索引。 MyISAM 引擎&#xff0c;每一个数据表有三个文件.frm和.MYI和.MYD&#xff0c;分别为表…

Docker-compose 实现Prometheus+Grafana监控MySQL及Linux主机

. ├── Grafana │ ├── data │ └── docker-compose.yaml ├── Mysql │ ├── conf │ ├── data │ ├── docker-compose.yaml │ └── logs ├── Mysqld_exporter │ ├── conf │ └── docker-compose.yaml ├── node-exporter │…

使用新H5标签dialog,实现点击按钮显示分享链接弹出层交互功能

使用新H5标签&#xff0c;实现点击按钮显示分享链接弹出层交互功能 在现代网页开发中&#xff0c;使用新技术和标签来提升用户体验是非常重要的。今天&#xff0c;我们就来聊聊如何利用HTML5的<dialog>标签来实现一个简洁实用的分享链接功能。 在过去&#xff0c;我们通常…

golang——Gin框架及路由介绍

一. 框架介绍 Gin是一个轻量级的Go语言Web框架&#xff0c;它具有高性能和简洁的设计。由于其快速的路由匹配和处理性能&#xff0c;Gin成为Go语言中最受欢迎的Web框架之一。 特点&#xff1a; 快速和轻量&#xff1a;Gin框架的设计注重性能和效率&#xff0c;采用了一些优化措…

暗黑4PTR怎么参与测试 暗黑4第五赛季怎么参加PTR测试教程

暗黑破坏神4作为暗黑破坏神系列的最新作品&#xff0c;自从2023年上线就受到了一众好评。游戏是动作冒险类角色扮演游戏&#xff0c;游戏的背景设定在一个腐化的圣休瑞亚大陆上&#xff0c;玩家们可以五种职业中选择自己喜爱的游戏进行游戏。 暗黑破坏神4第五赛季现在已经开启P…

时序约束(一):时钟的约束

目录 一、时钟约束的目的 二、约束工程项目 三、主时钟和生成时钟 四、主时钟约束 五、生成钟约束 一、时钟约束的目的 之前的文章对时序分析的基本原理做了介绍&#xff0c;我们会发现时序分析离不开时钟信号。对于时序分析工具来说同样如此&#xff0c;分析工具需要我…

谈谈你对AQS的理解

AQS概述 AQS&#xff0c;全称为AbstractQueuedSynchronizer&#xff0c;是Java并发包&#xff08;java.util.concurrent&#xff09;中一个核心的框架&#xff0c;主要用于构建阻塞式锁和相关的同步器&#xff0c;也是构建锁或者其他同步组件的基础框架。AQS提供了一种基于FIF…

《mysql》--mysql约束

数据库约束 有的时候数据库中的数据是有一定要求的&#xff0c;有些数据认为是合法数据&#xff0c;有些是非法数据&#xff0c;如果靠人工检查显然是不靠谱的&#xff1b; 数据库会自动的对数据的合法性进行校验检查目的就是&#xff0c;保证数据中能够避免被插入/修改一些非…

刷盘,还是不刷盘,是一个问题 | 架构师之路重启

前几个有个朋友留言&#xff0c;问我说最近两年公号发读书感悟&#xff0c;职场感悟&#xff0c;AI实践居多了&#xff0c;发架构思路类的内容少了。 最近准备重启架构思路类的内容&#xff0c;且会保持一如既往的风格&#xff1a; 1. 希望引发大家思考&#xff0c;多讨论&…

docker安装与入门使用(适用于小白)

总结&#xff1a;Docker 是一个开源的容器化平台&#xff0c;旨在使开发、部署和运行应用程序的过程更加简单和高效。Docker 使用操作系统级虚拟化在单个主机上运行多个独立的容器。每个容器包含应用程序及其所有依赖项&#xff0c;确保在不同环境中具有一致的运行表现。 下面…

贪心算法——加工木棍(C++)

上大学&#xff0c;一天是一天&#xff0c;两天也是一天。 ——2024年6月27日 之前考试周断更了&#xff0c;今天重新开始&#xff01; 题目描述 有n根木棍&#xff0c;已知每根木棍的长度和重量。这些木棍在木工机器上加工&#xff0c;机器准备加工木棍需要一些时间&#xf…

ABB机器人示教器死机时如何重置?

ABB机器人示教器死机时如何重置&#xff1f; 若遇到机器人示教器死机或卡顿现象时&#xff0c;可尝试将示教器重置&#xff0c;具体方法可参考以下内容&#xff1a; 如下图所示&#xff0c;首先将机器人控制柜断电关机&#xff0c; 如下图所示&#xff0c;同时按住快捷键&…

2024年水利工程与交通运输国际学术会议(ICWCET 2024)

全称&#xff1a;2024年水利工程与交通运输国际学术会议(ICWCET 2024) 会议网址: http://www.icwcet.com 会议时间: 2024/6/25 截稿时间&#xff1a;2024/6/15 会议地点: 天津 投稿邮箱&#xff1a;icwcetsub-conf.com 投稿标题&#xff1a;ICWCET 2024ArticleTEL。 ★会议简介…

目标检测系列(二)yolov1的全面讲解

目录 1、网络结构 2、检测原理 3、制作训练正样本方法 4、损失函数 5、前向推理 6、模型缺限 YOLO的全称是you only look once&#xff0c;指只需要浏览一次就可以识别出图中的物体的类别和位置。YOLO被称为Region-free方法&#xff0c;相比于Region-based方法&#xff0…

GNU、Unix、Linux、Makefile、GCC、GDB、GPL、CentOS 7、Ubuntu之间的关系

全文总结 早期&#xff0c;Unix系统作为一类强大的操作系统&#xff0c;在计算领域奠定了基础。然而&#xff0c;出于对软件自由的追求&#xff0c;Richard Stallman在1983年发起了GNU项目&#xff0c;旨在创建一个完全自由的、与Unix兼容的操作系统。GNU项目不仅倡议软件自由…

Web自动化元素定位之xpath定位【超详细】

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Web自动化常见的定位方式 为什么要学习定位 1.让程序操作指定元素&#xff0c;就必须先找到此元…

金升阳电源被制裁,广州顶源电源模块可以完美替换

广州顶源电子科技股份有限公司,座落于国家高新技术开发区---广州科学城&#xff0c;是一家集研发、生产、销售及服务于一体的DC-DC&#xff0c;AC-DC电源的生产厂家。 公司通过了IATF16949汽车认证及ISO9001:2015质量管理体系认证。拥有专家级研发团队&#xff0c;产品研发经过…

农村经济与科技杂志社农村经济与科技编辑部2024年第8期目录

视点 数字经济驱动农业产业链升级路径研究——以河南省为例 王媛媛; 1-4 城乡融合视角下农村集体产权制度改革研究 齐建丽; 4-7 农业生态系统结构美建设内涵及实现路径 张鹏程; 8-13《农村经济与科技》投稿&#xff1a;cnqikantg126.com 农户宅基地退出政策加权…

2024 最新推广服务 API 推荐,助力业务腾飞

在数字化营销的浪潮中&#xff0c;API 服务正以其强大的功能和高效的特性&#xff0c;成为企业和开发者们实现精准推广、优化营销效果的得力助手。2024 年的今天&#xff0c;各种创新的 API 服务层出不穷&#xff0c;为广告投放、数据洞察等领域带来了前所未有的机遇。在接下来…