Commit f921c2b3 authored by chenshouchao's avatar chenshouchao

Merge branch 'feat-20220801' of http://120.77.149.83/root/bkunyun into feat-20220801

parents 2bb120c3 c3e98d12
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生#A02208 yongsheng.wu@wholion.com * @Author: 吴永生#A02208 yongsheng.wu@wholion.com
* @Date: 2022-06-21 20:03:56 * @Date: 2022-06-21 20:03:56
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-08-23 19:27:18 * @LastEditTime: 2022-09-01 09:39:20
* @FilePath: /bkunyun/src/views/Project/ProjectSubmitWork/index.tsx * @FilePath: /bkunyun/src/views/Project/ProjectSubmitWork/index.tsx
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
...@@ -39,15 +39,20 @@ import { useMessage } from "@/components/MySnackbar"; ...@@ -39,15 +39,20 @@ import { useMessage } from "@/components/MySnackbar";
import MyPopconfirm from "@/components/mui/MyPopconfirm"; import MyPopconfirm from "@/components/mui/MyPopconfirm";
import SeeDataset from "../ProjectData/SeeDataset"; import SeeDataset from "../ProjectData/SeeDataset";
import { getToken, storageUnitFromB } from "@/utils/util"; import { getToken, storageUnitFromB } from "@/utils/util";
import LogView from "./LogView" import LogView from "./LogView";
import usePass from "@/hooks/usePass"; import usePass from "@/hooks/usePass";
import { IFlowNodeTransmissionNum } from "./interface"; import { IFlowNodeTransmissionNum } from "./interface";
import { getConnectionArr, getDatasetName, getDatasetPath, getSameBatch } from "./utils"; import {
getConnectionArr,
getDatasetName,
getDatasetPath,
getSameBatch,
} from "./utils";
import styles from "./index.module.css"; import styles from "./index.module.css";
const stateMap = { const stateMap = {
SUBMITTED:"正在启动", SUBMITTED: "正在启动",
RUNNING: "正在运行", RUNNING: "正在运行",
ABORTED: "运行终止", ABORTED: "运行终止",
FAILED: "运行失败", FAILED: "运行失败",
...@@ -85,7 +90,7 @@ const ProjectSubmitWork = observer(() => { ...@@ -85,7 +90,7 @@ const ProjectSubmitWork = observer(() => {
// 查看日志弹框显示 // 查看日志弹框显示
const [showLogView, setShowLogView] = useState<boolean>(false); const [showLogView, setShowLogView] = useState<boolean>(false);
// 日志信息 // 日志信息
const [logs, setLogs] = useState<Array<any>>([]) const [logs, setLogs] = useState<Array<any>>([]);
const { name, state } = workFlowJobInfo || {}; const { name, state } = workFlowJobInfo || {};
// 查看数据集(数据集详情)显示控制 // 查看数据集(数据集详情)显示控制
...@@ -97,68 +102,79 @@ const ProjectSubmitWork = observer(() => { ...@@ -97,68 +102,79 @@ const ProjectSubmitWork = observer(() => {
/** 获取模版数据 */ /** 获取模版数据 */
const { run } = useMyRequest(fetchWorkFlowJob, { const { run } = useMyRequest(fetchWorkFlowJob, {
pollingInterval: 1000 * 60, pollingInterval: 1000 * 20,
pollingWhenHidden: false, pollingWhenHidden: false,
onSuccess: (res: IResponse<ITaskInfo>) => { onSuccess: (res: IResponse<ITaskInfo>) => {
getOutouts(res.data.outputs); getOutouts(res.data.outputs);
getLogs(res.data); getLogs(res.data);
setWorkFlowJobInfo(res.data); setWorkFlowJobInfo(res.data);
const newWorkflowId = locationInfo?.taskId?.replaceAll('-', '') const newWorkflowId = locationInfo?.taskId?.replaceAll("-", "");
getFlowNumber({projectId,workflowId: newWorkflowId,filetoken:fileToken, token: getToken()}) getFlowNumber({
projectId,
workflowId: newWorkflowId,
filetoken: fileToken,
token: getToken(),
});
}, },
}); });
// 处理日志数据 // 处理日志数据
const getLogs = (data: any) => { const getLogs = (data: any) => {
let logs = [{ logName: "workflow.log", logPath: data.logPath }] let logs = [{ logName: "workflow.log", logPath: data.logPath }];
data.tasks.forEach((i: any) => { data.tasks.forEach((i: any) => {
if (i.outLog) { if (i.outLog) {
logs.push({ logName: `${i.title}.log`, logPath: i.outLog }) logs.push({ logName: `${i.title}.log`, logPath: i.outLog });
} }
}); });
setLogs(logs) setLogs(logs);
} };
/** 更新流节点传输数据 */ /** 更新流节点传输数据 */
const updateFlowNodeEdgeLabel = useCallback((flowNodeInfo: IFlowNodeTransmissionNum[])=>{ const updateFlowNodeEdgeLabel = useCallback(
const newTasks = workFlowJobInfo && workFlowJobInfo?.tasks?.length && workFlowJobInfo?.tasks.map(item=>{ (flowNodeInfo: IFlowNodeTransmissionNum[]) => {
if(getSameBatch(flowNodeInfo, item)){ const newTasks =
const newEdges = item?.edges?.length && item.edges.map(edgeItem => { workFlowJobInfo &&
const connectionArr = getConnectionArr(flowNodeInfo,edgeItem ) workFlowJobInfo?.tasks?.length &&
if(connectionArr?.length){ workFlowJobInfo?.tasks.map((item) => {
if (getSameBatch(flowNodeInfo, item)) {
const newEdges =
item?.edges?.length &&
item.edges.map((edgeItem) => {
const connectionArr = getConnectionArr(flowNodeInfo, edgeItem);
if (connectionArr?.length) {
return {
...edgeItem,
label: String(connectionArr[0]?.value),
};
} else {
return edgeItem;
}
});
return { return {
...edgeItem, ...item,
label: String(connectionArr[0]?.value) edges: newEdges || [],
} };
}else { } else {
return edgeItem return item;
} }
}) });
return { if (workFlowJobInfo) {
...item, setWorkFlowJobInfo({
edges: newEdges || [], ...workFlowJobInfo,
} tasks: newTasks || [],
} else { });
return item
} }
}) },
if(workFlowJobInfo) { [workFlowJobInfo]
setWorkFlowJobInfo({ );
...workFlowJobInfo,
tasks: newTasks || []
})
}
},[workFlowJobInfo])
/** 获取流节点数据 */ /** 获取流节点数据 */
const { run: getFlowNumber } = useMyRequest(fetchFlowOutputNumber, { const { run: getFlowNumber } = useMyRequest(fetchFlowOutputNumber, {
pollingInterval: 1000 * 20, pollingInterval: 1000 * 20,
pollingWhenHidden: false, pollingWhenHidden: false,
onSuccess: (res: IResponse<IFlowNodeTransmissionNum[]>) => { onSuccess: (res: IResponse<IFlowNodeTransmissionNum[]>) => {
if(res?.data?.length){ if (res?.data?.length) {
updateFlowNodeEdgeLabel(res.data) updateFlowNodeEdgeLabel(res.data);
} }
}, },
}); });
...@@ -291,8 +307,9 @@ const ProjectSubmitWork = observer(() => { ...@@ -291,8 +307,9 @@ const ProjectSubmitWork = observer(() => {
if (Array.isArray(res.data)) { if (Array.isArray(res.data)) {
res.data.forEach((item1) => { res.data.forEach((item1) => {
if (item1.name === item.path.slice(item.path.lastIndexOf("/") + 1)) { if (item1.name === item.path.slice(item.path.lastIndexOf("/") + 1)) {
randerOutputs[index].size = `${item1.size ? storageUnitFromB(Number(item1.size)) : "-" randerOutputs[index].size = `${
}`; item1.size ? storageUnitFromB(Number(item1.size)) : "-"
}`;
setRanderOutputs([...randerOutputs]); setRanderOutputs([...randerOutputs]);
} }
}); });
...@@ -349,7 +366,7 @@ const ProjectSubmitWork = observer(() => { ...@@ -349,7 +366,7 @@ const ProjectSubmitWork = observer(() => {
setOverviewActive(false); setOverviewActive(false);
setShowOptions(!showOptions); setShowOptions(!showOptions);
}; };
/** 终止任务 */ /** 终止任务 */
const onStopJob = useCallback(() => { const onStopJob = useCallback(() => {
cancelWorkJob({ cancelWorkJob({
...@@ -365,7 +382,7 @@ const ProjectSubmitWork = observer(() => { ...@@ -365,7 +382,7 @@ const ProjectSubmitWork = observer(() => {
}, [deleteWorkJob, workFlowJobInfo?.id]); }, [deleteWorkJob, workFlowJobInfo?.id]);
const returnPermission = useMemo(() => { const returnPermission = useMemo(() => {
if (['SUBMITTED', 'RUNNING'].includes(state || '')) { if (["SUBMITTED", "RUNNING"].includes(state || "")) {
return isPass("PROJECT_WORKBENCH_JOBS_STOP", "USER"); return isPass("PROJECT_WORKBENCH_JOBS_STOP", "USER");
} else { } else {
return isPass("PROJECT_WORKBENCH_JOBS_DELETE", "MANAGER"); return isPass("PROJECT_WORKBENCH_JOBS_DELETE", "MANAGER");
...@@ -397,8 +414,8 @@ const ProjectSubmitWork = observer(() => { ...@@ -397,8 +414,8 @@ const ProjectSubmitWork = observer(() => {
}; };
const handleClose = () => { const handleClose = () => {
setShowLogView(false) setShowLogView(false);
} };
return ( return (
<div className={styles.swBox}> <div className={styles.swBox}>
...@@ -436,18 +453,22 @@ const ProjectSubmitWork = observer(() => { ...@@ -436,18 +453,22 @@ const ProjectSubmitWork = observer(() => {
}} }}
> */} > */}
<MyButton <MyButton
text={['SUBMITTED', 'RUNNING'].includes(state || '') ? "终止" : "删除"} text={
["SUBMITTED", "RUNNING"].includes(state || "")
? "终止"
: "删除"
}
variant="outlined" variant="outlined"
color="secondary" color="secondary"
onClick={(e: any) => onClick={(e: any) =>
handleShowPopper( handleShowPopper(
e, e,
['SUBMITTED', 'RUNNING'].includes(state || '') ["SUBMITTED", "RUNNING"].includes(state || "")
? "正在运行的任务终止后将无法重新运行,确认继续吗?" ? "正在运行的任务终止后将无法重新运行,确认继续吗?"
: "任务被删除后将无法恢复,确认继续吗?" : "任务被删除后将无法恢复,确认继续吗?"
) )
} }
// click={onStopJob} // click={onStopJob}
></MyButton> ></MyButton>
{/* </MyPopconfirm> */} {/* </MyPopconfirm> */}
</div> </div>
...@@ -480,7 +501,9 @@ const ProjectSubmitWork = observer(() => { ...@@ -480,7 +501,9 @@ const ProjectSubmitWork = observer(() => {
} }
alt="" alt=""
/> />
<span className={styles.outputItemName}>{item.name}</span> <span className={styles.outputItemName}>
{item.name}
</span>
</div> </div>
{/* </MyPopconfirm> */} {/* </MyPopconfirm> */}
<span className={styles.outputLiRight}> <span className={styles.outputLiRight}>
...@@ -493,8 +516,8 @@ const ProjectSubmitWork = observer(() => { ...@@ -493,8 +516,8 @@ const ProjectSubmitWork = observer(() => {
)} )}
{(!workFlowJobInfo?.outputs || {(!workFlowJobInfo?.outputs ||
Object.keys(workFlowJobInfo?.outputs).length === 0) && ( Object.keys(workFlowJobInfo?.outputs).length === 0) && (
<div className={styles.notResults}>暂无结果文件</div> <div className={styles.notResults}>暂无结果文件</div>
)} )}
<div className={styles.title}>任务信息</div> <div className={styles.title}>任务信息</div>
<div className={styles.taskInfoLi}> <div className={styles.taskInfoLi}>
<div className={styles.taskInfoParams}>任务名称</div> <div className={styles.taskInfoParams}>任务名称</div>
...@@ -541,7 +564,7 @@ const ProjectSubmitWork = observer(() => { ...@@ -541,7 +564,7 @@ const ProjectSubmitWork = observer(() => {
alt="" alt=""
/> />
)} )}
{['SUBMITTED', 'RUNNING'].includes(state || '') && ( {["SUBMITTED", "RUNNING"].includes(state || "") && (
<img <img
className={styles.taskInfoValueIcon} className={styles.taskInfoValueIcon}
src={jobRun} src={jobRun}
...@@ -766,11 +789,7 @@ const ProjectSubmitWork = observer(() => { ...@@ -766,11 +789,7 @@ const ProjectSubmitWork = observer(() => {
projectId={projectId as string} projectId={projectId as string}
></SeeDataset> ></SeeDataset>
)} )}
<LogView <LogView isshow={showLogView} handleClose={handleClose} logs={logs} />
isshow={showLogView}
handleClose={handleClose}
logs={logs}
/>
</div> </div>
); );
}); });
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: rocosen * @Author: rocosen
* @Date: 2022-06-12 10:05:13 * @Date: 2022-06-12 10:05:13
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-08-30 18:21:04 * @LastEditTime: 2022-09-01 09:31:56
* @FilePath: /bkunyun/src/views/Project/ProjectSetting/index.tsx * @FilePath: /bkunyun/src/views/Project/ProjectSetting/index.tsx
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
...@@ -35,7 +35,7 @@ const ProjectWorkbench = observer(() => { ...@@ -35,7 +35,7 @@ const ProjectWorkbench = observer(() => {
hide: !isPass("PROJECT_WORKBENCH_FLOES"), hide: !isPass("PROJECT_WORKBENCH_FLOES"),
icon: Template, icon: Template,
iconed: TemplateSelect, iconed: TemplateSelect,
iconHover: TemplateHover iconHover: TemplateHover,
}, },
{ {
label: "任务列表", label: "任务列表",
...@@ -50,9 +50,18 @@ const ProjectWorkbench = observer(() => { ...@@ -50,9 +50,18 @@ const ProjectWorkbench = observer(() => {
}, [isPass]); }, [isPass]);
return ( return (
<div style={{ padding:'28px 24px 24px' }}> <div style={{ padding: "28px 24px 24px", height: "100%" }}>
<div style={{ display: "flex", alignItems: "center" }}> <div style={{ display: "flex", alignItems: "center" }}>
<span style={{ fontSize: "18px", lineHeight: "26px", fontWeight: "600", color: "#1E2633" }}>工作台</span> <span
style={{
fontSize: "18px",
lineHeight: "26px",
fontWeight: "600",
color: "#1E2633",
}}
>
工作台
</span>
</div> </div>
<Box sx={{ width: "100%", typography: "body1" }}> <Box sx={{ width: "100%", typography: "body1" }}>
<Tabs <Tabs
......
...@@ -130,7 +130,7 @@ const OperatorItem = (props: IOperatorItemProps) => { ...@@ -130,7 +130,7 @@ const OperatorItem = (props: IOperatorItemProps) => {
draggable={true} draggable={true}
onDragStart={onDragStart} onDragStart={onDragStart}
onDragEnd={onDragEnd} onDragEnd={onDragEnd}
onDragOver={(e)=>e.preventDefault()} onDragOver={(e) => e.preventDefault()}
// dragOver( e ){ e.preventDefault }; // dragOver( e ){ e.preventDefault };
> >
<h2 className={styles.operatorItemTitle}>{title}</h2> <h2 className={styles.operatorItemTitle}>{title}</h2>
...@@ -230,7 +230,9 @@ const OperatorList = observer((props: IOperatorListProps) => { ...@@ -230,7 +230,9 @@ const OperatorList = observer((props: IOperatorListProps) => {
) : ( ) : (
<div className={styles.noData}> <div className={styles.noData}>
<img src={noTemplate} alt="" className={styles.noDataImg} /> <img src={noTemplate} alt="" className={styles.noDataImg} />
<span className={styles.noDataText}>没有找到相关算子</span> <span className={styles.noDataText}>
{keyword ? "没有找到相关算子" : "暂无相关算子"}
</span>
</div> </div>
)} )}
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment