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

57 lines
1.6 KiB
TypeScript

import { defineStore } from 'pinia'
import { ref } from 'vue'
import { formatQcWorkOrderTabBadgeCount } from '@/api/qc-work-order'
export const QC_MENU_CODE_WORK_ORDER = 'biz:qcWorkOrder:list'
export const QC_MENU_CODE_MY_TASK = 'biz:myQcTask:list'
export const QC_MENU_BADGE_MENU_CODES = [QC_MENU_CODE_WORK_ORDER, QC_MENU_CODE_MY_TASK] as const
/**
* 侧栏「质检工单 / 我的质检任务」菜单未完成数角标
*/
export const useQcMenuBadgeStore = defineStore('qcMenuBadgeStore', () => {
const badgeByMenuCode = ref<Record<string, number>>({})
const loadedMenuCodes = ref<string[]>([])
function setBadge(menuCode: string, count: number) {
badgeByMenuCode.value = {
...badgeByMenuCode.value,
[menuCode]: Math.max(0, Number(count) || 0)
}
if (!loadedMenuCodes.value.includes(menuCode)) {
loadedMenuCodes.value = [...loadedMenuCodes.value, menuCode]
}
}
function isLoaded(menuCode?: string): boolean {
if (!menuCode) return false
return loadedMenuCodes.value.includes(menuCode)
}
function getCount(menuCode?: string): number {
if (!menuCode || !isLoaded(menuCode)) return 0
return badgeByMenuCode.value[menuCode] ?? 0
}
function getBadgeText(menuCode?: string): string {
if (!menuCode || !isLoaded(menuCode)) return ''
return formatQcWorkOrderTabBadgeCount(getCount(menuCode))
}
function clearBadges() {
badgeByMenuCode.value = {}
loadedMenuCodes.value = []
}
return {
badgeByMenuCode,
loadedMenuCodes,
setBadge,
isLoaded,
getCount,
getBadgeText,
clearBadges
}
})