From b1ee7c1bd064e7fb1edc358de813b8edc3fabc92 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Mon, 4 Nov 2024 17:38:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E6=BA=90=E5=BA=A6=E9=87=8F-=E5=AD=90?= =?UTF-8?q?=E7=BB=B4=E5=BA=A6=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/webpackDevServer.config.js | 15 +-- public/images/loading@2x.fispool | Bin 0 -> 20821 bytes public/images/loading@2x.gif | Bin 16166 -> 20821 bytes src/forge/Server/Index.jsx | 4 +- src/forge/Server/measurement/api.js | 16 --- .../Server/measurement/componet/indicator.jsx | 9 +- .../Server/measurement/componet/radar.jsx | 31 +++++- src/forge/Server/measurement/dimension.jsx | 19 +++- src/forge/Server/measurement/fetch.js | 8 -- src/forge/Server/measurement/index.jsx | 49 +++++++--- src/forge/Server/measurement/javaFetch.js | 91 ------------------ 11 files changed, 86 insertions(+), 156 deletions(-) create mode 100644 public/images/loading@2x.fispool delete mode 100644 src/forge/Server/measurement/api.js delete mode 100644 src/forge/Server/measurement/fetch.js delete mode 100644 src/forge/Server/measurement/javaFetch.js diff --git a/config/webpackDevServer.config.js b/config/webpackDevServer.config.js index a4f3a2c57..f12d31594 100644 --- a/config/webpackDevServer.config.js +++ b/config/webpackDevServer.config.js @@ -80,20 +80,7 @@ module.exports = function(proxy, allowedHost) { disableDotRule: true, }, public: allowedHost, - proxy:{ - "/api/OSS_Health_Measuring":{ - target: 'http://60.205.224.11:8060', - changeOrigin: true, - }, - "/api/OHM_can_get":{ - target: 'http://60.205.224.11:8060', - changeOrigin: true, - }, - "/api":{ - target: "https://testforgeplus.trustie.net", - changeOrigin: true, - } - }, + proxy, before(app) { // This lets us open files from the runtime error overlay. app.use(errorOverlayMiddleware()); diff --git a/public/images/loading@2x.fispool b/public/images/loading@2x.fispool new file mode 100644 index 0000000000000000000000000000000000000000..4fb8f34a7f486266b45568e50724c59fb29ab02f GIT binary patch literal 20821 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 literal 0 HcmV?d00001 diff --git a/public/images/loading@2x.gif b/public/images/loading@2x.gif index bcc021eb59bc6cddc414d08c294d823082d75baf..4fb8f34a7f486266b45568e50724c59fb29ab02f 100755 GIT binary patch literal 20821 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 delta 11652 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 diff --git a/src/forge/Server/Index.jsx b/src/forge/Server/Index.jsx index 615af317d..63c7ae1da 100644 --- a/src/forge/Server/Index.jsx +++ b/src/forge/Server/Index.jsx @@ -46,11 +46,11 @@ function ServerIndex(props){ return(
- {/* () } - > */} + > () diff --git a/src/forge/Server/measurement/api.js b/src/forge/Server/measurement/api.js deleted file mode 100644 index e55778d89..000000000 --- a/src/forge/Server/measurement/api.js +++ /dev/null @@ -1,16 +0,0 @@ -import fetch from './fetch'; - - -export function getMainScore(owner,repo) { - return fetch({ - url: `/api/OSS_Health_Measuring/${owner}/${repo}`, - method: 'get' - }); -} - -export function getChange(owner,repo) { - return fetch({ - url: `/api/OHM_can_get/${owner}/${repo}`, - method: 'get' - }); -} diff --git a/src/forge/Server/measurement/componet/indicator.jsx b/src/forge/Server/measurement/componet/indicator.jsx index 32311bc6d..ed2fcd33b 100644 --- a/src/forge/Server/measurement/componet/indicator.jsx +++ b/src/forge/Server/measurement/componet/indicator.jsx @@ -1,9 +1,10 @@ import React, { useEffect , useState } from 'react'; import { Table } from 'antd'; +import { Link } from 'react-router-dom'; import "../index.scss"; import { fieldData , thirdData , subField } from '../config'; -function Radar({data , subCardIndex}){ +function Indicator({owner , projectsId , data , subCardIndex}){ const [ dataSource , setDataSource ] = useState([]); @@ -20,8 +21,8 @@ function Radar({data , subCardIndex}){ title: "指标名称", dataIndex: "name", render:(value)=>{ - // return({fieldData[value]}) - return fieldData[value] + return({fieldData[value]}) + // return fieldData[value] } }, { @@ -42,4 +43,4 @@ function Radar({data , subCardIndex}){ ) } -export default Radar; \ No newline at end of file +export default Indicator; \ No newline at end of file diff --git a/src/forge/Server/measurement/componet/radar.jsx b/src/forge/Server/measurement/componet/radar.jsx index 3a506b3b7..640f4e4d5 100644 --- a/src/forge/Server/measurement/componet/radar.jsx +++ b/src/forge/Server/measurement/componet/radar.jsx @@ -15,7 +15,6 @@ function Radar({data, subCardIndex}){ v = v.concat(i.InitialScore) return {name:fieldData[i.name],max:100} }) - console.log(d,v); setValues(v); setTitles(d); } @@ -31,22 +30,44 @@ function Radar({data, subCardIndex}){ var huan_val = document.getElementById("radar"); var myEcharts = echarts.init(huan_val); let option = { + tooltip: { + trigger: 'item' + }, title: { text: '' }, color:['#5871FF',"#FFBE38"], radar: { // shape: 'circle', - indicator: titles + indicator: titles, + radius:'50%', + // splitLine:{ + // lineStyle:{ + // color:'#11B0D3', + // opacity: 0.2 + // }, + // }, + // axisLine:{ + // lineStyle:{ + // color:'#11B0D3', + // opacity: 0.2 + // }, + // }, + // splitArea:{ + // areaStyle:{ + // color: 'none', + // } + // }, + nameGap: 3, }, series: [ { - name: 'Budget vs spending', + name: '', type: 'radar', data: [ { value: values, - name: 'Allocated Budget' + name: '' } ] } @@ -55,7 +76,7 @@ function Radar({data, subCardIndex}){ myEcharts.setOption(option); } return( -
+
) } export default Radar; \ No newline at end of file diff --git a/src/forge/Server/measurement/dimension.jsx b/src/forge/Server/measurement/dimension.jsx index 2967a96c5..d23e7437e 100644 --- a/src/forge/Server/measurement/dimension.jsx +++ b/src/forge/Server/measurement/dimension.jsx @@ -1,8 +1,10 @@ import React ,{useEffect, useState} from 'react'; import { Breadcrumb , Select } from 'antd'; +import { Link } from 'react-router-dom'; import "./index.scss"; import LineStack from './componet/stack'; import { scoreComp , firstData , secondData } from './config'; +import axios from 'axios'; const dimensionData = { 开发质量: ['Commit message质量', 'Issue数量', 'Commit 数量'], @@ -20,12 +22,27 @@ function Dimension(props){ const [ dimensions , setDimensions] = useState([]); const [dValue, setDValue] = useState(''); + useEffect(()=>{ + Init(); + },[type]) + useEffect(()=>{ if(seconds){ setSValue(seconds[0]); } },[seconds]) + function Init(){ + const url = `/v1/${owner}/${projectsId}/oss_health_measuring/keyid`; + axios(url,{params:{ + key_id:type + }}).then(res=>{ + if(res && res.data){ + console.log(res.data); + } + }) + } + useEffect(()=>{ if(sValue){ let arr = dimensionData[sValue]; @@ -38,7 +55,7 @@ function Dimension(props){ return(
- 首页 + 首页 开发活动
diff --git a/src/forge/Server/measurement/fetch.js b/src/forge/Server/measurement/fetch.js deleted file mode 100644 index fc80a988a..000000000 --- a/src/forge/Server/measurement/fetch.js +++ /dev/null @@ -1,8 +0,0 @@ -import javaFetch from "./javaFetch"; -// let settings = localStorage && localStorage.chromesetting && localStorage.chromesetting !=="undefined" && JSON.parse(localStorage.chromesetting); -// let actionUrl = settings && settings.common.softbot; -let actionUrl = 'http://60.205.224.11:8060'; - -const service = javaFetch(""); -export const httpUrl = actionUrl; -export default service; \ No newline at end of file diff --git a/src/forge/Server/measurement/index.jsx b/src/forge/Server/measurement/index.jsx index 4b50b9c56..b203275af 100644 --- a/src/forge/Server/measurement/index.jsx +++ b/src/forge/Server/measurement/index.jsx @@ -10,11 +10,13 @@ import person from '../img/person.png'; import Rader from './componet/radar'; import Indicator from './componet/indicator'; import { scoreComp , field , firstData , colorsField, secondData , subField , thirdData } from './config'; -import { getMainScore , getChange } from './api'; +import axios from "axios"; +import cookie from 'react-cookies'; // import res from './xiuos.json'; function Index(props){ + const [ dataLoading , setDataLoading ] = useState(true); const [cardIndex, setCardIndex] = useState(firstData[0]); const [ subCardIndex, setSubCardIndex] = useState(1); const [ loading , setLoading ] = useState(false); @@ -33,34 +35,50 @@ function Index(props){ let interval = undefined; const count = useRef(); + useEffect(()=>{ if(owner && projectsId){ - checkData(); + console.log(cookie.load("opensource")); + if(cookie.load("opensource") && cookie.load("opensource")===`${owner}_${projectsId}`){ + getReportStart(); + }else{ + checkData(); + } } },[owner,projectsId]) // 根据接口判断是否已经生成数据报告 async function checkData(){ - getChange(owner,projectsId).then(res=>{ - if(res && res.statue === "YES"){ + const url = `/v1/${owner}/${projectsId}/oss_health_measuring/can_get`; + axios(url).then(res=>{ + if(res && res.data && res.data.statue === "YES"){ Init(); clearInterval(interval); + cookie.remove("opensource"); + }else if(res && res.data && res.data.statue === "NO"){ + setDataLoading(false); } }) } - // 获取接口,整个页面数据都从此接口返回 + // 获取数据接口 function Init(){ - getMainScore(owner,projectsId).then(res=>{ - if(res){ - setDatas(res); - setScoreNormal(res && res.score); - getlist(res && res.score); + const url = `/v1/${owner}/${projectsId}/oss_health_measuring/keyid`; + axios(url,{params:{ + key_id:"score" + }}).then(res=>{ + if(res && res.data){ + let data = res.data; + setTimeout(()=>{setDataLoading(false)},300); + setDatas(data); + setScoreNormal(data); + getlist(data); } }) } // 开始体验,定时调用接口 function getReportStart(){ + setLoading(true); count.current = 20; checkData(); @@ -73,7 +91,7 @@ function Index(props){ } else { //倒计时结束,提示繁忙 clearInterval(interval); - setLoading(true); + setLoading(false); props.showNotification("当前服务繁忙,请稍后再试"); } }, 30000) @@ -126,19 +144,20 @@ function Index(props){ return(
开源软件健康度量服务
+ { dataLoading &&
} { - !datas && + !dataLoading && !datas &&

欢迎使用开源软件健康度量服务

开源软件健康度量服务是一种代码库分析工具,旨在通过深入分析代码库的关键活动数据来评估开源项目的健康状况。该服务通过收集和分析代码库中的贡献者、提交(commit)、合并请求(pullRequest)、疑修(issue)等数据指标,为项目开发者、维护者提供了一个全面的项目健康报告
- {!loading && } + {!loading && } { loading &&
服务报告生成中...
}
} { - datas && + !dataLoading && datas &&
{ scoreNormal && @@ -224,7 +243,7 @@ function Index(props){
- +
diff --git a/src/forge/Server/measurement/javaFetch.js b/src/forge/Server/measurement/javaFetch.js deleted file mode 100644 index 4fc34077d..000000000 --- a/src/forge/Server/measurement/javaFetch.js +++ /dev/null @@ -1,91 +0,0 @@ -import { notification ,message} from 'antd'; -import axios from 'axios'; - -// export const TokenKey = 'autologin_trustie'; - -export default function javaFetch(actionUrl){ - if (window.location.href.indexOf('localhost') < 0) { - axios.defaults.withCredentials = true; - } - - // 创建axios实例 - const service = axios.create({ - baseURL: actionUrl, - timeout: 1800000, // 请求超时时间 - }); - - // request拦截器 -// service.interceptors.request.use(config => { -// if (cookie.load(TokenKey)) { -// config.headers['Authorization'] = cookie.load(TokenKey); // 让每个请求携带自定义token 请根据实际情况自行修改 -// } -// if (window.location.port === "3007") { -// // 模拟token为登录用户 -// const token = cookie.load(TokenKey); -// if (config.url.indexOf('?') === -1) { -// config.url = `${config.url}?token=${token}`; -// } else { -// config.url = `${config.url}&token=${token}`; -// } -// } -// return config; -// }, error => { -// console.log(error); -// }); - // respone拦截器 - service.interceptors.response.use( - response => { - const res = response||{}; - if (res.status === 400) { - message.error(res.data.message || '操作失败'); - return Promise.reject('error'); - } - if (res.status === 401) { - message.error(res.data.message || '登录信息已过期'); - return Promise.reject('error'); - } - if (res.status === 403) { - message.error(res.data.message || '无权限!'); - return Promise.reject('error'); - } - if (res.status === 40001) { - notification.open({ - message: "提示", - description: '账户或密码错误!', - }); - return Promise.reject('error'); - } - if (response.status !== 200 && res.status !== 200) { - notification.open({ - message: "提示", - description: res.message, - }); - } else { - return response.data; - } - }, - error => { - let res = error.response||{}; - if (res.status === 400) { - message.error(res.data.message || '操作失败'); - return Promise.reject('error'); - } - if (res.status === 401) { - message.error(res.data.message || '登录信息已过期'); - return Promise.reject('error'); - } - if (res.status === 403) { - message.error(res.data.message || '无权限!'); - return Promise.reject('error'); - } - notification.open({ - message: "提示", - description: error.message, - }); - return Promise.reject(error); - } - ); - - - return service; -} \ No newline at end of file