diff --git a/public/js/admin.js b/public/js/admin.js index 6ef77e8..10b9424 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -196,6 +196,8 @@ name.className = 'adm-mini-rank-name'; var mname = (p && p.name) ? String(p.name) : ('#' + (idx + 1)); name.textContent = mname; + // tooltip:显示完整名称(避免 ellipsis 后看不到) + name.title = mname; var wrap = document.createElement('div'); wrap.className = 'adm-mini-rank-bar-wrap'; @@ -210,7 +212,8 @@ val.className = 'adm-mini-rank-value'; val.textContent = '¥' + formatMoney(paid); - row.title = 'Top' + (idx + 1) + ':已付 ¥' + formatMoney(paid) + ',订单数 ' + String(p && p.count != null ? p.count : 0); + var cntText = String(p && p.count != null ? p.count : 0); + row.title = 'Top' + (idx + 1) + ':' + mname + '|已付 ¥' + formatMoney(paid) + '|订单数 ' + cntText; row.appendChild(name); row.appendChild(wrap); @@ -259,6 +262,8 @@ name.className = 'adm-mini-share-name'; var pname = (p && p.name) ? String(p.name) : ('#' + (idx + 1)); name.textContent = pname; + // tooltip:显示完整名称(避免 ellipsis 后看不到) + name.title = pname; var wrap = document.createElement('div'); wrap.className = 'adm-mini-share-bar-wrap'; @@ -273,7 +278,7 @@ val.className = 'adm-mini-share-value'; val.textContent = formatPct(ratio, 1) + '%'; - row.title = 'Top' + (idx + 1) + ':' + cnt + ' 单,占比 ' + formatPct(ratio, 1) + '%'; + row.title = 'Top' + (idx + 1) + ':' + pname + '|' + cnt + ' 单|占比 ' + formatPct(ratio, 1) + '%'; row.appendChild(name); row.appendChild(wrap); diff --git a/tests/Feature/AdminDashboardMiniRankAndShareShouldIncludeNameTooltipsTest.php b/tests/Feature/AdminDashboardMiniRankAndShareShouldIncludeNameTooltipsTest.php new file mode 100644 index 0000000..9ef2175 --- /dev/null +++ b/tests/Feature/AdminDashboardMiniRankAndShareShouldIncludeNameTooltipsTest.php @@ -0,0 +1,39 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_admin_js_should_set_title_for_mini_rank_and_share_names(): void + { + $this->loginAsPlatformAdmin(); + + // 页面可访问即可(确保 admin.js 会被加载的整体链路没断) + $this->get('/admin')->assertOk(); + + $js = (string) file_get_contents(public_path('js/admin.js')); + + // 护栏:mini rank / mini share 的 name 节点应设置 title(用于 ellipsis 后查看完整名称) + $this->assertStringContainsString("name.title = mname", $js); + $this->assertStringContainsString("name.title = pname", $js); + + // 护栏:排行/占比行 title 应包含名称(让 hover 提示更可读) + $this->assertStringContainsString("':' + mname + '|已付 ¥'", $js); + $this->assertStringContainsString("':' + pname + '|'", $js); + } +}