forgeplus-react/src/forge/users/Statistics/Index.jsx

203 lines
6.2 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React , {useEffect, useState} from 'react';
import './Index.scss';
import 'echarts/lib/component/tooltip';
import 'echarts/lib/component/title';
import 'echarts/lib/component/legend'
import 'echarts/lib/component/markPoint';
import Pie from '../Echart/Pie';
import Cloud from '../Echart/Cloud';
import Radar from '../Echart/Radar';
import Round from '../Echart/Round';
import { DatePicker } from 'antd';
import moment from 'moment';
import { FlexAJ } from '../../Component/layout';
import Axios from 'axios';
const { RangePicker } = DatePicker;
const dateFormat = 'YYYY-MM-DD';
function Index(props) {
const username = props.match.params.username;
const [ dates, setDates] = useState(undefined);
const [ pieData, setPieData ] = useState([]);
const [ rDates, setRDates ] = useState(undefined);
const [ radarData, setRadarData ] = useState([]);
const [ topThree , setTopThree] = useState(undefined);
const [ percentData , setPercentData ] = useState(undefined);
const [ cData, setCData ] = useState(undefined);
const [ cloudData, setCloudData ] = useState(undefined);
const disabledDate = current => {
return current && current > moment().endOf('day');
};
// 获取角色定位接口数据
useEffect(()=>{
getRoleSta();
},[dates])
function getRoleSta() {
const url = `/users/${username}/statistics/role.json`;
Axios.get(url,{
params:{
start_time:dates && dates[0],
end_time:dates && dates[1]
}
}).then(result=>{
if(result && result.data){
setPieData(result.data.role);
}
}).catch(error=>{})
}
// 获取开发能力接口数据
useEffect(()=>{
getRadarSta();
},[rDates])
function getRadarSta() {
const url = `/users/${username}/statistics/develop.json`;
Axios.get(url,{
params:{
start_time:rDates && rDates[0],
end_time:rDates && rDates[1]
}
}).then(result=>{
if(result && result.data){
setRadarData(result.data);
let score = result.data.user && result.data.user.each_language_score;
if(score){
var sortData = [];
for (var item in score) {
sortData.push([item, score[item]])
}
sortData.sort(function(a, b) {
return b[1] - a[1];
});
setTopThree(sortData.slice(0,3));
}
let percent = result.data.user && result.data.user.languages_percent;
let arr = [];
Object.keys(percent).map((item,key)=>{
arr.push({name:item,p:parseFloat(percent[item]*100).toFixed(1),color:getColor()});
})
setPercentData(arr);
}
}).catch(error=>{})
}
  function getColor(){
let str = "#";
let arr = ["1","2","3","4","4","5","6","7","8","9","a","b","c","d","e","f"];
for(var i=0;i<6;i++){
let num = parseInt(Math.random() * 16,0);
str+=arr[num];
}
return str;
}
//用户专业定位
useEffect(()=>{
getCloudSta();
},[cData])
function getCloudSta() {
const url = `/users/${username}/statistics/major.json`;
Axios.get(url,{
params:{
start_time:cData && cData[0],
end_time:cData && cData[1]
}
}).then(result=>{
if(result && result.data){
setCloudData(result.data);
}
}).catch(error=>{})
}
return(
<div>
<div className="boxes">
<FlexAJ style={{marginBottom:"15px"}}>
<span className="font-18">开发能力</span>
<RangePicker
disabledDate={disabledDate}
onChange={(val,dateString) => {setRDates(dateString)}}
format={dateFormat}
/>
</FlexAJ>
<div className="echartBox">
<p>从五个维度刻画你的开发能力语言能力影响力贡献度活跃度项目经验同时可以查看社区平均数据</p>
<Radar data={radarData}/>
{
topThree && topThree.length > 0 &&
<div className="roundBox">
<Round num={topThree[0][1]} color="#FF7F69" name={topThree[0][0]}/>
<Round num={topThree[1][1]} color="#99dfff" name={topThree[1][0]}/>
<Round num={topThree[2][1]} color="#ff9e48" name={topThree[2][0]}/>
</div>
}
{
percentData &&
<div className="pBox">
<div class="progress">
{
percentData.map((i,k)=>{
return(
<span style={{width: `${i.p}%`, backgroundColor:`${i.color}`}}></span>
)
})
}
</div>
<div className="progresstip">
{
percentData.map((i,k)=>{
return(
<span>
<i class="zero" style={{backgroundColor: `${i.color}`}}></i><span>{i.name}</span>
<span>{`${i.p}%`}</span>
</span>
)
})
}
</div>
</div>
}
</div>
</div>
<div className="boxes">
<FlexAJ style={{marginBottom:"15px"}}>
<span className="font-18">角色定位</span>
<RangePicker
disabledDate={disabledDate}
onChange={(val,dateString) => {setDates(dateString)}}
format={dateFormat}
/>
</FlexAJ>
<div className="echartBox">
<p>根据你在项目开发过程中的工作对你在项目中扮演的角色进行定位包括创建者管理者开发者测试者文档工作者等</p>
<Pie data={pieData}/>
</div>
</div>
<div className="boxes">
<FlexAJ style={{marginBottom:"15px"}}>
<span className="font-18">专业定位</span>
<RangePicker
disabledDate={disabledDate}
onChange={(val,dateString) => {setCData(dateString)}}
format={dateFormat}
/>
</FlexAJ>
<div className="echartBox">
<p>展示你擅长关注感兴趣的专业范围通过你参与项目收藏项目关注项目复刻项目等数据来统计</p>
<Cloud data={cloudData}/>
</div>
</div>
</div>
)
}
export default Index;