165 lines
4.9 KiB
JavaScript
165 lines
4.9 KiB
JavaScript
let currentStatus = '';
|
|
|
|
$(document).ready(function() {
|
|
loadUsers();
|
|
|
|
$('.nav-tabs .nav-link').click(function(e) {
|
|
e.preventDefault();
|
|
$('.nav-tabs .nav-link').removeClass('active');
|
|
$(this).addClass('active');
|
|
currentStatus = $(this).data('status');
|
|
loadUsers();
|
|
});
|
|
});
|
|
|
|
function loadUsers() {
|
|
$.ajax({
|
|
url: '/api/users',
|
|
method: 'GET',
|
|
headers: {
|
|
'Authorization': 'Bearer ' + localStorage.getItem('access_token')
|
|
},
|
|
data: { status: currentStatus },
|
|
success: function(data) {
|
|
renderUsers(data.users);
|
|
},
|
|
error: handleAjaxError
|
|
});
|
|
}
|
|
|
|
function renderUsers(users) {
|
|
const tbody = $('#users-table');
|
|
tbody.empty();
|
|
|
|
users.forEach(function(user) {
|
|
const statusBadge = {
|
|
'pending': '<span class="badge bg-warning">待审核</span>',
|
|
'active': '<span class="badge bg-success">已激活</span>',
|
|
'disabled': '<span class="badge bg-secondary">已禁用</span>'
|
|
}[user.status];
|
|
|
|
const roleBadge = user.role === 'admin' ?
|
|
'<span class="badge bg-danger">管理员</span>' :
|
|
'<span class="badge bg-primary">用户</span>';
|
|
|
|
let actions = '';
|
|
if (user.status === 'pending') {
|
|
actions = `
|
|
<button class="btn btn-sm btn-success" onclick="approveUser(${user.id}, 'approve')">
|
|
<i class="bi bi-check"></i> 通过
|
|
</button>
|
|
<button class="btn btn-sm btn-danger" onclick="approveUser(${user.id}, 'reject')">
|
|
<i class="bi bi-x"></i> 拒绝
|
|
</button>
|
|
`;
|
|
} else {
|
|
actions = `
|
|
<button class="btn btn-sm btn-primary" onclick="editUser(${user.id})">
|
|
<i class="bi bi-pencil"></i>
|
|
</button>
|
|
<button class="btn btn-sm btn-danger" onclick="deleteUser(${user.id})">
|
|
<i class="bi bi-trash"></i>
|
|
</button>
|
|
`;
|
|
}
|
|
|
|
tbody.append(`
|
|
<tr>
|
|
<td>${user.username}</td>
|
|
<td>${user.email}</td>
|
|
<td>${user.uid || '-'}</td>
|
|
<td>${roleBadge}</td>
|
|
<td>${statusBadge}</td>
|
|
<td>${user.tags || '-'}</td>
|
|
<td>${user.created_at}</td>
|
|
<td>${actions}</td>
|
|
</tr>
|
|
`);
|
|
});
|
|
}
|
|
|
|
function approveUser(userId, action) {
|
|
const message = action === 'approve' ? '确认通过审核?' : '确认拒绝申请?';
|
|
if (!confirm(message)) return;
|
|
|
|
$.ajax({
|
|
url: `/api/users/${userId}/approve`,
|
|
method: 'POST',
|
|
headers: {
|
|
'Authorization': 'Bearer ' + localStorage.getItem('access_token')
|
|
},
|
|
contentType: 'application/json',
|
|
data: JSON.stringify({ action: action }),
|
|
success: function(data) {
|
|
alert(data.message);
|
|
loadUsers();
|
|
},
|
|
error: handleAjaxError
|
|
});
|
|
}
|
|
|
|
function editUser(userId) {
|
|
$.ajax({
|
|
url: `/api/users`,
|
|
method: 'GET',
|
|
headers: {
|
|
'Authorization': 'Bearer ' + localStorage.getItem('access_token')
|
|
},
|
|
success: function(data) {
|
|
const user = data.users.find(u => u.id === userId);
|
|
$('#edit-user-id').val(user.id);
|
|
$('#edit-email').val(user.email);
|
|
$('#edit-uid').val(user.uid);
|
|
$('#edit-role').val(user.role);
|
|
$('#edit-status').val(user.status);
|
|
$('#edit-tags').val(user.tags);
|
|
$('#edit-note').val(user.note);
|
|
$('#editModal').modal('show');
|
|
}
|
|
});
|
|
}
|
|
|
|
function saveUser() {
|
|
const userId = $('#edit-user-id').val();
|
|
|
|
$.ajax({
|
|
url: `/api/users/${userId}`,
|
|
method: 'PUT',
|
|
headers: {
|
|
'Authorization': 'Bearer ' + localStorage.getItem('access_token')
|
|
},
|
|
contentType: 'application/json',
|
|
data: JSON.stringify({
|
|
email: $('#edit-email').val(),
|
|
uid: $('#edit-uid').val(),
|
|
role: $('#edit-role').val(),
|
|
status: $('#edit-status').val(),
|
|
tags: $('#edit-tags').val(),
|
|
note: $('#edit-note').val()
|
|
}),
|
|
success: function(data) {
|
|
alert(data.message);
|
|
$('#editModal').modal('hide');
|
|
loadUsers();
|
|
},
|
|
error: handleAjaxError
|
|
});
|
|
}
|
|
|
|
function deleteUser(userId) {
|
|
if (!confirm('确认删除该用户?')) return;
|
|
|
|
$.ajax({
|
|
url: `/api/users/${userId}`,
|
|
method: 'DELETE',
|
|
headers: {
|
|
'Authorization': 'Bearer ' + localStorage.getItem('access_token')
|
|
},
|
|
success: function(data) {
|
|
alert(data.message);
|
|
loadUsers();
|
|
},
|
|
error: handleAjaxError
|
|
});
|
|
}
|