This commit is contained in:
Alex Yang
2026-03-30 01:04:46 +08:00
parent 050aa421b1
commit f627244b8f
5978 changed files with 1502187 additions and 2947 deletions
+293
View File
@@ -0,0 +1,293 @@
// about.js - 关于页面功能实现
// 初始化关于页面
async function initAboutPage() {
try {
console.log('初始化关于页面');
// 立即显示内容,确保页面不会空白
const contentElement = document.getElementById('about-content');
if (contentElement) {
contentElement.classList.remove('hidden');
}
// 检查是否有有效的缓存数据
const cachedData = window.pageDataCache && window.pageDataCache.getCache('about');
if (cachedData) {
console.log('使用缓存的关于页面数据');
updateAboutPageUI(cachedData);
return;
}
// 并行获取服务器信息和版本信息
const [serverInfo, versionInfo] = await Promise.all([
fetchServerInfo(),
fetchVersionInfo()
]);
// 组合数据
const aboutData = {
serverInfo,
versionInfo
};
// 更新UI
updateAboutPageUI(aboutData);
// 存储数据到缓存
if (window.pageDataCache) {
window.pageDataCache.setCache('about', aboutData);
}
} catch (error) {
console.error('初始化关于页面失败:', error);
showAboutError('加载数据失败,请稍后重试');
// 即使出错也显示默认内容
const defaultData = {
serverInfo: {
version: '1.0.0',
uptime: 0,
system: 'Unknown',
platform: 'Unknown',
arch: 'Unknown',
goVersion: 'Unknown',
cpu: 'Unknown',
memory: 'Unknown',
disk: 'Unknown'
},
versionInfo: {
mainFile: {
version: '1.0.0',
lastUpdate: new Date().toISOString()
},
configFile: {
version: '1.0.0',
lastUpdate: new Date().toISOString()
},
ruleFiles: {
version: '1.0.0',
lastUpdate: new Date().toISOString()
}
}
};
updateAboutPageUI(defaultData);
}
}
// 获取服务器信息
async function fetchServerInfo() {
try {
const response = await fetch('/api/server-info');
if (!response.ok) {
throw new Error(`获取服务器信息失败: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('获取服务器信息失败:', error);
// 返回默认值
return {
version: '1.0.0',
uptime: 0,
system: 'Unknown',
platform: 'Unknown',
arch: 'Unknown',
goVersion: 'Unknown',
cpu: 'Unknown',
memory: 'Unknown',
disk: 'Unknown'
};
}
}
// 获取版本信息
async function fetchVersionInfo() {
try {
const response = await fetch('/api/version-info');
if (!response.ok) {
throw new Error(`获取版本信息失败: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('获取版本信息失败:', error);
// 返回默认值
return {
mainFile: {
version: '1.0.0',
lastUpdate: new Date().toISOString()
},
configFile: {
version: '1.0.0',
lastUpdate: new Date().toISOString()
},
ruleFiles: {
version: '1.0.0',
lastUpdate: new Date().toISOString()
}
};
}
}
// 更新关于页面UI
function updateAboutPageUI(data) {
if (!data) return;
const { serverInfo, versionInfo } = data;
// 更新服务器基本信息
updateServerInfoUI(serverInfo);
// 更新版本信息
updateVersionInfoUI(versionInfo);
// 隐藏加载状态(已移除加载元素)
// 显示内容
const contentElement = document.getElementById('about-content');
if (contentElement) {
contentElement.classList.remove('hidden');
}
}
// 更新服务器基本信息UI
function updateServerInfoUI(info) {
if (!info) return;
const elements = {
'server-version': info.version || '1.0.0',
'server-uptime': formatUptime(info.uptime || 0),
'server-system': info.system || 'Unknown',
'server-platform': info.platform || 'Unknown',
'server-arch': info.arch || 'Unknown',
'server-go-version': info.goVersion || 'Unknown',
'server-cpu': info.cpu || 'Unknown',
'server-memory': info.memory || 'Unknown',
'server-disk': info.disk || 'Unknown'
};
Object.entries(elements).forEach(([id, value]) => {
const element = document.getElementById(id);
if (element) {
element.textContent = value;
}
});
}
// 更新版本信息UI
function updateVersionInfoUI(info) {
if (!info) return;
const elements = {
'main-file-version': info.mainFile?.version || '1.0.0',
'main-file-update': formatDate(info.mainFile?.lastUpdate || new Date()),
'config-file-version': info.configFile?.version || '1.0.0',
'config-file-update': formatDate(info.configFile?.lastUpdate || new Date()),
'rule-files-version': info.ruleFiles?.version || '1.0.0',
'rule-files-update': formatDate(info.ruleFiles?.lastUpdate || new Date())
};
Object.entries(elements).forEach(([id, value]) => {
const element = document.getElementById(id);
if (element) {
element.textContent = value;
}
});
}
// 显示错误信息
function showAboutError(message) {
const errorElement = document.getElementById('about-error');
if (errorElement) {
errorElement.textContent = message;
errorElement.classList.remove('hidden');
}
// 隐藏加载状态(已移除加载元素)
}
// 格式化运行时间
function formatUptime(seconds) {
if (!seconds || seconds < 0) return '0秒';
const days = Math.floor(seconds / (24 * 60 * 60));
const hours = Math.floor((seconds % (24 * 60 * 60)) / (60 * 60));
const minutes = Math.floor((seconds % (60 * 60)) / 60);
const secs = Math.floor(seconds % 60);
let result = '';
if (days > 0) result += `${days}`;
if (hours > 0) result += `${hours}小时 `;
if (minutes > 0) result += `${minutes}分钟 `;
if (secs > 0 || result === '') result += `${secs}`;
return result.trim();
}
// 格式化日期
function formatDate(date) {
if (!date) return 'Unknown';
const dateObj = typeof date === 'string' ? new Date(date) : date;
if (isNaN(dateObj.getTime())) return 'Unknown';
return dateObj.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
}
// 刷新关于页面数据
function refreshAboutPage() {
// 清除缓存
if (window.pageDataCache) {
window.pageDataCache.clearCache('about');
window.pageDataCache.initializedPages['about'] = false;
}
// 显示加载状态(已移除加载元素)
// 隐藏错误信息
const errorElement = document.getElementById('about-error');
if (errorElement) {
errorElement.classList.add('hidden');
}
// 重新初始化页面
initAboutPage();
}
// 设置关于页面事件监听器
function setupAboutEventListeners() {
// 刷新按钮事件
const refreshBtn = document.getElementById('refresh-about-btn');
if (refreshBtn) {
refreshBtn.addEventListener('click', refreshAboutPage);
}
}
// 页面加载完成后初始化
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
// 检查当前是否是about页面
if (window.location.hash === '#about') {
initAboutPage();
}
setupAboutEventListeners();
});
} else {
// 检查当前是否是about页面
if (window.location.hash === '#about') {
initAboutPage();
}
setupAboutEventListeners();
}
// 当切换到about页面时重新加载数据
window.addEventListener('hashchange', function() {
if (window.location.hash === '#about') {
initAboutPage();
}
});