import request from './request' // 用药记录实体 export interface PatientMedication { id: string // Snowflake 64位ID 使用字符串保存以避免 JS Number 精度丢失 patientUserId: number // 患者用户ID medicineName: string // 药品名称 dosage: string // 剂量规格 frequency: string // 服用频率 times: string[] // 服用时间点列表 note?: string // 备注信息 createTime: string // 创建时间 updateTime: string // 更新时间 } // 分页查询参数 export interface MedicationQueryParams { pageNum?: number pageSize?: number startTime?: string endTime?: string patientUserId?: number // 患者用户ID medicineNameKeyword?: string // 药品名称关键字 } // 创建用药记录请求参数 export interface CreateMedicationRequest { patientUserId: number medicineName: string dosage: string frequency: string times: string[] note?: string } // 更新用药记录请求参数 export interface UpdateMedicationRequest { id: string | number medicineName: string dosage: string frequency: string times: string[] note?: string } // 分页响应 export interface MedicationPageResponse { records: PatientMedication[] total: number size: number current: number orders: Array<{ column: string; asc: boolean }> optimizeCountSql: boolean searchCount: boolean optimizeJoinOfCountSql: boolean maxLimit: number countId: string pages: number } /** * 创建用药记录 * @param payload 创建用药记录请求参数 */ export async function createMedication(payload: CreateMedicationRequest) { const res: any = await request({ url: 'https://wx.baiyun.work/patient-medication/create', method: 'POST', header: { 'Content-Type': 'application/json' }, data: payload }) // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失 try { const parsed = res?.data as any if (parsed && parsed.code === 200 && parsed.data) { parsed.data = { ...parsed.data, id: String(parsed.data.id) } res.data = parsed } } catch (e) { // ignore } return res } /** * 更新用药记录 * @param id 用药记录ID * @param payload 更新用药记录请求参数 */ export async function updateMedication(id: string | number, payload: UpdateMedicationRequest) { const res: any = await request({ url: `https://wx.baiyun.work/patient-medication/${encodeURIComponent(String(id))}`, method: 'PUT', header: { 'Content-Type': 'application/json' }, data: payload }) // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失 try { const parsed = res?.data as any if (parsed && parsed.code === 200 && parsed.data) { parsed.data = { ...parsed.data, id: String(parsed.data.id) } res.data = parsed } } catch (e) { // ignore } return res } /** * 分页查询用药记录 * @param query 查询参数 */ export async function getMedicationList(query: MedicationQueryParams) { const res: any = await request({ url: 'https://wx.baiyun.work/patient-medication/list', method: 'POST', header: { 'Content-Type': 'application/json' }, data: query }) // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失 try { const parsed = res?.data as any if (parsed && parsed.code === 200 && parsed.data && Array.isArray(parsed.data.records)) { parsed.data.records = parsed.data.records.map((r: any) => ({ ...r, id: String(r.id) })) res.data = parsed } } catch (e) { // ignore } return res } /** * 删除用药记录 * @param id 用药记录ID */ export async function deleteMedication(id: string | number) { const res: any = await request({ url: `https://wx.baiyun.work/patient-medication/${encodeURIComponent(String(id))}`, method: 'DELETE' }) return res } /** * 获取用药记录详情 * @param id 用药记录ID */ export async function getMedicationById(id: string | number) { const res: any = await request({ url: `https://wx.baiyun.work/patient-medication/${encodeURIComponent(String(id))}`, method: 'GET' }) // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失 try { const parsed = res?.data as any if (parsed && parsed.code === 200 && parsed.data) { parsed.data = { ...parsed.data, id: String(parsed.data.id) } res.data = parsed } } catch (e) { // ignore } return res } /** * 根据患者ID获取用药记录列表 * @param patientUserId 患者用户ID */ export async function getMedicationListByPatientId(patientUserId: string) { // 检查参数 if (!patientUserId) { return Promise.reject(new Error('Patient user ID is required')) } const res: any = await request({ url: `https://wx.baiyun.work/patient-medication/patient/${encodeURIComponent(patientUserId)}`, method: 'GET' }) // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失 try { const parsed = res?.data as any if (parsed && parsed.code === 200 && parsed.data && Array.isArray(parsed.data)) { parsed.data = parsed.data.map((r: any) => ({ ...r, id: String(r.id) })) res.data = parsed } } catch (e) { // ignore } return res }