Files
zkxw/web-admin/src/utils/qc-menu-badge.ts
T
2026-06-26 00:50:04 +08:00

74 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {
fetchMineQcWorkOrderTabUnfinishedCounts,
fetchQcWorkOrderTabUnfinishedCounts
} from '@/api/qc-work-order'
import {
QC_MENU_CODE_MY_TASK,
QC_MENU_CODE_WORK_ORDER,
useQcMenuBadgeStore
} from '@/store/modules/qc-menu-badge'
import { useMenuStore } from '@/store/modules/menu'
import type { AppRouteRecord } from '@/types/router'
/** 解析菜单项对应的质检角标 menuCode(兼容后端菜单未带 menuCode) */
export function resolveQcMenuBadgeCode(item: AppRouteRecord): string | undefined {
const code = (item.meta.menuCode || '').trim()
if (code === QC_MENU_CODE_WORK_ORDER || code === QC_MENU_CODE_MY_TASK) {
return code
}
const name = String(item.name || '')
if (name === 'QualityInspectionQcWorkOrder') return QC_MENU_CODE_WORK_ORDER
if (name === 'QualityInspectionMyQcTask') return QC_MENU_CODE_MY_TASK
const path = String(item.path || '')
if (path.endsWith('/qc-work-order') || path === 'qc-work-order') {
return QC_MENU_CODE_WORK_ORDER
}
if (path.endsWith('/my-qc-task') || path === 'my-qc-task') {
return QC_MENU_CODE_MY_TASK
}
return undefined
}
/** 从当前侧栏菜单树收集需展示角标的质检菜单 code */
export function collectVisibleQcMenuBadgeCodes(menuList: AppRouteRecord[]): string[] {
const codes = new Set<string>()
const walk = (items: AppRouteRecord[]) => {
for (const item of items) {
const code = resolveQcMenuBadgeCode(item)
if (code) codes.add(code)
if (item.children?.length) walk(item.children)
}
}
walk(menuList || [])
return [...codes]
}
/** 刷新侧栏「质检工单 / 我的质检任务」未完成数角标 */
export async function refreshQcMenuBadges() {
const menuStore = useMenuStore()
const badgeStore = useQcMenuBadgeStore()
const visibleCodes = collectVisibleQcMenuBadgeCodes(menuStore.menuList)
const tasks: Promise<void>[] = []
if (visibleCodes.includes(QC_MENU_CODE_WORK_ORDER)) {
tasks.push(
fetchQcWorkOrderTabUnfinishedCounts()
.then((data) => badgeStore.setBadge(QC_MENU_CODE_WORK_ORDER, data?.all ?? 0))
.catch(() => badgeStore.setBadge(QC_MENU_CODE_WORK_ORDER, 0))
)
}
if (visibleCodes.includes(QC_MENU_CODE_MY_TASK)) {
tasks.push(
fetchMineQcWorkOrderTabUnfinishedCounts()
.then((data) => badgeStore.setBadge(QC_MENU_CODE_MY_TASK, data?.all ?? 0))
.catch(() => badgeStore.setBadge(QC_MENU_CODE_MY_TASK, 0))
)
}
if (!tasks.length) return
await Promise.all(tasks)
}