oa-badge.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import {
  2. fetchOaCcUnreadCount,
  3. fetchOaInstanceDraftCount,
  4. fetchOaMentionUnreadCount,
  5. fetchOaPendingTaskCount
  6. } from './oa-api.js'
  7. const PATH_DRAFTS = '/pages/oa/drafts/index'
  8. const PATH_PENDING = '/pages/oa/pending/index'
  9. const PATH_CC = '/pages/oa/cc/index'
  10. const PATH_MENTIONS = '/pages/oa/mentions/index'
  11. function readCount(data) {
  12. if (data == null) return 0
  13. if (typeof data === 'number') return Math.max(0, data)
  14. const n = Number(data.count)
  15. return Number.isFinite(n) && n > 0 ? n : 0
  16. }
  17. /**
  18. * 并行拉取草稿 / 待办 / 抄送未读 / 提到我的未读数量。
  19. * @returns {Promise<Record<string, number>>} path → 原始 count(>99 仍保留真实数字)
  20. */
  21. export async function refreshOaMenuBadges() {
  22. const [draftRes, pendingRes, ccRes, mentionRes] = await Promise.all([
  23. fetchOaInstanceDraftCount().catch(() => null),
  24. fetchOaPendingTaskCount().catch(() => null),
  25. fetchOaCcUnreadCount().catch(() => null),
  26. fetchOaMentionUnreadCount().catch(() => null)
  27. ])
  28. return {
  29. [PATH_DRAFTS]: readCount(draftRes),
  30. [PATH_PENDING]: readCount(pendingRes),
  31. [PATH_CC]: readCount(ccRes),
  32. [PATH_MENTIONS]: readCount(mentionRes)
  33. }
  34. }
  35. /** 展示层:0 → 空串;>99 → `99+` */
  36. export function formatOaBadgeCount(n) {
  37. const c = Number(n) || 0
  38. if (c <= 0) return ''
  39. return c > 99 ? '99+' : String(c)
  40. }