|
|
@@ -1,71 +1,39 @@ |
|
|
|
<template> |
|
|
|
<el-card shadow="never" class="aui-card--fill"> |
|
|
|
<div class="mod-job__schedule"> |
|
|
|
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()"> |
|
|
|
<el-form-item> |
|
|
|
<el-input v-model="dataForm.beanName" :placeholder="$t('schedule.beanName')" clearable></el-input> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-button @click="getDataList()">{{ $t('query') }}</el-button> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:pause')" type="danger" @click="pauseHandle()">{{ $t('schedule.pauseBatch') }}</el-button> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:resume')" type="danger" @click="resumeHandle()">{{ $t('schedule.resumeBatch') }}</el-button> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:run')" type="danger" @click="runHandle()">{{ $t('schedule.runBatch') }}</el-button> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:log')" type="success" @click="logHandle()">{{ $t('schedule.log') }}</el-button> |
|
|
|
</el-form-item> |
|
|
|
</el-form> |
|
|
|
<el-table |
|
|
|
v-loading="dataListLoading" |
|
|
|
:data="dataList" |
|
|
|
border |
|
|
|
@selection-change="dataListSelectionChangeHandle" |
|
|
|
@sort-change="dataListSortChangeHandle" |
|
|
|
style="width: 100%;"> |
|
|
|
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column> |
|
|
|
<el-table-column prop="beanName" :label="$t('schedule.beanName')" header-align="center" align="center"></el-table-column> |
|
|
|
<el-table-column prop="params" :label="$t('schedule.params')" header-align="center" align="center"></el-table-column> |
|
|
|
<el-table-column prop="cronExpression" :label="$t('schedule.cronExpression')" header-align="center" align="center"></el-table-column> |
|
|
|
<el-table-column prop="remark" :label="$t('schedule.remark')" header-align="center" align="center"></el-table-column> |
|
|
|
<el-table-column prop="status" :label="$t('schedule.status')" sortable="custom" header-align="center" align="center"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<el-tag v-if="scope.row.status === 1" size="small">{{ $t('schedule.status1') }}</el-tag> |
|
|
|
<el-tag v-else size="small" type="danger">{{ $t('schedule.status0') }}</el-tag> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:pause')" type="text" size="small" @click="pauseHandle(scope.row.id)">{{ $t('schedule.pause') }}</el-button> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:resume')" type="text" size="small" @click="resumeHandle(scope.row.id)">{{ $t('schedule.resume') }}</el-button> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:run')" type="text" size="small" @click="runHandle(scope.row.id)">{{ $t('schedule.run') }}</el-button> |
|
|
|
<el-button v-if="$hasPermission('sys:schedule:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
</el-table> |
|
|
|
<el-pagination |
|
|
|
:current-page="page" |
|
|
|
:page-sizes="[10, 20, 50, 100]" |
|
|
|
:page-size="limit" |
|
|
|
:total="total" |
|
|
|
layout="total, sizes, prev, pager, next, jumper" |
|
|
|
@size-change="pageSizeChangeHandle" |
|
|
|
@current-change="pageCurrentChangeHandle"> |
|
|
|
</el-pagination> |
|
|
|
<search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" /> |
|
|
|
|
|
|
|
<base-table |
|
|
|
:table-props="tableProps" |
|
|
|
:page="listQuery.page" |
|
|
|
:limit="listQuery.limit" |
|
|
|
:table-data="tableData" |
|
|
|
> |
|
|
|
<method-btn |
|
|
|
v-if="tableBtn.length" |
|
|
|
slot="handleBtn" |
|
|
|
:width="200" |
|
|
|
label="操作" |
|
|
|
:method-list="tableBtn" |
|
|
|
@clickBtn="handleClick" |
|
|
|
/> |
|
|
|
</base-table> |
|
|
|
<pagination |
|
|
|
:limit.sync="listQuery.limit" |
|
|
|
:page.sync="listQuery.page" |
|
|
|
:total="listQuery.total" |
|
|
|
@pagination="getDataList" |
|
|
|
/> |
|
|
|
<!-- 弹窗, 新增 / 修改 --> |
|
|
|
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @successSubmit="getDataList"></add-or-update> |
|
|
|
<base-dialog |
|
|
|
:dialogTitle="addOrEditTitle" |
|
|
|
:dialogVisible="addOrUpdateVisible" |
|
|
|
@cancel="handleCancel" |
|
|
|
@confirm="handleConfirm" |
|
|
|
:before-close="handleCancel" |
|
|
|
> |
|
|
|
<add-or-update ref="addOrUpdate" @successSubmit="successSubmit"></add-or-update> |
|
|
|
</base-dialog> |
|
|
|
<!-- 弹窗, 日志列表 --> |
|
|
|
<log v-if="logVisible" ref="log"></log> |
|
|
|
</div> |
|
|
@@ -73,124 +41,255 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import mixinViewModule from '@/mixins/view-module' |
|
|
|
import AddOrUpdate from './schedule-add-or-update' |
|
|
|
import Log from './schedule-log' |
|
|
|
import basicPage from "@/mixins/basic-page"; |
|
|
|
import AddOrUpdate from "./schedule-add-or-update"; |
|
|
|
import Log from "./schedule-log"; |
|
|
|
import i18n from "@/i18n"; |
|
|
|
import sysFilter from "@/filters/sys-filter"; |
|
|
|
const tableProps = [ |
|
|
|
{ |
|
|
|
prop: "beanName", |
|
|
|
label: i18n.t("schedule.beanName"), |
|
|
|
}, |
|
|
|
{ |
|
|
|
prop: "params", |
|
|
|
label: i18n.t("schedule.params"), |
|
|
|
}, |
|
|
|
{ |
|
|
|
prop: "cronExpression", |
|
|
|
label: i18n.t("schedule.cronExpression"), |
|
|
|
}, |
|
|
|
{ |
|
|
|
prop: "remark", |
|
|
|
label: i18n.t("schedule.remark"), |
|
|
|
}, |
|
|
|
{ |
|
|
|
prop: "status", |
|
|
|
label: i18n.t("schedule.status"), |
|
|
|
filter: sysFilter("scheduleStatus"), |
|
|
|
}, |
|
|
|
]; |
|
|
|
const tableBtn = [ |
|
|
|
{ |
|
|
|
type: "edit", |
|
|
|
btnName: "编辑", |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: "pause", |
|
|
|
btnName: "暂停", |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: "restore", |
|
|
|
btnName: "恢复", |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: "run", |
|
|
|
btnName: "执行", |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: "delete", |
|
|
|
btnName: "删除", |
|
|
|
}, |
|
|
|
]; |
|
|
|
export default { |
|
|
|
mixins: [mixinViewModule], |
|
|
|
data () { |
|
|
|
mixins: [basicPage], |
|
|
|
data() { |
|
|
|
return { |
|
|
|
mixinViewModuleOptions: { |
|
|
|
getDataListURL: '/sys/schedule/page', |
|
|
|
getDataListIsPage: true, |
|
|
|
deleteURL: '/sys/schedule', |
|
|
|
deleteIsBatch: true |
|
|
|
urlOptions: { |
|
|
|
getDataListURL: "/sys/schedule/page", |
|
|
|
deleteURL: "/sys/schedule", |
|
|
|
}, |
|
|
|
dataForm: { |
|
|
|
beanName: '' |
|
|
|
beanName: "", |
|
|
|
}, |
|
|
|
logVisible: false |
|
|
|
} |
|
|
|
tableProps, |
|
|
|
tableBtn, |
|
|
|
addDeleteURL: true, |
|
|
|
logVisible: false, |
|
|
|
formConfig: [ |
|
|
|
{ |
|
|
|
type: "input", |
|
|
|
label: i18n.t("schedule.beanName"), |
|
|
|
placeholder: i18n.t("schedule.beanName"), |
|
|
|
param: "beanName", |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: "button", |
|
|
|
btnName: "查询", |
|
|
|
name: "search", |
|
|
|
color: "primary", |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: "button", |
|
|
|
btnName: "新增", |
|
|
|
name: "add", |
|
|
|
color: "primary", |
|
|
|
plain: true, |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: "button", |
|
|
|
btnName: "日志", |
|
|
|
name: "log", |
|
|
|
color: "success", |
|
|
|
}, |
|
|
|
], |
|
|
|
}; |
|
|
|
}, |
|
|
|
components: { |
|
|
|
AddOrUpdate, |
|
|
|
Log |
|
|
|
Log, |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
//search-bar点击 |
|
|
|
buttonClick(val) { |
|
|
|
switch (val.btnName) { |
|
|
|
case "search": |
|
|
|
this.listQuery.beanName = val.beanName; |
|
|
|
this.listQuery.page = 1; |
|
|
|
this.getDataList(); |
|
|
|
break; |
|
|
|
case "add": |
|
|
|
this.addOrEditTitle = '新增' |
|
|
|
this.addOrUpdateVisible = true; |
|
|
|
this.addOrUpdateHandle() |
|
|
|
break; |
|
|
|
case "log": |
|
|
|
this.logHandle() |
|
|
|
break; |
|
|
|
default: |
|
|
|
console.log(val) |
|
|
|
} |
|
|
|
}, |
|
|
|
btnFun(val) { |
|
|
|
if (val.type === "pause") { |
|
|
|
this.pauseHandle(val.data.id); |
|
|
|
} else if (val.type === "restore") { |
|
|
|
this.resumeHandle(val.data.id); |
|
|
|
} else { |
|
|
|
this.runHandle(val.data.id); |
|
|
|
} |
|
|
|
}, |
|
|
|
// 暂停 |
|
|
|
pauseHandle (id) { |
|
|
|
pauseHandle(id) { |
|
|
|
if (!id && this.dataListSelections.length <= 0) { |
|
|
|
return this.$message({ |
|
|
|
message: this.$t('prompt.deleteBatch'), |
|
|
|
type: 'warning', |
|
|
|
duration: 500 |
|
|
|
}) |
|
|
|
message: this.$t("prompt.deleteBatch"), |
|
|
|
type: "warning", |
|
|
|
duration: 500, |
|
|
|
}); |
|
|
|
} |
|
|
|
this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.pause') }), this.$t('prompt.title'), { |
|
|
|
confirmButtonText: this.$t('confirm'), |
|
|
|
cancelButtonText: this.$t('cancel'), |
|
|
|
type: 'warning' |
|
|
|
}).then(() => { |
|
|
|
this.$http.put('/sys/schedule/pause', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { |
|
|
|
if (res.code !== 0) { |
|
|
|
return this.$message.error(res.msg) |
|
|
|
} |
|
|
|
this.$message({ |
|
|
|
message: this.$t('prompt.success'), |
|
|
|
type: 'success', |
|
|
|
duration: 500, |
|
|
|
onClose: () => { |
|
|
|
this.getDataList() |
|
|
|
} |
|
|
|
}) |
|
|
|
}).catch(() => {}) |
|
|
|
}).catch(() => {}) |
|
|
|
this.$confirm( |
|
|
|
this.$t("prompt.info", { handle: this.$t("schedule.pause") }), |
|
|
|
this.$t("prompt.title"), |
|
|
|
{ |
|
|
|
confirmButtonText: this.$t("confirm"), |
|
|
|
cancelButtonText: this.$t("cancel"), |
|
|
|
type: "warning", |
|
|
|
} |
|
|
|
) |
|
|
|
.then(() => { |
|
|
|
this.$http |
|
|
|
.put("/sys/schedule/pause", id ? [id] : this.dataListSelections.map((item) => item.id)) |
|
|
|
.then(({ data: res }) => { |
|
|
|
if (res.code !== 0) { |
|
|
|
return this.$message.error(res.msg); |
|
|
|
} |
|
|
|
this.$message({ |
|
|
|
message: this.$t("prompt.success"), |
|
|
|
type: "success", |
|
|
|
duration: 500, |
|
|
|
onClose: () => { |
|
|
|
this.getDataList(); |
|
|
|
}, |
|
|
|
}); |
|
|
|
}) |
|
|
|
.catch(() => {}); |
|
|
|
}) |
|
|
|
.catch(() => {}); |
|
|
|
}, |
|
|
|
// 恢复 |
|
|
|
resumeHandle (id) { |
|
|
|
resumeHandle(id) { |
|
|
|
if (!id && this.dataListSelections.length <= 0) { |
|
|
|
return this.$message({ |
|
|
|
message: this.$t('prompt.deleteBatch'), |
|
|
|
type: 'warning', |
|
|
|
duration: 500 |
|
|
|
}) |
|
|
|
message: this.$t("prompt.deleteBatch"), |
|
|
|
type: "warning", |
|
|
|
duration: 500, |
|
|
|
}); |
|
|
|
} |
|
|
|
this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.resume') }), this.$t('prompt.title'), { |
|
|
|
confirmButtonText: this.$t('confirm'), |
|
|
|
cancelButtonText: this.$t('cancel'), |
|
|
|
type: 'warning' |
|
|
|
}).then(() => { |
|
|
|
this.$http.put('/sys/schedule/resume', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { |
|
|
|
if (res.code !== 0) { |
|
|
|
return this.$message.error(res.msg) |
|
|
|
} |
|
|
|
this.$message({ |
|
|
|
message: this.$t('prompt.success'), |
|
|
|
type: 'success', |
|
|
|
duration: 500, |
|
|
|
onClose: () => { |
|
|
|
this.getDataList() |
|
|
|
} |
|
|
|
}) |
|
|
|
}).catch(() => {}) |
|
|
|
}).catch(() => {}) |
|
|
|
this.$confirm( |
|
|
|
this.$t("prompt.info", { handle: this.$t("schedule.resume") }), |
|
|
|
this.$t("prompt.title"), |
|
|
|
{ |
|
|
|
confirmButtonText: this.$t("confirm"), |
|
|
|
cancelButtonText: this.$t("cancel"), |
|
|
|
type: "warning", |
|
|
|
} |
|
|
|
) |
|
|
|
.then(() => { |
|
|
|
this.$http |
|
|
|
.put("/sys/schedule/resume", id ? [id] : this.dataListSelections.map((item) => item.id)) |
|
|
|
.then(({ data: res }) => { |
|
|
|
if (res.code !== 0) { |
|
|
|
return this.$message.error(res.msg); |
|
|
|
} |
|
|
|
this.$message({ |
|
|
|
message: this.$t("prompt.success"), |
|
|
|
type: "success", |
|
|
|
duration: 500, |
|
|
|
onClose: () => { |
|
|
|
this.getDataList(); |
|
|
|
}, |
|
|
|
}); |
|
|
|
}) |
|
|
|
.catch(() => {}); |
|
|
|
}) |
|
|
|
.catch(() => {}); |
|
|
|
}, |
|
|
|
// 执行 |
|
|
|
runHandle (id) { |
|
|
|
runHandle(id) { |
|
|
|
if (!id && this.dataListSelections.length <= 0) { |
|
|
|
return this.$message({ |
|
|
|
message: this.$t('prompt.deleteBatch'), |
|
|
|
type: 'warning', |
|
|
|
duration: 500 |
|
|
|
}) |
|
|
|
message: this.$t("prompt.deleteBatch"), |
|
|
|
type: "warning", |
|
|
|
duration: 500, |
|
|
|
}); |
|
|
|
} |
|
|
|
this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.run') }), this.$t('prompt.title'), { |
|
|
|
confirmButtonText: this.$t('confirm'), |
|
|
|
cancelButtonText: this.$t('cancel'), |
|
|
|
type: 'warning' |
|
|
|
}).then(() => { |
|
|
|
this.$http.put('/sys/schedule/run', id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => { |
|
|
|
if (res.code !== 0) { |
|
|
|
return this.$message.error(res.msg) |
|
|
|
} |
|
|
|
this.$message({ |
|
|
|
message: this.$t('prompt.success'), |
|
|
|
type: 'success', |
|
|
|
duration: 500, |
|
|
|
onClose: () => { |
|
|
|
this.getDataList() |
|
|
|
} |
|
|
|
}) |
|
|
|
}).catch(() => {}) |
|
|
|
}).catch(() => {}) |
|
|
|
this.$confirm( |
|
|
|
this.$t("prompt.info", { handle: this.$t("schedule.run") }), |
|
|
|
this.$t("prompt.title"), |
|
|
|
{ |
|
|
|
confirmButtonText: this.$t("confirm"), |
|
|
|
cancelButtonText: this.$t("cancel"), |
|
|
|
type: "warning", |
|
|
|
} |
|
|
|
) |
|
|
|
.then(() => { |
|
|
|
this.$http |
|
|
|
.put("/sys/schedule/run", id ? [id] : this.dataListSelections.map((item) => item.id)) |
|
|
|
.then(({ data: res }) => { |
|
|
|
if (res.code !== 0) { |
|
|
|
return this.$message.error(res.msg); |
|
|
|
} |
|
|
|
this.$message({ |
|
|
|
message: this.$t("prompt.success"), |
|
|
|
type: "success", |
|
|
|
duration: 500, |
|
|
|
onClose: () => { |
|
|
|
this.getDataList(); |
|
|
|
}, |
|
|
|
}); |
|
|
|
}) |
|
|
|
.catch(() => {}); |
|
|
|
}) |
|
|
|
.catch(() => {}); |
|
|
|
}, |
|
|
|
// 日志列表 |
|
|
|
logHandle () { |
|
|
|
this.logVisible = true |
|
|
|
logHandle() { |
|
|
|
this.logVisible = true; |
|
|
|
this.$nextTick(() => { |
|
|
|
this.$refs.log.init() |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
this.$refs.log.init(); |
|
|
|
}); |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
</script> |