fix: correct verified badge, comparable pricing, and clickable product images
- Reset details_verified=false for 298 products where reach_label is empty (DB migration) - Runtime check in dashboard: dVer requires non-empty reach_label regardless of DB flag - comparable price query: treat reach_meters=0 same as NULL so 800G OSFP products find FS.com equivalent prices (was blocked by reach_meters=0 != NULL shortcircuit) - Product image area now fully clickable with vendor link overlay when product_page_url exists - Clear wrong image for O.Czz8HG.z.R (was showing unrelated OSFP product image)
This commit is contained in:
parent
8f060d0159
commit
3928755c60
@ -81,7 +81,8 @@ transceiverRouter.get("/:id", async (req: Request, res: Response) => {
|
|||||||
t2.form_factor = t1.form_factor
|
t2.form_factor = t1.form_factor
|
||||||
AND t2.speed_gbps = t1.speed_gbps
|
AND t2.speed_gbps = t1.speed_gbps
|
||||||
AND (
|
AND (
|
||||||
t1.reach_meters IS NULL OR t2.reach_meters IS NULL
|
t1.reach_meters IS NULL OR t1.reach_meters = 0
|
||||||
|
OR t2.reach_meters IS NULL OR t2.reach_meters = 0
|
||||||
OR ABS(t2.reach_meters - t1.reach_meters) <= GREATEST(t1.reach_meters, 1) * 0.25
|
OR ABS(t2.reach_meters - t1.reach_meters) <= GREATEST(t1.reach_meters, 1) * 0.25
|
||||||
)
|
)
|
||||||
AND t2.id != t1.id
|
AND t2.id != t1.id
|
||||||
|
|||||||
@ -2689,15 +2689,19 @@ async function openTxDetail(id) {
|
|||||||
}
|
}
|
||||||
h += '</div>';
|
h += '</div>';
|
||||||
|
|
||||||
// Image section
|
// Image section — entire box clickable if product_page_url exists
|
||||||
var hasRealImage = t.image_url || (t.vendor_name === 'FLEXOPTIX' && FF_REFERENCE_IMAGES[t.form_factor]);
|
var hasRealImage = t.image_url || (t.vendor_name === 'FLEXOPTIX' && FF_REFERENCE_IMAGES[t.form_factor]);
|
||||||
h += '<div class="tx-image-box ' + (hasRealImage ? 'has-photo' : 'has-svg') + '">';
|
if (t.product_page_url) {
|
||||||
|
h += '<a href="' + esc(t.product_page_url) + '" target="_blank" rel="noopener" style="display:block;text-decoration:none;cursor:pointer" title="Open on ' + esc(t.vendor_name || 'Vendor') + '">';
|
||||||
|
}
|
||||||
|
h += '<div class="tx-image-box ' + (hasRealImage ? 'has-photo' : 'has-svg') + '" style="' + (t.product_page_url ? 'cursor:pointer' : '') + '">';
|
||||||
h += getTransceiverImage(t);
|
h += getTransceiverImage(t);
|
||||||
if (t.vendor_name && t.image_url) h += '<span class="img-badge">' + esc(t.vendor_name) + '</span>';
|
if (t.vendor_name && t.image_url) h += '<span class="img-badge">' + esc(t.vendor_name) + '</span>';
|
||||||
if (t.product_page_url) {
|
if (t.product_page_url) {
|
||||||
h += '<a href="' + esc(t.product_page_url) + '" target="_blank" rel="noopener" class="img-link">View on ' + esc(t.vendor_name || 'Vendor') + ' →</a>';
|
h += '<span class="img-link">View on ' + esc(t.vendor_name || 'Vendor') + ' →</span>';
|
||||||
}
|
}
|
||||||
h += '</div>';
|
h += '</div>';
|
||||||
|
if (t.product_page_url) h += '</a>';
|
||||||
|
|
||||||
// Title below image — proper manufacturer designation only, never garbage/auto-generated names
|
// Title below image — proper manufacturer designation only, never garbage/auto-generated names
|
||||||
var isGarbageName = function(s) {
|
var isGarbageName = function(s) {
|
||||||
@ -2747,8 +2751,9 @@ async function openTxDetail(id) {
|
|||||||
// Verification summary bar — explicit === true to handle any type coercion
|
// Verification summary bar — explicit === true to handle any type coercion
|
||||||
var pVer = t.price_verified === true;
|
var pVer = t.price_verified === true;
|
||||||
var iVer = t.image_verified === true;
|
var iVer = t.image_verified === true;
|
||||||
var dVer = t.details_verified === true;
|
// details_verified from DB can be stale — runtime-check reach_label as gating requirement
|
||||||
var fVer = t.fully_verified === true;
|
var dVer = t.details_verified === true && !!(t.reach_label && t.reach_label.trim() !== '');
|
||||||
|
var fVer = t.fully_verified === true && dVer;
|
||||||
// Competitor verified: at least 1 price from a non-Flexoptix vendor in last 30 days
|
// Competitor verified: at least 1 price from a non-Flexoptix vendor in last 30 days
|
||||||
var allPricesForBadge = (t.competitor_prices || []).filter(function(p) { return p.url && p.price > 0; });
|
var allPricesForBadge = (t.competitor_prices || []).filter(function(p) { return p.url && p.price > 0; });
|
||||||
var cVer = allPricesForBadge.some(function(p) {
|
var cVer = allPricesForBadge.some(function(p) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user