patientMedication.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. import request from './request'
  2. // 用药记录实体
  3. export interface PatientMedication {
  4. id: string // Snowflake 64位ID 使用字符串保存以避免 JS Number 精度丢失
  5. patientUserId: number // 患者用户ID
  6. medicineName: string // 药品名称
  7. dosage: string // 剂量规格
  8. frequency: string // 服用频率
  9. times: string[] // 服用时间点列表
  10. note?: string // 备注信息
  11. createTime: string // 创建时间
  12. updateTime: string // 更新时间
  13. }
  14. // 分页查询参数
  15. export interface MedicationQueryParams {
  16. pageNum?: number
  17. pageSize?: number
  18. startTime?: string
  19. endTime?: string
  20. patientUserId?: number // 患者用户ID
  21. medicineNameKeyword?: string // 药品名称关键字
  22. }
  23. // 创建用药记录请求参数
  24. export interface CreateMedicationRequest {
  25. patientUserId: number
  26. medicineName: string
  27. dosage: string
  28. frequency: string
  29. times: string[]
  30. note?: string
  31. }
  32. // 更新用药记录请求参数
  33. export interface UpdateMedicationRequest {
  34. id: string | number
  35. medicineName: string
  36. dosage: string
  37. frequency: string
  38. times: string[]
  39. note?: string
  40. }
  41. // 分页响应
  42. export interface MedicationPageResponse {
  43. records: PatientMedication[]
  44. total: number
  45. size: number
  46. current: number
  47. orders: Array<{ column: string; asc: boolean }>
  48. optimizeCountSql: boolean
  49. searchCount: boolean
  50. optimizeJoinOfCountSql: boolean
  51. maxLimit: number
  52. countId: string
  53. pages: number
  54. }
  55. /**
  56. * 创建用药记录
  57. * @param payload 创建用药记录请求参数
  58. */
  59. export async function createMedication(payload: CreateMedicationRequest) {
  60. const res: any = await request({
  61. url: 'https://wx.baiyun.work/patient-medication/create',
  62. method: 'POST',
  63. header: { 'Content-Type': 'application/json' },
  64. data: payload
  65. })
  66. // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失
  67. try {
  68. const parsed = res?.data as any
  69. if (parsed && parsed.code === 200 && parsed.data) {
  70. parsed.data = {
  71. ...parsed.data,
  72. id: String(parsed.data.id)
  73. }
  74. res.data = parsed
  75. }
  76. } catch (e) {
  77. // ignore
  78. }
  79. return res
  80. }
  81. /**
  82. * 更新用药记录
  83. * @param id 用药记录ID
  84. * @param payload 更新用药记录请求参数
  85. */
  86. export async function updateMedication(id: string | number, payload: UpdateMedicationRequest) {
  87. const res: any = await request({
  88. url: `https://wx.baiyun.work/patient-medication/${encodeURIComponent(String(id))}`,
  89. method: 'PUT',
  90. header: { 'Content-Type': 'application/json' },
  91. data: payload
  92. })
  93. // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失
  94. try {
  95. const parsed = res?.data as any
  96. if (parsed && parsed.code === 200 && parsed.data) {
  97. parsed.data = {
  98. ...parsed.data,
  99. id: String(parsed.data.id)
  100. }
  101. res.data = parsed
  102. }
  103. } catch (e) {
  104. // ignore
  105. }
  106. return res
  107. }
  108. /**
  109. * 分页查询用药记录
  110. * @param query 查询参数
  111. */
  112. export async function getMedicationList(query: MedicationQueryParams) {
  113. const res: any = await request({
  114. url: 'https://wx.baiyun.work/patient-medication/list',
  115. method: 'POST',
  116. header: { 'Content-Type': 'application/json' },
  117. data: query
  118. })
  119. // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失
  120. try {
  121. const parsed = res?.data as any
  122. if (parsed && parsed.code === 200 && parsed.data && Array.isArray(parsed.data.records)) {
  123. parsed.data.records = parsed.data.records.map((r: any) => ({
  124. ...r,
  125. id: String(r.id)
  126. }))
  127. res.data = parsed
  128. }
  129. } catch (e) {
  130. // ignore
  131. }
  132. return res
  133. }
  134. /**
  135. * 删除用药记录
  136. * @param id 用药记录ID
  137. */
  138. export async function deleteMedication(id: string | number) {
  139. const res: any = await request({
  140. url: `https://wx.baiyun.work/patient-medication/${encodeURIComponent(String(id))}`,
  141. method: 'DELETE'
  142. })
  143. return res
  144. }
  145. /**
  146. * 获取用药记录详情
  147. * @param id 用药记录ID
  148. */
  149. export async function getMedicationById(id: string | number) {
  150. const res: any = await request({
  151. url: `https://wx.baiyun.work/patient-medication/${encodeURIComponent(String(id))}`,
  152. method: 'GET'
  153. })
  154. // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失
  155. try {
  156. const parsed = res?.data as any
  157. if (parsed && parsed.code === 200 && parsed.data) {
  158. parsed.data = {
  159. ...parsed.data,
  160. id: String(parsed.data.id)
  161. }
  162. res.data = parsed
  163. }
  164. } catch (e) {
  165. // ignore
  166. }
  167. return res
  168. }
  169. /**
  170. * 根据患者ID获取用药记录列表
  171. * @param patientUserId 患者用户ID
  172. */
  173. export async function getMedicationListByPatientId(patientUserId: string) {
  174. // 检查参数
  175. if (!patientUserId) {
  176. return Promise.reject(new Error('Patient user ID is required'))
  177. }
  178. const res: any = await request({
  179. url: `https://wx.baiyun.work/patient-medication/patient/${encodeURIComponent(patientUserId)}`,
  180. method: 'GET'
  181. })
  182. // 强制把 Snowflake ID 字段转换为字符串,避免后续使用 Number 导致精度丢失
  183. try {
  184. const parsed = res?.data as any
  185. if (parsed && parsed.code === 200 && parsed.data && Array.isArray(parsed.data)) {
  186. parsed.data = parsed.data.map((r: any) => ({
  187. ...r,
  188. id: String(r.id)
  189. }))
  190. res.data = parsed
  191. }
  192. } catch (e) {
  193. // ignore
  194. }
  195. return res
  196. }