feat(admin-js): plan order share mini rows clickable via table plan links
This commit is contained in:
@@ -320,6 +320,22 @@
|
||||
return;
|
||||
}
|
||||
|
||||
// 渐进增强:从下方表格复用“套餐→订单集合”链接口径(避免硬编码 URL 规则)。
|
||||
var planIdToHref = {};
|
||||
try {
|
||||
var planLinks = document.querySelectorAll('[data-role="plan-order-share-top5"] a.link[href*="plan_id="]');
|
||||
planLinks.forEach(function (a) {
|
||||
var href = String(a.getAttribute('href') || '');
|
||||
var m = href.match(/[?&]plan_id=(\d+)/);
|
||||
if (!m) {
|
||||
return;
|
||||
}
|
||||
planIdToHref[String(m[1])] = href;
|
||||
});
|
||||
} catch (e) {
|
||||
planIdToHref = {};
|
||||
}
|
||||
|
||||
// 视觉口径:bar 宽度按 Top5 内最大值归一(更易读);百分比仍按 total 分母计算。
|
||||
var maxCnt = 0;
|
||||
points.forEach(function (p) {
|
||||
@@ -339,8 +355,17 @@
|
||||
var ratio = total > 0 ? Math.max(0, Math.min(1, cnt / total)) : 0;
|
||||
var barRatio = maxCnt > 0 ? Math.max(0, Math.min(1, cnt / maxCnt)) : 0;
|
||||
|
||||
var row = document.createElement('div');
|
||||
row.className = 'adm-mini-share-row';
|
||||
var pid = Number(p && p.plan_id != null ? p.plan_id : 0);
|
||||
if (!isFinite(pid) || pid < 0) {
|
||||
pid = 0;
|
||||
}
|
||||
var href = planIdToHref[String(pid)] ? String(planIdToHref[String(pid)]) : '';
|
||||
|
||||
var row = document.createElement(href ? 'a' : 'div');
|
||||
row.className = 'adm-mini-share-row' + (href ? ' adm-mini-share-row-link' : '');
|
||||
if (href) {
|
||||
row.setAttribute('href', href);
|
||||
}
|
||||
|
||||
var name = document.createElement('div');
|
||||
name.className = 'adm-mini-share-name';
|
||||
@@ -371,7 +396,7 @@
|
||||
// a 标签:避免默认下划线影响视觉(由 CSS 控制);并提升可访问性。
|
||||
if (href) {
|
||||
row.setAttribute('role', 'link');
|
||||
row.setAttribute('aria-label', '进入站点订单集合:' + mname);
|
||||
row.setAttribute('aria-label', '进入套餐订单集合:' + pname);
|
||||
}
|
||||
|
||||
el.appendChild(row);
|
||||
|
||||
Reference in New Issue
Block a user