/** * 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 = '
' + '
' + '
' + (isEdit ? '' : '') + '
' + '
' + '
' + '
' + '
' + '
' + '' + '
'; 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 = '
' + '
' + '
' + '
' + '
' + permHtml + '
' + '
' + '' + '
'; 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( '
' + '
' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + '
' + '
' + ' ' + ' ' + '
ID账号操作模块对象表对象ID内容IP时间
' + ' ' + '
' ); } 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); }); }