Skip to content

消息通知 ​

收到 websocket 消息推送时,在任意页面轻量预览通知内容的场景使用

组件名为 notice-lite(src/components/notice-lite/index.vue),基于 sar-popout 抽屉实现,内部以 mp-html 富文本组件解析通知正文

全局挂载

组件挂载在虚拟根组件 AppRoot.vue 中全局注册,业务中无需重复引入。配套的原生通知横幅(仅 App 端)由 helpers/notice-notify.ts 在收到 WS_NOTICE 推送时弹出,横幅向下滑动即调用根节点的 showNoticeLite(id) 打开本抽屉。

基础使用 ​

IMG_1958

组件已在 AppRoot.vue 中全局挂载,打开方式为:经 rootStore 拿到根节点实例,调用其暴露的 showNoticeLite(id) 方法(传入通知公告id):

<template>
	<view>
		<sar-button @click="openNotice">预览通知</sar-button>
	</view>
</template>

<script setup lang="ts">
import { useRootRefStore } from "@/stores/root"

const rootRefStore = useRootRefStore()

const openNotice = () => {
	const ref = rootRefStore.getRootRef()
	if (ref && ref.showNoticeLite) {
		ref.showNoticeLite("通知公告id")
	}
}
</script>

自动标记已读

抽屉打开即调用 noticeStore 的 previewNotice(id) 拉取通知详情(标题、发布人、发布时间、正文),并自动调用 markAsRead(id) 标记已读、联动刷新未读数量红点。加载失败时展示「加载失败」空态,与「正文为空」空态区分。

正文为 HTML 富文本,经 mp-html 组件解析渲染(图片自适应宽度、表格横向滚动),通知详情页也复用同一渲染方式。

API ​

属性 ​

属性名称描述类型默认值是否必填
v-model抽屉显隐boolean-是
noticeId通知公告idstring-是

行为说明 ​

行为描述
打开抽屉modelValue 置为 true 时自动拉取 noticeId 对应的通知详情并标记已读
关闭抽屉手动下滑关闭或置 modelValue 为 false,组件内部自动清空已加载数据
关联红点标记已读后经 noticeStore 联动刷新未读数量与 tabBar 红点