41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
import {
|
||
fetchOaCcUnreadCount,
|
||
fetchOaInstanceDraftCount,
|
||
fetchOaPendingTaskCount
|
||
} from './oa-api.js'
|
||
|
||
const PATH_DRAFTS = '/pages/oa/drafts/index'
|
||
const PATH_PENDING = '/pages/oa/pending/index'
|
||
const PATH_CC = '/pages/oa/cc/index'
|
||
|
||
function readCount(data) {
|
||
if (data == null) return 0
|
||
if (typeof data === 'number') return Math.max(0, data)
|
||
const n = Number(data.count)
|
||
return Number.isFinite(n) && n > 0 ? n : 0
|
||
}
|
||
|
||
/**
|
||
* 并行拉取草稿 / 待办 / 抄送未读数量。
|
||
* @returns {Promise<Record<string, number>>} path → 原始 count(>99 仍保留真实数字)
|
||
*/
|
||
export async function refreshOaMenuBadges() {
|
||
const [draftRes, pendingRes, ccRes] = await Promise.all([
|
||
fetchOaInstanceDraftCount().catch(() => null),
|
||
fetchOaPendingTaskCount().catch(() => null),
|
||
fetchOaCcUnreadCount().catch(() => null)
|
||
])
|
||
return {
|
||
[PATH_DRAFTS]: readCount(draftRes),
|
||
[PATH_PENDING]: readCount(pendingRes),
|
||
[PATH_CC]: readCount(ccRes)
|
||
}
|
||
}
|
||
|
||
/** 展示层:0 → 空串;>99 → `99+` */
|
||
export function formatOaBadgeCount(n) {
|
||
const c = Number(n) || 0
|
||
if (c <= 0) return ''
|
||
return c > 99 ? '99+' : String(c)
|
||
}
|