final save
@@ -14,6 +14,9 @@ aipkey.bash
|
||||
h5/data/
|
||||
temp/
|
||||
|
||||
# 大型设计源文件,不入库
|
||||
new_feedback/第三轮反馈20261012/UI外发版10.09.psd
|
||||
|
||||
# graphify 本地缓存与日期快照(可重建,无需入库)
|
||||
graphify-out/cache/
|
||||
graphify-out/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# 实测描述与旧护理兼容:修复复测
|
||||
|
||||
> 本文记录的是此前扩大修改范围的版本,现已被用户收窄决定取代,不代表当前待发布文案。最终范围见《文案最终范围-仅皱纹优秀与痘痘检出-2026-10-15.md》:其他文案及护理建议原文均已恢复;分档与旧护理兼容保留。
|
||||
|
||||
日期:2026-10-15。此文为《线上10例报告文案对照》的修复后补充,不覆盖第一次测试暴露问题的记录。
|
||||
|
||||
## 本次修改
|
||||
|
||||
- 十分制显示分档仍为低于8改善、8至不足9良好、9及以上优秀,评分/综合分/推荐算法不变。
|
||||
- 七项结论采用整体状态评价+实际检测数据,不再根据高分断言没有皱纹、泛红、色素沉积、眼袋或有很强的屏障能力;低分也不推断静态纹固化、中面部容积流失等未直接证实的状态。
|
||||
- 皱纹所有档位保留皱纹及细纹数量;轮廓所有档位保留下颌线角度、实际眼袋与黑眼圈等级;水分保留分数、缺水面积和有效严重度;泛红保留实测面积。
|
||||
- 痘痘正计数如实显示数量、种类及整体状态,零计数与缺失分开。检出脓包/结节仍提示具体种类,不凭数量推断炎症严重程度。
|
||||
- 旧护理条目没有key时按七项的准确名称映射新版护理。保持旧项目、数量及顺序;不擅自把旧两项扩充成三项,不重新推荐产品。未知名称保留原文,不按数组位置乱配。
|
||||
- 文案版本 `score-summary-factual-detail-v1`,与分档版本独立;即使已有新的8/9分档标签,旧文案也能刷新。
|
||||
- 后台缺少原始数据无法刷新时明确显示“保存快照,未刷新文案”,不冒称已更新。原始报告、数据库及旧算法摘要不覆盖。
|
||||
|
||||
## 同一批10条真实案例复测
|
||||
|
||||
只读线上取数,使用保存的VM进行展示层回放,不调用付费检测。10条共70个页卡、25条护理建议,通过档位、实测数量保留、旧名称映射、源对象不可变、推荐不变及护理顺序不变检查。
|
||||
|
||||
|案例|复测|护理项目与新档位|
|
||||
|---|---|---|
|
||||
|R20261015-144549-7CNL|通过|泛红(优秀)→皱纹(优秀)→轮廓(优秀)|
|
||||
|R20261015-134214-Y6L7|通过|轮廓(优秀)→皱纹(优秀)|
|
||||
|R20261015-112350-ZLOF|通过|肤色(优秀)→水分(优秀)→泛红(良好)|
|
||||
|R20261015-111214-JKNS|通过|皱纹(优秀)→肤色(良好)→水分(优秀)|
|
||||
|R20261015-105142-4UTP|通过|皱纹(良好)→平滑度(优秀)|
|
||||
|R20261015-105002-HVEV|通过|皱纹(优秀)→平滑度(优秀)|
|
||||
|R20261015-104945-ZC5V|通过|皱纹(优秀)→泛红(优秀)|
|
||||
|R20261015-104729-BLXO|通过|皱纹(优秀)→肤色(优秀)→水分(优秀)|
|
||||
|R20261015-104209-V2J6|通过|皱纹(优秀)→肤色(优秀)→水分(优秀)|
|
||||
|R20261015-103650-FVQA|通过|皱纹(优秀)→泛红(良好)|
|
||||
|
||||
## 新版代表文案
|
||||
|
||||
### R20261015-144549-7CNL
|
||||
|
||||
- 轮廓(9.4,优秀):面部轮廓整体状态较好,建议维持紧致护理并关注局部变化;左右下颌线角度分别为左 112.18°/ 右 112.67°;眼袋明显、黑眼圈中度。
|
||||
- 皱纹(9.3,优秀):全脸共检测到皱纹 10 条、细纹 10 条;整体纹路状态较好,建议维持日常淡纹与保湿护理。
|
||||
- 泛红(9.3,优秀):泛红面积 4%;整体泛红项状态较好,建议维持温和护理,持续关注泛红变化。
|
||||
|
||||
### R20261015-111214-JKNS
|
||||
|
||||
- 肤色(8.8,良好):检测到当前肌肤色素分 66,存在中度黑眼圈;整体肤色状态较稳定,建议持续关注局部暗沉与肤色均匀度。
|
||||
- 水分(9.9,优秀):水分分 97;缺水面积 3%,缺水严重度 3,整体水分状态较好,建议维持补水与保湿习惯。
|
||||
|
||||
### R20261015-103650-FVQA
|
||||
|
||||
- 泛红(8.4,良好):泛红面积 12.5%;整体泛红项状态较稳定,建议保持温和护理并关注局部变化。
|
||||
|
||||
## 自动化回归
|
||||
|
||||
- `node h5/test/factual-copy.js`:实际参数、缺失与零值、旧名称护理、旧两项不扩充、未知项不乱配。
|
||||
- `H5_COPY_CASE_FILE=/private/ten-copy-cases.json node h5/test/report-copy-cases.js`:真实10例只读展示回归;私有样例不进入Git。
|
||||
- `H5_ACNE_MAX_TEST=1 node h5/test/report-persistence.mjs`:浏览器H5/后台/历史回看、筛选与导出,旧名称护理更新且快照文件字节不变。
|
||||
|
||||
本地修改完成,尚未提交或上线。此前“9条旧护理未刷新”的问题已修复,不代表本次把历史护理重新选成新规则三项。
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# 报告文案统一按十分制分档
|
||||
|
||||
> 后续确认:文案仅修改皱纹优秀档及痘痘有皮损时的描述,其他模板和护理原文恢复原版。本文中关于额外眼袋/明显缺水文案调整的描述已被收回,最终范围见《文案最终范围-仅皱纹优秀与痘痘检出-2026-10-15.md》。分档规则不变。
|
||||
|
||||
## 原因与规则
|
||||
|
||||
案例 R20261015-144549-7CNL 的紧塑力 P=76、S=9.28(显示9.3),轮廓 P=79、S=9.37。旧文案按百分制80/90分档,而十分制使用7+3P/100,导致9.x仍显示改善。
|
||||
|
||||
用户确认:分数计算保持不变,报告文案和护理建议改为按页面实际显示的一位小数分档:低于8为改善,8到不足9为良好,9及以上为优秀。使用与页面相同的两位存储精度及一位显示舍入,例如S=8.95显示9.0,文案为优秀。新规则标识 `display-score-8-9-v1`。
|
||||
|
||||
## 覆盖范围
|
||||
|
||||
- 七项:轮廓、皱纹、肤色、平滑度、水分、泛红、痘痘;文案与对应护理建议复用同一档位。
|
||||
- 肤色、水分仍使用各自独立分数;保留水分严重度交叉校验,不改评分公式。
|
||||
- 痘痘不再通过“有脓包/结节”或“有皮损”独立降档,实际计数和中重度皮损提示保留,不能以优秀文案声称未检出。
|
||||
- 轮廓眼袋、肤色黑眼圈、平滑度毛孔黑头按实际检测描述;明显缺水也不因文案等级较高就声称水润。
|
||||
- 后台列表、七项评分、三维度评分、筛选、统计、CSV采用一致分档。
|
||||
- 原始算法中的旧六分类等级、摘要及生活方式保留为审计数据,后台明确标注为旧版,不作为当前报告文案分档依据。
|
||||
|
||||
## 历史数据
|
||||
|
||||
旧报告打开时仅刷新展示文案、护理建议对应档位,不改原始数据、评分、产品推荐、护理项目选择和顺序,不覆盖历史快照。后台详情在具备原始返回时同样刷新;缺少原始数据时保留原有文案,不臆造检测数据。
|
||||
|
||||
## 真实案例复核
|
||||
|
||||
R20261015-144549-7CNL:紧塑力仍显示9.3,轮廓9.37按显示9.4归为优秀,皱纹9.28按显示9.3归为优秀。轮廓仍如实显示“眼袋明显、黑眼圈中度”,痘痘仍显示实际皮损,不改变计分、综合分和推荐规则。
|
||||
|
||||
## 回归
|
||||
|
||||
`node h5/test/display-grade.js` 覆盖七项、8/9临界舍入、空值、9.3案例、真实眼袋、旧报告不可变及历史推荐/顺序保留。
|
||||
|
||||
`H5_ACNE_MAX_TEST=1 node h5/test/report-persistence.mjs` 覆盖新记录落库、前后台展示、筛选、统计、CSV、历史报告刷新且不覆写原始快照。
|
||||
@@ -0,0 +1,439 @@
|
||||
# 线上最近10条成功案例:报告文案对照
|
||||
|
||||
测试日期:2026-10-15。对比线上已保存的报告快照(服务器代码60f0965)与本地待发布版 `display-score-8-9-v1`。
|
||||
|
||||
方式:只读SSH取数,复用保存的报告VM和原始检测字段,调用实际 `ReportUI.forDisplay` 展示路径;不是重新付费检测,也不是10台实机测试。本次未上线、未改线上记录。
|
||||
|
||||
## 结论
|
||||
|
||||
- 10条、70个页卡;46个档位变化,47段页卡文案变化。
|
||||
- 三维度原分、综合分、保存的数据对象、产品推荐、原有护理项目及顺序未被修改。
|
||||
- 9条旧报告缺少护理条目的key,现有刷新逻辑仍会保留旧版护理文案,未能同步新分档。此项未通过,需补充旧结构兼容后再发版。
|
||||
- 9条旧报告的肤色/水分页卡原P字段都存了同一个“肤色水润”合成分;新版展示改用独立肤色、水分值。这是历史结构差异,不是三维度评分或总分被改写。
|
||||
- 皱纹优秀档仍沿用已确认文案,不显示检出的皱纹/细纹数量。若希望高分报告也展示实际数量,需要另外调整优秀档文案,不能把“有计数”直接等同于“有明显静态深纹”。
|
||||
|
||||
## 10条总览
|
||||
|
||||
表中分数依次为紧塑力/透亮感/稳韧力;小项为原档位→新档位,仅列发生变化的档位。
|
||||
|
||||
|案例ID|三维度分数|综合分|档位变化|护理兼容|
|
||||
|---|---|---:|---|---|
|
||||
|R20261015-144549-7CNL|9.3/9.6/9.3|94|轮廓 改善→优秀;皱纹 改善→优秀;肤色 良好→优秀;泛红 改善→优秀;痘痘 良好→优秀|通过:护理文案同步新档位|
|
||||
|R20261015-134214-Y6L7|9.2/9.8/9.9|96|轮廓 改善→优秀;皱纹 改善→优秀;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|R20261015-112350-ZLOF|9.8/9.6/8.7|94|肤色 良好→优秀;水分 良好→优秀;泛红 改善→良好;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|R20261015-111214-JKNS|9.2/9.3/9.9|94|皱纹 改善→优秀;肤色 改善→良好;平滑度 良好→优秀;水分 改善→优秀;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|R20261015-105142-4UTP|8.9/9.5/9.6|93|皱纹 改善→良好;肤色 良好→优秀;平滑度 良好→优秀;水分 良好→优秀;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|R20261015-105002-HVEV|9.0/9.5/9.8|94|皱纹 改善→优秀;肤色 良好→优秀;平滑度 良好→优秀;水分 良好→优秀;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|R20261015-104945-ZC5V|9.0/9.4/9.3|92|轮廓 良好→优秀;皱纹 改善→优秀;肤色 改善→优秀;水分 改善→优秀;泛红 改善→优秀;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|R20261015-104729-BLXO|9.0/9.7/9.9|95|皱纹 改善→优秀;肤色 良好→优秀;水分 良好→优秀;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|R20261015-104209-V2J6|9.1/9.7/9.8|95|皱纹 改善→优秀;肤色 良好→优秀;水分 良好→优秀;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|R20261015-103650-FVQA|9.3/9.7/8.4|91|皱纹 改善→优秀;肤色 良好→优秀;水分 良好→优秀;泛红 改善→良好;痘痘 良好→优秀|未通过:旧结构护理文案未刷新|
|
||||
|
||||
## 逐条页卡文案全文对照
|
||||
|
||||
### R20261015-144549-7CNL
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12+care-2026-10-15。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 轮廓:改善→优秀(新版十分制显示 9.4)
|
||||
|
||||
线上原文:面部轮廓紧致度有待提升,下颌线清晰度不足,左右下颌线角度分别为左 112.18°/ 右 112.67°;眼袋明显、黑眼圈中度;中面部容积略欠饱满,肌肤支撑力偏弱。
|
||||
|
||||
本地新版:面部轮廓紧致立体,下颌线清晰;眼袋明显、黑眼圈中度;中面部容积饱满,肌肤支撑力充足。
|
||||
|
||||
#### 皱纹:改善→优秀(新版十分制显示 9.3)
|
||||
|
||||
线上原文:全脸共检测到皱纹 10 条、细纹 10 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:面中、口周、眼周等各区域均无明显皱纹沟壑,无静态深纹与粗纹,各类纹路面积均处于极低水平,面部整体平整细腻。
|
||||
|
||||
#### 肤色:良好→优秀(新版十分制显示 9.6)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 100,局部有色素沉积;存在中度黑眼圈,整体状态稳定,局部透亮感稍弱。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 100,无明显色素沉积,存在中度黑眼圈;肤色均匀透亮。
|
||||
|
||||
#### 泛红:改善→优秀(新版十分制显示 9.3)
|
||||
|
||||
线上原文:泛红面积达 4%,肌肤泛红明显,敏感区域可见泛红;对外界刺激耐受度不足,容易受外界因素影响产生状态波动。
|
||||
|
||||
本地新版:泛红面积 4%,无明显泛红、敏感迹象;对外界刺激耐受度佳,肌肤处于稳定的健康状态。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:检测到 4 处皮损(闭口粉刺3处、痘印1处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 4 处皮损(闭口粉刺3处、痘印1处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
护理项目顺序:泛红→皱纹→轮廓。
|
||||
|
||||
护理「泛红」:改善→优秀。
|
||||
|
||||
线上原文:关注屏障修复与舒缓,精简护肤流程,选择温和洁面方式,修复受损角质层。若状态持续无明显好转,可寻求专业护肤建议。减少外界刺激,如酒精、香精、高浓度酸类精华等成分,避免冷热骤变刺激。
|
||||
|
||||
本地新版:持续规律护理并按季节阶段性调整,巩固皮肤耐受稳态。保持健康作息与均衡饮食,维持皮肤屏障稳态。
|
||||
|
||||
护理「皱纹」:改善→优秀。
|
||||
|
||||
线上原文:重视纹路管理,日常可使用含有肽类、胶原类成分的淡纹精华,针对眼周、法令纹等动态纹高发区域配合点按手法,遏制静态纹转化,帮肌肤恢复平滑细腻的状态。注意睡姿,减少面部长期受压;减少夸张表情,避免揉眼、托腮等表情性挤压习惯,减少纹路加深。
|
||||
|
||||
本地新版:以预防初纹为核心,搭配抗初老型精华,提前建立抗氧化/紧致护理习惯,延缓第一道静态纹出现。保持良好作息与运动习惯,坚持防晒,减轻光老化与糖化负担,维持肌肤稳定状态。
|
||||
|
||||
护理「轮廓」:改善→优秀。
|
||||
|
||||
线上原文:重点进行轮廓紧致管理,关注面中、苹果肌与下颌线区域。日常增加紧致精华步骤,配合由下向上的轻柔提升按摩,帮助肌肤维持弹润和支撑感,让轮廓看起来更紧实。保证充足、规律的睡眠,让肌肤在夜间充分修护;坚持防晒,减少紫外线带来的老化影响;减少熬夜。
|
||||
|
||||
本地新版:保持现有紧致抗衰护理节奏,日常叠加使用提亮精华,坚持防晒,加强光损伤防护与状态管理,持续关注面中疲态与轮廓支撑状态,让紧致状态更稳定、更持久。坚持防晒与规律作息,均衡饮食,保证优质蛋白、新鲜蔬果和健康脂肪摄入,适度运动。
|
||||
|
||||
### R20261015-134214-Y6L7
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 轮廓:改善→优秀(新版十分制显示 9.4)
|
||||
|
||||
线上原文:面部轮廓紧致度有待提升,下颌线清晰度不足,左右下颌线角度分别为左 111.24°/ 右 105.61°;眼袋明显、黑眼圈中度;中面部容积略欠饱满,肌肤支撑力偏弱。
|
||||
|
||||
本地新版:面部轮廓紧致立体,下颌线清晰;眼袋明显、黑眼圈中度;中面部容积饱满,肌肤支撑力充足。
|
||||
|
||||
#### 皱纹:改善→优秀(新版十分制显示 9.2)
|
||||
|
||||
线上原文:全脸共检测到皱纹 8 条、细纹 4 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:面中、口周、眼周等各区域均无明显皱纹沟壑,无静态深纹与粗纹,各类纹路面积均处于极低水平,面部整体平整细腻。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:检测到 3 处皮损(闭口粉刺2处、痘印1处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 3 处皮损(闭口粉刺2处、痘印1处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=92→86;水分 P=92→98。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:轮廓→皱纹。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
### R20261015-112350-ZLOF
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 肤色:良好→优秀(新版十分制显示 9.4)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 89,局部有色素沉积;存在中度黑眼圈,整体状态稳定,局部透亮感稍弱。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 89,无明显色素沉积,存在中度黑眼圈;肤色均匀透亮。
|
||||
|
||||
#### 水分:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:水分分 95;缺水面积 4.3%、肌肤含水量处于健康水平,整体水润度良好。
|
||||
|
||||
本地新版:水分分 95;角质层含水量充足,肌肤屏障锁水能力强,表面饱满水润,无干燥紧绷表现。
|
||||
|
||||
#### 泛红:改善→良好(新版十分制显示 8.7)
|
||||
|
||||
线上原文:泛红面积达 8.2%,肌肤泛红明显,敏感区域可见泛红;对外界刺激耐受度不足,容易受外界因素影响产生状态波动。
|
||||
|
||||
本地新版:泛红面积 8.2%,肌肤存在局部轻微泛红;对外界环境有良好的耐受度,仅在接触强刺激物时偶有轻微反应。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.7)
|
||||
|
||||
线上原文:检测到 6 处皮损(闭口粉刺1处、丘疹2处、痘印3处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 6 处皮损(闭口粉刺1处、丘疹2处、痘印3处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=88→81;水分 P=88→95。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:肤色→水分→泛红。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
### R20261015-111214-JKNS
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 轮廓:优秀→优秀(新版十分制显示 9.7)
|
||||
|
||||
线上原文:面部轮廓紧致立体,下颌线清晰;眼周无明显眼袋问题、黑眼圈中度;中面部容积饱满,肌肤支撑力充足。
|
||||
|
||||
本地新版:面部轮廓紧致立体,下颌线清晰;眼周眼袋初显、黑眼圈中度;中面部容积饱满,肌肤支撑力充足。
|
||||
|
||||
#### 皱纹:改善→优秀(新版十分制显示 9.2)
|
||||
|
||||
线上原文:全脸共检测到皱纹 25 条、细纹 27 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:面中、口周、眼周等各区域均无明显皱纹沟壑,无静态深纹与粗纹,各类纹路面积均处于极低水平,面部整体平整细腻。
|
||||
|
||||
#### 肤色:改善→良好(新版十分制显示 8.8)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 66,存在色素沉着较显著,存在中度黑眼圈,整体透亮感不足。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 66,局部有色素沉积;存在中度黑眼圈,整体状态稳定,局部透亮感稍弱。
|
||||
|
||||
#### 平滑度:良好→优秀(新版十分制显示 9.7)
|
||||
|
||||
线上原文:肌肤整体较为平滑,局部区域细腻度不足;检测到粗大毛孔 330 颗、黑头 17 颗,有轻微角质粗糙感。
|
||||
|
||||
本地新版:肌肤质感整体较好;本次检测到粗大毛孔 330 颗、黑头 17 颗,局部仍有可改善之处。
|
||||
|
||||
#### 水分:改善→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:水分分 97;缺水面积 3%、肌肤缺水比较严重 3,肌肤含水量偏低,水润度不足,表面偏干燥,容易出现干纹。
|
||||
|
||||
本地新版:水分分 97;角质层含水量充足,肌肤屏障锁水能力强,表面饱满水润,无干燥紧绷表现。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:检测到 4 处皮损(闭口粉刺4处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 4 处皮损(闭口粉刺4处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=77.9→58.8;水分 P=77.9→97。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:皱纹→肤色→水分。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
### R20261015-105142-4UTP
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 皱纹:改善→良好(新版十分制显示 8.9)
|
||||
|
||||
线上原文:全脸共检测到皱纹 17 条、细纹 16 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:全脸共检测到皱纹 17 条、细纹 16 条,面部整体平整,仅眼周或口周有细微的干纹,无明显静态深纹,纹路面积占比相对较低。
|
||||
|
||||
#### 肤色:良好→优秀(新版十分制显示 9.3)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 84,局部有色素沉积;仅存在轻度黑眼圈,整体状态稳定,局部透亮感稍弱。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 84,无明显色素沉积,仅存在轻度黑眼圈;肤色均匀透亮。
|
||||
|
||||
#### 平滑度:良好→优秀(新版十分制显示 9.5)
|
||||
|
||||
线上原文:肌肤整体较为平滑,局部区域细腻度不足;检测到粗大毛孔 332 颗、黑头 46 颗,有轻微角质粗糙感。
|
||||
|
||||
本地新版:肌肤质感整体较好;本次检测到粗大毛孔 332 颗、黑头 46 颗,局部仍有可改善之处。
|
||||
|
||||
#### 水分:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:水分分 97;缺水面积 2.5%、肌肤含水量处于健康水平,整体水润度良好。
|
||||
|
||||
本地新版:水分分 97;角质层含水量充足,肌肤屏障锁水能力强,表面饱满水润,无干燥紧绷表现。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.6)
|
||||
|
||||
线上原文:检测到 4 处皮损(闭口粉刺2处、丘疹1处、痘印1处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 4 处皮损(闭口粉刺2处、丘疹1处、痘印1处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=86.9→76.8;水分 P=86.9→97。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:皱纹→平滑度。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
### R20261015-105002-HVEV
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 皱纹:改善→优秀(新版十分制显示 9.0)
|
||||
|
||||
线上原文:全脸共检测到皱纹 16 条、细纹 11 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:面中、口周、眼周等各区域均无明显皱纹沟壑,无静态深纹与粗纹,各类纹路面积均处于极低水平,面部整体平整细腻。
|
||||
|
||||
#### 肤色:良好→优秀(新版十分制显示 9.3)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 88,局部有色素沉积;仅存在轻度黑眼圈,整体状态稳定,局部透亮感稍弱。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 88,无明显色素沉积,仅存在轻度黑眼圈;肤色均匀透亮。
|
||||
|
||||
#### 平滑度:良好→优秀(新版十分制显示 9.5)
|
||||
|
||||
线上原文:肌肤整体较为平滑,局部区域细腻度不足;检测到粗大毛孔 303 颗、黑头 44 颗,有轻微角质粗糙感。
|
||||
|
||||
本地新版:肌肤质感整体较好;本次检测到粗大毛孔 303 颗、黑头 44 颗,局部仍有可改善之处。
|
||||
|
||||
#### 水分:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:水分分 98;缺水面积 1.4%、肌肤含水量处于健康水平,整体水润度良好。
|
||||
|
||||
本地新版:水分分 98;角质层含水量充足,肌肤屏障锁水能力强,表面饱满水润,无干燥紧绷表现。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:检测到 2 处皮损(闭口粉刺1处、痘印1处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 2 处皮损(闭口粉刺1处、痘印1处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=87.9→77.8;水分 P=87.9→98。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:皱纹→平滑度。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
### R20261015-104945-ZC5V
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 轮廓:良好→优秀(新版十分制显示 9.7)
|
||||
|
||||
线上原文:面部轮廓清晰,下颌线较为清晰,眼周眼袋初显、黑眼圈中度;中面部容积无明显流失;肌肤处于健康状态,支撑力表现良好。
|
||||
|
||||
本地新版:面部轮廓紧致立体,下颌线清晰;眼周无明显眼袋问题、黑眼圈中度;中面部容积饱满,肌肤支撑力充足。
|
||||
|
||||
#### 皱纹:改善→优秀(新版十分制显示 9.0)
|
||||
|
||||
线上原文:全脸共检测到皱纹 15 条、细纹 8 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:面中、口周、眼周等各区域均无明显皱纹沟壑,无静态深纹与粗纹,各类纹路面积均处于极低水平,面部整体平整细腻。
|
||||
|
||||
#### 肤色:改善→优秀(新版十分制显示 9.4)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 91,存在色素沉着较显著,存在中度黑眼圈,整体透亮感不足。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 91,无明显色素沉积,存在中度黑眼圈;肤色均匀透亮。
|
||||
|
||||
#### 水分:改善→优秀(新版十分制显示 9.4)
|
||||
|
||||
线上原文:水分分 81;缺水面积 16.4%、肌肤缺水比较严重 19,肌肤含水量偏低,水润度不足,表面偏干燥,容易出现干纹。
|
||||
|
||||
本地新版:水分分 81;角质层含水量充足,肌肤屏障锁水能力强,表面饱满水润,无干燥紧绷表现。
|
||||
|
||||
#### 泛红:改善→优秀(新版十分制显示 9.3)
|
||||
|
||||
线上原文:泛红面积达 8.5%,肌肤泛红明显,敏感区域可见泛红;对外界刺激耐受度不足,容易受外界因素影响产生状态波动。
|
||||
|
||||
本地新版:泛红面积 8.5%,无明显泛红、敏感迹象;对外界刺激耐受度佳,肌肤处于稳定的健康状态。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.6)
|
||||
|
||||
线上原文:检测到 7 处皮损(闭口粉刺2处、丘疹1处、痘印4处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 7 处皮损(闭口粉刺2处、丘疹1处、痘印4处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=79.9→78.8;水分 P=79.9→81。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:皱纹→泛红。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
### R20261015-104729-BLXO
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 皱纹:改善→优秀(新版十分制显示 9.0)
|
||||
|
||||
线上原文:全脸共检测到皱纹 11 条、细纹 10 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:面中、口周、眼周等各区域均无明显皱纹沟壑,无静态深纹与粗纹,各类纹路面积均处于极低水平,面部整体平整细腻。
|
||||
|
||||
#### 肤色:良好→优秀(新版十分制显示 9.4)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 88,局部有色素沉积;仅存在轻度黑眼圈,整体状态稳定,局部透亮感稍弱。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 88,无明显色素沉积,仅存在轻度黑眼圈;肤色均匀透亮。
|
||||
|
||||
#### 水分:良好→优秀(新版十分制显示 10.0)
|
||||
|
||||
线上原文:水分分 99;缺水面积 0.8%、肌肤含水量处于健康水平,整体水润度良好。
|
||||
|
||||
本地新版:水分分 99;角质层含水量充足,肌肤屏障锁水能力强,表面饱满水润,无干燥紧绷表现。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:检测到 3 处皮损(闭口粉刺2处、痘印1处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 3 处皮损(闭口粉刺2处、痘印1处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=89.9→80.8;水分 P=89.9→99。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:皱纹→肤色→水分。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
### R20261015-104209-V2J6
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 皱纹:改善→优秀(新版十分制显示 9.1)
|
||||
|
||||
线上原文:全脸共检测到皱纹 12 条、细纹 9 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:面中、口周、眼周等各区域均无明显皱纹沟壑,无静态深纹与粗纹,各类纹路面积均处于极低水平,面部整体平整细腻。
|
||||
|
||||
#### 肤色:良好→优秀(新版十分制显示 9.4)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 89,局部有色素沉积;仅存在轻度黑眼圈,整体状态稳定,局部透亮感稍弱。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 89,无明显色素沉积,仅存在轻度黑眼圈;肤色均匀透亮。
|
||||
|
||||
#### 水分:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:水分分 97;缺水面积 2.5%、肌肤含水量处于健康水平,整体水润度良好。
|
||||
|
||||
本地新版:水分分 97;角质层含水量充足,肌肤屏障锁水能力强,表面饱满水润,无干燥紧绷表现。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:检测到 2 处皮损(闭口粉刺1处、痘印1处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 2 处皮损(闭口粉刺1处、痘印1处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=89.2→81.4;水分 P=89.2→97。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:皱纹→肤色→水分。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
### R20261015-103650-FVQA
|
||||
|
||||
原报告版本:2026-10-09+feedback-2026-10-12。产品:1'me 主场精华 I(保持不变)。
|
||||
|
||||
#### 皱纹:改善→优秀(新版十分制显示 9.3)
|
||||
|
||||
线上原文:全脸共检测到皱纹 6 条、细纹 5 条,面中、口周、眼周等区域已出现静态纹倾向,纹路已呈现固化趋势,并非临时性干纹。
|
||||
|
||||
本地新版:面中、口周、眼周等各区域均无明显皱纹沟壑,无静态深纹与粗纹,各类纹路面积均处于极低水平,面部整体平整细腻。
|
||||
|
||||
#### 肤色:良好→优秀(新版十分制显示 9.5)
|
||||
|
||||
线上原文:检测到当前肌肤色素分 89,局部有色素沉积;存在中度黑眼圈,整体状态稳定,局部透亮感稍弱。
|
||||
|
||||
本地新版:检测到当前肌肤色素分 89,无明显色素沉积,存在中度黑眼圈;肤色均匀透亮。
|
||||
|
||||
#### 水分:良好→优秀(新版十分制显示 9.9)
|
||||
|
||||
线上原文:水分分 95;缺水面积 4.7%、肌肤含水量处于健康水平,整体水润度良好。
|
||||
|
||||
本地新版:水分分 95;角质层含水量充足,肌肤屏障锁水能力强,表面饱满水润,无干燥紧绷表现。
|
||||
|
||||
#### 泛红:改善→良好(新版十分制显示 8.4)
|
||||
|
||||
线上原文:泛红面积达 12.5%,肌肤泛红明显,敏感区域可见泛红;对外界刺激耐受度不足,容易受外界因素影响产生状态波动。
|
||||
|
||||
本地新版:泛红面积 12.5%,肌肤存在局部轻微泛红;对外界环境有良好的耐受度,仅在接触强刺激物时偶有轻微反应。
|
||||
|
||||
#### 痘痘:良好→优秀(新版十分制显示 9.7)
|
||||
|
||||
线上原文:检测到 6 处皮损(闭口粉刺2处、丘疹2处、痘印2处),以闭口粉刺、丘疹为主,无明显红肿痘痘;皮脂分泌基本正常,毛孔偶有轻微堵塞。
|
||||
|
||||
本地新版:检测到 6 处皮损(闭口粉刺2处、丘疹2处、痘印2处),建议关注局部皮损并结合检测图片查看。
|
||||
|
||||
历史肤色/水分字段变化:肤色 P=88.9→82.8;水分 P=88.9→95。原三维度、综合分不变。
|
||||
|
||||
护理项目顺序:皱纹→泛红。
|
||||
|
||||
护理兼容:旧条目只有name,没有key;现有本地forDisplay仍返回原护理文本,需要以稳定名称映射旧条目,或另行确认是否按新规则重新选三项。
|
||||
|
||||
## 代表性差异
|
||||
|
||||
- 7CNL:轮廓9.4由改善变优秀,同时保留眼袋明显、黑眼圈中度;皱纹9.3改优秀,原10条皱纹/10条细纹的计数不再出现在优秀文案。
|
||||
- JKNS:水分97、缺水严重度3,线上原文仍写“肌肤缺水比较严重3”;新版改为水润充足。肤色独立分58.8→十分制8.8,改良好,而不是随水分变优秀。
|
||||
- FVQA:泛红8.4由改善改良好,泛红面积12.5%仍保留。
|
||||
|
||||
## 发布前建议
|
||||
|
||||
先补齐旧护理条目的兼容,再重复这10例回归。保留历史推荐、分数和原始快照;若要让全部旧报告也采用新版“七选三”护理顺序,应单独确认,不能在仅改分档时默默重选。
|
||||
|
||||
|
After Width: | Height: | Size: 736 KiB |
|
After Width: | Height: | Size: 790 KiB |
|
After Width: | Height: | Size: 809 KiB |
@@ -0,0 +1,129 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>轮廓与皱纹三视图渐变 · 测试预览</title>
|
||||
<style>
|
||||
* { box-sizing:border-box; }
|
||||
html,body { margin:0; height:100%; background:#161616; font-family:system-ui,sans-serif; }
|
||||
body { display:flex; flex-direction:column; }
|
||||
header { flex:none; min-height:48px; background:#fff; display:flex; align-items:center; justify-content:center; gap:12px; padding:8px 12px; font-size:12px; }
|
||||
header span { color:#666; }
|
||||
button { border:0; border-radius:5px; background:#F5F078; color:#282828; padding:7px 12px; cursor:pointer; }
|
||||
iframe { display:block; border:0; width:100%; flex:1; min-height:0; }
|
||||
#error { display:none; color:#fff; padding:20px; text-align:center; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header><strong>轮廓/皱纹预览</strong><span>每3.8秒切换 · 渐变0.8秒</span><button id="toggle" disabled>暂停</button></header>
|
||||
<p id="error" role="alert"></p>
|
||||
<iframe id="report" title="测试报告:正脸、左脸、右脸自动渐变" src="./?mock=1&screen=report"></iframe>
|
||||
<script>
|
||||
// Standalone local demo. Only alters this iframe's DOM; no analysis or save calls.
|
||||
(function () {
|
||||
var observer=null, paused=false, disposed=false, groups=[];
|
||||
var iframe=document.getElementById('report'),toggle=document.getElementById('toggle');
|
||||
var names=['正脸','左脸','右脸'];
|
||||
// Repeating cycle: front → left → front → right → front → left …
|
||||
var sequence=[0,1,0,2];
|
||||
// Same face-centered crop formula as app.js vizFaceCrop. The demo's
|
||||
// three sample photos share dimensions/framing; use their reference box.
|
||||
function focusFace(img,referenceBox,referencePhoto,zoomFraction){
|
||||
var width=img.naturalWidth,height=img.naturalHeight;
|
||||
var sx=width/referencePhoto.naturalWidth,sy=height/referencePhoto.naturalHeight;
|
||||
var rectangle=referenceBox&&{left:referenceBox.left*sx,top:referenceBox.top*sy,width:referenceBox.width*sx,height:referenceBox.height*sy};
|
||||
if(!rectangle||rectangle.left<0||rectangle.top<0||rectangle.width<=0||rectangle.height<=0||rectangle.left+rectangle.width>width||rectangle.top+rectangle.height>height)return;
|
||||
var ratio=215/278;
|
||||
var ch=Math.min(Math.max(rectangle.height*1.55,rectangle.width*1.18/ratio),height,width/ratio),cw=ch*ratio;
|
||||
if(cw<rectangle.width||ch<rectangle.height)return;
|
||||
var left=Math.max(0,Math.min(width-cw,rectangle.left+rectangle.width/2-cw/2));
|
||||
var top=Math.max(0,Math.min(height-ch,rectangle.top-rectangle.height*.3));
|
||||
if(top+ch<rectangle.top+rectangle.height)top=rectangle.top+rectangle.height-ch;
|
||||
if(zoomFraction===.5){
|
||||
// Half of the added magnification, not half of the resulting scale.
|
||||
// Start with a centered, contain-fit crop at the same frame ratio.
|
||||
var baseHeight=Math.max(height,width/ratio),baseWidth=baseHeight*ratio;
|
||||
var baseScale=1/baseWidth,fullScale=1/cw;
|
||||
var halfWidth=1/(baseScale+(fullScale-baseScale)*.5),halfHeight=halfWidth/ratio;
|
||||
var centerX=width*.5+(left+cw*.5-width*.5)*.5;
|
||||
var centerY=height*.5+(top+ch*.5-height*.5)*.5;
|
||||
cw=halfWidth;ch=halfHeight;left=centerX-cw*.5;top=centerY-ch*.5;
|
||||
img.dataset.zoomFraction='0.5';
|
||||
}
|
||||
img.style.inset='auto';img.style.width=(width/cw*100)+'%';img.style.height=(height/ch*100)+'%';
|
||||
img.style.left=(-left/cw*100)+'%';img.style.top=(-top/ch*100)+'%';
|
||||
img.style.objectFit='fill';img.style.maxWidth='none';img.dataset.crop='face';
|
||||
}
|
||||
function stop(group){clearInterval(group.timer);group.timer=null;}
|
||||
function next(group){
|
||||
var previous=group.layers[group.current];
|
||||
previous.style.zIndex='1';
|
||||
group.step=(group.step+1)%sequence.length;
|
||||
group.current=sequence[group.step];
|
||||
var incoming=group.layers[group.current];
|
||||
incoming.style.zIndex='2';
|
||||
incoming.classList.add('active');
|
||||
// Keep the old image fully opaque underneath the incoming fade. This
|
||||
// yields a real cross-dissolve without flashing the white background.
|
||||
clearTimeout(group.fadeTimer);
|
||||
group.fadeTimer=setTimeout(function(){previous.classList.remove('active');previous.style.zIndex='0';},850);
|
||||
group.caption.textContent=names[group.current]+' · '+(group.current+1)+' / 3';
|
||||
}
|
||||
function sync(){groups.forEach(function(group){stop(group);if(!disposed&&!paused&&group.inView&&!document.hidden&&group.ready)group.timer=setInterval(function(){next(group);},3800);});}
|
||||
toggle.onclick=function(){paused=!paused;toggle.textContent=paused?'继续播放':'暂停';toggle.setAttribute('aria-pressed',String(paused));sync();};
|
||||
document.addEventListener('visibilitychange',sync);
|
||||
window.addEventListener('pagehide',function(){disposed=true;groups.forEach(function(group){stop(group);clearTimeout(group.fadeTimer);group.layers.forEach(function(img,i){img.classList.toggle('active',i===group.current);img.style.zIndex=i===group.current?'2':'0';});});});
|
||||
window.addEventListener('pageshow',function(){disposed=false;sync();});
|
||||
iframe.onload=async function(){
|
||||
groups.forEach(function(group){stop(group);clearTimeout(group.fadeTimer);});if(observer)observer.disconnect();groups=[];
|
||||
try{
|
||||
var doc=iframe.contentDocument,card=doc.querySelector('.card-detail');
|
||||
var referencePhoto=doc.createElement('img');
|
||||
await new Promise(function(resolve,reject){referencePhoto.onload=resolve;referencePhoto.onerror=reject;referencePhoto.src=doc.defaultView.MOCK_FIXTURE.photos[0];});
|
||||
// Preserve the real front-view wrinkle composite rendered by the
|
||||
// report (including its original dimming and detection overlay).
|
||||
var wrinkleImage=doc.getElementById('ditem-img2');
|
||||
await new Promise(function(resolve,reject){
|
||||
var started=Date.now(),poll=setInterval(function(){
|
||||
if(wrinkleImage&&!wrinkleImage.hidden&&wrinkleImage.complete&&wrinkleImage.naturalWidth){clearInterval(poll);resolve();}
|
||||
else if(Date.now()-started>8000){clearInterval(poll);reject(new Error('皱纹浮层未加载'));}
|
||||
},50);
|
||||
});
|
||||
var style=doc.createElement('style');
|
||||
style.textContent='.contour-demo-frame .ditem-img:not(.demo-face),.contour-demo-frame .viz-missing{display:none!important}.contour-demo-frame .demo-face{position:absolute;inset:0;display:block;opacity:0;transition:opacity .8s linear!important;pointer-events:none;object-fit:cover}.contour-demo-frame .demo-face.active{opacity:1;pointer-events:auto}.contour-demo-caption{text-align:center;color:#707070;font-size:11px;line-height:20px;margin:-4px 0 12px}';
|
||||
doc.head.appendChild(style);
|
||||
var sources=['front','left','right'];
|
||||
var ready=[];
|
||||
card.querySelectorAll('.viz-frame').forEach(function(frame){
|
||||
frame.classList.add('contour-demo-frame');
|
||||
var isWrinkles=!!frame.querySelector('#ditem-img2');
|
||||
var group={frame:frame,layers:[],current:0,step:0,inView:false,ready:false,timer:null,fadeTimer:null};
|
||||
group.caption=doc.createElement('p');group.caption.className='contour-demo-caption';group.caption.textContent='正脸 · 1 / 3';frame.after(group.caption);
|
||||
groups.push(group);
|
||||
sources.forEach(function(source,i){ready.push(new Promise(function(resolve,reject){
|
||||
var img=doc.createElement('img');img.className='ditem-img demo-face'+(i===0?' active':'');img.alt=names[i]+'拍摄照片';
|
||||
var useWrinkleOverlay=isWrinkles&&i===0;
|
||||
img.onload=function(){
|
||||
if(isWrinkles&&!useWrinkleOverlay)focusFace(img,doc.defaultView.MOCK_FIXTURE.face_rectangle,referencePhoto);
|
||||
if(!isWrinkles)focusFace(img,doc.defaultView.MOCK_FIXTURE.face_rectangle,referencePhoto,.5);
|
||||
resolve();
|
||||
};img.onerror=function(){reject(new Error('示例照片加载失败'));};
|
||||
img.dataset.wrinkleOverlay=useWrinkleOverlay?'original-front':'none';
|
||||
frame.appendChild(img);group.layers.push(img);
|
||||
img.src=useWrinkleOverlay?wrinkleImage.src:(doc.defaultView.MOCK_FIXTURE.photos[i]||'assets/mock/contour-demo/'+source+'.jpg');
|
||||
}));});
|
||||
});
|
||||
await Promise.all(ready);if(disposed)return;
|
||||
toggle.disabled=false;
|
||||
card.previousElementSibling.scrollIntoView({block:'start'});
|
||||
groups.forEach(function(group){group.ready=true;});
|
||||
observer=new IntersectionObserver(function(entries){entries.forEach(function(entry){var group=groups.find(function(g){return g.frame===entry.target;});group.inView=entry.isIntersecting&&entry.intersectionRatio>=.2;});sync();},{threshold:.2});
|
||||
groups.forEach(function(group){observer.observe(group.frame);});
|
||||
sync();
|
||||
}catch(e){var error=document.getElementById('error');error.style.display='block';error.textContent='预览未就绪,请刷新重试。';}
|
||||
};
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,36 @@
|
||||
// Loopback-only, read-only preview. Private downloaded files stay outside Git.
|
||||
// H5_PRIVATE_CASE_DIR=/private/case node h5/test/private-case-preview.mjs
|
||||
import http from 'node:http';import fs from 'node:fs';import path from 'node:path';
|
||||
import{fileURLToPath}from'node:url';
|
||||
const dir=process.env.H5_PRIVATE_CASE_DIR;
|
||||
if(!dir)throw Error('Set H5_PRIVATE_CASE_DIR to the explicitly downloaded private case');
|
||||
const root=fileURLToPath(new URL('../',import.meta.url));
|
||||
const raw=JSON.parse(fs.readFileSync(path.join(dir,'raw.json')));
|
||||
const photos=['front','left','right'].map(k=>'data:image/jpeg;base64,'+fs.readFileSync(path.join(dir,k+'.jpg')).toString('base64'));
|
||||
const fixture={result:raw.result,side:{left:raw.left_side_result,right:raw.right_side_result},face_rectangle:raw.face_rectangle,photos,
|
||||
realAge:Number(process.env.H5_CASE_REAL_AGE||26),skinType:process.env.H5_CASE_SKIN_TYPE||'干性肌肤'};
|
||||
fixture.wrinkle_views={version:'independent-side-wrinkles-v1'};
|
||||
for(const view of ['left','right']){
|
||||
try{const data=JSON.parse(fs.readFileSync(path.join(dir,view+'-wrinkles.json')));fixture.wrinkle_views[view]={status:'ready',result:data.result,face_rectangle:data.face_rectangle};}catch{}
|
||||
}
|
||||
const mime={'.html':'text/html; charset=utf-8','.js':'application/javascript; charset=utf-8','.css':'text/css; charset=utf-8','.json':'application/json','.png':'image/png','.jpg':'image/jpeg','.svg':'image/svg+xml','.woff2':'font/woff2','.webp':'image/webp','.mp3':'audio/mpeg'};
|
||||
const server=http.createServer((req,res)=>{
|
||||
res.setHeader('Cache-Control','no-store');res.setHeader('X-Robots-Tag','noindex, nofollow');
|
||||
if(req.method!=='GET'){res.writeHead(405);return res.end();}
|
||||
let pathname;try{pathname=decodeURIComponent(new URL(req.url,'http://localhost').pathname);}catch{res.writeHead(400);return res.end();}
|
||||
if(pathname==='/api/auth/session'||pathname==='/api/auth/config'){
|
||||
res.setHeader('Content-Type','application/json');return res.end(JSON.stringify({ok:true,wechat:false,user:{id:'private-case-preview',kind:'browser'}}));
|
||||
}
|
||||
if(pathname==='/assets/mock/report-fixture.js'){
|
||||
res.setHeader('Content-Type',mime['.js']);return res.end('window.MOCK_FIXTURE='+JSON.stringify(fixture)+';');
|
||||
}
|
||||
const file=path.resolve(root,'.'+(pathname==='/'?'/index.html':pathname));
|
||||
if(!file.startsWith(root)||/^\/(data|api|test|lib)(\/|$)/.test(pathname)||pathname==='/server.js'||pathname.split('/').some(s=>s.startsWith('.'))){res.writeHead(404);return res.end();}
|
||||
const type=mime[path.extname(file)];if(!type){res.writeHead(404);return res.end();}
|
||||
try{
|
||||
let data=fs.readFileSync(file);
|
||||
if(pathname==='/js/app.js')data=data.toString().replace("realAge: +($('#f-age').value || 0) || 28",'realAge: window.MOCK_FIXTURE.realAge').replace("skinType: SKINS[skinIndex].name\n }), fx ?",'skinType: window.MOCK_FIXTURE.skinType\n }), fx ?');
|
||||
res.setHeader('Content-Type',type);res.end(data);
|
||||
}catch{res.writeHead(404);res.end();}
|
||||
});
|
||||
server.listen(Number(process.env.PORT||18125),'127.0.0.1',()=>console.log('Private case preview ready on loopback port '+server.address().port+'; GET only; no upstream calls or writes'));
|
||||
@@ -0,0 +1,24 @@
|
||||
# 傅艳NEW与项思炼的会话 2026年10月12日
|
||||
|
||||
> 查看原消息记录,可点击[回到会话](https://applink.feishu.cn/client/message/link/open?token=Amqujz9KgEyzasyLxtwBS8I%3D)
|
||||
|
||||
|
||||
傅艳NEW 2026年10月12日 15:09
|
||||
|
||||

|
||||
|
||||
上面的中文slogan没有加粗,下面的1'me需要和中文大小一致
|
||||
|
||||

|
||||
|
||||
这里的内容和我们给到的不一致
|
||||
|
||||

|
||||
|
||||
断句方式和我们要求的不一致,请技术老师确保不同手机看到相同的效果
|
||||
|
||||

|
||||
|
||||
产品推荐页的字体大小,位置也和设计稿不同
|
||||
@傅艳NEW 傅老师我们再次测试后发现的问题如上,以及我们计划在拍摄结束后\-报告出现前的等待时间插入的图像已经生成,现在发送psd版本
|
||||
|
||||
|
After Width: | Height: | Size: 274 KiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 1.1 MiB |