57 lines
1.6 KiB
TypeScript
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
|
|
}
|
|
})
|