TaskStatus.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { Progress, Tag, Tooltip } from "antd";
  2. import { ITaskData, ITaskResponse } from "../api/task";
  3. import { useIntl } from "react-intl";
  4. import { useEffect, useState } from "react";
  5. import { get } from "../../request";
  6. interface IWidget {
  7. task?: ITaskData;
  8. }
  9. const TaskStatus = ({ task }: IWidget) => {
  10. const intl = useIntl();
  11. const [progress, setProgress] = useState(task?.progress);
  12. useEffect(() => {
  13. if (!task?.id) {
  14. return;
  15. }
  16. const query = () => {
  17. const url = `/v2/task/${task?.id}`;
  18. console.info("api request", url);
  19. get<ITaskResponse>(url).then((json) => {
  20. console.log("api response", json);
  21. if (json.ok) {
  22. setProgress(json.data.progress);
  23. }
  24. });
  25. };
  26. let timer = setInterval(query, 1000 * (60 + Math.random() * 10));
  27. return () => {
  28. clearInterval(timer);
  29. };
  30. }, [task?.id]);
  31. let color = "";
  32. switch (task?.status) {
  33. case "pending":
  34. color = "default";
  35. break;
  36. case "published":
  37. color = "orange";
  38. break;
  39. case "running":
  40. color = "processing";
  41. break;
  42. case "done":
  43. color = "success";
  44. break;
  45. case "restarted":
  46. color = "error";
  47. break;
  48. case "requested_restart":
  49. color = "warning";
  50. break;
  51. }
  52. return (
  53. <>
  54. <Tag color={color}>
  55. {intl.formatMessage({
  56. id: `labels.task.status.${task?.status}`,
  57. defaultMessage: "unknown",
  58. })}
  59. </Tag>
  60. {task?.status === "running" ? (
  61. progress && progress > 0 ? (
  62. <div style={{ display: "inline-block", width: 80 }}>
  63. <Tooltip title={`${progress}%`}>
  64. <Progress percent={progress} size="small" showInfo={false} />
  65. </Tooltip>
  66. </div>
  67. ) : task?.executor?.roles?.includes("ai") ? (
  68. <>任务排队中</>
  69. ) : (
  70. <></>
  71. )
  72. ) : (
  73. <></>
  74. )}
  75. </>
  76. );
  77. };
  78. export default TaskStatus;