oa-badge.js 1.1 KB

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