Commit 03edabde authored by chenshouchao's avatar chenshouchao

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

parents eea99569 3420e8b2
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
.cardLeft { .cardLeft {
flex: 1; flex: 1;
cursor: pointer;
padding: 16px 24px; padding: 16px 24px;
} }
......
...@@ -3,12 +3,12 @@ import { useNavigate } from "react-router-dom"; ...@@ -3,12 +3,12 @@ import { useNavigate } from "react-router-dom";
import MyProgress from "@/components/mui/MyProgress"; import MyProgress from "@/components/mui/MyProgress";
import style from "./index.module.css"; import style from "./index.module.css";
import runTime from '../../../../assets/project/runTime.svg' import runTime from "../../../../assets/project/runTime.svg";
import jobCostImg from '../../../../assets/project/jobCost.svg' import jobCostImg from "../../../../assets/project/jobCost.svg";
import jobSue from '../../../../assets/project/jobSue.svg' import jobSue from "../../../../assets/project/jobSue.svg";
import jobFail from '../../../../assets/project/jobFail.svg' import jobFail from "../../../../assets/project/jobFail.svg";
import jobRun from '../../../../assets/project/jobRun.svg' import jobRun from "../../../../assets/project/jobRun.svg";
import jobCadence from '../../../../assets/project/jobCadence.svg' import jobCadence from "../../../../assets/project/jobCadence.svg";
import fileIcon from "@/assets/project/fileIcon.svg"; import fileIcon from "@/assets/project/fileIcon.svg";
import dataSetIcon from "@/assets/project/dataSetIcon.svg"; import dataSetIcon from "@/assets/project/dataSetIcon.svg";
...@@ -25,8 +25,20 @@ type TaskCardProps = { ...@@ -25,8 +25,20 @@ type TaskCardProps = {
}; };
const TaskCard = (props: TaskCardProps) => { const TaskCard = (props: TaskCardProps) => {
const { id, name, creator, state, completeNum, totalNum, costTime, jobCost, outputs } = props; const {
id,
name,
creator,
state,
completeNum,
totalNum,
costTime,
jobCost,
outputs,
} = props;
const navigate = useNavigate(); const navigate = useNavigate();
const [displayTitleBlue, setDisplayTitleBlue] = useState<boolean>(false);
const randerOutputs = useMemo(() => { const randerOutputs = useMemo(() => {
if (outputs) { if (outputs) {
let result = Object.keys(outputs); let result = Object.keys(outputs);
...@@ -45,10 +57,10 @@ const TaskCard = (props: TaskCardProps) => { ...@@ -45,10 +57,10 @@ const TaskCard = (props: TaskCardProps) => {
} else { } else {
return []; return [];
} }
}, [outputs]) }, [outputs]);
// 结果文件跳转 // 结果文件跳转
const goToProjectData = (info: any) => { const goToProjectData = (info: any) => {
let { path = '', type = '' } = info let { path = "", type = "" } = info;
const lastIndex = path.lastIndexOf("/"); const lastIndex = path.lastIndexOf("/");
// /projectData // /projectData
// dataType // dataType
...@@ -57,49 +69,49 @@ const TaskCard = (props: TaskCardProps) => { ...@@ -57,49 +69,49 @@ const TaskCard = (props: TaskCardProps) => {
} }
path = path.slice(12); path = path.slice(12);
navigate(`/product/cadd/projectData`, { navigate(`/product/cadd/projectData`, {
state: { pathName: path || '/', dataType: type }, state: { pathName: path || "/", dataType: type },
}); });
} };
// 跳转详情页 // 跳转详情页
const gotoDetail = (id: string) => { const gotoDetail = (id: string) => {
navigate(`/product/cadd/projectJobDetail`, { navigate(`/product/cadd/projectJobDetail`, {
state: { taskId: id, from: 'projectOverview' }, state: { taskId: id, from: "projectOverview" },
}); });
} };
// 渲染状态图标 // 渲染状态图标
const renderStatusIcon = (data: string) => { const renderStatusIcon = (data: string) => {
switch (data) { switch (data) {
case "SUBMITTED": case "SUBMITTED":
return jobRun return jobRun;
case "RUNNING": case "RUNNING":
return jobRun return jobRun;
case "ABORTED": case "ABORTED":
return jobCadence return jobCadence;
case "FAILED": case "FAILED":
return jobFail return jobFail;
case "SUCCEEDED": case "SUCCEEDED":
return jobSue return jobSue;
default: default:
return jobCadence return jobCadence;
}
} }
};
// 渲染状态 // 渲染状态
const renderStatusText = (data: string) => { const renderStatusText = (data: string) => {
switch (data) { switch (data) {
case "SUBMITTED": case "SUBMITTED":
return "正在启动"; return "正在启动";
case "RUNNING": case "RUNNING":
return '正在运行' return "正在运行";
case "ABORTED": case "ABORTED":
return '运行终止' return "运行终止";
case "FAILED": case "FAILED":
return '运行失败' return "运行失败";
case "SUCCEEDED": case "SUCCEEDED":
return '运行成功' return "运行成功";
default: default:
return '未知' return "未知";
}
} }
};
// 渲染字体颜色 // 渲染字体颜色
const renderTextColor = (data: string) => { const renderTextColor = (data: string) => {
switch (data) { switch (data) {
...@@ -151,12 +163,33 @@ const TaskCard = (props: TaskCardProps) => { ...@@ -151,12 +163,33 @@ const TaskCard = (props: TaskCardProps) => {
return "disable"; return "disable";
} }
}, []); }, []);
return <div className={style.cardBox}> return (
<div className={style.cardLeft}> <div className={style.cardBox}>
<div
className={style.cardLeft}
onClick={() => gotoDetail(id)}
onMouseOver={() => setDisplayTitleBlue(true)}
onMouseOut={() => setDisplayTitleBlue(false)}
>
<div className={style.topLine}> <div className={style.topLine}>
<div className={style.taskName} onClick={() => gotoDetail(id)}>{name}</div> <div
<div className={style.taskStatus} style={{ color: renderTextColor(state), background: renderBackgroundColor(state) }}> className={style.taskName}
<img src={renderStatusIcon(state)} alt="" className={style.statusImg} /> style={displayTitleBlue ? { color: "#1370ff" } : undefined}
>
{name}
</div>
<div
className={style.taskStatus}
style={{
color: renderTextColor(state),
background: renderBackgroundColor(state),
}}
>
<img
src={renderStatusIcon(state)}
alt=""
className={style.statusImg}
/>
<span>{renderStatusText(state)}</span> <span>{renderStatusText(state)}</span>
</div> </div>
</div> </div>
...@@ -164,9 +197,14 @@ const TaskCard = (props: TaskCardProps) => { ...@@ -164,9 +197,14 @@ const TaskCard = (props: TaskCardProps) => {
<div className={style.taskProgress}> <div className={style.taskProgress}>
<div className={style.progressInfo}> <div className={style.progressInfo}>
<div>Progress</div> <div>Progress</div>
<div style={{ color: renderTextColor(state) }}>{completeNum + "/" + totalNum}</div> <div style={{ color: renderTextColor(state) }}>
{completeNum + "/" + totalNum}
</div> </div>
<MyProgress color={renderProgressColor(state)} value={(completeNum / totalNum) * 100} /> </div>
<MyProgress
color={renderProgressColor(state)}
value={(completeNum / totalNum) * 100}
/>
</div> </div>
<div className={style.bottomLine}> <div className={style.bottomLine}>
<img alt="" src={runTime} /> <img alt="" src={runTime} />
...@@ -179,24 +217,31 @@ const TaskCard = (props: TaskCardProps) => { ...@@ -179,24 +217,31 @@ const TaskCard = (props: TaskCardProps) => {
<div className={style.arrow}></div> <div className={style.arrow}></div>
</div> </div>
<div className={style.cardRight}> <div className={style.cardRight}>
{randerOutputs.length === 0 ? <div className={style.noResult}>暂无结果文件</div> : {randerOutputs.length === 0 ? (
<div className={style.noResult}>暂无结果文件</div>
) : (
<div className={style.resultBox}> <div className={style.resultBox}>
{randerOutputs.map((item, index) => { {randerOutputs.map((item, index) => {
return <div key={index} className={style.result} onClick={() => goToProjectData(item)}> return (
<div
key={index}
className={style.result}
onClick={() => goToProjectData(item)}
>
<img <img
className={style.outputLeftImg} className={style.outputLeftImg}
src={ src={item?.type === "file" ? fileIcon : dataSetIcon}
item?.type === "file" ? fileIcon : dataSetIcon
}
alt="" alt=""
/> />
<span className={style.outputTitle}>{item?.name}</span> <span className={style.outputTitle}>{item?.name}</span>
</div> </div>
);
})} })}
</div> </div>
} )}
</div> </div>
</div> </div>
} );
};
export default TaskCard export default TaskCard;
\ No newline at end of file
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