<!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 href="../../layui-v2.9.13/layui/css/layui.css" rel="stylesheet">
|
</head>
|
|
<body>
|
<form class="layui-form" lay-filter="layuiadmin-app-form-list" id="layuiadmin-app-form-list"
|
style="padding: 20px 30px 0 0;">
|
<div class="layui-form-item">
|
<label class="layui-form-label">任务组名</label>
|
<div class="layui-input-block">
|
<input type="text" id="JobGroup" name="JobGroup" placeholder="请输入任务组名" lay-verify="required"
|
autocomplete="off" class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">任务名称</label>
|
<div class="layui-input-block">
|
<input type="text" id="JobName" name="JobName" placeholder="请输入任务名称" lay-verify="required"
|
autocomplete="off" class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">任务类型</label>
|
<div class="layui-input-block">
|
<select name="JobType" id="JobType" lay-filter="JobType" lay-search>
|
<option value=2 selected>内置</option>
|
<option value=1>Url</option>
|
</select>
|
</div>
|
</div>
|
<div id="divBuiltIn">
|
<div class="layui-form-item">
|
<label class="layui-form-label">类名</label>
|
<div class="layui-input-block">
|
<input type="text" id="ClassName" name="ClassName" placeholder="请输入类名" autocomplete="off"
|
class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">方法名</label>
|
<div class="layui-input-block">
|
<input type="text" id="MethodName" name="MethodName" placeholder="请输入方法名" autocomplete="off"
|
class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">参数</label>
|
<div class="layui-input-block">
|
<input type="text" id="MethodParameters" name="MethodParameters" placeholder="请输入参数"
|
autocomplete="off" class="layui-input">
|
</div>
|
</div>
|
</div>
|
<div id="divUrl">
|
<div class="layui-form-item">
|
<label class="layui-form-label">请求地址</label>
|
<div class="layui-input-block">
|
<input type="text" id="RequestUrl" name="RequestUrl" placeholder="请输入请求地址" autocomplete="off"
|
class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">请求类型</label>
|
<div class="layui-input-block">
|
<input type="radio" id="RequestType" name="RequestType" value=1 title="Get">
|
<input type="radio" id="RequestType" name="RequestType" value=2 title="Post">
|
<input type="radio" id="RequestType" name="RequestType" value=4 title="Put">
|
<input type="radio" id="RequestType" name="RequestType" value=8 title="Del">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">请求头</label>
|
<div class="layui-input-block">
|
<input type="text" id="Headers" name="Headers" placeholder="请输入请求头" autocomplete="off"
|
class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">请求参数</label>
|
<div class="layui-input-block">
|
<textarea placeholder="请输入请求参数" id="RequestParameters" name="RequestParameters"
|
class="layui-textarea"></textarea>
|
</div>
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">开始时间</label>
|
<div class="layui-input-block">
|
<input type="text" autocomplete="off" name="BeginTime" id="BeginTime" class="layui-input"
|
placeholder="开始时间">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">结束时间</label>
|
<div class="layui-input-block">
|
<input type="text" autocomplete="off" name="EndTime" id="EndTime" class="layui-input"
|
placeholder="结束时间">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">触发器类型</label>
|
<div class="layui-input-block">
|
<select name="TriggerType" id="TriggerType" lay-filter="TriggerType" lay-search>
|
<option value="1" selected>Cron</option>
|
<option value="2">Simple</option>
|
</select>
|
</div>
|
</div>
|
<div class="layui-form-item" id="divCron">
|
<label class="layui-form-label">Cron表达式</label>
|
<div class="layui-input-block">
|
<input type="text" id="Cron" name="Cron" placeholder="请输入Cron表达式" autocomplete="off"
|
class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item" id="divIntervalMilliseconds">
|
<label class="layui-form-label">间隔时间</label>
|
<div class="layui-input-block">
|
<input type="text" id="IntervalMilliseconds" name="IntervalMilliseconds" placeholder="请输入间隔时间(毫秒)"
|
autocomplete="off" class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item">
|
<label class="layui-form-label">描述</label>
|
<div class="layui-input-block">
|
<input type="text" id="Description" name="Description" placeholder="请输入描述" autocomplete="off"
|
class="layui-input">
|
</div>
|
</div>
|
<div class="layui-form-item" style="text-align: center;">
|
<input class="layui-btn layui-btn-lg" type="button" lay-submit lay-filter="submit" id="submit" value="确认">
|
</div>
|
</form>
|
|
<script src="../../layui-v2.9.13/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 src="../../js/xm-select.js"></script>
|
<script>
|
var objRowsData = parent.objRowsData;
|
var doing = true;
|
layui.config({
|
base: '../../layuiadmin/', //静态资源所在路径
|
}).extend({
|
index: 'lib/index', //主入口模块
|
}).use(['index', 'form', 'layer'], function () {
|
var $ = layui.$, form = layui.form, layer = layui.layer;
|
var laydate = layui.laydate;
|
laydate.render({
|
elem: '#BeginTime'
|
, type: 'datetime'
|
, fullPanel: true
|
});
|
laydate.render({
|
elem: '#EndTime'
|
, type: 'datetime'
|
, fullPanel: true
|
});
|
$("#divUrl").hide();
|
$("#divIntervalMilliseconds").hide();
|
|
|
if (objRowsData) {
|
sendData(IP + "/Job/QueryJob", { Group: objRowsData.GroupName, Name: objRowsData.Name }, 'post', function (res) {
|
if (res.code == 0) {
|
setFormData(res.data, "#layuiadmin-app-form-list");
|
if (res.data.BeginTime) {
|
$("#BeginTime").val(dateTimeOffsetToDateTimeString(res.data.BeginTime));
|
}
|
if (res.data.EndTime) {
|
$("#EndTime").val(dateTimeOffsetToDateTimeString(res.data.EndTime));
|
}
|
if (res.data.JobType == 1) {
|
$("#divUrl").show();
|
$("#divBuiltIn").hide();
|
}
|
else if (res.data.JobType == 2) {
|
$("#divUrl").hide();
|
$("#divBuiltIn").show();
|
}
|
if (res.data.TriggerType == 1) {
|
$("#divCron").show();
|
$("#divIntervalMilliseconds").hide();
|
}
|
else if (res.data.TriggerType == 2) {
|
$("#divCron").hide();
|
$("#divIntervalMilliseconds").show();
|
}
|
form.render('select');
|
}
|
});
|
}
|
|
form.on('submit(submit)', function (obj) {
|
if (doing) {
|
doing = false;
|
obj.field.JobType = parseInt(obj.field.JobType);
|
obj.field.TriggerType = parseInt(obj.field.TriggerType);
|
obj.field.BeginTime = convertToDateTimeOffset(obj.field.BeginTime);
|
obj.field.EndTime = convertToDateTimeOffset(obj.field.EndTime);
|
obj.field.IntervalMilliseconds = parseInt(obj.field.IntervalMilliseconds);
|
|
obj.field.RequestType = parseInt(obj.field.RequestType);
|
var url = "/Job/AddJob";
|
var param;
|
if (objRowsData) {
|
url = "/Job/ModifyJob";
|
param = {
|
NewScheduleEntity: obj.field,
|
OldScheduleEntity: {
|
JobName: parent.objRowsData.Name,
|
JobGroup: parent.objRowsData.GroupName
|
}
|
}
|
}
|
else {
|
param = obj.field;
|
}
|
sendData(IP + url, param, 'post', function (res) {
|
if (res.code == 0) { //成功
|
layer.msg(res.msg, {
|
icon: 1,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
|
parent.layer.close(index); //再执行关闭
|
doing = true;
|
});
|
}
|
else //不成功
|
{
|
layer.msg(res.msg, {
|
icon: 2,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () { doing = true; });
|
}
|
});
|
}
|
return false;
|
});
|
form.on('select(JobType)', function (data) {
|
if (data.value == 1) {
|
$("#divUrl").show();
|
$("#divBuiltIn").hide();
|
}
|
else if (data.value == 2) {
|
$("#divUrl").hide();
|
$("#divBuiltIn").show();
|
}
|
});
|
form.on('select(TriggerType)', function (data) {
|
if (data.value == 1) {
|
$("#divCron").show();
|
$("#divIntervalMilliseconds").hide();
|
}
|
else if (data.value == 2) {
|
$("#divCron").hide();
|
$("#divIntervalMilliseconds").show();
|
}
|
});
|
form.render('select');
|
|
});
|
|
function convertToDateTimeOffset(date) {
|
// 将传入的时间字符串转换为 Date 对象
|
var localDate = new Date(date);
|
|
// 获取本地时间的时间戳(毫秒)
|
var timestamp = localDate.getTime();
|
|
// 获取本地时区与 UTC 的偏移量(分钟为单位,需要转换为毫秒)
|
var offsetMinutes = localDate.getTimezoneOffset();
|
var offsetMilliseconds = offsetMinutes * 60 * 1000; // 转换为毫秒
|
|
// 构建 DateTimeOffset
|
var dateTimeOffset = new Date(timestamp - offsetMilliseconds);
|
|
return dateTimeOffset;
|
}
|
function dateTimeOffsetToDateTimeString(dateTimeOffsetString) {
|
// 创建一个 Date 对象,解析传入的 DateTimeOffset 格式字符串
|
var dateTimeOffset = new Date(dateTimeOffsetString);
|
|
// 使用 Date 对象的 getUTC* 方法获取 UTC 时间的年、月、日、时、分、秒
|
var year = dateTimeOffset.getUTCFullYear();
|
var month = ('0' + (dateTimeOffset.getUTCMonth() + 1)).slice(-2); // 月份从0开始,需要加1,并确保两位数
|
var day = ('0' + dateTimeOffset.getUTCDate()).slice(-2); // 日需要确保两位数
|
var hours = ('0' + dateTimeOffset.getUTCHours()).slice(-2); // 小时需要确保两位数
|
var minutes = ('0' + dateTimeOffset.getUTCMinutes()).slice(-2); // 分钟需要确保两位数
|
var seconds = ('0' + dateTimeOffset.getUTCSeconds()).slice(-2); // 秒钟需要确保两位数
|
|
// 拼接成 YYYY-MM-dd HH:mm:ss 格式的本地时间字符串
|
var localDateTimeString = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
return localDateTimeString;
|
}
|
</script>
|
</body>
|
|
</html>
|