From d7b15d2da83e469e5ce7691802aaf166e4e06807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Mon, 16 Mar 2026 17:29:29 +0800 Subject: [PATCH] feat(admin-js): merchant revenue mini rank rows clickable via table links --- public/css/admin-components.css | 13 +++++++ public/js/admin.js | 34 +++++++++++++++++-- ...dFindTableLinkByMerchantIdSelectorTest.php | 22 ++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 tests/Feature/AdminJsMerchantRevenueRank7dShouldFindTableLinkByMerchantIdSelectorTest.php diff --git a/public/css/admin-components.css b/public/css/admin-components.css index 5e1f18f..6b6767e 100644 --- a/public/css/admin-components.css +++ b/public/css/admin-components.css @@ -394,6 +394,19 @@ gap:10px; } +/* 迷你排行:整行可点击(JS 渐进增强把 row 渲染为 ) */ +.adm-mini-rank-row-link{ + color:inherit; + text-decoration:none; + border-radius:10px; + padding:2px 4px; +} + +.adm-mini-rank-row-link:hover{ + background:var(--adm-primary-tint-06, rgba(22, 119, 255, .06)); + text-decoration:none; +} + .adm-mini-rank-name{ width:72px; min-width:72px; diff --git a/public/js/admin.js b/public/js/admin.js index de376e7..8191c2e 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -214,8 +214,26 @@ var paid = Number(p && p.paid_sum ? p.paid_sum : 0); var ratio = Math.max(0, Math.min(1, paid / max)); - var row = document.createElement('div'); - row.className = 'adm-mini-rank-row'; + // 渐进增强:若下方表格已存在该站点的“进入订单集合”链接,则迷你排行行可点击直达。 + 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 row = document.createElement(href ? 'a' : 'div'); + row.className = 'adm-mini-rank-row' + (href ? ' adm-mini-rank-row-link' : ''); + if (href) { + row.setAttribute('href', href); + } var name = document.createElement('div'); name.className = 'adm-mini-rank-name'; @@ -244,6 +262,12 @@ row.appendChild(wrap); row.appendChild(val); + // a 标签:避免默认下划线影响视觉(由 CSS 控制);并提升可访问性。 + if (href) { + row.setAttribute('role', 'link'); + row.setAttribute('aria-label', '进入站点订单集合:' + mname); + } + el.appendChild(row); }); })(); @@ -322,6 +346,12 @@ row.appendChild(wrap); row.appendChild(val); + // a 标签:避免默认下划线影响视觉(由 CSS 控制);并提升可访问性。 + if (href) { + row.setAttribute('role', 'link'); + row.setAttribute('aria-label', '进入站点订单集合:' + mname); + } + el.appendChild(row); }); })(); diff --git a/tests/Feature/AdminJsMerchantRevenueRank7dShouldFindTableLinkByMerchantIdSelectorTest.php b/tests/Feature/AdminJsMerchantRevenueRank7dShouldFindTableLinkByMerchantIdSelectorTest.php new file mode 100644 index 0000000..5ffd6dc --- /dev/null +++ b/tests/Feature/AdminJsMerchantRevenueRank7dShouldFindTableLinkByMerchantIdSelectorTest.php @@ -0,0 +1,22 @@ +assertStringContainsString( + '[data-role="merchant-revenue-rank-7d"] a.link[href*="merchant_id=', + $js + ); + + // 且会把行渲染为 a/div 二选一 + $this->assertStringContainsString("document.createElement(href ? 'a' : 'div')", $js); + } +}