From 6123aeb33b9298383f53fc706a7dabe9d861ed78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Mon, 16 Mar 2026 17:56:14 +0800 Subject: [PATCH] fix(admin-js): merchant revenue rank link map parses exact merchant_id --- public/js/admin.js | 27 ++++++++++++------- ...dShouldParseMerchantIdFromLinksMapTest.php | 18 +++++++++++++ 2 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 tests/Feature/AdminJsMerchantRevenueRank7dShouldParseMerchantIdFromLinksMapTest.php diff --git a/public/js/admin.js b/public/js/admin.js index ce405f5..4f19b00 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -230,26 +230,33 @@ max = 1; } + // 渐进增强:从下方表格复用“站点→订单集合”链接口径(避免硬编码/避免 merchant_id=1 命中 10 的误匹配)。 + var merchantIdToHref = {}; + try { + var merchantLinks = document.querySelectorAll('[data-role="merchant-revenue-rank-7d"] a.link[href*="merchant_id="]'); + merchantLinks.forEach(function (a) { + var href = String(a.getAttribute('href') || ''); + var m = href.match(/[?&]merchant_id=(\d+)/); + if (!m) { + return; + } + merchantIdToHref[String(m[1])] = href; + }); + } catch (e) { + merchantIdToHref = {}; + } + el.innerHTML = ''; points.forEach(function (p, idx) { var paid = Number(p && p.paid_sum ? p.paid_sum : 0); var ratio = Math.max(0, Math.min(1, paid / max)); - // 渐进增强:若下方表格已存在该站点的“进入订单集合”链接,则迷你排行行可点击直达。 var mid = Number(p && p.merchant_id != null ? p.merchant_id : 0); if (!isFinite(mid) || mid < 0) { mid = 0; } - var href = ''; - try { - var tableLink = qs('[data-role="merchant-revenue-rank-7d"] a.link[href*="merchant_id=' + String(mid) + '"]'); - if (tableLink) { - href = String(tableLink.getAttribute('href') || ''); - } - } catch (e) { - href = ''; - } + var href = merchantIdToHref[String(mid)] ? String(merchantIdToHref[String(mid)]) : ''; var row = document.createElement(href ? 'a' : 'div'); row.className = 'adm-mini-rank-row' + (href ? ' adm-mini-rank-row-link' : ''); diff --git a/tests/Feature/AdminJsMerchantRevenueRank7dShouldParseMerchantIdFromLinksMapTest.php b/tests/Feature/AdminJsMerchantRevenueRank7dShouldParseMerchantIdFromLinksMapTest.php new file mode 100644 index 0000000..577929c --- /dev/null +++ b/tests/Feature/AdminJsMerchantRevenueRank7dShouldParseMerchantIdFromLinksMapTest.php @@ -0,0 +1,18 @@ +assertStringContainsString('[data-role="merchant-revenue-rank-7d"] a.link[href*="merchant_id="]', $js); + $this->assertStringContainsString('href.match(/[?&]merchant_id=(\\d+)/)', $js); + $this->assertStringContainsString('merchantIdToHref', $js); + } +}