74 lines
2.5 KiB
TypeScript
74 lines
2.5 KiB
TypeScript
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)
|
||
}
|