visuddhinanda há 1 ano atrás
pai
commit
c4513fda18
1 ficheiros alterados com 106 adições e 0 exclusões
  1. 106 0
      dashboard-v4/dashboard/src/components/task/TaskListAdd.tsx

+ 106 - 0
dashboard-v4/dashboard/src/components/task/TaskListAdd.tsx

@@ -0,0 +1,106 @@
+import { Dropdown } from "antd";
+import { DownOutlined } from "@ant-design/icons";
+import type { MenuProps } from "antd";
+import {
+  IProjectData,
+  ITaskGroupInsertRequest,
+  ITaskGroupResponse,
+} from "../api/task";
+import { useState } from "react";
+import { WorkflowModal } from "./Workflow";
+import { post } from "../../request";
+import { useIntl } from "react-intl";
+
+interface IWidget {
+  studioName?: string;
+  projectId?: string;
+  project?: IProjectData;
+  readonly?: boolean;
+  onAddNew: () => void;
+  onWorkflow: () => void;
+}
+const TaskListAdd = ({
+  studioName,
+  projectId,
+  project,
+  readonly = false,
+  onAddNew,
+  onWorkflow,
+}: IWidget) => {
+  const intl = useIntl();
+
+  const [open, setOpen] = useState(false);
+
+  const items: MenuProps["items"] = [
+    {
+      label: "从工作流创建任务",
+      key: "workflow",
+    },
+  ];
+  return (
+    <>
+      <Dropdown.Button
+        type="primary"
+        icon={<DownOutlined />}
+        disabled={readonly}
+        menu={{
+          items,
+          onClick: (info) => {
+            switch (info.key) {
+              case "workflow":
+                setOpen(true);
+                break;
+
+              default:
+                break;
+            }
+          },
+        }}
+        onClick={onAddNew}
+      >
+        {intl.formatMessage({ id: "buttons.add" })}
+      </Dropdown.Button>
+
+      <WorkflowModal
+        studioName={studioName}
+        open={open}
+        onClose={() => setOpen(false)}
+        onOk={(data) => {
+          if (!projectId || !project || !data) {
+            return;
+          }
+          const url = "/v2/task-group";
+          const values: ITaskGroupInsertRequest = {
+            data: [
+              {
+                project_id: projectId,
+                tasks: data.map((item) => {
+                  return {
+                    id: item.id,
+                    title: item.title,
+                    type: project.type === "workflow" ? "workflow" : "instance",
+                    order: item.order,
+                    status: item.status,
+                    parent_id: item.parent_id,
+                    project_id: projectId,
+                    is_milestone: item.is_milestone,
+                  };
+                }),
+              },
+            ],
+          };
+          console.info("api request", url, values);
+          post<ITaskGroupInsertRequest, ITaskGroupResponse>(url, values).then(
+            (json) => {
+              console.info("api response", json);
+              if (json.ok) {
+                onWorkflow();
+              }
+            }
+          );
+        }}
+      />
+    </>
+  );
+};
+export default TaskListAdd;