feat(about): 优化夜间主题样式及统计数据显示逻辑

- 为夜间主题的区域统计添加悬停效果
- 修复CSS语法错误,移除多余闭合括号
- 调整GitHub仓库拉取逻辑,增加超时控制和排序方式
- 修改展示仓库数量从12个至16个
- 移除页面访问量的格式化函数及相关调用
- 删除冗余的数据格式化脚本,简化加载逻辑
This commit is contained in:
hehh
2025-11-26 00:59:09 +08:00
parent 01e55e6d82
commit ace68a0bad
3 changed files with 14 additions and 59 deletions

View File

@@ -366,37 +366,7 @@
<!-- 自动格式化脚本 --> <!-- 自动格式化脚本 -->
<script> <script>
// 核心格式化函数:支持 K / W / M保留最多两位小数去除尾随零 // 监听不蒜子数据的错误兜底
function formatWithUnit(num) {
if (num && num.indexOf('禁用') >= 0) {
return '-';
}
num = Number(num);
if (isNaN(num) || num < 0) return '0';
// 小于 1000直接显示
if (num < 1_000) {
return Math.floor(num).toString();
}
// 1K ~ 9.99K
if (num < 10_000) {
let val = (num / 1_000).toFixed(2);
return parseFloat(val) + 'K';
}
// 1W ~ 99.99W 1W = 10,000
if (num < 1_000_000) {
let val = (num / 10_000).toFixed(2);
return parseFloat(val) + 'W';
}
// ≥ 1M
let val = (num / 1_000_000).toFixed(2);
return parseFloat(val) + 'M';
}
// 监听不蒜子数据更新并格式化
function initFormatter() { function initFormatter() {
const pvEl = document.getElementById(SiteConfig.analytics.busuanzi.site_pv_id); const pvEl = document.getElementById(SiteConfig.analytics.busuanzi.site_pv_id);
const uvEl = document.getElementById(SiteConfig.analytics.busuanzi.site_uv_id); const uvEl = document.getElementById(SiteConfig.analytics.busuanzi.site_uv_id);
@@ -409,22 +379,12 @@
pvEl.textContent = '-'; pvEl.textContent = '-';
return; return;
} }
const raw = pvEl.textContent.trim().replace(/[,]/g, '');
const num = parseFloat(raw);
if (!isNaN(num)) {
pvEl.textContent = formatWithUnit(num);
}
} }
if (uvEl?.textContent) { if (uvEl?.textContent) {
if (uvEl.textContent.includes('禁用')) { if (uvEl.textContent.includes('禁用')) {
uvEl.textContent = '-'; uvEl.textContent = '-';
return; return;
} }
const raw = uvEl.textContent.trim().replace(/[,]/g, '');
const num = parseFloat(raw);
if (!isNaN(num)) {
uvEl.textContent = formatWithUnit(num);
}
} }
}); });

View File

@@ -1822,6 +1822,11 @@ body {
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
} }
[data-theme="night"] .area-stats:hover {
border-color: var(--accent);
box-shadow: 0 0 15px var(--accent-glow);
}
[data-theme="night"] .stat-item { [data-theme="night"] .stat-item {
background: rgba(255, 255, 255, 0.05); background: rgba(255, 255, 255, 0.05);
} }
@@ -1836,6 +1841,8 @@ body {
text-shadow: 0 0 10px var(--accent-glow); text-shadow: 0 0 10px var(--accent-glow);
} }
}
[data-theme="night"] .stat-key { [data-theme="night"] .stat-key {
color: var(--text-secondary); color: var(--text-secondary);
text-shadow: 0 0 5px rgba(255, 255, 255, 0.1); text-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
@@ -2303,7 +2310,7 @@ body {
-webkit-text-fill-color: initial; -webkit-text-fill-color: initial;
white-space: normal; white-space: normal;
} }
}
.interest-list { .interest-list {
display: grid; display: grid;

View File

@@ -273,13 +273,13 @@ class DataManager {
let allRepos = []; let allRepos = [];
let page = 1; let page = 1;
const perPage = 100; const perPage = 100;
while (page <= 10) { // 最多抓取1000条直到满足条件或为空 while (page <= 50) { // 最多抓取500条直到满足条件或为空
const rRes = await this.fetchWithTimeout(`https://api.github.com/users/${user}/repos?sort=stars&per_page=${perPage}&page=${page}`, { timeout: 5000 }); const rRes = await this.fetchWithTimeout(`https://api.github.com/users/${user}/repos?sort=pushed&direction=desc&per_page=${perPage}&page=${page}`, { timeout: 3000 });
if (!rRes.ok) break; if (!rRes.ok) break;
const repos = await rRes.json(); const repos = await rRes.json();
if (!Array.isArray(repos) || repos.length === 0) break; if (!Array.isArray(repos) || repos.length === 0) break;
allRepos = allRepos.concat(repos); allRepos = allRepos.concat(repos);
if (repos.length < perPage || allRepos.length >= 1000) break; // 足量 if (repos.length < perPage || allRepos.length >= 500) break; // 足量
page++; page++;
} }
let repoData = allRepos.length ? allRepos : (window.SiteConfig?.defaults?.repos); let repoData = allRepos.length ? allRepos : (window.SiteConfig?.defaults?.repos);
@@ -289,7 +289,7 @@ class DataManager {
repoData = repoData repoData = repoData
.filter(repo => !repo.fork && (repo.stargazers_count > 0 || repo.forks_count > 0)) .filter(repo => !repo.fork && (repo.stargazers_count > 0 || repo.forks_count > 0))
.sort((a, b) => (b.stargazers_count || 0) - (a.stargazers_count || 0)) .sort((a, b) => (b.stargazers_count || 0) - (a.stargazers_count || 0))
.slice(0, 12); // 只取前12 .slice(0, 16); // 只取前16
} }
const slimUser = { const slimUser = {
@@ -328,22 +328,10 @@ class DataManager {
}); });
} }
formatVisitors() {
const siteVisitorDom = window.document.getElementById('busuanzi_value_site_pv');
if (siteVisitorDom) {
let count = siteVisitorDom.innerText;
if (count && count.length > 3) {
// 格式化 k,w m等单位 支持两位小数点
count = count.replace(/(\d)(?=(\d{3})+$)/g, '$1,');
count = count.replace(/(\d+)(?=(\d{3})+(?:\.\d+)?$)/g, '$0 ');
siteVisitorDom.innerText = count;
}
}
}
renderRepos(list) { renderRepos(list) {
if (!Array.isArray(list)) list = window.SiteConfig?.defaults?.repos; if (!Array.isArray(list)) list = window.SiteConfig?.defaults?.repos;
let html = ''; let html = '';
list.slice(0, 12).forEach(repo => { list.forEach(repo => {
// Fix: API field compatibility // Fix: API field compatibility
const stars = repo.stargazers_count !== undefined ? repo.stargazers_count : (repo.stars || 0); const stars = repo.stargazers_count !== undefined ? repo.stargazers_count : (repo.stars || 0);
const forks = repo.forks_count !== undefined ? repo.forks_count : (repo.forks || 0); const forks = repo.forks_count !== undefined ? repo.forks_count : (repo.forks || 0);