226 lines
8.6 KiB
HTML
226 lines
8.6 KiB
HTML
<div class="modal" id="userPermissionModal" tabindex="-1" aria-labelledby="userPermissionModalLabel" aria-hidden="true">
|
||
<div class="modal-dialog modal-lg">
|
||
<div class="modal-content">
|
||
<div class="modal-header">
|
||
<h5 class="modal-title" id="userPermissionModalLabel">用户权限管理</h5>
|
||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<table class="table" id="permissionsTable">
|
||
<thead>
|
||
<tr>
|
||
<th>资源分组</th>
|
||
<th>资源名称</th>
|
||
<th>新增</th>
|
||
<th>删除</th>
|
||
<th>修改</th>
|
||
<th>查看</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<div id="pagination" class="pagination">
|
||
<span id="totalData" class="mx-2"></span>
|
||
<span id="pageInfo" class="mx-2"></span>
|
||
<button id="prevPage" class="btn btn-secondary" type="button">上一页</button>
|
||
<button id="nextPage" class="btn btn-secondary" type="button">下一页</button>
|
||
</div>
|
||
<button type="button" class="btn btn-secondary" id="refreshPermissions" data-user-id="">刷新权限</button>
|
||
<button type="button" class="btn btn-primary" id="savePermissions" data-user-id="">保存更改</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<script>
|
||
// 获取 CSRF 令牌
|
||
function getCookie(name) {
|
||
let cookieValue = null;
|
||
if (document.cookie && document.cookie !== '') {
|
||
const cookies = document.cookie.split(';');
|
||
for (let i = 0; i < cookies.length; i++) {
|
||
const cookie = cookies[i].trim();
|
||
if (cookie.substring(0, name.length + 1) === (name + '=')) {
|
||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return cookieValue;
|
||
}
|
||
const csrftoken = getCookie('csrftoken');
|
||
|
||
$(document).ready(function() {
|
||
const itemsPerPage = 10;
|
||
let currentPage = 1;
|
||
let permissionsData = [];
|
||
let modifiedPermissions = {};
|
||
let userId = null
|
||
|
||
// 渲染权限表格
|
||
function renderTable(page) {
|
||
const start = (page - 1) * itemsPerPage;
|
||
const end = start + itemsPerPage;
|
||
const paginatedData = permissionsData.slice(start, end);
|
||
|
||
const tableBody = $('#permissionsTable tbody');
|
||
tableBody.empty();
|
||
|
||
paginatedData.forEach(perm => {
|
||
tableBody.append(`
|
||
<tr>
|
||
<td>${perm.resource_group}</td>
|
||
<td>${perm.resource}</td>
|
||
<td><input type="checkbox" name="add_permission" data-id="${perm.add.id}" ${perm.add.has_permission ? 'checked' : ''}></td>
|
||
<td><input type="checkbox" name="delete_permission" data-id="${perm.remove.id}" ${perm.remove.has_permission ? 'checked' : ''}></td>
|
||
<td><input type="checkbox" name="edit_permission" data-id="${perm.change.id}" ${perm.change.has_permission ? 'checked' : ''}></td>
|
||
<td><input type="checkbox" name="view_permission" data-id="${perm.view.id}" ${perm.view.has_permission ? 'checked' : ''}></td>
|
||
</tr>
|
||
`);
|
||
});
|
||
|
||
$('#pageInfo').text('第 ' + currentPage + ' 页, 共 ' + Math.ceil(permissionsData.length / itemsPerPage) + ' 页');
|
||
}
|
||
|
||
// 渲染分页
|
||
function renderPagination() {
|
||
const totalPages = Math.ceil(permissionsData.length / itemsPerPage);
|
||
const pagination = $('#pagination .page-numbers');
|
||
pagination.empty();
|
||
|
||
$('#totalData').text('总数: ' + permissionsData.length);
|
||
$('#pageInfo').text('第 ' + currentPage + ' 页, 共 ' + totalPages + ' 页');
|
||
|
||
for (let i = 1; i <= totalPages; i++) {
|
||
pagination.append(`<span class="page-number" data-page="${i}">${i}</span>`);
|
||
}
|
||
|
||
$('.page-number').removeClass('active');
|
||
$(`.page-number[data-page="${currentPage}"]`).addClass('active');
|
||
}
|
||
|
||
// 监听当前页
|
||
$('#pagination').on('click', '.page-number', function() {
|
||
currentPage = $(this).data('page');
|
||
renderTable(currentPage);
|
||
renderPagination();
|
||
});
|
||
|
||
// 监听上一页
|
||
$('#prevPage').on('click', function() {
|
||
if (currentPage > 1) {
|
||
currentPage--;
|
||
renderTable(currentPage);
|
||
renderPagination();
|
||
}
|
||
});
|
||
|
||
// 监听下一页
|
||
$('#nextPage').on('click', function() {
|
||
const totalPages = Math.ceil(permissionsData.length / itemsPerPage);
|
||
if (currentPage < totalPages) {
|
||
currentPage++;
|
||
renderTable(currentPage);
|
||
renderPagination();
|
||
}
|
||
});
|
||
|
||
// 渲染用户权限列表框
|
||
$('.btn-outline-primary').on('click', function() {
|
||
userId = $(this).closest('tr').data('id');
|
||
$('#savePermissions').data('user-id', userId); // 确保在模态框显示时设置用户ID
|
||
const url = "{% url 'get_user_existing_permissions' 0 %}".replace('0', userId);
|
||
$.ajax({
|
||
url: url,
|
||
type: 'GET',
|
||
success: function(data) {
|
||
permissionsData = data.permissions;
|
||
currentPage = 1;
|
||
renderTable(currentPage);
|
||
renderPagination();
|
||
$('#userPermissionModal').modal('show');
|
||
},
|
||
error: function(xhr, status, error) {
|
||
alert('获取权限数据失败');
|
||
}
|
||
});
|
||
});
|
||
|
||
// 监听权限复选框的更改
|
||
$('#permissionsTable').on('change', 'input[type="checkbox"]', function() {
|
||
const permId = $(this).data('id');
|
||
const permType = $(this).attr('name');
|
||
if (!modifiedPermissions[permId]) {
|
||
modifiedPermissions[permId] = {};
|
||
}
|
||
modifiedPermissions[permId][permType] = $(this).is(':checked');
|
||
});
|
||
|
||
// 保存用户权限更改
|
||
$('#savePermissions').on('click', function() {
|
||
|
||
const url = "{% url 'save_user_permissions' 0 %}".replace('0', userId);
|
||
|
||
$.ajax({
|
||
url: url,
|
||
type: 'POST',
|
||
contentType: 'application/json',
|
||
data: JSON.stringify({ permissions: modifiedPermissions }),
|
||
headers: {
|
||
'X-CSRFToken': csrftoken // 添加CSRF令牌
|
||
},
|
||
success: function(response) {
|
||
$('#userPermissionModal').modal('hide');
|
||
showAlert('success', '权限保存成功');
|
||
},
|
||
error: function(xhr, status, error) {
|
||
showAlert('danger', '保存权限时出错');
|
||
}
|
||
});
|
||
});
|
||
|
||
// 刷新用户权限(重新继承用户所在组权限)
|
||
$('#refreshPermissions').on('click', function() {
|
||
const url = "{% url 'refresh_user_permissions' 0 %}".replace('0', userId);
|
||
$.ajax({
|
||
url: url,
|
||
type: 'POST',
|
||
headers: {'X-CSRFToken': csrftoken},
|
||
success: function(response) {
|
||
alert('权限已刷新');
|
||
$.ajax({
|
||
url: "{% url 'get_user_existing_permissions' 0 %}".replace('0', userId),
|
||
type: 'GET',
|
||
success: function(data) {
|
||
permissionsData = data.permissions;
|
||
modifiedPermissions = {}; // 重置修改的权限项
|
||
currentPage = 1;
|
||
renderTable(currentPage);
|
||
renderPagination();
|
||
$('#userPermissionModal').modal('show');
|
||
},
|
||
error: function(xhr, status, error) {
|
||
alert('获取权限数据失败');
|
||
}
|
||
});
|
||
},
|
||
error: function(xhr, status, error) {
|
||
alert('刷新权限时出错');
|
||
}
|
||
});
|
||
});
|
||
|
||
function showAlert(type, message) {
|
||
const alertHtml = `
|
||
<div class="alert alert-${type} alert-dismissible fade show" role="alert">
|
||
<strong>操作提示:</strong> ${message}
|
||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||
</div>`;
|
||
$('#alertContainer').html(alertHtml);
|
||
}
|
||
});
|
||
</script>
|
||
|