129 lines
4.7 KiB
JavaScript
129 lines
4.7 KiB
JavaScript
// 设置页面 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秒更新一次
|
|
});
|