<template> <div class="app-container"> <!--工具栏--> <div class="head-container"> <div v-if="crud.props.searchToggle"> <!-- 搜索 --> <el-input v-model="query.jobName" clearable size="small" placeholder="输入任务名称搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="toQuery" /> <el-date-picker v-model="query.createTime" :default-time="['00:00:00','23:59:59']" type="daterange" range-separator=":" size="small" class="date-item" value-format="yyyy-MM-dd HH:mm:ss" start-placeholder="开始日期" end-placeholder="结束日期" /> <rrOperation :crud="crud" /> </div> <crudOperation :permission="permission"> <!-- 任务日志 --> <el-button slot="right" class="filter-item" size="mini" type="info" icon="el-icon-tickets" @click="doLog" >日志</el-button> </crudOperation> <Log ref="log" /> </div> <!--Form表单--> <el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" append-to-body width="600px"> <el-form ref="form" :model="form" :rules="rules" size="small" label-width="100px"> <el-form-item label="任务名称" prop="jobName"> <el-input v-model="form.jobName" style="width: 460px;" /> </el-form-item> <el-form-item label="Bean名称" prop="beanName"> <el-input v-model="form.beanName" style="width: 460px;" /> </el-form-item> <el-form-item label="执行方法" prop="methodName"> <el-input v-model="form.methodName" style="width: 460px;" /> </el-form-item> <el-form-item label="参数内容"> <el-input v-model="form.params" style="width: 460px;" /> </el-form-item> <el-form-item label="Cron表达式" prop="cronExpression"> <el-input v-model="form.cronExpression" style="width: 460px;" /> </el-form-item> <el-form-item label="任务状态"> <el-radio v-model="form.isPause" :label="false">启用</el-radio> <el-radio v-model="form.isPause" :label="true">暂停</el-radio> </el-form-item> <el-form-item label="任务描述"> <el-input v-model="form.remark" style="width: 460px;" rows="2" type="textarea" /> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="text" @click="crud.cancelCU">取消</el-button> <el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button> </div> </el-dialog> <!--表格渲染--> <el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" @selection-change="crud.selectionChangeHandler"> <el-table-column :selectable="checkboxT" type="selection" width="55" /> <el-table-column v-if="columns.visible('jobName')" :show-overflow-tooltip="true" prop="jobName" width="100px" label="任务名称" /> <el-table-column v-if="columns.visible('beanName')" :show-overflow-tooltip="true" prop="beanName" label="Bean名称" /> <el-table-column v-if="columns.visible('methodName')" :show-overflow-tooltip="true" prop="methodName" width="90px" label="执行方法" /> <el-table-column v-if="columns.visible('params')" :show-overflow-tooltip="true" prop="params" width="80px" label="参数" /> <el-table-column v-if="columns.visible('cronExpression')" :show-overflow-tooltip="true" prop="cronExpression" width="100px" label="cron表达式" /> <el-table-column v-if="columns.visible('isPause')" :show-overflow-tooltip="true" prop="isPause" width="90px" label="状态"> <template slot-scope="scope"> <el-tag :type="scope.row.isPause ? 'warning' : 'success'">{{ scope.row.isPause ? '已暂停' : '运行中' }}</el-tag> </template> </el-table-column> <el-table-column v-if="columns.visible('remark')" :show-overflow-tooltip="true" prop="remark" label="描述" /> <el-table-column v-if="columns.visible('createTime')" :show-overflow-tooltip="true" prop="createTime" label="创建日期"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.createTime) }}</span> </template> </el-table-column> <el-table-column v-permission="['admin','timing:edit','timing:del']" label="操作" width="180px" align="center" fixed="right"> <template slot-scope="scope"> <el-button v-permission="['admin','timing:edit']" size="mini" style="margin-right: 3px;" type="text" @click="crud.toEdit(scope.row)">编辑</el-button> <el-button v-permission="['admin','timing:edit']" style="margin-left: -2px" type="text" size="mini" @click="execute(scope.row.id)">执行</el-button> <el-button v-permission="['admin','timing:edit']" style="margin-left: 3px" type="text" size="mini" @click="updateStatus(scope.row.id,scope.row.isPause ? '恢复' : '暂停')"> {{ scope.row.isPause ? '恢复' : '暂停' }} </el-button> <el-popover :ref="scope.row.id" v-permission="['admin','timing:del']" placement="top" width="200" > <p>确定停止并删除该任务吗?</p> <div style="text-align: right; margin: 0"> <el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button> <el-button :loading="delLoading" type="primary" size="mini" @click="delMethod(scope.row.id)">确定</el-button> </div> <el-button slot="reference" type="text" size="mini">删除</el-button> </el-popover> </template> </el-table-column> </el-table> <!--分页组件--> <pagination /> </div> </template> <script> import crudJob from '@/api/system/timing' import Log from './log' import CRUD, { presenter, header, form, crud } from '@crud/crud' import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import pagination from '@crud/Pagination' // crud交由presenter持有 const defaultCrud = CRUD({ title: '定时任务', url: 'api/jobs', crudMethod: { ...crudJob }}) const defaultForm = { jobName: null, beanName: null, methodName: null, params: null, cronExpression: null, isPause: false, remark: null } export default { name: 'Timing', components: { Log, pagination, crudOperation, rrOperation }, mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()], data() { return { delLoading: false, permission: { add: ['admin', 'timing:add'], edit: ['admin', 'timing:edit'], del: ['admin', 'timing:del'] }, rules: { jobName: [ { required: true, message: '请输入任务名称', trigger: 'blur' } ], beanName: [ { required: true, message: '请输入Bean名称', trigger: 'blur' } ], methodName: [ { required: true, message: '请输入方法名称', trigger: 'blur' } ], cronExpression: [ { required: true, message: '请输入Cron表达式', trigger: 'blur' } ] } } }, methods: { // 执行 execute(id) { crudJob.execution(id).then(res => { this.crud.notify('执行成功', CRUD.NOTIFICATION_TYPE.SUCCESS) }).catch(err => { console.log(err.response.data.message) }) }, // 改变状态 updateStatus(id, status) { crudJob.updateIsPause(id).then(res => { this.crud.toQuery() this.crud.notify(status + '成功', CRUD.NOTIFICATION_TYPE.SUCCESS) }).catch(err => { console.log(err.response.data.message) }) }, delMethod(id) { this.delLoading = true crudJob.del([id]).then(() => { this.delLoading = false this.$refs[id].doClose() this.crud.dleChangePage(1) this.crud.delSuccessNotify() this.crud.toQuery() }).catch(() => { this.delLoading = false this.$refs[id].doClose() }) }, // 显示日志 doLog() { this.$refs.log.dialog = true this.$refs.log.doInit() }, checkboxT(row, rowIndex) { return row.id !== 1 } } } </script>