代码库-贡献者和语言使用单独接口,detail.json接口不返回这两个数组

This commit is contained in:
caishi 2021-12-09 09:48:47 +08:00
parent e93778b004
commit 2ffa835b84
6 changed files with 79 additions and 43 deletions

View File

@ -7,10 +7,10 @@ function CloneAddress({http_url , ssh_url , zip_url , tar_url}) {
const [ key , setKey ] = useState("HTTP"); const [ key , setKey ] = useState("HTTP");
return ( return (
<div className="downMenu"> <div className="downMenu">
<div style={{borderBottom:"1px solid #eee"}}> <div>
<Menu className="urlMenu" selectedKeys={[key]} mode={"horizontal"}> <Menu className="urlMenu" selectedKeys={[key]} mode={"horizontal"}>
<Menu.Item key="HTTP" onClick={(e)=>{setKey(e.key)}}>HTTP</Menu.Item> <Menu.Item key="HTTP" onClick={(e)=>{setKey(e.key)}}>HTTP</Menu.Item>
<Menu.Item key="SSH" onClick={(e)=>{setKey(e.key)}}>SSH</Menu.Item> {ssh_url && <Menu.Item key="SSH" onClick={(e)=>{setKey(e.key)}}>SSH</Menu.Item>}
</Menu> </Menu>
<div className="gitAddressClone"> <div className="gitAddressClone">
<input type="text" id="copy_rep_content" value={key==="HTTP" ? http_url:ssh_url} /> <input type="text" id="copy_rep_content" value={key==="HTTP" ? http_url:ssh_url} />
@ -18,8 +18,8 @@ function CloneAddress({http_url , ssh_url , zip_url , tar_url}) {
</div> </div>
</div> </div>
<Menu className="edu-txt-center"> <Menu className="edu-txt-center">
<Menu.Item><a href={zip_url}>下载 ZIP</a></Menu.Item> {zip_url && <Menu.Item style={{borderTop:"1px solid #eee"}}><a href={zip_url}>下载 ZIP</a></Menu.Item>}
<Menu.Item><a href={tar_url}>下载 TAR.GZ</a></Menu.Item> {tar_url && <Menu.Item><a href={tar_url}>下载 TAR.GZ</a></Menu.Item>}
</Menu> </Menu>
</div> </div>
) )

View File

@ -7,7 +7,7 @@ import './Component.scss';
import { getUser } from '../GetData/getData'; import { getUser } from '../GetData/getData';
import axios from 'axios'; import axios from 'axios';
function Contributors({contributors,owner,projectsId,currentLogin}){ function Contributors({owner,projectsId,currentLogin}){
const [ menuList ,setMenuList ]= useState([]); const [ menuList ,setMenuList ]= useState([]);
const [ list , setList ]= useState(undefined); const [ list , setList ]= useState(undefined);
const [ total , setTotal ]= useState(0); const [ total , setTotal ]= useState(0);
@ -16,11 +16,18 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
const [ isSpin , setIsSpin ] = useState(false); const [ isSpin , setIsSpin ] = useState(false);
useEffect(()=>{ useEffect(()=>{
if(contributors && contributors.total_count>0){ getData();
setTotal(contributors.total_count); },[])
setList(contributors.list);
} function getData(){
},[contributors]) const url = `/${owner}/${projectsId}/contributors.json`;
axios.get(url).then(result=>{
if(result){
setTotal(result.data.total_count);
setList(result.data.list);
}
}).catch(error=>{})
}
useEffect(()=>{ useEffect(()=>{
if(login){ if(login){
@ -148,15 +155,15 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
} }
return( return(
total > 0 ?
<div className="halfs"> <div className="halfs">
<Link to={`/${owner}/${projectsId}/contribute`} className="font-16 color-ooo hoverA"> <Link to={`/${owner}/${projectsId}/contribute`} className="font-16 color-ooo hoverA">
<span>贡献者</span> <span>贡献者</span>
{ contributors && contributors.total_count > 0 && <span className="infoCount">{contributors.total_count}</span>} { total > 0 && <span className="infoCount">{total}</span>}
</Link> </Link>
<div className="attrPerson" onMouseLeave={()=>setVisibleFunc(false)}> <div className="attrPerson" onMouseLeave={()=>setVisibleFunc(false)}>
{ {
total > 0 ? list && list.length>0 && list.map((item,key)=>{
list.map((item,key)=>{
return( return(
<Popover content={menu} visible={item.visible} overlayClassName="menuPanels" placement="top"> <Popover content={menu} visible={item.visible} overlayClassName="menuPanels" placement="top">
<Link key={key} to={`/${item.login}`}> <Link key={key} to={`/${item.login}`}>
@ -165,10 +172,9 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
</Popover> </Popover>
) )
}) })
:""
} }
</div> </div>
</div> </div>:""
) )
} }
export default Contributors; export default Contributors;

View File

@ -1,18 +1,41 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { FlexAJ } from '../Component/layout'; import { FlexAJ } from '../Component/layout';
import { Divider } from 'antd';
import axios from 'axios';
function LanguagePower({languages}){ function LanguagePower({owner,projectsId}){
const [ array , setArray ] = useState(undefined); const [ array , setArray ] = useState(undefined);
useEffect(()=>{ useEffect(()=>{
if(languages){ getData();
let arr = []; },[])
Object.keys(languages).map((item,key)=>{
arr.push({name:item,percent:languages[item],color:getColor()}); function getData(){
}) const url = `/${owner}/${projectsId}/languages.json`;
setArray(arr); axios.get(url).then(result=>{
} if(result){
},[languages]) let languages = result.data;
if(languages){
let arr = [];
Object.keys(languages).map((item,key)=>{
arr.push({name:item,percent:languages[item],color:getColor()});
})
setArray(arr);
}
}
}).catch(error=>{})
}
// useEffect(()=>{
// if(languages){
// let arr = [];
// Object.keys(languages).map((item,key)=>{
// arr.push({name:item,percent:languages[item],color:getColor()});
// })
// setArray(arr);
// }
// },[languages])
 function getColor(){  function getColor(){
let str = "#"; let str = "#";
@ -24,7 +47,9 @@ function LanguagePower({languages}){
return str; return str;
} }
return( return(
(array && array.length > 0) ?
<div> <div>
<Divider />
<p className="font-16 color-ooo aboutSubTitle">开发语言</p> <p className="font-16 color-ooo aboutSubTitle">开发语言</p>
<div className="progress"> <div className="progress">
{ {
@ -47,8 +72,7 @@ function LanguagePower({languages}){
} }
</FlexAJ> </FlexAJ>
} }
</div>:""
</div>
) )
} }
export default LanguagePower; export default LanguagePower;

View File

@ -319,9 +319,9 @@ function CoderDepot(props){
const downloadMenu = ( const downloadMenu = (
<CloneAddress <CloneAddress
http_url={projectDetail && projectDetail.clone_url} http_url={projectDetail && projectDetail.clone_url}
ssh_url = {projectDetail && projectDetail.ssh_url} ssh_url = {(projectDetail && props && props.platform) && projectDetail.ssh_url}
zip_url={zip_url} zip_url={(props && props.platform) && zip_url}
tar_url={tar_url} tar_url={(props && props.platform) && tar_url}
showNotification={props.showNotification}/> showNotification={props.showNotification}/>
) )
// website // website
@ -582,17 +582,9 @@ function CoderDepot(props){
</React.Fragment> </React.Fragment>
} }
{/* 贡献者 */} {/* 贡献者 */}
{ <Contributors owner={owner} projectsId={projectsId} />
projectDetail && projectDetail.contributors && projectDetail.contributors.total_count >0 &&
<Contributors contributors={projectDetail.contributors} owner={owner} projectsId={projectsId} />
}
{/* 语言 */} {/* 语言 */}
{ projectDetail && projectDetail.languages && <LanguagePower owner={owner} projectsId={projectsId}/>
<React.Fragment>
<Divider />
<LanguagePower languages={projectDetail.languages}/>
</React.Fragment>
}
</Gap> </Gap>
</ShortWidth> </ShortWidth>
} }

View File

@ -133,7 +133,7 @@ class CoderRootCommit extends Component{
render(){ render(){
const { commitDatas , dataCount , limit , page , isSpining , branchList } = this.state; const { commitDatas , dataCount , limit , page , isSpining , branchList } = this.state;
const { projectDetail, commit_class , defaultBranch } = this.props; const { projectDetail, commit_class , defaultBranch , platform } = this.props;
const { projectsId , owner , branchName } = this.props.match.params; const { projectsId , owner , branchName } = this.props.match.params;
let branch = returnbar(branchName || defaultBranch); let branch = returnbar(branchName || defaultBranch);
return( return(
@ -159,7 +159,16 @@ class CoderRootCommit extends Component{
<div className="commitList-item f-wrap-between"> <div className="commitList-item f-wrap-between">
<div> <div>
<AlignTop> <AlignTop>
<div className="commitDesc"><Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="font-14 color-grey-3 font-bd"><RenderHtml value={item.message}/></Link></div> <div className="commitDesc">
{
platform ?
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="font-14 color-grey-3 font-bd">
<RenderHtml value={item.message}/>
</Link>
:
<RenderHtml value={item.message}/>
}
</div>
</AlignTop> </AlignTop>
<p className="f-wrap-alignCenter mt15 pb5"> <p className="f-wrap-alignCenter mt15 pb5">
<User <User
@ -176,7 +185,12 @@ class CoderRootCommit extends Component{
<div> <div>
<span className="treecopy-cont shadow"> <span className="treecopy-cont shadow">
<img src={Tree} alt="sha" width={"16px"}/> <img src={Tree} alt="sha" width={"16px"}/>
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`}>{truncateCommitId(`${item.sha}`)}</Link> {
platform ?
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`}>{truncateCommitId(`${item.sha}`)}</Link>
:
<span style={{color:"#466AFF",cursor:"default"}}>{truncateCommitId(`${item.sha}`)}</span>
}
<input type="text" id={`value${k}`} value={`${truncateCommitId(`${item.sha}`)}`}/> <input type="text" id={`value${k}`} value={`${truncateCommitId(`${item.sha}`)}`}/>
</span> </span>
<CopyTool beforeText="复制commit id" afterText="复制成功" inputId={`value${k}`}/> <CopyTool beforeText="复制commit id" afterText="复制成功" inputId={`value${k}`}/>

View File

@ -109,7 +109,7 @@ ul,ol,dl{
width: 49rem; width: 49rem;
overflow: hidden; overflow: hidden;
white-space: normal; white-space: normal;
&:hover{ & a:hover{
text-decoration: underline; text-decoration: underline;
& .markdown-body{ & .markdown-body{
color: #466AFF; color: #466AFF;