Skip to content

Console 顶栏铃铛未读角标在审批处理完成后不更新 #10753

Description

@baozhoutao

现象

在 Console 审批中心 /_console/apps/<app>/system/approvals:「待我审批」有 1 条,点击【同意】处理完成后,列表正确刷新为空(显示「暂无请求」),但页面右上角顶栏铃铛图标的红色未读角标仍显示 1,不随之更新。刷新页面后依旧为 1,直到用户手动「全部已读」。

  • 平台版本:@objectstack/* 17.1.0(项目依赖锁定版本)
  • 复现项目:steedos-labs/os-project-titanwind-ehr#1684(含截图)

项目侧已排查(证据在上面项目 issue 的归属排查评论里)

  • 审批中心页面、顶栏铃铛组件、未读计数均为平台 Console SPA 实现,项目仓库无相关代码;
  • 实测抓包:角标数 = Console 前端直查 sys_inbox_message + sys_notification_receipt(filter channel=inbox)在前端 join 出的未读收件箱消息数;
  • 「同意」由平台 approvals API 执行;「标记已读」走平台服务端路由 POST /api/v1/notifications/read(MessagingService.markRead() 系统上下文写回执),项目对回执表仅有读权,无从修复。

请平台确认根因(二选一)

  1. 前端缓存 bug:若角标语义是「待审批数」,则审批处理后角标缓存未失效(列表数据已刷新、角标未刷新);
  2. 语义/机制缺口(现象更像这种):角标语义本是「未读收件箱消息数」,该未读项是业务侧经 MessagingService.emit() 推送的「…待审批」站内消息;审批完成后平台无任何机制将关联 inbox 消息标已读/撤回,角标恒挂。

判别方法(点【同意】后不刷新页面直查库):

SELECTim.title, r.stateFROM sys_inbox_message im
LEFT JOIN sys_notification_receipt r ONr.notification_id=im.notification_idWHEREim.user_id='<审批人id>';

仍有 state != 'read' 且标题为「…待审批」的行 → 情形 2;收件箱干净而角标仍 1 → 情形 1。

诉求

  • 明确角标的产品语义(未读消息数 vs 待办审批数);
  • 若为情形 2:建议审批完成时联动 markRead/recall 对应 inbox 消息,或将 MessagingService.markRead()/recall() 开放给插件调用——否则任何经 emit() 推「待审批」类消息的项目都会遇到同一问题(该项目 30+ 处业务 Hook 走此扇出点);
  • 若为情形 1:请修复角标缓存失效逻辑。

关联

  • 项目侧复现与归属排查:steedos-labs/os-project-titanwind-ehr#1684
  • 同链路历史问题(项目侧记录):铃铛恒 0(内建表未授权)、通知红点不消失(is_read 回写 403)

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions