reactor:【infra 基础设施】infra 的 job、joblogger 描述的统一
parent
21f76355fa
commit
5ec4d8ab82
|
|
@ -228,16 +228,13 @@ export function useDetailSchema(): DescriptionItemSchema[] {
|
|||
{
|
||||
field: 'nextTimes',
|
||||
label: '后续执行时间',
|
||||
content: (data) => {
|
||||
if (!data?.nextTimes) {
|
||||
return '无后续执行时间';
|
||||
}
|
||||
if (data.nextTimes.length === 0) {
|
||||
content: (data: InfraJobApi.Job) => {
|
||||
if (!data?.nextTimes || data.nextTimes.length === 0) {
|
||||
return '无后续执行时间';
|
||||
}
|
||||
return h(Timeline, {}, () =>
|
||||
data.nextTimes.map((time: any) =>
|
||||
h(Timeline.Item, {}, () => formatDateTime(time)?.toString()),
|
||||
data.nextTimes?.map((time: Date) =>
|
||||
h(Timeline.Item, {}, () => formatDateTime(time)),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -13,6 +13,15 @@ import { useDetailSchema } from '../data';
|
|||
const formData = ref<InfraJobApi.Job>(); // 任务详情
|
||||
const nextTimes = ref<Date[]>([]); // 下一次执行时间
|
||||
|
||||
const [Descriptions] = useDescription({
|
||||
componentProps: {
|
||||
bordered: true,
|
||||
column: 1,
|
||||
class: 'mx-4',
|
||||
},
|
||||
schema: useDetailSchema(),
|
||||
});
|
||||
|
||||
const [Modal, modalApi] = useVbenModal({
|
||||
async onOpenChange(isOpen: boolean) {
|
||||
if (!isOpen) {
|
||||
|
|
@ -29,21 +38,13 @@ const [Modal, modalApi] = useVbenModal({
|
|||
formData.value = await getJob(data.id);
|
||||
// 获取下一次执行时间
|
||||
nextTimes.value = await getJobNextTimes(data.id);
|
||||
// 将 nextTimes 赋值给 formData,以便在 schema 中使用
|
||||
formData.value.nextTimes = nextTimes.value;
|
||||
} finally {
|
||||
modalApi.unlock();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
const [Description] = useDescription({
|
||||
componentProps: {
|
||||
bordered: true,
|
||||
column: 1,
|
||||
class: 'mx-4',
|
||||
},
|
||||
schema: useDetailSchema(),
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
|
@ -53,6 +54,6 @@ const [Description] = useDescription({
|
|||
:show-cancel-button="false"
|
||||
:show-confirm-button="false"
|
||||
>
|
||||
<Description :data="formData" />
|
||||
<Descriptions :data="formData" />
|
||||
</Modal>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ export namespace InfraJobApi {
|
|||
retryInterval: number;
|
||||
monitorTimeout: number;
|
||||
createTime?: Date;
|
||||
nextTimes?: Date[];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ import { DICT_TYPE } from '@vben/constants';
|
|||
import { getDictOptions } from '@vben/hooks';
|
||||
import { formatDateTime } from '@vben/utils';
|
||||
|
||||
import { ElTimeline, ElTimelineItem } from 'element-plus';
|
||||
|
||||
import { DictTag } from '#/components/dict-tag';
|
||||
|
||||
/** 新增/修改的表单 */
|
||||
|
|
@ -226,5 +228,19 @@ export function useDetailSchema(): DescriptionItemSchema[] {
|
|||
: '未开启';
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'nextTimes',
|
||||
label: '后续执行时间',
|
||||
content: (data: InfraJobApi.Job) => {
|
||||
if (!data?.nextTimes || data.nextTimes.length === 0) {
|
||||
return '无后续执行时间';
|
||||
}
|
||||
return h(ElTimeline, {}, () =>
|
||||
data.nextTimes?.map((time: Date) =>
|
||||
h(ElTimelineItem, {}, () => formatDateTime(time)),
|
||||
),
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import type { InfraJobApi } from '#/api/infra/job';
|
|||
import { ref } from 'vue';
|
||||
|
||||
import { useVbenModal } from '@vben/common-ui';
|
||||
import { formatDateTime } from '@vben/utils';
|
||||
|
||||
import { getJob, getJobNextTimes } from '#/api/infra/job';
|
||||
import { useDescription } from '#/components/description';
|
||||
|
|
@ -42,6 +41,8 @@ const [Modal, modalApi] = useVbenModal({
|
|||
formData.value = await getJob(data.id);
|
||||
// 获取下一次执行时间
|
||||
nextTimes.value = await getJobNextTimes(data.id);
|
||||
// 将 nextTimes 赋值给 formData,以便在 schema 中使用
|
||||
formData.value.nextTimes = nextTimes.value;
|
||||
} finally {
|
||||
modalApi.unlock();
|
||||
}
|
||||
|
|
@ -57,19 +58,5 @@ const [Modal, modalApi] = useVbenModal({
|
|||
:show-confirm-button="false"
|
||||
>
|
||||
<Descriptions :data="formData" />
|
||||
|
||||
<!-- 后续执行时间 -->
|
||||
<div v-if="nextTimes.length > 0" class="mt-4">
|
||||
<h4 class="mb-2 text-lg font-medium">后续执行时间</h4>
|
||||
<div class="max-h-[200px] overflow-y-auto rounded border p-2">
|
||||
<div
|
||||
v-for="(nextTime, index) in nextTimes"
|
||||
:key="index"
|
||||
class="py-1 text-sm text-gray-600"
|
||||
>
|
||||
第 {{ index + 1 }} 次:{{ formatDateTime(nextTime.toString()) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Modal>
|
||||
</template>
|
||||
|
|
|
|||
Loading…
Reference in New Issue