v2版本正式上线测试版

This commit is contained in:
george
2018-07-13 17:53:34 +08:00
parent 092ecf605b
commit 7bbe5585d8
661 changed files with 40153 additions and 2053 deletions

View File

@@ -1,143 +1,127 @@
<!-- 新增任务 -->
<div class="container-fluid">
<div class="info-center">
<!--title-->
<div class="info-center">
<div class="page-header">
<div class="pull-left">
<h4>{{.pageTitle}}</h4>
</div>
<div class="pull-right">
<!-- <button type="button" class="btn btn-mystyle btn-sm refresh">刷新</button>
<button type="button" class="btn btn-mystyle btn-sm reback">返回</button> -->
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
<form class="layui-form" action="" method="post" >
<div class="layui-form-item">
<label class="layui-form-label mw200">任务名称</label>
<div class="layui-input-inline mw400">
<input type="text" name="task_name" id="task_name" lay-verify="required" autocomplete="off" placeholder="任务名称" class="layui-input" value="">
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">所属分组</label>
<div class="layui-input-inline">
<select name="group_id" lay-verify="required">
{{range $k, $v := .taskGroup}}
<option value="{{$k}}">{{$v}}</option>
{{end}}
</select>
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">服务器资源</label>
<div class="layui-inline">
<div class="layui-input-inline">
<select name="server_id">
<option value="0">本地服务器</option>
{{range $k, $v := .serverGroup}}
<optgroup label="{{$v.GroupName}}">
{{range $kk, $vv := $v.Servers}}
<option value="{{$kk}}">{{$vv}}</option>
{{end}}
</optgroup>
{{end}}
</select>
</div>
</div>
</div>
</div>
<!--content-list-->
<div class="content-list">
<form action="{{urlfor "TaskController.Add"}}" method="post" class="form-horizontal">
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">任务名称</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="不需要带分组名称" name="task_name" value="" required />
</div>
<div class="col-sm-6" style="padding-top:5px;">
<i style="color:red">*</i>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">任务说明</label>
<div class="layui-input-inline mw400">
<textarea name="description" id="description" rows="2" placeholder="请输入内容" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">是否单例</label>
<div class="layui-input-inline ">
<input type="radio" name="concurrent" lay-verify="concurrent" value="0" title="是" checked>
<input type="radio" name="concurrent" lay-verify="concurrent" value="1" title="否" >
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="description">任务说明</label>
<div class="col-sm-5" >
<textarea name="description" class="form-control" id="description" rows="3" placeholder="注明执行周期"></textarea>
</div>
<div class="col-sm-4" style="padding-top:5px;">
</div>
</div>
<div class="layui-form-mid layui-word-aux"><i class="fa fa-info-circle" aria-hidden="true" id="des"></i></div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="group_id">任务分组</label>
<div class="col-sm-3" >
<select name="group_id" class="form-control">
<option value="0">未分组</option>
{{range $k, $v := .groups}}
<option value="{{$v.Id}}">{{$v.GroupName}}</option>
{{end}}
</select>
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">时间表达式</label>
<div class="layui-input-inline mw400">
<input type="text" name="cron_spec" id="cron_spec" lay-verify="required" autocomplete="off" placeholder="时间表达式" class="layui-input" value="">
</div>
<div class="layui-form-mid layui-word-aux"><a href="/help" target="_blank"><i class="fa fa-question-circle" aria-hidden="true"></i></a></div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="server_id">服务器</label>
<div class="col-sm-3" >
<select name="server_id" class="form-control">
<option value="0">本地服务器</option>
{{range $ks, $vs := .servers}}
<option value="{{$vs.Id}}">{{$vs.ServerName}}</option>
{{end}}
</select>
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">命令脚本</label>
<div class="layui-input-inline mw400">
<textarea name="command" id="command" rows="5" placeholder="请输入命令内容" class="layui-textarea"></textarea>
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="concurrent">是否单例</label>
<div class="col-sm-3" >
<label class="radio-inline">
<input type="radio" name="concurrent" value="0" checked>
</label>
<label class="radio-inline">
<input type="radio" name="concurrent" value="1">
</label>
</div>
<div class="col-sm-6" style="padding-top:5px;">
<i style="font-size: 12px">设为的话如果该任务在上一个时间点还没执行完则略过不执行</i>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">超时设置</label>
<div class="layui-input-inline">
<input type="text" name="timeout" id="timeout" lay-verify="required" autocomplete="off" placeholder="单位:秒,默认一天" class="layui-input" value="">
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="cron_spec">时间表达式</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="cron_spec" value="" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
<a href="{{urlfor "HelpController.Index"}}" target="_blank"><i style="font-size: 12px">支持秒级定时详见参见使用帮助</i></a>
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<input type="hidden" name="id" id="id" value="0">
<div class="layui-form-item">
<label class="layui-form-label mw200"></label>
<div class="layui-input-inline mw400">
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="command">命令脚本</label>
<div class="col-sm-5" >
<textarea name="command" class="form-control" id="command" rows="3" placeholder="支持bash命令和shell文件"></textarea>
</div>
<div class="col-sm-4" style="padding-top:5px;">
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="timeout">超时设置</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="秒,默认一天" name="timeout" value="" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
</div>
<br />
<div class="modal-footer" style="text-align:center">
<button type="submit" class="btn btn-primary submit_attr_button">保存</button>
<button type="button" class="btn btn-default reback">返回</button>
</div>
</form>
</div>
</div>
</div>
</form>
</div>
<script>
$(function () {
$("form").submit(function () {
$("button[type='submit']").attr('disabled', true);
$.post('{{urlfor "TaskController.Add"}}', $(this).serialize(), function (out) {
if (out.status == 0) {
window.location.href = '{{urlfor "TaskController.List"}}';
} else {
alert_message(out.msg,"alert-danger","alert-success");
$("button[type='submit']").attr('disabled', false);
}
}, "json");
return false;
});
layui.use(['form','element','layer','jquery'],function(){
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
var $ = layui.jquery;
var error_info = "{{.flash.error}}";
if(error_info){
layer.msg(error_info,{icon: 2,shade:0.3},function () {
window.history.go(-1)
})
return;
}
$("#des").on('click',function () {
layer.tips('设为的话如果该任务在上一个时间点还没执行完则略过不执行', '#des', {
tips: [1, '#0FA6D8'] //还可配置颜色
});
})
});
form.on('submit(sub)', function(data){
var form_data = data.field;
$.post('{{urlfor "TaskController.AjaxSave"}}', form_data, function (out) {
if (out.status == 0) {
layer.msg("操作成功",{icon: 1},function () {
window.history.go(-1)
})
} else {
layer.msg(out.message)
}
}, "json");
return false;
});
//但是如果你的HTML是动态生成的自动渲染就会失效
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
form.render();
});
</script>

160
views/task/auditlist.html Normal file
View File

@@ -0,0 +1,160 @@
<div class="layui-layout layui-layout-admin" style="padding-left: 20px;">
<div class="layui-row" style="margin-top: 20px;">
<div class="layui-col-xs6">
<div class="layui-btn-group">
<a class="layui-btn" data-type="tabAdd" href="/task/add">新增任务</a>
<button class="layui-btn batch" data-type="batchaudit" >审核通过</button>
<button class="layui-btn layui-btn-danger batch" data-type="batchnopass" >审核不通过</button>
</div>
</div>
<div class="layui-col-xs6 search_text">
<form class="layui-form" action="" onsubmit="javascript:return false;">
<div class="demoTable">
<div class="layui-inline" style="width: 40%">
<input class="layui-input" name="taskName" id="taskName" autocomplete="off" placeholder="任务名称" >
</div>
<button class="layui-btn" data-type="reload" id="reload">查询</button>
</div>
</form>
</div>
</div>
<table class="layui-hide" id="table_list" lay-filter="table_filter">
</table>
<script type="text/html" id="bar">
{{/*<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="status">启|停</a>*/}}
{{/*<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>*/}}
<a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
{{/*<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="run">测试</a>*/}}
{{/*<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="log">日志</a>*/}}
</script>
</div>
<script>
layui.use(['table','form','element'], function(){
var table = layui.table;
var form = layui.form;
var element = layui.element;
var error_info = "{{.flash.error}}";
if(error_info){
layer.msg(error_info,{icon: 2,shade:0.3},function () {
window.history.go(-1)
})
return;
}
//方法级渲染
table.render({
elem: '#table_list'
,url: '/task/table?status=2'
,cols: [[
{checkbox: true, fixed: true},
{field:'id', title: 'ID', align:'center',sort: true, width:50}
,{field:'task_name',title: '任务名称'}
,{field:'description',title: '任务说明'}
,{field:'pre_time', width:170,title: '上次执行时间'}
,{field:'execute_times', width:70,title: '次数'}
,{fixed:'right', width:150, align:'center', title:'操作', toolbar: '#bar'}
]]
,id: 'listReload'
,page: true
,height: "full-130"
});
var $ = layui.$, active = {
reload: function(){
table.reload('listReload', {
where: {
taskName: $('#taskName').val(),
}
});
}
};
//监听工具条
table.on('tool(table_filter)', function(obj){
var data = obj.data;
if(obj.event === 'edit'){
window.location.href="/task/edit?id="+data.id
} else if(obj.event === 'log'){
window.location.href="/tasklog/list?task_id="+data.id;
}else if (obj.event==='detail'){
window.location.href='/task/detail?id='+data.id;
}else if (obj.event==='del'){
layer.confirm("确认要删除这条任务吗?", {icon: 3, title:'提示'}, function(index){
layer.load();
$.post('/task/ajaxdel', {id:data.id}, function (out) {
if (out.status == 0) {
layer.msg("操作成功",{icon: 1},function () {
$('#reload').click();
})
} else {
layer.msg(out.message)
return
}
}, "json");
setTimeout(function(){
layer.closeAll('loading');
}, 2000);
layer.close(index);
});
}else{
layer.msg('操作不存在')
}
});
$(".batch").on('click',function (obj) {
var action = $(this).attr('data-type');
var checkStatus = table.checkStatus('listReload');
var data = checkStatus.data;
if(data.length<1){
layer.msg("请选择操作数据");
return;
}
var msg = "确认审核通过这些任务吗";
var msgok = "审核通过的任务已经被转移到【任务列表】,请前去操作";
if (action=='batchnopass'){
msg = "确定审核不通过这些任务吗";
msgok = "操作成功";
}
layer.confirm(msg, {icon: 3, title:'提示'}, function(index){
var ids = "";
$.each(data,function (k,v) {
ids += v.id+",";
});
ids = ids.substr(0,ids.length-1);
layer.load();
$.post('/task/ajax'+action, {"ids":ids}, function (out) {
if (out.status == 0) {
layer.msg(msgok,{icon: 1},function () {
$('#reload').click();
})
} else {
layer.msg(out.message)
return
}
}, "json");
setTimeout(function(){
layer.closeAll('loading');
}, 2000);
layer.close(index);
});
return ;
})
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>

View File

@@ -1,144 +1,127 @@
<!-- 新增任务 -->
<div class="container-fluid">
<div class="info-center">
<!--title-->
<div class="info-center">
<div class="page-header">
<div class="pull-left">
<h4>{{.pageTitle}}</h4>
</div>
<div class="pull-right">
<!-- <button type="button" class="btn btn-mystyle btn-sm refresh">刷新</button>
<button type="button" class="btn btn-mystyle btn-sm reback">返回</button> -->
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
<form class="layui-form" action="" method="post" >
<div class="layui-form-item">
<label class="layui-form-label mw200">任务名称</label>
<div class="layui-input-inline mw400">
<input type="text" name="task_name" id="task_name" lay-verify="required" autocomplete="off" placeholder="任务名称" class="layui-input" value="{{.task.TaskName}}">
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">所属分组</label>
<div class="layui-input-inline">
<select name="group_id" lay-verify="required">
{{range $k, $v := .taskGroup}}
<option value="{{$k}}" {{if eq $k $.task.GroupId}}selected{{end}}>{{$v}}</option>
{{end}}
</select>
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">服务器资源</label>
<div class="layui-inline">
<div class="layui-input-inline">
<select name="server_id">
<option value="0">本地服务器</option>
{{range $k, $v := .serverGroup}}
<optgroup label="{{$v.GroupName}}">
{{range $kk, $vv := $v.Servers}}
<option value="{{$kk}}" {{if eq $kk $.task.ServerId}}selected{{end}} >{{$vv}}</option>
{{end}}
</optgroup>
{{end}}
</select>
</div>
</div>
</div>
</div>
<!--content-list-->
<div class="content-list">
<form action="{{urlfor "TaskController.Add"}}" method="post" class="form-horizontal">
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">任务名称</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="task_name" value="{{.task.TaskName}}" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">任务说明</label>
<div class="layui-input-inline mw400">
<textarea name="description" id="description" rows="2" placeholder="请输入内容" class="layui-textarea">{{.task.Description}}</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">是否单例</label>
<div class="layui-input-inline ">
<input type="radio" name="concurrent" lay-verify="concurrent" value="0" title="是" {{if eq .task.Concurrent 0}}checked{{end}}>
<input type="radio" name="concurrent" lay-verify="concurrent" value="1" title="否" {{if eq .task.Concurrent 1}}checked{{end}}>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">任务说明</label>
<div class="col-sm-5" >
<textarea name="description" class="form-control" id="description" rows="3">{{.task.Description}}</textarea>
</div>
<div class="col-sm-4" style="padding-top:5px;">
</div>
</div>
<div class="layui-form-mid layui-word-aux"><i class="fa fa-info-circle" aria-hidden="true" id="des"></i></div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">任务分组</label>
<div class="col-sm-3" >
<select name="group_id" class="form-control">
<option value="0">未分组</option>
{{range $k, $v := .groups}}
<option value="{{$v.Id}}" {{if eq $v.Id $.task.GroupId}}selected{{end}}>{{$v.GroupName}}</option>
{{end}}
</select>
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">时间表达式</label>
<div class="layui-input-inline mw400">
<input type="text" name="cron_spec" id="cron_spec" lay-verify="required" autocomplete="off" placeholder="时间表达式" class="layui-input" value="{{.task.CronSpec}}">
</div>
<div class="layui-form-mid layui-word-aux"><a href="/help" target="_blank"><i class="fa fa-question-circle" aria-hidden="true"></i></a></div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="server_id">服务器</label>
<div class="col-sm-3" >
<select name="server_id" class="form-control">
<option value="0">本地服务器</option>
{{range $ks, $vs := .servers}}
<option value="{{$vs.Id}}" {{if eq $vs.Id $.task.ServerId}}selected{{end}}>{{$vs.ServerName}}</option>
{{end}}
</select>
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">命令脚本</label>
<div class="layui-input-inline mw400">
<textarea name="command" id="command" rows="10" placeholder="请输入内容" class="layui-textarea">{{.task.Command}}</textarea>
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="concurrent">是否单例</label>
<div class="col-sm-3" >
<label class="radio-inline">
<input type="radio" name="concurrent" value="0" {{if eq .task.Concurrent 0}}checked{{end}}>
</label>
<label class="radio-inline">
<input type="radio" name="concurrent" value="1" {{if eq .task.Concurrent 1}}checked{{end}}>
</label>
</div>
<div class="col-sm-6" style="padding-top:5px;">
<i>设为的话如果该任务在上一个时间点还没执行完则略过不执行</i>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">超时设置</label>
<div class="layui-input-inline mw400">
<input type="text" name="timeout" id="timeout" lay-verify="required" autocomplete="off" placeholder="单位:秒,默认一天" class="layui-input" value="{{.task.Timeout}}">
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="cron_spec">时间表达式</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="cron_spec" value="{{.task.CronSpec}}" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
<a href="{{urlfor "HelpController.Index"}}" target="_blank">参见使用帮助</a>
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<input type="hidden" name="id" id="id" value="0">
<div class="layui-form-item">
<label class="layui-form-label mw200"></label>
<div class="layui-input-inline mw400">
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">命令脚本</label>
<div class="col-sm-5" >
<textarea name="command" class="form-control" id="command" rows="3">{{.task.Command}}</textarea>
</div>
<div class="col-sm-4" style="padding-top:5px;">
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="cron_spec">超时设置</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="秒" name="timeout" value="{{.task.Timeout}}" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
单位秒不设置的话默认超时时间为1天
</div>
</div>
<br />
<div class="modal-footer" style="text-align:center">
<button type="submit" class="btn btn-primary submit_attr_button">保存</button>
<button type="button" class="btn btn-default reback">返回</button>
</div>
</form>
</div>
</div>
</div>
</form>
</div>
<script>
$(function () {
$("form").submit(function () {
$("button[type='submit']").attr('disabled', true);
$.post('{{urlfor "TaskController.Add"}}', $(this).serialize(), function (out) {
if (out.status == 0) {
window.location.href = '{{urlfor "TaskController.List"}}';
} else {
alert_message(out.msg,"alert-danger","alert-success");
$("button[type='submit']").attr('disabled', false);
layui.use(['form','element','layer','jquery'],function(){
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
var $ = layui.jquery;
var error_info = "{{.flash.error}}";
if(error_info){
layer.msg(error_info,{icon: 2,shade:0.3},function () {
window.history.go(-1)
})
return;
}
}, "json");
return false;
$("#des").on('click',function () {
layer.tips('设为的话如果该任务在上一个时间点还没执行完则略过不执行', '#des', {
tips: [1, '#0FA6D8'] //还可配置颜色
});
})
form.on('submit(sub)', function(data){
var form_data = data.field;
$.post('{{urlfor "TaskController.AjaxSave"}}', form_data, function (out) {
if (out.status == 0) {
layer.msg("操作成功",{icon: 1},function () {
window.history.go(-1)
})
} else {
layer.msg(out.message)
}
}, "json");
return false;
});
//但是如果你的HTML是动态生成的自动渲染就会失效
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
form.render();
});
});
</script>

184
views/task/detail.html Normal file
View File

@@ -0,0 +1,184 @@
<style>
.layui-form-item{
margin-bottom: 0px;
}
legend{
font-size: 14px !important;
color: #009688;
font-weight: bold !important;
}
</style>
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
<div class="layui-btn-container mw200">
{{if eq $.task.Status 2}}
<button lay-submit class="layui-btn layui-btn-sm " lay-filter="audit">审核通过</button>
<button lay-submit class="layui-btn layui-btn-sm layui-btn-danger" lay-filter="nopass">审核不通过</button>
{{end}}
{{if eq $.task.Status 1}}
<button lay-submit class="layui-btn layui-btn-sm layui-btn-danger" lay-filter="pause">暂停任务</button>
{{end}}
{{if eq $.task.Status 0}}
<button lay-submit class="layui-btn layui-btn-sm layui-btn-danger" lay-filter="start">启动任务</button>
{{end}}
<button lay-submit class="layui-btn layui-btn-sm " lay-filter="edit">编辑任务</button>
<button lay-submit class="layui-btn layui-btn-sm " lay-filter="run">测试执行</button>
<button lay-submit class="layui-btn layui-btn-sm " lay-filter="log">任务日志</button>
<button lay-submit class="layui-btn layui-btn-sm " lay-filter="copy">复制任务</button>
</div>
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;padding-right: 10px;">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>{{.task.TaskName}}#{{.task.Id}}任务详细</legend>
</fieldset>
<table class="layui-table" lay-skin="nob" lay-size="sm">
<colgroup>
<col width="80">
<col width="400">
<col>
</colgroup>
<tbody>
<tr>
<td>任务说明</td>
<td>{{.task.TaskName}}</td>
<td></td>
</tr>
<tr>
<td>任务状态</td>
<td>{{.TextStatus|str2html}}</td>
<td></td>
</tr>
<tr>
<td>执行次数</td>
<td>{{.task.ExecuteTimes}}</td>
<td></td>
</tr>
<tr>
<td>服务资源</td>
<td> {{.serverName}}</td>
<td></td>
</tr>
<tr>
<td>是否单例</td>
<td>{{if eq .task.Concurrent 0}}{{end}} {{if eq .task.Concurrent 1}}{{end}}</td>
<td></td>
</tr>
<tr>
<td>执行时间</td>
<td> {{.task.CronSpec}}</td>
<td></td>
</tr>
<tr>
<td>命令脚本</td>
<td>{{.task.Command}}</td>
<td></td>
</tr>
<tr>
<td>超时设置</td>
<td>{{.task.Timeout}}</td>
<td></td>
</tr>
<tr>
<td>创建时间</td>
<td>{{.CreateTime}}</td>
<td></td>
</tr>
<tr>
<td>创建人</td>
<td>{{.task.CreateId}}</td>
<td></td>
</tr>
<tr>
<td>修改时间</td>
<td>{{.UpdateTime}}</td>
<td></td>
</tr>
<tr>
<td>最后修改人</td>
<td>{{.task.UpdateId}}</td>
<td></td>
</tr>
</tbody>
</table>
<input type="hidden" name="id" id="id" value="{{.task.Id}}">
</div>
</div>
<script>
layui.use(['form','element','layer','jquery'],function(){
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
var $ = layui.jquery;
var id = $("#id").val();
var error_info = "{{.flash.error}}";
if(error_info){
layer.msg(error_info,{icon: 2,shade:0.3},function () {
window.history.go(-1)
})
return;
}
$('.layui-btn-container button').on('click',function () {
var event = $(this).attr('lay-filter');
if (event==='edit'){
var status =" {{.task.Status}}";
if(status==1){
layer.msg("运行状态无法编辑任务,请先暂停任务");
return;
}
window.location.href="/task/edit?id="+id
}else if(event==='log'){
window.location.href="/tasklog/list?task_id="+id;
}else if(event==='copy'){
window.location.href="/task/copy?id="+id;
}else if (event==='run'){
layer.confirm("测试执行任务,注意不要超时,请确认执行", {icon: 3, title:'提示'}, function(index){
layer.load();
$.post('/task/ajaxrun', {id:id}, function (out) {
if (out.status == 0) {
layer.msg("操作成功",{icon: 1},function () {
window.location.href="/tasklog/list?task_id="+id
})
} else {
layer.msg(out.message)
return
}
}, "json");
setTimeout(function(){
layer.closeAll('loading');
}, 2000);
layer.close(index);
});
}else if (event==='audit' || event==='start' || event==='pause' || event==="nopass"){
$.post('/task/ajax'+event, {id:id}, function (out) {
if (out.status == 0) {
layer.msg("操作成功",{icon: 1},function () {
window.location.reload()
})
} else {
layer.msg(out.message)
return
}
}, "json");
return
}else{
layer.msg("操作不存在")
}
})
//但是如果你的HTML是动态生成的自动渲染就会失效
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
form.render();
});
</script>

View File

@@ -1,145 +1,138 @@
<!-- 新增任务 -->
<div class="container-fluid">
<div class="info-center">
<!--title-->
<div class="info-center">
<div class="page-header">
<div class="pull-left">
<h4>{{.pageTitle}}</h4>
</div>
<div class="pull-right">
<!-- <button type="button" class="btn btn-mystyle btn-sm refresh">刷新</button>
<button type="button" class="btn btn-mystyle btn-sm reback">返回</button> -->
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
<form class="layui-form" action="javascript:return false;" method="post" >
<div class="layui-form-item">
<label class="layui-form-label mw200">任务名称</label>
<div class="layui-input-inline mw400">
<input type="text" name="task_name" id="task_name" lay-verify="required" autocomplete="off" placeholder="任务名称" class="layui-input" value="{{.task.TaskName}}">
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">所属分组</label>
<div class="layui-input-inline">
<select name="group_id" lay-verify="required">
{{range $k, $v := .taskGroup}}
<option value="{{$k}}" {{if eq $k $.task.GroupId}}selected{{end}}>{{$v}}</option>
{{end}}
</select>
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">服务器资源</label>
<div class="layui-inline">
<div class="layui-input-inline">
<select name="server_id">
<option value="0">本地服务器</option>
{{range $k, $v := .serverGroup}}
<optgroup label="{{$v.GroupName}}">
{{range $kk, $vv := $v.Servers}}
<option value="{{$kk}}" {{if eq $kk $.task.ServerId}}selected{{end}} >{{$vv}}</option>
{{end}}
</optgroup>
{{end}}
</select>
</div>
</div>
</div>
</div>
<!--content-list-->
<div class="content-list">
<form action="{{urlfor "TaskController.Add"}}" method="post" class="form-horizontal">
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">任务名称</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="task_name" value="{{.task.TaskName}}" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">任务说明</label>
<div class="layui-input-inline mw400">
<textarea name="description" id="description" rows="2" placeholder="请输入内容" class="layui-textarea">{{.task.Description}}</textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">是否单例</label>
<div class="layui-input-inline ">
<input type="radio" name="concurrent" lay-verify="concurrent" value="0" title="是" {{if eq .task.Concurrent 0}}checked{{end}}>
<input type="radio" name="concurrent" lay-verify="concurrent" value="1" title="否" {{if eq .task.Concurrent 1}}checked{{end}}>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">任务说明</label>
<div class="col-sm-5" >
<textarea name="description" class="form-control" id="description" rows="3">{{.task.Description}}</textarea>
</div>
<div class="col-sm-4" style="padding-top:5px;">
</div>
</div>
<div class="layui-form-mid layui-word-aux"><i class="fa fa-info-circle" aria-hidden="true" id="des"></i></div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">任务分组</label>
<div class="col-sm-3" >
<select name="group_id" class="form-control">
<option value="0">未分组</option>
{{range $k, $v := .groups}}
<option value="{{$v.Id}}" {{if eq $v.Id $.task.GroupId}}selected{{end}}>{{$v.GroupName}}</option>
{{end}}
</select>
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">时间表达式</label>
<div class="layui-input-inline mw400">
<input type="text" name="cron_spec" id="cron_spec" lay-verify="required" autocomplete="off" placeholder="时间表达式" class="layui-input" value="{{.task.CronSpec}}">
</div>
<div class="layui-form-mid layui-word-aux"><a href="/help" target="_blank"><i class="fa fa-question-circle" aria-hidden="true"></i></a></div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="server_id">服务器</label>
<div class="col-sm-3" >
<select name="server_id" class="form-control">
<option value="0">本地服务器</option>
{{range $ks, $vs := .servers}}
<option value="{{$vs.Id}}" {{if eq $vs.Id $.task.ServerId}}selected{{end}}>{{$vs.ServerName}}</option>
{{end}}
</select>
</div>
<div class="col-sm-6" style="padding-top:5px;">
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">命令脚本</label>
<div class="layui-input-inline mw400">
<textarea name="command" id="command" rows="10" placeholder="请输入内容" class="layui-textarea">{{.task.Command}}</textarea>
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="concurrent">是否单例</label>
<div class="col-sm-3" >
<label class="radio-inline">
<input type="radio" name="concurrent" value="0" {{if eq .task.Concurrent 0}}checked{{end}}>
</label>
<label class="radio-inline">
<input type="radio" name="concurrent" value="1" {{if eq .task.Concurrent 1}}checked{{end}}>
</label>
</div>
<div class="col-sm-6" style="padding-top:5px;">
<i>设为的话如果该任务在上一个时间点还没执行完则略过不执行</i>
</div>
<div class="layui-form-item">
<label class="layui-form-label mw200">超时设置</label>
<div class="layui-input-inline mw400">
<input type="text" name="timeout" id="timeout" lay-verify="required" autocomplete="off" placeholder="单位:秒,默认一天" class="layui-input" value="{{.task.Timeout}}">
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="cron_spec">时间表达式</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="" name="cron_spec" value="{{.task.CronSpec}}" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
<a href="{{urlfor "HelpController.Index"}}" target="_blank">参见使用帮助</a>
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<input type="hidden" name="id" id="id" value="{{.task.Id}}">
<div class="layui-form-item">
<label class="layui-form-label mw200"></label>
<div class="layui-input-inline mw400">
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="task_name">命令脚本</label>
<div class="col-sm-5" >
<textarea name="command" class="form-control" id="command" rows="3">{{.task.Command}}</textarea>
</div>
<div class="col-sm-4" style="padding-top:5px;">
</div>
</div>
<div class="form-group" style="margin-top: 15px">
<label class="col-sm-3 control-label" for="cron_spec">超时设置</label>
<div class="col-sm-3" >
<input type="text" class="form-control input-sm" placeholder="秒" name="timeout" value="{{.task.Timeout}}" />
</div>
<div class="col-sm-6" style="padding-top:5px;">
单位秒不设置的话默认超时时间为1天
</div>
</div>
<br />
<input type="hidden" name="id" value="{{.task.Id}}" />
<div class="modal-footer" style="text-align:center">
<button type="submit" class="btn btn-primary submit_attr_button">保存</button>
<button type="button" class="btn btn-default reback">返回</button>
</div>
</form>
</div>
</div>
</div>
</form>
</div>
<script>
$(function () {
$("form").submit(function () {
$("button[type='submit']").attr('disabled', true);
$.post('{{urlfor "TaskController.Edit"}}', $(this).serialize(), function (out) {
if (out.status == 0) {
window.location.href = '{{urlfor "TaskController.List"}}';
} else {
alert_message(out.msg,"alert-danger","alert-success");
$("button[type='submit']").attr('disabled', false);
}
}, "json");
return false;
layui.use(['form','element','layer','jquery'],function(){
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
var $ = layui.jquery;
var error_info = "{{.flash.error}}";
if(error_info){
layer.msg(error_info,{icon: 2,shade:0.3},function () {
window.history.go(-1)
})
return;
}
$("#des").on('click',function () {
layer.tips('设为的话如果该任务在上一个时间点还没执行完则略过不执行', '#des', {
tips: [1, '#0FA6D8'] //还可配置颜色
});
})
form.on('submit(sub)', function(data){
var msg = "编辑任务需要重新审核,是否确认需要编辑?";
layer.confirm(msg, {icon: 3, title:'提示'}, function(index){
layer.load();
var form_data = data.field;
$.post('{{urlfor "TaskController.AjaxSave"}}', form_data, function (out) {
if (out.status == 0) {
layer.msg("操作成功,可去【任务审核】中查看该任务",{icon: 1},function () {
window.location.href="/task/auditlist"
})
} else {
layer.msg(out.message)
return
}
}, "json");
setTimeout(function(){
layer.closeAll('loading');
}, 2000);
layer.close(index);
});
});
//但是如果你的HTML是动态生成的自动渲染就会失效
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
form.render();
});
});
</script>

View File

@@ -1,170 +1,161 @@
<!-- 任务列表 -->
<div class="container-fluid">
<div class="info-center">
<!--title-->
<div class="info-center">
<div class="page-header">
<div class="pull-left">
<h4>{{.pageTitle}}</h4>
</div>
<div class="pull-right">
<!-- <button type="button" class="btn btn-mystyle btn-sm refresh">刷新</button>
<button type="button" class="btn btn-mystyle btn-sm reback">返回</button> -->
</div>
<div class="layui-layout layui-layout-admin" style="padding-left: 20px;">
<div class="layui-row" style="margin-top: 20px;">
<div class="layui-col-xs6">
<div class="layui-btn-group">
<a class="layui-btn" data-type="tabAdd" href="/task/add">新增</a>
<button class="layui-btn batch" data-type="batchstart" >启动</button>
<button class="layui-btn layui-btn-danger batch" data-type="batchpause" >暂停</button>
</div>
</div>
<div class="clearfix"></div>
</div>
<!--content-list-->
<div class="content-list">
<div class="search-box row">
<div class="col-md-4">
<div class="btn-group pull-left" role="group" aria-label="...">
<a href='{{urlfor "TaskController.Add"}}' class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> 新增任务</a>
<div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-edit"></span> 批量操作
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="javascript:;" onclick="javascript:batch('active');"><span class="glyphicon glyphicon-expand" aria-hidden="true"></span> 激活</a></li>
<li><a href="javascript:;" onclick="javascript:batch('pause');"><span class="glyphicon glyphicon-pause" aria-hidden="true"></span> 暂停</a></li>
<li class="divider"></li>
<li><a href="javascript:;" onclick="javascript:batch('delete');"><span class="glyphicon glyphicon-remove-sign" aria-hidden="true"></span> 删除</a></li>
</ul>
<div class="layui-col-xs6 search_text">
<form class="layui-form" action="" onsubmit="javascript:return false;">
<div class="demoTable">
<div class="layui-inline" style="width: 40%">
<input class="layui-input" name="taskName" id="taskName" autocomplete="off" placeholder="任务名称" >
</div>
<button class="layui-btn" data-type="reload" id="reload">查询</button>
</div>
</div>
<div class="col-md-8">
<div class=" btn-large pull-right" >
<form method="post" name="s" action="{{urlfor "TaskController.List"}}">
<select name="groupid" class="btn-large form-control">
<option value="99">全部分组</option>
{{range $k, $v := .groups}}
<option value="{{$v.Id}}" {{if eq $v.Id $.groupid}}selected{{end}} >{{$v.GroupName}}</option>
{{end}}
</select>
</form>
</div>
</div>
</form>
</div>
</div>
<div class="clearfix"></div>
<div class="table-margin">
<form id="form-list" method="post" action="">
<table class="table table-bordered table-header">
<thead>
<tr>
<td><input type="checkbox" name="all_check" /></td>
<td>ID</td>
<td width="20%">任务名称</td>
<td>服务器</td>
<td>任务说明</td>
<td>上次执行时间</td>
<td>下次执行时间</td>
<td width="25%">操作</td>
</tr>
</thead>
<tbody>
{{range $k,$v := .list}}
<tr {{if eq $v.is_odd 0 }} style="background: #FFFFFF " {{else}} style="background: #f8f8f8" {{end}}>
<td class="chk"><input type="checkbox" name="ids" value="{{$v.id}}" /></td>
<td> {{$v.id}} </td>
<td>
{{if eq $v.running 0}}
<span class="glyphicon glyphicon-minus-sign brand-danger" aria-hidden="true"></span>
{{else}}
<span class="glyphicon glyphicon-ok-sign brand-success " aria-hidden="true"></span>
{{end}}
{{$v.group_name}}-{{$v.name}}
</td>
<td> {{$v.server_name}} </td>
<td> {{$v.description}} </td>
<td> {{$v.prev_time}} </td>
<td> {{$v.next_time}} </td>
<td>
{{if eq $v.status 0}}
<a class="btn btn-danger btn-xs" href="{{urlfor "TaskController.Start"}}?id={{$v.id}}">
<span class="glyphicon glyphicon-expand" aria-hidden="true"></span> 激活
</a>
<a class="btn btn-info btn-xs" href="{{urlfor "TaskController.Edit"}}?id={{$v.id}}">
<span class="glyphicon glyphicon-edit" aria-hidden="true"></span> 编辑
</a>
{{else}}
<a class="btn btn-success btn-xs" href="{{urlfor "TaskController.Pause"}}?id={{$v.id}}">
<span class="glyphicon glyphicon-pause" aria-hidden="true"></span> 暂停
</a>
<a class="btn btn-default btn-xs" href="javascript:void(0)" onclick="alert('激活状态无法编辑任务,请先暂停任务');">
<span class="glyphicon glyphicon-edit" aria-hidden="true"></span> 编辑
</a>
{{end}}
<a class="btn btn-info btn-run btn-xs" href="{{urlfor "TaskController.Run"}}?id={{$v.id}}">
<span class="glyphicon glyphicon-flash" aria-hidden="true"></span> 执行
</a>
<a class="btn btn-info btn-xs" href="{{urlfor "TaskController.Logs"}}?id={{$v.id}}">
<span class="glyphicon glyphicon-file" aria-hidden="true"></span> 日志
</a>
<a class="btn btn-info btn-xs" href="{{urlfor "TaskController.Copy"}}?id={{$v.id}}">
<span class="glyphicon glyphicon-copy" aria-hidden="true"></span> 复制
</a>
</td>
</tr>
{{end}}
</tbody>
<tfoot>
<tr>
<td colspan="8">
<div class="pull-right">
{{str2html .pageBar}}
</div>
</td>
</tr>
</tfoot>
</table>
</form>
</div>
</div>
</div>
<table class="layui-hide" id="table_list" lay-filter="table_filter">
</table>
<script type="text/html" id="bar">
{{/*<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="status">启|停</a>*/}}
{{/*<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>*/}}
<a class="layui-btn layui-btn-xs " lay-event="detail">详细</a>
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="run">测试</a>
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="log">日志</a>
</script>
</div>
<script>
$(function() {
$('[data-toggle="tooltip"]').tooltip()
$("select[name='groupid']").change(function () {
$("form[name='s']").submit();
});
$(".btn-run").click(function () {
return confirm("该功能建议只用来做任务测试,确定要立即执行该任务吗?");
});
});
function batch(action) {
if ($("input[name=ids]:checked").size() < 1) {
alert_message("请选择要操作的任务","alert-danger","alert-success");
} else {
if(action=='delete'){
if(!confirm("确定要删除所选吗?")) return;
layui.use(['table','form','element'], function(){
var table = layui.table;
var form = layui.form;
var element = layui.element;
var error_info = "{{.flash.error}}";
if(error_info){
layer.msg(error_info,{icon: 2,shade:0.3},function () {
window.history.go(-1)
})
return;
}
var url = "{{urlfor "TaskController.Batch"}}";
$.post(url + "?action=" + action, $("#form-list").serialize(), function(out) {
if (out.status != 0) {
alert_message(out.msg,"alert-danger","alert-success");
} else {
window.location.reload();
//方法级渲染
table.render({
elem: '#table_list'
,url: '/task/table'
,cols: [[
{checkbox: true, fixed: true},
{field:'id', title: 'ID', align:'center',sort: true, width:50}
,{field:'task_name',title: '任务名称'}
,{field:'description',title: '任务说明'}
,{field:'next_time', width:170,title: '下次执行时间'}
,{field:'pre_time', width:170,title: '上次执行时间'}
,{field:'execute_times', width:70,title: '次数'}
,{fixed: 'right', width:260, align:'center', title:'操作', toolbar: '#bar'}
]]
,id: 'listReload'
,page: true
,height: "full-130"
});
var $ = layui.$, active = {
reload: function(){
table.reload('listReload', {
where: {
taskName: $('#taskName').val(),
}
});
}
}, "json");
}
return false;
}
//点击行换色
$('tbody tr').click(function(){
$(this).addClass("warning").siblings().removeClass("warning");
});
};
//监听工具条
table.on('tool(table_filter)', function(obj){
var data = obj.data;
if(obj.event === 'edit'){
window.location.href="/task/edit?id="+data.id
} else if(obj.event === 'log'){
window.location.href="/tasklog/list?task_id="+data.id;
}else if (obj.event==='detail'){
window.location.href='/task/detail?id='+data.id;
}else if (obj.event==='run'){
layer.confirm("测试执行任务,注意不要超时,请确认执行", {icon: 3, title:'提示'}, function(index){
layer.load();
$.post('/task/ajaxrun', {id:data.id}, function (out) {
if (out.status == 0) {
layer.msg("操作成功",{icon: 1},function () {
window.location.href="/tasklog/list?task_id="+data.id
})
} else {
layer.msg(out.message)
return
}
}, "json");
setTimeout(function(){
layer.closeAll('loading');
}, 2000);
layer.close(index);
});
}else if (obj.event==='status'){
layer.msg("状态")
}else{
layer.msg('操作不存在')
}
});
$(".batch").on('click',function (obj) {
var action = $(this).attr('data-type');
var checkStatus = table.checkStatus('listReload');
var data = checkStatus.data;
if(data.length<1){
layer.msg("请选择操作数据");
return;
}
var msg = "确认启动这些任务吗";
if (action=='batchpause'){
msg = "确定暂定这些任务吗";
}
layer.confirm(msg, {icon: 3, title:'提示'}, function(index){
var ids = "";
$.each(data,function (k,v) {
ids += v.id+",";
});
ids = ids.substr(0,ids.length-1);
layer.load();
$.post('/task/ajax'+action, {"ids":ids}, function (out) {
if (out.status == 0) {
layer.msg("操作成功",{icon: 1},function () {
$('#reload').click();
})
} else {
layer.msg(out.message)
return
}
}, "json");
setTimeout(function(){
layer.closeAll('loading');
}, 2000);
layer.close(index);
});
return ;
})
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>

View File

@@ -1,130 +0,0 @@
<!-- 新增任务 -->
<div class="container-fluid">
<div class="info-center">
<!--title-->
<div class="info-center">
<div class="page-header">
<div class="pull-left">
<h4>{{.pageTitle}}</h4>
</div>
<div class="pull-right">
<!-- <button type="button" class="btn btn-mystyle btn-sm refresh">刷新</button>
<button type="button" class="btn btn-mystyle btn-sm reback">返回</button> -->
</div>
</div>
</div>
</div>
<!--content-list-->
<div class="content-list">
<div class="search-box row">
<p>
<h5>{{.task.TaskName}} #{{.task.Id}}</h5>
<pre>{{.task.Command}}</pre>
</p>
</div>
<hr />
<div class="mt20"></div>
<div class="search-box row">
<div class="col-md-4">
<div class="btn-group pull-left" role="group" aria-label="...">
<div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
批量操作
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="javascript:;" onclick="javascript:batch('delete');"> <span class="glyphicon glyphicon-remove-sign"></span> 删除</a></li>
</ul>
</div>
<button type="button" class="btn btn-default reback">返回</button>
</div>
</div>
<div class="col-md-8">
</div>
</div>
<div class="clearfix"></div>
<div class="table-margin">
<form id="form-list" method="post" action="">
<table class="table table-bordered table-header">
<thead>
<tr>
<td><input type="checkbox" name="all_check" /></td>
<td>ID</td>
<td width="20%">开始时间</td>
<td>执行时间</td>
<td>输出</td>
<td>状态</td>
<td width="10%">操作</td>
</tr>
</thead>
<tbody>
{{range $k,$v := .list}}
<tr>
<td class="chk"><input type="checkbox" name="ids" value="{{$v.id}}" /></td>
<td> {{$v.id}} </td>
<td> {{$v.start_time}} </td>
<td>{{$v.process_time}} </td>
<td>{{$v.ouput_size}}</td>
<td>
{{if eq $v.status 0}}
<span class="glyphicon glyphicon-ok-sign brand-success" aria-hidden="true"> </span>正常
{{else if eq $v.status -1}}
<span class="glyphicon glyphicon-remove-sign brand-danger" aria-hidden="true"> </span> 出错
{{else if eq $v.status -2}}
<span class="glyphicon glyphicon-exclamation-sign brand-warning" aria-hidden="true"> </span> 超时
{{end}}
</td>
<td>
<a class="btn btn-info btn-xs" href="{{urlfor "TaskController.ViewLog"}}?id={{$v.id}}">
<i class="glyphicon glyphicon-file"></i> 详情
</a>
</td>
</tr>
{{end}}
</tbody>
<tfoot>
<tr>
<td colspan="7">
<div class="pull-right">
{{str2html .pageBar}}
</div>
</td>
</tr>
</tfoot>
</table>
</form>
</div>
</div>
</div>
<script>
function batch(action) {
if ($("input[name='ids']:checked").size() < 1) {
alert_message("请选择要操作的任务","alert-danger","alert-success");
} else {
if (!confirm("确实要删除所选吗?")) return;
var url = "{{urlfor "TaskController.LogBatch"}}";
$.post(url + "?action=" + action, $("#form-list").serialize(), function(out) {
if (out.status != 0) {
alert_message(out.msg,"alert-danger","alert-success");
} else {
window.location.reload();
}
}, "json");
}
return false;
}
</script>

View File

@@ -1,47 +0,0 @@
<!-- 新增任务 -->
<div class="container-fluid">
<div class="info-center">
<!--title-->
<div class="info-center">
<div class="page-header">
<div class="pull-left">
<h4>{{.pageTitle}}</h4>
</div>
<div class="pull-right">
<!-- <button type="button" class="btn btn-mystyle btn-sm refresh">刷新</button>
<button type="button" class="btn btn-mystyle btn-sm reback">返回</button> -->
</div>
</div>
</div>
</div>
<!--content-list-->
<div class="content-list">
<div class="search-box row">
<h4>{{.task.TaskName}}</h4>
日志ID#{{.data.id}} <br />
执行时间{{.data.start_time}} <br />
执行耗时{{.data.process_time}} <br />
输出大小{{.data.ouput_size}}
<hr />
<h4>任务命令</h4>
<pre class="pre-scrollable">{{.task.Command}}</pre>
<hr />
<h4>执行输出</h4>
<pre class="pre-scrollable">{{.data.output}}</pre>
<h4>错误输出</h4>
<pre class="pre-scrollable">{{.data.error}}</pre>
<hr />
<div class="btn-group">
<button class="btn btn-default reback"><span class="icon-chevron-left"></span> </button>
</div>
</div>
</div>
</div>