2022-05-12 09:11:59 +08:00
|
|
|
|
import React, { useEffect, useState } from 'react';
|
|
|
|
|
|
import DataEmpty from './dataEmpty';
|
|
|
|
|
|
import DetectionModal from './detectionModal';
|
2022-05-16 09:42:01 +08:00
|
|
|
|
import { Table , Spin, message } from 'antd';
|
2022-05-12 09:11:59 +08:00
|
|
|
|
import axios from 'axios';
|
|
|
|
|
|
|
2022-05-16 09:42:01 +08:00
|
|
|
|
|
2022-05-12 09:11:59 +08:00
|
|
|
|
function Data(props){
|
|
|
|
|
|
const [ detectionVisible , setDetectionVisible ] = useState(false);
|
2022-05-16 09:42:01 +08:00
|
|
|
|
const [ dataSource , setDataSource ] = useState(undefined);
|
2022-05-12 09:11:59 +08:00
|
|
|
|
const [ page , setPage ] = useState(1);
|
2022-05-16 09:42:01 +08:00
|
|
|
|
const [ spining , setSpining ] = useState(true);
|
|
|
|
|
|
const [ relayCount , setRelayCount ] = useState(5);
|
|
|
|
|
|
const [ repeatId , setRepeatId ] = useState(undefined);
|
|
|
|
|
|
const [ repeatBranch , setRepeatBranch ] = useState(undefined);
|
|
|
|
|
|
|
2022-05-12 09:11:59 +08:00
|
|
|
|
const { owner , projectsId } = props.match.params;
|
2022-05-19 10:23:52 +08:00
|
|
|
|
const { current_user , isManager } = props;
|
2022-05-16 09:42:01 +08:00
|
|
|
|
const limit = 15;
|
|
|
|
|
|
|
2022-05-12 09:11:59 +08:00
|
|
|
|
|
|
|
|
|
|
function onDetectionOk(){
|
2022-05-26 14:51:48 +08:00
|
|
|
|
props.showNotification("新建分析成功,可在“检测状态”处查看扫描检测进度");
|
2022-05-12 09:11:59 +08:00
|
|
|
|
setDetectionVisible(false);
|
2022-05-16 09:42:01 +08:00
|
|
|
|
setSpining(true);
|
|
|
|
|
|
Init();
|
2022-05-12 09:11:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-16 09:42:01 +08:00
|
|
|
|
function Init(){
|
2022-05-12 09:11:59 +08:00
|
|
|
|
const url = `/traces/${owner}/${projectsId}/task_results.json`;
|
|
|
|
|
|
axios.get(url,{
|
|
|
|
|
|
params:{
|
|
|
|
|
|
page,limit
|
|
|
|
|
|
}
|
|
|
|
|
|
}).then(result=>{
|
|
|
|
|
|
if(result){
|
2022-05-16 09:42:01 +08:00
|
|
|
|
setDataSource(result.data.data);
|
2022-05-19 10:23:52 +08:00
|
|
|
|
setRelayCount(result.data.left_tasks_count);
|
2022-05-16 09:42:01 +08:00
|
|
|
|
setSpining(false);
|
2022-05-12 09:11:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
}).catch(error=>{})
|
2022-05-16 09:42:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(()=>{
|
|
|
|
|
|
setSpining(true);
|
|
|
|
|
|
Init();
|
2022-05-12 09:11:59 +08:00
|
|
|
|
},[])
|
|
|
|
|
|
|
2022-05-16 09:42:01 +08:00
|
|
|
|
|
|
|
|
|
|
// 重新扫描
|
|
|
|
|
|
function repeatCheck(project_id,branch){
|
|
|
|
|
|
if(relayCount <= 0){
|
|
|
|
|
|
message.error("无可用检测次数");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
setRepeatId(project_id);
|
|
|
|
|
|
setRepeatBranch(branch);
|
|
|
|
|
|
setDetectionVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function createCheck(){
|
|
|
|
|
|
if(relayCount <= 0){
|
|
|
|
|
|
message.error("无可用检测次数");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
setRepeatBranch(undefined);
|
|
|
|
|
|
setRepeatId(undefined);
|
2022-05-19 10:23:52 +08:00
|
|
|
|
setDetectionVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function handleDownExcel(task_id){
|
2022-05-19 17:56:42 +08:00
|
|
|
|
setSpining(true);
|
|
|
|
|
|
const url = `/api/traces/${owner}/${projectsId}/task_pdf.json?task_id=${task_id}`;
|
|
|
|
|
|
// window.open(`/api/traces/${owner}/${projectsId}/task_pdf.json?task_id=${task_id}`);
|
|
|
|
|
|
const x = new XMLHttpRequest();
|
|
|
|
|
|
x.open('GET', url, true)
|
|
|
|
|
|
x.responseType = 'blob';
|
|
|
|
|
|
x.onload = (e) => {
|
|
|
|
|
|
// 会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。
|
|
|
|
|
|
const url = window.URL.createObjectURL(x.response)
|
|
|
|
|
|
const a = document.createElement('a')
|
|
|
|
|
|
a.href = url;
|
|
|
|
|
|
a.download = "report.pdf";
|
|
|
|
|
|
a.click();
|
|
|
|
|
|
setSpining(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
x.send();
|
|
|
|
|
|
console.log("spining");
|
2022-05-16 09:42:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-12 09:11:59 +08:00
|
|
|
|
return(
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<DetectionModal
|
|
|
|
|
|
visible={detectionVisible}
|
|
|
|
|
|
onCancel={()=>setDetectionVisible(false)}
|
|
|
|
|
|
onOk={onDetectionOk}
|
|
|
|
|
|
owner={owner}
|
|
|
|
|
|
projectsId={projectsId}
|
2022-05-16 09:42:01 +08:00
|
|
|
|
relayCount={relayCount}
|
|
|
|
|
|
repeatId={repeatId}
|
|
|
|
|
|
repeatBranch={repeatBranch}
|
2022-05-12 09:11:59 +08:00
|
|
|
|
/>
|
|
|
|
|
|
<div className="servertitle">
|
|
|
|
|
|
<span className="systitle">重晴鸟代码溯源系统</span>
|
2022-05-19 10:23:52 +08:00
|
|
|
|
{ isManager && <a className="btnhover" onClick={createCheck}>新建分析</a> }
|
2022-05-12 09:11:59 +08:00
|
|
|
|
</div>
|
2022-05-16 09:42:01 +08:00
|
|
|
|
<Spin spinning={spining}>
|
|
|
|
|
|
<div style={{minHeight:"400px"}}>
|
|
|
|
|
|
{
|
|
|
|
|
|
dataSource && dataSource.length >0 &&
|
|
|
|
|
|
<div>
|
2022-05-19 10:23:52 +08:00
|
|
|
|
<ul className="dataUl">
|
|
|
|
|
|
<li className="dataUlhead">
|
|
|
|
|
|
<span>序号</span>
|
|
|
|
|
|
<span>分支名称</span>
|
|
|
|
|
|
<span>检测状态</span>
|
|
|
|
|
|
<span>检测时间</span>
|
2022-05-19 17:56:42 +08:00
|
|
|
|
{ isManager && <span>操作</span> }
|
2022-05-19 10:23:52 +08:00
|
|
|
|
</li>
|
|
|
|
|
|
{
|
|
|
|
|
|
dataSource.map((e,key)=>{
|
|
|
|
|
|
return(
|
|
|
|
|
|
<div key={key}>
|
|
|
|
|
|
<li className="dataUlbody">
|
|
|
|
|
|
<span>{key + 1 }</span>
|
|
|
|
|
|
<span title={e.branch_tag}>{e.branch_tag}</span>
|
|
|
|
|
|
<span>
|
|
|
|
|
|
{
|
|
|
|
|
|
e.detect_status === "fail" ?
|
|
|
|
|
|
<span className="failure">失败</span>
|
|
|
|
|
|
: e.detect_status==="detecting" ?
|
|
|
|
|
|
<div className="running">
|
|
|
|
|
|
<span className="percentline" style={{width:`${e.detect_process}%`}}></span>
|
|
|
|
|
|
<span className="percentNum" style={{left:`${e.detect_process+5}%`}}>{e.detect_process}%</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
:
|
|
|
|
|
|
<span className="success">成功</span>
|
|
|
|
|
|
}
|
|
|
|
|
|
</span>
|
|
|
|
|
|
<span>{e.detect_startdate}</span>
|
2022-05-19 17:56:42 +08:00
|
|
|
|
{
|
|
|
|
|
|
isManager &&
|
|
|
|
|
|
<span>
|
2022-05-19 10:23:52 +08:00
|
|
|
|
<div className="operationBtns">
|
2022-05-19 17:56:42 +08:00
|
|
|
|
{
|
|
|
|
|
|
e.detect_status ==="detecting" ?
|
|
|
|
|
|
<span>重新扫描</span>
|
|
|
|
|
|
:
|
|
|
|
|
|
<a onClick={()=>repeatCheck(e.project_id,e.branch_tag)}>重新扫描</a>
|
|
|
|
|
|
}
|
|
|
|
|
|
{/* {
|
|
|
|
|
|
(e.detect_status ==="fail" || e.detect_status ==="detecting") ?
|
|
|
|
|
|
<span>查看<i className="iconfont icon-sanjiaoxing-down"></i></span>
|
|
|
|
|
|
:
|
|
|
|
|
|
<a>查看<i className="iconfont icon-sanjiaoxing-down"></i></a>
|
|
|
|
|
|
} */}
|
|
|
|
|
|
{
|
|
|
|
|
|
(e.detect_status ==="fail" || e.detect_status ==="detecting") ?
|
|
|
|
|
|
<span>下载报告</span>
|
|
|
|
|
|
:
|
|
|
|
|
|
<a onClick={()=>handleDownExcel(e.task_id)}>下载报告</a>
|
|
|
|
|
|
}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</span>
|
|
|
|
|
|
}
|
2022-05-19 10:23:52 +08:00
|
|
|
|
</li>
|
|
|
|
|
|
{false && <iframe src="www.baidu.com" id={`htmlIframe_${key}`} frameBorder="0" name={`htmlIframe_${key}`} style={{ background: '#fff', height: '100%', width: '100%' }}></iframe>}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
</ul>
|
2022-05-16 09:42:01 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
}
|
|
|
|
|
|
{
|
2022-05-19 10:23:52 +08:00
|
|
|
|
(dataSource === null || (dataSource && dataSource.length === 0)) &&
|
2022-05-16 09:42:01 +08:00
|
|
|
|
<DataEmpty />
|
|
|
|
|
|
}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</Spin>
|
2022-05-12 09:11:59 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
export default Data;
|