<!DOCTYPE html>
|
<html>
|
|
<head>
|
<meta charset="utf-8">
|
<title>定时任务列表</title>
|
<meta name="renderer" content="webkit">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta name="viewport"
|
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
<link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
|
<link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
|
<script>
|
// 这里是需要在页面渲染之前执行的代码
|
document.addEventListener("DOMContentLoaded", function () {
|
|
//获取table默认显示数
|
pageCntFirst();
|
});
|
</script>
|
</head>
|
|
<body id="body">
|
<div class="layui-fluid" style="padding-bottom: 0; ">
|
<div class="layui-card">
|
<div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC"
|
id="top">
|
<div class="layui-form-item">
|
<div class="layui-inline">
|
<button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit id="btnAdd"
|
lay-filter="LAY-app-contlist-add">
|
<i class="layui-icon layui-icon-add-1 layuiadmin-button-btn"></i>添加
|
</button>
|
</div>
|
</div>
|
</div>
|
|
<div id="center"></div>
|
|
<div class="layui-card-body">
|
<table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
|
</div>
|
</div>
|
</div>
|
<script src="../../layuiadmin/layui/layui.js"></script>
|
<script src="../../js/public.js"></script>
|
<script src="../../js/jquery-3.5.1.min.js"></script>
|
<script src="../../js/jquery.cookie.js"></script>
|
<script type="text/html" id="toolBar">
|
<!-- d代表的是layui 引擎模板中所使用的单个数据 -->
|
{{# if(d.TriggerState ==0){ }}
|
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="Pause">
|
<i class="layui-icon layui-icon-pause"></i>暂停</a>
|
{{# } }}
|
{{# if(d.TriggerState ==1){ }}
|
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="Play">
|
<i class="layui-icon layui-icon-play"></i>开始</a>
|
{{# } }}
|
<a class="layui-btn layui-btn-normal layui-btn-xs btnEdit" lay-event="edit"><i
|
class="layui-icon layui-icon-edit"></i>编辑</a>
|
<a class="layui-btn layui-btn-danger layui-btn-xs btnDel" lay-event="del"><i
|
class="layui-icon layui-icon-delete"></i>删除</a>
|
<a class="layui-btn layui-btn-normal layui-btn-xs btnLog" lay-event="detail"><i
|
class="layui-icon layui-icon-log"></i>日志</a>
|
<a class="layui-btn layui-btn-normal layui-btn-xs btnExec" lay-event="execute"><i
|
class="layui-icon layui-icon-triangle-r"></i>执行</a>
|
</script>
|
<script>
|
var doing = true;
|
var objRowsData = {};
|
layui.config({
|
base: '../../layuiadmin/' //静态资源所在路径
|
}).extend({
|
index: 'lib/index' //主入口模块
|
}).use(['index', 'table', 'laypage', 'layer'], function () {
|
var table = layui.table,
|
form = layui.form,
|
laypage = layui.laypage,
|
layer = layui.layer;
|
var h1 = GetTableHeight();
|
refreshTable();
|
var tableIns;
|
|
function refreshTable() {
|
var url = "/Job/GetAllJob";
|
sendData(IP + url, {}, 'get', function (res) {
|
|
// console.log(res.data)
|
if (res.code == 0) //成功
|
{
|
var list = res.data;
|
$.extend(infoOptions, {
|
data: list
|
});
|
tableIns = table.render(infoOptions);
|
|
}
|
else //不成功
|
{
|
layer.msg('获取任务列表信息失败!', {
|
icon: 2,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () { });
|
}
|
});
|
|
}
|
var infoOptions = {
|
elem: '#LAY-app-content-list',
|
height: h1,
|
id: 'LAY-app-content-list',
|
page: false,
|
limit: pageCnt,
|
limits: pageLimits,
|
even: true,
|
cols:
|
[[
|
{
|
title: '序号', type: 'numbers', fixed: 'left', width: 65
|
},
|
{
|
field: 'Name', title: '任务名称', align: 'center', fixed: 'left', width: 100
|
},
|
{
|
field: 'JobType', title: '类型', align: 'center', fixed: 'left', width: 80, templet: function (d) {
|
if (d.JobType == 1) {
|
return 'Http'
|
} else if (d.JobType == 2) {
|
return '内置'
|
} else if (d.JobType == 3) {
|
return '热加载'
|
}
|
}
|
},
|
{
|
field: 'RunNumber', title: '触发次数', align: 'center', width: 100
|
},
|
{
|
field: 'DisplayState', title: '状态', align: 'center', width: 80
|
},
|
{
|
field: 'PreviousFireTime', title: '上次执行时间', align: 'center', width: 170, templet: function (d) {
|
return formatDateTime(d.PreviousFireTime)
|
}
|
},
|
{
|
field: 'NextFireTime', title: '下次执行时间', align: 'center', width: 170, templet: function (d) {
|
return formatDateTime(d.NextFireTime)
|
}
|
},
|
{
|
field: 'Description', title: '描述', align: 'center'
|
},
|
{
|
field: 'caozuo', title: '操作', fixed: 'right', width: 340, align: 'left', toolbar: "#toolBar"
|
}
|
]],
|
done: function () {
|
//权限
|
var listRole = JSON.parse(localStorage.getItem('listRole'));
|
$("#btnAdd").hide();
|
$(".btnEdit").hide();
|
$(".btnDel").hide();
|
$(".btnLog").hide();
|
$(".btnExec").hide();
|
if (listRole) {
|
if (listRole.filter(s => s.MenuName == "添加任务").length > 0) {
|
$("#btnAdd").show();
|
}
|
if (listRole.filter(s => s.MenuName == "编辑任务").length > 0) {
|
$(".btnEdit").show();
|
}
|
if (listRole.filter(s => s.MenuName == "删除任务").length > 0) {
|
$(".btnDel").show();
|
}
|
if (listRole.filter(s => s.MenuName == "任务日志").length > 0) {
|
$(".btnLog").show();
|
}
|
if (listRole.filter(s => s.MenuName == "执行任务").length > 0) {
|
$(".btnExec").show();
|
}
|
}
|
}
|
};
|
|
table.on('tool(LAY-app-content-list)', function (obj) {
|
var data = obj.data;
|
switch (obj.event) {
|
case "execute":
|
sendData(IP + "/Job/TriggerJob", { Name: data.Name, Group: data.GroupName }, 'post', function (res) {
|
console.log(res);
|
if (res.code == 0) { //成功
|
layer.msg(res.msg, {
|
icon: 1,
|
time: 3000 //1秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
doing = true;
|
});
|
} else { //不成功
|
layer.msg(res.msg, {
|
icon: 2,
|
time: 3000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
doing = true;
|
});
|
}
|
layer.close(index);
|
});
|
break;
|
case "edit":
|
objRowsData = data;
|
layer.open({
|
type: 2,
|
title: '编辑定时任务信息',
|
content: 'JobForm.html',
|
maxmin: true,
|
area: ['650px', '550px'],
|
end: function () {
|
refreshTable();
|
}
|
});
|
break;
|
case "del":
|
if (doing) {
|
doing = false;
|
layer.confirm('确定删除选中的模板?', function (index) {
|
sendData(IP + "/Job/RemoveJob", { Name: data.Name, Group: data.GroupName }, 'post', function (res) {
|
console.log(res);
|
if (res.code == 0) { //成功
|
layer.msg(res.msg, {
|
icon: 1,
|
time: 3000 //1秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
refreshTable();
|
doing = true;
|
});
|
} else { //不成功
|
layer.msg(res.msg, {
|
icon: 2,
|
time: 3000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
refreshTable();
|
doing = true;
|
});
|
}
|
layer.close(index);
|
});
|
|
});
|
}
|
break;
|
case "detail":
|
sendData(IP + "/Job/GetJobLogs", { Name: data.Name, Group: data.GroupName }, 'post', function (res) {
|
console.log(res);
|
if (res.code == 0) { //成功
|
if (res.data) {
|
layer.open({
|
type: 1,
|
area: ['80%', '80%'], // 宽高
|
content: res.data.join('\n')
|
});
|
}
|
else {
|
layer.msg('暂无日志', {
|
icon: 2,
|
time: 3000
|
}, function () {
|
refreshTable();
|
});
|
}
|
} else { //不成功
|
layer.msg(res.msg, {
|
icon: 2,
|
time: 3000
|
}, function () {
|
refreshTable();
|
});
|
}
|
layer.close(index);
|
});
|
break;
|
case "Play":
|
sendData(IP + "/Job/ResumeJob", { Name: data.Name, Group: data.GroupName }, 'post', function (res) {
|
console.log(res);
|
if (res.code == 0) { //成功
|
layer.msg(res.msg, {
|
icon: 1,
|
time: 3000 //1秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
refreshTable();
|
doing = true;
|
});
|
} else { //不成功
|
layer.msg(res.msg, {
|
icon: 2,
|
time: 3000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
refreshTable();
|
doing = true;
|
});
|
}
|
layer.close(index);
|
});
|
break;
|
case "Pause":
|
sendData(IP + "/Job/StopJob", { Name: data.Name, Group: data.GroupName }, 'post', function (res) {
|
console.log(res);
|
if (res.code == 0) { //成功
|
layer.msg(res.msg, {
|
icon: 1,
|
time: 3000 //1秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
refreshTable();
|
doing = true;
|
});
|
} else { //不成功
|
layer.msg(res.msg, {
|
icon: 2,
|
time: 3000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
refreshTable();
|
doing = true;
|
});
|
}
|
layer.close(index);
|
});
|
break;
|
}
|
});
|
//添加
|
form.on('submit(LAY-app-contlist-add)', function (obj) {
|
objRowsData = null;
|
layer.open({
|
type: 2,
|
title: '添加定时任务信息',
|
content: 'JobForm.html',
|
maxmin: true,
|
area: ['650px', '550px'],
|
end: function () {
|
refreshTable();
|
}
|
});
|
});
|
|
});
|
function formatDateTime(inputDateTime) {
|
// 创建一个日期对象,用于解析输入的日期时间字符串
|
let date = new Date(inputDateTime);
|
|
// 提取年、月、日、时、分、秒
|
let year = date.getFullYear();
|
let month = ('0' + (date.getMonth() + 1)).slice(-2); // 月份从0开始,需要加1,并确保两位数
|
let day = ('0' + date.getDate()).slice(-2); // 日需要确保两位数
|
let hours = ('0' + date.getHours()).slice(-2); // 小时需要确保两位数
|
let minutes = ('0' + date.getMinutes()).slice(-2); // 分钟需要确保两位数
|
let seconds = ('0' + date.getSeconds()).slice(-2); // 秒钟需要确保两位数
|
|
// 拼接成所需的格式
|
let formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
return formattedDateTime;
|
}
|
</script>
|
|
</body>
|
|
</html>
|