/** * 操作日志(backend_log) * * 权限按钮用完整权限名,表格渲染后由 auth.filterDom() 移除无权限按钮。 */ layui.define(['table', 'layer', 'form', 'laydate', 'auth', 'http', 'jquery'], function (exports) { var table = layui.table, layer = layui.layer, form = layui.form, laydate = layui.laydate, auth = layui.auth, http = layui.http, $ = layui.jquery; // 注意:http 的 baseURL 为空,URL 由浏览器按「当前页面所在目录」解析, // 核心后台页面的目录就是 /admin//,所以这里只写动作名(纯相对), // 写成 'adminlog/index' 会被解析成 /admin/adminlog/adminlog/index(404)。 var FUNC = { index: 'index', delete: 'delete', clean: 'clean' }; function parse(res) { return { code: res.code, msg: res.message, count: res.count || 0, data: res.data || [] }; } function post(url, data, done) { var loading = layer.load(2); http.post(url, data).then(function (res) { layer.close(loading); if (res && res.code === 0) { layer.msg(res.message || '操作成功', {icon: 1}); if (done) { done(res.data); } } else { layer.msg((res && res.message) || '操作失败', {icon: 2}); } }).catch(function (err) { layer.close(loading); layer.msg('请求失败:' + (err && err.message ? err.message : '网络异常'), {icon: 2}); }); } function checkedIds() { var rows = table.checkStatus('dataTable').data || []; var ids = []; for (var i = 0; i < rows.length; i++) { ids.push(rows[i].id); } return ids; } var obj = { render: function () { table.render({ elem: '#dataTable', url: FUNC.index, where: {}, toolbar: '#tableBar', defaultToolbar: ['filter'], method: 'get', cols: [[ {type: 'checkbox', width: 50}, {field: 'id', title: 'ID', width: 80, sort: true}, {field: 'operator', title: '操作人', width: 130}, {field: 'action', title: '动作', width: 150}, {field: 'ip', title: 'IP', width: 130}, {field: 'remark', title: '备注', minWidth: 240}, {field: 'create_at_text', title: '时间', width: 170, sort: true}, {title: '操作', width: 90, toolbar: '#dataBar', fixed: 'right'} ]], page: true, limit: 20, limits: [20, 50, 100, 200], response: {statusCode: 0}, parseData: parse, done: function () { auth.filterDom($('#dataTable').next('.layui-table-view')); auth.filterDom('.layui-btn[data-perm]'); } }); }, events: function () { laydate.render({elem: '#start', type: 'date'}); laydate.render({elem: '#end', type: 'date'}); table.on('toolbar(dataTable)', function (o) { if (o.event === 'deleteSelected') { var ids = checkedIds(); if (ids.length === 0) { return layer.msg('请先勾选要删除的日志', {icon: 2}); } layer.confirm('确定删除选中的 ' + ids.length + ' 条日志?', {title: '提示'}, function (index) { layer.close(index); post(FUNC.delete, {ids: ids}, function () { table.reload('dataTable'); }); }); } else if (o.event === 'clean') { layer.prompt({ title: '保留最近多少天的日志?', value: 30, formType: 0 }, function (days, index) { days = parseInt(days, 10); if (isNaN(days) || days < 0 || days > 3650) { return layer.msg('请输入 0 ~ 3650 之间的天数(0=清空)', {icon: 2}); } layer.close(index); layer.confirm( days > 0 ? ('确定清理 ' + days + ' 天前的日志?') : '确定清空全部日志?此操作不可恢复', {title: '危险操作'}, function (idx) { layer.close(idx); post(FUNC.clean, {days: days}, function () { table.reload('dataTable'); }); } ); }); } }); table.on('tool(dataTable)', function (o) { if (o.event === 'delete') { layer.confirm('确定删除该条日志?', {title: '提示'}, function (index) { layer.close(index); post(FUNC.delete, {ids: [o.data.id]}, function () { table.reload('dataTable'); }); }); } }); form.on('submit(data-search-btn)', function (o) { table.reload('dataTable', { where: { keyword: o.field.keyword, action: o.field.action, start: o.field.start, end: o.field.end }, page: {curr: 1} }); return false; }); $('#btn-reset').on('click', function () { setTimeout(function () { table.reload('dataTable', { where: {keyword: '', action: '', start: '', end: ''}, page: {curr: 1} }); }, 10); }); } }; obj.render(); obj.events(); exports('adminlog', obj); });