feat(admin-js): merchant revenue mini rank rows clickable via table links
This commit is contained in:
@@ -394,6 +394,19 @@
|
|||||||
gap:10px;
|
gap:10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 迷你排行:整行可点击(JS 渐进增强把 row 渲染为 <a>) */
|
||||||
|
.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{
|
.adm-mini-rank-name{
|
||||||
width:72px;
|
width:72px;
|
||||||
min-width:72px;
|
min-width:72px;
|
||||||
|
|||||||
@@ -214,8 +214,26 @@
|
|||||||
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 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');
|
var name = document.createElement('div');
|
||||||
name.className = 'adm-mini-rank-name';
|
name.className = 'adm-mini-rank-name';
|
||||||
@@ -244,6 +262,12 @@
|
|||||||
row.appendChild(wrap);
|
row.appendChild(wrap);
|
||||||
row.appendChild(val);
|
row.appendChild(val);
|
||||||
|
|
||||||
|
// a 标签:避免默认下划线影响视觉(由 CSS 控制);并提升可访问性。
|
||||||
|
if (href) {
|
||||||
|
row.setAttribute('role', 'link');
|
||||||
|
row.setAttribute('aria-label', '进入站点订单集合:' + mname);
|
||||||
|
}
|
||||||
|
|
||||||
el.appendChild(row);
|
el.appendChild(row);
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
@@ -322,6 +346,12 @@
|
|||||||
row.appendChild(wrap);
|
row.appendChild(wrap);
|
||||||
row.appendChild(val);
|
row.appendChild(val);
|
||||||
|
|
||||||
|
// a 标签:避免默认下划线影响视觉(由 CSS 控制);并提升可访问性。
|
||||||
|
if (href) {
|
||||||
|
row.setAttribute('role', 'link');
|
||||||
|
row.setAttribute('aria-label', '进入站点订单集合:' + mname);
|
||||||
|
}
|
||||||
|
|
||||||
el.appendChild(row);
|
el.appendChild(row);
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class AdminJsMerchantRevenueRank7dShouldFindTableLinkByMerchantIdSelectorTest extends TestCase
|
||||||
|
{
|
||||||
|
public function test_admin_js_merchant_revenue_rank_7d_should_find_table_link_by_merchant_id_selector(): void
|
||||||
|
{
|
||||||
|
$js = (string) file_get_contents(public_path('js/admin.js'));
|
||||||
|
|
||||||
|
// 护栏:迷你排行应尝试从表格中复用 merchant_id 的链接(避免硬编码 URL 口径)
|
||||||
|
$this->assertStringContainsString(
|
||||||
|
'[data-role="merchant-revenue-rank-7d"] a.link[href*="merchant_id=',
|
||||||
|
$js
|
||||||
|
);
|
||||||
|
|
||||||
|
// 且会把行渲染为 a/div 二选一
|
||||||
|
$this->assertStringContainsString("document.createElement(href ? 'a' : 'div')", $js);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user