report.model.ts 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { fromAnalysisModel } from '@/request/model/analysis.model';
  2. export function fromReportData(data: Record<string, any>) {
  3. return {
  4. id: data?.healthAnalysisReportId,
  5. date: data?.reportTime,
  6. scheme: data?.isHaveConditioningProgram === 'Y' && data?.isConfirmConditioningProgram === 'Y' ? data?.healthAnalysisReportId : null,
  7. [ '结果' ]: data?.willillStateName,
  8. [ '程度' ]: data?.willillDegreeName,
  9. [ '类型' ]: data?.willillSocialName,
  10. [ '表现' ]: data?.willillFunctionName,
  11. [ '体质' ]: data?.constitutionGroupName,
  12. [ '体质描述' ]: data?.constitutionGroupDefinition,
  13. [ '体质图表' ]: fromReportPhysiqueChartData(data?.allConstitutionGroups),
  14. descriptionsTable: {
  15. column: [],
  16. data: [
  17. [ '总体特征', data?.constitutionGroupGeneralCharacteristics ],
  18. [ '形体特征', data?.constitutionGroupPhysicalCharacteristics ],
  19. [ '精神特征', data?.constitutionGroupPsychicCharacteristics ],
  20. [ '常见表现', data?.constitutionGroupCommonManifestations ],
  21. [ '发病倾向', data?.constitutionGroupDiseaseTendency ],
  22. [ '环境适应能力', data?.constitutionGroupAdaptability ],
  23. ],
  24. },
  25. tongue: fromAnalysisModel('tongue', data),
  26. face: fromAnalysisModel('face', data),
  27. pulse: fromAnalysisModel('pulse', data),
  28. [ '中医证素' ]: data?.factorItems?.map?.((item: Record<string, any>) => {
  29. return { label: item?.factorItemName, value: item?.factorItemDescription, score: +item?.score };
  30. }),
  31. [ '中医证型' ]: data?.diagnoseSyndromes?.map?.((item: Record<string, any>) => {
  32. return { label: item?.diagnoseSyndromeName, value: item?.diagnoseSyndromeAnalysis };
  33. }),
  34. constitutionGroupImg: data?.constitutionGroupImg,
  35. factorItemRadarImg: data?.factorItemRadarImg,
  36. reportURL: data?.reportPdfUrl,
  37. miniProgramURL: data?.appletImg,
  38. payLock: data?.payLock,
  39. page: { jumpable: true, printable: true },
  40. };
  41. }
  42. export interface ReportTongueException {
  43. title: string;
  44. cover: string;
  45. descriptions: string[];
  46. tags: string[];
  47. }
  48. function fromReportTongueExceptionData(exception: ReportTongueException[], data?: { actualList: Record<string, any>[] }) {
  49. const values = data?.actualList?.map(item => {
  50. let title: string = item?.actualValue ?? '';
  51. const suffix = item?.contrast ?? 's';
  52. if ( suffix !== 's' ) {
  53. title += ` (${ suffix || '' }) `;
  54. exception.push({
  55. title, cover: item.splitImage,
  56. descriptions: [
  57. item.features ? `【特征】${ item.features }` : '',
  58. item.clinicalSignificance ? `【临床意义】${ item.clinicalSignificance }` : '',
  59. ].filter(Boolean),
  60. tags: item.attrs ?? [],
  61. });
  62. }
  63. return title;
  64. }) ?? [];
  65. return values.join('<br>');
  66. }
  67. function fromReportPhysiqueChartData(data: Record<string, any>[]) {
  68. if (data?.some(item => (item.isBasicTo === 'Y' || item.isTendTo === 'Y') && item.constitutionGroupName !== '平和质')) {
  69. data = data.filter(item => item.constitutionGroupName !== '平和质');
  70. }
  71. return data?.map((item: Record<string, any>) => [
  72. item.constitutionGroupName, +item.score,
  73. item.constitutionGroupName === '平和质'
  74. ? /* 平和体质 */ 0
  75. : item.isBasicTo === 'Y'
  76. ? /* 所属体质 */ 1
  77. : item.isTendTo === 'Y'
  78. ? /* 倾向体质 */ 2
  79. : item.isInfer === 'Y'
  80. ? /* 推断体质 */ 3
  81. : 4,
  82. ]);
  83. }