|
@@ -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 });
|
|
|
};
|
|
|
}
|