xw_admin/src/views/setting/advanced/setup/regularTime.vue
2024-09-04 19:32:50 +08:00

206 lines
6.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-container class="mainBox">
<el-main class="nopadding">
<div class="searchMain">
<div class="title">任务信息</div>
<div class="formRow">
<el-form ref="form" :size="size" :model="form" label-width="100px">
<el-form-item label="任务名称" prop="name">
<el-select type="text" v-model="form.name" placeholder="请选择任务名称" style="width: 100%;" @visible-change="getNameList" @change="nameChange">
<el-option v-for="(item,index) in setMap.nameList" :key="index" :value="item.name" :label="item.name">
<span style="float: left">{{ item.name }}</span>
<span style="float: right;color: var(--el-text-color-secondary);">{{ item.memo }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="任务描述" prop="memo">
<el-input type="text" v-model="form.memo" placeholder="请输入任务描述" disabled></el-input>
</el-form-item>
<el-form-item label="定时任务表达式" prop="cron_expression">
<el-input type="text" v-model="form.cron_expression" @input="cronExpressionInput" placeholder="请输入定时任务表达式"></el-input>
</el-form-item>
<el-form-item label="表达式描述" prop="cron_expression_desc">
<el-input type="text" v-model="form.cron_expression_desc" placeholder="请输入表达式描述" disabled></el-input>
</el-form-item>
<el-form-item label="">
<el-button :size="size" type="primary" @click="save" :loading="isSave">保存配置</el-button>
</el-form-item>
</el-form>
<el-image class="img" src="https://dm-auto.oss-cn-shanghai.aliyuncs.com/xw_cloud/image/mingling.png" fit="contain"></el-image>
</div>
<div class="title">配置列表
<span class="tip">注意此配置由专业IT管理员操作无配置时以系统默认定时任务配置为准。</span>
</div>
</div>
<scTable ref="table" :apiObj="list.apiObj" :column="list.column" stripe :size="size" highlightCurrentRow :hideDo="true" :hidePagination="true">
<sc-table-column label="序号" align="center" type="index"></sc-table-column>
<el-table-column width="200" label="任务名称" prop="name"></el-table-column>
<el-table-column width="200" label="任务描述" prop="memo"></el-table-column>
<el-table-column width="200" label="任务表达式" prop="cron_expression"></el-table-column>
<el-table-column label="表达式描述" prop="cron_expression_desc" show-overflow-tooltip></el-table-column>
<el-table-column width="100" label="状态" fixed="right" align="center">
<template #default="scope">
<el-switch :size="size" v-model="scope.row.active_status" @change="changeSwitch($event, scope.row)" :loading="scope.row.$switch_status" :active-value="true" :inactive-value="false"></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="160">
<template #default="scope">
<el-dropdown>
<el-button class="noBorderBtn" icon="el-icon-more" :size="size"></el-button>
<template #dropdown>
<div v-auth="'crontabDelete'">
<el-dropdown-menu>
<el-dropdown-item @click="table_del(scope.row, 'delete')" icon="sc-icon-Delete">删除配置</el-dropdown-item>
</el-dropdown-menu>
</div>
</template>
</el-dropdown>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</template>
<script>
export default {
name: "regularTime",
data(){
return{
size:'small',
isSave:false,
setMap:{
nameList:[]
},
form:{
memo:"",
name:"",
cron_expression:"",
cron_expression_desc:"",
callback:{
command:""
},
type:""
},
list:{
apiObj:this.$API.setup.crontab.list,
column:[]
}
}
},
mounted() {
},
methods:{
async getNameList() {
const res = await this.$API.setup.crontab.configList.get()
if(res.code == 200){
this.setMap.nameList = res.data;
}
},
nameChange(e){
this.setMap.nameList.forEach(item=>{
if(item.name == e){
this.form.memo = item.memo;
this.form.cron_expression = item.cron_expression;
this.form.cron_expression_desc = item.cron_expression_desc;
this.form.callback = item.callback;
this.form.task_type = item.type;
this.setDescribe();
}
})
},
cronExpressionInput(){
this.setDescribe();
},
// 表达式转换备注
async setDescribe() {
let params = {
cron_expression: this.form.cron_expression
}
const res = await this.$API.setup.crontab.describe.post(params);
if(res.code == 200){
this.form.cron_expression_desc = res.data.cron_expression;
}
},
save(){
this.$refs.form.validate(async (valid) => {
if (valid) {
this.isSave = true;
const res = await this.$API.setup.crontab.add.post(this.form);
this.isSave = false;
if(res.code == 200){
this.$refs.table.reload();
this.visible = false;
this.$message.success("操作成功")
}
}
})
},
table_del(row){
this.$confirm(`确定删除 ${row.name} 吗?`, '提示', {
type: 'warning'
}).then(async () => {
const reqData = {id: row.id};
const res = await this.$API.setup.crontab.delete.post(reqData);
if(res.code == 200){
this.$refs.table.refresh()
this.$message.success("删除成功")
}
}).catch(()=>{})
},
// 状态
changeSwitch(val, row) {
row.$switch_yx = true;
setTimeout(async () => {
let params = {
id: row.id,
status: row.active_status,
};
const res = await this.$API.setup.crontab.status.post(params);
if(res.code !=200){
row.active_status = !row.active_status;
}
delete row.$switch_status;
delete row.$switch_yx;
}, 500);
},
}
}
</script>
<style scoped lang="scss">
.el-main.nopadding .searchMain{
align-items: flex-start;
.title{
font-weight: 500;
padding: 0 0 5px 0;
font-size: 13px;
display: flex;
align-items: center;
.tip{
margin-left: 10px;
color: var(--el-color-warning);
font-weight: 400;
font-size: 12px;
}
}
}
.searchMain{
flex-direction: column;
justify-content: flex-start;
.el-input{
width: 400px;
}
}
.formRow{
display: flex;
.img{
margin-left: 30px;
height: 165px;
border-radius: 8px;
}
}
</style>