type TagType = 'success' | 'warning' | 'danger' | 'info' | '' | 'primary' export interface ProductDictResolver { getLabel: (dictType: string, value: string) => string getOptions: (dictType: string) => Array<{ label: string; value: string; tagType: string }> } const CRM_PRODUCT_STATUS = 'crm_product_status' /** 产品状态:库内 on/off;兼容历史 1/0 */ export function productStatusDictKey(status: string | number | null | undefined): string { const s = String(status ?? '') if (s === '1') return 'on' if (s === '0') return 'off' return s } /** 表单/提交用:统一为 on/off */ export function normalizeProductStatusValue(status: string | number | null | undefined): string { const s = String(status ?? 'on') if (s === '1' || s === 'on') return 'on' if (s === '0' || s === 'off') return 'off' return 'on' } function findProductStatusItem( resolver: ProductDictResolver, status: string | number | null | undefined ) { const raw = String(status ?? '') if (!raw) return undefined const mapped = productStatusDictKey(status) const items = resolver.getOptions(CRM_PRODUCT_STATUS) return items.find((i) => i.value === raw) ?? items.find((i) => i.value === mapped) } export function getProductStatusLabel( resolver: ProductDictResolver, status: string | number | null | undefined ): string { const item = findProductStatusItem(resolver, status) if (item) return item.label const key = productStatusDictKey(status) if (key === 'on') return '上架' if (key === 'off') return '下架' return '—' } export function getProductStatusTagType( resolver: ProductDictResolver, status: string | number | null | undefined ): TagType { const item = findProductStatusItem(resolver, status) if (item?.tagType) return item.tagType as TagType const key = productStatusDictKey(status) if (key === 'on') return 'success' if (key === 'off') return 'danger' return 'info' } export function getProductUnitLabel( getLabel: (dictType: string, value: string) => string, unit: string | null | undefined ): string { if (!unit) return '—' return getLabel('crm_product_unit', unit) || unit } /** CRM 计量单位「吨」的字典值及历史直存文案 */ export const TON_PRODUCT_UNIT_VALUES = new Set(['dun', '吨']) /** 地磅过磅单位为吨;空单位按业务默认视为吨 */ export function isTonProductUnit(unit: string | null | undefined): boolean { const code = (unit || '').trim() if (!code) return true return TON_PRODUCT_UNIT_VALUES.has(code) }