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); + } +}