|
|
@@ -33,6 +33,36 @@ export namespace PatientEvaluationModel {
|
|
|
export interface SatisfactionListQuery {
|
|
|
dateRange?: [string, string];
|
|
|
}
|
|
|
+
|
|
|
+ export type EfficacyResult = 'cured' | 'improved' | 'unchanged';
|
|
|
+
|
|
|
+ export interface EfficacyEvaluation extends TransformRecord {
|
|
|
+ prescriptionDate: string;
|
|
|
+ prescriptionNumber: string;
|
|
|
+ /** 关联处方 id,用于跳转处方详情 */
|
|
|
+ prescriptionId?: string;
|
|
|
+ medicalInstitution?: string;
|
|
|
+ campus?: string;
|
|
|
+ decoctionEnterprise?: string;
|
|
|
+ decoctionCenter?: string;
|
|
|
+ logisticsCompany?: string;
|
|
|
+ logisticsNumber?: string;
|
|
|
+ patientName?: string;
|
|
|
+ gender?: string;
|
|
|
+ age?: number | string;
|
|
|
+ patientPhone?: string;
|
|
|
+ /** 代煎代配 */
|
|
|
+ decoctionDispensing?: string;
|
|
|
+ efficacyResult: EfficacyResult;
|
|
|
+ evaluationTime: string;
|
|
|
+ /** 疗效评价详情 */
|
|
|
+ evaluationDetail?: string;
|
|
|
+ remark?: string;
|
|
|
+ }
|
|
|
+
|
|
|
+ export interface EfficacyListQuery {
|
|
|
+ dateRange?: [string, string];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
export const SATISFACTION_SCORE_LABELS: Record<
|
|
|
@@ -483,3 +513,433 @@ export function exportSatisfactionEvaluationsMethod(
|
|
|
URL.revokeObjectURL(url);
|
|
|
return Promise.resolve(true);
|
|
|
}
|
|
|
+
|
|
|
+export const EFFICACY_RESULT_LABELS: Record<
|
|
|
+ PatientEvaluationModel.EfficacyResult,
|
|
|
+ string
|
|
|
+> = {
|
|
|
+ cured: '痊愈',
|
|
|
+ improved: '好转',
|
|
|
+ unchanged: '无变化',
|
|
|
+};
|
|
|
+
|
|
|
+export function getEfficacyResultLabel(
|
|
|
+ result?: PatientEvaluationModel.EfficacyResult,
|
|
|
+): string {
|
|
|
+ if (!result) return '';
|
|
|
+ return EFFICACY_RESULT_LABELS[result] ?? '';
|
|
|
+}
|
|
|
+
|
|
|
+function withEfficacyDetailFields(
|
|
|
+ item: PatientEvaluationModel.EfficacyEvaluation,
|
|
|
+): PatientEvaluationModel.EfficacyEvaluation {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ prescriptionId: item.prescriptionId ?? item.id,
|
|
|
+ logisticsNumber: item.logisticsNumber ?? '',
|
|
|
+ patientName: item.patientName ?? '',
|
|
|
+ gender: item.gender ?? '',
|
|
|
+ age: item.age ?? '',
|
|
|
+ patientPhone: item.patientPhone ?? '',
|
|
|
+ decoctionDispensing: item.decoctionDispensing ?? '',
|
|
|
+ evaluationDetail:
|
|
|
+ item.evaluationDetail ?? item.remark ?? MOCK_DETAIL_TEXT,
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+const MOCK_EFFICACY_EVALUATIONS: PatientEvaluationModel.EfficacyEvaluation[] =
|
|
|
+ [
|
|
|
+ {
|
|
|
+ id: 'e1',
|
|
|
+ prescriptionDate: '2023-09-23',
|
|
|
+ prescriptionNumber: '2023092323945',
|
|
|
+ prescriptionId: '1',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ logisticsNumber: 'SF73648596038958987',
|
|
|
+ patientName: '张三',
|
|
|
+ gender: '男',
|
|
|
+ age: 52,
|
|
|
+ patientPhone: '13828394123',
|
|
|
+ decoctionDispensing: '代煎',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-09-30 14:23:33',
|
|
|
+ evaluationDetail: MOCK_DETAIL_TEXT,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e2',
|
|
|
+ prescriptionDate: '2023-09-24',
|
|
|
+ prescriptionNumber: '2023092423946',
|
|
|
+ medicalInstitution: '同仁堂',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-01 09:15:20',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e3',
|
|
|
+ prescriptionDate: '2023-09-25',
|
|
|
+ prescriptionNumber: '2023092523947',
|
|
|
+ medicalInstitution: '浙江省中医院',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'unchanged',
|
|
|
+ evaluationTime: '2023-10-02 16:40:11',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e4',
|
|
|
+ prescriptionDate: '2023-09-26',
|
|
|
+ prescriptionNumber: '2023092623948',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-03 11:22:45',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e5',
|
|
|
+ prescriptionDate: '2023-09-27',
|
|
|
+ prescriptionNumber: '2023092723949',
|
|
|
+ medicalInstitution: '同仁堂',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-04 08:30:00',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e6',
|
|
|
+ prescriptionDate: '2023-09-28',
|
|
|
+ prescriptionNumber: '2023092823950',
|
|
|
+ medicalInstitution: '浙江省中医院',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'unchanged',
|
|
|
+ evaluationTime: '2023-10-05 13:55:18',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e7',
|
|
|
+ prescriptionDate: '2023-09-29',
|
|
|
+ prescriptionNumber: '2023092923951',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-06 10:10:33',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e8',
|
|
|
+ prescriptionDate: '2023-09-30',
|
|
|
+ prescriptionNumber: '2023093023952',
|
|
|
+ medicalInstitution: '同仁堂',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-07 15:20:44',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e9',
|
|
|
+ prescriptionDate: '2023-10-01',
|
|
|
+ prescriptionNumber: '2023100123953',
|
|
|
+ medicalInstitution: '浙江省中医院',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-08 09:45:22',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e10',
|
|
|
+ prescriptionDate: '2023-10-02',
|
|
|
+ prescriptionNumber: '2023100223954',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'unchanged',
|
|
|
+ evaluationTime: '2023-10-09 14:33:10',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e11',
|
|
|
+ prescriptionDate: '2023-10-03',
|
|
|
+ prescriptionNumber: '2023100323955',
|
|
|
+ medicalInstitution: '同仁堂',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-10 11:18:55',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e12',
|
|
|
+ prescriptionDate: '2023-10-04',
|
|
|
+ prescriptionNumber: '2023100423956',
|
|
|
+ medicalInstitution: '浙江省中医院',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-11 16:02:30',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e13',
|
|
|
+ prescriptionDate: '2023-10-05',
|
|
|
+ prescriptionNumber: '2023100523957',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-12 08:55:41',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e14',
|
|
|
+ prescriptionDate: '2023-10-06',
|
|
|
+ prescriptionNumber: '2023100623958',
|
|
|
+ medicalInstitution: '同仁堂',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'unchanged',
|
|
|
+ evaluationTime: '2023-10-13 13:40:19',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e15',
|
|
|
+ prescriptionDate: '2023-10-07',
|
|
|
+ prescriptionNumber: '2023100723959',
|
|
|
+ medicalInstitution: '浙江省中医院',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-14 10:25:08',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e16',
|
|
|
+ prescriptionDate: '2023-10-08',
|
|
|
+ prescriptionNumber: '2023100823960',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-15 15:12:37',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e17',
|
|
|
+ prescriptionDate: '2023-10-09',
|
|
|
+ prescriptionNumber: '2023100923961',
|
|
|
+ medicalInstitution: '同仁堂',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-16 09:08:52',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e18',
|
|
|
+ prescriptionDate: '2023-10-10',
|
|
|
+ prescriptionNumber: '2023101023962',
|
|
|
+ medicalInstitution: '浙江省中医院',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'unchanged',
|
|
|
+ evaluationTime: '2023-10-17 14:50:26',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e19',
|
|
|
+ prescriptionDate: '2023-10-11',
|
|
|
+ prescriptionNumber: '2023101123963',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-18 11:35:14',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e20',
|
|
|
+ prescriptionDate: '2023-10-12',
|
|
|
+ prescriptionNumber: '2023101223964',
|
|
|
+ medicalInstitution: '同仁堂',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-19 16:28:03',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e21',
|
|
|
+ prescriptionDate: '2023-10-13',
|
|
|
+ prescriptionNumber: '2023101323965',
|
|
|
+ medicalInstitution: '浙江省中医院',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-20 08:42:17',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e22',
|
|
|
+ prescriptionDate: '2023-10-14',
|
|
|
+ prescriptionNumber: '2023101423966',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'unchanged',
|
|
|
+ evaluationTime: '2023-10-21 13:15:49',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e23',
|
|
|
+ prescriptionDate: '2023-10-15',
|
|
|
+ prescriptionNumber: '2023101523967',
|
|
|
+ medicalInstitution: '同仁堂',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-22 10:03:28',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e24',
|
|
|
+ prescriptionDate: '2023-10-16',
|
|
|
+ prescriptionNumber: '2023101623968',
|
|
|
+ medicalInstitution: '浙江省中医院',
|
|
|
+ campus: '萧山馆',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'improved',
|
|
|
+ evaluationTime: '2023-10-23 15:47:56',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'e25',
|
|
|
+ prescriptionDate: '2023-10-17',
|
|
|
+ prescriptionNumber: '2023101723969',
|
|
|
+ medicalInstitution: '蒋村社区卫生服务中心',
|
|
|
+ campus: '湖滨院区',
|
|
|
+ decoctionEnterprise: '重药煎药中心',
|
|
|
+ decoctionCenter: '重药煎药中心华东区',
|
|
|
+ logisticsCompany: '顺丰速运',
|
|
|
+ efficacyResult: 'cured',
|
|
|
+ evaluationTime: '2023-10-24 09:22:11',
|
|
|
+ },
|
|
|
+ ];
|
|
|
+
|
|
|
+function filterEfficacyEvaluations(
|
|
|
+ items: PatientEvaluationModel.EfficacyEvaluation[],
|
|
|
+ query?: PatientEvaluationModel.EfficacyListQuery,
|
|
|
+) {
|
|
|
+ const range = query?.dateRange;
|
|
|
+ if (!range?.length || range.length < 2 || !range[0] || !range[1]) {
|
|
|
+ return items;
|
|
|
+ }
|
|
|
+ const [start, end] = range;
|
|
|
+ return items.filter(
|
|
|
+ (item) => item.prescriptionDate >= start && item.prescriptionDate <= end,
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
+/** 处方疗效评价列表(当前为本地 mock,后期对接后端分页接口) */
|
|
|
+export function listEfficacyEvaluationsMethod(
|
|
|
+ page = 1,
|
|
|
+ size = 10,
|
|
|
+ query?: PatientEvaluationModel.EfficacyListQuery,
|
|
|
+): Promise<TransformList<PatientEvaluationModel.EfficacyEvaluation>> {
|
|
|
+ const filtered = filterEfficacyEvaluations(MOCK_EFFICACY_EVALUATIONS, query);
|
|
|
+ const start = (page - 1) * size;
|
|
|
+ const items = filtered.slice(start, start + size);
|
|
|
+ return Promise.resolve({
|
|
|
+ items,
|
|
|
+ total: filtered.length,
|
|
|
+ data: { page, size, total: filtered.length },
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+/** 处方疗效评价详情(当前为本地 mock,后期对接后端接口) */
|
|
|
+export function getEfficacyEvaluationMethod(id: string) {
|
|
|
+ const item = MOCK_EFFICACY_EVALUATIONS.find((row) => row.id === id);
|
|
|
+ if (!item) {
|
|
|
+ return Promise.reject(new Error('评价记录不存在'));
|
|
|
+ }
|
|
|
+ return Promise.resolve(withEfficacyDetailFields(item));
|
|
|
+}
|
|
|
+
|
|
|
+/** 导出处方疗效评价(当前为本地 mock,后期对接后端导出接口) */
|
|
|
+export function exportEfficacyEvaluationsMethod(
|
|
|
+ query?: PatientEvaluationModel.EfficacyListQuery,
|
|
|
+) {
|
|
|
+ const filtered = filterEfficacyEvaluations(MOCK_EFFICACY_EVALUATIONS, query);
|
|
|
+ const headers = [
|
|
|
+ '处方日期',
|
|
|
+ '处方号',
|
|
|
+ '医疗机构',
|
|
|
+ '院区',
|
|
|
+ '煎药企业',
|
|
|
+ '煎药中心',
|
|
|
+ '物流公司',
|
|
|
+ '疗效评价',
|
|
|
+ '评价时间',
|
|
|
+ '评价备注',
|
|
|
+ ];
|
|
|
+ const rows = filtered.map((item) => [
|
|
|
+ item.prescriptionDate,
|
|
|
+ item.prescriptionNumber,
|
|
|
+ item.medicalInstitution ?? '',
|
|
|
+ item.campus ?? '',
|
|
|
+ item.decoctionEnterprise ?? '',
|
|
|
+ item.decoctionCenter ?? '',
|
|
|
+ item.logisticsCompany ?? '',
|
|
|
+ getEfficacyResultLabel(item.efficacyResult),
|
|
|
+ item.evaluationTime,
|
|
|
+ item.remark ?? '',
|
|
|
+ ]);
|
|
|
+ const csvContent = [headers, ...rows]
|
|
|
+ .map((row) =>
|
|
|
+ row.map((cell) => `"${String(cell).replaceAll('"', '""')}"`).join(','),
|
|
|
+ )
|
|
|
+ .join('\n');
|
|
|
+ const blob = new Blob([`\uFEFF${csvContent}`], {
|
|
|
+ type: 'text/csv;charset=utf-8;',
|
|
|
+ });
|
|
|
+ const url = URL.createObjectURL(blob);
|
|
|
+ const link = document.createElement('a');
|
|
|
+ link.href = url;
|
|
|
+ link.download = `处方疗效评价_${new Date().toISOString().slice(0, 10)}.csv`;
|
|
|
+ link.click();
|
|
|
+ URL.revokeObjectURL(url);
|
|
|
+ return Promise.resolve(true);
|
|
|
+}
|