Add server components
build-winui / winui (push) Has been cancelled

This commit is contained in:
QWQLwToo
2026-06-26 13:28:09 +08:00
parent 7ecc6a8923
commit 079ee4eaeb
168 changed files with 37475 additions and 0 deletions
+128
View File
@@ -0,0 +1,128 @@
// 设置页面 JavaScript
// 加载数据库信息
async function loadDatabaseInfo() {
try {
const data = await apiRequest('/admin/api/database');
const configData = await apiRequest('/admin/api/database/config');
document.getElementById('db-type').textContent = data.database.type;
document.getElementById('db-status').textContent = data.database.status;
document.getElementById('db-status').className = 'info-value status-badge status-connected';
if (data.database.file) {
document.getElementById('db-file-item').style.display = 'flex';
document.getElementById('db-file').textContent = data.database.file;
}
// 如果是 MySQL,显示密码修改界面
if (configData.config.type === 'mysql') {
document.getElementById('database-password-section').style.display = 'block';
}
// 操作系统信息
document.getElementById('os-type').textContent = data.os.os;
document.getElementById('os-arch').textContent = data.os.arch;
} catch (error) {
console.error('Load database info error:', error);
}
}
// 加载系统信息
async function loadSystemInfo() {
try {
const data = await apiRequest('/admin/api/system');
document.getElementById('stat-users').textContent = data.users;
document.getElementById('stat-routes').textContent = data.routes;
document.getElementById('stat-logs').textContent = data.logs;
document.getElementById('stat-time').textContent = data.server_time;
} catch (error) {
console.error('Load system info error:', error);
}
}
// 更新数据库密码
const passwordForm = document.getElementById('password-form');
if (passwordForm) {
passwordForm.addEventListener('submit', async (e) => {
e.preventDefault();
const currentPassword = document.getElementById('current-password').value;
const newPassword = document.getElementById('new-password').value;
const confirmPassword = document.getElementById('confirm-password').value;
if (newPassword !== confirmPassword) {
alert('新密码和确认密码不一致!');
return;
}
if (!confirm('确定要更新数据库 root 密码吗?\n\n更新后需要修改环境变量 DB_PASSWORD 并重启服务器!')) {
return;
}
const resultEl = document.getElementById('password-result');
resultEl.className = '';
resultEl.textContent = '正在更新密码...';
resultEl.style.display = 'block';
try {
const result = await apiRequest('/admin/api/database/password', {
method: 'POST',
body: JSON.stringify({
current_password: currentPassword,
new_password: newPassword,
confirm_password: confirmPassword,
}),
});
resultEl.className = 'success';
resultEl.textContent = result.message || '密码更新成功!';
passwordForm.reset();
} catch (error) {
resultEl.className = 'error';
resultEl.textContent = '更新失败: ' + error.message;
}
});
}
// 转换数据库
const convertDbBtn = document.getElementById('convert-db-btn');
if (convertDbBtn) {
convertDbBtn.addEventListener('click', async () => {
const targetType = document.getElementById('target-db-type').value;
if (!confirm(`确定要转换数据库类型吗?\n\n目标类型: ${targetType.toUpperCase()}\n\n此操作会导出当前数据并导入到新数据库。请确保已备份数据!`)) {
return;
}
const resultEl = document.getElementById('convert-result');
resultEl.className = '';
resultEl.textContent = '正在转换...';
resultEl.style.display = 'block';
try {
const result = await apiRequest('/admin/api/database/convert', {
method: 'POST',
body: JSON.stringify({
target_type: targetType,
}),
});
resultEl.className = 'success';
resultEl.textContent = result.message || '数据库转换成功!';
loadDatabaseInfo();
} catch (error) {
resultEl.className = 'error';
resultEl.textContent = '转换失败: ' + error.message;
}
});
}
// 页面加载时初始化
document.addEventListener('DOMContentLoaded', () => {
loadDatabaseInfo();
loadSystemInfo();
// 定期更新系统信息
setInterval(loadSystemInfo, 30000); // 每30秒更新一次
});