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