forgeplus-react/src/forge/Team/RightBox.jsx

194 lines
6.1 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 styled from 'styled-components';
import Box from './Box';
import axios from 'axios';
import { getImageUrl } from 'educoder';
import { Link } from 'react-router-dom';
import Nodata from '../Nodata';
import { Progress } from 'antd';
import Right from './images/right.png';
import CheckProfile from '../Component/ProfileModal/Profile';
const Span = styled.span`{
color:#888;
font-size:14px;
margin-right:10px;
height:20px;
line-height:20px;
}`
const Align = styled.div`{
display:flex;
aligin:center;
}`
const ListName = styled.div`{
font-size:15px;
color:#333;
margin-bottom:8px;
height:18px;
line-height:18px;
width:210px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}`;
const ColorListName = styled.div`{
color:rgba(31, 35, 41, 1);
font-size:15px;
margin-bottom:8px;
height:18px;
line-height:18px;
width:230px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}`
const Img = styled.img`{
border-radius:50%;
width:45px;
height:45px;
margin-right:12px;
}`
function RightBox({ OIdentifier , history , admin , showCompeleteDialog ,completeProfile, enterpriseOpened }) {
const [ languageData, setLanguageData ] = useState(undefined);
const [ memberData, setMemberData ] = useState(undefined);
const [ groupData, setGroupData ] = useState(undefined);
useEffect(()=>{
if(OIdentifier){
getMember(OIdentifier);
getGroup(OIdentifier);
getLanguage(OIdentifier);
}
},[OIdentifier])
function getLanguage(iden){
const url = `/organizations/${iden}/languages.json`;
axios.get(url,{params:{limit:10}}).then(result=>{
if(result && result.data){
let languages = result.data;
let arr = [];
Object.keys(languages).map((item,key)=>{
arr.push({name:item,percent:languages[item].replace("%",""),color:getColor()});
})
setLanguageData(arr);
console.log(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);
str+=arr[num];
}
return str;
}
function getMember(iden){
const url = `/organizations/${iden}/organization_users.json`;
axios.get(url,{params:{limit:5}}).then(result=>{
if(result && result.data){
setMemberData(result.data);
}
}).catch(error=>{})
}
function getGroup(iden){
const url = `/organizations/${iden}/teams.json`;
axios.get(url,{params:{limit:5}}).then(result=>{
if(result && result.data){
setGroupData(result.data);
}
}).catch(error=>{})
}
return(
<div className="list-r">
{
languageData && languageData.length>0 ?
<Box
name="仓库语言"
// count={languageData && languageData.length}
icon={<i className="iconfont icon-cangkuyuyanicon font-17 mr8"></i>}
// url={`/${OIdentifier}/members`}
>
{
languageData.map((item,key)=>{
return(
<div className="progress">
<span className="mr10">{item.name}</span>
<Progress percent={item.percent} strokeColor={item.color}/>
</div>
)
})
}
</Box>
:""
}
{
memberData && memberData.organization_users && memberData.organization_users.length>0 ?
<Box
name="组织成员"
count={memberData && memberData.total_count}
icon={<i className="iconfont icon-zuzhichengyuan1 font-16 mr8"></i>}
url={`/${OIdentifier}/members`}>
{
memberData.organization_users.map((item,key)=>{
return(
key<5 && <div className="teammembers" key={key}>
<Link to={`/${item.user && item.user.login}`}><Img src={getImageUrl(`/${item.user && item.user.image_url}`)} alt="" className="m-img"/></Link>
<div>
<Link to={`/${item.user && item.user.login}`}><ListName>{item.user && item.user.name}</ListName></Link>
<Align><Span>加入时间{item.created_at}</Span></Align>
{/* <i className="iconfont icon-shijian color-green mr3 font-13"></i> */}
</div>
</div>
)
})
}
</Box>
:""
}
{!enterpriseOpened && <Box
name="组织团队"
count={groupData && groupData.total_count}
icon={<i className="iconfont icon-zuzhituandui font-17 mr8"></i>}
bottom={
admin &&
<CheckProfile
showCompeleteDialog={showCompeleteDialog}
completeProfile={completeProfile}
sureFunc={()=>history.push(`/${OIdentifier}/teams/new`)}
className={"ant-btn newBtn"}
>新建团队<img src={Right} alt="" width="9" className="ml5" /></CheckProfile>
}
url={`/${OIdentifier}/teams`}
>
{
groupData && groupData.teams && groupData.teams.length>0?
<React.Fragment>
{groupData.teams.map((item,key)=>{
return(
key < 5 &&<div className="teammembers" key={key}>
<span className="memberIndex">{key+1}</span>
<div>
{
(item.is_admin || item.is_member) ?
<Link to={`/${OIdentifier}/teams/${item.id}`}><ColorListName>{item.nickname}</ColorListName></Link>
:
<ColorListName>{item.nickname}</ColorListName>
}
<Align>
<Span><span style={{color:"rgba(31, 35, 41, 1)"}}>{item.num_users}</span></Span>
<Span><span style={{color:"rgba(31, 35, 41, 1)"}}>{item.num_projects}</span></Span>
</Align>
</div>
</div>
)
})}
</React.Fragment>:<Nodata _html="暂无团队" small/>
}
</Box>}
</div>
)
}
export default RightBox;