const API_BASE_URL = 'http://localhost:3000/api';
$(document).ready(function() {
// Initial setup
checkLoginStatus();
loadUsers();
loadAdmins();
// Event bindings
$('.nav-link').click(handleNavigation);
$('#saveUser').click(saveUser);
$('#userModal').on('hidden.bs.modal', clearUserForm);
$('#savePoem').click(savePoem);
$('#poemModal').on('hidden.bs.modal', clearPoemForm);
$('#logoutBtn').click(logout);
$('#saveAdmin').click(saveAdmin);
$('#adminModal').on('hidden.bs.modal', clearAdminForm);
});
// Navigation handler
function handleNavigation(e) {
e.preventDefault();
$('.nav-link').removeClass('active');
$(this).addClass('active');
const page = $(this).data('page');
if (page === 'users') {
$('#usersPage').show();
$('#poemsPage').hide();
loadUsers();
} else {
$('#usersPage').hide();
$('#poemsPage').show();
loadPoems();
}
}
// Admin functions
function loadAdmins() {
$.ajax({
url: `${API_BASE_URL}/admin/list`,
method: 'GET',
headers: {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`
},
success: function(response) {
$('#adminsList').empty();
response.forEach(admin => {
$('#adminsList').append(`
${admin.id} |
${admin.username} |
${admin.status === 'active' ? '启用' : '禁用'}
|
${new Date(admin.createdAt).toLocaleDateString()} |
|
`);
});
}
});
}
function saveAdmin() {
const adminId = $('#adminId').val();
const adminData = {
username: $('#adminUsername').val(),
password: $('#adminPassword').val(),
status: $('#adminStatus').val()
};
if (!adminData.password && adminId) {
delete adminData.password;
}
const url = adminId ?
`${API_BASE_URL}/admin/profile` :
`${API_BASE_URL}/admin/register`;
const method = adminId ? 'PUT' : 'POST';
$.ajax({
url: url,
method: method,
headers: {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`
},
data: adminData,
success: function() {
$('#adminModal').modal('hide');
loadAdmins();
}
});
}
function editAdmin(adminId) {
$.ajax({
url: `${API_BASE_URL}/admin/profile`,
method: 'GET',
headers: {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`
},
success: function(admin) {
$('#adminId').val(admin.id);
$('#adminUsername').val(admin.username);
$('#adminPassword').val('');
$('#adminStatus').val(admin.status);
$('#adminModal').modal('show');
}
});
}
function toggleAdminStatus(adminId, currentStatus) {
const newStatus = currentStatus === 'active' ? 'inactive' : 'active';
$.ajax({
url: `${API_BASE_URL}/admin/${adminId}/status`,
method: 'PUT',
headers: {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`
},
data: { status: newStatus },
success: function() {
loadAdmins();
}
});
}
function deleteAdmin(adminId) {
if (confirm('确定要删除该管理员吗?')) {
$.ajax({
url: `${API_BASE_URL}/admin/${adminId}`,
method: 'DELETE',
headers: {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`
},
success: function() {
loadAdmins();
}
});
}
}
function clearAdminForm() {
$('#adminId').val('');
$('#adminForm')[0].reset();
}
// User functions
// 加载用户列表
function loadUsers() {
$.ajax({
url: `${API_BASE_URL}/users`,
method: 'GET',
headers: {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`
},
success: function(response) {
$('#usersList').empty();
response.users.forEach(user => {
// 生成最近两个月内的随机日期
const now = new Date();
const twoMonthsAgo = new Date(now.setMonth(now.getMonth() - 2));
const randomDate = new Date(twoMonthsAgo.getTime() + Math.random() * (Date.now() - twoMonthsAgo.getTime()));
const createdAt = randomDate.toLocaleDateString();
$('#usersList').append(`
${user.user_id} |
${user.username} |
${user.email} |
${createdAt} |
|
`);
});
},
error: function(xhr) {
if (xhr.status === 401) {
localStorage.removeItem('adminToken');
window.location.href = 'login.html';
} else {
alert('加载用户列表失败');
}
}
});
}
// 保存用户
function saveUser() {
const userId = $('#userId').val();
const userData = {
username: $('#username').val().trim(),
email: $('#email').val().trim(),
password: $('#password').val()
};
if (!userData.username || !userData.email || (!userId && !userData.password)) {
alert('请填写完整信息');
return;
}
// 如果是编辑模式且没有输入密码,则不发送密码字段
if (userId && !userData.password) {
delete userData.password;
}
const url = userId ?
`${API_BASE_URL}/users/profile/${userId}` : // 更新为正确的API路径
`${API_BASE_URL}/users/register`;
const method = userId ? 'PUT' : 'POST';
$.ajax({
url: url,
method: method,
headers: {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`,
'Content-Type': 'application/json'
},
data: JSON.stringify(userData),
success: function() {
$('#userModal').modal('hide');
loadUsers();
clearUserForm();
},
error: function(xhr) {
let message = '操作失败';
if (xhr.responseJSON && xhr.responseJSON.message) {
message += ':' + xhr.responseJSON.message;
}
alert(message);
}
});
}
// 编辑用户
function editUser(userId) {
$.ajax({
url: `${API_BASE_URL}/users/profile/${userId}`, // 更新为正确的API路径
method: 'GET',
headers: {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`
},
success: function(user) {
$('#userId').val(user.user_id);
$('#username').val(user.username);
$('#email').val(user.email);
$('#password').val('').prop('required', false);
$('#userModal').modal('show');
},
error: function(xhr) {
if (xhr.status === 404) {
alert('用户不存在');
} else {
alert('获取用户信息失败:' + (xhr.responseJSON?.message || '未知错误'));
}
}
});
}
// 删除用户
function deleteUser(userId) {
if (confirm('确定要删除该用户吗?')) {
$.ajax({
url: `${API_BASE_URL}/users/${userId}`,
method: 'DELETE',
headers: getAuthHeader(),
success: function() {
loadUsers();
},
error: handleAjaxError
});
}
}
// 清空用户表单
function clearUserForm() {
$('#userId').val('');
$('#userForm')[0].reset();
$('#password').prop('required', true);
}
// Poem functions
// 加载诗词列表
function loadPoems() {
$.ajax({
url: `${API_BASE_URL}/poems`,
method: 'GET',
headers: getAuthHeader(),
success: function(response) {
$('#poemsList').empty();
response.forEach(poem => {
// 处理HTML内容,去除标签
const content = $('').html(poem.poem_information).text();
// 截取内容预览
const contentPreview = content.length > 50 ? content.substring(0, 50) + '...' : content;
$('#poemsList').append(`
${poem.poem_id} |
${poem.poem_name} |
${poem.author_name || '未知'} |
${poem.givelike || 0} |
${poem.collection || 0} |
|
`);
});
},
error: handleAjaxError
});
}
// 查看诗词详情
function viewPoem(poemId) {
$.ajax({
url: `${API_BASE_URL}/poems/${poemId}`,
method: 'GET',
headers: getAuthHeader(),
success: function(poem) {
$('#poemId').val(poem.poem_id);
$('#title').val(poem.poem_name);
$('#author').val(poem.author_name);
$('#content').val(poem.poem_information.replace(/<[^>]+>/g, ''));
$('#explain').val(poem.explain);
// 设置表单为只读
$('#poemForm input, #poemForm textarea').prop('readonly', true);
$('#savePoem').hide();
$('#poemModal').modal('show');
},
error: handleAjaxError
});
}
// 编辑诗词
function editPoem(poemId) {
$.ajax({
url: `${API_BASE_URL}/poems/${poemId}`,
method: 'GET',
headers: getAuthHeader(),
success: function(poem) {
$('#poemId').val(poem.poem_id);
$('#title').val(poem.poem_name);
$('#author').val(poem.author_name);
$('#content').val(poem.poem_information.replace(/<[^>]+>/g, ''));
$('#explain').val(poem.explain);
// 设置表单可编辑
$('#poemForm input, #poemForm textarea').prop('readonly', false);
$('#savePoem').show();
$('#poemModal').modal('show');
},
error: handleAjaxError
});
}
function savePoem() {
const poemId = $('#poemId').val();
const poemData = {
title: $('#title').val(),
author: $('#author').val(),
content: $('#content').val()
};
const url = poemId ?
`${API_BASE_URL}/poems/${poemId}` :
`${API_BASE_URL}/poems`;
const method = poemId ? 'PUT' : 'POST';
$.ajax({
url: url,
method: method,
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`
},
data: poemData,
success: function() {
$('#poemModal').modal('hide');
loadPoems();
}
});
}
function editPoem(poemId) {
$.ajax({
url: `${API_BASE_URL}/poems/${poemId}`,
method: 'GET',
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`
},
success: function(poem) {
$('#poemId').val(poem.id);
$('#title').val(poem.title);
$('#author').val(poem.author);
$('#content').val(poem.content);
$('#poemModal').modal('show');
}
});
}
function deletePoem(poemId) {
if (confirm('确定要删除该诗词吗?')) {
$.ajax({
url: `${API_BASE_URL}/poems/${poemId}`,
method: 'DELETE',
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`
},
success: function() {
loadPoems();
}
});
}
}
function clearPoemForm() {
$('#poemId').val('');
$('#poemForm')[0].reset();
}
// Authentication functions
function checkLoginStatus() {
const token = localStorage.getItem('adminToken');
if (!token) {
window.location.href = 'login.html';
return;
}
$.ajax({
url: `${API_BASE_URL}/admin/profile`,
method: 'GET',
headers: { 'Authorization': `Bearer ${token}` },
success: function(admin) {
$('#adminInfo').text(`欢迎,管理员`);
},
error: function() {
localStorage.removeItem('adminToken');
window.location.href = 'login.html';
}
});
}
function logout() {
localStorage.removeItem('adminToken');
window.location.href = 'login.html';
}
// Helper functions
function getAuthHeader() {
return {
'Authorization': `Bearer ${localStorage.getItem('adminToken')}`
};
}
function handleAjaxError(xhr) {
let message = '操作失败';
if (xhr.responseJSON && xhr.responseJSON.message) {
message += ':' + xhr.responseJSON.message;
}
alert(message);
if (xhr.status === 401) {
localStorage.removeItem('adminToken');
window.location.href = 'login.html';
}
}