Files
PTGroup/static/js/users.js
DengDai 02ecea06f8 init
2025-12-09 13:08:38 +08:00

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
});
}