v2版本正式上线测试版
This commit is contained in:
108
views/admin/add.html
Normal file
108
views/admin/add.html
Normal file
@@ -0,0 +1,108 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<div style="margin: 10px 0px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:新建管理员默认密码为:george518
|
||||
</blockquote>
|
||||
</div>
|
||||
<form class="layui-form" action="" method="post" >
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">登录账号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="login_name" id="login_name" lay-verify="required" autocomplete="off" placeholder="登录账号" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*英文,数字或_,6位以上</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">真实姓名</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="real_name" id="real_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">手机号码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="phone" lay-verify="phone|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">电子邮箱</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="email" id="email" lay-verify="email" 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">选择角色</label>
|
||||
<div class="layui-input-block">
|
||||
{{range $k, $v := .role}}
|
||||
<input type="checkbox" name="role_ids" lay-filter="role_ids" title="{{$v.role_name}}" value="{{$v.id}}">
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" value="" id="roleids" name="roleids">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var $;
|
||||
layui.config({
|
||||
base : "js/"
|
||||
}).use(['form','element','layer','jquery'],function(){
|
||||
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
|
||||
var $ = layui.jquery;
|
||||
var role_ids = [];
|
||||
|
||||
var error_info = "{{.flash.error}}";
|
||||
if(error_info){
|
||||
layer.msg(error_info,{icon: 2,shade:0.3},function () {
|
||||
window.history.go(-1)
|
||||
})
|
||||
return;
|
||||
}
|
||||
|
||||
form.on('checkbox(role_ids)', function(data){
|
||||
if(data.elem.checked==true){
|
||||
role_ids.push(data.value)
|
||||
}else{
|
||||
$.each(role_ids,function(index,item){
|
||||
// index是索引值(即下标) item是每次遍历得到的值;
|
||||
if(item==data.value){
|
||||
role_ids.splice(index,1);
|
||||
}
|
||||
});
|
||||
}
|
||||
$("#roleids").val(role_ids.join(","));
|
||||
});
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "AdminController.AjaxSave"}}', form_data, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.msg("操作成功",{icon: 1},function () {
|
||||
window.location.reload()
|
||||
})
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
116
views/admin/edit.html
Normal file
116
views/admin/edit.html
Normal file
@@ -0,0 +1,116 @@
|
||||
<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">登录账号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="login_name" readonly id="login_name" lay-verify="required" autocomplete="off" placeholder="登录账号" class="layui-input" value="{{.admin.login_name}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*登录不允许修改</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">真实姓名</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="real_name" id="real_name" lay-verify="required" autocomplete="off" placeholder="真实姓名" class="layui-input" value="{{.admin.real_name}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">手机号码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="phone" lay-verify="phone|required" autocomplete="off" placeholder="手机号码" class="layui-input" value="{{.admin.phone}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">电子邮箱</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="email" id="email" lay-verify="email" autocomplete="off" placeholder="电子邮箱" class="layui-input" value="{{.admin.email}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">重置密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="reset_pwd" value="1" title="重置">
|
||||
<input type="radio" name="reset_pwd" value="2" title="不重置" checked>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">默认密码:george518</div>
|
||||
</div>
|
||||
{{if ne .admin.id 1}}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">选择角色</label>
|
||||
<div class="layui-input-block">
|
||||
{{range $k, $v := .role}}
|
||||
<input type="checkbox" name="role_ids" lay-filter="role_ids" title="{{$v.role_name}}" value="{{$v.id}}" {{if $v.checked}}checked{{end}}>
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
|
||||
|
||||
<input type="hidden" id="roleids" name="roleids" value="{{.admin.role_ids}}">
|
||||
<input type="hidden" id="id" name="id" value="{{.admin.id}}">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var $;
|
||||
layui.config({
|
||||
base : "js/"
|
||||
}).use(['form','element','layer','jquery'],function(){
|
||||
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
|
||||
var $ = layui.jquery;
|
||||
var role_ids_str = "{{.admin.role_ids}}"
|
||||
var role_ids = role_ids_str.split(",");
|
||||
|
||||
var error_info = "{{.flash.error}}";
|
||||
if(error_info){
|
||||
layer.msg(error_info,{icon: 2,shade:0.3},function () {
|
||||
window.history.go(-1)
|
||||
})
|
||||
return;
|
||||
}
|
||||
form.on('checkbox(role_ids)', function(data){
|
||||
if(data.elem.checked==true){
|
||||
role_ids.push(data.value)
|
||||
}else{
|
||||
$.each(role_ids,function(index,item){
|
||||
// index是索引值(即下标) item是每次遍历得到的值;
|
||||
if(item==data.value){
|
||||
role_ids.splice(index,1);
|
||||
}
|
||||
});
|
||||
}
|
||||
$("#roleids").val(role_ids.join(","));
|
||||
});
|
||||
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "AdminController.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>
|
||||
118
views/admin/list.html
Normal file
118
views/admin/list.html
Normal file
@@ -0,0 +1,118 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 20px;">
|
||||
<div class="layui-row" style="margin-top: 20px;">
|
||||
<div class="layui-col-xs6">
|
||||
<a class="layui-btn" data-type="tabAdd" href="/admin/add">新增</a>
|
||||
</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="realName" id="realName" autocomplete="off" placeholder="真实姓名" >
|
||||
</div>
|
||||
<button class="layui-btn" data-type="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-primary layui-btn-xs" lay-event="detail">查看</a> -->
|
||||
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="status">启|禁</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: '/admin/table'
|
||||
,cols: [[
|
||||
// {checkbox: true, fixed: true},
|
||||
{field:'id', title: 'ID', align:'center',sort: true, width:150}
|
||||
,{field:'login_name',title: '登录账号'}
|
||||
,{field:'real_name', title: '真实姓名'}
|
||||
,{field:'phone', title: '联系电话'}
|
||||
,{field:'email', title: '电子邮箱'}
|
||||
,{field:'status_text', title: '状态'}
|
||||
,{fixed: 'right', width:160, align:'center', toolbar: '#bar'}
|
||||
]]
|
||||
,id: 'listReload'
|
||||
,page: true
|
||||
,height: "full-130"
|
||||
});
|
||||
|
||||
var $ = layui.$, active = {
|
||||
reload: function(){
|
||||
table.reload('listReload', {
|
||||
where: {
|
||||
realName: $('#realName').val(),
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
//监听工具条
|
||||
table.on('tool(table_filter)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'edit'){
|
||||
window.location.href="/admin/edit?id="+data.id
|
||||
} else if(obj.event === 'status'){
|
||||
|
||||
acts = "禁用";
|
||||
status = "disable";
|
||||
if (data.status === 0) {
|
||||
acts = '启用';
|
||||
status = "enable";
|
||||
}
|
||||
if (data.id==1 && obj.event === 'disable') {
|
||||
layer.msg('超级管理员不允许操作');
|
||||
return false;
|
||||
}
|
||||
|
||||
layer.confirm('真的'+acts+'【'+data.login_name+'】账号么', function(index){
|
||||
var jsData = {'id':data.id,'status':status}
|
||||
$.post('{{urlfor "AdminController.AjaxDel"}}', jsData, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.alert(out.message, {icon: 1},function(index){
|
||||
layer.close(index);
|
||||
window.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
// obj.del();
|
||||
layer.close(index);
|
||||
})
|
||||
|
||||
}else{
|
||||
layer.msg('操作不存在');
|
||||
}
|
||||
});
|
||||
|
||||
$('.demoTable .layui-btn').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
383
views/auth/list.html
Normal file
383
views/auth/list.html
Normal file
@@ -0,0 +1,383 @@
|
||||
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.core.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.excheck.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.exedit.js"></script>
|
||||
|
||||
<div class="layui-row">
|
||||
<div style="margin: 10px 20px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:新增权限,请直接填写相关数据保存即可;修改和删除,请点击左侧权限树选择要修改的权限节点
|
||||
</blockquote>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md5 zTreeDemoBackground" style="margin-left: 20px;margin-right: 0px">
|
||||
<ul id="treeDemo" class="ztree" style="height:320px; width: auto; margin-bottom: 10px;">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="layui-col-md7">
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<form class="layui-form" action="" onsubmit="javascript:;" name="form" method="post">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">权限名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="auth_name" lay-verify="required" autocomplete="off" placeholder="请输入权限名称" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">上级权限</label>
|
||||
<div class="layui-input-inline" style="width: 210px;">
|
||||
<input type="text" name="pname" lay-verify="required" autocomplete="off" placeholder="请选择" disabled value="所有权限" class="layui-input" id="pname">
|
||||
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width: 50px;">
|
||||
<input type="text" name="pid" autocomplete="off" placeholder="0" id="pid" class="layui-input" readonly value="1">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">
|
||||
|
||||
<button id="menuBtn" type="button" class="layui-btn layui-btn-xs layui-btn-normal" >选择顶级分类</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">菜单地址</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="auth_url" lay-verify="required" autocomplete="off" placeholder="/home" 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">图标字体</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="icon" autocomplete="off" placeholder="fa-bar-chart-o" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"><a href="http://fontawesome.dashgame.com" target="_blank">点击这里参考</a></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="sort" lay-verify="required" autocomplete="off" placeholder="999" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否显示</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_show" value="0" title="隐藏" checked>
|
||||
<input type="radio" name="is_show" value="1" title="显示">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">是否左侧导航栏显示</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="id" class="layui-input" id="id" value="0">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="add">新增</button>
|
||||
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="edit">修改</button>
|
||||
<a class="layui-btn layui-btn-danger" href="javascript:;" id="del" lay-submit="">删除</a>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="menuContent" class="menuContent" style="display:none; position: absolute;">
|
||||
<ul id="treeMenu" class="ztree" style="margin-top:0; width:200px; height: 200px"></ul>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var $,form;
|
||||
layui.use(['form','element','layer'],function(){
|
||||
form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
|
||||
$ = layui.$;
|
||||
|
||||
var error_info = "{{.flash.error}}";
|
||||
if(error_info){
|
||||
layer.msg(error_info,{icon: 2,shade:0.3},function () {
|
||||
window.history.go(-1)
|
||||
})
|
||||
return;
|
||||
}
|
||||
form.on("submit",function(data) {
|
||||
var sub_type = data.elem.getAttribute("lay-filter")
|
||||
console.log(sub_type)
|
||||
if(sub_type=="add"){
|
||||
$("#id").val(0);
|
||||
}else{
|
||||
if($("#id").val()=="0"){
|
||||
layer.msg("修改先请在左侧权限树选择节点")
|
||||
return false
|
||||
}
|
||||
}
|
||||
console.log($("form").serialize());
|
||||
|
||||
$.post('{{urlfor "AuthController.AjaxSave"}}', $("form").serialize(), function (out) {
|
||||
|
||||
if (out.status == 0) {
|
||||
// layer.msg("操作成功")
|
||||
layer.alert('你成功了', {icon: 1},function(index){
|
||||
window.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
form.render();
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var zNodes = [{ id:1, pId:0, name:"数据错误"}];
|
||||
$(document).ready(function(){
|
||||
// $("form[name=form]").parent().find("input[type=radio]").eq(1).attr("checked", true);
|
||||
var setting = {
|
||||
// edit: {
|
||||
// enable: true
|
||||
// },
|
||||
data: {
|
||||
simpleData: {
|
||||
enable: true
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
beforeDrag: beforeDrag,
|
||||
onClick: editOnClick
|
||||
}
|
||||
};
|
||||
|
||||
function editOnClick(e, treeId, treeNode) {
|
||||
var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
|
||||
nodes = zTree.getSelectedNodes();
|
||||
if(nodes[0].id==1){
|
||||
alert('不允许修改根节点');
|
||||
return;
|
||||
}
|
||||
|
||||
if(nodes[0].parentTId){
|
||||
var parentInfo = zTree.getNodeByTId(nodes[0].parentTId);
|
||||
pid = parentInfo.id;
|
||||
pname = parentInfo.name;
|
||||
}
|
||||
|
||||
var id = nodes[0].id;
|
||||
|
||||
$("#pid").val(nodes[0].pId);
|
||||
$("#id").val(nodes[0].id);
|
||||
$("#pname").val(pname);
|
||||
$("form[name=form]").find("input[name=auth_name]").val(nodes[0].name);
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/auth/getnode",
|
||||
data: {id:id},
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
|
||||
if(data.code==0){
|
||||
$("form[name=form]").find("input[name=auth_url]").val(data.data.auth_url);
|
||||
$("form[name=form]").find("input[name=icon]").val(data.data.icon);
|
||||
$("form[name=form]").find("input[name=sort]").val(data.data.sort);
|
||||
var is_show = data.data.is_show
|
||||
$("form[name=form]").find("input[type=radio][value="+is_show+"]").attr("checked", true);
|
||||
$("form[name=form]").find("input[type=radio][value="+is_show+"]").click();
|
||||
form.render();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function beforeDrag(treeId, treeNodes) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function setEdit() {
|
||||
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
|
||||
}
|
||||
// //增加节点
|
||||
var newCount = 1;
|
||||
var maxId = 0;
|
||||
function add(e) {
|
||||
var maxId = $('#max_id').val();
|
||||
var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
|
||||
isParent = e.data.isParent,
|
||||
nodes = zTree.getSelectedNodes(),
|
||||
treeNode = nodes[0];
|
||||
|
||||
if (treeNode) {
|
||||
treeNode = zTree.addNodes(treeNode, {id:(maxId -(-newCount)), pId:treeNode.id, isParent:isParent, name:"new node" + treeNode.id + (newCount++)});
|
||||
} else {
|
||||
treeNode = zTree.addNodes(null, {id:(maxId -(-newCount)), pId:0, isParent:isParent, name:"new node" + (newCount++)});
|
||||
}
|
||||
|
||||
if (treeNode) {
|
||||
zTree.editName(treeNode[0]);
|
||||
} else {
|
||||
alert("叶子节点被锁定,无法增加子节点");
|
||||
}
|
||||
};
|
||||
function showCode(str) {
|
||||
var code = $("#code");
|
||||
code.empty();
|
||||
for (var i=0, l=str.length; i<l; i++) {
|
||||
code.append("<li>"+str[i]+"</li>");
|
||||
}
|
||||
}
|
||||
//加载树
|
||||
refresh_tree();
|
||||
|
||||
|
||||
function refresh_tree()
|
||||
{
|
||||
|
||||
var time = Date.parse(new Date());
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/auth/getnodes",
|
||||
data: {time:time},
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
if(data.code==0){
|
||||
zNodes = data.data;
|
||||
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
|
||||
$.fn.zTree.init($("#treeMenu"), menu, zNodes);
|
||||
}
|
||||
}
|
||||
});
|
||||
setEdit();
|
||||
$("#remove").bind("change", setEdit);
|
||||
$("#rename").bind("change", setEdit);
|
||||
$("#removeTitle").bind("propertychange", setEdit)
|
||||
.bind("input", setEdit);
|
||||
$("#renameTitle").bind("propertychange", setEdit)
|
||||
.bind("input", setEdit);
|
||||
}
|
||||
|
||||
// //新增 type=1
|
||||
// $('#submit_add_button').on('click',function(){
|
||||
// var data = $('form[name=form_add]').serialize();
|
||||
|
||||
// ajaxRequest({'nodes':data,'type':1},'/auth/auth/save_auth','submit_add_button','POST',0);
|
||||
// });
|
||||
|
||||
// //新增 type=2
|
||||
// $('#submit_edit_button').on('click',function(){
|
||||
// var data = $('form[name=form_add]').serialize();
|
||||
|
||||
// ajaxRequest({'nodes':data,'type':2},'/auth/auth/save_auth','submit_edit_button','POST',0);
|
||||
// });
|
||||
|
||||
//删除
|
||||
$('#del').on('click',function(){
|
||||
var id = $("#id").val();
|
||||
if (id==0) {
|
||||
layer.msg('请在左侧权限树选择节点');
|
||||
return false;
|
||||
}
|
||||
layer.confirm('确认要删除吗?', {icon: 3, title:'提示'}, function(index){
|
||||
$.post('{{urlfor "AuthController.AjaxDel"}}', {id:id}, function (out) {
|
||||
if (out.status == 0) {
|
||||
// layer.msg("操作成功")
|
||||
layer.alert('你删除成功了', {icon: 1},function(index){
|
||||
window.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
// //清空
|
||||
// $('#submit_cancel_button').on('click',function(){
|
||||
// var fields = ['id','pid','pname','name','menu_url','sort'];
|
||||
// $.each(fields,function(k,v) {
|
||||
// $("form[name=form_add]").find("input[name="+v+"]").val('');
|
||||
// });
|
||||
|
||||
// });
|
||||
|
||||
//以下是下拉选择框
|
||||
var menu = {
|
||||
view: {
|
||||
dblClickExpand: false
|
||||
},
|
||||
data: {
|
||||
simpleData: {
|
||||
enable: true
|
||||
}
|
||||
},
|
||||
callback: {
|
||||
// beforeClick: beforeClick,
|
||||
onClick: onClick
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function beforeClick(treeId, treeNode) {
|
||||
var check = (treeNode && !treeNode.isParent);
|
||||
if (!check) alert("不能选择");
|
||||
return check;
|
||||
}
|
||||
|
||||
function onClick(e, treeId, treeNode) {
|
||||
var zTree = $.fn.zTree.getZTreeObj("treeMenu"),
|
||||
nodes = zTree.getSelectedNodes(),
|
||||
v = "";
|
||||
|
||||
nodes.sort(function compare(a,b){return a.id-b.id;});
|
||||
for (var i=0, l=nodes.length; i<l; i++) {
|
||||
v += nodes[i].name + ",";
|
||||
}
|
||||
if (v.length > 0 ) v = v.substring(0, v.length-1);
|
||||
var pid = $("#pid");
|
||||
|
||||
$("#pid").val(nodes[0].id);
|
||||
$("#pname").val(v);
|
||||
|
||||
hideMenu()
|
||||
}
|
||||
|
||||
$("#menuBtn").on("click",function(){
|
||||
showMenu()
|
||||
})
|
||||
|
||||
function showMenu() {
|
||||
var pname = $("#pname");
|
||||
var paOffset = $("#pname").offset();
|
||||
// var sideOffset = $("#left_side").width();
|
||||
// console.log(sideOffset.left)
|
||||
$("#menuContent").css({left:(paOffset.left) + "px", top:(paOffset.top - pname.outerHeight()+70) + "px"}).slideDown("fast");
|
||||
|
||||
$("body").bind("mousedown", onBodyDown);
|
||||
}
|
||||
function hideMenu() {
|
||||
$("#menuContent").fadeOut("fast");
|
||||
$("body").unbind("mousedown", onBodyDown);
|
||||
}
|
||||
function onBodyDown(event) {
|
||||
if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length>0)) {
|
||||
hideMenu();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
57
views/ban/add.html
Normal file
57
views/ban/add.html
Normal file
@@ -0,0 +1,57 @@
|
||||
<style>
|
||||
.nav-title{
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<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">
|
||||
|
||||
<div class="layui-input-inline mw400">
|
||||
<textarea name="code" id="code" placeholder="请输入禁用命令" class="layui-textarea"></textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<input type="hidden" name="id" id="id" value="0">
|
||||
<div class="layui-form-item">
|
||||
<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>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = data.field;
|
||||
$.post('{{urlfor "BanController.AjaxSave"}}', form_data, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.msg("操作成功",{icon: 1},function () {
|
||||
window.parent.layer.closeAll();
|
||||
window.parent.location.reload();
|
||||
})
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
57
views/ban/edit.html
Normal file
57
views/ban/edit.html
Normal file
@@ -0,0 +1,57 @@
|
||||
<style>
|
||||
.nav-title{
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<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">
|
||||
|
||||
<div class="layui-input-inline mw400">
|
||||
<textarea name="code" id="code" placeholder="请输入禁用命令" class="layui-textarea">{{.ban.code}}</textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<input type="hidden" name="id" id="id" value="{{.ban.id}}">
|
||||
<div class="layui-form-item">
|
||||
<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>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = data.field;
|
||||
$.post('{{urlfor "BanController.AjaxSave"}}', form_data, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.msg("操作成功",{icon: 1},function () {
|
||||
window.parent.layer.closeAll();
|
||||
window.parent.location.reload();
|
||||
})
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
128
views/ban/list.html
Normal file
128
views/ban/list.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 20px;">
|
||||
<div class="layui-row" style="margin-top: 20px;">
|
||||
<div class="layui-col-xs6">
|
||||
<a class="layui-btn" data-type="tabAdd" id="tabAdd" href="javascript:void(0)">新增</a>
|
||||
</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="code" id="code" autocomplete="off" placeholder="禁用命令" >
|
||||
</div>
|
||||
<button class="layui-btn" data-type="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-primary layui-btn-xs" lay-event="detail">查看</a> -->
|
||||
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</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: '/ban/table'
|
||||
,cols: [[
|
||||
// {checkbox: true, fixed: true},
|
||||
{field:'id', title: 'ID', align:'center',sort: true, width:150}
|
||||
,{field:'code',title: '禁用命令'}
|
||||
,{field:'create_time', title: '创建时间'}
|
||||
,{fixed: 'right', width:160, align:'center', toolbar: '#bar'}
|
||||
]]
|
||||
,id: 'listReload'
|
||||
,page: true
|
||||
,height: "full-130"
|
||||
});
|
||||
|
||||
var $ = layui.$, active = {
|
||||
reload: function(){
|
||||
table.reload('listReload', {
|
||||
where: {
|
||||
code: $('#code').val(),
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
$("#tabAdd").on("click",function() {
|
||||
layer.open({
|
||||
type: 2,
|
||||
shade: 0.3,
|
||||
id:1,
|
||||
title:"新增禁用命令",
|
||||
content: '/ban/add',
|
||||
area:['500px','250px'],
|
||||
cancel:function(){
|
||||
window.location.reload();
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
//监听工具条
|
||||
table.on('tool(table_filter)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'edit'){
|
||||
layer.open({
|
||||
type: 2,
|
||||
shade: 0.3,
|
||||
id:1,
|
||||
title:"编辑禁用命令",
|
||||
content: '/ban/edit?id='+data.id,
|
||||
area:['500px','250px'],
|
||||
cancel:function(){
|
||||
window.location.reload();
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else if(obj.event === 'del'){
|
||||
layer.confirm('真的删除【'+data.code+'】命令么', function(index){
|
||||
var jsData = {'id':data.id,'status':status}
|
||||
$.post('{{urlfor "BanController.AjaxDel"}}', jsData, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.alert(out.message, {icon: 1},function(index){
|
||||
layer.close(index);
|
||||
window.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
// obj.del();
|
||||
layer.close(index);
|
||||
})
|
||||
|
||||
}else{
|
||||
layer.msg('操作不存在');
|
||||
}
|
||||
});
|
||||
|
||||
$('.demoTable .layui-btn').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@@ -1,67 +1,62 @@
|
||||
<!-- 新增任务 -->
|
||||
<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 class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<div style="margin: 10px 0px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:新建任务分组
|
||||
</blockquote>
|
||||
</div>
|
||||
<form class="layui-form" action="" method="post" >
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分组名称</label>
|
||||
<div class="layui-input-inline" style="min-width: 200px;">
|
||||
<input type="text" name="group_name" id="group_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">分组说明</label>
|
||||
<div class="layui-input-inline" style="min-width: 400px;">
|
||||
<textarea name="description" id="description" placeholder="请输入内容" class="layui-textarea"></textarea>
|
||||
</div>
|
||||
|
||||
<!--content-list-->
|
||||
<div class="content-list">
|
||||
<form action="{{urlfor "GroupController.Add"}}" method="post" class="form-horizontal">
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="group_name">分类名称</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="group_name" value="" required />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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"></textarea>
|
||||
</div>
|
||||
<div class="col-sm-4" 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>
|
||||
<input type="hidden" id="id" value="0">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function () {
|
||||
$("form").submit(function () {
|
||||
// $(".alert").hide();
|
||||
$("button[type='submit']").attr('disabled', true);
|
||||
$.post('{{urlfor "GroupController.Add"}}', $(this).serialize(), function (out) {
|
||||
if (out.status == 0) {
|
||||
window.location.href = '{{urlfor "GroupController.List"}}';
|
||||
} else {
|
||||
alert_message(out.msg,"alert-danger","alert-success");
|
||||
$("button[type='submit']").attr('disabled', false);
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
});
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "GroupController.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>
|
||||
@@ -1,67 +1,62 @@
|
||||
<!-- 新增任务 -->
|
||||
<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: 40px;margin-top: 20px;">
|
||||
<div style="margin: 10px 0px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:编辑任务分组
|
||||
</blockquote>
|
||||
</div>
|
||||
<form class="layui-form" action="" method="post" >
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分组名称</label>
|
||||
<div class="layui-input-inline" style="min-width: 200px;">
|
||||
<input type="text" value="{{.group.group_name}}" name="group_name" id="group_name" lay-verify="required" autocomplete="off" placeholder="任务分组" class="layui-input" >
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分组说明</label>
|
||||
<div class="layui-input-inline" style="min-width: 400px;">
|
||||
<textarea name="description" id="description" placeholder="请输入内容" class="layui-textarea">{{.group.description}}</textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<input type="hidden" id="id" name="id" value="{{.group.id}}">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!--content-list-->
|
||||
<div class="content-list">
|
||||
<form action="{{urlfor "GroupController.Edit"}}" method="post" class="form-horizontal">
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="group_name">分类名称</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="group_name" value="{{.group.GroupName}}" required />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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">{{.group.Description}}</textarea>
|
||||
</div>
|
||||
<div class="col-sm-4" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<input type="hidden" name="id" value="{{.group.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>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function () {
|
||||
$("form").submit(function () {
|
||||
$("button[type='submit']").attr('disabled', true);
|
||||
$.post('{{urlfor "GroupController.Edit"}}', $(this).serialize(), function (out) {
|
||||
if (out.status == 0) {
|
||||
window.location.href = '{{urlfor "GroupController.List"}}';
|
||||
} else {
|
||||
alert_message(out.msg,"alert-danger","alert-success");
|
||||
$("button[type='submit']").attr('disabled', false);
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "GroupController.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>
|
||||
@@ -1,113 +1,105 @@
|
||||
<!-- 分组列表 -->
|
||||
<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 class="layui-layout layui-layout-admin" style="padding-left: 20px;">
|
||||
<div class="layui-row" style="margin-top: 20px;">
|
||||
<div class="layui-col-xs6">
|
||||
<a class="layui-btn" data-type="tabAdd" href="/group/add">新增</a>
|
||||
</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 "GroupController.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('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="groupName" id="groupName" autocomplete="off" placeholder="分组名称" >
|
||||
</div>
|
||||
<button class="layui-btn" data-type="reload">查询</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class=" btn-large pull-right" >
|
||||
|
||||
</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 width="25%">操作</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range $k,$v := .list}}
|
||||
<tr>
|
||||
<td class="chk"><input type="checkbox" name="ids" value="{{$v.Id}}" /></td>
|
||||
<td class="center">{{$v.Id}}</td>
|
||||
<td>{{$v.GroupName}}</td>
|
||||
<td>{{$v.Description}}</td>
|
||||
|
||||
<td>
|
||||
|
||||
<a class="btn btn-info btn-xs" href="{{urlfor "GroupController.Edit"}}?id={{$v.Id}}">
|
||||
<span class="glyphicon glyphicon-file" aria-hidden="true"></span> 编辑
|
||||
</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>
|
||||
<table class="layui-hide" id="table_list" lay-filter="table_filter">
|
||||
</table>
|
||||
|
||||
<script type="text/html" id="bar">
|
||||
<!-- <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a> -->
|
||||
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
|
||||
|
||||
</script>
|
||||
</div>
|
||||
<script>
|
||||
function batch(action) {
|
||||
if ($("input[name='ids']:checked").size() < 1) {
|
||||
alert_message("请选择要操作的任务","alert-danger","alert-success");
|
||||
} else {
|
||||
if(action=='delete'){
|
||||
if(!confirm("确定要删除所选吗?")) return;
|
||||
}
|
||||
var url = "{{urlfor "GroupController.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();
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//点击行换色
|
||||
$('tbody tr').click(function(){
|
||||
$(this).addClass("warning").siblings().removeClass("warning");
|
||||
});
|
||||
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: '/group/table'
|
||||
,cols: [[
|
||||
// {checkbox: true, fixed: true},
|
||||
{field:'id', title: 'ID', align:'center',sort: true, width:150}
|
||||
,{field:'group_name',title: '分组名称'}
|
||||
,{field:'description', title: '分组说明'}
|
||||
,{field:'create_time', title: '创建时间'}
|
||||
,{field:'update_time', title: '更新时间'}
|
||||
,{fixed: 'right', width:160, align:'center', toolbar: '#bar'}
|
||||
]]
|
||||
,id: 'listReload'
|
||||
,page: true
|
||||
,height: "full-130"
|
||||
});
|
||||
|
||||
var $ = layui.$, active = {
|
||||
reload: function(){
|
||||
table.reload('listReload', {
|
||||
where: {
|
||||
groupName: $('#groupName').val(),
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
//监听工具条
|
||||
table.on('tool(table_filter)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'edit'){
|
||||
window.location.href="/group/edit?id="+data.id
|
||||
} else if(obj.event === 'del'){
|
||||
|
||||
layer.confirm('真的删除【'+data.group_name+'】分组么', function(index){
|
||||
var jsData = {'id':data.id}
|
||||
$.post('{{urlfor "GroupController.AjaxDel"}}', jsData, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.alert('删除成功了', {icon: 1},function(index){
|
||||
layer.close(index);
|
||||
window.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
return
|
||||
}
|
||||
}, "json");
|
||||
// obj.del();
|
||||
layer.close(index);
|
||||
})
|
||||
|
||||
}else{
|
||||
layer.msg('操作不存在');
|
||||
}
|
||||
});
|
||||
|
||||
$('.demoTable .layui-btn').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@@ -1,86 +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 class="clearfix"></div>
|
||||
</div>
|
||||
<!--content-list-->
|
||||
<div class="content-list">
|
||||
<div class="widget-content">
|
||||
<h4>Cron表达式说明</h4>
|
||||
<hr />
|
||||
<p>
|
||||
Cron表达式是一个字符串,字符串以空格隔开,分为5或6个域,每一个域代表一个含义,系统支持的表达式格式如下:<br />
|
||||
<pre>Seconds Minutes Hours DayofMonth Month [DayofWeek]</pre>
|
||||
其中 DayofWeek 为可选域。
|
||||
</p>
|
||||
<p>
|
||||
每一个域可出现的字符如下:
|
||||
<ul>
|
||||
<li><b>Seconds:</b> 可出现"* / , -"四个字符,有效范围为0-59的整数</li>
|
||||
<li><b>Minutes:</b> 可出现"* / , -"四个字符,有效范围为0-59的整数 </li>
|
||||
<li><b>Hours:</b> 可出现"* / , -"四个字符,有效范围为0-23的整数 </li>
|
||||
<li><b>DayofMonth:</b> 可出现"* / , - ?"五个字符,有效范围为0-31的整数</li>
|
||||
<li><b>Month:</b> 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEC</li>
|
||||
<li><b>DayofWeek:</b> 可出现"* / , - ?"五个字符,有效范围为0-6的整数或SUN-SAT两个范围。0表示星期天,1表示星期一, 依次类推 </li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>
|
||||
各个字符的含义如下:
|
||||
<ul>
|
||||
<li>* 表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。</li>
|
||||
<li>? 字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值,当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”。</li>
|
||||
<li>- 表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次。</li>
|
||||
<li>/ 表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次。</li>
|
||||
<li>, 表示列出枚举值值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>
|
||||
一些例子:
|
||||
<pre>
|
||||
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点触发
|
||||
|
||||
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时触发
|
||||
|
||||
0 0 12 ? * WED 表示每个星期三中午12点触发
|
||||
|
||||
0 0 12 * * ? 每天中午12点触发
|
||||
|
||||
0 15 10 ? * * 每天上午10:15触发
|
||||
|
||||
0 15 10 * * ? 每天上午10:15触发
|
||||
|
||||
0 15 10 * * ? * 每天上午10:15触发
|
||||
|
||||
0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
|
||||
|
||||
0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
|
||||
|
||||
0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
|
||||
|
||||
0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
|
||||
|
||||
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
|
||||
|
||||
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
|
||||
|
||||
0 15 10 15 * ? 每月15日上午10:15触发
|
||||
|
||||
0 15 10 L * ? 每月最后一日的上午10:15触发
|
||||
</pre>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
173
views/home/start.html
Normal file
173
views/home/start.html
Normal file
@@ -0,0 +1,173 @@
|
||||
<div class="layui-row ml20" >
|
||||
<style>
|
||||
.info-box {
|
||||
height: 85px;
|
||||
background-color: white;
|
||||
background-color: #ecf0f5;
|
||||
}
|
||||
|
||||
|
||||
.info-box .info-box-icon {
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 2px;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 85px;
|
||||
width: 85px;
|
||||
text-align: center;
|
||||
font-size: 45px;
|
||||
line-height: 85px;
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.info-box .info-box-content {
|
||||
padding: 5px 10px;
|
||||
margin-left: 85px;
|
||||
}
|
||||
|
||||
.info-box-content .info-box-text{
|
||||
font-size: 18px;
|
||||
width: 100%;
|
||||
display: block;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
margin: 10px auto;
|
||||
}
|
||||
|
||||
.info-box-content .info-box-number{
|
||||
font-size: 24px;
|
||||
width: 100%;
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space15">
|
||||
<div class="layui-col-md3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon" style="background-color:#00a65a !important;color:white;"><i class="fa fa-check" aria-hidden="true"></i></span>
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">最近执行成功</span>
|
||||
<span class="info-box-number">{{.okJob}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon" style="background-color:#dd4b39 !important;color:white;"><i class="fa fa-exclamation" aria-hidden="true"></i></span>
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">最近执行失败</span>
|
||||
<span class="info-box-number">{{.failJob}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon" style="background-color:#f39c12 !important;color:white;"><i class="fa fa-hourglass" aria-hidden="true"></i></span>
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">即将执行的任务</span>
|
||||
<span class="info-box-number">{{.startJob}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon" style="background-color:#00c0ef !important;color:white;"><i class="fa fa-database" aria-hidden="true"></i></span>
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">定时任务总数量</span>
|
||||
<span class="info-box-number">{{.totalJob}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md6">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">最近执行的任务</div>
|
||||
<div class="layui-card-body" style="height: 300px; padding-bottom: 10px; overflow: auto">
|
||||
<table class="layui-table" lay-size="sm">
|
||||
<colgroup>
|
||||
<col width="50">
|
||||
<col >
|
||||
<col >
|
||||
<col>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>任务名称</th>
|
||||
<th>开始时间</th>
|
||||
<th>执行结果</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
{{range $k, $v := .recentLogs}}
|
||||
<tr>
|
||||
<td>{{$k}}</td>
|
||||
<td><a href="{{urlfor "TaskLogController.Detail" "id" $v.id}}" class="news-item-title">
|
||||
{{$v.task_name}} # {{$v.id}}
|
||||
</a></td>
|
||||
<td>{{$v.start_time}}</td>
|
||||
<td>{{if eq $v.status 0}}
|
||||
正常
|
||||
{{else if eq $v.status -1}}
|
||||
<span style="color:red">异常</span>
|
||||
{{else}}
|
||||
<span style="color:red">超时</span>
|
||||
{{end}}</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr>
|
||||
<td colspan="3">暂无信息</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md6">
|
||||
<div class="layui-card" style="background: #fff">
|
||||
<div class="layui-card-header">即将执行的任务</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table" lay-size="sm">
|
||||
<colgroup>
|
||||
<col>
|
||||
<col>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>任务名称</th>
|
||||
<th>执行时间</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
{{range $k, $v := .jobs}}
|
||||
<tr>
|
||||
<td><a href="{{urlfor "TaskController.Logs" "id" $v.task_id}}" class="news-item-title">{{$v.task_name}}-{{$v.task_group}} # {{$v.task_id}}</a></td>
|
||||
<td>{{$v.next_time}}</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr>
|
||||
<td colspan="2">暂无信息</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
File diff suppressed because one or more lines are too long
70
views/login/login.html
Normal file
70
views/login/login.html
Normal file
@@ -0,0 +1,70 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
||||
<link rel="shortcut icon" href="/static/img/favicon.ico">
|
||||
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<title>{{.siteName}} 登录</title>
|
||||
<link rel="stylesheet" href="/static/layui/css/layui.css?t=1504439386550" media="all">
|
||||
<link rel="stylesheet" href="/static/login/css/login.css?t=1504439386551" media="all">
|
||||
</head>
|
||||
<!--登录超时,跳出框架显示登录页 start-->
|
||||
<script>
|
||||
if(self.location !== top.location){
|
||||
top.location = self.location;
|
||||
}
|
||||
</script>
|
||||
<!--登录超时,跳出框架显示登录页 end-->
|
||||
<body>
|
||||
<div class="layui-carousel video_mask bg-img" id="login_carousel" >
|
||||
|
||||
<div class="login layui-anim layui-anim-up">
|
||||
<h1>PPGo_Job管理后台</h1></p>
|
||||
<form class="layui-form" action="javascript:void(0);" name="form" method="post">
|
||||
<div class="layui-form-item">
|
||||
<input type="text" name="username" lay-verify="required" placeholder="请输入账号" autocomplete="off" value="{{.username}}" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<input type="password" name="password" lay-verify="required" placeholder="请输入密码" autocomplete="off" value="" class="layui-input">
|
||||
</div>
|
||||
<button class="layui-btn login_btn" lay-submit="" lay-filter="login">登陆系统</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/static/layui/layui.js?t=1504439386550" charset="utf-8"></script>
|
||||
<!-- <script src="https://cdn.bootcss.com/jquery/1.8.3/jquery.js"></script>-->
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
layui.use(['layer','form'], function(){
|
||||
var $ = layui.$;
|
||||
var form = layui.form;
|
||||
var error_info = "{{.flash.error}}";
|
||||
if(error_info){
|
||||
layer.msg(error_info,{icon: 2,shade:0.3},function () {
|
||||
window.history.go(-1)
|
||||
})
|
||||
return;
|
||||
}
|
||||
form.on('submit(login)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "LoginController.LoginIn"}}', form_data, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.msg("操作成功",{icon: 1},function () {
|
||||
window.location.href="/home"
|
||||
})
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
@@ -1,141 +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 class="clearfix"></div>
|
||||
</div>
|
||||
<!--content-list-->
|
||||
<div class="content-list">
|
||||
<div class="row" style="height: 120px">
|
||||
<div class="col-md-3">
|
||||
<div class="content" style="height: 110px;">
|
||||
<div class="w30 left-icon pull-left">
|
||||
<span class="glyphicon glyphicon-ok green"></span>
|
||||
</div>
|
||||
<div class="w70 right-title pull-right">
|
||||
<div class="title-content">
|
||||
<p>最近执行成功</p>
|
||||
<h3 class="number">{{.okJob}}</h3>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="content" style="height: 110px;">
|
||||
<div class="w30 left-icon pull-left">
|
||||
<span class="glyphicon glyphicon-remove" style="background:#d9534f"></span>
|
||||
</div>
|
||||
<div class="w70 right-title pull-right">
|
||||
<div class="title-content">
|
||||
<p>最近执行失败</p>
|
||||
<h3 class="number">{{.failJob}}</h3>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="content" style="height: 110px;">
|
||||
<div class="w30 left-icon pull-left">
|
||||
<span class="glyphicon glyphicon-hourglass orange"></span>
|
||||
</div>
|
||||
<div class="w70 right-title pull-right">
|
||||
<div class="title-content">
|
||||
<p>即将执行的任务</p>
|
||||
<h3 class="number">{{.startJob}}</h3>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="content" style="height: 110px;">
|
||||
<div class="w30 left-icon pull-left">
|
||||
<span class="glyphicon glyphicon-stats violet"></span>
|
||||
</div>
|
||||
<div class="w70 right-title pull-right">
|
||||
<div class="title-content">
|
||||
<p>定时任务总数量</p>
|
||||
<h3 class="number">{{.totalJob}}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--信息列表-->
|
||||
<div class="row newslist" style="margin-top:20px;">
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
最近执行的任务
|
||||
<a href="/" class="pull-right">
|
||||
<span class="glyphicon glyphicon-refresh"></span>
|
||||
</a>
|
||||
</div>
|
||||
{{range $k, $v := .recentLogs}}
|
||||
<div class="panel-body">
|
||||
<div class="w45 pull-left">
|
||||
<a href="{{urlfor "TaskController.ViewLog" "id" $v.id}}" class="news-item-title">
|
||||
{{$v.task_name}} # {{$v.id}}
|
||||
</a>
|
||||
</div>
|
||||
<div class="w45 pull-left">{{$v.start_time}} </div>
|
||||
<div class="w10 pull-left">
|
||||
{{if eq $v.status 0}}
|
||||
正常
|
||||
{{else if eq $v.status -1}}
|
||||
<span style="color:red">异常</span>
|
||||
{{else}}
|
||||
<span style="color:red">超时</span>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="panel-body">
|
||||
<div style="width: 100%">暂无信息</div>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
即将执行的任务
|
||||
<a href="/" class="pull-right"><span class="glyphicon glyphicon-refresh"></span></a>
|
||||
</div>
|
||||
|
||||
{{range $k, $v := .jobs}}
|
||||
<div class="panel-body">
|
||||
<div class="w50 pull-left">
|
||||
<a href="{{urlfor "TaskController.Logs" "id" $v.task_id}}" class="news-item-title">{{$v.task_name}}-{{$v.task_group}} # {{$v.task_id}}</a>
|
||||
</div>
|
||||
<div class="w50 pull-left">{{$v.next_time}}</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="panel-body">
|
||||
<div style="width: 100%">暂无信息</div>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,90 +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">
|
||||
<form action="{{urlfor "MainController.Profile"}}" method="post" class="form-horizontal">
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="user_name">用户名</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="user_name" value="{{.user.UserName}}" disabled="" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="email">Email</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="email" value="{{.user.Email}}" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="password1">新密码</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="password1" value="" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
<i>不修改密码请留空</i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="password2">确认密码</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="password2" 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>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
$("form").submit(function () {
|
||||
// console.log($(this).serialize());
|
||||
//$("button[type='submit']").attr('disabled', true);
|
||||
$.post('{{urlfor "MainController.Profile"}}', $(this).serialize(), function (out) {
|
||||
if (out.status == 0) {
|
||||
alert("保存成功");
|
||||
window.location.href = '{{urlfor "MainController.Index"}}';
|
||||
} else {
|
||||
alert_message(out.msg,"alert-danger","alert-success");
|
||||
$("button[type='submit']").attr('disabled', false);
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -1,349 +1,46 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
|
||||
<title>定时任务管理后台</title>
|
||||
<link href="/static/bootstrap/css/bootstrap.min.css" title="" rel="stylesheet" />
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>{{.siteName}}</title>
|
||||
{{if .zTree}}
|
||||
<link rel="stylesheet" href="/static/zTree3/css/demo.css?t=5" type="text/css">
|
||||
<link rel="stylesheet" href="/static/zTree3/css/zTreeStyle/zTreeStyle.css" type="text/css">
|
||||
{{end}}
|
||||
<link rel="stylesheet" href="/static/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="/static/admin/css/app.css?t=2">
|
||||
<link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css" media="all">
|
||||
</head>
|
||||
<body>
|
||||
<!-- 公共头部 start-->
|
||||
<div class="nav-title">
|
||||
<div class="tl fl">
|
||||
<a onclick="javascript:history.go(-1);" style="font-size: 14px;"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
|
||||
{{.pageTitle}}
|
||||
</div>
|
||||
<div class="tr fr">
|
||||
<button class="layui-btn layui-btn-radius layui-btn-primary layui-btn-xs" onclick="javascript:history.go(-1);"><i class="fa fa-arrow-left" aria-hidden="true"></i></button>
|
||||
<button class="layui-btn layui-btn-radius layui-btn-primary layui-btn-xs" onclick="javascript:window.location.reload();"><i class="fa fa-refresh" aria-hidden="true"></i></button>
|
||||
|
||||
<link title="" href="/static/css/style.css" rel="stylesheet" type="text/css" />
|
||||
<link title="blue" href="/static/css/dermadefault.css" rel="stylesheet" type="text/css"/>
|
||||
<link title="green" href="/static/css/dermagreen.css" rel="stylesheet" type="text/css" disabled="disabled"/>
|
||||
<link title="orange" href="/static/css/dermaorange.css" rel="stylesheet" type="text/css" disabled="disabled"/>
|
||||
|
||||
<link href="/static/css/templatecss.css" rel="stylesheet" title="" type="text/css" />
|
||||
<script src="/static/js/jquery-1.11.1.min.js" type="text/javascript"></script>
|
||||
<script src="/static/js/jquery.cookie.js" type="text/javascript"></script>
|
||||
<script src="/static/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="nav navbar-default navbar-mystyle navbar-fixed-top">
|
||||
<div class="navbar-header">
|
||||
<button class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand mystyle-brand">
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="li-border">
|
||||
<a class="mystyle-color" href="#" style="font-size: 20px">定时任务管理后台 <span style="font-size: 12px">V1.2</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav pull-right">
|
||||
<li class="li-border">
|
||||
|
||||
<a class="mystyle-color" href="#" id="server-time" style="font-size: 10px"></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav pull-right">
|
||||
<li class="li-border">
|
||||
<a href="#" class="mystyle-color">
|
||||
<span class="glyphicon glyphicon-bell"></span>
|
||||
<span class="topbar-num">0</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="dropdown li-border">
|
||||
<a href="#" class="dropdown-toggle mystyle-color" data-toggle="dropdown">
|
||||
帮助文档<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="/help">帮助文档</a></li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown li-border">
|
||||
<a href="#" class="dropdown-toggle mystyle-color" data-toggle="dropdown">
|
||||
{{.loginUserName}}<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="/logout">退出</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle mystyle-color" data-toggle="dropdown">
|
||||
换肤<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu changecolor">
|
||||
<li id="blue"><a href="#">蓝色</a></li>
|
||||
<li class="divider"></li>
|
||||
<li id="green"><a href="#">绿色</a></li>
|
||||
<li class="divider"></li>
|
||||
<li id="orange"><a href="#">橙色</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 公共头部 end-->
|
||||
<script src="/static/layui/layui.js"></script>
|
||||
{{.LayoutContent}}
|
||||
|
||||
|
||||
<div class="down-main">
|
||||
<div class="left-main left-full">
|
||||
<div class="sidebar-fold">
|
||||
<span class="glyphicon glyphicon-menu-hamburger"></span>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
<div class="subNavBox">
|
||||
<div class="sBox">
|
||||
<ul class="navContent" >
|
||||
<li {{if eq .curRoute "main.index"}}class="active"{{end}} id="home_page">
|
||||
<a href="/">
|
||||
<span class="sublist-icon glyphicon glyphicon-home"></span><span class="sub-title">系统首页</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="subNavBox">
|
||||
<div class="sBox">
|
||||
<div class="subNav sublist-down">
|
||||
<span class="title-icon glyphicon glyphicon-chevron-down"></span>
|
||||
<span class="sublist-title">任务管理</span>
|
||||
</div>
|
||||
<ul class="navContent" style="display:block">
|
||||
|
||||
<li {{if eq .menuTag "task"}}class="active"{{end}}>
|
||||
<div class="showtitle" style="width:100px;">
|
||||
任务列表
|
||||
</div>
|
||||
<a href="/task/list">
|
||||
<span class="sublist-icon glyphicon glyphicon-th-list"></span>
|
||||
<span class="sub-title">任务列表</span>
|
||||
</a>
|
||||
</li>
|
||||
layui.use(['table','form','element'], function(){
|
||||
var table = layui.table;
|
||||
var form = layui.form;
|
||||
var element = layui.element;
|
||||
|
||||
<li {{if eq .menuTag "group"}}class="active"{{end}}>
|
||||
<div class="showtitle" style="width:100px;">
|
||||
任务分类
|
||||
</div>
|
||||
<a href="/group/list">
|
||||
<span class="sublist-icon glyphicon glyphicon-bookmark"></span>
|
||||
<span class="sub-title">任务分类</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {{if eq .curRoute "help.index"}}class="active"{{end}}>
|
||||
<div class="showtitle" style="width:100px;">
|
||||
使用帮助
|
||||
</div>
|
||||
<a href="/help">
|
||||
<span class="sublist-icon glyphicon glyphicon-question-sign"></span>
|
||||
<span class="sub-title">使用帮助</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
});
|
||||
|
||||
<div class="subNavBox">
|
||||
<div class="sBox">
|
||||
<div class="subNav sublist-down">
|
||||
<span class="title-icon glyphicon glyphicon-chevron-down"></span>
|
||||
<span class="sublist-title">资源管理</span>
|
||||
</div>
|
||||
<ul class="navContent" >
|
||||
|
||||
<li {{if eq .menuTag "server"}}class="active"{{end}}>
|
||||
<div class="showtitle" style="width:100px;">
|
||||
服务器
|
||||
</div>
|
||||
<a href="/server/list">
|
||||
<span class="sublist-icon glyphicon glyphicon-hdd"></span>
|
||||
<span class="sub-title">服务器</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="subNavBox">
|
||||
<div class="sBox">
|
||||
<div class="subNav sublist-down">
|
||||
<span class="title-icon glyphicon glyphicon-chevron-down"></span>
|
||||
<span class="sublist-title">账户管理</span>
|
||||
</div>
|
||||
<ul class="navContent" >
|
||||
|
||||
<li {{if eq .curRoute "main.profile"}}class="active"{{end}}>
|
||||
<div class="showtitle" style="width:100px;">
|
||||
资料修改
|
||||
</div>
|
||||
<a href="/profile">
|
||||
<span class="sublist-icon glyphicon glyphicon-user"></span>
|
||||
<span class="sub-title">资料修改</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="right-product view-product right-full">
|
||||
<!--message start-->
|
||||
<div class="message">
|
||||
<div class="alert alert-danger box" role="alert" style="padding: 0px; line-height: 40px">
|
||||
<div class="col-sm-1 pull-right">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-11 pull-left">
|
||||
<strong id="message">保存成功</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--message end-->
|
||||
{{.LayoutContent}}
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
function alert_message(message,addClass,removeClass)
|
||||
{
|
||||
$('.box').addClass(addClass);
|
||||
$('.box').removeClass(removeClass);
|
||||
$("#message").html(message);
|
||||
$('.message').fadeIn(1000);
|
||||
$('.message').fadeOut(5000);
|
||||
}
|
||||
$(function(){
|
||||
/*换肤*/
|
||||
$(".dropdown .changecolor li").click(function(){
|
||||
var style = $(this).attr("id");
|
||||
$("link[title!='']").attr("disabled","disabled");
|
||||
$("link[title='"+style+"']").removeAttr("disabled");
|
||||
|
||||
$.cookie('mystyle', style, { expires: 7 }); // 存储一个带7天期限的 cookie
|
||||
})
|
||||
var cookie_style = $.cookie("mystyle");
|
||||
if(cookie_style!=null){
|
||||
$("link[title!='']").attr("disabled","disabled");
|
||||
$("link[title='"+cookie_style+"']").removeAttr("disabled");
|
||||
}
|
||||
/*左侧导航栏显示隐藏功能*/
|
||||
$(".subNav").click(function(){
|
||||
/*显示*/
|
||||
if($(this).find("span:first-child").attr('class')=="title-icon glyphicon glyphicon-chevron-down")
|
||||
{
|
||||
$(this).find("span:first-child").removeClass("glyphicon-chevron-down");
|
||||
$(this).find("span:first-child").addClass("glyphicon-chevron-up");
|
||||
$(this).removeClass("sublist-down");
|
||||
$(this).addClass("sublist-up");
|
||||
}
|
||||
/*隐藏*/
|
||||
else
|
||||
{
|
||||
$(this).find("span:first-child").removeClass("glyphicon-chevron-up");
|
||||
$(this).find("span:first-child").addClass("glyphicon-chevron-down");
|
||||
$(this).removeClass("sublist-up");
|
||||
$(this).addClass("sublist-down");
|
||||
}
|
||||
// 修改数字控制速度, slideUp(500)控制卷起速度
|
||||
$(this).next(".navContent").slideToggle(300).siblings(".navContent").slideUp(300);
|
||||
})
|
||||
/*左侧导航栏缩进功能*/
|
||||
$(".left-main .sidebar-fold").click(function(){
|
||||
if($(this).parent().attr('class')=="left-main left-full")
|
||||
{
|
||||
$(this).parent().removeClass("left-full");
|
||||
$(this).parent().addClass("left-off");
|
||||
|
||||
$(this).parent().parent().find(".right-product").removeClass("right-full");
|
||||
$(this).parent().parent().find(".right-product").addClass("right-off");
|
||||
}
|
||||
else
|
||||
{
|
||||
$(this).parent().removeClass("left-off");
|
||||
$(this).parent().addClass("left-full");
|
||||
|
||||
$(this).parent().parent().find(".right-product").removeClass("right-off");
|
||||
$(this).parent().parent().find(".right-product").addClass("right-full");
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
/*左侧鼠标移入提示功能*/
|
||||
$(".sBox ul li").mouseenter(function(){
|
||||
if($(this).find("span:last-child").css("display")=="none")
|
||||
{$(this).find("div").show();}
|
||||
}).mouseleave(function(){$(this).find("div").hide();})
|
||||
});
|
||||
|
||||
/*刷新*/
|
||||
$(".refresh").on("click",function() {
|
||||
window.location.reload();
|
||||
});
|
||||
|
||||
/*返回上一页*/
|
||||
$(".reback").on("click",function() {
|
||||
window.history.go(-1);
|
||||
});
|
||||
|
||||
/*全选*/
|
||||
$("input[name=all_check]").click(function(){
|
||||
var all_status = this.checked;
|
||||
//全选
|
||||
if(all_status == true){
|
||||
$(".chk").find("input[type=checkbox]").each(function(){
|
||||
|
||||
if($(this).val()>0){
|
||||
$(this).prop("checked",true);
|
||||
}
|
||||
});
|
||||
}
|
||||
if(all_status == false){
|
||||
//反选
|
||||
$(".chk").find("input[type=checkbox]:checked").each(function(){
|
||||
if($(this).val()>0){
|
||||
$(this).prop("checked",false);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
//服务器时间
|
||||
Date.prototype.Format = function (fmt) {
|
||||
var o = {
|
||||
"M+": this.getMonth() + 1,
|
||||
"d+": this.getDate(),
|
||||
"h+": this.getHours(),
|
||||
"m+": this.getMinutes(),
|
||||
"s+": this.getSeconds(),
|
||||
"q+": Math.floor((this.getMonth() + 3) / 3),
|
||||
"S": this.getMilliseconds()
|
||||
};
|
||||
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||||
for (var k in o)
|
||||
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
||||
return fmt;
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$('.subnavbar').find ('li').each (function (i) {
|
||||
var mod = i % 3;
|
||||
if (mod === 2) {
|
||||
$(this).addClass ('subnavbar-open-right');
|
||||
}
|
||||
});
|
||||
initTime = new Date().getTime();
|
||||
$.getJSON("/gettime", function(out) {
|
||||
setTime(initTime, out.time);
|
||||
});
|
||||
});
|
||||
|
||||
function setTime(initTime,serverTime) {
|
||||
ellapsedTime = new Date().getTime()-initTime;
|
||||
$('#server-time').html('当前服务器时间: <strong>'+new Date(serverTime+ellapsedTime).Format("yyyy-MM-dd hh:mm:ss")+'</strong>');
|
||||
setTimeout('setTime('+initTime+','+serverTime+');',500);
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,93 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="login_page_html">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>登录</title>
|
||||
<link rel='shortcut icon' href="/static/img/favicon.png"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/login/style.css" />
|
||||
<link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<!--登录超时,跳出框架显示登录页 start-->
|
||||
<script>
|
||||
if(self.location !== top.location){
|
||||
top.location = self.location;
|
||||
}
|
||||
</script>
|
||||
|
||||
<style type="text/css">
|
||||
/**
|
||||
* 提示信息框
|
||||
*/
|
||||
.message{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: fixed;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
z-index: 9999;
|
||||
display: none;
|
||||
}
|
||||
.message .box{
|
||||
position: absolute;
|
||||
left: 0%;
|
||||
top: 0%;
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
</style>
|
||||
<!--登录超时,跳出框架显示登录页 end-->
|
||||
<body class="login_page">
|
||||
<div class="login_page_bg">
|
||||
<div class="login_page_panel">
|
||||
<h1 style="color: #fff;font-size: 40px;text-align:center;">定时任务管理</h1>
|
||||
<form action="/login" method="post">
|
||||
<div class="username">
|
||||
<input type="text" name="username" id="username" class="box_sizing" autofocus="autofocus" autocomplete="off" placeholder="账号" required />
|
||||
</div>
|
||||
<div class="password">
|
||||
<input type="password" name="password" id="password" class="box_sizing" placeholder="密码" required />
|
||||
</div>
|
||||
|
||||
<div class="remember" style="margin-top: 10px;color: #fff">
|
||||
<input type="checkbox" name="remember" id="remember" value="yes"> 一周内自动登录
|
||||
</div>
|
||||
|
||||
<div class="login_button">
|
||||
<button id="login_button" class="box_sizing">登 录</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--message start-->
|
||||
<div class="message">
|
||||
<div class="alert alert-danger box" role="alert">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<strong id="message">保存成功</strong>
|
||||
</div>
|
||||
</div>
|
||||
<!--message end-->
|
||||
<script src="/static/js/jquery-1.11.1.min.js"></script>
|
||||
<script src="/static/bootstrap/js/bootstrap.js"></script>
|
||||
<script type="text/javascript">
|
||||
//alert-success alert-danger
|
||||
function alert_message(message,addClass,removeClass)
|
||||
{
|
||||
$('.box').addClass(addClass);
|
||||
$('.box').removeClass(removeClass);
|
||||
$("#message").html(message);
|
||||
$('.message').fadeIn(1000);
|
||||
$('.message').fadeOut(4000);
|
||||
}
|
||||
var error_info = "{{.flash.error}}";
|
||||
if(error_info)
|
||||
{
|
||||
alert_message(error_info,"alert-danger","alert-success");
|
||||
}
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
196
views/public/main.html
Normal file
196
views/public/main.html
Normal file
@@ -0,0 +1,196 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>{{.siteName}}</title>
|
||||
<link rel="stylesheet" href="/static/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="/static/admin/css/main.css?t=10">
|
||||
<link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css" media="all">
|
||||
</head>
|
||||
<body class="layui-layout-body">
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
<div class="layui-header">
|
||||
<div class="layui-logo">{{.siteName}}{{.version}}</div>
|
||||
<!-- 头部区域(可配合layui已有的水平导航) -->
|
||||
<ul class="layui-nav layui-layout-left">
|
||||
|
||||
</ul>
|
||||
<ul class="layui-nav layui-layout-right pp-nav-item" >
|
||||
<li class="layui-nav-item"><a href="/login_out">使用手册</a></li>
|
||||
<li class="layui-nav-item pp-nav-item" >
|
||||
<a href="javascript:;">
|
||||
<img src="/static/admin/images/header.jpg" class="layui-nav-img"> {{.loginUserName}}
|
||||
</a>
|
||||
<dl class="layui-nav-child pp-nav-child">
|
||||
{{/*<dd><a href="/user/edit">资料修改</a></dd>*/}}
|
||||
<dd><a href="/login_out">华丽退出</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="layui-side layui-bg-black pp-side">
|
||||
<div class="layui-side-scroll" style="width: 100%">
|
||||
<div class="pp-side-fold"><i class="fa fa-navicon" aria-hidden="true"></i></div>
|
||||
<!-- 左侧导航区域(可配合layui已有的垂直导航) -->
|
||||
<ul class="layui-nav layui-nav-tree" lay-filter="nav-side">
|
||||
<li class="layui-nav-item layui-nav-itemed layui-this">
|
||||
<a data-url="start.html" data-icon="fa-home" data-title="系统首页" data-id="0" class="pointer">
|
||||
<i class="fa fa-home back_space1"></i><span>系统首页</span>
|
||||
</a>
|
||||
</li>
|
||||
{{range $index, $elem := .SideMenu1}}
|
||||
{{if $elem}}
|
||||
<li class="layui-nav-item">
|
||||
<a class="" href="javascript:;">
|
||||
<i class="fa {{$elem.Icon}}"></i> <span>{{$elem.AuthName}}</span>
|
||||
</a>
|
||||
<dl class="layui-nav-child pp-nav-childs">
|
||||
{{range $i, $e := $.SideMenu2}}
|
||||
{{if eq $e.Pid $elem.Id}}
|
||||
<dd>
|
||||
<a data-url="{{$e.AuthUrl}}" data-icon="" data-title="{{$e.AuthName}}" class="pointer" data-id="{{$e.Id}}">
|
||||
<i class="fa {{$e.Icon}}"></i> <span>{{$e.AuthName}}</span>
|
||||
</a>
|
||||
</dd>
|
||||
{{end}}
|
||||
{{end}}
|
||||
</dl>
|
||||
</li>
|
||||
{{end}}
|
||||
{{end}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-body" style="overflow: hidden;">
|
||||
<!-- 内容主体区域 -->
|
||||
<div class="layui-tab pp-tab" lay-filter="main_tab" lay-allowClose="true">
|
||||
<ul class="layui-tab-title" style="background: #efefef">
|
||||
<li class="pp-tab-li layui-this" id="default_tab" lay-id="0"><i class="fa fa-home back_space1"></i>系统首页</li>
|
||||
|
||||
</ul>
|
||||
<div class="layui-tab-content" style="padding: 0px; ">
|
||||
<div class="layui-tab-item layui-show" style="margin: 0px;overflow:hidden;">
|
||||
<iframe src="/home/start" frameborder="0" scrolling="yes"></iframe>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-footer" style="border-top: 2px solid #e4e4e4">
|
||||
<!-- 底部固定区域 -->
|
||||
© Power by <a href="http://www.haodaquan.com" target="_blank">PPGo_Job V2</a>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/static/layui/layui.js"></script>
|
||||
<script>
|
||||
//JavaScript代码区域
|
||||
var $;
|
||||
layui.use(['element','jquery','layer'], function(){
|
||||
var element = layui.element;
|
||||
$ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
|
||||
var width,height;
|
||||
|
||||
//frame大小适应开始
|
||||
resizeFrame();
|
||||
window.onresize = function(){
|
||||
resizeFrame();
|
||||
}
|
||||
function resizeFrame()
|
||||
{
|
||||
height = $(".layui-body").height()-40;
|
||||
width = $(".layui-body").width();
|
||||
$(".ayui-tab-content").width(width);
|
||||
$(".ayui-tab-content").height(height);
|
||||
$(".layui-tab-item").height(height);
|
||||
$(".layui-tab-item").find("iframe").height(height);
|
||||
$(".layui-tab-item").find("iframe").width(width);
|
||||
}
|
||||
//frame大小适应结束
|
||||
|
||||
//左侧菜单栏缩放
|
||||
$('.pp-side-fold').on('click',function(){
|
||||
var side_width = $(".layui-side").width();
|
||||
if (side_width>50) {
|
||||
$(".layui-side").width(50);
|
||||
$(this).parent().find('span').hide();
|
||||
$(".layui-body").addClass('pp-main');
|
||||
$(".layui-footer").addClass('pp-main');
|
||||
$(".layui-nav-child").find('dd').addClass('pp-ddsided');
|
||||
$(".layui-nav-child").find('a').addClass('pp-pointer');
|
||||
resizeFrame();
|
||||
}else{
|
||||
$(".layui-side").width(200);
|
||||
$(this).parent().find('span').show();
|
||||
$(".layui-body").removeClass('pp-main');
|
||||
$(".layui-footer").removeClass('pp-main');
|
||||
$(".layui-nav-child").find('dd').removeClass('pp-ddsided');
|
||||
$(".layui-nav-child").find('a').removeClass('pp-pointer');
|
||||
resizeFrame();
|
||||
}
|
||||
})
|
||||
|
||||
//添加标签
|
||||
element.on('nav(nav-side)', function(elem){
|
||||
var url = elem.attr('data-url');
|
||||
var title = elem.attr('data-title');
|
||||
var id = elem.attr('data-id');
|
||||
var icon = elem.attr('data-icon');
|
||||
if (!url || !title || !id) {
|
||||
return;
|
||||
}
|
||||
//判断是否存在
|
||||
var is_exist = 0;
|
||||
$(".layui-tab-title").find("li").each(function(){
|
||||
var nav_id = $(this).attr("lay-id");
|
||||
if (nav_id==id) {
|
||||
is_exist = 1
|
||||
}
|
||||
})
|
||||
|
||||
if (is_exist==1) {
|
||||
element.tabChange("main_tab", id);
|
||||
}else{
|
||||
var content = '<iframe src="'+url+'" scrolling="yes" width="'+width+'" height="'+height+'" frameborder="0"></iframe>';
|
||||
title = '<i class="fa '+icon+' back_space1"></i>'+title;
|
||||
element.tabAdd('main_tab', {
|
||||
title: title
|
||||
,content: content //支持传入html
|
||||
,id: id
|
||||
});
|
||||
|
||||
element.tabChange("main_tab", id);
|
||||
}
|
||||
});
|
||||
|
||||
//tab标签选中,菜单栏状态
|
||||
$(".layui-tab-title").on("click","li",function(){
|
||||
var id = $(this).attr('lay-id');
|
||||
if (!id) {return;}
|
||||
var sid = 0;
|
||||
$(".layui-nav-item").find("a").each(function(){
|
||||
sid = $(this).attr("data-id");
|
||||
if (sid==id) {
|
||||
$(this).click();
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
//tips
|
||||
$(".pp-nav-childs").find('a').hover(function(){
|
||||
layer.tips($(this).attr('data-title'), $(this),{time:1000});
|
||||
});
|
||||
|
||||
element.render();
|
||||
// $("#default_tab").html('<i class="fa fa-home back_space1"></i>系统首页');
|
||||
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
234
views/role/add.html
Normal file
234
views/role/add.html
Normal file
@@ -0,0 +1,234 @@
|
||||
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.core.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.excheck.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.exedit.js"></script>
|
||||
|
||||
<div class="layui-row">
|
||||
<div style="margin: 10px 20px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:新增角色
|
||||
</blockquote>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<form class="layui-form" action="" onsubmit="javascript:;" name="form" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">菜单操作</label>
|
||||
<div class="layui-input-inline mw400 zTreeDemoBackground">
|
||||
<ul id="treeDemo" class="ztree" style="height:320px; width: auto; margin-bottom: 10px;">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">资源分组</label>
|
||||
<div class="layui-input-inline mw400 ">
|
||||
<input type="checkbox" name="server_group_id" lay-filter="server_group_id" title="本地服务器组" value="0" lay-skin="primary" checked>
|
||||
{{range $k, $v := .serverGroup}}
|
||||
<input type="checkbox" name="server_group_id" lay-filter="server_group_id" title="{{$v.GroupName}}" value="{{$v.GroupId}}" lay-skin="primary">
|
||||
{{end}}
|
||||
<input type="hidden" name="server_group_ids" id="server_group_ids" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">任务分组</label>
|
||||
<div class="layui-input-inline mw400 ">
|
||||
{{range $k, $v := .taskGroup}}
|
||||
<input type="checkbox" name="task_group_id" lay-filter="task_group_id" title="{{$v}}" value="{{$k}}" lay-skin="primary">
|
||||
{{end}}
|
||||
|
||||
<input type="hidden" name="task_group_ids" id="task_group_ids" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">角色名称</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="role_name" id="role_name" lay-verify="required" autocomplete="off" placeholder="请输入角色名称" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label ">备注</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<textarea name="detail" id="detail" placeholder="请输入内容" class="layui-textarea"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="save">保存</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
var $,form;
|
||||
layui.config({
|
||||
base : "js/"
|
||||
}).use(['form','element','layer','jquery'],function(){
|
||||
form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
|
||||
$ = 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;
|
||||
}
|
||||
// layer = layui.layer
|
||||
var server_group_ids = [];
|
||||
form.on('checkbox(server_group_id)', function(data){
|
||||
if(data.elem.checked==true){
|
||||
server_group_ids.push(data.value)
|
||||
}else{
|
||||
$.each(server_group_ids,function(index,item){
|
||||
// index是索引值(即下标) item是每次遍历得到的值;
|
||||
if(item==data.value){
|
||||
server_group_ids.splice(index,1);
|
||||
}
|
||||
});
|
||||
}
|
||||
$("#server_group_ids").val(server_group_ids.join(","));
|
||||
});
|
||||
|
||||
var task_group_ids = [];
|
||||
form.on('checkbox(task_group_id)', function(data){
|
||||
if(data.elem.checked==true){
|
||||
task_group_ids.push(data.value)
|
||||
}else{
|
||||
$.each(task_group_ids,function(index,item){
|
||||
// index是索引值(即下标) item是每次遍历得到的值;
|
||||
if(item==data.value){
|
||||
task_group_ids.splice(index,1);
|
||||
}
|
||||
});
|
||||
}
|
||||
$("#task_group_ids").val(task_group_ids.join(","));
|
||||
});
|
||||
|
||||
|
||||
$("form").submit(function () {
|
||||
var role_name = $("#role_name").val();
|
||||
if(!role_name){
|
||||
layer.msg('请填写角色名称');
|
||||
return false;
|
||||
}
|
||||
var detail = $("#detail").val();
|
||||
var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
|
||||
var nodes = treeObj.getCheckedNodes(true);
|
||||
var nodes_data = nodes_select_data(nodes,{});
|
||||
|
||||
var server_group_ids = $("#server_group_ids").val();
|
||||
var task_group_ids = $("#task_group_ids").val();
|
||||
|
||||
if (!task_group_ids){
|
||||
layer.msg('请选择任务分组!');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
var data = {'role_name':role_name,'detail':detail,'nodes_data':nodes_data,'server_group_ids':server_group_ids,'task_group_ids':task_group_ids}
|
||||
$.post('{{urlfor "RoleController.AjaxSave"}}', data, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.alert('保存成功了', {icon: 1},function(index){
|
||||
window.history.go(-1)
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
form.render();
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var zNodes = [{ id:1, pId:0, name:"数据错误"}];
|
||||
// $(document).ready(function(){
|
||||
var setting = {
|
||||
check: {
|
||||
enable: true
|
||||
},
|
||||
data: {
|
||||
simpleData: {
|
||||
enable: true
|
||||
}
|
||||
}
|
||||
};
|
||||
//加载树
|
||||
refresh_tree();
|
||||
|
||||
function refresh_tree()
|
||||
{
|
||||
var time = Date.parse(new Date());
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/auth/getnodes",
|
||||
data: {time:time},
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
if(data.code==0){
|
||||
zNodes = data.data;
|
||||
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
|
||||
}
|
||||
}
|
||||
});
|
||||
setCheck();
|
||||
$("#py").bind("change", setCheck);
|
||||
$("#sy").bind("change", setCheck);
|
||||
$("#pn").bind("change", setCheck);
|
||||
$("#sn").bind("change", setCheck);
|
||||
}
|
||||
|
||||
function nodes_select_data(obj,nodes)
|
||||
{
|
||||
var nodes_str = '';
|
||||
$.each(obj,function(k,v){
|
||||
if(!v['name']) return nodes;
|
||||
node_id = v["id"]
|
||||
var i = 0;
|
||||
for (var j in nodes) { i++}
|
||||
nodes_str += v['id']+","
|
||||
});
|
||||
|
||||
return nodes_str;
|
||||
}
|
||||
|
||||
function setCheck() {
|
||||
type = { "Y" : "ps", "N" : "ps" };
|
||||
setting.check.chkboxType = type;
|
||||
}
|
||||
|
||||
function showCode(str) {
|
||||
var code = $("#code");
|
||||
code.empty();
|
||||
for (var i=0, l=str.length; i<l; i++) {
|
||||
code.append("<li>"+str[i]+"</li>");
|
||||
}
|
||||
}
|
||||
|
||||
function formSubmit() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
// });
|
||||
</script>
|
||||
250
views/role/edit.html
Normal file
250
views/role/edit.html
Normal file
@@ -0,0 +1,250 @@
|
||||
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.core.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.excheck.js"></script>
|
||||
<script type="text/javascript" src="/static/zTree3/js/jquery.ztree.exedit.js"></script>
|
||||
|
||||
<div class="layui-row">
|
||||
<div style="margin: 10px 20px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
修改角色以及角色权限
|
||||
</blockquote>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="layui-col-md7">
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<form class="layui-form" action="" onsubmit="javascript:;" name="form" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">菜单操作</label>
|
||||
<div class="layui-input-inline mw400 zTreeDemoBackground">
|
||||
<ul id="treeDemo" class="ztree" style="height:320px; width: auto; margin-bottom: 10px;">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">资源分组</label>
|
||||
<div class="layui-input-inline mw400 ">
|
||||
<input type="checkbox" name="server_group_id" lay-filter="server_group_id" title="本地服务器组" value="0" lay-skin="primary" checked>
|
||||
{{range $k, $v := .serverGroup}}
|
||||
<input type="checkbox" name="server_group_id" lay-filter="server_group_id" title="{{$v.GroupName}}" value="{{$v.GroupId}}" {{range $ks,$vs:=$.server_group_ids}} {{if eq $v.GroupId $vs}}checked{{end}}{{end}} lay-skin="primary">
|
||||
{{end}}
|
||||
<input type="hidden" name="server_group_ids" id="server_group_ids" value="{{.role.server_group_ids}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">任务分组</label>
|
||||
<div class="layui-input-inline mw400 ">
|
||||
{{range $k, $v := .taskGroup}}
|
||||
<input type="checkbox" name="task_group_id" lay-filter="task_group_id" title="{{$v}}" value="{{$k}}" {{range $ks,$vs:=$.task_group_ids}} {{if eq $k $vs}}checked{{end}}{{end}} lay-skin="primary">
|
||||
{{end}}
|
||||
|
||||
<input type="hidden" name="task_group_ids" id="task_group_ids" value="{{.role.task_group_ids}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">角色名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="role_name" id="role_name" lay-verify="required" autocomplete="off" placeholder="请输入角色名称" class="layui-input" value="{{.role.role_name}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label">备注</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="detail" id="detail" placeholder="请输入内容" class="layui-textarea">{{.role.detail}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" value="{{.role.id}}" name="id" id="id">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="save">保存</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
var $,form;
|
||||
layui.config({
|
||||
base : "js/"
|
||||
}).use(['form','element','layer','jquery'],function(){
|
||||
form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
|
||||
$ = 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;
|
||||
}
|
||||
var server_group_ids_str = $("#server_group_ids").val();
|
||||
var server_group_ids = server_group_ids_str.split(",");
|
||||
form.on('checkbox(server_group_id)', function(data){
|
||||
if(data.elem.checked==true){
|
||||
server_group_ids.push(data.value)
|
||||
}else{
|
||||
$.each(server_group_ids,function(index,item){
|
||||
// index是索引值(即下标) item是每次遍历得到的值;
|
||||
if(item==data.value){
|
||||
server_group_ids.splice(index,1);
|
||||
}
|
||||
});
|
||||
}
|
||||
$("#server_group_ids").val(server_group_ids.join(","));
|
||||
});
|
||||
|
||||
var task_group_ids_str = $("#task_group_ids").val();
|
||||
var task_group_ids = task_group_ids_str.split(",");
|
||||
|
||||
form.on('checkbox(task_group_id)', function(data){
|
||||
if(data.elem.checked==true){
|
||||
task_group_ids.push(data.value)
|
||||
}else{
|
||||
$.each(task_group_ids,function(index,item){
|
||||
// index是索引值(即下标) item是每次遍历得到的值;
|
||||
if(item==data.value){
|
||||
task_group_ids.splice(index,1);
|
||||
}
|
||||
});
|
||||
}
|
||||
$("#task_group_ids").val(task_group_ids.join(","));
|
||||
});
|
||||
$("form").submit(function () {
|
||||
var role_name = $("#role_name").val();
|
||||
if(!role_name){
|
||||
layer.msg('请填写角色名称');
|
||||
return false;
|
||||
}
|
||||
var id = $("#id").val()
|
||||
var detail = $("#detail").val();
|
||||
var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
|
||||
var nodes = treeObj.getCheckedNodes(true);
|
||||
var nodes_data = nodes_select_data(nodes,{});
|
||||
|
||||
var server_group_ids = $("#server_group_ids").val();
|
||||
var task_group_ids = $("#task_group_ids").val();
|
||||
|
||||
if (!task_group_ids){
|
||||
layer.msg('请选择任务分组!');
|
||||
return false;
|
||||
}
|
||||
|
||||
var data = {'role_name':role_name,'id':id,'detail':detail,'nodes_data':nodes_data,'server_group_ids':server_group_ids,'task_group_ids':task_group_ids}
|
||||
$.post('{{urlfor "RoleController.AjaxSave"}}', data, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.alert('保存成功了', {icon: 1},function(index){
|
||||
layer.close(index);
|
||||
window.location.href="/role/list"
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
form.render();
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var zNodes = [{ id:1, pId:0, name:"数据错误"}];
|
||||
var checked = {{.auth}}
|
||||
// console.log(checked)
|
||||
// $(document).ready(function(){
|
||||
var setting = {
|
||||
check: {
|
||||
enable: true
|
||||
},
|
||||
data: {
|
||||
simpleData: {
|
||||
enable: true
|
||||
}
|
||||
}
|
||||
};
|
||||
//加载树
|
||||
refresh_tree();
|
||||
|
||||
function refresh_tree()
|
||||
{
|
||||
var time = Date.parse(new Date());
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/auth/getnodes",
|
||||
data: {time:time},
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
if(data.code==0){
|
||||
zNodes = init_checked(data.data);
|
||||
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
|
||||
}
|
||||
}
|
||||
});
|
||||
setCheck();
|
||||
$("#py").bind("change", setCheck);
|
||||
$("#sy").bind("change", setCheck);
|
||||
$("#pn").bind("change", setCheck);
|
||||
$("#sn").bind("change", setCheck);
|
||||
}
|
||||
|
||||
function init_checked(zNodes) {
|
||||
$.each(zNodes,function(k,v){
|
||||
if($.inArray(v.id,checked)>=0){
|
||||
v.checked = true;
|
||||
}
|
||||
|
||||
});
|
||||
return zNodes;
|
||||
}
|
||||
|
||||
function nodes_select_data(obj,nodes)
|
||||
{
|
||||
var nodes_str = '';
|
||||
$.each(obj,function(k,v){
|
||||
if(!v['name']) return nodes;
|
||||
node_id = v["id"]
|
||||
var i = 0;
|
||||
for (var j in nodes) { i++}
|
||||
nodes_str += v['id']+","
|
||||
});
|
||||
|
||||
return nodes_str;
|
||||
}
|
||||
|
||||
function setCheck() {
|
||||
type = { "Y" : "ps", "N" : "ps" };
|
||||
setting.check.chkboxType = type;
|
||||
}
|
||||
|
||||
function showCode(str) {
|
||||
var code = $("#code");
|
||||
code.empty();
|
||||
for (var i=0, l=str.length; i<l; i++) {
|
||||
code.append("<li>"+str[i]+"</li>");
|
||||
}
|
||||
}
|
||||
|
||||
function formSubmit() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
// });
|
||||
</script>
|
||||
95
views/role/list.html
Normal file
95
views/role/list.html
Normal file
@@ -0,0 +1,95 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 20px;">
|
||||
<div class="layui-row" style="margin-top: 20px;">
|
||||
<div class="layui-col-xs6">
|
||||
<a class="layui-btn" data-type="tabAdd" href="/role/add">新增</a>
|
||||
</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="roleName" id="roleName" autocomplete="off" placeholder="角色名称" >
|
||||
</div>
|
||||
<button class="layui-btn" data-type="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-xs" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</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: '/role/table'
|
||||
,cols: [[
|
||||
// {checkbox: true, fixed: true},
|
||||
{field:'id', title: 'ID', align:'center',sort: true, width:150}
|
||||
,{field:'role_name',title: '角色名称'}
|
||||
,{field:'detail', title: '备注'}
|
||||
,{fixed: 'right', width:160, align:'center', toolbar: '#bar'}
|
||||
]]
|
||||
,id: 'listReload'
|
||||
,page: true
|
||||
,height: "full-130"
|
||||
});
|
||||
|
||||
var $ = layui.$, active = {
|
||||
reload: function(){
|
||||
table.reload('listReload', {
|
||||
where: {
|
||||
roleName: $('#roleName').val(),
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
$('.demoTable .layui-btn').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
//监听工具条
|
||||
table.on('tool(table_filter)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'detail'){
|
||||
//layer.msg('ID:'+ data.id + ' 的查看操作');
|
||||
} else if(obj.event === 'del'){
|
||||
layer.confirm('真的删除【'+data.role_name+'】角色么', function(index){
|
||||
var jsData = {'id':data.id}
|
||||
$.post('{{urlfor "RoleController.AjaxDel"}}', jsData, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.alert('删除成功了', {icon: 1},function(index){
|
||||
layer.close(index);
|
||||
window.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
obj.del();
|
||||
layer.close(index);
|
||||
});
|
||||
} else if(obj.event === 'edit'){
|
||||
window.location.href="/role/edit?id="+data.id
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@@ -1,158 +1,174 @@
|
||||
<!-- 新增服务器 -->
|
||||
<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 class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<div style="margin: 10px 0px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:提交之前请先测试服务器资源是否可以连通
|
||||
</blockquote>
|
||||
</div>
|
||||
<form class="layui-form" action="" method="post" >
|
||||
|
||||
|
||||
<!--content-list-->
|
||||
<div class="content-list">
|
||||
<form action="{{urlfor "ServerController.Add"}}" method="post" class="form-horizontal">
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="server_name">服务器名</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="server_name" value="" required />
|
||||
<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 := .serverGroup}}
|
||||
<option value="{{$k}}">{{$v}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
<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 mw400">
|
||||
<input type="text" name="server_name" id="server_name" lay-verify="required" autocomplete="off" placeholder="服务器名称" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="server_account">登录账户</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="root" name="server_account" value="" required />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="server_ip">服务器IP</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="server_ip" value="" required />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mw200">登录账号</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="server_account" id="server_account" lay-verify="required" autocomplete="off" placeholder="root" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="port">服务器ssh端口</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="22" name="port" value="" required />
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mw200">IP地址</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="server_ip" id="server_ip" lay-verify="required" autocomplete="off" placeholder="192.168.1.12" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="display: none">
|
||||
<label class="layui-form-label mw200">外网IP</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="server_outer_ip" id="server_outer_ip" lay-verify="required" autocomplete="off" placeholder="200.200.200.12" 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 mw400">
|
||||
<input type="text" name="port" id="port" lay-verify="required" autocomplete="off" placeholder="22" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="type">验证类型</label>
|
||||
<div class="col-sm-6" >
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="type" value="0" > 密码
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="type" value="1" checked > 密钥
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<div class="col-sm-3" style="padding-top:5px;">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mw200">验证登录类型</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="radio" name="type" lay-verify="type" value="0" title="密码" checked>
|
||||
<input type="radio" name="type" lay-verify="type" value="1" title="密钥" >
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group hide" style="margin-top: 15px" id="password">
|
||||
<label class="col-sm-3 control-label" for="password">服务器密码</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="password" value="" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
<div class="layui-form-item password">
|
||||
<label class="layui-form-label mw200">密码</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="password" id="password" lay-verify="" autocomplete="off" placeholder="服务器登录密码" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group " style="margin-top: 15px" id="private_key_src">
|
||||
<label class="col-sm-3 control-label" for="private_key_src">私钥地址</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="/Users/haodaquan/.ssh/pp_rsa" name="private_key_src" value="" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
<div class="layui-form-item key" style="display:none;">
|
||||
<label class="layui-form-label mw200">公钥地址</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="public_key_src" id="public_key_src" lay-verify="" autocomplete="off" placeholder="/Users/haodaquan/.ssh/pp_rsa.pub" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"><span id="des" style="cursor: pointer">说明</span></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group " style="margin-top: 15px" id="public_key_src">
|
||||
<label class="col-sm-3 control-label" for="public_key_src">公钥地址</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="/Users/haodaquan/.ssh/pp_rsa.pub" name="public_key_src" value="" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
<i style="font-size: 12px">公钥和私钥地址请在本地服务器生成,命令:ssh-keygen -t rsa -f pp_rsa</i>
|
||||
<div class="layui-form-item key" style="display:none;">
|
||||
<label class="layui-form-label mw200">私钥地址</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="private_key_src" id="private_key_src" lay-verify="" autocomplete="off" placeholder="/Users/haodaquan/.ssh/pp_rsa" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="detail">说明</label>
|
||||
<div class="col-sm-5" >
|
||||
<textarea name="detail" class="form-control" id="detail" rows="3"></textarea>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mw200">资源说明</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<textarea name="detail" id="detail" placeholder="请输入内容" class="layui-textarea"></textarea>
|
||||
</div>
|
||||
<div class="col-sm-4" style="padding-top:5px;">
|
||||
|
||||
</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>
|
||||
|
||||
<button class="layui-btn layui-btn-primary" id="test" lay-filter="test">测试</button>
|
||||
</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>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
$("form").submit(function () {
|
||||
// $(".alert").hide();
|
||||
$("button[type='submit']").attr('disabled', true);
|
||||
$.post('{{urlfor "ServerController.Add"}}', $(this).serialize(), function (out) {
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('radio', function(data){
|
||||
if(data.value==1){
|
||||
$(".key").show();
|
||||
$(".password").hide();
|
||||
}else{
|
||||
$(".password").show();
|
||||
$(".key").hide();
|
||||
}
|
||||
});
|
||||
|
||||
$("#des").on('click',function () {
|
||||
layer.tips('公钥和私钥地址请在本地服务器生成,命令:ssh-keygen -t rsa -f pp_rsa', '#des', {
|
||||
tips: [1, '#0FA6D8'] //还可配置颜色
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "ServerController.AjaxSave"}}', form_data, function (out) {
|
||||
if (out.status == 0) {
|
||||
window.location.href = '{{urlfor "ServerController.List"}}';
|
||||
layer.msg("操作成功",{icon: 1},function () {
|
||||
window.history.go(-1)
|
||||
})
|
||||
} else {
|
||||
alert_message(out.msg,"alert-danger","alert-success");
|
||||
$("button[type='submit']").attr('disabled', false);
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("input[name='type']").click(function () {
|
||||
if ($(this).val() > 0) {
|
||||
$("#password").addClass('hide');
|
||||
$("#public_key_src").removeClass('hide');
|
||||
$("#private_key_src").removeClass('hide');
|
||||
} else {
|
||||
$("#password").removeClass('hide');
|
||||
$("#public_key_src").addClass('hide');
|
||||
$("#private_key_src").addClass('hide');
|
||||
|
||||
}
|
||||
$("#test").on('click', function(data){
|
||||
layer.load();
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "ServerController.AjaxTestServer"}}', form_data, function (out) {
|
||||
layer.msg(out.message)
|
||||
}, "json");
|
||||
setTimeout(function(){
|
||||
layer.closeAll('loading');
|
||||
}, 2000);
|
||||
return false;
|
||||
});
|
||||
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
171
views/server/copy.html
Normal file
171
views/server/copy.html
Normal file
@@ -0,0 +1,171 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
{{/*<div style="margin: 10px 0px">*/}}
|
||||
{{/*<blockquote class="layui-elem-quote">*/}}
|
||||
{{/*说明:创建新的服务器资源*/}}
|
||||
{{/*</blockquote>*/}}
|
||||
{{/*</div>*/}}
|
||||
<form class="layui-form" action="" method="post" >
|
||||
|
||||
<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 := .serverGroup}}
|
||||
<option value="{{$k}}" {{if eq $.server.group_id $k}} 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-input-inline mw400">
|
||||
<input type="text" name="server_name" id="server_name" lay-verify="required" autocomplete="off" placeholder="服务器名称" class="layui-input" value="{{.server.server_name}}">
|
||||
</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 mw400">
|
||||
<input type="text" name="server_account" id="server_account" lay-verify="required" autocomplete="off" placeholder="root" class="layui-input" value="{{.server.server_account}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mw200">内网IP</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="server_ip" id="server_ip" lay-verify="required" autocomplete="off" placeholder="192.168.1.12" class="layui-input" value="{{.server.server_ip}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mw200">外网IP</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="server_outer_ip" id="server_outer_ip" lay-verify="required" autocomplete="off" placeholder="200.200.200.12" class="layui-input" value="{{.server.server_outer_ip}}">
|
||||
</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 mw400">
|
||||
<input type="text" name="port" id="port" lay-verify="required" autocomplete="off" placeholder="22" class="layui-input" value="{{.server.port}}">
|
||||
</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 mw400">
|
||||
<input type="radio" name="type" lay-verify="type" value="0" title="密码" {{if eq .server.type 0}}checked{{end}}>
|
||||
<input type="radio" name="type" lay-verify="type" value="1" title="密钥" {{if eq .server.type 1}}checked{{end}}>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item password" style="{{if eq .server.type 1}}display:none{{end}}">
|
||||
<label class="layui-form-label mw200">密码</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="password" id="password" lay-verify="" autocomplete="off" placeholder="服务器登录密码" class="layui-input" value="{{.server.password}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item key" style="{{if eq .server.type 0}}display:none{{end}}">
|
||||
<label class="layui-form-label mw200">公钥地址</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="public_key_src" id="public_key_src" lay-verify="" autocomplete="off" placeholder="/Users/haodaquan/.ssh/pp_rsa.pub" class="layui-input" value="{{.server.public_key_src}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"><span id="des" style="cursor: pointer">说明</span></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item key" style="{{if eq .server.type 0}}display:none{{end}}">
|
||||
<label class="layui-form-label mw200">私钥地址</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="private_key_src" id="private_key_src" lay-verify="" autocomplete="off" placeholder="/Users/haodaquan/.ssh/pp_rsa" class="layui-input" value="{{.server.private_key_src}}">
|
||||
</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 mw400">
|
||||
<textarea name="detail" id="detail" placeholder="请输入内容" class="layui-textarea">{{.server.detail}}</textarea>
|
||||
</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>
|
||||
<button class="layui-btn layui-btn-primary" id="test" lay-filter="test">测试</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('radio', function(data){
|
||||
if(data.value==1){
|
||||
$(".key").show();
|
||||
$(".password").hide();
|
||||
}else{
|
||||
$(".password").show();
|
||||
$(".key").hide();
|
||||
}
|
||||
});
|
||||
|
||||
$("#des").on('click',function () {
|
||||
layer.tips('公钥和私钥地址请在本地服务器生成,命令:ssh-keygen -t rsa -f pp_rsa', '#des', {
|
||||
tips: [1, '#0FA6D8'] //还可配置颜色
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "ServerController.AjaxSave"}}', form_data, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.msg("操作成功",{icon: 1},function () {
|
||||
window.location.href = "/server/list"
|
||||
})
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#test").on('click', function(data){
|
||||
layer.load();
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "ServerController.AjaxTestServer"}}', form_data, function (out) {
|
||||
layer.msg(out.message)
|
||||
}, "json");
|
||||
setTimeout(function(){
|
||||
layer.closeAll('loading');
|
||||
}, 2000);
|
||||
return false;
|
||||
});
|
||||
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
@@ -1,160 +1,172 @@
|
||||
<!-- 新增服务器 -->
|
||||
<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">
|
||||
<form action="{{urlfor "ServerController.Edit"}}" method="post" class="form-horizontal">
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="server_name">服务器名</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="server_name" value="{{.server.ServerName}}" required />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="server_name">登录账户</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="root" name="server_account" value="{{.server.ServerAccount}}" required />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="server_ip">服务器IP</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="server_ip" value="{{.server.ServerIp}}" required />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="port">服务器ssh端口</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="port" value="{{.server.Port}}" required />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="type">验证类型</label>
|
||||
<div class="col-sm-6" >
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="type" value="0" {{if eq .server.Type 0}}checked{{end}}> 密码
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="type" value="1" {{if eq .server.Type 1}}checked{{end}}> 密钥
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<div class="col-sm-3" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group {{if eq .server.Type 1}}hide{{end}}" style="margin-top: 15px" id="password">
|
||||
<label class="col-sm-3 control-label" for="password">服务器密码</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="/Users/haodaquan/.ssh/pp_rsa" name="password" value="{{.server.Password}}" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group {{if eq .server.Type 0}}hide{{end}}" style="margin-top: 15px" id="private_key_src">
|
||||
<label class="col-sm-3 control-label" for="private_key_src">私钥地址</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="/Users/haodaquan/.ssh/pp_rsa.pub" name="private_key_src" value="{{.server.PrivateKeySrc}}" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group {{if eq .server.Type 0}}hide{{end}}" style="margin-top: 15px" id="public_key_src">
|
||||
<label class="col-sm-3 control-label" for="public_key_src">公钥地址</label>
|
||||
<div class="col-sm-3" >
|
||||
<input type="text" class="form-control input-sm" placeholder="" name="public_key_src" value="{{.server.PublicKeySrc}}" />
|
||||
</div>
|
||||
<div class="col-sm-6" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" style="margin-top: 15px">
|
||||
<label class="col-sm-3 control-label" for="detail">说明</label>
|
||||
<div class="col-sm-5" >
|
||||
<textarea name="detail" class="form-control" id="detail" rows="3">{{.server.Detail}}</textarea>
|
||||
</div>
|
||||
<div class="col-sm-4" style="padding-top:5px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<br />
|
||||
<div class="modal-footer" style="text-align:center">
|
||||
<input type="hidden" name="id" value="{{.server.Id}}" />
|
||||
<button type="submit" class="btn btn-primary submit_attr_button">保存</button>
|
||||
<button type="button" class="btn btn-default reback">返回</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<div style="margin: 10px 0px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:创建新的服务器资源之前,请先测试服务器是否可以连通
|
||||
</blockquote>
|
||||
</div>
|
||||
<form class="layui-form" action="" method="post" >
|
||||
|
||||
<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 := .serverGroup}}
|
||||
<option value="{{$k}}" {{if eq $.server.group_id $k}} 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-input-inline mw400">
|
||||
<input type="text" name="server_name" id="server_name" lay-verify="required" autocomplete="off" placeholder="服务器名称" class="layui-input" value="{{.server.server_name}}">
|
||||
</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 mw400">
|
||||
<input type="text" name="server_account" id="server_account" lay-verify="required" autocomplete="off" placeholder="root" class="layui-input" value="{{.server.server_account}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mw200">IP地址</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="server_ip" id="server_ip" lay-verify="required" autocomplete="off" placeholder="192.168.1.12" class="layui-input" value="{{.server.server_ip}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item" style="display: none">
|
||||
<label class="layui-form-label mw200">外网IP</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="server_outer_ip" id="server_outer_ip" lay-verify="required" autocomplete="off" placeholder="200.200.200.12" class="layui-input" value="{{.server.server_outer_ip}}">
|
||||
</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 mw400">
|
||||
<input type="text" name="port" id="port" lay-verify="required" autocomplete="off" placeholder="22" class="layui-input" value="{{.server.port}}">
|
||||
</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 mw400">
|
||||
<input type="radio" name="type" lay-verify="type" value="0" title="密码" {{if eq .server.type 0}}checked{{end}}>
|
||||
<input type="radio" name="type" lay-verify="type" value="1" title="密钥" {{if eq .server.type 1}}checked{{end}}>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item password" style="{{if eq .server.type 1}}display:none{{end}}">
|
||||
<label class="layui-form-label mw200">密码</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="password" id="password" lay-verify="" autocomplete="off" placeholder="服务器登录密码" class="layui-input" value="{{.server.password}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item key" style="{{if eq .server.type 0}}display:none{{end}}">
|
||||
<label class="layui-form-label mw200">公钥地址</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="public_key_src" id="public_key_src" lay-verify="" autocomplete="off" placeholder="/Users/haodaquan/.ssh/pp_rsa.pub" class="layui-input" value="{{.server.public_key_src}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"><span id="des" style="cursor: pointer">说明</span></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item key" style="{{if eq .server.type 0}}display:none{{end}}">
|
||||
<label class="layui-form-label mw200">私钥地址</label>
|
||||
<div class="layui-input-inline mw400">
|
||||
<input type="text" name="private_key_src" id="private_key_src" lay-verify="" autocomplete="off" placeholder="/Users/haodaquan/.ssh/pp_rsa" class="layui-input" value="{{.server.private_key_src}}">
|
||||
</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 mw400">
|
||||
<textarea name="detail" id="detail" placeholder="请输入内容" class="layui-textarea">{{.server.detail}}</textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<input type="hidden" name="id" id="id" value="{{.server.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>
|
||||
|
||||
<button class="layui-btn layui-btn-primary" id="test" lay-filter="test">测试</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function () {
|
||||
$("form").submit(function () {
|
||||
// $(".alert").hide();
|
||||
$("button[type='submit']").attr('disabled', true);
|
||||
$.post('{{urlfor "ServerController.Edit"}}', $(this).serialize(), function (out) {
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('radio', function(data){
|
||||
if(data.value==1){
|
||||
$(".key").show();
|
||||
$(".password").hide();
|
||||
}else{
|
||||
$(".password").show();
|
||||
$(".key").hide();
|
||||
}
|
||||
});
|
||||
|
||||
$("#des").on('click',function () {
|
||||
layer.tips('公钥和私钥地址请在本地服务器生成,命令:ssh-keygen -t rsa -f pp_rsa', '#des', {
|
||||
tips: [1, '#0FA6D8'] //还可配置颜色
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "ServerController.AjaxSave"}}', form_data, function (out) {
|
||||
if (out.status == 0) {
|
||||
window.location.href = '{{urlfor "ServerController.List"}}';
|
||||
layer.msg("操作成功",{icon: 1},function () {
|
||||
window.history.go(-1)
|
||||
})
|
||||
} else {
|
||||
alert_message(out.msg,"alert-danger","alert-success");
|
||||
$("button[type='submit']").attr('disabled', false);
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("input[name='type']").click(function () {
|
||||
if ($(this).val() > 0) {
|
||||
$("#password").addClass('hide');
|
||||
$("#public_key_src").removeClass('hide');
|
||||
$("#private_key_src").removeClass('hide');
|
||||
} else {
|
||||
$("#password").removeClass('hide');
|
||||
$("#public_key_src").addClass('hide');
|
||||
$("#private_key_src").addClass('hide');
|
||||
}
|
||||
$("#test").on('click', function(data){
|
||||
layer.load();
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "ServerController.AjaxTestServer"}}', form_data, function (out) {
|
||||
layer.msg(out.message)
|
||||
}, "json");
|
||||
setTimeout(function(){
|
||||
layer.closeAll('loading');
|
||||
}, 2000);
|
||||
return false;
|
||||
});
|
||||
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
@@ -1,121 +1,106 @@
|
||||
<!-- 分组列表 -->
|
||||
<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 class="layui-layout layui-layout-admin" style="padding-left: 20px;">
|
||||
<div class="layui-row" style="margin-top: 20px;">
|
||||
<div class="layui-col-xs6">
|
||||
<a class="layui-btn" data-type="tabAdd" href="/server/add">新增</a>
|
||||
</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 "ServerController.Add"}}' class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> 新增服务器</a>
|
||||
<div class="btn-group" role="server">
|
||||
<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('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="serverName" id="serverName" autocomplete="off" placeholder="资源名称" >
|
||||
</div>
|
||||
<button class="layui-btn" data-type="reload">查询</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class=" btn-large pull-right" >
|
||||
|
||||
</div>
|
||||
</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 width="">IP地址</td>
|
||||
<td width="">端口号</td>
|
||||
<td width="">验证类型</td>
|
||||
<td width="20%">备注</td>
|
||||
<td width="">创建时间</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 class="center">{{$v.id}}</td>
|
||||
<td>{{$v.server_name}}</td>
|
||||
<td>{{$v.server_ip}}</td>
|
||||
<td>{{$v.port}}</td>
|
||||
<td>{{$v.type}}</td>
|
||||
<td>{{$v.detail}}</td>
|
||||
<td>{{$v.create_time}}</td>
|
||||
|
||||
<td>
|
||||
|
||||
<a class="btn btn-info btn-xs" href="{{urlfor "ServerController.Edit"}}?id={{$v.id}}">
|
||||
<span class="glyphicon glyphicon-file" aria-hidden="true"></span> 编辑
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="9">
|
||||
<div class="pull-right">
|
||||
{{str2html .pageBar}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</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-primary layui-btn-xs" lay-event="copy">复制</a>
|
||||
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
|
||||
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function batch(action) {
|
||||
if ($("input[name='ids']:checked").size() < 1) {
|
||||
alert_message("请选择要操作的任务","alert-danger","alert-success");
|
||||
} else {
|
||||
if(action=='delete'){
|
||||
if(!confirm("确定要删除所选吗?")) return;
|
||||
}
|
||||
var url = "{{urlfor "ServerController.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();
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//点击行换色
|
||||
$('tbody tr').click(function(){
|
||||
$(this).addClass("warning").siblings().removeClass("warning");
|
||||
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: '/server/table'
|
||||
,cols: [[
|
||||
// {checkbox: true, fixed: true},
|
||||
{field:'id', title: 'ID', align:'center',sort: true, width:150}
|
||||
,{field:'server_name',title: '资源名称'}
|
||||
,{field:'group_name',title: '分组名称'}
|
||||
,{field:'type', title: '登录类型'}
|
||||
,{field:'detail', title: '备注'}
|
||||
// ,{field:'status_text', title: '状态'}
|
||||
,{fixed: 'right', width:160, align:'center', toolbar: '#bar'}
|
||||
]]
|
||||
,id: 'listReload'
|
||||
,page: true
|
||||
,height: "full-130"
|
||||
});
|
||||
|
||||
var $ = layui.$, active = {
|
||||
reload: function(){
|
||||
table.reload('listReload', {
|
||||
where: {
|
||||
serverName: $('#serverName').val(),
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
//监听工具条
|
||||
table.on('tool(table_filter)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'edit'){
|
||||
window.location.href="/server/edit?id="+data.id
|
||||
} else if(obj.event === 'del'){
|
||||
layer.confirm('真的删除【'+data.server_name+'】服务器资源么', function(index){
|
||||
var jsData = {'id':data.id}
|
||||
$.post('{{urlfor "ServerController.AjaxDel"}}', jsData, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.alert(out.message, {icon: 1},function(index){
|
||||
layer.close(index);
|
||||
window.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
// obj.del();
|
||||
layer.close(index);
|
||||
})
|
||||
|
||||
} else if(obj.event === 'copy'){
|
||||
window.location.href="/server/copy?id="+data.id
|
||||
}else{
|
||||
layer.msg('操作不存在');
|
||||
}
|
||||
});
|
||||
|
||||
$('.demoTable .layui-btn').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
62
views/servergroup/add.html
Normal file
62
views/servergroup/add.html
Normal file
@@ -0,0 +1,62 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<div style="margin: 10px 0px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:新建资源分组
|
||||
</blockquote>
|
||||
</div>
|
||||
<form class="layui-form" action="" method="post" >
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分组名称</label>
|
||||
<div class="layui-input-inline" style="min-width: 200px;">
|
||||
<input type="text" name="group_name" id="group_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">分组说明</label>
|
||||
<div class="layui-input-inline" style="min-width: 400px;">
|
||||
<textarea name="description" id="description" placeholder="请输入内容" class="layui-textarea"></textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<input type="hidden" id="id" value="0">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "ServerGroupController.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>
|
||||
62
views/servergroup/edit.html
Normal file
62
views/servergroup/edit.html
Normal file
@@ -0,0 +1,62 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 40px;margin-top: 20px;">
|
||||
<div style="margin: 10px 0px">
|
||||
<blockquote class="layui-elem-quote">
|
||||
说明:新建资源分组
|
||||
</blockquote>
|
||||
</div>
|
||||
<form class="layui-form" action="" method="post" >
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分组名称</label>
|
||||
<div class="layui-input-inline" style="min-width: 200px;">
|
||||
<input type="text" value="{{.group.group_name}}" name="group_name" id="group_name" lay-verify="required" autocomplete="off" placeholder="资源分组" class="layui-input" >
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分组说明</label>
|
||||
<div class="layui-input-inline" style="min-width: 400px;">
|
||||
<textarea name="description" id="description" placeholder="请输入内容" class="layui-textarea">{{.group.description}}</textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<input type="hidden" id="id" name="id" value="{{.group.id}}">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var $;
|
||||
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;
|
||||
}
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "ServerGroupController.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>
|
||||
105
views/servergroup/list.html
Normal file
105
views/servergroup/list.html
Normal file
@@ -0,0 +1,105 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 20px;">
|
||||
<div class="layui-row" style="margin-top: 20px;">
|
||||
<div class="layui-col-xs6">
|
||||
<a class="layui-btn" data-type="tabAdd" href="/servergroup/add">新增</a>
|
||||
</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="groupName" id="groupName" autocomplete="off" placeholder="分组名称" >
|
||||
</div>
|
||||
<button class="layui-btn" data-type="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-primary layui-btn-xs" lay-event="detail">查看</a> -->
|
||||
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</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: '/servergroup/table'
|
||||
,cols: [[
|
||||
// {checkbox: true, fixed: true},
|
||||
{field:'id', title: 'ID', align:'center',sort: true, width:150}
|
||||
,{field:'group_name',title: '分组名称'}
|
||||
,{field:'description', title: '分组说明'}
|
||||
,{field:'create_time', title: '创建时间'}
|
||||
,{field:'update_time', title: '更新时间'}
|
||||
,{fixed: 'right', width:160, align:'center', toolbar: '#bar'}
|
||||
]]
|
||||
,id: 'listReload'
|
||||
,page: true
|
||||
,height: "full-130"
|
||||
});
|
||||
|
||||
var $ = layui.$, active = {
|
||||
reload: function(){
|
||||
table.reload('listReload', {
|
||||
where: {
|
||||
groupName: $('#groupName').val(),
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
//监听工具条
|
||||
table.on('tool(table_filter)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'edit'){
|
||||
window.location.href="/servergroup/edit?id="+data.id
|
||||
} else if(obj.event === 'del'){
|
||||
|
||||
layer.confirm('真的删除【'+data.group_name+'】分组么', function(index){
|
||||
var jsData = {'id':data.id}
|
||||
$.post('{{urlfor "ServerGroupController.AjaxDel"}}', jsData, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.alert('删除成功了', {icon: 1},function(index){
|
||||
layer.close(index);
|
||||
window.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
return
|
||||
}
|
||||
}, "json");
|
||||
// obj.del();
|
||||
layer.close(index);
|
||||
})
|
||||
|
||||
}else{
|
||||
layer.msg('操作不存在');
|
||||
}
|
||||
});
|
||||
|
||||
$('.demoTable .layui-btn').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@@ -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
160
views/task/auditlist.html
Normal 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>
|
||||
@@ -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
184
views/task/detail.html
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
185
views/tasklog/detail.html
Normal file
185
views/tasklog/detail.html
Normal file
@@ -0,0 +1,185 @@
|
||||
<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;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>日志ID</td>
|
||||
<td>#{{.taskLog.id}}</td>
|
||||
<td></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>执行时间</td>
|
||||
<td>{{.taskLog.start_time}}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>执行耗时</td>
|
||||
<td>{{.taskLog.process_time}}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>输出大小</td>
|
||||
<td>{{.taskLog.ouput_size}}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>运行结果</td>
|
||||
<td>{{.taskLog.status|str2html}}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
</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>任务命令</legend>
|
||||
</fieldset>
|
||||
<pre class="layui-code">{{.task.Command}}</pre>
|
||||
</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>执行输出</legend>
|
||||
</fieldset>
|
||||
<pre class="layui-code">{{.taskLog.ouput}}</pre>
|
||||
</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>错误输出</legend>
|
||||
</fieldset>
|
||||
<pre class="layui-code">{{.taskLog.error}}</pre>
|
||||
</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>{{.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>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['form','element','layer','jquery'],function(){
|
||||
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
|
||||
|
||||
var error_info = "{{.flash.error}}";
|
||||
if(error_info){
|
||||
layer.msg(error_info,{icon: 2,shade:0.3},function () {
|
||||
window.history.go(-1)
|
||||
})
|
||||
return;
|
||||
}
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
125
views/tasklog/list.html
Normal file
125
views/tasklog/list.html
Normal file
@@ -0,0 +1,125 @@
|
||||
<div class="layui-layout layui-layout-admin" style="padding-left: 20px;">
|
||||
<div class="layui-row" style="margin-top: 20px;">
|
||||
<div class="layui-col-xs6">
|
||||
<button class="layui-btn layui-btn-danger" data-type="tabDel" id="tabDel">批量删除</button>
|
||||
</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: 20%;text-align: left">
|
||||
<select name="status" lay-filter="status">
|
||||
<option value="9">全部</option>
|
||||
<option value="-1">正常</option>
|
||||
<option value="-2">错误</option>
|
||||
</select>
|
||||
</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-xs layui-btn-primary" lay-event="detail">详细</a>
|
||||
</script>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['table','form','element'], function(){
|
||||
var table = layui.table;
|
||||
|
||||
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: "/tasklog/table?task_id={{.task_id}}"
|
||||
,cols: [[
|
||||
{checkbox: true, fixed: true}
|
||||
,{field:'id', title: 'ID', align:'center',sort: true, width:150}
|
||||
,{field:'task_id', title: '任务ID', align:'center',sort: true, width:150}
|
||||
,{field:'start_time',title: '开始时间'}
|
||||
,{field:'process_time',width:100, title: '执行时间'}
|
||||
,{field:'ouput_size',title: '输出'}
|
||||
,{field:'status', width:170,title: '状态'}
|
||||
,{fixed: 'right', align:'center', title:'操作', toolbar: '#bar'}
|
||||
]]
|
||||
,id: 'listReload'
|
||||
,page: true
|
||||
,height: "full-130"
|
||||
});
|
||||
|
||||
var $ = layui.$, active = {
|
||||
reload: function(){
|
||||
table.reload('listReload', {
|
||||
where: {
|
||||
status: $("select[name=status]").val()
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
$("#tabDel").on("click",function (obj) {
|
||||
var checkStatus = table.checkStatus('listReload');
|
||||
var data = checkStatus.data;
|
||||
if(data.length<1){
|
||||
layer.msg("请选择操作数据");
|
||||
return
|
||||
}
|
||||
layer.confirm('是否确认删除选中项', {icon: 3, title:'提示'}, function(index){
|
||||
//do something
|
||||
|
||||
var ids = "";
|
||||
$.each(data,function (k,v) {
|
||||
ids += v.id+",";
|
||||
});
|
||||
ids = ids.substr(0,ids.length-1)
|
||||
$.post('/tasklog/ajaxdel', {ids:ids}, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.msg("操作成功",{icon: 1},function () {
|
||||
$('#reload').click();
|
||||
})
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
|
||||
layer.close(index);
|
||||
});
|
||||
|
||||
return;
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//监听工具条
|
||||
table.on('tool(table_filter)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'detail'){
|
||||
window.location.href="/tasklog/detail?id="+data.id
|
||||
} else{
|
||||
layer.msg('操作不存在')
|
||||
}
|
||||
});
|
||||
|
||||
$('.demoTable .layui-btn').on('click', function(){
|
||||
var type = $(this).data('type');
|
||||
active[type] ? active[type].call(this) : '';
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
112
views/user/edit.html
Normal file
112
views/user/edit.html
Normal file
@@ -0,0 +1,112 @@
|
||||
|
||||
<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">登录账号</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="login_name" readonly id="login_name" lay-verify="required" autocomplete="off" placeholder="登录账号" class="layui-input" value="{{.admin.login_name}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*登录不允许修改</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">真实姓名</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="real_name" id="real_name" lay-verify="required" autocomplete="off" placeholder="真实姓名" class="layui-input" value="{{.admin.real_name}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">手机号码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="phone" lay-verify="phone|required" autocomplete="off" placeholder="手机号码" class="layui-input" value="{{.admin.phone}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">电子邮箱</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="email" id="email" lay-verify="email" autocomplete="off" placeholder="电子邮箱" class="layui-input" value="{{.admin.email}}">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">*</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否修改</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="reset_pwd" lay-verify="reset_pwd" value="1" title="是">
|
||||
<input type="radio" name="reset_pwd" lay-verify="reset_pwd" value="2" title="否" checked>
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item password" style="display:none;">
|
||||
<label class="layui-form-label">旧密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" name="password_old" id="password_old" lay-verify="" autocomplete="off" placeholder="旧密码" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item password" style="display:none;">
|
||||
<label class="layui-form-label">设置密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" name="password_new1" id="password_new1" lay-verify="" autocomplete="off" placeholder="新密码" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item password" style="display:none;">
|
||||
<label class="layui-form-label">重复密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" name="password_new2" id="password_new2" lay-verify="" autocomplete="off" placeholder="新密码" class="layui-input" value="">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux"></div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" id="id" name="id" value="{{.admin.id}}">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit="" lay-filter="sub">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var $;
|
||||
layui.config({
|
||||
base : "js/"
|
||||
}).use(['form','element','layer','jquery'],function(){
|
||||
var form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功
|
||||
var $ = layui.jquery;
|
||||
|
||||
form.on('radio', function(data){
|
||||
if(data.value==1){
|
||||
$(".password").show()
|
||||
}else{
|
||||
$(".password").hide()
|
||||
}
|
||||
});
|
||||
form.on('submit(sub)', function(data){
|
||||
var form_data = $("form").serialize();
|
||||
$.post('{{urlfor "UserController.AjaxSave"}}', form_data, function (out) {
|
||||
if (out.status == 0) {
|
||||
layer.msg("操作成功,请重新登录",{icon: 1},function () {
|
||||
top.location.href="/login_out"
|
||||
})
|
||||
} else {
|
||||
layer.msg(out.message)
|
||||
}
|
||||
}, "json");
|
||||
return false;
|
||||
});
|
||||
//但是,如果你的HTML是动态生成的,自动渲染就会失效
|
||||
//因此你需要在相应的地方,执行下述方法来手动渲染,跟这类似的还有 element.init();
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user