feat(h5): align third feedback with latest PSD and scanning screen

This commit is contained in:
xsl
2026-10-12 16:33:10 +08:00
parent f3e7eac909
commit c7b085e795
30 changed files with 3343 additions and 987 deletions
+20 -2
View File
@@ -97,6 +97,7 @@
function showScreen(id, nav) { // nav: 'push' 新增历史 | 'replace' 替换当前历史 | 缺省不动历史
if (id !== 's-login' && !AccountClient.user() && !(/[?&]mock=1/.test(location.search))) id = 's-login';
if (['s-profile', 's-cam', 's-report'].includes(id)) loadAppFont();
if (id === 's-profile' || id === 's-cam') prepareScanArtwork();
document.querySelectorAll('.screen').forEach(function (s) {
s.classList.toggle('active', s.id === id);
});
@@ -140,9 +141,19 @@
}
/* ─── 弹窗管理 ─── */
function prepareScanArtwork() {
var image = $('#scan-artwork');
if (!image.getAttribute('src') || (image.complete && !image.naturalWidth)) {
image.onload = function () { $('#p-analyzing').classList.add('scan-artwork-ready'); };
image.onerror = function () { $('#p-analyzing').classList.remove('scan-artwork-ready'); };
image.src = image.dataset.src;
}
}
function openOverlay(id) {
if (id === 'p-privacy' || id === 'p-photoguide') loadAppFont();
if (id === 'p-analyzing') prepareScanArtwork();
$('#' + id).classList.add('show');
if (id === 'p-analyzing') $('.scan-cancel').focus({ preventScroll: true });
}
function closeOverlay(id) { $('#' + id).classList.remove('show'); }
@@ -164,6 +175,10 @@
if (e.key === 'Tab') { e.preventDefault(); $('[data-action="login-confirm"]').focus(); }
return;
}
if ($('#p-analyzing').classList.contains('show')) {
if (e.key === 'Tab') { e.preventDefault(); $('.scan-cancel').focus(); }
return; // Preserve existing Escape behavior; do not focus camera controls.
}
if (e.key !== 'Escape' && e.key !== 'Esc') return;
var order = ['p-zoom', 'p-policy', 'p-privacy', 'p-photoguide'];
for (var i = 0; i < order.length; i++) {
@@ -181,7 +196,7 @@
}
// 分析中弹层点遮罩取消:回档案页(mock 路径同样经 seq 丢弃)
$('#p-analyzing').addEventListener('click', function (e) {
if (e.target !== this) return; // 只响应遮罩空白处,不误伤卡片
if (e.target !== this && !e.target.closest('[data-action="cancel-analysis"]')) return;
leaveCamera();
showScreen('s-profile');
popHistorySilently();
@@ -1352,7 +1367,10 @@
var span = document.createElement('span'); span.className = 'product-line'; span.textContent = line;
$('#product-name').appendChild(span);
});
$('#product-image').src = product.image;
// Presentation snapshots retain historical copy/recommendations. Only the
// artwork crop is refreshed by tier, without mutating stored report data.
var productArt = ReportUI.products.filter(function (p) { return p.tier === product.tier; })[0];
$('#product-image').src = productArt ? productArt.image : product.image;
$('#product-image').alt = product.name + '双仓精华液';
}
}
+3 -3
View File
@@ -10,9 +10,9 @@
['sens', '泛红', 'stab', 'sens'], ['acne', '痘痘', 'stab', 'acne']
];
var products = [
{ tier: 1, match: '25+束紧精华', title: "1'me 主场精华 I", name: '以我本然有光蓄活', image: 'assets/img/ui-20261009/product-25.png' },
{ tier: 2, match: '35+支撑精华', title: "1'me 主场精华 II", name: '以我自在有势挺括', image: 'assets/img/ui-20261009/product-35.png' },
{ tier: 3, match: '50+重塑精华', title: "1'me 主场精华 III", name: '以我从容有态构塑', image: 'assets/img/ui-20261009/product-50.png' }
{ tier: 1, match: '25+束紧精华', title: "1'me 主场精华 I", name: '以我本然有光蓄活', image: 'assets/img/ui-20261012/product-25.webp' },
{ tier: 2, match: '35+支撑精华', title: "1'me 主场精华 II", name: '以我自在有势挺括', image: 'assets/img/ui-20261012/product-35.webp' },
{ tier: 3, match: '50+重塑精华', title: "1'me 主场精华 III", name: '以我从容有态构塑', image: 'assets/img/ui-20261012/product-50.webp' }
];
var levelMap = { '预警': '改善', '改善': '良好', '良好': '优秀' };
var dimNames = { firm: '紧塑力', vita: '透亮感', stab: '稳韧力' };