You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
523 lines
25 KiB
Plaintext
523 lines
25 KiB
Plaintext
@page "/QuartzUI"
|
|
|
|
@model Estsh.Core.Quartz.Areas.MyFeature.Pages.MainModel
|
|
@{
|
|
Layout = "_JavasCriptLayout";
|
|
}
|
|
<div id="main">
|
|
<el-container>
|
|
<el-header style="padding: 0;">
|
|
<!-- 头部样式 -->
|
|
<el-menu :default-active="activeIndex" mode="horizontal" background-color="#fcfcfc">
|
|
<el-menu-item index="1">任务调度</el-menu-item>
|
|
</el-menu>
|
|
</el-header>
|
|
<el-main>
|
|
<el-row type="flex" align="middle">
|
|
<el-col :span="8">
|
|
<h4>后台任务列表</h4>
|
|
</el-col>
|
|
<el-col :span="16" style="text-align: right;">
|
|
<el-button type="primary" size="mini" icon="el-icon-plus" @@click="handleXJRW">新建任务</el-button>
|
|
<el-button type="success" size="mini" icon="el-icon-video-pause" @@click="handleZTRW">暂停任务</el-button>
|
|
<el-button type="warning" size="mini" icon="el-icon-open" @@click="handleKQRW">开启任务</el-button>
|
|
<el-button type="danger" size="mini" icon="el-icon-video-play" @@click="handleLJZX">立即执行</el-button>
|
|
<el-button type="info" size="mini" icon="el-icon-edit" @@click="handleXGRW">修改任务</el-button>
|
|
<el-button type="danger" size="mini" icon="el-icon-delete-solid" @@click="OnDeleteJobs">删除任务</el-button>
|
|
<el-button type="default" size="mini" icon="el-icon-refresh" @@click="OnLoadJobs">刷新数据</el-button>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row type="flex" align="middle">
|
|
<el-col :span="24" style="padding: 10px 0 0 0;">
|
|
<el-table ref="tb" :data="tableData" border stripe style="width: 100%;" highlight-current-row
|
|
:header-cell-style="{backgroundColor:'#F5F7FA',color:'#000000'}" @@current-change="handleSelect">
|
|
<el-table-column type="index" width="50" label="序号" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="TaskName" label="任务" width="180" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="GroupName" label="分组" width="180" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="Interval" label="间隔时间" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="ApiUrl" label="ApiUrl" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="Status" width="70" label="运行状态" align="center">
|
|
<template slot-scope="scope">
|
|
<el-tag type="info" disable-transitions v-if="scope.row.Status==4">
|
|
{{scope.row.Status|formatStatues}}
|
|
</el-tag>
|
|
<el-tag type="danger" disable-transitions v-if="scope.row.Status==5">
|
|
{{scope.row.Status|formatStatues}}
|
|
</el-tag>
|
|
<el-tag type="success" disable-transitions v-if="scope.row.Status==6">
|
|
{{scope.row.Status|formatStatues}}
|
|
</el-tag>
|
|
<el-tag type="primary" disable-transitions v-if="scope.row.Status==7">
|
|
{{scope.row.Status|formatStatues}}
|
|
</el-tag>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="LastRunTime" label="最近一次运行时间" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="Describe" label="任务描述" :show-overflow-tooltip="true" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="TaskType" label="任务类型" width="120" align="center">
|
|
<template slot-scope="scope">
|
|
{{scope.row.TaskType==1?'DLL':'API'}}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="操作" align="center">
|
|
<template slot-scope="scope">
|
|
<el-button size="mini" type="default" @@click="handleCZ(scope.$index, scope.row)">执行记录</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-col>
|
|
</el-row>
|
|
</el-main>
|
|
</el-container>
|
|
<el-dialog :title="title" :visible.sync="dialogFormVisible">
|
|
<el-row type="flex" justify="center">
|
|
<el-col :span="23">
|
|
<el-form :model="ruleForm" ref="ruleForm" label-width="10em" class="demo-ruleForm">
|
|
<el-form-item label="任务"
|
|
prop="TaskName"
|
|
:rules="rules.TaskName">
|
|
<el-input v-model="ruleForm.TaskName" placeholder="请输入任务名称"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="分组"
|
|
prop="GroupName"
|
|
:rules="rules.GroupName">
|
|
<el-input v-model="ruleForm.GroupName" placeholder="请输入分组名称"></el-input>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="间隔时间"
|
|
prop="Interval"
|
|
:rules="rules.Interval">
|
|
|
|
<el-input v-model="ruleForm.Interval"></el-input>
|
|
<p style="font-size:12px;color:red">间隔时间请输入Cron表达式<a target="_blank" href="https://qqe2.com/cron">在线生成</a></p>
|
|
</el-form-item>
|
|
<el-form-item label="任务类型"
|
|
prop="TaskType"
|
|
:rules="rules.TaskType">
|
|
<el-select v-model="ruleForm.TaskType" placeholder="请选择任务类型" @@change="taskTypeChange">
|
|
<el-option label="DLL" :value="1"></el-option>
|
|
<el-option label="API" :value="2"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="ApiUrl"
|
|
prop="ApiUrl"
|
|
:rules="rules.ApiUrl"
|
|
v-if="ruleForm.TaskType==2">
|
|
<el-input v-model="ruleForm.ApiUrl" placeholder="请输入API地址"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="API访问类型"
|
|
prop="ApiRequestType"
|
|
:rules="rules.ApiRequestType"
|
|
v-if="ruleForm.TaskType==2">
|
|
<el-select v-model="ruleForm.ApiRequestType" placeholder="请选择请求方式">
|
|
<el-option label="GET" value="GET"></el-option>
|
|
<el-option label="POST" value="POST"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="授权名"
|
|
prop="ApiAuthKey"
|
|
:rules="rules.ApiAuthKey"
|
|
v-if="ruleForm.TaskType==2">
|
|
<el-input v-model="ruleForm.ApiAuthKey" placeholder="请输入API授权名"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="授权值"
|
|
prop="ApiAuthValue"
|
|
:rules="rules.ApiAuthValue"
|
|
v-if="ruleForm.TaskType==2">
|
|
<el-input v-model="ruleForm.ApiAuthValue" placeholder="请输入API授权值"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="参数(API和DLL通用)"
|
|
prop="ApiParameter"
|
|
:rules="rules.ApiParameter">
|
|
<el-input v-model="ruleForm.ApiParameter" placeholder="请输入调用参数"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="DLL类型名"
|
|
prop="DllClassName"
|
|
:rules="rules.DllClassName"
|
|
v-if="ruleForm.TaskType==1">
|
|
<el-select v-model="ruleForm.DllClassName" placeholder="请选择DLL类型名">
|
|
<el-option label="无" value=""></el-option>
|
|
<el-option v-for="pclass in classjobs" :label="pclass" :value="pclass"></el-option>
|
|
</el-select>
|
|
@* <el-input v-model="ruleForm.DllClassName" placeholder="请输入DLL类型名"></el-input>*@
|
|
</el-form-item>
|
|
@*<el-form-item label="Dll方法名"
|
|
prop="DllActionName"
|
|
:rules="rules.DllActionName"
|
|
v-if="ruleForm.TaskType==1">
|
|
<el-input v-model="ruleForm.DllActionName" placeholder="请输入DLL方法名"></el-input>
|
|
</el-form-item>*@
|
|
<el-form-item label="任务描述" prop="Describe">
|
|
<el-input type="textarea" :rows="5" v-model="ruleForm.Describe"></el-input>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" @@click="submitForm('ruleForm')">{{btnText}}</el-button>
|
|
<el-button @@click="resetForm('ruleForm')">重置</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-col>
|
|
</el-row>
|
|
</el-dialog>
|
|
<el-dialog title="执行记录" :visible.sync="dialogRecordVisible">
|
|
<el-row type="flex" align="middle">
|
|
<el-col :span="24" style="padding: 10px 0 0 0;">
|
|
<el-table ref="tb_record" :data="recordData" border stripe style="width: 100%;" highlight-current-row
|
|
:header-cell-style="{backgroundColor:'#F5F7FA',color:'#000000'}">
|
|
<el-table-column type="index" width="50" label="序号" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="BeginDate" label="开始时间" width="180" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="EndDate" label="结束时间" width="180" align="center">
|
|
</el-table-column>
|
|
<el-table-column prop="Msg" label="消息" align="center" :show-overflow-tooltip="true">
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row type="flex" align="middle">
|
|
<el-col :span="24" style="text-align: right;">
|
|
<el-pagination @@size-change="handleSizeChange"
|
|
@@current-change="handleCurrentChange"
|
|
:current-page="currentPage"
|
|
:page-sizes="pageSizes"
|
|
:page-size="pageSize"
|
|
layout="total, sizes, prev, pager, next, jumper"
|
|
:total="total"
|
|
hide-on-single-page>
|
|
</el-pagination>
|
|
</el-col>
|
|
</el-row>
|
|
</el-dialog>
|
|
</div>
|
|
@section Scripts{
|
|
<script>
|
|
new Vue({
|
|
el: "#main",
|
|
data() {
|
|
return {
|
|
activeIndex: '1',
|
|
tableData:[],
|
|
dialogFormVisible: false,
|
|
dialogRecordVisible: false,
|
|
ruleForm: this.initTaskEntity(),
|
|
rules: {
|
|
TaskName: [
|
|
{ required: true, message: '请输入任务名称', trigger: 'blur' }
|
|
],
|
|
GroupName: [
|
|
{ required: true, message: '请输入分组名称', trigger: 'blur' }
|
|
],
|
|
Interval: [
|
|
{ required: true, message: '请输入任务时间间隔', trigger: 'blur' }
|
|
],
|
|
ApiUrl: [
|
|
{ required: true, message: '请输入调用的API地址', trigger: 'blur' }
|
|
],
|
|
Describe: [
|
|
{ required: true, message: '请输入任务描述', trigger: 'blur' }
|
|
],
|
|
TaskType: [
|
|
{ required: true, message: '请选择任务类型', trigger: 'change' }
|
|
],
|
|
ApiRequestType: [
|
|
{ required: true, message: '请选择API访问类型', trigger: 'change' }
|
|
],
|
|
//ApiAuthKey: [
|
|
// { required: true, message: '请输入Api授权名', trigger: 'blur' }
|
|
//],
|
|
//ApiAuthValue: [
|
|
// { required: true, message: '请输入Api授权值', trigger: 'blur' }
|
|
//],
|
|
//ApiParameter: [
|
|
// { required: true, message: '请输入API参数', trigger: 'blur' }
|
|
//],
|
|
DllClassName: [
|
|
{ required: true, message: '请输入类名', trigger: 'blur' }
|
|
]
|
|
//DllActionName: [
|
|
// { required: true, message: '请输入方法名', trigger: 'blur' }
|
|
//]
|
|
},
|
|
currentPage: 1,
|
|
total: 0,
|
|
pageSize: 20,
|
|
pageSizes: [20, 30, 40, 50],
|
|
selectrow: "",
|
|
title: '新建任务',
|
|
isedit: false,
|
|
btnText: '立即创建',
|
|
recordData:[],
|
|
classjobs:[]
|
|
}
|
|
},
|
|
mounted: function () {
|
|
this.OnLoadJobs();
|
|
this.onLoadClassJobs();
|
|
},
|
|
methods: {
|
|
OnLoadJobs() {
|
|
var that = this;
|
|
axios("?handler=SelectJob").then(function (res) {
|
|
that.tableData = res.data;
|
|
});
|
|
},
|
|
onLoadClassJobs(){
|
|
var that = this;
|
|
axios("?handler=SelectClassJob").then(function (res) {
|
|
that.classjobs = res.data;
|
|
});
|
|
},
|
|
handleXJRW() {
|
|
this.title = "新建任务";
|
|
this.btnText = "立即创建";
|
|
this.isedit = false;
|
|
this.ruleForm = this.initTaskEntity();
|
|
this.dialogFormVisible = true;
|
|
},
|
|
OnDeleteJobs() {
|
|
var that = this;
|
|
ELEMENT.MessageBox.confirm('此操作将永久删除该任务, 是否继续?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
axios.post("?handler=DeleteJob", null,
|
|
{
|
|
params: that.selectrow
|
|
}).then(function (res) {
|
|
if (res.data.status) {
|
|
|
|
that.OnLoadJobs();
|
|
}
|
|
ELEMENT.MessageBox.alert(res.data.message, "系统提示");
|
|
});
|
|
|
|
}).catch(() => { });
|
|
},
|
|
handleSelect(val) {
|
|
this.selectrow = val;
|
|
},
|
|
resetForm(name) {
|
|
var that = this;
|
|
this.$refs[name].resetFields();
|
|
if (this.isedit) {
|
|
this.ruleForm = this.initTaskEntity();
|
|
this.ruleForm.id = this.selectrow.id;
|
|
this.ruleForm.timeflag = this.selectrow.timeflag;
|
|
this.ruleForm.changetime = this.selectrow.changetime;
|
|
}
|
|
},
|
|
handleSizeChange(size) {
|
|
this.currentPage = 1;
|
|
this.pageSize = size;
|
|
this.getRecord();
|
|
},
|
|
handleCurrentChange(page) {
|
|
this.currentPage = page;
|
|
this.getRecord();
|
|
},
|
|
handleCZ(index, row) {
|
|
this.currentPage = 1;
|
|
this.pageSize = 20;
|
|
this.selectrow = row;
|
|
this.getRecord(() => {
|
|
this.dialogRecordVisible = true;
|
|
});
|
|
},
|
|
getRecord(callback) {
|
|
axios.post("?handler=JobRecord", null, {
|
|
params: {
|
|
taskName: this.selectrow.TaskName,
|
|
groupName: this.selectrow.GroupName,
|
|
current: this.currentPage,
|
|
size: this.pageSize
|
|
}
|
|
}).then(res => {
|
|
this.total = res.data.total;
|
|
this.recordData = res.data.data;
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
});
|
|
},
|
|
handleZTRW() {
|
|
if (!this.selectrow) {
|
|
this.$message({
|
|
message: '请选择作业',
|
|
type: 'warning'
|
|
});
|
|
return false;
|
|
}
|
|
ELEMENT.MessageBox.confirm('确定暂停选中任务吗?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
axios.post("?handler=PauseJob", null,
|
|
{
|
|
params: this.selectrow
|
|
}).then( res=> {
|
|
if (res.data.status) {
|
|
|
|
this.OnLoadJobs();
|
|
}
|
|
ELEMENT.MessageBox.alert(res.data.message, "系统提示");
|
|
});
|
|
}).catch(() => { });
|
|
},
|
|
handleKQRW() {
|
|
if (!this.selectrow) {
|
|
this.$message({
|
|
message: '请选择作业',
|
|
type: 'warning'
|
|
});
|
|
return false;
|
|
}
|
|
ELEMENT.MessageBox.confirm('确定开启选中任务吗?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
axios.post("?handler=StartJob", null,
|
|
{
|
|
params: this.selectrow
|
|
}).then(res => {
|
|
if (res.data.status) {
|
|
this.OnLoadJobs();
|
|
}
|
|
ELEMENT.MessageBox.alert(res.data.message, "系统提示");
|
|
});
|
|
}).catch(() => { });
|
|
},
|
|
handleLJZX() {
|
|
if (!this.selectrow) {
|
|
this.$message({
|
|
message: '请选择作业',
|
|
type: 'warning'
|
|
});
|
|
return false;
|
|
}
|
|
ELEMENT.MessageBox.confirm('确定立即执行选中任务吗?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
axios.post("?handler=RunJob", null,
|
|
{
|
|
params: this.selectrow
|
|
}).then(res => {
|
|
if (res.data.status) {
|
|
this.OnLoadJobs();
|
|
}
|
|
ELEMENT.MessageBox.alert(res.data.message, "系统提示");
|
|
});
|
|
}).catch(() => { });
|
|
},
|
|
handleXGRW() {
|
|
if (!this.selectrow) {
|
|
this.$message({
|
|
message: '请选择作业',
|
|
type: 'warning'
|
|
});
|
|
return false;
|
|
}
|
|
this.isedit = true;
|
|
this.title = "修改任务";
|
|
this.btnText = "立即修改";
|
|
this.dialogFormVisible = true;
|
|
this.ruleForm = Object.assign({}, this.selectrow);
|
|
},
|
|
submitForm(name) {
|
|
var that = this;
|
|
this.$refs[name].validate((valid) => {
|
|
if (valid) {
|
|
let url = "";
|
|
if (this.isedit) {
|
|
url = "?handler=UpdateJob";
|
|
} else {
|
|
url = "?handler=AddJob";
|
|
}
|
|
axios.post(url, null,
|
|
{
|
|
params: that.ruleForm
|
|
}
|
|
).then(function (res) {
|
|
if (res.data.status) {
|
|
ELEMENT.MessageBox.alert(res.data.message, "系统信息", {
|
|
type: 'success', callback: () => {
|
|
that.OnLoadJobs();
|
|
that.resetForm('ruleForm');
|
|
that.dialogFormVisible = false;
|
|
}
|
|
});
|
|
|
|
} else {
|
|
ELEMENT.MessageBox.alert(res.data.message, "系统信息", {
|
|
type: 'info', callback: () => {
|
|
//that.OnLoadJobs();
|
|
//that.resetForm('ruleForm');
|
|
//that.dialogFormVisible = false;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
taskTypeChange(val) {
|
|
this.$refs["ruleForm"].clearValidate();
|
|
},
|
|
initTaskEntity() {
|
|
return {
|
|
TaskName: '',
|
|
GroupName: '',
|
|
Interval: '',
|
|
ApiUrl: '',
|
|
Describe: '',
|
|
LastRunTime: '',
|
|
Status: '',
|
|
TaskType: '',
|
|
ApiRequestType: '',
|
|
ApiAuthKey: '',
|
|
ApiAuthValue: '',
|
|
ApiParameter: '',
|
|
DllClassName: '',
|
|
DllActionName: '',
|
|
changetime: '',
|
|
id: 0,
|
|
timeflag:''
|
|
}
|
|
}
|
|
},
|
|
filters: {
|
|
formatStatues(val) {
|
|
switch (val) {
|
|
case 1:
|
|
return '新增';
|
|
case 2:
|
|
return '删除';
|
|
case 3:
|
|
return '修改';
|
|
case 4:
|
|
return '暂停';
|
|
case 5:
|
|
return '停止';
|
|
case 6:
|
|
return '开启';
|
|
case 7:
|
|
return '立即执行';
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
}
|
|
});
|
|
</script>
|
|
} |