kt-template-admin/apps/web-antdv-next/src/views/qqbot/plugin-task/components/TaskCronModal.tsx

80 lines
1.9 KiB
TypeScript

import type { PropType } from 'vue';
import type { QqbotPluginTaskApi } from '#/api/qqbot/plugin-task';
import { defineComponent, ref, watch } from 'vue';
import { message, Modal } from 'antdv-next';
import { updateQqbotPluginTaskCron } from '#/api/qqbot/plugin-task';
import CronEditorAntdvNext from './CronEditorAntdvNext';
const AModal = Modal as any;
export default defineComponent({
name: 'QqBotPluginTaskCronModal',
props: {
open: {
default: false,
type: Boolean,
},
task: {
default: undefined,
type: Object as PropType<QqbotPluginTaskApi.Task | undefined>,
},
},
emits: ['close', 'saved'],
setup(props, { emit }) {
const cronExpression = ref('0 */6 * * *');
const valid = ref(true);
const saving = ref(false);
watch(
() => [props.open, props.task?.id],
() => {
cronExpression.value =
props.task?.cronExpression ||
props.task?.defaultCron ||
'0 */6 * * *';
valid.value = true;
},
{ immediate: true },
);
async function save() {
if (!props.task || !valid.value) return;
saving.value = true;
try {
await updateQqbotPluginTaskCron(props.task.id, cronExpression.value);
message.success('Cron 已更新');
emit('saved');
} finally {
saving.value = false;
}
}
return () => (
<AModal
confirmLoading={saving.value}
okButtonProps={{ disabled: !valid.value }}
onCancel={() => emit('close')}
onOk={() => void save()}
open={props.open}
title="修改 Cron"
width={620}
>
<CronEditorAntdvNext
onUpdate:value={(value: string) => {
cronExpression.value = value;
}}
onValidChange={(value: boolean) => {
valid.value = value;
}}
value={cronExpression.value}
/>
</AModal>
);
},
});