factory_web/src/views/sys/myschedule.vue

196 lines
4.8 KiB
Vue

<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
icon="el-icon-plus"
@click="table_add"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
row-key="id"
:query="query"
:params="params"
hidePagination
hideDo
@row-click="rowClick"
>
<el-table-column label="类型" prop="name" width="80">
<template #default="scope"
>{{ scheduleTypeEnum[scope.row.type]?.text }}
</template>
</el-table-column>
<el-table-column
label="名称"
prop="name"
min-width="100"
></el-table-column>
<el-table-column label="操作" align="center" width="80">
<template #default="scope">
<el-popconfirm
title="确定删除吗?"
@confirm="table_del(scope.row, scope.$index)"
>
<template #reference>
<el-button
link
size="small"
v-auth="'myschedule.delete'"
type="danger"
icon="el-icon-delete"
></el-button
>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
<el-dialog title="创建/编辑" v-model="dialogVisible" width="80%">
<el-form :model="saveForm" label-width="100px" ref="saveForm">
<el-form-item label="策略类型" required>
<el-select v-model="saveForm.type">
<el-option
v-for="e in scheduleTypeEnum.values"
:key="e.key"
:value="e.key"
:label="e.text"
></el-option>
</el-select>
</el-form-item>
<el-divider />
<el-form-item label="策略式" required v-if="saveForm.type == 10">
<div style="display: flex">
每隔
<el-input-number
v-model="saveForm.interval_.every"
:min="1"
style="margin-left: 4px"
></el-input-number>
<el-select
v-model="saveForm.interval_.period"
style="width: 200px; margin-left: 4px"
placeholder="间隔"
>
<el-option
v-for="e in schedulePeriodEnum.values"
:key="e.key"
:value="e.key"
:label="e.text"
></el-option>
</el-select>
</div>
</el-form-item>
<el-form-item label="策略式" required v-if="saveForm.type == 20">
<div style="width: 100%">
<div style="display: flex">
<span style="margin-right: 4px; width: 100px">分钟</span
><el-input
v-model="saveForm.crontab_.minute"
></el-input>
</div>
<div style="display: flex; margin-top: 4px">
<span style="margin-right: 4px; width: 100px">小时</span
><el-input v-model="saveForm.crontab_.hour"></el-input>
</div>
<div style="display: flex; margin-top: 4px">
<span style="margin-right: 4px; width: 100px"
>每周的天</span
><el-input
v-model="saveForm.crontab_.day_of_week"
></el-input>
</div>
<div style="display: flex; margin-top: 4px">
<span style="margin-right: 4px; width: 100px"
>每月的天</span
><el-input
v-model="saveForm.crontab_.day_of_month"
></el-input>
</div>
<div style="display: flex; margin-top: 4px">
<span style="margin-right: 4px; width: 100px"
>每年的月</span
><el-input
v-model="saveForm.crontab_.month_of_year"
></el-input>
</div>
</div>
</el-form-item>
</el-form>
<template #footer>
<el-button
type="primary"
:loading="formSaving"
@click="formSubmit()"
> </el-button
>
</template>
</el-dialog>
</el-container>
</template>
<script>
import { scheduleTypeEnum, schedulePeriodEnum } from "@/utils/enum.js";
const defaultForm = {
interval_: {},
crontab_: {},
};
export default {
name: "myschedule",
data() {
return {
schedulePeriodEnum,
scheduleTypeEnum,
formSaving: false,
dialogVisible: false,
apiObj: this.$API.system.myschedule.list,
query: {
search: "",
},
params: {},
saveForm: Object.assign({}, defaultForm),
};
},
methods: {
rowClick(item) {
console.log(item)
this.$emit("scheduleChose", item);
},
handleQuery() {
this.$refs.table.queryData(this.query);
},
table_add() {
this.dialogVisible = true;
this.$nextTick(() => {
this.saveForm = Object.assign({}, defaultForm);
});
},
table_del(row) {
this.$API.system.myschedule.delete.req(row.id).then(() => {
this.$message.success("操作成功");
this.handleQuery();
});
},
formSubmit() {
this.formSaving = true;
this.$refs.saveForm.validate((valid) => {
if (valid) {
this.$API.system.myschedule.create
.req(this.saveForm)
.then(() => {
this.handleQuery();
this.dialogVisible = false;
this.$message.success("操作成功");
});
}
this.formSaving = false;
});
},
},
};
</script>