ec-admin/src/api/elder.ts
liuyun 8975a7dd63 feat(c1): 服务对象列表/建档/详情/状态变更
- elder api 封装(RESTful /elder 六接口)+ 十态常量与日期格式化
- 列表页用 ty-crud(姓名/性别/护理等级/待遇状态/出生日期 + 姓名·状态筛选)
- 建档表单(身份证 18 位校验+出生日期带出、等级绑定评估结论副本联动校验)
- 详情弹窗(完整信息 + 十态状态变更 + 状态日志时间线)
- ty-crud 增 showCreate、ty-dialog 注入 dialog-id 以支持自定义建档与自关闭详情

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 18:56:14 +08:00

126 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { http } from '@/api/http'
import type { PageResult } from '@/types/crud'
/**
* 老人档案(elder)实体。字段字典锚点见 shared/data-model spec(ltc_elder)。
* - 日期字段(birthDate/benefitStart 等)后端经 TransformInterceptor 序列化为毫秒时间戳;
* - idCardNo 列表返回掩码、详情(admin/qc)返回明文;
* - assessEvidenceFile 为评估结论副本的 MinIO key。
*/
export interface Elder {
id: string
locCode?: string
name: string
gender: string
idCardNo: string
birthDate?: number
phone?: string | null
address?: string
guardianName?: string | null
guardianPhone?: string | null
insurNo?: string
insurType?: string
insurYears?: number | null
insurVerifyStatus?: string | null
insurVerifyDate?: number | null
assessLevel?: string | null
careLevel?: string | null
assessDate?: number | null
assessOrg?: string | null
assessEvidenceFile?: string | null
benefitStart?: number | null
benefitEnd?: number | null
treatStatus: string
statusSource?: string | null
statusChangeDate?: number | null
hospStart?: number | null
hospEnd?: number | null
note?: string | null
createdAt?: number
updatedAt?: number
}
export interface ElderListQuery {
page: number
pageSize: number
name?: string
treatStatus?: string
}
/** 建档入参(日期字段为 YYYY-MM-DD 字符串,与 staff 建档入参一致)。 */
export interface ElderCreateData {
locCode: string
name: string
gender: string
idCardNo: string
phone?: string
address: string
guardianName?: string
guardianPhone?: string
insurNo: string
insurType: string
insurYears?: number
insurVerifyStatus?: string
insurVerifyDate?: string
assessLevel?: string
careLevel?: string
assessDate?: string
assessOrg?: string
assessEvidenceFile?: string
benefitStart?: string
benefitEnd?: string
hospStart?: string
hospEnd?: string
note?: string
}
export interface ElderStatusLog {
id: string
elderId: string
fromStatus: string
toStatus: string
changeReason: string
source: string
operatorId: string
evidenceFile: string | null
changedAt: number
}
/** 老人分页列表(身份证服务端掩码)。 */
export function listElders(query: ElderListQuery, signal?: AbortSignal): Promise<PageResult<Elder>> {
const params: Record<string, unknown> = { page: query.page, pageSize: query.pageSize }
if (query.name) params.name = query.name
if (query.treatStatus) params.treatStatus = query.treatStatus
return http.get<PageResult<Elder>>('/elder', { params, signal })
}
/** 建档。 */
export function createElder(data: ElderCreateData): Promise<Elder> {
return http.post<Elder>('/elder', data)
}
/** 详情(admin/qc 身份证明文并留痕,其余掩码)。 */
export function getElder(id: string): Promise<Elder> {
return http.get<Elder>(`/elder/${id}`)
}
/** 变更待遇状态(changeReason 必填)。 */
export function changeElderStatus(
id: string,
data: { toStatus: string; changeReason: string },
): Promise<{ id: string; fromStatus: string; toStatus: string }> {
return http.post(`/elder/${id}/status`, data)
}
/** 状态变更历史(按时间倒序)。 */
export function getStatusLog(id: string): Promise<ElderStatusLog[]> {
return http.get<ElderStatusLog[]>(`/elder/${id}/status/log`)
}
/** 上传评估结论副本到 MinIO,返回 file key。 */
export function uploadEvidence(file: File): Promise<{ key: string }> {
const fd = new FormData()
fd.append('file', file)
return http.post<{ key: string }>('/elder/assess-evidence', fd)
}