V13-FE-006: consolidate approved UI and contract hardening
This commit is contained in:
+44
@@ -0,0 +1,44 @@
|
||||
// AUTO-GENERATED by scripts/generate-app-screen-registry.mjs. Do not edit.
|
||||
import { externalDataScreen as screen0 } from '../modules/common/external-data/external-data.definition'
|
||||
import { designSystemCatalogScreen as screen1 } from '../modules/common/design-system/design-system.definition'
|
||||
import { experimentsScreen as screen2 } from '../modules/common/experiments/experiments.definition'
|
||||
import { operationsQueueScreen as screen3 } from '../modules/common/operations/operations.definition'
|
||||
import { reconcileScreen as screen4 } from '../modules/common/reconcile/reconcile.definition'
|
||||
import { uxMetricsScreen as screen5 } from '../modules/common/ux-metrics/ux-metrics.definition'
|
||||
import { inventoryScreen as screen6 } from '../modules/erp/inventory/inventory.definition'
|
||||
import { inventoryMoveScreen as screen7 } from '../modules/erp/inventory-move/inventory-move.definition'
|
||||
import { itemMasterScreen as screen8 } from '../modules/erp/items/item.definition'
|
||||
import { itemPriceScreen as screen9 } from '../modules/erp/item-prices/item-price.definition'
|
||||
import { purchaseScreen as screen10 } from '../modules/erp/purchases/purchase.definition'
|
||||
import { claimScreen as screen11 } from '../modules/oms/claims/claims.definition'
|
||||
import { orderListScreen as screen12 } from '../modules/oms/orders/search/order-list.definition'
|
||||
import { orderRegisterScreen as screen13 } from '../modules/oms/orders/register/order-register.definition'
|
||||
import { orderImportScreen as screen14 } from '../modules/oms/orders/import/order-import.definition'
|
||||
import { countingScreen as screen15 } from '../modules/wms/counting/counting.definition'
|
||||
import { pickingScreen as screen16 } from '../modules/wms/picking/picking.definition'
|
||||
import { putawayScreen as screen17 } from '../modules/wms/putaway/putaway.definition'
|
||||
import { receivingScreen as screen18 } from '../modules/wms/receiving/receiving.definition'
|
||||
import { wmsWorkScreen as screen19 } from '../modules/wms/work/work.definition'
|
||||
|
||||
export const generatedScreens = [
|
||||
screen0,
|
||||
screen1,
|
||||
screen2,
|
||||
screen3,
|
||||
screen4,
|
||||
screen5,
|
||||
screen6,
|
||||
screen7,
|
||||
screen8,
|
||||
screen9,
|
||||
screen10,
|
||||
screen11,
|
||||
screen12,
|
||||
screen13,
|
||||
screen14,
|
||||
screen15,
|
||||
screen16,
|
||||
screen17,
|
||||
screen18,
|
||||
screen19,
|
||||
] as const
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import { registerKbxScreens } from '@kbx/ui'
|
||||
import { generatedScreens } from './screens.generated'
|
||||
|
||||
export const appScreens = generatedScreens
|
||||
|
||||
export function installScreenRegistry() {
|
||||
registerKbxScreens(appScreens)
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
import type { KbxStatusDefinition } from '@kbx/contracts'
|
||||
|
||||
type StatusSet = readonly KbxStatusDefinition[]
|
||||
|
||||
/**
|
||||
* Product-wide UI status dictionary.
|
||||
* Domain/API raw value는 그대로 유지하고 Grid/Status renderer에서 Label/Semantic만 해석한다.
|
||||
*/
|
||||
export const kbxStatusCatalog = {
|
||||
orderAllocation: [
|
||||
{ value:'정상', label:'정상', semantic:'ready' },
|
||||
{ value:'할당완료', label:'할당완료', semantic:'completed' },
|
||||
{ value:'부족', label:'재고 부족', semantic:'warning' },
|
||||
{ value:'미확인', label:'미확인', semantic:'pending' },
|
||||
],
|
||||
orderLifecycle: [
|
||||
{ value:'NEW', label:'신규', semantic:'draft' },
|
||||
{ value:'DRAFT', label:'작성', semantic:'draft' },
|
||||
{ value:'CONFIRMED', label:'확정', semantic:'pending' },
|
||||
{ value:'ALLOCATED', label:'할당', semantic:'processing' },
|
||||
{ value:'PICKING', label:'피킹', semantic:'processing' },
|
||||
{ value:'CHECKED', label:'검수', semantic:'processing' },
|
||||
{ value:'SHIPPED', label:'출고완료', semantic:'completed' },
|
||||
{ value:'HOLD', label:'보류', semantic:'hold' },
|
||||
{ value:'ERROR', label:'오류', semantic:'error' },
|
||||
],
|
||||
orderShipment: [
|
||||
{ value:'NEW', label:'신규', semantic:'pending' },
|
||||
{ value:'READY', label:'출고대기', semantic:'ready' },
|
||||
{ value:'CONFIRMED', label:'출고지시', semantic:'processing' },
|
||||
{ value:'HOLD', label:'보류', semantic:'hold' },
|
||||
{ value:'SHIPPED', label:'출고완료', semantic:'completed' },
|
||||
{ value:'ERROR', label:'오류', semantic:'error' },
|
||||
],
|
||||
claim: [
|
||||
{ value:'REQUESTED', label:'접수', semantic:'pending' },
|
||||
{ value:'APPROVED', label:'승인', semantic:'processing' },
|
||||
{ value:'IN_PROGRESS', label:'처리중', semantic:'processing' },
|
||||
{ value:'HOLD', label:'보류', semantic:'hold' },
|
||||
{ value:'COMPLETED', label:'완료', semantic:'completed' },
|
||||
],
|
||||
workSeverity: [
|
||||
{ value:'info', label:'정보', semantic:'info' },
|
||||
{ value:'warning', label:'주의', semantic:'warning' },
|
||||
{ value:'critical', label:'긴급', semantic:'error' },
|
||||
],
|
||||
workItem: [
|
||||
{ value:'open', label:'미처리', semantic:'pending' },
|
||||
{ value:'claimed', label:'처리중', semantic:'processing' },
|
||||
{ value:'resolved', label:'해결', semantic:'completed' },
|
||||
{ value:'ignored', label:'무시', semantic:'disabled' },
|
||||
],
|
||||
reconcile: [
|
||||
{ value:'matched', label:'정상', semantic:'completed' },
|
||||
{ value:'mismatch', label:'불일치', semantic:'warning' },
|
||||
{ value:'pending', label:'확인중', semantic:'pending' },
|
||||
{ value:'resolved', label:'해결', semantic:'completed' },
|
||||
],
|
||||
wmsWork: [
|
||||
{ value:'READY', label:'대기', semantic:'ready' },
|
||||
{ value:'IN_PROGRESS', label:'진행', semantic:'processing' },
|
||||
{ value:'BLOCKED', label:'예외', semantic:'error' },
|
||||
{ value:'COMPLETED', label:'완료', semantic:'completed' },
|
||||
{ value:'CANCELLED', label:'취소', semantic:'cancelled' },
|
||||
],
|
||||
experiment: [
|
||||
{ value:'draft', label:'초안', semantic:'draft' },
|
||||
{ value:'running', label:'진행', semantic:'processing' },
|
||||
{ value:'paused', label:'일시중지', semantic:'hold' },
|
||||
{ value:'rolled-back', label:'롤백', semantic:'cancelled' },
|
||||
{ value:'graduated', label:'승격', semantic:'completed' },
|
||||
{ value:'completed', label:'완료', semantic:'completed' },
|
||||
],
|
||||
externalData: [
|
||||
{ value:'fresh', label:'최신', semantic:'ready' },
|
||||
{ value:'stale', label:'Stale', semantic:'warning' },
|
||||
{ value:'expired', label:'만료', semantic:'error' },
|
||||
{ value:'unavailable', label:'사용불가', semantic:'error' },
|
||||
],
|
||||
} as const satisfies Record<string, StatusSet>
|
||||
|
||||
|
||||
export type KbxOrderLifecycleValue = typeof kbxStatusCatalog.orderLifecycle[number]['value']
|
||||
export type KbxOrderShipmentValue = typeof kbxStatusCatalog.orderShipment[number]['value']
|
||||
|
||||
export function kbxStatusOptions(definitions: StatusSet, values?: readonly string[]) {
|
||||
const allowed = values ? new Set(values) : null
|
||||
return definitions
|
||||
.filter(definition => !allowed || allowed.has(definition.value))
|
||||
.map(definition => ({ value: definition.value, label: definition.label }))
|
||||
}
|
||||
|
||||
|
||||
export function normalizeKbxStatusValue(definitions: StatusSet, value: unknown): string | null {
|
||||
const raw = typeof value === 'string' ? value.trim() : ''
|
||||
return raw && definitions.some(definition => definition.value === raw) ? raw : null
|
||||
}
|
||||
Reference in New Issue
Block a user