This commit is contained in:
zlwu committed 2026-06-26 00:50:04 +08:00
1 parent 0b50eff3d8
commit ee364e24aa
323 files changed
+57731 -35766

No files matched your search

@@ -0,0 +1,74 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
import {
formatProductionWorkOrderTabStepBadge,
isProductionWorkOrderTabStepBadgeZero,
type ProductionWorkOrderTabStepCount
} from '@/api/production-work-order'
export const PRODUCTION_MENU_CODE_WORK_ORDER = 'production:work-order:list'
export const PRODUCTION_MENU_CODE_MY_TASK = 'production:my-task:list'
export const PRODUCTION_MENU_BADGE_MENU_CODES = [
PRODUCTION_MENU_CODE_WORK_ORDER,
PRODUCTION_MENU_CODE_MY_TASK
] as const
/**
* 侧栏「生产工单 / 我的生产任务」菜单 Tab 步骤角标汇总(X+Y)
*/
export const useProductionMenuBadgeStore = defineStore('productionMenuBadgeStore', () => {
const badgeByMenuCode = ref<Record<string, ProductionWorkOrderTabStepCount>>({})
const loadedMenuCodes = ref<string[]>([])
function setBadge(menuCode: string, count: ProductionWorkOrderTabStepCount) {
badgeByMenuCode.value = {
...badgeByMenuCode.value,
[menuCode]: {
overdueIncomplete: Math.max(0, Number(count.overdueIncomplete) || 0),
unassigned: Math.max(0, Number(count.unassigned) || 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): ProductionWorkOrderTabStepCount {
if (!menuCode || !isLoaded(menuCode)) {
return { overdueIncomplete: 0, unassigned: 0 }
}
return badgeByMenuCode.value[menuCode] ?? { overdueIncomplete: 0, unassigned: 0 }
}
function getBadgeText(menuCode?: string): string {
if (!menuCode || !isLoaded(menuCode)) return ''
return formatProductionWorkOrderTabStepBadge(getCount(menuCode))
}
function isBadgeZero(menuCode?: string): boolean {
if (!menuCode || !isLoaded(menuCode)) return true
return isProductionWorkOrderTabStepBadgeZero(getCount(menuCode))
}
function clearBadges() {
badgeByMenuCode.value = {}
loadedMenuCodes.value = []
}
return {
badgeByMenuCode,
loadedMenuCodes,
setBadge,
isLoaded,
getCount,
getBadgeText,
isBadgeZero,
clearBadges
}
})
@@ -0,0 +1,56 @@
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
}
})
+4
View File
@@ -20,6 +20,8 @@ import { useWorktabStore } from './worktab'
import { AppRouteRecord } from '@/types/router'
import { resetRouterState } from '@/router/guards/beforeEach'
import { useMenuStore } from './menu'
import { useQcMenuBadgeStore } from './qc-menu-badge'
import { useProductionMenuBadgeStore } from './production-menu-badge'
import { StorageConfig } from '@/utils/storage/storage-config'
import { fetchLogout } from '@/api/auth'
import { RoutesAlias } from '@/router/routesAlias'
@@ -145,6 +147,8 @@ export const useUserStore = defineStore(
lockPassword.value = ''
sessionStorage.removeItem('iframeRoutes')
useMenuStore().setHomePath('')
useQcMenuBadgeStore().clearBadges()
useProductionMenuBadgeStore().clearBadges()
}
/**