fix(admin-js): merchant revenue rank link map parses exact merchant_id
This commit is contained in:
@@ -230,26 +230,33 @@
|
|||||||
max = 1;
|
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 = '';
|
el.innerHTML = '';
|
||||||
|
|
||||||
points.forEach(function (p, idx) {
|
points.forEach(function (p, idx) {
|
||||||
var paid = Number(p && p.paid_sum ? p.paid_sum : 0);
|
var paid = Number(p && p.paid_sum ? p.paid_sum : 0);
|
||||||
var ratio = Math.max(0, Math.min(1, paid / max));
|
var ratio = Math.max(0, Math.min(1, paid / max));
|
||||||
|
|
||||||
// 渐进增强:若下方表格已存在该站点的“进入订单集合”链接,则迷你排行行可点击直达。
|
|
||||||
var mid = Number(p && p.merchant_id != null ? p.merchant_id : 0);
|
var mid = Number(p && p.merchant_id != null ? p.merchant_id : 0);
|
||||||
if (!isFinite(mid) || mid < 0) {
|
if (!isFinite(mid) || mid < 0) {
|
||||||
mid = 0;
|
mid = 0;
|
||||||
}
|
}
|
||||||
var href = '';
|
var href = merchantIdToHref[String(mid)] ? String(merchantIdToHref[String(mid)]) : '';
|
||||||
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');
|
var row = document.createElement(href ? 'a' : 'div');
|
||||||
row.className = 'adm-mini-rank-row' + (href ? ' adm-mini-rank-row-link' : '');
|
row.className = 'adm-mini-rank-row' + (href ? ' adm-mini-rank-row-link' : '');
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class AdminJsMerchantRevenueRank7dShouldParseMerchantIdFromLinksMapTest extends TestCase
|
||||||
|
{
|
||||||
|
public function test_admin_js_merchant_revenue_rank_7d_should_parse_merchant_id_from_links_map(): void
|
||||||
|
{
|
||||||
|
$js = (string) file_get_contents(public_path('js/admin.js'));
|
||||||
|
|
||||||
|
// 护栏:应从表格链接中解析 merchant_id,而不是用 href*="merchant_id=ID" 做模糊匹配
|
||||||
|
$this->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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user