- elder api 封装(RESTful /elder 六接口)+ 十态常量与日期格式化 - 列表页用 ty-crud(姓名/性别/护理等级/待遇状态/出生日期 + 姓名·状态筛选) - 建档表单(身份证 18 位校验+出生日期带出、等级绑定评估结论副本联动校验) - 详情弹窗(完整信息 + 十态状态变更 + 状态日志时间线) - ty-crud 增 showCreate、ty-dialog 注入 dialog-id 以支持自定义建档与自关闭详情 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
85 lines
3.4 KiB
TypeScript
85 lines
3.4 KiB
TypeScript
import type { TagType } from '@/types/crud'
|
||
|
||
export interface LabeledValue {
|
||
label: string
|
||
value: string
|
||
}
|
||
|
||
export const GENDER_OPTIONS: LabeledValue[] = [
|
||
{ label: '男', value: 'M' },
|
||
{ label: '女', value: 'F' },
|
||
]
|
||
|
||
export const INSURE_TYPE_OPTIONS: LabeledValue[] = [
|
||
{ label: '职工医保', value: 'employee' },
|
||
{ label: '居民医保', value: 'resident' },
|
||
]
|
||
|
||
export const INSURE_VERIFY_STATUS_OPTIONS: LabeledValue[] = [
|
||
{ label: '已核验', value: 'verified' },
|
||
{ label: '未核验', value: 'unverified' },
|
||
]
|
||
|
||
export const ASSESS_LEVEL_OPTIONS: LabeledValue[] = [
|
||
{ label: '重度一级(最高级)', value: 'sev_1' },
|
||
{ label: '重度二级', value: 'sev_2' },
|
||
{ label: '重度三级', value: 'sev_3' },
|
||
]
|
||
|
||
export const CARE_LEVEL_OPTIONS: LabeledValue[] = [
|
||
{ label: '一级护理(最高级)', value: 'care_1' },
|
||
{ label: '二级护理', value: 'care_2' },
|
||
{ label: '三级护理', value: 'care_3' },
|
||
]
|
||
|
||
/** 待遇状态十态(值唯一来源:后端 elder TREAT_STATUSES)。 */
|
||
export const TREAT_STATUS_OPTIONS: LabeledValue[] = [
|
||
{ label: '待建档', value: 'pending_file' },
|
||
{ label: '待起付', value: 'waiting_period' },
|
||
{ label: '正常享受', value: 'active' },
|
||
{ label: '住院暂停', value: 'hosp_pause' },
|
||
{ label: '复评等待期', value: 'review_waiting' },
|
||
{ label: '跨统筹区转移中', value: 'transferring' },
|
||
{ label: '死亡', value: 'dead' },
|
||
{ label: '长期异地居住', value: 'long_away' },
|
||
{ label: '待遇到期', value: 'benefit_expired' },
|
||
{ label: '已终止', value: 'terminated' },
|
||
]
|
||
|
||
export const TREAT_STATUS_TAG_MAP: Record<string, { label: string; type: TagType }> = {
|
||
pending_file: { label: '待建档', type: 'info' },
|
||
waiting_period: { label: '待起付', type: 'warning' },
|
||
active: { label: '正常享受', type: 'success' },
|
||
hosp_pause: { label: '住院暂停', type: 'warning' },
|
||
review_waiting: { label: '复评等待期', type: 'warning' },
|
||
transferring: { label: '跨统筹区转移中', type: 'info' },
|
||
dead: { label: '死亡', type: 'danger' },
|
||
long_away: { label: '长期异地居住', type: 'info' },
|
||
benefit_expired: { label: '待遇到期', type: 'danger' },
|
||
terminated: { label: '已终止', type: 'danger' },
|
||
}
|
||
|
||
/** 按值取显示名,空值回退 '-'。 */
|
||
export function labelOf(options: LabeledValue[], value: unknown): string {
|
||
if (value == null || value === '') return '-'
|
||
return options.find((o) => o.value === value)?.label ?? String(value)
|
||
}
|
||
|
||
/** 毫秒时间戳/日期字符串 → YYYY-MM-DD(供展示)。 */
|
||
export function formatDate(value: unknown): string {
|
||
if (value == null || value === '') return '-'
|
||
const d = typeof value === 'number' ? new Date(value) : new Date(String(value))
|
||
if (Number.isNaN(d.getTime())) return '-'
|
||
const pad = (n: number) => String(n).padStart(2, '0')
|
||
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`
|
||
}
|
||
|
||
/** 毫秒时间戳/日期字符串 → YYYY-MM-DD HH:mm(供时间线展示)。 */
|
||
export function formatDateTime(value: unknown): string {
|
||
if (value == null || value === '') return '-'
|
||
const d = typeof value === 'number' ? new Date(value) : new Date(String(value))
|
||
if (Number.isNaN(d.getTime())) return '-'
|
||
const pad = (n: number) => String(n).padStart(2, '0')
|
||
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`
|
||
}
|