/**
* system.js - 系统管理逻辑(用户管理 / 角色管理 / 操作日志)
* 页面:user.html / role.html / log.html
*/
$(function () {
var pageFile = location.pathname.split('/').pop();
if (pageFile === 'user.html') initUser();
else if (pageFile === 'role.html') initRole();
else if (pageFile === 'log.html') initLog();
else renderShell('权限管理', '系统管理');
});
/* ================= 用户管理 ================= */
function initUser() {
renderShell('用户管理', '权限管理 / 用户');
renderUserPage();
initPage('system', function (user) {
if (!checkPagePermission('system')) return;
loadUsers(1);
});
var currentPage = 1;
function renderUserPage() {
$('#page-content').html(
'
' +
'
' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
'
' +
'
' +
' | ID | 账号 | 姓名 | 角色 | 状态 | 最后登录 | 登录IP | 创建时间 | 操作 |
' +
' ' +
'
' +
' ' +
'
'
);
}
function loadUsers(page) {
currentPage = page;
var params = buildFilterParam();
params.page = page;
params.limit = PAGE_SIZE;
httpGet('system/user_list.php', params).then(function (data) {
var rows = data.list || [];
var html = '';
rows.forEach(function (r) {
html += '' +
'| ' + r.id + ' | ' +
'' + escHtml(r.username) + ' | ' +
'' + escHtml(r.real_name || '-') + ' | ' +
'' + escHtml(r.role_name || '-') + ' | ' +
'' + (r.is_active ? '启用' : '禁用') + ' | ' +
'' + fmtDate(r.last_login_time) + ' | ' +
'' + escHtml(r.last_login_ip || '-') + ' | ' +
'' + fmtDate(r.created_at) + ' | ' +
'' +
' 编辑' +
(r.id != 1 ? ' 删除' : '') +
' |
';
});
if (!rows.length) {
html = '| 暂无用户 |
';
}
$('#user-tbody').html(html);
// 角色下拉
var roles = data.roles || [];
var optHtml = '';
roles.forEach(function (r) {
optHtml += '';
});
$('#filter-role').html(optHtml);
renderPagination($('#pagination'), data, loadUsers);
});
}
$('#btn-search').on('click', function () { loadUsers(1); });
$('#btn-reset').on('click', function () {
$('.toolbar [data-filter]').val('');
loadUsers(1);
});
$('#btn-add').on('click', function () { openUserForm(null); });
window.editUser = function (id) {
var row = null;
$('#user-tbody tr').each(function () {
var $tds = $(this).find('td');
if ($tds.length && $tds.eq(0).text() == id) {
row = {
id: id,
username: $tds.eq(1).text(),
real_name: $tds.eq(2).text() === '-' ? '' : $tds.eq(2).text(),
role_name: $tds.eq(3).text(),
is_active: $tds.eq(4).find('.tag').hasClass('tag-green') ? 1 : 0
};
}
});
openUserForm(row);
};
function openUserForm(user) {
var isEdit = !!user;
var u = user || {};
var roleOptionsHtml = '';
$('#filter-role option').each(function () {
var $o = $(this);
if (!$o.val()) return;
roleOptionsHtml += '';
});
var content =
'';
var idx = Dialog.open({
title: isEdit ? '编辑用户' : '新增用户',
area: ['560px', 'auto'],
content: content,
btn: false
});
$('#form-cancel').on('click', function () { Dialog.close(idx); });
$('#user-form').on('submit', function (e) {
e.preventDefault();
var data = {};
$(this).find('input, select').each(function () {
var name = $(this).attr('name');
if (!name) return;
data[name] = $(this).val();
});
if (isEdit) data.id = u.id;
httpPost(isEdit ? 'system/user_update.php' : 'system/user_add.php', data).then(function () {
Dialog.success('保存成功', function () {
Dialog.close(idx);
loadUsers(currentPage);
});
});
});
}
window.delUser = function (id) {
Dialog.confirm('确定删除该用户吗?', function () {
httpPost('system/user_delete.php', { id: id }).then(function () {
Dialog.success('删除成功', function () { loadUsers(currentPage); });
});
});
};
}
/* ================= 角色管理 ================= */
function initRole() {
renderShell('角色管理', '权限管理 / 角色');
renderRolePage();
initPage('system', function (user) {
if (!checkPagePermission('system')) return;
loadRoles(1);
});
var currentPage = 1;
function renderRolePage() {
$('#page-content').html(
'' +
'
' +
' ' +
' ' +
' ' +
' ' +
' ' +
'
' +
'
' +
' | ID | 角色名称 | 权限 | 用户数 | 状态 | 创建时间 | 操作 |
' +
' ' +
'
' +
' ' +
'
'
);
}
function loadRoles(page) {
currentPage = page;
var params = buildFilterParam();
params.page = page;
params.limit = PAGE_SIZE;
httpGet('system/role_list.php', params).then(function (data) {
var rows = data.list || [];
var html = '';
rows.forEach(function (r) {
var permTags = (r.permissions || []).map(function (p) {
var m = MENU_MAP[p];
return '' + (m ? escHtml(m.name) : escHtml(p)) + '';
}).join('');
html += '' +
'| ' + r.id + ' | ' +
'' + escHtml(r.role_name) + ' | ' +
'' + (permTags || '无权限') + ' | ' +
'' + r.user_count + ' | ' +
'' + (r.is_active ? '启用' : '禁用') + ' | ' +
'' + fmtDate(r.created_at) + ' | ' +
'' +
(r.id != 1 ? ' 编辑' : '') +
(r.id != 1 ? ' 删除' : '内置') +
' |
';
});
if (!rows.length) {
html = '| 暂无角色 |
';
}
$('#role-tbody').html(html);
renderPagination($('#pagination'), data, loadRoles);
});
}
$('#btn-search').on('click', function () { loadRoles(1); });
$('#btn-reset').on('click', function () {
$('.toolbar [data-filter]').val('');
loadRoles(1);
});
$('#btn-add').on('click', function () { openRoleForm(null); });
window.editRole = function (id) {
var row = null;
$('#role-tbody tr').each(function () {
var $tds = $(this).find('td');
if ($tds.length && $tds.eq(0).text() == id) {
var perms = [];
$tds.eq(2).find('.tag').each(function () { perms.push($(this).text()); });
row = {
id: id,
role_name: $tds.eq(1).text(),
permissions: perms,
is_active: $tds.eq(4).find('.tag').hasClass('tag-green') ? 1 : 0
};
}
});
openRoleForm(row);
};
function openRoleForm(role) {
var isEdit = !!role;
var r = role || {};
var permHtml = '';
PERMISSION_OPTIONS.forEach(function (p) {
var checked = (r.permissions || []).indexOf(p.key) >= 0 ? 'checked' : '';
permHtml += '';
});
var content =
'';
var idx = Dialog.open({
title: isEdit ? '编辑角色' : '新增角色',
area: ['620px', 'auto'],
content: content,
btn: false
});
$('#form-cancel').on('click', function () { Dialog.close(idx); });
$('#role-form').on('submit', function (e) {
e.preventDefault();
var perms = [];
$('input[name="perm"]:checked').each(function () { perms.push($(this).val()); });
var data = {
role_name: $('input[name="role_name"]').val(),
is_active: $('select[name="is_active"]').val(),
permissions: JSON.stringify(perms)
};
if (isEdit) data.id = r.id;
httpPost(isEdit ? 'system/role_update.php' : 'system/role_add.php', data).then(function () {
Dialog.success('保存成功', function () {
Dialog.close(idx);
loadRoles(currentPage);
});
});
});
}
window.delRole = function (id) {
Dialog.confirm('确定删除该角色吗?', function () {
httpPost('system/role_delete.php', { id: id }).then(function () {
Dialog.success('删除成功', function () { loadRoles(currentPage); });
});
});
};
}
/* ================= 操作日志 ================= */
function initLog() {
renderShell('操作日志', '权限管理 / 操作日志(仅超级管理员)');
renderLogPage();
initPage('log', function (user) {
var perms = user.permissions || [];
if (perms.indexOf('log') < 0) {
Dialog.alert('仅超级管理员可查看操作日志', function () {
location.href = 'dashboard.html';
});
return;
}
loadLogs(1);
});
var currentPage = 1;
function renderLogPage() {
$('#page-content').html(
''
);
}
function loadLogs(page) {
currentPage = page;
var params = buildFilterParam();
params.page = page;
params.limit = PAGE_SIZE;
httpGet('system/log_list.php', params).then(function (data) {
var rows = data.list || [];
var html = '';
rows.forEach(function (r) {
var content = '';
try {
var obj = JSON.parse(r.content || 'null');
content = obj ? JSON.stringify(obj) : '';
} catch (e) {}
html += '' +
'| ' + r.id + ' | ' +
'' + escHtml(r.username) + ' | ' +
'' + escHtml(r.action) + ' | ' +
'' + escHtml(r.module) + ' | ' +
'' + escHtml(r.target_table || '-') + ' | ' +
'' + (r.target_id || '-') + ' | ' +
'' + escHtml((content || '-').substring(0, 30)) + ' | ' +
'' + escHtml(r.ip || '-') + ' | ' +
'' + fmtDate(r.created_at) + ' |
';
});
if (!rows.length) {
html = '| 近1个月暂无操作日志 |
';
}
$('#log-tbody').html(html);
renderPagination($('#pagination'), data, loadLogs);
// 筛选下拉
var dict = data.dict || {};
if (dict.actions && dict.actions.length) {
var h = '';
dict.actions.forEach(function (a) { h += ''; });
$('#filter-action').html(h);
}
if (dict.modules && dict.modules.length) {
var h2 = '';
dict.modules.forEach(function (m) { h2 += ''; });
$('#filter-module').html(h2);
}
});
}
$('#btn-search').on('click', function () { loadLogs(1); });
$('#btn-reset').on('click', function () {
$('.toolbar [data-filter]').val('');
loadLogs(1);
});
}