diff --git a/apps/web-antd/src/views/infra/job/data.ts b/apps/web-antd/src/views/infra/job/data.ts index 213a95b95..dfe79dd94 100644 --- a/apps/web-antd/src/views/infra/job/data.ts +++ b/apps/web-antd/src/views/infra/job/data.ts @@ -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)), ), ); }, diff --git a/apps/web-antd/src/views/infra/job/modules/detail.vue b/apps/web-antd/src/views/infra/job/modules/detail.vue index 9a0c2f71d..89f138a47 100644 --- a/apps/web-antd/src/views/infra/job/modules/detail.vue +++ b/apps/web-antd/src/views/infra/job/modules/detail.vue @@ -13,6 +13,15 @@ import { useDetailSchema } from '../data'; const formData = ref(); // 任务详情 const nextTimes = ref([]); // 下一次执行时间 +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(), -}); diff --git a/apps/web-ele/src/api/infra/job/index.ts b/apps/web-ele/src/api/infra/job/index.ts index 1f066a149..fd337b46b 100644 --- a/apps/web-ele/src/api/infra/job/index.ts +++ b/apps/web-ele/src/api/infra/job/index.ts @@ -15,6 +15,7 @@ export namespace InfraJobApi { retryInterval: number; monitorTimeout: number; createTime?: Date; + nextTimes?: Date[]; } } diff --git a/apps/web-ele/src/views/infra/job/data.ts b/apps/web-ele/src/views/infra/job/data.ts index fc7e5a7db..78b3b187e 100644 --- a/apps/web-ele/src/views/infra/job/data.ts +++ b/apps/web-ele/src/views/infra/job/data.ts @@ -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)), + ), + ); + }, + }, ]; } diff --git a/apps/web-ele/src/views/infra/job/modules/detail.vue b/apps/web-ele/src/views/infra/job/modules/detail.vue index 965bb1c62..5bd3dee59 100644 --- a/apps/web-ele/src/views/infra/job/modules/detail.vue +++ b/apps/web-ele/src/views/infra/job/modules/detail.vue @@ -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" > - - -
-

后续执行时间

-
-
- 第 {{ index + 1 }} 次:{{ formatDateTime(nextTime.toString()) }} -
-
-