mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2026-07-08 09:11:05 +08:00
Compare commits
9 Commits
300dbef865
...
2b41ad4c7a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b41ad4c7a | ||
|
|
3183d03abb | ||
|
|
e67191d610 | ||
|
|
7c0c76ac31 | ||
|
|
4869f119fb | ||
|
|
118b35322f | ||
|
|
2e22d71615 | ||
|
|
468c489121 | ||
|
|
3adcada735 |
@ -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']));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -58,5 +58,4 @@ invoke(function (App $app) {
|
||||
return json(['code' => 0, 'info' => '演示环境禁止修改用户密码!']);
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
@ -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">
|
||||
|
||||
|
||||
@ -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}-->
|
||||
|
||||
@ -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">
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
<!-- 数据状态切换模板 -->
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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"></span>{$title|default=''}
|
||||
<div class="pull-right">{block name='button'}{/block}</div>
|
||||
</div>
|
||||
{/notempty}
|
||||
|
||||
@ -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">
|
||||
|
||||
|
||||
@ -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');
|
||||
|
||||
@ -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: [[
|
||||
|
||||
@ -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=''}"></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'}
|
||||
]]
|
||||
});
|
||||
});
|
||||
|
||||
@ -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"></span>{$title|default=''}
|
||||
<div class="pull-right">{block name='button'}{/block}</div>
|
||||
</div>
|
||||
{/notempty}{/block}
|
||||
|
||||
@ -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>
|
||||
@ -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">
|
||||
|
||||
@ -65,5 +65,4 @@
|
||||
<button class="layui-btn layui-btn-primary"><i class="layui-icon"></i> 搜 索</button>
|
||||
</div>
|
||||
</form>
|
||||
<script>form.render()</script>
|
||||
</fieldset>
|
||||
@ -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">
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -135,6 +135,7 @@ fieldset {
|
||||
padding: 5px;
|
||||
line-height: 16px;
|
||||
white-space: normal;
|
||||
box-sizing: content-box;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
> .layui-side {
|
||||
width: 260px;
|
||||
display: block !important;
|
||||
box-shadow: none !important;
|
||||
background-color: @mainColor;
|
||||
|
||||
.layui-logo {
|
||||
|
||||
@ -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";
|
||||
}
|
||||
|
||||
@ -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
Loading…
x
Reference in New Issue
Block a user