群公告详情页需结构化处理而非直接使用rich-text,拆分为title、content等字段并手动解析换行与加粗;必须监听onupdategroupinfo实时更新;时间显示需分层语义化;编辑权限校验须走服务端。

群公告详情页在 uni-app 中不能直接套用富文本渲染或简单堆砌样式——它需要兼顾内容结构、权限控制、时间线展示和端内一致性,尤其是小程序和 App 端对 rich-text 的兼容限制很实际。
别用 rich-text 渲染群公告正文
微信风格的群公告往往含标题、发布者头像/昵称、发布时间、操作按钮(编辑/复制)、以及带格式的正文(可能含加粗、换行、链接)。但 rich-text 在 iOS 小程序里字体发虚、Android 微信 WebView 中图片不触发 @error、且无法监听长按保存或添加 loading 占位图。
- 必须把公告拆成结构化字段:
title、content(纯文本或轻量 HTML)、publisher、publishTime、canEdit - 正文用
<view><text>{{ notice.content }}</text></view>+ 手动解析换行(notice.content.split('\n').map(...))最可控 - 若需支持简单加粗,可正则匹配
**内容**并包裹<text class="bold">...</text>,避免引入完整 Markdown 解析器
onGetGroupInfo 和 onUpdateGroupInfo 必须提前监听
群公告本质是群资料(groupInfo)的一部分。腾讯云 IM SDK 的 onGetGroupInfo 事件只在首次拉取群资料时触发,而 onUpdateGroupInfo 才能实时捕获公告更新(比如别人刚发了一条新公告)。如果没监听后者,用户进页面时永远看不到最新内容。
- 初始化 TIM 实例后,立即注册:
tim.on(TIM.EVENT.GROUP_ATTRIBUTES_UPDATE, handleGroupUpdate) -
handleGroupUpdate里应检查data.groupAttributes.notice是否存在变更,并触发页面uni.$emit('notice-updated') - H5 端需额外开启
useUploadPlugin: true,否则群资料变更事件可能不触发
时间显示要区分「刚刚」「X分钟前」和绝对时间
微信公告页的时间戳不是冷冰冰的 2026-06-19 03:22:18,而是分层语义化:2 小时内显示「X小时前」,当天显示「10:22」,更早才显示「6月18日」。直接用 dayjs().fromNow() 在低端安卓机上容易卡顿,且无法精确控制阈值。
- 推荐封装一个计算函数:
formatNoticeTime(publishTime),内部用Date.now() - publishTime做毫秒差判断 - 注意时区:
publishTime是服务端返回的时间戳(通常为 UTC 或东八区),前端不要二次 new Date().getTime() 转换 - iOS 小程序中
new Date(timestamp)对秒级时间戳支持不稳定,务必传入毫秒级(timestamp * 1000)
编辑按钮权限校验必须走服务端,不能只靠前端判断
很多人在页面里写 v-if="user.id === notice.publisher" 就显示「编辑」按钮,这是严重漏洞——只要抓包改个响应就能伪造 publisher 字段。群公告编辑权限由腾讯云 IM 的群资料属性权限(GroupAttribute)控制,SDK 不暴露底层权限判断逻辑。
- 点击编辑前,必须调用后端接口
/api/group/notice/check-permission?groupId=xxx,由服务端用 UserSig 校验当前用户是否为群主或管理员 - 后端应基于腾讯云 IM 的
getGroupMemberProfile接口查用户角色,而非信任前端传来的任何字段 - 按钮禁用态也要同步服务端结果,避免用户误点后弹「无权限」再跳转失败
真正难的不是排版,而是让每一条时间、每一个按钮、每一次刷新都和 IM 后台状态严格对齐——前端看到的“已编辑”,必须和服务端存储的 version 字段一致,否则冲突覆盖就不可避免。










