fix(recommendation): use displayed skin age across reports and admin

This commit is contained in:
xsl
2026-10-16 19:03:25 +08:00
parent 571d78a2ed
commit bb6da17f54
12 changed files with 106 additions and 35 deletions
+8 -7
View File
@@ -7,7 +7,7 @@ function check(age, firm, vita, stab, tier, adjustment = 'none') {
const r = SS.recommendProduct(age, { firm, vita, stab });
assert.equal(r.tier, tier, `age=${age}; scores=${firm}/${vita}/${stab}`);
assert.equal(r.adjustment, adjustment);
assert.equal(r.version, '2026-10-12-skin-age-v1');
assert.equal(r.version, '2026-10-16-display-skin-age-v2');
if (tier) assert(Math.abs(r.tier - r.baseTier) <= 1);
count++;
}
@@ -50,11 +50,12 @@ const raw = JSON.parse(JSON.stringify(SS.MOCK_RESULT));
raw.skin_age = { value: 24 };
for (const realAge of [24, 40, 60, undefined]) {
const vm = SS.buildViewModel(raw, SS.MOCK_SIDE, { realAge });
assert.equal(vm.essence.tier, 1); // Weak wrinkles never upgrade under32.
assert.equal(vm.recommendation.skinAge, 24);
const age=realAge==null?24:Math.max(realAge-5,Math.min(realAge+5,24));
assert.equal(vm.essence.tier, SS.recommendProduct(age,vm.recommendation.scores).tier);
assert.equal(vm.recommendation.skinAge, age);
assert(Math.abs(vm.recommendation.scores.firm - 7.69) < 1e-12);
assert.equal(UI.build(vm, raw).product.tier, 1);
assert.equal(vm.skinAgeDisplay, realAge == null ? 24 : Math.max(realAge - 5, Math.min(realAge + 5, 24))); // Display clamp does not change raw-age recommendation.
assert.equal(UI.build(vm, raw).product.tier,vm.essence.tier);
assert.equal(vm.skinAgeDisplay, realAge == null ? 24 : Math.max(realAge - 5, Math.min(realAge + 5, 24)));
count++;
}
delete raw.skin_age;
@@ -62,6 +63,6 @@ const missing = SS.buildViewModel(raw, SS.MOCK_SIDE, { realAge: 60 });
assert.equal(missing.group, null);
assert.equal(missing.essence.tier, null);
assert.equal(UI.build(missing, raw).product, null);
assert(missing.recommendation.reason.includes('未获取有效原始肌龄'));
assert(missing.recommendation.reason.includes('未获取有效展示肌龄'));
count++;
console.log(`PASS: ${count} recommendation cases; boundary/threshold/missing/raw-age/actual-age isolation`);
console.log(`PASS: ${count} recommendation cases; unchanged boundary/threshold rules, display-age input and missing-age handling`);