hwh
2024-06-25 dedeb77685c258bc7851c7c4da40eb1315127cb8
HTML/views/SystemSettings/Job.html
New file
@@ -0,0 +1,339 @@
<!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
                     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" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
   <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i
         class="layui-icon layui-icon-delete"></i>删除</a>
   <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="detail"><i
         class="layui-icon layui-icon-log"></i>日志</a>
   <a class="layui-btn layui-btn-normal layui-btn-xs" 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 == 200) //成功
               {
                  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"
                  }
               ]]
         };
         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 == 200) { //成功
                        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 == 200) { //成功
                              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 == 200) { //成功
                        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 == 200) { //成功
                        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 == 200) { //成功
                        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 = {};
            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>