2
0

4 Commity 3fc52ad832 ... 8eb427ca69

Autor SHA1 Správa Dátum
  kumu 8eb427ca69 Merge branch 'develop' of http://121.43.162.141:13000/aio/webview into develop 5 mesiacov pred
  kumu e66bfacdca 调整面象报告异常显示 6 mesiacov pred
  kumu 644fa1eb6e 重新对接 舌面诊报告 接口 6 mesiacov pred
  kumu c68b84b7e4 修改报告图片上传条件:点击打印按钮 6 mesiacov pred

+ 11 - 3
src/components/AnalysisComponent.vue

@@ -36,13 +36,18 @@ const {
                 </tr>
               </thead>
               <tbody>
-                <tr v-for="item in table?.data" :key="item[0]" :data-exception="item.exception">
-                  <td
+              <tr
+                v-for="item in table?.data"
+                :key="item[0]"
+                :data-exception="item.exception"
+                :data-invalid="item.invalid"
+              >
+                <td
                     class="py-4 px-2 border border-primary text-center text-grey"
                     v-for="(value, i) in item"
                     :key="i"
                     v-html="value"
-                  ></td>
+                ></td>
                 </tr>
               </tbody>
             </table>
@@ -100,4 +105,7 @@ const {
 tr[data-exception='true'] td:nth-of-type(2) {
   color: #f87171;
 }
+tr[data-invalid='true'] td:nth-of-type(2) {
+  color: #9ca3af;
+}
 </style>

+ 2 - 2
src/modules/report/report.page.vue

@@ -142,7 +142,7 @@ const scrollable = computed(() => !data.value.payLock &&
             <div class="card__content">
               <PhysiqueChart
                 :dataset="data['体质图表']"
-                v-model:snapshot="data.constitutionGroupImg" @update:snapshot="upload()"
+                v-model:snapshot="data.constitutionGroupImg"
               />
               <div class="my-2 text-primary" v-if="data[ '体质描述' ]">{{ data[ '体质描述' ] }}</div>
               <table class="mt-8 mb-2 w-full table-auto border border-collapse  border-primary">
@@ -183,7 +183,7 @@ const scrollable = computed(() => !data.value.payLock &&
             <div class="card__content">
               <SyndromeChart
                 :dataset="data['中医证素']"
-                v-model:snapshot="data.factorItemRadarImg" @update:snapshot="upload()"
+                v-model:snapshot="data.factorItemRadarImg"
               />
               <table class="mt-8 mb-2 w-full table-auto border border-collapse  border-primary">
                 <tbody>

+ 11 - 10
src/request/api/report.api.ts

@@ -1,26 +1,27 @@
-import { cacheFor }                                                                          from '@/request/api/index';
-import { useVisitor }                                                                        from '@/stores';
-import HTTP                                                                                  from '../alova';
-import { fromFaceAnalysisModel, fromReportData, fromSchemeRequest, fromTongueAnalysisModel } from '../model';
+import { cacheFor }                                             from '@/request/api/index';
+import { useVisitor }                                           from '@/stores';
+import HTTP                                                     from '../alova';
+import { fromAnalysisModel, fromReportData, fromSchemeRequest } from '../model';
 
 
 export function getAnalysisResultsMethod() {
   const Visitor = useVisitor();
   return HTTP.Post(
     `/fdhb-tablet/dialogueManage/dialog/${ Visitor.patientId }/${ Visitor.resultId }`,
-    { asyncTongueResult: false, questions: [] },
+    { questions: [], asyncTongueResult: false, patientId: Visitor.patientId },
     {
       meta: { ignoreException: true },
       async transform(data: Record<string, any>, headers) {
+        const id = data?.tonguefaceAnalysisReportId;
+        const date = data?.tonguefaceAnalysisReportDate;
+        const miniProgramURL = data?.tonguefaceAnalysisReportAppletImg;
         data = data.nextQuestions?.find((item: any) => item.classify === 'tongue_result');
         if ( data ) {
           const { show, force } = await miniProgramMethod();
           return {
-            date: data?.tonguefaceAnalysisReportDate,
-            miniProgramURL: show ? data?.tonguefaceAnalysisReportAppletImg : void 0,
-            tongue: fromTongueAnalysisModel(data),
-            face: fromFaceAnalysisModel(data),
-
+            id, date, miniProgramURL: show ? miniProgramURL : void 0,
+            tongue: fromAnalysisModel('tongue', data),
+            face: fromAnalysisModel('face', data),
             payLock: show && force,
           };
         }

+ 60 - 58
src/request/model/analysis.model.ts

@@ -1,7 +1,47 @@
 import { groupBy } from '@/tools';
 
 
-export function fromTongueAnalysisModel(data: Record<string, any>): AnalysisModel {
+export function fromAnalysisModel(mode: 'tongue' | 'face', data: Record<string, any>): AnalysisModel {
+  let model: AnalysisModel;
+  switch ( mode ) {
+    case 'tongue':
+      model = fromTongueAnalysisModel(data);
+      break;
+    case 'face':
+      model = fromFaceAnalysisModel(data);
+      break;
+  }
+
+  const group = groupBy<AnalysisException>(model.exception, (item) => item.cover ?? '');
+  model.exceptionGroup = Object.entries(group).map(([ key, exception ]) => (
+    { key, exception }
+  ));
+  return model;
+}
+
+export interface AnalysisModel {
+  table: {
+    columns: string[];
+    data: (string[] & { exception: boolean; invalid?: boolean })[];
+  };
+  exception: AnalysisException[];
+  exceptionGroup: {
+    key: string;
+    exception: AnalysisException[]
+  }[];
+  cover: string[];
+  result: string;
+}
+
+export interface AnalysisException {
+  title: string;
+  cover?: string;
+  description?: string;
+  descriptions: { label: string; value: string }[];
+  tags: string[];
+}
+
+function fromTongueAnalysisModel(data: Record<string, any>): AnalysisModel {
   const exception: AnalysisException[] = [];
   const fromTongueException = fromAnalysisException(exception);
   const c1 = data?.upImg ?? data?.tongueImgUrl;
@@ -28,9 +68,9 @@ export function fromTongueAnalysisModel(data: Record<string, any>): AnalysisMode
   };
 }
 
-export function fromFaceAnalysisModel(data: Record<string, any>): AnalysisModel {
+function fromFaceAnalysisModel(data: Record<string, any>): AnalysisModel {
   const exception: AnalysisException[] = [];
-  const fromTongueException = fromAnalysisException(exception, (label, value) => `${label}${value}`);
+  const fromFaceException = fromAnalysisException(exception, (label, value) => `${label}${value}`);
   const c1 = data?.faceImg ?? data?.faceImgUrl;
   const c2 = data?.faceLeft ?? data?.faceLeftImgUrl;
   const c3 = data?.faceRight ?? data?.faceRightImgUrl;
@@ -38,19 +78,19 @@ export function fromFaceAnalysisModel(data: Record<string, any>): AnalysisModel
     table: {
       columns: ['面象维度', '检测结果', '标准值'],
       data: [
-        fromTongueException(data?.faceColor, '面色'),
-        fromTongueException(data?.mainColor, '主色'),
-        fromTongueException(data?.shine, '光泽'),
-        fromTongueException(data?.leftBlackEye, '左黑眼圈'),
-        fromTongueException(data?.rightBlackEye, '右黑眼圈'),
-        fromTongueException(data?.lipColor, '唇色'),
-        fromTongueException(data?.eyeContact, '眼神'),
-        fromTongueException(data?.leftEyeColor, '左目色'),
-        fromTongueException(data?.rightEyeColor, '右目色'),
-        fromTongueException(data?.hecticCheek, '两颧红'),
-        fromTongueException(data?.noseFold, '鼻褶'),
-        fromTongueException(data?.cyanGlabella, '眉间/鼻柱青色'),
-        fromTongueException(data?.faceSkinDefects, '面部皮损'),
+        fromFaceException(data?.faceColor, '面色'),
+        fromFaceException(data?.mainColor, '主色'),
+        fromFaceException(data?.shine, '光泽'),
+        fromFaceException(data?.leftBlackEye, '左黑眼圈'),
+        fromFaceException(data?.rightBlackEye, '右黑眼圈'),
+        fromFaceException(data?.lipColor, '唇色'),
+        fromFaceException(data?.eyeContact, '眼神'),
+        fromFaceException(data?.leftEyeColor, '左目色'),
+        fromFaceException(data?.rightEyeColor, '右目色'),
+        fromFaceException(data?.hecticCheek, '两颧红'),
+        fromFaceException(data?.noseFold, '鼻褶'),
+        fromFaceException(data?.cyanGlabella, '眉间/鼻柱青色'),
+        fromFaceException(data?.faceSkinDefects, '面部皮损'),
       ],
     },
     exception,
@@ -64,54 +104,16 @@ export function fromFaceAnalysisModel(data: Record<string, any>): AnalysisModel
   };
 }
 
-export function fromAnalysisModel(mode: 'tongue' | 'face', data: Record<string, any>): AnalysisModel {
-  let model: AnalysisModel;
-  switch ( mode ) {
-    case 'tongue':
-      model = fromTongueAnalysisModel(data);
-      break;
-    case 'face':
-      model = fromFaceAnalysisModel(data);
-      break;
-  }
-
-  const group = groupBy<AnalysisException>(model.exception, (item) => item.cover ?? '');
-  model.exceptionGroup = Object.entries(group).map(([ key, exception ]) => (
-    { key, exception }
-  ));
-  return model;
-}
-
-export interface AnalysisModel {
-  table: {
-    columns: string[];
-    data: (string[] & { exception: boolean })[];
-  };
-  exception: AnalysisException[];
-  exceptionGroup: {
-    key: string;
-    exception: AnalysisException[]
-  }[];
-  cover: string[];
-  result: string;
-}
-
-export interface AnalysisException {
-  title: string;
-  cover?: string;
-  description?: string;
-  descriptions: { label: string; value: string }[];
-  tags: string[];
-}
-
 function fromAnalysisException(exception: AnalysisException[], $title = (label: string, value: string) => value) {
   return function (data: { actualList?: Record<string, any>[]; standardValue?: string }, label: string) {
     let is = false;
+    let invalid = false;
     const values =
       data?.actualList?.map((item) => {
         let title: string = item?.actualValue ?? '';
         const suffix = item?.contrast ?? 's';
-        if (suffix !== 's') {
+        if (title.endsWith('不符合检测要求')) { invalid = true; }
+        else if (suffix !== 's') {
           if (suffix !== 'r') title += ` (${suffix || ''}) `;
           is = true;
           exception.push({
@@ -126,6 +128,6 @@ function fromAnalysisException(exception: AnalysisException[], $title = (label:
         }
         return title;
       }) ?? [];
-    return Object.assign([label, values.join('<br>'), data?.standardValue ?? ''], { exception: is });
+    return Object.assign([label, values.join('<br>'), data?.standardValue ?? ''], { exception: is, invalid });
   };
 }