init
This commit is contained in:
164
static/js/users.js
Normal file
164
static/js/users.js
Normal file
@@ -0,0 +1,164 @@
|
||||
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
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user