mirror of
https://github.com/DrizzleTime/Foxel.git
synced 2026-05-22 00:30:14 +08:00
92 lines
2.6 KiB
TypeScript
92 lines
2.6 KiB
TypeScript
import React from 'react';
|
|
import { Progress, Tag, Tooltip } from 'antd';
|
|
import {
|
|
ClockCircleOutlined,
|
|
SyncOutlined,
|
|
CheckCircleOutlined,
|
|
CloseCircleOutlined
|
|
} from '@ant-design/icons';
|
|
import { TaskExecutionStatus } from '../api';
|
|
|
|
interface TaskProgressBarProps {
|
|
status: TaskExecutionStatus; // status 现在是数字
|
|
progress: number;
|
|
error?: string;
|
|
showLabel?: boolean;
|
|
size?: 'small' | 'default';
|
|
className?: string;
|
|
style?: React.CSSProperties;
|
|
}
|
|
|
|
const TaskProgressBar: React.FC<TaskProgressBarProps> = ({
|
|
status,
|
|
progress,
|
|
error,
|
|
showLabel = true,
|
|
size = 'default',
|
|
className,
|
|
style
|
|
}) => {
|
|
let statusColor = '';
|
|
let icon = null;
|
|
let statusText = '';
|
|
let progressStatus: "success" | "exception" | "active" | "normal" | undefined;
|
|
|
|
switch (status) { // status 现在是数字
|
|
case TaskExecutionStatus.Pending: // 使用数字枚举成员
|
|
statusColor = 'orange';
|
|
progressStatus = 'normal';
|
|
icon = <ClockCircleOutlined />;
|
|
statusText = '等待中';
|
|
break;
|
|
case TaskExecutionStatus.Processing: // 使用数字枚举成员
|
|
statusColor = 'processing';
|
|
progressStatus = 'active';
|
|
icon = <SyncOutlined spin />;
|
|
statusText = '处理中';
|
|
break;
|
|
case TaskExecutionStatus.Completed: // 使用数字枚举成员
|
|
statusColor = 'success';
|
|
progressStatus = 'success';
|
|
icon = <CheckCircleOutlined />;
|
|
statusText = '已完成';
|
|
break;
|
|
case TaskExecutionStatus.Failed: // 使用数字枚举成员
|
|
statusColor = 'error';
|
|
progressStatus = 'exception';
|
|
icon = <CloseCircleOutlined />;
|
|
statusText = '失败';
|
|
break;
|
|
}
|
|
|
|
return (
|
|
<div className={className} style={{ ...style }}>
|
|
{showLabel && (
|
|
<div style={{ marginBottom: 4, display: 'flex', alignItems: 'center' }}>
|
|
<Tag color={statusColor} icon={icon} style={{ marginRight: 8 }}>
|
|
{statusText}
|
|
</Tag>
|
|
{status === TaskExecutionStatus.Failed && error && ( // 使用数字枚举成员
|
|
<Tooltip title={error}>
|
|
<span style={{ color: '#ff4d4f', cursor: 'pointer', fontSize: 13 }}>
|
|
查看错误
|
|
</span>
|
|
</Tooltip>
|
|
)}
|
|
</div>
|
|
)}
|
|
<Tooltip title={`${progress}%`}>
|
|
<Progress
|
|
percent={progress}
|
|
size={size}
|
|
status={progressStatus}
|
|
showInfo={size !== 'small'}
|
|
strokeColor={status === TaskExecutionStatus.Failed ? '#ff4d4f' : undefined} // 使用数字枚举成员
|
|
/>
|
|
</Tooltip>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default TaskProgressBar;
|