XH_Digital_Management/templates/authority_modal.html

226 lines
8.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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.id}" ${perm.add ? 'checked' : ''}></td>
<td><input type="checkbox" name="delete_permission" data-id="${perm.id}" ${perm.remove ? 'checked' : ''}></td>
<td><input type="checkbox" name="edit_permission" data-id="${perm.id}" ${perm.change ? 'checked' : ''}></td>
<td><input type="checkbox" name="view_permission" data-id="${perm.id}" ${perm.view ? '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>