fix: show price_verified_eur as fallback price + strict badge logic

- Price column now shows price_verified_eur (in EUR, dimmed) when street_price_usd is null
  Fixes: FS.COM products showing dash while being marked fully verified
- Badge logic now requires visible price AND image_verified AND details_verified
  No more badge when price displays as dash — all requirements must be visually present
This commit is contained in:
Rene Fichtmueller 2026-04-06 01:04:44 +02:00
parent b6928265bf
commit df8d1e797c

View File

@ -2655,13 +2655,13 @@ function searchTransceivers() {
+ '<td><span class="b b-blue">' + esc(t.form_factor) + '</span></td>' + '<td><span class="b b-blue">' + esc(t.form_factor) + '</span></td>'
+ '<td class="mono">' + esc(t.speed) + '</td>' + '<td class="mono">' + esc(t.speed) + '</td>'
+ '<td>' + esc(t.reach_label) + '</td>' + '<td>' + esc(t.reach_label) + '</td>'
+ '<td class="mono">' + (t.street_price_usd ? fmtUSD(t.street_price_usd) : '—') + '</td>' + '<td class="mono">' + (t.street_price_usd ? fmtUSD(t.street_price_usd) : t.price_verified_eur ? '<span style="color:var(--text-dim)">€' + parseFloat(t.price_verified_eur).toFixed(2) + '</span>' : '—') + '</td>'
+ '<td>' + (t.price_tier ? '<span class="b ' + (t.price_tier === 'Premium' ? 'b-purple' : t.price_tier === 'Budget' ? 'b-green' : 'b-neutral') + '">' + esc(t.price_tier) + '</span>' : '—') + '</td>' + '<td>' + (t.price_tier ? '<span class="b ' + (t.price_tier === 'Premium' ? 'b-purple' : t.price_tier === 'Budget' ? 'b-green' : 'b-neutral') + '">' + esc(t.price_tier) + '</span>' : '—') + '</td>'
+ '<td>' + (t.market_status ? '<span class="b b-green">' + esc(t.market_status) + '</span>' : '—') + '</td>' + '<td>' + (t.market_status ? '<span class="b b-green">' + esc(t.market_status) + '</span>' : '—') + '</td>'
+ '<td>' + (t.category ? '<span class="b b-neutral">' + esc(t.category) + '</span>' : '') + '</td>' + '<td>' + (t.category ? '<span class="b b-neutral">' + esc(t.category) + '</span>' : '') + '</td>'
+ '<td>' + (t.fully_verified + '<td>' + (t.fully_verified && (t.street_price_usd || t.price_verified_eur) && t.image_verified && t.details_verified
? '<span style="background:linear-gradient(135deg,#1b4332,#2d6a4f);color:#fff;font-size:0.62rem;font-weight:700;padding:2px 6px;border-radius:4px;white-space:nowrap">★ 100%</span>' ? '<span style="background:linear-gradient(135deg,#1b4332,#2d6a4f);color:#fff;font-size:0.62rem;font-weight:700;padding:2px 6px;border-radius:4px;white-space:nowrap">★ 100%</span>'
: t.price_verified ? '<span style="color:#2d6a4f;font-size:0.68rem;font-weight:600">✓ Price</span>' : '') : t.price_verified && (t.street_price_usd || t.price_verified_eur) ? '<span style="color:#2d6a4f;font-size:0.68rem;font-weight:600">✓ Price</span>' : '')
+ '</td>' + '</td>'
+ '</tr>'; + '</tr>';
}).join('')); }).join(''));