import { useEffect, useState } from 'react'; import { Alert, Button, Modal, Table, Tag } from 'antd'; import intl from 'react-intl-universal'; import { request } from '@/utils/http'; import config from '@/utils/config'; import CronLogModal from '../crontab/logModal'; interface TaskResult { id: number; name: string; command: string; failCount?: number; successCount?: number; deleted: boolean; } export default function TaskResultModal({ result, onCancel, }: { result: 'success' | 'failure'; onCancel: () => void; }) { const isSuccess = result === 'success'; const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [failed, setFailed] = useState(false); const [reload, setReload] = useState(0); const [logCron, setLogCron] = useState(null); useEffect(() => { let active = true; setLoading(true); setFailed(false); request .get( `${config.apiPrefix}dashboard/${isSuccess ? 'successes' : 'failures'}`, ) .then((response) => { if (!active) return; if (response.code !== 200) throw new Error('Failed to load dashboard task results'); setTasks(response.data); }) .catch(() => { if (active) setFailed(true); }) .finally(() => { if (active) setLoading(false); }); return () => { active = false; }; }, [reload, isSuccess]); return ( <> {failed ? ( setReload((value) => value + 1)}> {intl.get('重试')} } /> ) : ( loading={loading} dataSource={tasks} rowKey="id" size="small" scroll={{ x: 650 }} pagination={{ pageSize: 10, showSizeChanger: false }} columns={[ { title: intl.get('定时任务'), dataIndex: 'name', ellipsis: true, render: (name, task) => ( <> {name} {task.deleted && {intl.get('已删除')}} ), }, { title: intl.get('命令'), dataIndex: 'command', ellipsis: true }, { title: intl.get(isSuccess ? '成功次数' : '失败次数'), dataIndex: isSuccess ? 'successCount' : 'failCount', width: 100, }, { title: intl.get('日志'), width: 120, render: (_, task) => ( ), }, ]} /> )} {logCron && ( setLogCron(null)} /> )} ); }