| <!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); | 
|                     if (obj.field.RequestType) | 
|                         obj.field.RequestType = parseInt(obj.field.RequestType); | 
|                     else | 
|                         obj.field.RequestType = 0 | 
|                     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> |