Sfoglia il codice sorgente

pro_task改为数组

visuddhinanda 1 anno fa
parent
commit
5f7e919d44

+ 14 - 2
dashboard-v4/dashboard/src/components/task/TaskReader.tsx

@@ -64,9 +64,21 @@ const TaskReader = ({ taskId, task, onLoad, onChange, onEdit }: IWidget) => {
       studio_name: "",
     };
     if (type === "pre") {
-      setting.pre_task_id = data.id;
+      const hasPre = task?.pre_task?.find((value)=>value.id===data.id)
+      if(hasPre){
+        setting.pre_task_id = task?.pre_task?.filter((value)=>value.id!==data.id).map((item)=>item.id).join()
+      }else{
+        const newRelation = task?.pre_task? [...task.pre_task.map((item)=>item.id),data.id]:[data.id];
+        setting.pre_task_id = newRelation.join();
+      }
     } else if (type === "next") {
-      setting.next_task_id = data.id;
+      const hasPre = task?.next_task?.find((value)=>value.id===data.id)
+      if(hasPre){
+        setting.next_task_id = task?.next_task?.filter((value)=>value.id!==data.id).map((item)=>item.id).join()
+      }else{
+        const newRelation = task?.next_task? [...task.next_task.map((item)=>item.id),data.id]:[data.id];
+        setting.next_task_id = newRelation.join();
+      }
     }
 
     const url = `/v2/task/${setting.id}`;

+ 8 - 6
dashboard-v4/dashboard/src/components/task/TaskRelation.tsx

@@ -30,6 +30,7 @@ const TaskRelation = ({ tasks }: IWidget) => {
     mermaidText += `classDef ${value.status} fill:${value.fill},stroke:#333,stroke-width:2px;\n`;
   });
 
+  let relationLine = new Map<string,number>();
   tasks?.forEach((task: ITaskData, index: number, array: ITaskData[]) => {
     //输出节点
     mermaidText += `${task.id}[${task.title}]:::${task.status};\n`;
@@ -47,14 +48,15 @@ const TaskRelation = ({ tasks }: IWidget) => {
     }
 
     //关系线
-    if (task.pre_task) {
-      mermaidText += `${task.pre_task.id} --> ${task.id};\n`;
-    }
-    if (task.next_task) {
-      mermaidText += `${task.id} --> ${task.next_task.id};\n`;
-    }
+    task.pre_task?.map((item)=>relationLine.set(`${item.id} --> ${task.id};\n`,0))
+    task.next_task?.map((item)=>relationLine.set(`${task.id} --> ${item.id};\n`,0))
+
   });
 
+  Array.from(relationLine.keys()).forEach((value)=>{
+    mermaidText += value;
+  })
+
   console.debug(mermaidText);
 
   return (

+ 44 - 40
dashboard-v4/dashboard/src/components/task/TaskTable.tsx

@@ -17,6 +17,7 @@ interface IWidget {
 }
 const TaskTable = ({ tasks }: IWidget) => {
   const [tasksTitle, setTasksTitle] = useState<ITaskHeading[][]>();
+  const [dataHeading, setDataHeading] = useState<string[]>();
   const [projects, setProjects] = useState<IProject[]>();
 
   useEffect(() => {
@@ -35,10 +36,20 @@ const TaskTable = ({ tasks }: IWidget) => {
 
     setProjects(Array.from(projectMap.values()));
 
+    const getNodeChildren = (task:ITaskData):number=>{
+      const children = tasks?.filter((value) => value.parent_id === task.id)
+      if(children && children.length>0){
+          return children.reduce((acc, cur) => {
+            return acc + getNodeChildren(cur)
+          }, children.length);
+      }else{
+        return 0
+      }
+    }
     //列表头
     let titles1: ITaskHeading[] = [];
     let titles2: ITaskHeading[] = [];
-    let titles3: ITaskHeading[] = [];
+    let titles3: string[] = [];
     tasks
       ?.filter((value: ITaskData) => !value.parent_id)
       .forEach((task) => {
@@ -53,24 +64,23 @@ const TaskTable = ({ tasks }: IWidget) => {
             return child;
           });
         titles2 = [...titles2, ...children];
+
         titles1.push({
           title: task.title ?? "",
           id: task.id,
-          children: children.length,
+          children: getNodeChildren(task),
         });
+
         if (children.length === 0) {
-          titles3.push({
-            title: task.title ?? "",
-            id: task.id,
-            children: 0,
-          });
+          titles3.push(task.title);
         } else {
-          titles3 = [...titles3, ...children];
+          titles3 = [...titles3, ...children.map((item) => item.title)];
         }
       });
-    const heading = [titles1, titles2, titles3];
+    const heading = [titles1, titles2];
     console.log("heading", heading);
     setTasksTitle(heading);
+    setDataHeading(titles3);
   }, [tasks]);
 
   return (
@@ -78,7 +88,7 @@ const TaskTable = ({ tasks }: IWidget) => {
       <table>
         <thead>
           {tasksTitle?.map((row, level) => {
-            return level < 2 ? (
+            return (
               <tr>
                 {level === 0 ? <th rowSpan={2}>project</th> : undefined}
                 {row.map((task, index) => {
@@ -92,44 +102,38 @@ const TaskTable = ({ tasks }: IWidget) => {
                     </th>
                   );
                 })}
-              </tr>
-            ) : (
-              <></>
-            );
+              </tr>)
+            
           })}
         </thead>
         <tbody>
           {projects?.map((row, index) => (
             <tr key={index}>
               <td>{row.title}</td>
-              {tasksTitle && tasksTitle.length >= 3 ? (
-                tasksTitle[2].map((task, id) => {
-                  const taskData = tasks?.find(
-                    (value: ITaskData) =>
-                      value.title === task.title && value.project_id === row.id
-                  );
-                  return (
-                    <td key={id}>
+              {dataHeading?.map((task, id) => {
+                const taskData = tasks?.find(
+                  (value: ITaskData) =>
+                    value.title === task && value.project_id === row.id
+                );
+                return (
+                  <td key={id}>
+                    <div>
                       <div>
-                        <div>
-                          {taskData?.executor ? (
-                            <User {...taskData.executor} />
-                          ) : taskData?.assignees ? (
-                            <Assignees data={taskData} />
-                          ) : (
-                            <></>
-                          )}
-                        </div>
-                        <div>
-                          <Status task={taskData} />
-                        </div>
+                        {taskData?.executor ? (
+                          <User {...taskData.executor} />
+                        ) : taskData?.assignees ? (
+                          <Assignees data={taskData} />
+                        ) : (
+                          <></>
+                        )}
                       </div>
-                    </td>
-                  );
-                })
-              ) : (
-                <></>
-              )}
+                      <div>
+                        <Status task={taskData} />
+                      </div>
+                    </div>
+                  </td>
+                );
+              })}
             </tr>
           ))}
         </tbody>