Add files via upload
This commit is contained in:
1 parent
cd5ea0eea2
commit
1a67b8f430
1 file changed
+61
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import { Icon } from "astro-icon/components";
|
||||
import { profileConfig } from "../../config";
|
||||
import { profileConfig, umamiConfig } from "../../config";
|
||||
import { url } from "../../utils/url-utils";
|
||||
import ImageWrapper from "../misc/ImageWrapper.astro";
|
||||
|
||||
@@ -34,6 +34,66 @@ const config = profileConfig;
|
||||
{config.links[0].name}
|
||||
</a>}
|
||||
</div>
|
||||
|
||||
<!-- 全站访问量统计 -->
|
||||
<div class="text-center text-sm text-neutral-500 dark:text-neutral-400 mt-3 pt-3 border-t border-neutral-200 dark:border-neutral-700">
|
||||
<div class="flex items-center justify-center gap-1">
|
||||
<Icon name="material-symbols:visibility-outline" class="text-base"></Icon>
|
||||
<span id="site-stats">加载中...</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script define:vars={{ umamiConfig }}>
|
||||
// 获取全站访问量统计
|
||||
async function loadSiteStats() {
|
||||
if (!umamiConfig.enable) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 调用全局工具获取 Umami 分享数据
|
||||
const { websiteId, token } = await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId);
|
||||
|
||||
// 第二步:获取全站统计数据(不指定url参数获取全站数据)
|
||||
const currentTimestamp = Date.now();
|
||||
const statsUrl = `${umamiConfig.baseUrl}/api/websites/${websiteId}/stats?startAt=0&endAt=${currentTimestamp}&unit=hour&timezone=${encodeURIComponent(umamiConfig.timezone)}&compare=false`;
|
||||
|
||||
const statsResponse = await fetch(statsUrl, {
|
||||
headers: {
|
||||
'x-umami-share-token': token
|
||||
}
|
||||
});
|
||||
|
||||
if (statsResponse.status === 401) {
|
||||
// token 失效,清理缓存后重新获取一次
|
||||
clearUmamiShareCache();
|
||||
return await loadSiteStats();
|
||||
}
|
||||
|
||||
if (!statsResponse.ok) {
|
||||
throw new Error('获取统计数据失败');
|
||||
}
|
||||
|
||||
const statsData = await statsResponse.json();
|
||||
const pageviews = statsData.pageviews?.value || 0;
|
||||
const visitors = statsData.visits?.value || 0;
|
||||
|
||||
const statsElement = document.getElementById('site-stats');
|
||||
if (statsElement) {
|
||||
statsElement.textContent = `浏览量 ${pageviews} · 访问数 ${visitors}`;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取全站统计失败:', error);
|
||||
const statsElement = document.getElementById('site-stats');
|
||||
if (statsElement) {
|
||||
statsElement.textContent = '统计不可用';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 页面加载完成后获取统计数据
|
||||
document.addEventListener('DOMContentLoaded', loadSiteStats);
|
||||
</script>
|
||||
|
||||
Reference in new issue
Block a user