页面展示的效果如图,需要定时更新未读消息

首先是后台的接口,查询未处理的消息数量

因为是七张消息表,数据我需要合在一起返回给前台:

这里使用UNION连接各个表

SELECT COUNT(*) AS `UNREAD_MSG`, 'CLEAN_MSG' AS `MSG_TYPE` FROM aisw_e_service_clean_msg WHERE MERCHANT_ID = #{merchantId} AND `ACCEPT_STATUS` = 0
UNION ALL
SELECT COUNT(*) AS `UNREAD_MSG`, 'DELIVERY_MSG' FROM aisw_e_service_delivery_msg WHERE MERCHANT_ID = #{merchantId} AND `ACCEPT_STATUS` = 0
UNION ALL
SELECT COUNT(*) AS `UNREAD_MSG`, 'FAULT_MSG' FROM aisw_e_service_fault_msg WHERE MERCHANT_ID = #{merchantId} AND `ACCEPT_STATUS` = 0
UNION ALL
SELECT COUNT(*) AS `UNREAD_MSG`, 'INVOICE_MSG' FROM aisw_e_service_invoice_msg WHERE MERCHANT_ID = #{merchantId} AND `ACCEPT_STATUS` = 0
UNION ALL
SELECT COUNT(*) AS `UNREAD_MSG`, 'ONE_CHECKOUT_MSG' FROM aisw_e_service_one_checkout_msg WHERE MERCHANT_ID = #{merchantId} AND `ACCEPT_STATUS` = 0
UNION ALL
SELECT COUNT(*) AS `UNREAD_MSG`, 'RENEWAL_MSG' FROM aisw_e_service_renewal_msg WHERE MERCHANT_ID = #{merchantId} AND `ACCEPT_STATUS` = 0
UNION ALL
SELECT COUNT(*) AS `UNREAD_MSG`, 'WAKE_MSG' FROM aisw_e_service_wake_msg WHERE MERCHANT_ID = #{merchantId} AND `ACCEPT_STATUS` = 0

结果集的样子:

+------------+------------------+
| UNREAD_MSG | MSG_TYPE |
+------------+------------------+
| 9 | CLEAN_MSG |
| 4 | DELIVERY_MSG |
| 2 | FAULT_MSG |
| 7 | INVOICE_MSG |
| 8 | ONE_CHECKOUT_MSG |
| 6 | RENEWAL_MSG |
| 2 | WAKE_MSG |
+------------+------------------+
7 rows in set (0.03 sec)

丢给前台的JSON:

{
"code": 200,
"data": [
{
"UNREAD_MSG": 8,
"MSG_TYPE": "CLEAN_MSG"
},
{
"UNREAD_MSG": 5,
"MSG_TYPE": "DELIVERY_MSG"
},
{
"UNREAD_MSG": 1,
"MSG_TYPE": "FAULT_MSG"
},
{
"UNREAD_MSG": 1,
"MSG_TYPE": "INVOICE_MSG"
},
{
"UNREAD_MSG": 8,
"MSG_TYPE": "ONE_CHECKOUT_MSG"
},
{
"UNREAD_MSG": 11,
"MSG_TYPE": "RENEWAL_MSG"
},
{
"UNREAD_MSG": 2,
"MSG_TYPE": "WAKE_MSG"
}
],
"message": "操作成功!",
"status": "success"
}

前台封装的API接口:

/**
* 获取未受理的消息数量
*/
export function getTagUnreads() {
return requestDefault({
url: '/sys/room/message/unreads',
method: 'get',
})
}

文件位置:

E:\nsp.asw\code\ehotel-web\src\api\roomService\serviceMessage.js

组件引入接口对象:

import { getTagUnreads } from '../../api/roomService/serviceMessage.js'

封装一个定时函数:

  methods: {
freshData() {
return setInterval(() => {
getTagUnreads()
.then(res => {
if (res.code === 200 && res.status === 'success') {
this.tags = res.data
}
})
}, 1000 * 5
)
},

}

data属性存储一个timer引用:

  data() {
return {
activeName: 'extension',
tags: [],
timer: null,
}
},

然后可以在Vue几个生命周期函数中调用

- Beforecreate() 实例创建之前

- Created() 实例创建后

- Mounted() 数据挂载后

在实例被销毁的时候,顺带把定时任务也释放

运行的时候我发现页面很慢加载出来,原因是因为定时设定了5秒后执行

我用了v-if动态渲染,如果初始数据没有就不加载了。。。(这个原因找了半天)

所以在执行之前初始化的时候就调用一次接口拿数据过来

之后在设置延迟获取

  created() {
getTagUnreads()
.then(res => {
if (res.code === 200 && res.status === 'success') {
this.tags = res.data
}
}) if (this.timer) clearInterval(this.timer)
else setTimeout(() => {this.timer = this.freshData()}, 3000
) },
destroyed() {
clearInterval(
this.timer)
}

然后各个标签获取需要翻译:

这里封装一个取数据的方法

    getCount(key) {
return this.tags.find(x => x.MSG_TYPE === key)['UNREAD_MSG']
}

渲染的时候判断消息数量是否大于0,等于0的情况就不要渲染消息标记出来

      <el-tab-pane label="故障报修申请" name="fault">
<span class="badge-container" slot="label">
故障报修申请
<span v-if="getCount('FAULT_MSG') > 0" class="tag">
{{getCount('FAULT_MSG')}}
</span>
</span>
<fault-list ref="fault" />
</el-tab-pane>

【Vue】未读消息标记功能的更多相关文章

  1. Android 高仿QQ滑动弹出菜单标记已读、未读消息

    在上一篇博客<Android 高仿微信(QQ)滑动弹出编辑.删除菜单效果,增加下拉刷新功能>里,已经带着大家学习如何使用SwipeMenuListView这一开源库实现滑动列表弹出菜单,接 ...

  2. Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒

    http://www.51itong.net/android-badgenumber-9789.html Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒 ...

  3. wing带你玩转自定义view系列(2) 简单模仿qq未读消息去除效果

    上一篇介绍了贝塞尔曲线的简单应用 仿360内存清理效果 这一篇带来一个  两条贝塞尔曲线的应用 : 仿qq未读消息去除效果. 转载请注明出处:http://blog.csdn.net/wingicho ...

  4. iOS 未读消息角标 仿QQ拖拽 简单灵活 支持xib(源码)

    一.效果 二.简单用法 超级简单,2行代码集成:xib可0代码集成,只需拖一个view关联LFBadge类即可 //一般view上加角标 _badge1 = [[LFBadge alloc] init ...

  5. 未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~

    前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢. 之前在 <springboot ...

  6. 桌面图标未读消息(小米,sony,三星手机)

    新消息来了,在桌面的Laucher图标上显示新消息数 /** * 应用桌面图标未读消息显示工具类 * 只支持 小米,三星和索尼 */ public class BadgeUtil { final st ...

  7. [iOS微博项目 - 3.6] - 获取未读消息

    github: https://github.com/hellovoidworld/HVWWeibo   A.获取登陆用户未读消息 1.需求 获取所有未读消息,包括新微博.私信.@.转发.关注等 把未 ...

  8. Android BGABadgeView:新消息/未接来电/未读消息/新通知圆球红点提示(1)

     Android BGABadgeView:新消息/未接来电/未读消息/新通知圆球红点提示(1) 现在很多的APP会有新消息/未接来电/未读消息/新通知圆球红点提示,典型的以微信.QQ新消息提示为 ...

  9. 【Python学习笔记】-APP图标显示未读消息数目

    以小米手机系统为例,当安装的某个APP有未读消息时,就会在该APP图标的右上角显示未读消息的数目.本文主要解说怎样用Python语言实现图标显示未读消息的数目.首先,还是要用到Python中PIL库, ...

  10. android 实现类似qq未读消息点击循环显示

    public void jumpUnread(boolean cycle) { List<ContactLogModel> dataList = adapter.getContactLog ...

随机推荐

  1. k8s中查看pod的yaml文件的案例

    在Kubernetes (K8s) 中,Pod 的 YAML 文件定义了 Pod 的配置和规格.当你想要查看 Pod 的 YAML 文件参数参考时,通常是为了了解可以配置哪些字段以及这些字段的含义. ...

  2. python-使用pyecharts绘制各省份985学校数量图

    1.环境 代码运行环境:python3.7 相关的库:pyecharts 1.7.1 代码编辑器:visual studio code 2.目的 通过使用pyecharts库,来绘制全国各省985高校 ...

  3. react 数组列表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. EF MYSQL DB FIRST 出现2次数据库名

    环境:使用ADO设计器添加的数据库实体,运行时出现 :Table 'world.world.city' doesn't exist . world 是mysql的演示数据库. MySql.Data.E ...

  5. windows 通过cmd命令(netsh wlan命令)连接wifi

    引用:https://www.cnblogs.com/moonbaby/p/11188135.html 1)显示本机保存的profiles,配置文件是以wifi的ssid命名的. netsh wlan ...

  6. javascript 生成器和迭代器

    前置知识 生成器函数会返回一种称为Generator的迭代器 迭代器是一个对象,定义一个序列,并在终止时返回一个返回值 Symbol.iterator为每一个对象定义了默认的迭代器,可以被for..o ...

  7. 3个线程分别交替输出xyz字符,输出10遍

    一位群友分享的**公司面试题 3个线程分别交替输出xyz字符,输出10遍 public class XYZ implements Runnable { private static AtomicInt ...

  8. 基于 Swagger 增强 UI FytApi.MUI

    FytApi.MUI 介绍 基于swagger的轻量级,注入化的api-ui组件 支持netcore 3.1/5.0/6.0 特点 零浸入.轻量.简单.好看.好用 可配置权限认证以及Header,支持 ...

  9. ConvertLatOrLonFilter-经纬度格式转换-保留6位

    ConvertLatOrLonFilter-经纬度格式转换-保留6位 /** * 转换经纬度 * 小数点最后最多为6位 * @param latOrLon * @return */ private S ...

  10. 报错 ERR !npicode ELIFECYCLE dev: wue-cli-service serve

    在系统变量 Path 里面加上:%SystemRoot%\system32,关掉终端,重新启动项目.