| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <!--
- * @Descripttion: 系统计划任务配置
- * @version: 1.2
- * @Author: sakuya
- * @Date: 2021年7月7日09:28:32
- * @LastEditors: sakuya
- * @LastEditTime: 2021年7月10日20:56:47
- -->
- <template>
- <el-main>
- <el-row :gutter="15">
- <el-col :xl="6" :lg="6" :md="8" :sm="12" :xs="24" v-for="item in list" :key="item.id">
- <el-card class="task task-item" shadow="hover">
- <h2>{{item.title}}</h2>
- <ul>
- <li>
- <h4>执行类</h4>
- <p>{{item.handler}}</p>
- </li>
- <li>
- <h4>定时规则</h4>
- <p>{{item.cron}}</p>
- </li>
- </ul>
- <div class="bottom">
- <div class="state">
- <el-tag v-if="item.state=='1'" size="small">准备就绪</el-tag>
- <el-tag v-if="item.state=='-1'" size="small" type="info">停用</el-tag>
- </div>
- <div class="handler">
- <el-popconfirm title="确定立即执行吗?" @confirm="run(item)">
- <template #reference>
- <el-button type="primary" icon="el-icon-caret-right" circle></el-button>
- </template>
- </el-popconfirm>
- <el-dropdown trigger="click">
- <el-button type="primary" icon="el-icon-more" circle plain></el-button>
- <template #dropdown>
- <el-dropdown-menu>
- <el-dropdown-item @click="edit(item)">编辑</el-dropdown-item>
- <el-dropdown-item @click="logs(item)">日志</el-dropdown-item>
- <el-dropdown-item @click="del(item)" divided>删除</el-dropdown-item>
- </el-dropdown-menu>
- </template>
- </el-dropdown>
- </div>
- </div>
- </el-card>
- </el-col>
- <el-col :xl="6" :lg="6" :md="8" :sm="12" :xs="24">
- <el-card class="task task-add" shadow="never" @click="add">
- <el-icon><el-icon-plus /></el-icon>
- <p>添加计划任务</p>
- </el-card>
- </el-col>
- </el-row>
- </el-main>
- <save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSuccess" @closed="dialog.save=false"></save-dialog>
- <el-drawer title="计划任务日志" v-model="dialog.logsVisible" :size="600" direction="rtl" destroy-on-close>
- <logs></logs>
- </el-drawer>
- </template>
- <script>
- import saveDialog from './save'
- import logs from './logs'
- export default {
- name: 'task',
- components: {
- saveDialog,
- logs
- },
- provide() {
- return {
- list: this.list
- }
- },
- data() {
- return {
- dialog: {
- save: false,
- logsVisible: false
- },
- list: [
- {
- id: "1",
- title: "清理服务器缓存",
- handler: "cleanUpCacheHandler",
- cron: "59 59 23 * * ? *",
- state: "1"
- },
- {
- id: "2",
- title: "自动审核",
- handler: "automaticAuditHandler",
- cron: "0 0 * * * ? *",
- state: "1"
- },
- {
- id: "3",
- title: "清理未实名用户",
- handler: "deleteUserHandler",
- cron: "0 0 0 * * ? *",
- state: "-1"
- }
- ]
- }
- },
- mounted() {
- },
- methods: {
- add(){
- this.dialog.save = true
- this.$nextTick(() => {
- this.$refs.saveDialog.open()
- })
- },
- edit(task){
- this.dialog.save = true
- this.$nextTick(() => {
- this.$refs.saveDialog.open('edit').setData(task)
- })
- },
- del(task){
- this.$confirm(`确认删除 ${task.title} 计划任务吗?`,'提示', {
- type: 'warning',
- confirmButtonText: '删除',
- confirmButtonClass: 'el-button--danger'
- }).then(() => {
- this.list.splice(this.list.findIndex(item => item.id === task.id), 1)
- }).catch(() => {
- //取消
- })
- },
- logs(){
- this.dialog.logsVisible = true
- },
- run(task){
- this.$message.success(`已成功执行计划任务:${task.title}`)
- },
- //本地更新数据
- handleSuccess(data, mode){
- if(mode=='add'){
- data.id = new Date().getTime()
- this.list.push(data)
- }else if(mode=='edit'){
- this.list.filter(item => item.id===data.id ).forEach(item => {
- Object.assign(item, data)
- })
- }
- }
- }
- }
- </script>
- <style scoped>
- .task {height: 210px;}
- .task-item h2 {font-size: 15px;color: #3c4a54;padding-bottom:15px;}
- .task-item li {list-style-type:none;margin-bottom: 10px;}
- .task-item li h4 {font-size: 12px;font-weight: normal;color: #999;}
- .task-item li p {margin-top: 5px;}
- .task-item .bottom {border-top: 1px solid #EBEEF5;text-align: right;padding-top:10px;display: flex;justify-content: space-between;align-items: center;}
- .task-add {display: flex;flex-direction: column;align-items: center;justify-content: center;text-align: center;cursor: pointer;color: #999;}
- .task-add:hover {color: #409EFF;}
- .task-add i {font-size: 30px;}
- .task-add p {font-size: 12px;margin-top: 20px;}
-
- .dark .task-item .bottom {border-color: var(--el-border-color-light);}
- </style>
|