fix(report): remove eye conditions from contour conclusions

This commit is contained in:
xsl
2026-10-16 11:05:34 +08:00
parent 98d6189f5c
commit 8365ef459f
5 changed files with 24 additions and 20 deletions
+16 -6
View File
@@ -1,17 +1,27 @@
'use strict';
const assert=require('node:assert/strict'),S=require('../js/skin-score'),UI=require('../js/report-ui');
const raw=structuredClone(S.MOCK_RESULT),base=S.buildViewModel(raw,S.MOCK_SIDE,{});
const expected={
改善:'面部轮廓紧致度有待提升,下颌线清晰度不足,左右下颌线角度分别为左 110°/ 右 112.5°;中面部容积略欠饱满,肌肤支撑力偏弱。',
良好:'面部轮廓清晰,下颌线较为清晰,左右下颌线角度左 110°/ 右 112.5°;中面部容积无明显流失;肌肤处于健康状态,支撑力表现良好。',
优秀:'面部轮廓紧致立体,下颌线清晰;中面部容积饱满,肌肤支撑力充足。'
};
for(const P of [20,50,90])for(const pouch of [0,1,2,3,null,9])for(const circle of [0,1,2,3,null,9,1.5]) {
const vm=structuredClone(base);vm.cats.contour.P=P;Object.assign(vm.cats.contour.vars,{eye_pouch:pouch,dark_circle_sev:circle});
const vm=structuredClone(base);vm.cats.contour.P=P;Object.assign(vm.cats.contour.vars,{la:110,ra:112.5,eye_pouch:pouch,dark_circle_sev:circle});
const before=JSON.stringify(vm),text=UI.build(vm,raw).views.find(v=>v.key==='contour').text;
assert.equal(text.includes('眼袋'),[1,2,3].includes(pouch));
assert.equal(text.includes('黑眼圈'),[1,2,3].includes(circle));
assert(!/眼袋|黑眼圈/.test(text));
assert.equal(text,expected[UI.levelForScore(UI.scoreOfP(P))]);
assert(!/无明显眼袋|无明显黑眼圈|数据未获取|[;、]{2}|[{}]/.test(text));
assert.equal(JSON.stringify(vm),before);
}
const saved=UI.build(base,raw);saved.copyRule='wrinkles-excellent-acne-detected-water-v2';saved.views[0].text='眼周无明显眼袋问题、无明显黑眼圈;';
const saved=UI.build(base,raw);saved.copyRule='wrinkles-excellent-acne-detected-water-contour-v3';saved.views[0].text='眼周眼袋初显、黑眼圈轻度;';
base.cats.contour.vars.eye_pouch=0;base.cats.contour.vars.dark_circle_sev=2;
const before=JSON.stringify(saved),display=UI.forDisplay(base,raw,saved);
assert(!display.views[0].text.includes('眼袋'));assert(display.views[0].text.includes('黑眼圈中度'));
assert(!/眼袋|黑眼圈/.test(display.views[0].text));
assert.equal(JSON.stringify(saved),before);assert.deepEqual(display.product,saved.product);
console.log('PASS contour eye copy: 126 grade/detection combinations, only positive problems, missing/invalid omitted, old report refresh and immutable scores/snapshots');
assert.deepEqual(display.care.map(x=>x.key),saved.care.map(x=>x.key));
for(const key of ['la','ra']){
const vm=structuredClone(base);vm.cats.contour.P=20;vm.cats.contour.vars[key]=null;
assert(!/左右下颌线角度|[{}]|眼袋|黑眼圈/.test(UI.build(vm,raw).views[0].text));
}
console.log('PASS contour copy: exact approved templates across 126 eye/grade combinations; missing angles omitted; old report refresh, scoring and recommendation immutable');
+1 -1
View File
@@ -27,7 +27,7 @@ r.score_info.wrinkle_score = 76;
const vm = SS.buildViewModel(r,SS.MOCK_SIDE,{}), ui = UI.build(vm,r);
assert.equal(UI.dimensionScore(vm.dims.firm.S),'9.3');
assert.equal(ui.views.find(v=>v.key==='contour').level,'优秀');
assert(ui.views.find(v=>v.key==='contour').text.includes('眼袋明显'),'contour eye problem follows actual detection, not aggregate grade');
assert(!/眼袋|黑眼圈/.test(ui.views.find(v=>v.key==='contour').text),'contour conclusion omits eye problems at all grades');
const old = structuredClone(ui);
delete old.gradeRule;
old.views[0].level='改善';old.views[0].text='旧轮廓文案';