提交
This commit is contained in:
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
|
||||
}
|
||||
})
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user