| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- /**
- * 统一业务 code → 中文展示入口。
- * 图表/Tag/列表禁止直接把英文枚举抛给用户;未知 code 显示「未知(code)」。
- */
- export type StatusDictType =
- | 'batchStatus'
- | 'flowStage'
- | 'personnelStatus'
- | 'insuranceMatch'
- | 'alertHandleStatus'
- | 'alertType'
- | 'alertLevel'
- | 'specialBizType'
- | 'processAction'
- const BATCH_STATUS: Record<string, string> = {
- DRAFT: '草稿',
- PENDING_TOWN_APPROVE: '待镇经发初审',
- PENDING_INSURANCE_MATCH: '待居保匹配',
- PENDING_STATUS_MAINTAIN: '待状态维护',
- PENDING_LEADER_APPROVE: '待分管领导审批',
- READY_EXPORT: '可出盘',
- EXPORTED: '已出盘',
- RETURNED: '已回盘',
- ARCHIVED: '已归档',
- REJECTED: '已驳回',
- }
- /** 流程阶段(与业务状态语义分离;EXPORTED 在流程上多为「回盘信息确认」) */
- const FLOW_STAGE: Record<string, string> = {
- STAGE1_PERSONNEL_INPUT: '人员新增录入',
- STAGE2_TOWN_PRECHECK: '镇经发中心初审',
- STAGE3_INSURANCE_MATCH: '居保状态匹配',
- STAGE4_MONTHLY_LIST: '生成月补贴清单',
- STAGE5_LEADER_ONLINE_APPROVE: '分管领导审批',
- STAGE6_COMPARE_FILE: '生成对照文件',
- STAGE7_OFFLINE_SIGN_PAY: '待线下发放',
- STAGE8_RETURN_CONFIRM: '回盘信息确认',
- DRAFT: '人员新增录入',
- PENDING_TOWN_APPROVE: '镇经发中心初审',
- PENDING_INSURANCE_MATCH: '居保状态匹配',
- PENDING_STATUS_MAINTAIN: '比对结果已生成',
- PENDING_LEADER_APPROVE: '分管领导审批',
- READY_EXPORT: '待线下发放',
- EXPORTED: '回盘信息确认',
- RETURNED: '已回盘确认',
- ARCHIVED: '已归档',
- REJECTED: '退回修改',
- }
- const PERSONNEL_STATUS: Record<string, string> = {
- DRAFT: '待提交资格',
- PENDING_TOWN_APPROVE: '待资格审批',
- NEW: '新增',
- PENDING_INSURANCE_MATCH: '待居保匹配',
- NORMAL: '正常发放',
- PAUSED: '暂停',
- STOPPED: '停止',
- FUNERAL: '死亡丧葬',
- EXITED: '已退出',
- ABNORMAL: '异常待处理',
- ARCHIVED: '已归档',
- }
- const INSURANCE_MATCH: Record<string, string> = {
- PENDING: '未匹配',
- SUCCESS: '匹配通过',
- LOSE_ELIGIBILITY: '丧失资格',
- FAIL: '匹配失败',
- MANUAL_PASS: '匹配通过',
- }
- const ALERT_HANDLE: Record<string, string> = {
- PENDING: '待处理',
- PROCESSING: '处理中',
- CLOSED: '已关闭',
- }
- const ALERT_TYPE: Record<string, string> = {
- BANK_CARD_ABNORMAL: '银行卡异常',
- NAME_MISMATCH: '姓名不一致',
- INSURANCE_MATCH_FAIL: '居保匹配失败',
- AMOUNT_ABNORMAL: '金额异常',
- DEATH_STATUS: '死亡停发预警',
- MATERIAL_PENDING: '材料待补',
- RETURN_FAIL: '回盘失败',
- LAND_MATCH_FAIL: '土地匹配不符合',
- APPROVAL_TIMEOUT: '审批超时',
- REFUND_FISCAL: '多发退款待退缴',
- QUALIFY_REJECT: '退养资格驳回',
- 民政死亡比对: '死亡停发预警',
- 回盘发放失败: '回盘失败',
- }
- const ALERT_LEVEL: Record<string, string> = {
- HIGH: '高',
- MEDIUM: '中',
- LOW: '低',
- }
- const SPECIAL_BIZ: Record<string, string> = {
- FUNERAL: '丧葬补贴',
- PAUSE: '暂停发放',
- STOP: '停止发放',
- RESUME: '恢复发放',
- STANDARD_ADJUST: '调标差额补发',
- SUPPLEMENT: '纳入下月补发',
- REFUND: '多发退款',
- HEIR_UPDATE: '继承人信息变更',
- STANDARD_CHANGE: '标准变更',
- INSURANCE_MATCH: '居保匹配',
- PERSONNEL_STATUS: '人员状态变更',
- RETIRE_QUALIFY: '退养资格审批',
- }
- /** 流程动作 / bizType 英文码 → 中文(禁止直接渲染 code) */
- const PROCESS_ACTION: Record<string, string> = {
- SPECIAL_BIZ: '特殊业务申请',
- SPECIAL_APPROVE_PASS: '分管领导审批通过',
- SPECIAL_APPROVE_REJECT: '分管领导审批驳回',
- STATUS_STOPPED: '停止发放',
- STATUS_PAUSED: '暂停发放',
- STATUS_NORMAL: '恢复发放',
- STATUS_FUNERAL: '死亡丧葬状态落地',
- STATUS_ARCHIVED: '人员归档',
- STATUS_ABNORMAL: '异常待处理',
- STATUS_PENDING_INSURANCE_MATCH: '待居保匹配',
- QUALIFY_SUBMIT: '提交退养资格',
- QUALIFY_PASS: '退养资格审批通过',
- QUALIFY_REJECT: '退养资格审批驳回',
- QUALIFY_REJECT_CLOSED: '资格驳回告警已关闭,退回待提交资格',
- RETIRE_QUALIFY: '退养资格审批',
- RETIRE_QUALIFY_SNAPSHOT: '退养资格',
- STATUS_NEW: '新增',
- PERSONNEL_STATUS: '人员状态变更',
- PERSONNEL_STATUS_SNAPSHOT: '人员业务状态',
- FUNERAL: '丧葬/死亡登记',
- STOP: '停止发放申请',
- PAUSE: '暂停发放申请',
- RESUME: '恢复发放申请',
- SUPPLEMENT: '补发申请',
- NOTE: '补充备注',
- INSURANCE_MATCH: '居保匹配',
- INSURANCE_MATCH_SUCCESS: '居保匹配通过',
- INSURANCE_MATCH_MANUAL: '居保人工确认',
- INSURANCE_MATCH_FAIL: '居保匹配失败',
- INSURANCE_MATCH_PENDING: '居保待确认',
- INSURANCE_MATCH_SNAPSHOT: '居保匹配结果',
- CALC_ROUND: '测算轮次',
- CALC_LOCK: '锁定测算',
- CALC_UNLOCK: '解锁测算',
- TODO_READ: '待办已读',
- PERSONNEL_IMPORT: '人员导入',
- PERSONNEL_FIELD_CHANGE: '人员字段变更',
- RETURN_ARREARS: '回盘失败待补发',
- SYS_USER: '系统用户',
- SYS_CONFIG: '系统配置',
- LOGIN_LOG: '登录日志',
- LOGIN_AUDIT: '登录审计',
- LOGOUT_AUDIT: '登出审计',
- OP_LOG: '操作日志',
- STANDARD_CHANGE: '标准变更',
- STANDARD_ADJUST: '调标差额补发',
- REFUND: '多发退款',
- HEIR_UPDATE: '继承人信息变更',
- SUCCESS: '成功',
- FAIL: '失败',
- PENDING: '待处理',
- PASS: '通过',
- REJECT: '驳回',
- LOGIN: '登录',
- LOGOUT: '登出',
- 成功: '成功',
- 登出: '登出',
- 失败: '失败',
- }
- /** 角色 key / 英文角色码 → 中文称谓 */
- const ROLE_LABEL: Record<string, string> = {
- village: '村合作社',
- town: '镇经发中心',
- social: '镇社区事务受理中心',
- leader: '分管领导',
- agri: '区农委',
- hr: '区人社局',
- admin: '系统管理员',
- district: '区级',
- unknown: '未知角色',
- 系统: '系统',
- 业务部门: '业务部门',
- 分管领导: '分管领导',
- 历史: '历史',
- }
- const DICTS: Record<StatusDictType, Record<string, string>> = {
- batchStatus: BATCH_STATUS,
- flowStage: FLOW_STAGE,
- personnelStatus: PERSONNEL_STATUS,
- insuranceMatch: INSURANCE_MATCH,
- alertHandleStatus: ALERT_HANDLE,
- alertType: ALERT_TYPE,
- alertLevel: ALERT_LEVEL,
- specialBizType: SPECIAL_BIZ,
- processAction: PROCESS_ACTION,
- }
- /** 是否像未翻译的英文枚举 code */
- function looksLikeCode(s: string) {
- return /^[A-Z][A-Z0-9_]*$/.test(s)
- }
- /** 命中字典或已是中文则返回;未知英文 code 返回 null */
- export function tryLabelOf(dictType: StatusDictType, code?: string | null): string | null {
- if (code == null || code === '') return null
- const raw = String(code).trim()
- const table = DICTS[dictType]
- if (table[raw]) return table[raw]
- const upper = raw.toUpperCase()
- if (table[upper]) return table[upper]
- if (!looksLikeCode(raw)) return raw
- return null
- }
- /**
- * @param dictType 字典册
- * @param code 后端枚举或已是中文的文案
- */
- export function labelOf(dictType: StatusDictType, code?: string | null): string {
- if (code == null || code === '') return ''
- const hit = tryLabelOf(dictType, code)
- if (hit != null) return hit
- const raw = String(code).trim()
- if (import.meta.env.DEV) {
- // eslint-disable-next-line no-console
- console.warn(`[statusLabels] 未知 ${dictType} code:`, raw)
- }
- return `未知(${raw})`
- }
- export function batchStatusLabel(code?: string | null) {
- return labelOf('batchStatus', code)
- }
- export function flowStageLabelOf(code?: string | null) {
- return labelOf('flowStage', code)
- }
- export function personnelStatusLabel(code?: string | null) {
- return labelOf('personnelStatus', code)
- }
- /** 退养资格类型展示:空/UNSET → 待认定 */
- export function retireQualifyLabel(code?: string | null) {
- const s = String(code || '').trim()
- if (!s || s === '—' || s === 'UNSET' || s === 'NONE' || s === 'CLEARED') return '待认定'
- if (s === 'WITH_LAND') return '有土地退养'
- if (s === 'WITHOUT_LAND') return '无土地有资格'
- if (s === 'INELIGIBLE') return '无资格'
- return s
- }
- const REFUND_PROGRESS: Record<string, string> = {
- REGISTERED: '已登记',
- VERIFYING: '核实中',
- DEDUCTING: '下月扣减中',
- RETURNING: '退缴财政中',
- VOUCHER_ARCHIVED: '凭证已归档',
- DONE: '已完成',
- }
- export function refundProgressLabel(code?: string | null): string {
- if (code == null || code === '') return ''
- const raw = String(code).trim()
- if (REFUND_PROGRESS[raw]) return REFUND_PROGRESS[raw]
- if (REFUND_PROGRESS[raw.toUpperCase()]) return REFUND_PROGRESS[raw.toUpperCase()]
- if (looksLikeCode(raw)) return labelOf('processAction', raw)
- return raw
- }
- /** 流程动作展示:已是中文则原样,英文 code 走字典 */
- export function processActionLabelOf(code?: string | null): string {
- if (code == null || code === '') return '办理'
- const raw = String(code).trim()
- if (!looksLikeCode(raw)) return raw
- return labelOf('processAction', raw)
- }
- /** 结果/状态短码展示 */
- export function resultLabelOf(code?: string | null): string {
- if (code == null || code === '') return ''
- const raw = String(code).trim()
- if (!looksLikeCode(raw) && !/^(SUCCESS|FAIL|PENDING|PASS|REJECT)$/i.test(raw)) {
- return raw
- }
- return (
- tryLabelOf('processAction', raw) ||
- tryLabelOf('alertHandleStatus', raw) ||
- tryLabelOf('insuranceMatch', raw) ||
- tryLabelOf('batchStatus', raw) ||
- labelOf('processAction', raw)
- )
- }
- /** 角色展示:禁止直接渲染 village/social 等 key */
- export function roleLabelOf(code?: string | null): string {
- if (code == null || code === '') return ''
- const raw = String(code).trim()
- if (ROLE_LABEL[raw]) return ROLE_LABEL[raw]
- if (ROLE_LABEL[raw.toLowerCase()]) return ROLE_LABEL[raw.toLowerCase()]
- if (!looksLikeCode(raw) && !/^[a-z][a-z0-9_]*$/i.test(raw)) return raw
- return raw
- }
- /** 通用展示:优先中文,疑似英文码则尝试多字典转义 */
- export function displayBizText(code?: string | null): string {
- if (code == null || code === '') return '—'
- const raw = String(code).trim()
- if (!looksLikeCode(raw) && !/^[a-z][a-z0-9_]*$/i.test(raw)) return raw
- return (
- tryLabelOf('batchStatus', raw) ||
- tryLabelOf('flowStage', raw) ||
- tryLabelOf('personnelStatus', raw) ||
- tryLabelOf('insuranceMatch', raw) ||
- tryLabelOf('specialBizType', raw) ||
- tryLabelOf('processAction', raw) ||
- tryLabelOf('alertType', raw) ||
- roleLabelOf(raw) ||
- `未知(${raw})`
- )
- }
|