Compare commits

...

9 Commits

Author SHA1 Message Date
Anyon
2b41ad4c7a Update index.html 2022-03-03 13:15:49 +08:00
Anyon
3183d03abb Update index.html 2022-03-03 13:13:34 +08:00
Anyon
e67191d610 修改任务加载机制
任务统计改为异步处理。
1. 修改 layui.table 数据 filter。
2. 修改 ThinkLibrary 分页增加回调参数。
3. 修改 任务模块 模板及控制器,改为callback
2022-03-03 13:12:15 +08:00
Anyon
7c0c76ac31 Update index.html 2022-03-03 12:40:51 +08:00
Anyon
4869f119fb 优化后台样式 2022-03-03 12:33:03 +08:00
Anyon
118b35322f Update index.html 2022-03-03 11:41:11 +08:00
Anyon
2e22d71615 修改后台样式 2022-03-03 11:23:59 +08:00
Anyon
468c489121 修改后台样式文件 2022-03-03 10:52:20 +08:00
Anyon
3adcada735 修改任务管理 2022-03-03 10:32:37 +08:00
30 changed files with 131 additions and 105 deletions

View File

@ -18,6 +18,7 @@ namespace app\admin\controller;
use think\admin\Controller;
use think\admin\extend\DataExtend;
use think\admin\helper\QueryHelper;
use think\admin\model\SystemMenu;
use think\admin\service\AdminService;
use think\admin\service\MenuService;
@ -40,9 +41,12 @@ class Menu extends Controller
*/
public function index()
{
$this->title = '系统菜单管理';
$this->type = input('get.type', 'index');
SystemMenu::mQuery()->order('sort desc,id asc')->layTable();//->page(false, true);
SystemMenu::mQuery()->layTable(function () {
$this->title = '系统菜单管理';
}, function (QueryHelper $query) {
$query->order('sort desc,id asc');
});
}
/**
@ -68,7 +72,7 @@ class Menu extends Controller
if ($vo['url'] !== '#' && !preg_match('/^(https?:)?(\/\/|\\\\)/i', $vo['url'])) {
$vo['url'] = trim(url($vo['url']) . ($vo['params'] ? "?{$vo['params']}" : ''), '\\/');
}
$vo['ids'] = join(',', DataExtend::getArrSubIds($data, $vo['id']));
$vo['ids'] = arr2str(DataExtend::getArrSubIds($data, $vo['id']));
}
}

View File

@ -54,20 +54,32 @@ class Queue extends Controller
$this->command = "sudo -u {$_SERVER['USER']} {$process->think('xadmin:queue start')}";
}
}
// 任务状态统计
$this->total = ['dos' => 0, 'pre' => 0, 'oks' => 0, 'ers' => 0];
SystemQueue::mk()->field('status,count(1) count')->group('status')->select()->map(function ($item) {
if ($item['status'] === 1) $this->total['pre'] = $item['count'];
if ($item['status'] === 2) $this->total['dos'] = $item['count'];
if ($item['status'] === 3) $this->total['oks'] = $item['count'];
if ($item['status'] === 4) $this->total['ers'] = $item['count'];
});
}, function (QueryHelper $query) {
$query->equal('status')->like('code,title,command');
$query->timeBetween('enter_time,exec_time')->dateBetween('create_at');
});
}
/**
* 分页数据回调处理
* @param array $data
* @param array $result
* @return void
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected function _index_page_filter(array $data, array &$result)
{
$result['extra'] = ['dos' => 0, 'pre' => 0, 'oks' => 0, 'ers' => 0];
SystemQueue::mk()->field('status,count(1) count')->group('status')->select()->map(function ($item) use (&$result) {
if ($item['status'] === 1) $result['extra']['pre'] = $item['count'];
if ($item['status'] === 2) $result['extra']['dos'] = $item['count'];
if ($item['status'] === 3) $result['extra']['oks'] = $item['count'];
if ($item['status'] === 4) $result['extra']['ers'] = $item['count'];
});
}
/**
* 重启系统任务
* @auth true

View File

@ -58,5 +58,4 @@ invoke(function (App $app) {
return json(['code' => 0, 'info' => '演示环境禁止修改用户密码!']);
});
}
});

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" data-table-id="RoleData" action="{:sysuri()}" data-auto="true" method="post">
<form class="layui-form layui-card" data-table-id="RoleTable" action="{:sysuri()}" data-auto="true" method="post">
<div class="layui-card-body padding-left-40">

View File

@ -2,18 +2,18 @@
{block name="button"}
<!--{if auth("add")}-->
<button data-modal='{:url("add")}' data-table-id="RoleData" class='layui-btn layui-btn-sm layui-btn-primary'>添加权限</button>
<button data-modal='{:url("add")}' data-table-id="RoleTable" class='layui-btn layui-btn-sm layui-btn-primary'>添加权限</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button data-action='{:url("remove")}' data-table-id="RoleData" data-rule="id#{id}" data-confirm="确定要批量删除权限吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<button data-action='{:url("remove")}' data-table-id="RoleTable" data-rule="id#{id}" data-confirm="确定要批量删除权限吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="think-box-shadow">
{include file='auth/index_search'}
<table id="RoleData" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
<table id="RoleTable" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
</div>
{/block}
@ -21,25 +21,25 @@
<script>
$(function () {
// 初始化表格组件
$('#RoleData').layTable({
$('#RoleTable').layTable({
even: true, height: 'full',
sort: {field: 'sort desc,id', type: 'desc'},
cols: [[
{checkbox: true, fixed: true},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputRoleDataTpl'},
{field: 'sort', title: '排序权重', align: 'center', width: 100, sort: true, templet: '#SortInputRoleTableTpl'},
{field: 'title', title: '权限名称', align: 'center', minWidth: 140},
{field: 'desc', title: '权限描述', align: 'center', minWidth: 110, templet: '<div>{{d.desc||"-"}}</div>'},
{field: 'status', title: '权限状态', align: 'center', minWidth: 110, templet: '#StatusSwitchRoleDataTpl'},
{field: 'status', title: '权限状态', align: 'center', minWidth: 110, templet: '#StatusSwitchRoleTableTpl'},
{field: 'create_at', title: '创建时间', align: 'center', minWidth: 170, sort: true},
{toolbar: '#ToolbarRoleDataTpl', title: '操作面板', align: 'center', minWidth: 210, fixed: 'right'},
{toolbar: '#ToolbarRoleTableTpl', title: '操作面板', align: 'center', minWidth: 210, fixed: 'right'},
]]
});
// 数据状态切换操作
layui.form.on('switch(StatusSwitchRoleData)', function (obj) {
layui.form.on('switch(StatusSwitchRoleTable)', function (obj) {
$.form.load("{:url('state')}", {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0}, 'post', function (ret) {
if (ret.code < 1) $.msg.error(ret.info, 3, function () {
$('#RoleData').trigger('reload'); // 操作异常时重载数据
$('#RoleTable').trigger('reload'); // 操作异常时重载数据
});
return false;
}, false);
@ -49,21 +49,21 @@
</script>
<!-- 列表排序权重模板 -->
<script type="text/html" id="SortInputRoleDataTpl">
<script type="text/html" id="SortInputRoleTableTpl">
<input type="number" min="0" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
</script>
<!-- 数据状态切换模板 -->
<script type="text/html" id="StatusSwitchRoleDataTpl">
<script type="text/html" id="StatusSwitchRoleTableTpl">
<!--{if auth("state")}-->
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitchRoleData" {{d.status>0?'checked':''}}>
<input type="checkbox" value="{{d.id}}" lay-skin="switch" lay-text="已激活|已禁用" lay-filter="StatusSwitchRoleTable" {{d.status>0?'checked':''}}>
<!--{else}-->
{{d.status ? '<b class="color-green">已启用</b>' : '<b class="color-red">已禁用</b>'}}
<!--{/if}-->
</script>
<!-- 数据操作工具条模板 -->
<script type="text/html" id="ToolbarRoleDataTpl">
<script type="text/html" id="ToolbarRoleTableTpl">
<!--{if auth('edit')}-->
<a class="layui-btn layui-btn-primary layui-btn-sm" data-title="编辑权限" data-modal='{:url("edit")}?id={{d.id}}'> </a>
<!--{/if}-->

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" data-table-id="BaseData" action="{:sysuri()}" data-auto="true" method="post">
<form class="layui-form layui-card" data-table-id="BaseTable" action="{:sysuri()}" data-auto="true" method="post">
<div class="layui-card-body padding-left-40">

View File

@ -2,11 +2,11 @@
{block name="button"}
<!--{if auth("add")}-->
<button data-modal='{:url("add")}?type={$type|default=""}' data-table-id="BaseData" data-title="添加数据" class='layui-btn layui-btn-sm layui-btn-primary'>添加数据</button>
<button data-table-id="BaseTable" data-modal='{:url("add")}?type={$type|default=""}' class='layui-btn layui-btn-sm layui-btn-primary'>添加数据</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button data-action='{:url("remove")}' data-table-id="BaseData" data-rule="id#{id}" data-confirm="确定要批量删除数据吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<button data-table-id="BaseTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="确定要批量删除数据吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<!--{/if}-->
{/block}
@ -21,7 +21,7 @@
</ul>
<div class="layui-tab-content">
{include file='base/index_search'}
<table id="BaseData" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
<table id="BaseTable" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
</div>
</div>
{/block}
@ -30,7 +30,7 @@
<script>
$(function () {
// 初始化表格组件
$('#BaseData').layTable({
$('#BaseTable').layTable({
even: true, height: 'full',
sort: {field: 'sort desc,id', type: 'asc'},
where: {type: '{$type|default=""}'},
@ -50,7 +50,7 @@
layui.form.on('switch(StatusSwitch)', function (obj) {
$.form.load("{:url('state')}", {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0}, 'post', function (ret) {
if (ret.code < 1) $.msg.error(ret.info, 3, function () {
$('#BaseData').trigger('reload'); // 操作异常时重载数据
$('#BaseTable').trigger('reload'); // 操作异常时重载数据
});
return false;
}, false);
@ -60,7 +60,7 @@
<!-- 列表排序权重模板 -->
<script type="text/html" id="SortInputTpl">
<input min="0" type="number" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
<input type="number" min="0" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
</script>
<!-- 数据状态切换模板 -->

View File

@ -23,14 +23,14 @@
{block name='body'}
<div class="layui-layout layui-layout-admin layui-layout-left-hide">
<!-- 顶部菜单 开始 -->
{include file='index/index-top'}
<!-- 顶部菜单 结束 -->
<!-- 左则菜单 开始 -->
{include file="index/index-left"}
<!-- 左则菜单 结束 -->
<!-- 顶部菜单 开始 -->
{include file='index/index-top'}
<!-- 顶部菜单 结束 -->
<!-- 主体内容 开始 -->
<div class="layui-body">
<div class="think-page-body">

View File

@ -1,4 +1,4 @@
<form data-auto="true" action="{:sysuri()}" method="post" id="theme" class='layui-form layui-card' autocomplete="off">
<form id="theme" action="{:sysuri()}" method="post" data-auto="true" class='layui-form layui-card'>
<div class="layui-card-body padding-left-40">
<div class="layui-form-item margin-bottom-5 label-required-prev">

View File

@ -3,7 +3,7 @@
{block name='header'}
{notempty name='title'}
<div class="layui-card-header notselect">
<span class="layui-icon layui-icon-next font-s10 color-desc margin-right-5"></span>{$title|default=''}
<span class="layui-icon font-s10 color-desc margin-right-5">&#xe65b;</span>{$title|default=''}
<div class="pull-right">{block name='button'}{/block}</div>
</div>
{/notempty}

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" action="{:sysuri()}" data-auto="true" method="post" autocomplete="off">
<form class="layui-form layui-card" data-table-id="MenuData" action="{:sysuri()}" data-auto="true" method="post">
<div class="layui-card-body">

View File

@ -6,11 +6,11 @@
<!--{/if}-->
<!--{if $type eq 'index' and auth("state")}-->
<button data-action='{:url("state")}' data-csrf="{:systoken('state')}" data-rule="id#{key};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>禁用菜单</button>
<button data-action='{:url("state")}' data-rule="id#{key};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>禁用菜单</button>
<!--{/if}-->
<!--{if $type eq 'recycle' and auth("state")}-->
<button data-action='{:url("state")}' data-csrf="{:systoken('state')}" data-rule="id#{key};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>激活菜单</button>
<button data-action='{:url("state")}' data-rule="id#{key};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>激活菜单</button>
<!--{/if}-->
{/block}
@ -66,7 +66,7 @@
var data = {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0};
if (data.status > 0) data.id += obj.elem.dataset.path.replace(/-/g, ',');
$.form.load("{:url('state')}", data, 'post', function (ret) {
if (obj.value.indexOf(',') > -1) {
if (obj.value.split(',').length > 2) {
$('#MenuData').trigger('reload');
} else if (ret.code < 1) $.msg.error(ret.info, 3, function () {
$('#MenuData').trigger('reload');

View File

@ -2,24 +2,25 @@
{block name="button"}
<!--{if auth("remove")}-->
<button data-action='{:url("remove")}' data-rule="id#{id}" data-table-id="OplogData" data-confirm="确定要删除选中的日志吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<button data-table-id="OplogTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="确定要删除选中的日志吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<!--{/if}-->
<!--{if auth("clear")}-->
<button data-load='{:url("clear")}' data-table-id="OplogData" data-confirm="确定要清空所有日志吗?" class='layui-btn layui-btn-sm layui-btn-primary'>清空日志</button>
<button data-table-id="OplogTable" data-load='{:url("clear")}' data-confirm="确定要清空所有日志吗?" class='layui-btn layui-btn-sm layui-btn-primary'>清空日志</button>
<!--{/if}-->
{/block}
{block name="content"}
<div class="think-box-shadow">
{include file='oplog/index_search'}
<table id="OplogData" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
<table id="OplogTable" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
</div>
{/block}
{block name='script'}
<script>
$(function () {
$('#OplogData').layTable({
$('#OplogTable').layTable({
even: true, height: 'full',
sort: {field: 'id', type: 'desc'},
cols: [[

View File

@ -2,7 +2,7 @@
{block name="button"}
<!--{if isset($super) and $super}-->
<a class="layui-btn layui-btn-sm layui-btn-primary" data-queue="{:url('admin/api.plugs/optimize')}">优化数据库</a>
<a data-table-id="QueueTable" class="layui-btn layui-btn-sm layui-btn-primary" data-queue="{:url('admin/api.plugs/optimize')}">优化数据库</a>
<!--{/if}-->
<!--{if isset($super) and $super and $iswin}-->
@ -11,11 +11,11 @@
<!--{/if}-->
<!--{if auth("clean")}-->
<button data-queue='{:url("clean")}' class='layui-btn layui-btn-sm layui-btn-primary'>定时清理</button>
<button data-table-id="QueueTable" data-queue='{:url("clean")}' class='layui-btn layui-btn-sm layui-btn-primary'>定时清理</button>
<!--{/if}-->
<!--{if auth("remove")}-->
<button data-action='{:url("remove")}' data-rule="id#{id}" data-table-id="QueueData" data-confirm="确定批量删除记录吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<button data-table-id="QueueTable" data-action='{:url("remove")}' data-rule="id#{id}" data-confirm="确定批量删除记录吗?" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</button>
<!--{/if}-->
{/block}
@ -24,36 +24,43 @@
<!--{if isset($super) and $super}-->
<b>服务状态:</b><b class="margin-right-5" data-queue-message><span class="color-desc">检查中</span></b>
<b data-tips-text="点击可复制【任务服务启动指令】" class="layui-icon pointer margin-right-20" data-copy="{$command|default=''}">&#xe60e;</b>
<script>$('[data-queue-message]').load('{:sysuri("admin/api.queue/status")}')</script>
<script>$('[data-queue-message]').load('{:sysuri("admin/api.queue/status")}');</script>
<!--{/if}-->
<b>任务统计:</b>待处理 <b class="color-text">{$total.pre|default=0}</b> 个任务,处理中 <b class="color-blue">{$total.dos|default=0}</b> 个任务,已完成 <b class="color-green">{$total.oks|default=0}</b> 个任务,已失败 <b class="color-red">{$total.ers|default=0}</b> 个任务。
<b>任务统计:</b>待处理 <b class="color-text" data-extra="pre">{$total.pre|default=0}</b> 个任务,处理中 <b class="color-blue" data-extra="dos">{$total.dos|default=0}</b> 个任务,已完成 <b class="color-green" data-extra="oks">{$total.oks|default=0}</b> 个任务,已失败 <b class="color-red" data-extra="ers">{$total.ers|default=0}</b> 个任务。
</div>
<div class="think-box-shadow">
{include file='queue/index_search'}
<table id="QueueData" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
<table id="QueueTable" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
</div>
{/block}
{block name='script'}
<style>
#QueueData + div tbody .layui-table-cell {
height: 42px;
#QueueTable + div tbody .layui-table-cell {
height: 44px;
line-height: 22px;
}
#QueueData + div tbody .layui-table-cell .layui-btn {
#QueueTable + div tbody .layui-table-cell .layui-btn {
margin-top: 8px;
}
#QueueData + div tbody .layui-table-cell.laytable-cell-checkbox {
line-height: 42px;
#QueueTable + div tbody .layui-table-cell.laytable-cell-checkbox {
line-height: 44px;
}
</style>
<script>
$(function () {
$('#QueueData').layTable({
height: 'full',
even: true, sort: {field: 'loops_time desc,id', type: 'desc'},
$('#QueueTable').layTable({
even: true, height: 'full',
sort: {field: 'loops_time desc,id', type: 'desc'},
// 扩展数据处理,需要返回原 items 数据
filter: function (items, result) {
return result && result.extra && $('[data-extra]').map(function () {
this.innerHTML = result.extra[this.dataset.extra] || 0;
}), items;
},
cols: [[
{checkbox: true, fixed: 'left'},
{
@ -82,26 +89,25 @@
}
},
{
field: 'loops_time', title: '执行状态', width: 400, templet: function (d) {
d.html = [
'<span class="layui-badge layui-badge-middle layui-bg-gray pull-left" style="width:2em">未知</span>',
'<span class="layui-badge layui-badge-middle layui-bg-black pull-left" style="width:2em">等待</span>',
'<span class="layui-badge layui-badge-middle layui-bg-blue pull-left" style="width:2em">执行</span>',
'<span class="layui-badge layui-badge-middle layui-bg-green pull-left" style="width:2em">完成</span>',
'<span class="layui-badge layui-badge-middle layui-bg-red pull-left" style="width:2em">失败</span>',
][d.status] || '';
d.html += '执行时间:';
field: 'loops_time', title: '执行状态', minWidth: 400, templet: function (d) {
d.html = ([
'<span class="pull-left layui-badge layui-badge-middle layui-bg-gray">未知</span>',
'<span class="pull-left layui-badge layui-badge-middle layui-bg-black">等待</span>',
'<span class="pull-left layui-badge layui-badge-middle layui-bg-blue">执行</span>',
'<span class="pull-left layui-badge layui-badge-middle layui-bg-green">完成</span>',
'<span class="pull-left layui-badge layui-badge-middle layui-bg-red">失败</span>',
][d.status] || '') + '执行时间:';
d.enter_time = d.enter_time || '', d.outer_time = d.outer_time || '0.0000';
if (d.enter_time.length > 12) {
d.html += d.enter_time.substring(12) + '<span class="color-desc"> ( 耗时 ' + d.outer_time + ' )</span>';
d.html += ',已执行 <b>' + (d.attempts || 0) + '</b> 次';
d.html += d.enter_time.substring(12) + '<span class="color-desc"> ( 耗时 ' + d.outer_time + ' ) </span>';
d.html += ' 已执行 <b class="color-blue">' + (d.attempts || 0) + '</b> 次';
} else {
d.html += '<span class="color-desc">任务未执行</span>'
}
return d.html + '<br>执行结果:<span class="color-blue">' + (d.exec_desc || '<span class="color-desc">未获取到执行结果</span>') + '</span>';
}
},
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 200}
{toolbar: '#toolbar', title: '操作面板', align: 'center', minWidth: 200, fixed: 'right'}
]]
});
});

View File

@ -2,7 +2,7 @@
{block name='style'}{/block}
{block name='header'}{notempty name='title'}
<div class="layui-card-header notselect">
<span class="layui-icon layui-icon-next font-s10 color-desc margin-right-5"></span>{$title|default=''}
<span class="layui-icon font-s10 color-desc margin-right-5">&#xe65b;</span>{$title|default=''}
<div class="pull-right">{block name='button'}{/block}</div>
</div>
{/notempty}{/block}

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" action="{:sysuri()}" data-table-id="UserData" data-auto="true" method="post">
<form class="layui-form layui-card" action="{:sysuri()}" data-table-id="UserTable" data-auto="true" method="post">
<div class="layui-card-body padding-left-40">
<fieldset>
@ -112,10 +112,4 @@
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
</div>
</form>
<script>
$(function () {
layui.form.render();
});
</script>
</form>

View File

@ -6,14 +6,14 @@
<button data-modal='{:url("add")}' data-title="添加用户" class='layui-btn layui-btn-sm layui-btn-primary'>添加用户</button>
<!--{/if}-->
<!--{if auth("state")}-->
<a data-confirm="确定要启用该用户吗?" data-table-id="UserData" data-action="{:url('state')}" data-rule="id#{id};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>批量禁用</a>
<a data-confirm="确定要启用该用户吗?" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{id};status#0" class='layui-btn layui-btn-sm layui-btn-primary'>批量禁用</a>
<!--{/if}-->
{else}
<!--{if auth("state")}-->
<a data-confirm="确定要恢复这些账号吗?" data-table-id="UserData" data-action="{:url('state')}" data-rule="id#{id};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>批量恢复</a>
<a data-confirm="确定要恢复这些账号吗?" data-table-id="UserTable" data-action="{:url('state')}" data-rule="id#{id};status#1" class='layui-btn layui-btn-sm layui-btn-primary'>批量恢复</a>
<!--{/if}-->
<!--{if auth("remove")}-->
<a data-confirm="确定永久删除这些账号吗?" data-table-id="UserData" data-action='{:url("remove")}' data-rule="id#{id}" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</a>
<a data-confirm="确定永久删除这些账号吗?" data-table-id="UserTable" data-action='{:url("remove")}' data-rule="id#{id}" class='layui-btn layui-btn-sm layui-btn-primary'>批量删除</a>
<!--{/if}-->
{/if}
{/block}
@ -29,12 +29,12 @@
</ul>
<div class="layui-tab-content">
{include file='user/index_search'}
<table id="UserData" data-url="{:sysuri('index')}" data-target-search="form.form-search"></table>
<table id="UserTable" data-url="{:sysuri('index')}" data-target-search="form.form-search"></table>
</div>
</div>
<script>
$(function () {
$('#UserData').layTable({
$('#UserTable').layTable({
even: true, height: 'full',
sort: {field: 'sort desc,id', type: 'desc'},
where: {type: '{$type|default="index"}'},
@ -69,9 +69,10 @@
// 数据状态切换操作
layui.form.on('switch(StatusSwitch)', function (obj) {
$.form.load("{:url('state')}", {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0}, 'post', function (ret) {
var data = {id: obj.value, status: obj.elem.checked > 0 ? 1 : 0};
$.form.load("{:url('state')}", data, 'post', function (ret) {
if (ret.code < 1) $.msg.error(ret.info, 3, function () {
$('#UserData').trigger('reload');
$('#UserTable').trigger('reload');
});
return false;
}, false);
@ -90,7 +91,7 @@
<!-- 列表排序权重模板 -->
<script type="text/html" id="SortInputTpl">
<input min="0" type="number" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
<input type="number min=" 0"" data-blur-number="0" data-action-blur="{:sysuri()}" data-value="id#{{d.id}};action#sort;sort#{value}" data-loading="false" value="{{d.sort}}" class="layui-input text-center">
</script>
<script type="text/html" id="toolbar">

View File

@ -65,5 +65,4 @@
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</form>
<script>form.render()</script>
</fieldset>

View File

@ -1,4 +1,4 @@
<form class="layui-form layui-card" action="{:sysuri()}" data-auto="true" method="post" autocomplete="off">
<form class="layui-form layui-card" data-table-id="UserTable" action="{:sysuri()}" data-auto="true" method="post">
<div class="layui-card-body padding-left-40">
<div class="layui-form-item">
<label class="relative block">

View File

@ -693,9 +693,8 @@ $(function () {
option.done = function () {
layui.sessionData('pages', {key: table.id, value: this.page.curr || 1}), (table.loading = true);
$table.next().find('[data-load],[data-queue],[data-action],[data-iframe]').not('[data-table-id]').attr('data-table-id', table.id);
};
option.parseData = function (res) {
if (typeof params.filter === 'function') res.data = params.filter(res.data);
}, option.parseData = function (res) {
if (typeof params.filter === 'function') res.data = params.filter(res.data, res);
var maxp = Math.ceil(res.count / table.limit), curp = layui.sessionData('pages')[option.id] || 1;
if (curp > maxp && curp > 1) table.elem.trigger('reload', {page: {curr: maxp}});
return res;
@ -703,14 +702,13 @@ $(function () {
// 实例并绑定的对象
$table.data('this', layui.table.render(bindData(option)));
// 绑定实例重载事件
$table.bind('reload render', function (evt, opts) {
$table.bind('reload render reloadData', function (evt, opts) {
opts = opts || {}, opts.loading = true;
data = $.extend({}, data, opts.where || {});
if (evt.type === 'render') {
layui.table.reload(table.id, bindData(opts || {}));
if (evt.type === 'render1' || evt.type === 'reloadData') {
layui.table.reloadData(table.id, bindData(opts || {}));
} else {
layui.table.reload(table.id, bindData(opts || {}));
// layui.table.reloadData(table.id, bindData(opts || {}));
}
}).bind('row sort tool edit radio toolbar checkbox rowDouble', function (evt, call) {
layui.table.on(evt.type + '(' + table.dataset.id + ')', call)

View File

@ -44,6 +44,7 @@
// 左侧菜单布局颜色
@LeftMainBackColor: #20222A !important;
@LeftMainRightShadow: 2px 0 6px rgba(0, 21, 41, .35);
@LeftMainNavHoverBackColor: rgba(99, 99, 99, 0.2);
@LeftMainNavHoverTextColor: #FFF;

View File

@ -135,6 +135,7 @@ fieldset {
padding: 5px;
line-height: 16px;
white-space: normal;
box-sizing: content-box;
vertical-align: middle;
}
}

View File

@ -20,6 +20,7 @@
right: 0;
color: @TopHeaderTextColor !important;
height: @TopHeaderHeight !important;
z-index: 222;
position: absolute;
box-sizing: content-box;
background: @TopHeaderBackColor !important;
@ -142,8 +143,10 @@
top: 0;
bottom: 0;
width: @LayoutDefaLeftSzie;
z-index: 333;
position: fixed;
overflow: hidden;
box-shadow: @LeftMainRightShadow;
background-color: @LeftMainBackColor;
.layui-logo {
@ -292,6 +295,7 @@
top: @BodyMainTop;
left: @LayoutDefaLeftSzie;
padding: 0;
z-index: 111;
background: @BodyMainBackColor;
box-shadow: @ShadowDownInset;

View File

@ -3,9 +3,12 @@
background-color: @leftBackColor;
.layui-logo {
color: #FFF;
box-shadow: none;
font-weight: bold;
.headtxt {
text-shadow: #000 3px 4px 5px;
}
}
.layui-side-scroll {

View File

@ -2,7 +2,7 @@
@import "_config.less";
.layui-layout-theme-blue-1 {
@mainActiveBack: #0E54C4 !important;
@mainActiveBack: #3963bc !important;
@mainNormalBack: rgba(0, 0, 0, 0.1) !important;
@mainActionText: #FFFFFF !important;

View File

@ -2,6 +2,7 @@
> .layui-side {
width: 260px;
display: block !important;
box-shadow: none !important;
background-color: @mainColor;
.layui-logo {

View File

@ -4,8 +4,8 @@
.layui-layout-theme-blue-2 {
@iconWidth: 100px !important;
@mainColor: #0E54C4 !important;
@textColor: #0E54C4 !important;
@mainColor: #3963bc !important;
@textColor: @mainColor;
@import (multiple)"_layout_2.less";
}

View File

@ -2,8 +2,10 @@
@import "_config.less";
.layui-layout-theme-white {
> .layui-layout-admin {
> .layui-side {
box-shadow: none;
background-color: #fff !important;
.layui-logo {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long