report.model.ts 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. [ '中医证素' ]: data?.factorItems?.map?.((item: Record<string, any>) => {
  28. return { label: item?.factorItemName, value: item?.factorItemDescription, score: +item?.score };
  29. }),
  30. [ '中医证型' ]: data?.diagnoseSyndromes?.map?.((item: Record<string, any>) => {
  31. return { label: item?.diagnoseSyndromeName, value: item?.diagnoseSyndromeAnalysis };
  32. }),
  33. constitutionGroupImg: data?.constitutionGroupImg,
  34. factorItemRadarImg: data?.factorItemRadarImg,
  35. reportURL: data?.reportPdfUrl,
  36. miniProgramURL: data?.appletImg,
  37. payLock: data?.payLock,
  38. };
  39. }
  40. export interface ReportTongueException {
  41. title: string;
  42. cover: string;
  43. descriptions: string[];
  44. tags: string[];
  45. }
  46. function fromReportTongueExceptionData(exception: ReportTongueException[], data?: { actualList: Record<string, any>[] }) {
  47. const values = data?.actualList?.map(item => {
  48. let title: string = item?.actualValue ?? '';
  49. const suffix = item?.contrast ?? 's';
  50. if ( suffix !== 's' ) {
  51. title += ` (${ suffix || '' }) `;
  52. exception.push({
  53. title, cover: item.splitImage,
  54. descriptions: [
  55. item.features ? `【特征】${ item.features }` : '',
  56. item.clinicalSignificance ? `【临床意义】${ item.clinicalSignificance }` : '',
  57. ].filter(Boolean),
  58. tags: item.attrs ?? [],
  59. });
  60. }
  61. return title;
  62. }) ?? [];
  63. return values.join('<br>');
  64. }
  65. function fromReportPhysiqueChartData(data: Record<string, any>[]) {
  66. if (data?.some(item => (item.isBasicTo === 'Y' || item.isTendTo === 'Y') && item.constitutionGroupName !== '平和质')) {
  67. data = data.filter(item => item.constitutionGroupName !== '平和质');
  68. }
  69. return data?.map((item: Record<string, any>) => [
  70. item.constitutionGroupName, +item.score,
  71. item.constitutionGroupName === '平和质'
  72. ? /* 平和体质 */ 0
  73. : item.isBasicTo === 'Y'
  74. ? /* 所属体质 */ 1
  75. : item.isTendTo === 'Y'
  76. ? /* 倾向体质 */ 2
  77. : item.isInfer === 'Y'
  78. ? /* 推断体质 */ 3
  79. : 4,
  80. ]);
  81. }