2020-08-28 11:58:32 +08:00
|
|
|
|
import React, { useState, useEffect } from "react";
|
|
|
|
|
|
import { Spin } from "antd";
|
2020-08-09 22:39:58 +08:00
|
|
|
|
import { FlexAJ, AlignCenter } from "../Component/layout";
|
2020-08-28 11:58:32 +08:00
|
|
|
|
import axios from "axios";
|
2020-07-13 15:17:28 +08:00
|
|
|
|
|
2020-08-28 11:58:32 +08:00
|
|
|
|
export default ({
|
|
|
|
|
|
data,
|
|
|
|
|
|
stepN,
|
|
|
|
|
|
stageN,
|
|
|
|
|
|
projectId,
|
|
|
|
|
|
owner,
|
|
|
|
|
|
opsId,
|
|
|
|
|
|
rightSpin,
|
|
|
|
|
|
}) => {
|
|
|
|
|
|
const [coders, setCoders] = useState(undefined);
|
|
|
|
|
|
const [empty, setEmpty] = useState(false);
|
|
|
|
|
|
const [spining, setSpining] = useState(true);
|
|
|
|
|
|
const [stage, setStage] = useState(undefined);
|
|
|
|
|
|
const [step, setStep] = useState(undefined);
|
|
|
|
|
|
useEffect(() => {
|
2020-08-26 16:09:27 +08:00
|
|
|
|
setSpining(rightSpin);
|
2020-08-28 11:58:32 +08:00
|
|
|
|
}, [rightSpin]);
|
2020-08-27 15:15:03 +08:00
|
|
|
|
|
2020-08-28 11:58:32 +08:00
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
if (data) {
|
2020-08-27 15:15:03 +08:00
|
|
|
|
let stages = data.stages;
|
2020-08-28 11:58:32 +08:00
|
|
|
|
if (stages && stages.length > 0) {
|
|
|
|
|
|
let pre = stageN
|
|
|
|
|
|
? stages.filter((item) => item.number === stageN)[0]
|
|
|
|
|
|
: stages[0];
|
2020-08-27 15:15:03 +08:00
|
|
|
|
setStage(pre);
|
|
|
|
|
|
let p = pre && pre.steps;
|
2020-08-28 11:58:32 +08:00
|
|
|
|
let sub = stepN
|
|
|
|
|
|
? p && p.length > 0 && p.filter((item) => item.id === stepN)[0]
|
|
|
|
|
|
: p[0];
|
2020-08-27 15:15:03 +08:00
|
|
|
|
|
|
|
|
|
|
setStep(sub);
|
2020-09-09 16:50:48 +08:00
|
|
|
|
if (sub && sub.status !== "skipped") {
|
2020-08-28 11:58:32 +08:00
|
|
|
|
getStep(pre.number, sub.number);
|
2020-08-27 15:15:03 +08:00
|
|
|
|
}
|
2020-09-09 16:50:48 +08:00
|
|
|
|
// 如果状态是skipped就不用去调用接口查询对应的out信息了
|
|
|
|
|
|
if(sub.status === "skipped"){
|
|
|
|
|
|
setCoders(undefined);
|
|
|
|
|
|
setEmpty(true);
|
|
|
|
|
|
setSpining(false);
|
|
|
|
|
|
}
|
2020-08-28 11:58:32 +08:00
|
|
|
|
} else {
|
2020-08-27 15:15:03 +08:00
|
|
|
|
setSpining(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-08-28 11:58:32 +08:00
|
|
|
|
}, [data, stageN, stepN]);
|
2020-08-27 15:15:03 +08:00
|
|
|
|
|
2020-08-28 11:58:32 +08:00
|
|
|
|
function getStep(stageN, stepN) {
|
|
|
|
|
|
if (stageN && stepN) {
|
2020-08-27 15:15:03 +08:00
|
|
|
|
const url = `/${owner}/${projectId}/builds/${opsId}/logs/${stageN}/${stepN}.json`;
|
2020-09-09 15:35:22 +08:00
|
|
|
|
axios.get(url).then((result) => {
|
|
|
|
|
|
if (result) {
|
|
|
|
|
|
setCoders(result.data);
|
|
|
|
|
|
setSpining(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
|
console.log(error);
|
|
|
|
|
|
});
|
2020-08-09 22:39:58 +08:00
|
|
|
|
}
|
2020-08-27 15:15:03 +08:00
|
|
|
|
}
|
2020-08-09 22:39:58 +08:00
|
|
|
|
return (
|
2020-08-26 16:09:27 +08:00
|
|
|
|
<Spin spinning={spining}>
|
|
|
|
|
|
<div className="rightMainContent">
|
2020-08-28 11:58:32 +08:00
|
|
|
|
{data && data.status !== "error" ? (
|
2020-08-26 16:09:27 +08:00
|
|
|
|
<div>
|
2020-08-27 15:15:03 +08:00
|
|
|
|
<FlexAJ className="items">
|
|
|
|
|
|
<span>{step && step.name}</span>
|
|
|
|
|
|
<AlignCenter>
|
2020-08-28 11:58:32 +08:00
|
|
|
|
{step && step.duration_time}
|
2020-08-27 15:15:03 +08:00
|
|
|
|
<i className="iconfont icon-sanjiaoxing-down"></i>
|
|
|
|
|
|
</AlignCenter>
|
|
|
|
|
|
</FlexAJ>
|
|
|
|
|
|
<div>
|
2020-08-28 11:58:32 +08:00
|
|
|
|
{coders && coders.length > 0 ? (
|
|
|
|
|
|
coders.map((item, key) => {
|
|
|
|
|
|
return (
|
2020-08-27 15:15:03 +08:00
|
|
|
|
<div className="opsDetailOut">
|
2020-08-28 11:58:32 +08:00
|
|
|
|
<span>{key + 1}</span>
|
2020-08-27 15:15:03 +08:00
|
|
|
|
<p>{item.out}</p>
|
|
|
|
|
|
</div>
|
2020-08-28 11:58:32 +08:00
|
|
|
|
);
|
|
|
|
|
|
})
|
|
|
|
|
|
) : empty ? (
|
2020-08-27 15:15:03 +08:00
|
|
|
|
<div className="opsDetailOut">
|
|
|
|
|
|
<span>1</span>
|
2020-08-28 11:58:32 +08:00
|
|
|
|
<p>
|
|
|
|
|
|
{stage && stage.name} – {step && step.name}: Skipped
|
|
|
|
|
|
</p>
|
2020-08-27 15:15:03 +08:00
|
|
|
|
</div>
|
2020-08-28 11:58:32 +08:00
|
|
|
|
) : (
|
|
|
|
|
|
""
|
|
|
|
|
|
)}
|
2020-08-27 15:15:03 +08:00
|
|
|
|
</div>
|
2020-08-26 16:09:27 +08:00
|
|
|
|
</div>
|
2020-08-28 11:58:32 +08:00
|
|
|
|
) : (
|
|
|
|
|
|
<div style={{ color: "red" }}>error:{data && data.error}</div>
|
|
|
|
|
|
)}
|
2020-08-26 16:09:27 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</Spin>
|
2020-08-09 22:39:58 +08:00
|
|
|
|
);
|
2020-08-28 11:58:32 +08:00
|
|
|
|
};
|