mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-11-19 23:53:44 +08:00
集成xxl-job-admin控制台。
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Error</title>
|
||||
<style type="text/css">
|
||||
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
||||
div.dialog {
|
||||
width: 80%;
|
||||
padding: 1em 4em;
|
||||
margin: 4em auto 0 auto;
|
||||
border: 1px solid #ccc;
|
||||
border-right-color: #999;
|
||||
border-bottom-color: #999;
|
||||
}
|
||||
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
||||
</style>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="dialog">
|
||||
<h1>System Error</h1>
|
||||
<p>${exceptionMsg}</p>
|
||||
<a href="javascript:window.location.href='${request.contextPath}/'">Back</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,239 @@
|
||||
<#macro commonStyle>
|
||||
|
||||
<#-- favicon -->
|
||||
<link rel="icon" href="${request.contextPath}/static/favicon.ico" />
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<!-- Tell the browser to be responsive to screen width -->
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<!-- Bootstrap -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css">
|
||||
<!-- Ionicons -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/Ionicons/css/ionicons.min.css">
|
||||
<!-- Theme style -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/dist/css/AdminLTE.min.css">
|
||||
<!-- AdminLTE Skins. Choose a skin from the css/skins folder instead of downloading all of them to reduce the load. -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/dist/css/skins/_all-skins.min.css">
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- pace -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css">
|
||||
|
||||
<#-- i18n -->
|
||||
<#global I18n = I18nUtil.getMultString()?eval />
|
||||
|
||||
</#macro>
|
||||
|
||||
<#macro commonScript>
|
||||
<!-- jQuery -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/jquery/jquery.min.js"></script>
|
||||
<!-- Bootstrap -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js"></script>
|
||||
<!-- FastClick -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/fastclick/fastclick.js"></script>
|
||||
<!-- AdminLTE App -->
|
||||
<script src="${request.contextPath}/static/adminlte/dist/js/adminlte.min.js"></script>
|
||||
<!-- jquery.slimscroll -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
|
||||
|
||||
<!-- pace -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/PACE/pace.min.js"></script>
|
||||
<#-- jquery cookie -->
|
||||
<script src="${request.contextPath}/static/plugins/jquery/jquery.cookie.js"></script>
|
||||
<#-- jquery.validate -->
|
||||
<script src="${request.contextPath}/static/plugins/jquery/jquery.validate.min.js"></script>
|
||||
|
||||
<#-- layer -->
|
||||
<script src="${request.contextPath}/static/plugins/layer/layer.js"></script>
|
||||
|
||||
<#-- common -->
|
||||
<script src="${request.contextPath}/static/js/common.1.js"></script>
|
||||
<script>
|
||||
var base_url = '${request.contextPath}';
|
||||
var I18n = ${I18nUtil.getMultString()};
|
||||
</script>
|
||||
|
||||
</#macro>
|
||||
|
||||
<#macro commonHeader>
|
||||
<header class="main-header">
|
||||
<a href="${request.contextPath}/" class="logo">
|
||||
<span class="logo-mini"><b>XXL</b></span>
|
||||
<span class="logo-lg"><b>${I18n.admin_name}</b></span>
|
||||
</a>
|
||||
<nav class="navbar navbar-static-top" role="navigation">
|
||||
|
||||
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
|
||||
<div class="navbar-custom-menu">
|
||||
<ul class="nav navbar-nav">
|
||||
<#-- login user -->
|
||||
<li class="dropdown">
|
||||
<a href="javascript:" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||
${I18n.system_welcome} ${Request["XXL_JOB_LOGIN_IDENTITY"].username}
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li id="updatePwd" ><a href="javascript:">${I18n.change_pwd}</a></li>
|
||||
<li id="logoutBtn" ><a href="javascript:">${I18n.logout_btn}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- 修改密码.模态框 -->
|
||||
<div class="modal fade" id="updatePwdModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog ">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.change_pwd}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.change_pwd_field_newpwd}<font color="red">*</font></label>
|
||||
<div class="col-sm-10"><input type="text" class="form-control" name="password" placeholder="${I18n.system_please_input} ${I18n.change_pwd_field_newpwd}" maxlength="18" ></div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="submit" class="btn btn-primary" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</#macro>
|
||||
|
||||
<#macro commonLeft pageName >
|
||||
<!-- Left side column. contains the logo and sidebar -->
|
||||
<aside class="main-sidebar">
|
||||
<!-- sidebar: style can be found in sidebar.less -->
|
||||
<section class="sidebar">
|
||||
<!-- sidebar menu: : style can be found in sidebar.less -->
|
||||
<ul class="sidebar-menu">
|
||||
<li class="header">${I18n.system_nav}</li>
|
||||
<li class="nav-click <#if pageName == "index">active</#if>" ><a href="${request.contextPath}/"><i class="fa fa-circle-o text-aqua"></i><span>${I18n.job_dashboard_name}</span></a></li>
|
||||
<li class="nav-click <#if pageName == "jobinfo">active</#if>" ><a href="${request.contextPath}/jobinfo"><i class="fa fa-circle-o text-yellow"></i><span>${I18n.jobinfo_name}</span></a></li>
|
||||
<li class="nav-click <#if pageName == "joblog">active</#if>" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-green"></i><span>${I18n.joblog_name}</span></a></li>
|
||||
<#if Request["XXL_JOB_LOGIN_IDENTITY"].role == 1>
|
||||
<li class="nav-click <#if pageName == "jobgroup">active</#if>" ><a href="${request.contextPath}/jobgroup"><i class="fa fa-circle-o text-red"></i><span>${I18n.jobgroup_name}</span></a></li>
|
||||
<li class="nav-click <#if pageName == "user">active</#if>" ><a href="${request.contextPath}/user"><i class="fa fa-circle-o text-purple"></i><span>${I18n.user_manage}</span></a></li>
|
||||
</#if>
|
||||
<li class="nav-click <#if pageName == "help">active</#if>" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-gray"></i><span>${I18n.job_help}</span></a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- /.sidebar -->
|
||||
</aside>
|
||||
</#macro>
|
||||
|
||||
<#macro commonControl >
|
||||
<!-- Control Sidebar -->
|
||||
<aside class="control-sidebar control-sidebar-dark">
|
||||
<!-- Create the tabs -->
|
||||
<ul class="nav nav-tabs nav-justified control-sidebar-tabs">
|
||||
<li class="active"><a href="#control-sidebar-home-tab" data-toggle="tab"><i class="fa fa-home"></i></a></li>
|
||||
<li><a href="#control-sidebar-settings-tab" data-toggle="tab"><i class="fa fa-gears"></i></a></li>
|
||||
</ul>
|
||||
<!-- Tab panes -->
|
||||
<div class="tab-content">
|
||||
<!-- Home tab content -->
|
||||
<div class="tab-pane active" id="control-sidebar-home-tab">
|
||||
<h3 class="control-sidebar-heading">近期活动</h3>
|
||||
<ul class="control-sidebar-menu">
|
||||
<li>
|
||||
<a href="javascript::;">
|
||||
<i class="menu-icon fa fa-birthday-cake bg-red"></i>
|
||||
<div class="menu-info">
|
||||
<h4 class="control-sidebar-subheading">张三今天过生日</h4>
|
||||
<p>2015-09-10</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript::;">
|
||||
<i class="menu-icon fa fa-user bg-yellow"></i>
|
||||
<div class="menu-info">
|
||||
<h4 class="control-sidebar-subheading">Frodo 更新了资料</h4>
|
||||
<p>更新手机号码 +1(800)555-1234</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript::;">
|
||||
<i class="menu-icon fa fa-envelope-o bg-light-blue"></i>
|
||||
<div class="menu-info">
|
||||
<h4 class="control-sidebar-subheading">Nora 加入邮件列表</h4>
|
||||
<p>nora@example.com</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript::;">
|
||||
<i class="menu-icon fa fa-file-code-o bg-green"></i>
|
||||
<div class="menu-info">
|
||||
<h4 class="control-sidebar-subheading">001号定时作业调度</h4>
|
||||
<p>5秒前执行</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- /.control-sidebar-menu -->
|
||||
</div>
|
||||
<!-- /.tab-pane -->
|
||||
|
||||
<!-- Settings tab content -->
|
||||
<div class="tab-pane" id="control-sidebar-settings-tab">
|
||||
<form method="post">
|
||||
<h3 class="control-sidebar-heading">个人设置</h3>
|
||||
<div class="form-group">
|
||||
<label class="control-sidebar-subheading"> 左侧菜单自适应
|
||||
<input type="checkbox" class="pull-right" checked>
|
||||
</label>
|
||||
<p>左侧菜单栏样式自适应</p>
|
||||
</div>
|
||||
<!-- /.form-group -->
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<!-- /.tab-pane -->
|
||||
</div>
|
||||
</aside>
|
||||
<!-- /.control-sidebar -->
|
||||
<!-- Add the sidebar's background. This div must be placed immediately after the control sidebar -->
|
||||
<div class="control-sidebar-bg"></div>
|
||||
</#macro>
|
||||
|
||||
<#macro commonFooter >
|
||||
<footer class="main-footer">
|
||||
Powered by <b>XXL-JOB</b> ${I18n.admin_version}
|
||||
<div class="pull-right hidden-xs">
|
||||
<strong>Copyright © 2015-${.now?string('yyyy')}
|
||||
<a href="https://www.xuxueli.com/" target="_blank" >xuxueli</a>
|
||||
|
||||
<a href="https://github.com/xuxueli/xxl-job" target="_blank" >github</a>
|
||||
</strong><!-- All rights reserved. -->
|
||||
</div>
|
||||
</footer>
|
||||
</#macro>
|
||||
@@ -0,0 +1,47 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "./common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<title>${I18n.admin_name}</title>
|
||||
</head>
|
||||
<body class="hold-transition skin-blue sidebar-mini <#if cookieMap?exists && cookieMap["xxljob_adminlte_settings"]?exists && "off" == cookieMap["xxljob_adminlte_settings"].value >sidebar-collapse</#if> ">
|
||||
<div class="wrapper">
|
||||
<!-- header -->
|
||||
<@netCommon.commonHeader />
|
||||
<!-- left -->
|
||||
<@netCommon.commonLeft "help" />
|
||||
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<section class="content-header">
|
||||
<h1>${I18n.job_help}</h1>
|
||||
</section>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
<div class="callout callout-info">
|
||||
<h4>${I18n.admin_name_full}</h4>
|
||||
<br>
|
||||
<p>
|
||||
<a target="_blank" href="https://github.com/xuxueli/xxl-job">Github</a>
|
||||
<iframe src="https://ghbtns.com/github-btn.html?user=xuxueli&repo=xxl-job&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px" style="margin-bottom:-5px;"></iframe>
|
||||
<br><br>
|
||||
<a target="_blank" href="https://www.xuxueli.com/xxl-job/">${I18n.job_help_document}</a>
|
||||
<br><br>
|
||||
|
||||
</p>
|
||||
<p></p>
|
||||
</div>
|
||||
</section>
|
||||
<!-- /.content -->
|
||||
</div>
|
||||
<!-- /.content-wrapper -->
|
||||
|
||||
<!-- footer -->
|
||||
<@netCommon.commonFooter />
|
||||
</div>
|
||||
<@netCommon.commonScript />
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,147 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "./common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<!-- daterangepicker -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css">
|
||||
<title>${I18n.admin_name}</title>
|
||||
</head>
|
||||
<body class="hold-transition skin-blue sidebar-mini <#if cookieMap?exists && cookieMap["xxljob_adminlte_settings"]?exists && "off" == cookieMap["xxljob_adminlte_settings"].value >sidebar-collapse</#if> ">
|
||||
<div class="wrapper">
|
||||
<!-- header -->
|
||||
<@netCommon.commonHeader />
|
||||
<!-- left -->
|
||||
<@netCommon.commonLeft "index" />
|
||||
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<section class="content-header">
|
||||
<h1>${I18n.job_dashboard_name}</h1>
|
||||
<!--
|
||||
<h1>运行报表<small>任务调度中心</small></h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><a><i class="fa fa-dashboard"></i>调度中心</a></li>
|
||||
<li class="active">使用教程</li>
|
||||
</ol>
|
||||
-->
|
||||
</section>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
|
||||
<!-- 任务信息 -->
|
||||
<div class="row">
|
||||
|
||||
<#-- 任务信息 -->
|
||||
<div class="col-md-4 col-sm-6 col-xs-12">
|
||||
<div class="info-box bg-aqua">
|
||||
<span class="info-box-icon"><i class="fa fa-flag-o"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">${I18n.job_dashboard_job_num}</span>
|
||||
<span class="info-box-number">${jobInfoCount}</span>
|
||||
|
||||
<div class="progress">
|
||||
<div class="progress-bar" style="width: 100%"></div>
|
||||
</div>
|
||||
<span class="progress-description">${I18n.job_dashboard_job_num_tip}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<#-- 调度信息 -->
|
||||
<div class="col-md-4 col-sm-6 col-xs-12" >
|
||||
<div class="info-box bg-yellow">
|
||||
<span class="info-box-icon"><i class="fa fa-calendar"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">${I18n.job_dashboard_trigger_num}</span>
|
||||
<span class="info-box-number">${jobLogCount}</span>
|
||||
|
||||
<div class="progress">
|
||||
<div class="progress-bar" style="width: 100%" ></div>
|
||||
</div>
|
||||
<span class="progress-description">
|
||||
${I18n.job_dashboard_trigger_num_tip}
|
||||
<#--<#if jobLogCount gt 0>
|
||||
调度成功率:${(jobLogSuccessCount*100/jobLogCount)?string("0.00")}<small>%</small>
|
||||
</#if>-->
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<#-- 执行器 -->
|
||||
<div class="col-md-4 col-sm-6 col-xs-12">
|
||||
<div class="info-box bg-green">
|
||||
<span class="info-box-icon"><i class="fa ion-ios-settings-strong"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">${I18n.job_dashboard_jobgroup_num}</span>
|
||||
<span class="info-box-number">${executorCount}</span>
|
||||
|
||||
<div class="progress">
|
||||
<div class="progress-bar" style="width: 100%"></div>
|
||||
</div>
|
||||
<span class="progress-description">${I18n.job_dashboard_jobgroup_num_tip}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<#-- 调度报表:时间区间筛选,左侧折线图 + 右侧饼图 -->
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">${I18n.job_dashboard_report}</h3>
|
||||
<#--<input type="text" class="form-control" id="filterTime" readonly >-->
|
||||
|
||||
<!-- tools box -->
|
||||
<div class="pull-right box-tools">
|
||||
<button type="button" class="btn btn-primary btn-sm daterange pull-right" data-toggle="tooltip" id="filterTime" >
|
||||
<i class="fa fa-calendar"></i>
|
||||
</button>
|
||||
<#--<button type="button" class="btn btn-primary btn-sm pull-right" data-widget="collapse" data-toggle="tooltip" title="" style="margin-right: 5px;" data-original-title="Collapse">
|
||||
<i class="fa fa-minus"></i>
|
||||
</button>-->
|
||||
</div>
|
||||
<!-- /. tools -->
|
||||
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<#-- 左侧折线图 -->
|
||||
<div class="col-md-8">
|
||||
<div id="lineChart" style="height: 350px;"></div>
|
||||
</div>
|
||||
<#-- 右侧饼图 -->
|
||||
<div class="col-md-4">
|
||||
<div id="pieChart" style="height: 350px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
<!-- /.content -->
|
||||
</div>
|
||||
<!-- /.content-wrapper -->
|
||||
|
||||
<!-- footer -->
|
||||
<@netCommon.commonFooter />
|
||||
</div>
|
||||
<@netCommon.commonScript />
|
||||
<!-- daterangepicker -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/moment/moment.min.js"></script>
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js"></script>
|
||||
<#-- echarts -->
|
||||
<script src="${request.contextPath}/static/plugins/echarts/echarts.common.min.js"></script>
|
||||
<script src="${request.contextPath}/static/js/index.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,164 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "../common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/plugins/codemirror/lib/codemirror.css">
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/plugins/codemirror/addon/hint/show-hint.css">
|
||||
<title>${I18n.admin_name}</title>
|
||||
<style type="text/css">
|
||||
.CodeMirror {
|
||||
font-size:16px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
/*bottom: 0;
|
||||
top: 0px;*/
|
||||
position: absolute;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="skin-blue fixed layout-top-nav">
|
||||
|
||||
<div class="wrapper">
|
||||
|
||||
<header class="main-header">
|
||||
<nav class="navbar navbar-static-top">
|
||||
<div class="container">
|
||||
<#-- icon -->
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand"><b>Web</b>IDE</a>
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
|
||||
<i class="fa fa-bars"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<#-- left nav -->
|
||||
<div class="collapse navbar-collapse pull-left" id="navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active" ><a href="javascript:;">
|
||||
<span class="sr-only">(current)</span>
|
||||
【<#list GlueTypeEnum as item><#if item == jobInfo.glueType>${item.desc}</#if></#list>】
|
||||
${jobInfo.jobDesc}
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<#-- right nav -->
|
||||
<div class="navbar-custom-menu">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">${I18n.jobinfo_glue_rollback} <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li <#if jobLogGlues?exists && jobLogGlues?size gt 0 >style="display: none;"</#if> >
|
||||
<a href="javascript:;" class="source_version" version="version_now" glueType="${jobInfo.glueType}" >
|
||||
<#list GlueTypeEnum as item><#if item == jobInfo.glueType>${item.desc}</#if></#list>: ${jobInfo.glueRemark}
|
||||
</a>
|
||||
</li>
|
||||
<textarea id="version_now" style="display:none;" >${jobInfo.glueSource}</textarea>
|
||||
<#if jobLogGlues?exists && jobLogGlues?size gt 0 >
|
||||
<#list jobLogGlues as glue>
|
||||
<li>
|
||||
<a href="javascript:;" class="source_version" version="version_${glue.id}" glueType="${glue.glueType}" >
|
||||
<#list GlueTypeEnum as item><#if item == glue.glueType>${item.desc}</#if></#list>: ${glue.glueRemark}
|
||||
</a>
|
||||
</li>
|
||||
<textarea id="version_${glue.id}" style="display:none;" >${glue.glueSource}</textarea>
|
||||
</#list>
|
||||
</#if>
|
||||
</ul>
|
||||
</li>
|
||||
<li id="save" >
|
||||
<a href="javascript:;" >
|
||||
<i class="fa fa-fw fa-save" ></i>
|
||||
${I18n.system_save}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:window.close();" >
|
||||
<i class="fa fa-fw fa-close" ></i>
|
||||
${I18n.system_close}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<div class="content-wrapper" id="ideWindow" ></div>
|
||||
|
||||
<!-- footer -->
|
||||
<#--<@netCommon.commonFooter />-->
|
||||
</div>
|
||||
|
||||
<!-- 保存.模态框 -->
|
||||
<div class="modal fade" id="saveModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog ">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" ><i class="fa fa-fw fa-save"></i>${I18n.system_save}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_glue_remark}<font color="red">*</font></label>
|
||||
<div class="col-sm-10"><input type="text" class="form-control" id="glueRemark" placeholder="${I18n.system_please_input}${I18n.jobinfo_glue_remark}" maxlength="64" ></div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="button" class="btn btn-primary ok" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<@netCommon.commonScript />
|
||||
|
||||
|
||||
<#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" />
|
||||
<#assign glueTypeIdeMode = "text/x-java" />
|
||||
|
||||
<#if jobInfo.glueType == "GLUE_GROOVY" >
|
||||
<#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" />
|
||||
<#assign glueTypeIdeMode = "text/x-java" />
|
||||
<#elseif jobInfo.glueType == "GLUE_SHELL" >
|
||||
<#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/shell/shell.js" />
|
||||
<#assign glueTypeIdeMode = "text/x-sh" />
|
||||
<#elseif jobInfo.glueType == "GLUE_PYTHON" >
|
||||
<#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/python/python.js" />
|
||||
<#assign glueTypeIdeMode = "text/x-python" />
|
||||
<#elseif jobInfo.glueType == "GLUE_PHP" >
|
||||
<#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/php/php.js" />
|
||||
<#assign glueTypeIdeMode = "text/x-php" />
|
||||
<#assign glueTypeModeSrc02 = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" />
|
||||
<#elseif jobInfo.glueType == "GLUE_NODEJS" >
|
||||
<#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/javascript/javascript.js" />
|
||||
<#assign glueTypeIdeMode = "text/javascript" />
|
||||
<#elseif jobInfo.glueType == "GLUE_POWERSHELL" >
|
||||
<#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/powershell/powershell.js" />
|
||||
<#assign glueTypeIdeMode = "powershell" />
|
||||
</#if>
|
||||
|
||||
|
||||
<script src="${request.contextPath}/static/plugins/codemirror/lib/codemirror.js"></script>
|
||||
<script src="${glueTypeModeSrc}"></script>
|
||||
<#if glueTypeModeSrc02?exists>
|
||||
<script src="${glueTypeModeSrc02}"></script>
|
||||
</#if>
|
||||
<script src="${request.contextPath}/static/plugins/codemirror/addon/hint/show-hint.js"></script>
|
||||
<script src="${request.contextPath}/static/plugins/codemirror/addon/hint/anyword-hint.js"></script>
|
||||
|
||||
<script>
|
||||
var id = '${jobInfo.id}';
|
||||
var ideMode = '${glueTypeIdeMode}';
|
||||
</script>
|
||||
<script src="${request.contextPath}/static/js/jobcode.index.1.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,172 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "../common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<!-- DataTables -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
|
||||
<title>${I18n.admin_name}</title>
|
||||
</head>
|
||||
<body class="hold-transition skin-blue sidebar-mini <#if cookieMap?exists && cookieMap["xxljob_adminlte_settings"]?exists && "off" == cookieMap["xxljob_adminlte_settings"].value >sidebar-collapse</#if> ">
|
||||
<div class="wrapper">
|
||||
<!-- header -->
|
||||
<@netCommon.commonHeader />
|
||||
<!-- left -->
|
||||
<@netCommon.commonLeft "jobgroup" />
|
||||
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<section class="content-header">
|
||||
<h1>${I18n.jobgroup_name}</h1>
|
||||
</section>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">AppName</span>
|
||||
<input type="text" class="form-control" id="appname" placeholder="${I18n.system_please_input}AppName" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">${I18n.jobgroup_field_title}</span>
|
||||
<input type="text" class="form-control" id="title" placeholder="${I18n.jobgroup_field_title}" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<button class="btn btn-block btn-info" id="searchBtn">${I18n.system_search}</button>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<button class="btn btn-block btn-success add" type="button">${I18n.jobinfo_field_add}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="box">
|
||||
<div class="box-body">
|
||||
<table id="jobgroup_list" class="table table-bordered table-striped display" width="100%" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th name="id" >ID</th>
|
||||
<th name="appname" >AppName</th>
|
||||
<th name="title" >${I18n.jobgroup_field_title}</th>
|
||||
<th name="addressType" >${I18n.jobgroup_field_addressType}</th>
|
||||
<th name="registryList" >OnLine ${I18n.jobgroup_field_registryList}</th>
|
||||
<th>${I18n.system_opt}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- 新增.模态框 -->
|
||||
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog ">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.jobgroup_add}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label>
|
||||
<div class="col-sm-10"><input type="text" class="form-control" name="appname" placeholder="${I18n.system_please_input}AppName" maxlength="64" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobgroup_field_title}<font color="red">*</font></label>
|
||||
<div class="col-sm-10"><input type="text" class="form-control" name="title" placeholder="${I18n.system_please_input}${I18n.jobgroup_field_title}" maxlength="12" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobgroup_field_addressType}<font color="red">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" name="addressType" value="0" checked />${I18n.jobgroup_field_addressType_0}
|
||||
|
||||
<input type="radio" name="addressType" value="1" />${I18n.jobgroup_field_addressType_1}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobgroup_field_registryList}<font color="red">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="textarea" name="addressList" maxlength="20000" placeholder="${I18n.jobgroup_field_registryList_placeholder}" readonly="readonly" style="background-color:#eee; width: 100%; height: 100px; font-size: 14px; line-height: 15px; border: 1px solid #dddddd; padding: 5px;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="submit" class="btn btn-primary" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 更新.模态框 -->
|
||||
<div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog ">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.jobgroup_edit}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label>
|
||||
<div class="col-sm-10"><input type="text" class="form-control" name="appname" placeholder="${I18n.system_please_input}AppName" maxlength="64" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobgroup_field_title}<font color="red">*</font></label>
|
||||
<div class="col-sm-10"><input type="text" class="form-control" name="title" placeholder="${I18n.system_please_input}${I18n.jobgroup_field_title}" maxlength="12" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobgroup_field_addressType}<font color="red">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" name="addressType" value="0" />${I18n.jobgroup_field_addressType_0}
|
||||
|
||||
<input type="radio" name="addressType" value="1" />${I18n.jobgroup_field_addressType_1}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobgroup_field_registryList}<font color="red">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="textarea" name="addressList" maxlength="20000" placeholder="${I18n.jobgroup_field_registryList_placeholder}" readonly="readonly" style="background-color:#eee; width: 100%; height: 100px; font-size: 14px; line-height: 15px; border: 1px solid #dddddd; padding: 5px;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="submit" class="btn btn-primary" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
<input type="hidden" name="id" >
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- footer -->
|
||||
<@netCommon.commonFooter />
|
||||
</div>
|
||||
|
||||
<@netCommon.commonScript />
|
||||
<!-- DataTables -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
|
||||
<script src="${request.contextPath}/static/js/jobgroup.index.1.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,540 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "../common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<!-- DataTables -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
|
||||
<title>${I18n.admin_name}</title>
|
||||
</head>
|
||||
<body class="hold-transition skin-blue sidebar-mini <#if cookieMap?exists && cookieMap["xxljob_adminlte_settings"]?exists && "off" == cookieMap["xxljob_adminlte_settings"].value >sidebar-collapse</#if>">
|
||||
<div class="wrapper">
|
||||
<!-- header -->
|
||||
<@netCommon.commonHeader />
|
||||
<!-- left -->
|
||||
<@netCommon.commonLeft "jobinfo" />
|
||||
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<section class="content-header">
|
||||
<h1>${I18n.jobinfo_name}</h1>
|
||||
</section>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">${I18n.jobinfo_field_jobgroup}</span>
|
||||
<select class="form-control" id="jobGroup" >
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group.id}" <#if jobGroup==group.id>selected</#if> >${group.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<div class="input-group">
|
||||
<select class="form-control" id="triggerStatus" >
|
||||
<option value="-1" >${I18n.system_all}</option>
|
||||
<option value="0" >${I18n.jobinfo_opt_stop}</option>
|
||||
<option value="1" >${I18n.jobinfo_opt_start}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="jobDesc" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_jobdesc}" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="executorHandler" placeholder="${I18n.system_please_input}JobHandler" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="author" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_author}" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<button class="btn btn-block btn-info" id="searchBtn">${I18n.system_search}</button>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<button class="btn btn-block btn-success add" type="button">${I18n.jobinfo_field_add}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="box">
|
||||
<#--<div class="box-header hide">
|
||||
<h3 class="box-title">调度列表</h3>
|
||||
</div>-->
|
||||
<div class="box-body" >
|
||||
<table id="job_list" class="table table-bordered table-striped" width="100%" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th name="id" >${I18n.jobinfo_field_id}</th>
|
||||
<th name="jobGroup" >${I18n.jobinfo_field_jobgroup}</th>
|
||||
<th name="jobDesc" >${I18n.jobinfo_field_jobdesc}</th>
|
||||
<th name="scheduleType" >${I18n.schedule_type}</th>
|
||||
<th name="glueType" >${I18n.jobinfo_field_gluetype}</th>
|
||||
<th name="executorParam" >${I18n.jobinfo_field_executorparam}</th>
|
||||
<th name="addTime" >addTime</th>
|
||||
<th name="updateTime" >updateTime</th>
|
||||
<th name="author" >${I18n.jobinfo_field_author}</th>
|
||||
<th name="alarmEmail" >${I18n.jobinfo_field_alarmemail}</th>
|
||||
<th name="triggerStatus" >${I18n.system_status}</th>
|
||||
<th>${I18n.system_opt}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
<tfoot></tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- footer -->
|
||||
<@netCommon.commonFooter />
|
||||
</div>
|
||||
|
||||
<!-- job新增.模态框 -->
|
||||
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.jobinfo_field_add}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
|
||||
<p style="margin: 0 0 10px;text-align: left;border-bottom: 1px solid #e5e5e5;color: gray;">${I18n.jobinfo_conf_base}</p> <#-- 基础信息 -->
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_jobgroup}<font color="red">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="jobGroup" >
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group.id}" <#if jobGroup==group.id>selected</#if> >${group.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_jobdesc}<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_jobdesc}" maxlength="50" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_author}<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_author}" maxlength="50" ></div>
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_alarmemail}<font color="black">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="${I18n.jobinfo_field_alarmemail_placeholder}" maxlength="100" ></div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<p style="margin: 0 0 10px;text-align: left;border-bottom: 1px solid #e5e5e5;color: gray;">${I18n.jobinfo_conf_schedule}</p> <#-- 调度 -->
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.schedule_type}<font color="red">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control scheduleType" name="scheduleType" >
|
||||
<#list ScheduleTypeEnum as item>
|
||||
<option value="${item}" <#if 'CRON' == item >selected</#if> >${item.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="scheduleConf" />
|
||||
<div class="schedule_conf schedule_conf_NONE" style="display: none" >
|
||||
</div>
|
||||
<div class="schedule_conf schedule_conf_CRON" >
|
||||
<label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="schedule_conf_CRON" placeholder="${I18n.system_please_input}Cron" maxlength="128" ></div>
|
||||
</div>
|
||||
<div class="schedule_conf schedule_conf_FIX_RATE" style="display: none" >
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.schedule_type_fix_rate}<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="schedule_conf_FIX_RATE" placeholder="${I18n.system_please_input} ( Second )" maxlength="10" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ></div>
|
||||
</div>
|
||||
<div class="schedule_conf schedule_conf_FIX_DELAY" style="display: none" >
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.schedule_type_fix_delay}<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="schedule_conf_FIX_DELAY" placeholder="${I18n.system_please_input} ( Second )" maxlength="10" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<p style="margin: 0 0 10px;text-align: left;border-bottom: 1px solid #e5e5e5;color: gray;">${I18n.jobinfo_conf_job}</p> <#-- 任务配置 -->
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_gluetype}<font color="red">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control glueType" name="glueType" >
|
||||
<#list GlueTypeEnum as item>
|
||||
<option value="${item}" >${item.desc}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
<label for="firstname" class="col-sm-2 control-label">JobHandler<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="executorHandler" placeholder="${I18n.system_please_input}JobHandler" maxlength="100" ></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorparam}<font color="black">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="textarea form-control" name="executorParam" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_executorparam}" maxlength="512" style="height: 63px; line-height: 1.2;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<p style="margin: 0 0 10px;text-align: left;border-bottom: 1px solid #e5e5e5;color: gray;">${I18n.jobinfo_conf_advanced}</p> <#-- 高级配置 -->
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorRouteStrategy}<font color="black">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="executorRouteStrategy" >
|
||||
<#list ExecutorRouteStrategyEnum as item>
|
||||
<option value="${item}" >${item.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_childJobId}<font color="black">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="childJobId" placeholder="${I18n.jobinfo_field_childJobId_placeholder}" maxlength="100" ></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.misfire_strategy}<font color="black">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="misfireStrategy" >
|
||||
<#list MisfireStrategyEnum as item>
|
||||
<option value="${item}" <#if 'DO_NOTHING' == item >selected</#if> >${item.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorBlockStrategy}<font color="black">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="executorBlockStrategy" >
|
||||
<#list ExecutorBlockStrategyEnum as item>
|
||||
<option value="${item}" >${item.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_timeout}<font color="black">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="executorTimeout" placeholder="${I18n.jobinfo_field_executorTimeout_placeholder}" maxlength="6" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ></div>
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorFailRetryCount}<font color="black">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="executorFailRetryCount" placeholder="${I18n.jobinfo_field_executorFailRetryCount_placeholder}" maxlength="4" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ></div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="submit" class="btn btn-primary" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="glueRemark" value="GLUE代码初始化" >
|
||||
<textarea name="glueSource" style="display:none;" ></textarea>
|
||||
<textarea class="glueSource_java" style="display:none;" >
|
||||
package com.xxl.job.service.handler;
|
||||
|
||||
import com.xxl.job.core.context.XxlJobHelper;
|
||||
import com.xxl.job.core.handler.IJobHandler;
|
||||
|
||||
public class DemoGlueJobHandler extends IJobHandler {
|
||||
|
||||
@Override
|
||||
public void execute() throws Exception {
|
||||
XxlJobHelper.log("XXL-JOB, Hello World.");
|
||||
}
|
||||
|
||||
}
|
||||
</textarea>
|
||||
<textarea class="glueSource_shell" style="display:none;" >
|
||||
#!/bin/bash
|
||||
echo "xxl-job: hello shell"
|
||||
|
||||
echo "${I18n.jobinfo_script_location}:$0"
|
||||
echo "${I18n.jobinfo_field_executorparam}:$1"
|
||||
echo "${I18n.jobinfo_shard_index} = $2"
|
||||
echo "${I18n.jobinfo_shard_total} = $3"
|
||||
<#--echo "参数数量:$#"
|
||||
for param in $*
|
||||
do
|
||||
echo "参数 : $param"
|
||||
sleep 1s
|
||||
done-->
|
||||
|
||||
echo "Good bye!"
|
||||
exit 0
|
||||
</textarea>
|
||||
<textarea class="glueSource_python" style="display:none;" >
|
||||
#!/usr/bin/python
|
||||
# -*- coding: UTF-8 -*-
|
||||
import time
|
||||
import sys
|
||||
|
||||
print "xxl-job: hello python"
|
||||
|
||||
print "${I18n.jobinfo_script_location}:", sys.argv[0]
|
||||
print "${I18n.jobinfo_field_executorparam}:", sys.argv[1]
|
||||
print "${I18n.jobinfo_shard_index}:", sys.argv[2]
|
||||
print "${I18n.jobinfo_shard_total}:", sys.argv[3]
|
||||
<#--for i in range(1, len(sys.argv)):
|
||||
time.sleep(1)
|
||||
print "参数", i, sys.argv[i]-->
|
||||
|
||||
print "Good bye!"
|
||||
exit(0)
|
||||
<#--
|
||||
import logging
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logging.info("脚本文件:" + sys.argv[0])
|
||||
-->
|
||||
</textarea>
|
||||
<#--这里有问题,新建一个运行模式为 php 的任务后,GLUE 中没有下边的 php 代码-->
|
||||
<textarea class="glueSource_php" style="display:none;" >
|
||||
<?php
|
||||
|
||||
echo "xxl-job: hello php \n";
|
||||
|
||||
echo "${I18n.jobinfo_script_location}:$argv[0] \n";
|
||||
echo "${I18n.jobinfo_field_executorparam}:$argv[1] \n";
|
||||
echo "${I18n.jobinfo_shard_index} = $argv[2] \n";
|
||||
echo "${I18n.jobinfo_shard_total} = $argv[3] \n";
|
||||
|
||||
echo "Good bye! \n";
|
||||
exit(0);
|
||||
|
||||
?>
|
||||
</textarea>
|
||||
<textarea class="glueSource_nodejs" style="display:none;" >
|
||||
#!/usr/bin/env node
|
||||
console.log("xxl-job: hello nodejs")
|
||||
|
||||
var arguments = process.argv
|
||||
|
||||
console.log("${I18n.jobinfo_script_location}: " + arguments[1])
|
||||
console.log("${I18n.jobinfo_field_executorparam}: " + arguments[2])
|
||||
console.log("${I18n.jobinfo_shard_index}: " + arguments[3])
|
||||
console.log("${I18n.jobinfo_shard_total}: " + arguments[4])
|
||||
<#--for (var i = 2; i < arguments.length; i++){
|
||||
console.log("参数 %s = %s", (i-1), arguments[i]);
|
||||
}-->
|
||||
|
||||
console.log("Good bye!")
|
||||
process.exit(0)
|
||||
</textarea>
|
||||
<textarea class="glueSource_powershell" style="display:none;" >
|
||||
Write-Host "xxl-job: hello powershell"
|
||||
|
||||
Write-Host "${I18n.jobinfo_script_location}: " $MyInvocation.MyCommand.Definition
|
||||
Write-Host "${I18n.jobinfo_field_executorparam}: "
|
||||
if ($args.Count -gt 2) { $args[0..($args.Count-3)] }
|
||||
Write-Host "${I18n.jobinfo_shard_index}: " $args[$args.Count-2]
|
||||
Write-Host "${I18n.jobinfo_shard_total}: " $args[$args.Count-1]
|
||||
|
||||
Write-Host "Good bye!"
|
||||
exit 0
|
||||
</textarea>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 更新.模态框 -->
|
||||
<div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.jobinfo_field_update}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
|
||||
<p style="margin: 0 0 10px;text-align: left;border-bottom: 1px solid #e5e5e5;color: gray;">${I18n.jobinfo_conf_base}</p> <#-- 基础信息 -->
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_jobgroup}<font color="red">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="jobGroup" >
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group.id}" >${group.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_jobdesc}<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_jobdesc}" maxlength="50" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_author}<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="author" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_author}" maxlength="50" ></div>
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_alarmemail}<font color="black">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="alarmEmail" placeholder="${I18n.jobinfo_field_alarmemail_placeholder}" maxlength="100" ></div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<p style="margin: 0 0 10px;text-align: left;border-bottom: 1px solid #e5e5e5;color: gray;">${I18n.jobinfo_conf_schedule}</p> <#-- 调度配置 -->
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.schedule_type}<font color="red">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control scheduleType" name="scheduleType" >
|
||||
<#list ScheduleTypeEnum as item>
|
||||
<option value="${item}" >${item.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="scheduleConf" />
|
||||
<div class="schedule_conf schedule_conf_NONE" style="display: none" >
|
||||
</div>
|
||||
<div class="schedule_conf schedule_conf_CRON" >
|
||||
<label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="schedule_conf_CRON" placeholder="${I18n.system_please_input}Cron" maxlength="128" ></div>
|
||||
</div>
|
||||
<div class="schedule_conf schedule_conf_FIX_RATE" style="display: none" >
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.schedule_type_fix_rate}<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="schedule_conf_FIX_RATE" placeholder="${I18n.system_please_input} ( Second )" maxlength="10" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ></div>
|
||||
</div>
|
||||
<div class="schedule_conf schedule_conf_FIX_DELAY" style="display: none" >
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.schedule_type_fix_delay}<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="schedule_conf_FIX_DELAY" placeholder="${I18n.system_please_input} ( Second )" maxlength="10" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<p style="margin: 0 0 10px;text-align: left;border-bottom: 1px solid #e5e5e5;color: gray;">${I18n.jobinfo_conf_job}</p> <#-- 任务配置 -->
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_gluetype}<font color="red">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control glueType" name="glueType" disabled >
|
||||
<#list GlueTypeEnum as item>
|
||||
<option value="${item}" >${item.desc}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
<label for="firstname" class="col-sm-2 control-label">JobHandler<font color="red">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="executorHandler" placeholder="${I18n.system_please_input}JobHandler" maxlength="100" ></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorparam}<font color="black">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="textarea form-control" name="executorParam" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_executorparam}" maxlength="512" style="height: 63px; line-height: 1.2;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<p style="margin: 0 0 10px;text-align: left;border-bottom: 1px solid #e5e5e5;color: gray;">${I18n.jobinfo_conf_advanced}</p> <#-- 高级配置 -->
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorRouteStrategy}<font color="red">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="executorRouteStrategy" >
|
||||
<#list ExecutorRouteStrategyEnum as item>
|
||||
<option value="${item}" >${item.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_childJobId}<font color="black">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="childJobId" placeholder="${I18n.jobinfo_field_childJobId_placeholder}" maxlength="100" ></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.misfire_strategy}<font color="black">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="misfireStrategy" >
|
||||
<#list MisfireStrategyEnum as item>
|
||||
<option value="${item}" <#if 'DO_NOTHING' == item >selected</#if> >${item.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorBlockStrategy}<font color="red">*</font></label>
|
||||
<div class="col-sm-4">
|
||||
<select class="form-control" name="executorBlockStrategy" >
|
||||
<#list ExecutorBlockStrategyEnum as item>
|
||||
<option value="${item}" >${item.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_timeout}<font color="black">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="executorTimeout" placeholder="${I18n.jobinfo_field_executorTimeout_placeholder}" maxlength="6" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ></div>
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorFailRetryCount}<font color="black">*</font></label>
|
||||
<div class="col-sm-4"><input type="text" class="form-control" name="executorFailRetryCount" placeholder="${I18n.jobinfo_field_executorFailRetryCount_placeholder}" maxlength="4" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ></div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="submit" class="btn btn-primary" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
<input type="hidden" name="id" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<#-- trigger -->
|
||||
<div class="modal fade" id="jobTriggerModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog ">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.jobinfo_opt_run}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobinfo_field_executorparam}<font color="black">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="textarea form-control" name="executorParam" placeholder="${I18n.system_please_input}${I18n.jobinfo_field_executorparam}" maxlength="512" style="height: 63px; line-height: 1.2;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="firstname" class="col-sm-2 control-label">${I18n.jobgroup_field_registryList}<font color="black">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="textarea form-control" name="addressList" placeholder="${I18n.jobinfo_opt_run_tips}" maxlength="512" style="height: 63px; line-height: 1.2;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="button" class="btn btn-primary ok" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
<input type="hidden" name="id" >
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<@netCommon.commonScript />
|
||||
<!-- DataTables -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
|
||||
<!-- moment -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/moment/moment.min.js"></script>
|
||||
<#-- cronGen -->
|
||||
<script src="${request.contextPath}/static/plugins/cronGen/cronGen<#if I18n.admin_i18n?default('')?length gt 0 >_${I18n.admin_i18n}</#if>.js"></script>
|
||||
<script src="${request.contextPath}/static/js/jobinfo.index.1.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "../common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<title>${I18n.admin_name}</title>
|
||||
</head>
|
||||
<body class="hold-transition skin-blue layout-top-nav">
|
||||
|
||||
<div class="wrapper">
|
||||
|
||||
<header class="main-header">
|
||||
<nav class="navbar navbar-static-top">
|
||||
<div class="container">
|
||||
<#-- icon -->
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand"><b>${I18n.joblog_rolling_log}</b> Console</a>
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
|
||||
<i class="fa fa-bars"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<#-- left nav -->
|
||||
<div class="collapse navbar-collapse pull-left" id="navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<#--<li class="active" ><a href="javascript:;">任务:<span class="sr-only">(current)</span></a></li>-->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<#-- right nav -->
|
||||
<div class="navbar-custom-menu">
|
||||
<ul class="nav navbar-nav">
|
||||
<li>
|
||||
<a href="javascript:window.location.reload();" >
|
||||
<i class="fa fa-fw fa-refresh" ></i>
|
||||
${I18n.joblog_rolling_log_refresh}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<div class="content-wrapper" >
|
||||
<section class="content">
|
||||
<pre style="font-size:12px;position:relative;" >
|
||||
<div id="logConsole"></div>
|
||||
<li class="fa fa-refresh fa-spin" style="font-size: 20px;float: left;" id="logConsoleRunning" ></li>
|
||||
</pre>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- footer -->
|
||||
<@netCommon.commonFooter />
|
||||
|
||||
</div>
|
||||
|
||||
<@netCommon.commonScript />
|
||||
<script>
|
||||
// 参数
|
||||
var triggerCode = '${triggerCode}';
|
||||
var handleCode = '${handleCode}';
|
||||
var executorAddress = '${executorAddress!}';
|
||||
var triggerTime = '${triggerTime?c}';
|
||||
var logId = '${logId}';
|
||||
</script>
|
||||
<script src="${request.contextPath}/static/js/joblog.detail.1.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,180 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "../common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<!-- DataTables -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
|
||||
<!-- daterangepicker -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css">
|
||||
<title>${I18n.admin_name}</title>
|
||||
</head>
|
||||
<body class="hold-transition skin-blue sidebar-mini <#if cookieMap?exists && cookieMap["xxljob_adminlte_settings"]?exists && "off" == cookieMap["xxljob_adminlte_settings"].value >sidebar-collapse</#if> ">
|
||||
<div class="wrapper">
|
||||
<!-- header -->
|
||||
<@netCommon.commonHeader />
|
||||
<!-- left -->
|
||||
<@netCommon.commonLeft "joblog" />
|
||||
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<section class="content-header">
|
||||
<h1>${I18n.joblog_name}</h1>
|
||||
</section>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
<div class="row">
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">${I18n.jobinfo_field_jobgroup}</span>
|
||||
<select class="form-control" id="jobGroup" paramVal="<#if jobInfo?exists>${jobInfo.jobGroup}</#if>" >
|
||||
<#if Request["XXL_JOB_LOGIN_IDENTITY"].role == 1>
|
||||
<option value="0" >${I18n.system_all}</option> <#-- 仅管理员支持查询全部;普通用户仅支持查询有权限的 jobGroup -->
|
||||
</#if>
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group.id}" >${group.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">${I18n.jobinfo_job}</span>
|
||||
<select class="form-control" id="jobId" paramVal="<#if jobInfo?exists>${jobInfo.id}</#if>" >
|
||||
<option value="0" >${I18n.system_all}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">${I18n.joblog_status}</span>
|
||||
<select class="form-control" id="logStatus" >
|
||||
<option value="-1" >${I18n.joblog_status_all}</option>
|
||||
<option value="1" >${I18n.joblog_status_suc}</option>
|
||||
<option value="2" >${I18n.joblog_status_fail}</option>
|
||||
<option value="3" >${I18n.joblog_status_running}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">
|
||||
${I18n.joblog_field_triggerTime}
|
||||
</span>
|
||||
<input type="text" class="form-control" id="filterTime" readonly >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-1">
|
||||
<button class="btn btn-block btn-info" id="searchBtn">${I18n.system_search}</button>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-1">
|
||||
<button class="btn btn-block btn-default" id="clearLog">${I18n.joblog_clean}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="box">
|
||||
<#--<div class="box-header hide"><h3 class="box-title">调度日志</h3></div>-->
|
||||
<div class="box-body">
|
||||
<table id="joblog_list" class="table table-bordered table-striped display" width="100%" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th name="jobId" >${I18n.jobinfo_field_id}</th>
|
||||
<th name="jobGroup" >jobGroup</th>
|
||||
<#--<th name="executorAddress" >执行器地址</th>
|
||||
<th name="glueType" >运行模式</th>
|
||||
<th name="executorParam" >任务参数</th>-->
|
||||
<th name="triggerTime" >${I18n.joblog_field_triggerTime}</th>
|
||||
<th name="triggerCode" >${I18n.joblog_field_triggerCode}</th>
|
||||
<th name="triggerMsg" >${I18n.joblog_field_triggerMsg}</th>
|
||||
<th name="handleTime" >${I18n.joblog_field_handleTime}</th>
|
||||
<th name="handleCode" >${I18n.joblog_field_handleCode}</th>
|
||||
<th name="handleMsg" >${I18n.joblog_field_handleMsg}</th>
|
||||
<th name="handleMsg" >${I18n.system_opt}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- footer -->
|
||||
<@netCommon.commonFooter />
|
||||
</div>
|
||||
|
||||
<!-- 日志清理.模态框 -->
|
||||
<div class="modal fade" id="clearLogModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.joblog_clean_log}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${I18n.jobinfo_field_jobgroup}:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" class="form-control jobGroupText" readonly >
|
||||
<input type="hidden" name="jobGroup" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${I18n.jobinfo_job}:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" class="form-control jobIdText" readonly >
|
||||
<input type="hidden" name="jobId" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${I18n.joblog_clean_type}:</label>
|
||||
<div class="col-sm-9">
|
||||
<select class="form-control" name="type" >
|
||||
<option value="1" >${I18n.joblog_clean_type_1}</option>
|
||||
<option value="2" >${I18n.joblog_clean_type_2}</option>
|
||||
<option value="3" >${I18n.joblog_clean_type_3}</option>
|
||||
<option value="4" >${I18n.joblog_clean_type_4}</option>
|
||||
<option value="5" >${I18n.joblog_clean_type_5}</option>
|
||||
<option value="6" >${I18n.joblog_clean_type_6}</option>
|
||||
<option value="7" >${I18n.joblog_clean_type_7}</option>
|
||||
<option value="8" >${I18n.joblog_clean_type_8}</option>
|
||||
<option value="9" >${I18n.joblog_clean_type_9}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="button" class="btn btn-primary ok" >${I18n.system_ok}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<@netCommon.commonScript />
|
||||
<!-- DataTables -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
|
||||
<!-- daterangepicker -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/moment/moment.min.js"></script>
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js"></script>
|
||||
<script src="${request.contextPath}/static/js/joblog.index.1.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "./common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/plugins/iCheck/square/blue.css">
|
||||
<title>${I18n.admin_name}</title>
|
||||
</head>
|
||||
<body class="hold-transition login-page">
|
||||
<div class="login-box">
|
||||
<div class="login-logo">
|
||||
<a><b>XXL</b>JOB</a>
|
||||
</div>
|
||||
<form id="loginForm" method="post" >
|
||||
<div class="login-box-body">
|
||||
<p class="login-box-msg">${I18n.admin_name}</p>
|
||||
<div class="form-group has-feedback">
|
||||
<input type="text" name="userName" class="form-control" placeholder="${I18n.login_username_placeholder}" maxlength="18" >
|
||||
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<input type="password" name="password" class="form-control" placeholder="${I18n.login_password_placeholder}" maxlength="18" >
|
||||
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<div class="checkbox icheck">
|
||||
<label>
|
||||
<input type="checkbox" name="ifRemember" > ${I18n.login_remember_me}
|
||||
</label>
|
||||
</div>
|
||||
</div><!-- /.col -->
|
||||
<div class="col-xs-4">
|
||||
<button type="submit" class="btn btn-primary btn-block btn-flat">${I18n.login_btn}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<@netCommon.commonScript />
|
||||
<script src="${request.contextPath}/static/adminlte/plugins/iCheck/icheck.min.js"></script>
|
||||
<script src="${request.contextPath}/static/js/login.1.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,188 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<#import "../common/common.macro.ftl" as netCommon>
|
||||
<@netCommon.commonStyle />
|
||||
<!-- DataTables -->
|
||||
<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
|
||||
<title>${I18n.admin_name}</title>
|
||||
</head>
|
||||
<body class="hold-transition skin-blue sidebar-mini <#if cookieMap?exists && cookieMap["xxljob_adminlte_settings"]?exists && "off" == cookieMap["xxljob_adminlte_settings"].value >sidebar-collapse</#if>">
|
||||
<div class="wrapper">
|
||||
<!-- header -->
|
||||
<@netCommon.commonHeader />
|
||||
<!-- left -->
|
||||
<@netCommon.commonLeft "user" />
|
||||
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<section class="content-header">
|
||||
<h1>${I18n.user_manage}</h1>
|
||||
</section>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">${I18n.user_role}</span>
|
||||
<select class="form-control" id="role" >
|
||||
<option value="-1" >${I18n.system_all}</option>
|
||||
<option value="1" >${I18n.user_role_admin}</option>
|
||||
<option value="0" >${I18n.user_role_normal}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">${I18n.user_username}</span>
|
||||
<input type="text" class="form-control" id="username" autocomplete="on" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<button class="btn btn-block btn-info" id="searchBtn">${I18n.system_search}</button>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<button class="btn btn-block btn-success add" type="button">${I18n.user_add}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="box">
|
||||
<div class="box-body" >
|
||||
<table id="user_list" class="table table-bordered table-striped" width="100%" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th name="id" >ID</th>
|
||||
<th name="username" >${I18n.user_username}</th>
|
||||
<th name="password" >${I18n.user_password}</th>
|
||||
<th name="role" >${I18n.user_role}</th>
|
||||
<th name="permission" >${I18n.user_permission}</th>
|
||||
<th>${I18n.system_opt}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
<tfoot></tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- footer -->
|
||||
<@netCommon.commonFooter />
|
||||
</div>
|
||||
|
||||
<!-- 新增.模态框 -->
|
||||
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.user_add}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.user_username}<font color="red">*</font></label>
|
||||
<div class="col-sm-8"><input type="text" class="form-control" name="username" placeholder="${I18n.system_please_input}${I18n.user_username}" maxlength="20" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.user_password}<font color="red">*</font></label>
|
||||
<div class="col-sm-8"><input type="text" class="form-control" name="password" placeholder="${I18n.system_please_input}${I18n.user_password}" maxlength="20" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.user_role}<font color="red">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" name="role" value="0" checked />${I18n.user_role_normal}
|
||||
|
||||
<input type="radio" name="role" value="1" />${I18n.user_role_admin}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.user_permission}<font color="black">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<#if groupList?exists && groupList?size gt 0>
|
||||
<#list groupList as item>
|
||||
<input type="checkbox" name="permission" value="${item.id}" />${item.title}(${item.appname})<br>
|
||||
</#list>
|
||||
</#if>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="submit" class="btn btn-primary" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 更新.模态框 -->
|
||||
<div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" >${I18n.user_update}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.user_username}<font color="red">*</font></label>
|
||||
<div class="col-sm-8"><input type="text" class="form-control" name="username" placeholder="${I18n.system_please_input}${I18n.user_username}" maxlength="20" readonly ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.user_password}<font color="red">*</font></label>
|
||||
<div class="col-sm-8"><input type="text" class="form-control" name="password" placeholder="${I18n.user_password_update_placeholder}" maxlength="20" ></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.user_role}<font color="red">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" name="role" value="0" />${I18n.user_role_normal}
|
||||
|
||||
<input type="radio" name="role" value="1" />${I18n.user_role_admin}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">${I18n.user_permission}<font color="black">*</font></label>
|
||||
<div class="col-sm-10">
|
||||
<#if groupList?exists && groupList?size gt 0>
|
||||
<#list groupList as item>
|
||||
<input type="checkbox" name="permission" value="${item.id}" />${item.title}(${item.appname})<br>
|
||||
</#list>
|
||||
</#if>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="submit" class="btn btn-primary" >${I18n.system_save}</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">${I18n.system_cancel}</button>
|
||||
<input type="hidden" name="id" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<@netCommon.commonScript />
|
||||
<!-- DataTables -->
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||
<script src="${request.contextPath}/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
|
||||
<script src="${request.contextPath}/static/js/user.index.1.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user