Compare commits
109 Commits
master
...
feature_ho
Author | SHA1 | Date |
---|---|---|
jasder | 7ec53a246c | |
caishi | f5817e5150 | |
jasder | 7b77c46915 | |
hucong | 746f552a21 | |
hucong | 7872d5ecab | |
hucong | 60da6bd110 | |
caishi | a3bbf6b1c1 | |
hucong | aeff357660 | |
hucong | 0e6cb3954a | |
hucong | ae12618c0c | |
caishi | 914966bd39 | |
caishi | f89f4b6628 | |
jasder | 7407545d1f | |
caishi | f0ffc9a29c | |
jasder | 987eb39681 | |
caishi | 848109afe8 | |
caishi | d7bdb35bb7 | |
caishi | 254b3173d1 | |
caishi | 44f06b7305 | |
jasder | b16e95923a | |
jasder | 98a7f73c04 | |
jasder | b6a450a482 | |
jasder | 66c495d6b5 | |
caishi | 42139ef998 | |
jasder | 925d5ea356 | |
jasder | ad1f0e29e7 | |
caishi | 3da9306ed6 | |
caishi | 568a632d65 | |
caishi | 5982c0df96 | |
jasder | 21046bbcb7 | |
caishi | 0c816805fb | |
caishi | 28f8b6b54c | |
caishi | 7d087ec1f2 | |
jasder | beba8975ca | |
caishi | d4690cc8b5 | |
caishi | 38021c2e4b | |
caishi | 4233811ae3 | |
caishi | 8273acd195 | |
caishi | cacb8c84ae | |
caishi | fb8ae3fcdf | |
caishi | a257d832cb | |
caishi | ff7d191011 | |
caishi | 9a2c3f1754 | |
caishi | bcdf506e6c | |
caishi | ccc6cb5d26 | |
caishi | 0661c6b932 | |
caishi | 99947c0c87 | |
caishi | 03cff6ec2e | |
caishi | f86acfebdf | |
caishi | 9a62d7806e | |
caishi | a7df6da5f0 | |
caishi | eab68ac270 | |
caishi | a9e3513706 | |
caishi | 6b20391c72 | |
caishi | 3135300fe6 | |
caishi | ecc6387113 | |
caishi | 990c4e22b0 | |
caishi | 7eea9316dd | |
caishi | 6a546c79e4 | |
caishi | 4c48b6c77a | |
caishi | 4d5430c3ed | |
caishi | d49af735f1 | |
caishi | 03370e8a07 | |
caishi | 0b43fa8952 | |
caishi | 465c4cc8c7 | |
caishi | 37668ddcd4 | |
caishi | 7102594444 | |
caishi | b2f2df65bb | |
caishi | 8a577fb263 | |
caishi | 5c491071b6 | |
caishi | c554237076 | |
caishi | d22a741bf7 | |
caishi | 383b3f5d74 | |
caishi | 63da7adcf9 | |
caishi | 3243aeebc6 | |
caishi | 1a86a75345 | |
caishi | 3b6cc99d49 | |
caishi | d872ffc606 | |
caishi | 3b69c01ead | |
caishi | 1e0608aa14 | |
caishi | 9b6816e346 | |
caishi | 6ee257231d | |
caishi | 70edb73f6c | |
caishi | 5c7553d4aa | |
caishi | 278701f24b | |
caishi | 97ab819bf9 | |
caishi | d870f17b85 | |
caishi | 91ac6c2357 | |
caishi | 3702d1c1a5 | |
caishi | 93d48c359e | |
caishi | 80dace18e9 | |
caishi | 375cbb37df | |
caishi | 10d933e037 | |
caishi | 4fdd3f6f80 | |
caishi | 458b56e33b | |
caishi | c256887132 | |
caishi | 6a588db7f6 | |
caishi | 6c4e1c6665 | |
caishi | c554d2c00d | |
caishi | b69bf5974a | |
caishi | ecb1691b4d | |
caishi | 6a9f2b31a6 | |
caishi | 4947cd8456 | |
caishi | 8429effe16 | |
caishi | 49ebe450be | |
caishi | e3c926da77 | |
caishi | af48da2eb3 | |
caishi | 6630309466 | |
caishi | a7c3dee7e3 |
|
@ -1268,11 +1268,17 @@ a.shixun-task-btn {
|
|||
|
||||
|
||||
/*-----------实训配置、评测脚本-------------*/
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 2340181 */
|
||||
src: url('iconfont.woff2?t=1631773579834') format('woff2'),
|
||||
url('iconfont.woff?t=1631773579834') format('woff'),
|
||||
url('iconfont.ttf?t=1631773579834') format('truetype');
|
||||
}
|
||||
html body {
|
||||
font-size: 14px;
|
||||
line-height: 2.0;
|
||||
background: #fafafa;
|
||||
font-family: "Microsoft YaHei", "SimSun";
|
||||
font-family: "iconfont";
|
||||
color: #05101a;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
|
@ -6705,10 +6711,13 @@ p{
|
|||
right: 0px;
|
||||
top:4px;
|
||||
color: #999;
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
}
|
||||
.ant-input, .ant-input .ant-input-suffix{
|
||||
background-color: #fff!important;
|
||||
}
|
||||
.has-error .ant-input{
|
||||
background-color: #FEF1F0!important;
|
||||
>>>>>>> pre_develop
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 2340181 */
|
||||
src: url('iconfont.woff2?t=1632964996877') format('woff2'),
|
||||
url('iconfont.woff?t=1632964996877') format('woff'),
|
||||
url('iconfont.ttf?t=1632964996877') format('truetype');
|
||||
src: url('iconfont.woff2?t=1634881729644') format('woff2'),
|
||||
url('iconfont.woff?t=1634881729644') format('woff'),
|
||||
url('iconfont.ttf?t=1634881729644') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
|
|
After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 27 KiB |
52
src/App.js
|
@ -10,7 +10,7 @@ import {
|
|||
import axios from 'axios';
|
||||
import LoginDialog from './modules/login/LoginDialog';
|
||||
import 'babel-polyfill';
|
||||
import Loading from './Loading'
|
||||
import Loading from './Loading';
|
||||
|
||||
import Loadable from 'react-loadable';
|
||||
import marked from './common/marked';
|
||||
|
@ -97,6 +97,10 @@ const ProjectIndex = Loadable({
|
|||
loading: Loading,
|
||||
});
|
||||
|
||||
const Home = Loadable({
|
||||
loader: () => import('./home/Index'),
|
||||
loading: Loading,
|
||||
})
|
||||
// const CreateMerge = Loadable({
|
||||
// loader: () => import('./forge/Merge/NewMerge'),
|
||||
// loading: Loading,
|
||||
|
@ -353,34 +357,28 @@ class App extends Component {
|
|||
{/* 判断为用户/组织,并进入对应页面 */}
|
||||
{
|
||||
pathType === 'User' ?
|
||||
<Route exact path="/:username"
|
||||
render={
|
||||
(props) => {
|
||||
return (<InfosIndex {...this.props} {...this.state} />)
|
||||
}
|
||||
<Route exact path="/:username"
|
||||
render={
|
||||
(props) => {
|
||||
return (<InfosIndex {...this.props} {...this.state} />)
|
||||
}
|
||||
/> : pathType === 'Organization' ? <Route path={"/:OIdentifier"}
|
||||
render={
|
||||
(props) => {
|
||||
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
|
||||
}
|
||||
}>
|
||||
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
|
||||
<Route exact path="/"
|
||||
render={
|
||||
(props) => (
|
||||
personal && personal.length > 0 ?
|
||||
<InfosIndex {...this.props} {...props} />
|
||||
:
|
||||
<ProjectIndex {...this.props} {...props} />
|
||||
)
|
||||
}
|
||||
/>
|
||||
// <Route path="/" component={Loading} />
|
||||
// <Route path="/" component={Shixunnopage} />
|
||||
}
|
||||
/> : pathType === 'Organization' ? <Route path={"/:OIdentifier"}
|
||||
render={
|
||||
(props) => {
|
||||
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
|
||||
}
|
||||
}>
|
||||
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
|
||||
""
|
||||
}
|
||||
|
||||
|
||||
<Route exact path="/"
|
||||
render={
|
||||
(props) => (
|
||||
<Home {...props} {...this.props} {...this.state}/>
|
||||
)
|
||||
}
|
||||
/>
|
||||
|
||||
{/* 个人主页 */}
|
||||
<Route path="/:username"
|
||||
|
|
|
@ -363,7 +363,7 @@ li.ant-menu-item{
|
|||
color: #333;
|
||||
height: 34px;
|
||||
line-height: 34px;
|
||||
margin-bottom: 10px;
|
||||
margin-bottom: 10px!important;
|
||||
a{
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
|
|
@ -19,46 +19,46 @@ function Footer(){
|
|||
|
||||
return(
|
||||
<div>
|
||||
<div style={{height:"543px"}}></div>
|
||||
{/* {value && showhtml(value)} */}
|
||||
<div style={{height:"483px"}}></div>
|
||||
<div className="newFooter edu-txt-center">
|
||||
{value && showhtml(value)}
|
||||
{/* <div className="footerInfos">
|
||||
<ul>
|
||||
<li>社区</li>
|
||||
<li><a href={`/`} target="_blank">网站首页</a></li>
|
||||
<li><a href={`https://www.trustie.net/agreement`} target="_blank">服务协议</a></li>
|
||||
<li><a href={`https://forum.trustie.net/forums/1168/detail`} target="_blank">帮助中心</a></li>
|
||||
<li><a href={`https://forum.trustie.net/`} target="_blank">问吧交流</a></li>
|
||||
<li><a href={`https://www.trustie.net/cooperation`} target="_blank">合作伙伴</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>支持与服务</li>
|
||||
<li><a href={`https://forgeplus.trustie.net/docs/api`} target="_blank">API文档</a></li>
|
||||
<li><a href={`https://forum.trustie.net/forums/1168/detail`} target="_blank">帮助中心</a></li>
|
||||
<li><a href={`https://git-scm.com`} target="_blank">Git常用命令</a></li>
|
||||
<li><a href={`https://forum.trustie.net/forums/3080/detail`} target="_blank">DevOps使用文档</a></li>
|
||||
<li><a href={`https://forgeplus.trustie.net/projects/jasder/forgeplus/tree/master/CHANGELOG.md`} target="_blank">日志更新</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>合作伙伴</li>
|
||||
<li><a href={`http://www.sei.pku.edu.cn`} target="_blank">北京大学</a></li>
|
||||
<li><a href={`http://scse.buaa.edu.cn`} target="_blank">北京航空航天大学</a></li>
|
||||
<li><a href={`https://www.nju.edu.cn`} target="_blank">南京大学</a></li>
|
||||
<li><a href={`https://www.xtu.edu.cn`} target="_blank">湘潭大学</a></li>
|
||||
<li><a href={`http://www.iscas.ac.cn`} target="_blank">ISCAS</a></li>
|
||||
<li><a href={`https://www.ucloud.cn`} target="_blank">UCloud优刻得</a></li>
|
||||
<li><a href={`http://www.inforbus.com`} target="_blank">中创软件</a></li>
|
||||
<li><a href={`https://www.inspur.com`} target="_blank">浪潮集团</a></li>
|
||||
<li><a href={`http://www.copu.org.cn`} target="_blank">中国开源软件推进联盟</a></li>
|
||||
<li><a href={`https://www.sjtu.edu.cn`} target="_blank">上海交通大学</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>合作伙伴</li>
|
||||
<li><span>热线:</span></li>
|
||||
<li><span>QQ群:1071514693</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<p className="footerCopy">© Copyright 2007~2021 国防科技大学Trustie团队 & IntelliDE <a href="https://beian.miit.gov.cn">湘ICP备 17009477号</a></p> */}
|
||||
{value && showhtml(value)}
|
||||
{/* <div className="footEdition">
|
||||
<div className="footContent">
|
||||
<ul className="center">
|
||||
<img src={""} alt="Gitlink(确实开源)" height="29px"/>
|
||||
<p>(确实开源)</p>
|
||||
</ul>
|
||||
<ul>
|
||||
<li className="thehead">社区</li>
|
||||
<li><a href="/">网站首页</a></li>
|
||||
<li><a href="https://forum.trustie.net/forums/1168/detail">帮助中心</a></li>
|
||||
<li><a href="https://forum.trustie.net/">论坛交流</a></li>
|
||||
<li><a href="https://www.trustie.net/cooperation">合作伙伴</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li className="thehead">支持与服务</li>
|
||||
<li><a href="https://forgeplus.trustie.net/docs/api">API文档</a></li>
|
||||
<li><a href="https://git-scm.com">Git常用命令</a></li>
|
||||
<li><a href="https://forum.trustie.net/forums/3080/detail">DevOps使用文档</a></li>
|
||||
<li><a href='https://www.trustie.net/agreement'>服务协议</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li className="thehead">加入我们</li>
|
||||
<li className="theline">
|
||||
<div className="mr50">
|
||||
<li>公众号</li>
|
||||
<img src={"Img"} alt="公众号"/>
|
||||
</div>
|
||||
<div>
|
||||
<li>QQ群</li>
|
||||
<img src={"qqImg"} alt="QQ群"/>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p className="copyrightDesc">©Copyright 2007~2021 国防科技大学Gitlink团队 & IntelliDE <br/>湘ICP备 17009477号</p>
|
||||
</div> */}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
|
|
@ -262,4 +262,77 @@
|
|||
|
||||
.text-center{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.footEdition{
|
||||
background-color: #171B23;
|
||||
.footContent{
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
padding:86px 0px;
|
||||
justify-content: space-around;
|
||||
width: 1200px;
|
||||
margin:0px auto;
|
||||
ul{
|
||||
min-width: 120px;
|
||||
text-align: left;
|
||||
margin-right: 80px;
|
||||
&.center{
|
||||
text-align: center;
|
||||
}
|
||||
&>p{
|
||||
height: 22px;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
color: #FFFFFF;
|
||||
line-height: 22px;
|
||||
}
|
||||
&>img{
|
||||
width: 100px;
|
||||
height: 100%;
|
||||
margin-bottom: 30px;
|
||||
margin-top: 25px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
li{
|
||||
height: 20px;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 20px;
|
||||
color: #BDC2D1;
|
||||
margin-bottom: 15px!important;
|
||||
a{
|
||||
color: #BDC2D1!important;
|
||||
&:hover{
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
&.thehead{
|
||||
height: 25px;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #FFFFFF;
|
||||
line-height: 25px;
|
||||
margin-bottom: 20px!important;
|
||||
}
|
||||
&.theline{
|
||||
display: flex;
|
||||
img{
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.copyrightDesc{
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: #BDC2D1;
|
||||
line-height: 28px;
|
||||
padding:15px 0px;
|
||||
text-align: center;
|
||||
background-color: #1B212C;
|
||||
}
|
||||
}
|
|
@ -60,12 +60,6 @@ class Index extends Component {
|
|||
<ProjectNew {...this.props} {...props} />
|
||||
)}
|
||||
></Route>
|
||||
{/* <Route
|
||||
path="/:owner/:projectsId"
|
||||
render={(props) => (
|
||||
<ProjectDetail {...this.props} {...props} />
|
||||
)}
|
||||
></Route> */}
|
||||
<Route
|
||||
path="/explore"
|
||||
render={(props) => (
|
||||
|
@ -73,12 +67,12 @@ class Index extends Component {
|
|||
)}
|
||||
></Route>
|
||||
|
||||
<Route
|
||||
{/* <Route
|
||||
path="/"
|
||||
render={(props) => (
|
||||
<ProjectIndex {...this.props} {...props} />
|
||||
)}
|
||||
></Route>
|
||||
></Route> */}
|
||||
</Switch>
|
||||
</div>
|
||||
);
|
||||
|
@ -90,10 +84,3 @@ export default withRouter(
|
|||
parentSelector: ".newMain",
|
||||
})(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
|
||||
);
|
||||
|
||||
// export default withRouter(
|
||||
// ImageLayerOfCommentHOC({
|
||||
// imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
|
||||
// parentSelector: ".newMain",
|
||||
// })(Index)
|
||||
// );
|
||||
|
|
|
@ -73,7 +73,6 @@ export default ((props)=>{
|
|||
<Menu.Item key={'1'}><a href={tar_url}>TAR.GZ</a></Menu.Item>
|
||||
</Menu>
|
||||
)
|
||||
|
||||
return(
|
||||
<React.Fragment>
|
||||
<div className="main">
|
||||
|
|
|
@ -509,11 +509,6 @@ class Detail extends Component {
|
|||
this.textFunc(projectDetail.forked_from_project_id, projectDetail.fork_info)
|
||||
: ""
|
||||
}
|
||||
{
|
||||
projectDetail && projectDetail.type && projectDetail.type !== 0 ?
|
||||
<span className="color-grey-9">导入于 <a className="color-grey-6" target="_blank" href={projectDetail.mirror_url}>{projectDetail.mirror_url}</a></span>
|
||||
: ""
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -575,8 +570,8 @@ class Detail extends Component {
|
|||
</span>
|
||||
}
|
||||
</div>
|
||||
</AlignCenter>
|
||||
<div className="mt6" style={{minHeight:"20px"}}>
|
||||
</AlignTop>
|
||||
{/* <div className="mt6" style={{minHeight:"20px"}}>
|
||||
{
|
||||
projectDetail && projectDetail.forked_from_project_id && projectDetail.fork_info ?
|
||||
this.textFunc(projectDetail.forked_from_project_id,projectDetail.fork_info)
|
||||
|
@ -587,7 +582,7 @@ class Detail extends Component {
|
|||
<span className="color-grey-9">镜像自 <a className="color-blue hoverLine" target="_blank" href={projectDetail.mirror_url}>{projectDetail.mirror_url}</a></span>
|
||||
:""
|
||||
}
|
||||
</div>
|
||||
</div> */}
|
||||
{
|
||||
firstSync ? "" :
|
||||
<DetailBanner
|
||||
|
|
|
@ -52,12 +52,6 @@ class IndexItem extends Component {
|
|||
<i className="iconfont icon-banbenku font-18 color-green" />
|
||||
</Tooltip>:""
|
||||
}
|
||||
{
|
||||
item.type && item.type === 1 ?
|
||||
<Tooltip title="该项目是一个导入于其他网站的仓库" className="ml5">
|
||||
<i className="iconfont icon-jingxiang font-18 color-green" />
|
||||
</Tooltip>:""
|
||||
}
|
||||
</AlignCenter>
|
||||
<span className="p-r-tags">
|
||||
{
|
||||
|
|
|
@ -267,6 +267,11 @@ class Setting extends Component {
|
|||
},
|
||||
],
|
||||
})(<Input placeholder="请输入项目名称" />)}
|
||||
{
|
||||
projectDetail && projectDetail.type && projectDetail.type !== 0 ?
|
||||
<span className="color-grey-9">该项目导入于 <a className="color-grey-6" target="_blank" href={projectDetail.mirror_url}>{projectDetail.mirror_url}</a></span>
|
||||
: ""
|
||||
}
|
||||
</Form.Item>
|
||||
<div className="df" style={{ alignItems: "center" }}>
|
||||
<span className="mr20 mb15 font-16">可见性</span>
|
||||
|
|
|
@ -157,6 +157,17 @@ export default Form.create()(
|
|||
setAuth(params.target.value)
|
||||
}
|
||||
|
||||
function checkname(rule, value, callback){
|
||||
if(!value){
|
||||
callback();
|
||||
}
|
||||
if(value && !value.match(/^[a-zA-Z][a-zA-Z\d]{3,14}$/)){
|
||||
callback("只能使用英文字母和数字,以字母开头,长度为4到15个字符");
|
||||
}
|
||||
callback();
|
||||
}
|
||||
|
||||
|
||||
function checkname(rule, value, callback){
|
||||
if(!value){
|
||||
callback();
|
||||
|
|
|
@ -10,14 +10,10 @@ function ListItem({item,key,OIdentifier}) {
|
|||
<Link to={`/${OIdentifier}/${item.identifier}`} className="name">{item.name}</Link>
|
||||
{ item.forked_from_project_id && <i className="iconfont icon-fork font-18 color-orange ml8" /> }
|
||||
{
|
||||
item.type && item.type !== 0 ?
|
||||
item.type === 2 ?
|
||||
item.type && item.type === 2 ?
|
||||
<Tooltip title="该项目是一个镜像" className="ml8">
|
||||
<i className="iconfont icon-banbenku font-18 color-green" />
|
||||
</Tooltip>:
|
||||
<span className="ml8">
|
||||
<i className="iconfont icon-jingxiang font-18 color-green" />
|
||||
</span>:""
|
||||
</Tooltip>:""
|
||||
}
|
||||
</span>
|
||||
<ListCount fork={item.forked_count} parise={item.praises_count}/>
|
||||
|
|
|
@ -0,0 +1,122 @@
|
|||
import React, { Component } from "react";
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Spin } from 'antd';
|
||||
import NoneData from '../Nodata';
|
||||
import './version.css';
|
||||
import axios from 'axios';
|
||||
import RenderHtml from '../../components/render-html';
|
||||
|
||||
/**
|
||||
* issue_chosen:下拉的筛选列表,
|
||||
* data:列表接口返回的所有数据,
|
||||
* issues:列表数组,
|
||||
* isSpin:加载中,
|
||||
*/
|
||||
class version extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
issue_chosen: undefined,
|
||||
data: undefined,
|
||||
releases:undefined,
|
||||
issues: undefined,
|
||||
isSpin: true,
|
||||
search: undefined,
|
||||
search_count: undefined,
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount = () => {
|
||||
this.getIssueList();
|
||||
}
|
||||
// 获取列表数据
|
||||
getIssueList = () => {
|
||||
const { projectsId, owner } = this.props.match.params;
|
||||
const url = `/${owner}/${projectsId}/releases.json`;
|
||||
axios.get(url).then((result) => {
|
||||
if (result) {
|
||||
this.setState({
|
||||
data: result.data,
|
||||
releases:result.data.releases,
|
||||
issues: result.data.issues,
|
||||
isSpin: false
|
||||
})
|
||||
}
|
||||
}).catch((error) => {
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
|
||||
// 显示版本描述
|
||||
showBody=(key,flag)=>{
|
||||
let { releases } = this.state;
|
||||
releases[key].bodyshow = !flag;
|
||||
this.setState({
|
||||
releases
|
||||
})
|
||||
}
|
||||
|
||||
renderList = (releases) => {
|
||||
const { projectsId , owner } = this.props.match.params;
|
||||
if (releases && releases.length > 0) {
|
||||
return (
|
||||
releases.map((item, key) => {
|
||||
return (
|
||||
<div className="versionInfo" key={key}>
|
||||
<span className="versionInfo_left">
|
||||
<span className={`${item.draft === "稳定" ?"versionTag green":"versionTag yellow"}`}>{item.draft}</span>
|
||||
<span className="mt10">{item.created_at}</span>
|
||||
<span className="color-grey-8">
|
||||
<i className="iconfont icon-biaoqian3 mr3 font-14"></i>
|
||||
{item.tag_name}
|
||||
</span>
|
||||
</span>
|
||||
<div className="versionInfo_right">
|
||||
<span className="versionName">
|
||||
<span className="task-hide">{item.name}</span>
|
||||
<Link to={`/projects/${owner}/${projectsId}/releases/${item.version_id}/update`} className="color-blue ml3 font-12">(编辑)</Link>
|
||||
</span>
|
||||
<span className="color-grey-3">
|
||||
<i className={`${item.bodyshow ? "iconfont icon-sanjiaoxing-down color-grey-8 mr3 font-14":"iconfont icon-triangle color-grey-8 mr3 font-14"}`} onClick={()=>this.showBody(key,item.bodyshow)}></i>
|
||||
{item.user_name}:<span className="color-grey-8">发布了这个版本,并在发布后提交给{item.target_commitish}</span>
|
||||
</span>
|
||||
{
|
||||
item.bodyshow && <RenderHtml className="break_word_comments imageLayerParent" value={item.body} url={this.props.history.location}/>
|
||||
}
|
||||
<RenderHtml />
|
||||
<p className="mt10 pl3">
|
||||
<a href={item.tarball_url} style={{color:"#4CC1DA"}} className="mr30"><i className="iconfont icon-TAR font-18 mr5"></i>TAR</a>
|
||||
<a href={item.zipball_url} style={{color:"#28BD6C"}}><i className="iconfont icon-ZIP font-18 mr5"></i>ZIP</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
)
|
||||
} else if (releases && releases.length === 0) {
|
||||
return ( <NoneData _html="暂时还没有相关数据!" /> )
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const { projectsId ,owner } = this.props.match.params;
|
||||
const { data , releases , isSpin } = this.state
|
||||
|
||||
return (
|
||||
<div className="main" style={{padding:"0px"}}>
|
||||
<div className="topWrapper" style={{padding:"15px 20px"}}>
|
||||
<span className="font-18 color-grey-3">版本发布</span>
|
||||
{
|
||||
data && data.user_permission ?
|
||||
<Link to={`/projects/${owner}/${projectsId}/releases/new`} className="topWrapper_btn_new">+ 发布新版</Link>
|
||||
: ''
|
||||
}
|
||||
</div>
|
||||
<div className="releasesVersion">
|
||||
<Spin spinning={isSpin}><div>{this.renderList(releases)}</div></Spin>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
export default version;
|
|
@ -123,6 +123,8 @@ class Infos extends Component {
|
|||
});
|
||||
const { current_user } = this.props;
|
||||
const { username } = this.props.match.params;
|
||||
const { pathname } = this.props.location;
|
||||
const { notice } = this.state;
|
||||
|
||||
let url = `/users/${username || (current_user && current_user.login)}.json`;
|
||||
axios.get(url).then((result) => {
|
||||
|
|
|
@ -48,7 +48,6 @@ function Team(props){
|
|||
</Menu>
|
||||
)
|
||||
|
||||
|
||||
return(
|
||||
<div>
|
||||
<div className="headerbox">
|
||||
|
|
|
@ -0,0 +1,137 @@
|
|||
import React , { useEffect } from 'react';
|
||||
import Beijing from './Img/unit/beijing.png';
|
||||
import SHJT from './Img/unit/SHJT.png';
|
||||
import DD from './Img/unit/DD.png';
|
||||
import HW from './Img/unit/HW.png';
|
||||
import ML from './Img/unit/ML.png';
|
||||
import QH from './Img/unit/QH.png';
|
||||
import QZ from './Img/unit/QZ.png';
|
||||
import TX from './Img/unit/TX.png';
|
||||
import XH from './Img/unit/XH.png';
|
||||
import XJY from './Img/unit/XJY.png';
|
||||
import ZC from './Img/unit/ZC.png';
|
||||
import GFKJ from './Img/unit/GFKJ.png';
|
||||
import BJHKHT from './Img/unit/BJHKHT.png';
|
||||
import ISCAS from './Img/unit/ISCAS.png';
|
||||
import NJDX from './Img/unit/NJDX.png';
|
||||
import CEC from './Img/unit/CEC.png';
|
||||
import KYRJLM from './Img/unit/KYRJLM.png';
|
||||
import WXYJY from './Img/unit/WXYJY.png';
|
||||
import HSKY from './Img/unit/HSKY.png';
|
||||
import LSLM from './Img/unit/LSLM.png';
|
||||
import TG from './Img/unit/TG.png';
|
||||
import LC from './Img/unit/LC.png';
|
||||
import YKD from './Img/unit/YKD.png';
|
||||
|
||||
const list = [
|
||||
{image_url:GFKJ, name:"国防科技大学",src:"https://www.nudt.edu.cn/"},
|
||||
{image_url:TG, name:"头歌",src:"https://www.educoder.net/"},
|
||||
{image_url:XJY, name:"长沙先进技术研究院",src:"https://www.hnjmrh.gov.cn/newweb/service/detail/305/"},
|
||||
{image_url:Beijing, name:"北京大学",src:"https://www.pku.edu.cn/"},
|
||||
{image_url:BJHKHT, name:"北京航空航天",src:"https://www.buaa.edu.cn/"},
|
||||
{image_url:ISCAS, name:"ISCAS",src:"http://www.iscas.ac.cn/"},
|
||||
{image_url:NJDX, name:"南京大学",src:"https://www.nju.edu.cn/"},
|
||||
{image_url:DD, name:"滴滴",src:"https://www.didiglobal.com/"},
|
||||
{image_url:CEC, name:"CEC",src:"https://www.cec.com.cn/"},
|
||||
{image_url:HW, name:"华为",src:"https://www.huawei.com/"},
|
||||
{image_url:ML, name:"木兰开源社区",src:"https://www.mulanos.cn/"},
|
||||
{image_url:TX, name:"腾讯",src:"https://www.tencent.com/zh-cn"},
|
||||
{image_url:KYRJLM, name:"中国开源软件推进联盟",src:"http://www.copu.org.cn/"},
|
||||
{image_url:XH, name:"中国计算机学会",src:"https://www.ccf.org.cn/"},
|
||||
{image_url:QZ, name:"openi启智",src:"https://www.openi.org.cn/"},
|
||||
{image_url:HSKY, name:"红山开源",src:"https://osredm.com/"},
|
||||
{image_url:LSLM, name:"绿色产业联盟",src:"https://www.opengcc.org/"},
|
||||
{image_url:ZC, name:"中创软件",src:"http://www.cvicse.com/"},
|
||||
{image_url:LC, name:"浪潮",src:"https://cloud.inspur.com/"},
|
||||
{image_url:YKD, name:"ucloud",src:"https://www.ucloud.cn/"}
|
||||
]
|
||||
// const settings = {
|
||||
// dots: false,
|
||||
// infinite: true,
|
||||
// slidesToShow: 6,
|
||||
// slidesToScroll: 1,
|
||||
// autoplay: true,
|
||||
// speed: 2000,
|
||||
// autoplaySpeed: 2000,
|
||||
// cssEase: "linear",
|
||||
// rows:2,
|
||||
// arrows:false
|
||||
// };
|
||||
function FifthEdition() {
|
||||
|
||||
useEffect(()=>{
|
||||
if(list.length>10){
|
||||
Init();
|
||||
}
|
||||
},[])
|
||||
|
||||
function Init() {
|
||||
let box = document.getElementById('scrollBox1');
|
||||
scrollUp();
|
||||
var myTimer = setInterval(scrollUp, 10);
|
||||
// 鼠标移入container 元素上 清除定时器 停止滚动
|
||||
box.onmouseover = () => {
|
||||
clearInterval(myTimer);
|
||||
}
|
||||
// 鼠标移出container 元素上 继续滚动
|
||||
// 60表示每隔60毫秒向上滚动一次
|
||||
box.onmouseout = () => {
|
||||
myTimer = setInterval(scrollUp, 10);
|
||||
}
|
||||
}
|
||||
|
||||
function scrollUp() {
|
||||
let box = document.getElementById('scrollBox1');
|
||||
if(box){
|
||||
let con1 = document.getElementById('box1');
|
||||
if (box.scrollLeft >= con1.clientWidth) {
|
||||
box.scrollLeft = 0;
|
||||
} else {
|
||||
box.scrollLeft++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return(
|
||||
<div id={"scrollBox1"}>
|
||||
<div style={{width:370*list.length+"px"}}>
|
||||
<ul className="fifthList" id="box1" style={{width:(370*list.length)/2+"px"}}>
|
||||
{
|
||||
list && list.map((i,k)=>{
|
||||
return(
|
||||
<li><a href={i.src}><img src={i.image_url} alt={i.name}/></a></li>
|
||||
)
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
{list.length > 10 &&
|
||||
<ul className="fifthList" id="box2" style={{width:(370*list.length)/2+"px"}}>
|
||||
{
|
||||
list && list.map((i,k)=>{
|
||||
return(
|
||||
<li><a href={i.src}><img src={i.image_url} alt={i.name}/></a></li>
|
||||
)
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
</div>
|
||||
{/* <Slider {...settings} className="footSlider">
|
||||
{
|
||||
list && list.map((i,k)=>{
|
||||
return(
|
||||
<li><Link to={i.src}><img src={i.image_url} alt={i.name}/></Link></li>
|
||||
)
|
||||
})
|
||||
}
|
||||
{list.length > 10 && list && list.map((i,k)=>{
|
||||
return(
|
||||
<li><Link to={i.src}><img src={i.image_url} alt={i.name}/></Link></li>
|
||||
)
|
||||
})
|
||||
}
|
||||
</Slider> */}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
export default FifthEdition;
|
|
@ -0,0 +1,47 @@
|
|||
import React from 'react';
|
||||
import Img from './Img/gitlink.png';
|
||||
import qqImg from './Img/qq.png';
|
||||
function Footnav() {
|
||||
return(
|
||||
<div className="footEdition">
|
||||
<div className="footContent">
|
||||
<ul className="center">
|
||||
<img src={Img} alt="Gitlink(确实开源)" height="29px"/>
|
||||
<p>(确实开源)</p>
|
||||
</ul>
|
||||
<ul>
|
||||
<li className="thehead">社区</li>
|
||||
<li><a href="/">网站首页</a></li>
|
||||
{/* 关于我们 */}
|
||||
<li><a href="https://forum.trustie.net/forums/1168/detail">帮助中心</a></li>
|
||||
<li><a href="https://forum.trustie.net/">论坛交流</a></li>
|
||||
<li><a href="https://www.trustie.net/cooperation">合作伙伴</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li className="thehead">支持与服务</li>
|
||||
<li><a href="https://forgeplus.trustie.net/docs/api">API文档</a></li>
|
||||
<li><a href="https://git-scm.com">Git常用命令</a></li>
|
||||
<li><a href="https://forum.trustie.net/forums/3080/detail">DevOps使用文档</a></li>
|
||||
<li><a href='https://www.trustie.net/agreement'>服务协议</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li className="thehead">加入我们</li>
|
||||
<li className="theline">
|
||||
{/* <div className="mr50">
|
||||
<li>公众号</li>
|
||||
<img src={qqImg} alt="公众号"/>
|
||||
</div> */}
|
||||
<div>
|
||||
<li>QQ群</li>
|
||||
<div className="imgCon">
|
||||
<img src={qqImg} alt="QQ群"/>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p className="copyrightDesc">©Copyright 2007~2021 国防科技大学GitLink团队 & IntelliDE <br/>湘ICP备 17009477号</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
export default Footnav;
|
|
@ -0,0 +1,31 @@
|
|||
import React from 'react';
|
||||
import './Index.scss';
|
||||
// import gitlink from './Img/gitlink.png';
|
||||
import { getImageUrl } from 'educoder';
|
||||
|
||||
function HeadNav({showLoginDialog,mygetHelmetapi}) {
|
||||
const register = mygetHelmetapi && mygetHelmetapi.common && mygetHelmetapi.common.register;
|
||||
const navbar = mygetHelmetapi && mygetHelmetapi.navbar;
|
||||
return(
|
||||
<div className="headNav">
|
||||
<div className="headNavDiv">
|
||||
<ul className="headlist">
|
||||
<li><img src={getImageUrl(`/${mygetHelmetapi && mygetHelmetapi.nav_logo_url}`)} alt="gitlink" height="37px" style={{marginRight:"15px"}}/></li>
|
||||
{
|
||||
navbar && navbar.length>0&&
|
||||
navbar.map((i,k)=>{
|
||||
return(
|
||||
<li style={{display:i.hidden?"none":"block"}}><a href={i.link}>{i.name}</a></li>
|
||||
)
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
<div>
|
||||
<a className="color-white" onClick={showLoginDialog}>登录</a>
|
||||
<a className="regBtn" href={register}>注册</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
export default HeadNav;
|
After Width: | Height: | Size: 535 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 95 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 470 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 122 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 345 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 5.3 MiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 2.0 MiB |
After Width: | Height: | Size: 769 KiB |
After Width: | Height: | Size: 428 KiB |
After Width: | Height: | Size: 458 KiB |
After Width: | Height: | Size: 914 KiB |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 9.8 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 1.3 MiB |
|
@ -0,0 +1,128 @@
|
|||
import React , { useEffect , useState } from 'react';
|
||||
import "./Index.scss";
|
||||
import HeadNav from './Headnav';
|
||||
import TopEdition from './TopEdition';
|
||||
import ThirdEdition from './ThirdEdition';
|
||||
import { Anchor } from 'antd';
|
||||
import F41 from './Img/4-1.png';
|
||||
import F42 from './Img/4-2.png';
|
||||
import F43 from './Img/4-3.png';
|
||||
import F44 from './Img/4-4.png';
|
||||
import SecondEdition from './SecondEdition';
|
||||
import FifthEdition from './FifthEdition';
|
||||
import Footnav from './Footnav';
|
||||
import { TPMIndexHOC } from '../modules/tpm/TPMIndexHOC';
|
||||
|
||||
function Index(props) {
|
||||
const [ value , setValue ] = useState("");
|
||||
const [ flag , setFlag ] = useState(true);
|
||||
const [ isRender , setIsRender ] = useState(false);
|
||||
const [ isloginCancel , setIsloginCancel ] = useState(false);
|
||||
const register = props && props.mygetHelmetapi && props.mygetHelmetapi.common && props.mygetHelmetapi.common.register;
|
||||
|
||||
useEffect(()=>{
|
||||
window.addEventListener("scroll",scrollListener);
|
||||
},[])
|
||||
|
||||
function scrollListener(event) {
|
||||
let third = document.getElementById("thirdContent").offsetTop;
|
||||
let top = document.documentElement.scrollTop + 60;
|
||||
if(top>= third)
|
||||
{
|
||||
setFlag(false)
|
||||
}else{
|
||||
setFlag(true)
|
||||
}
|
||||
}
|
||||
|
||||
function changeActive(params) {
|
||||
if(params){
|
||||
setValue(params);
|
||||
let h = params.split("#")[1];
|
||||
let t = document.getElementById(h).offsetTop;
|
||||
document.documentElement.scrollTop = t-100;
|
||||
}else{
|
||||
setValue("");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return(
|
||||
<div className="homePage">
|
||||
<div className="topEdition">
|
||||
<HeadNav {...props}/>
|
||||
<TopEdition register={register}/>
|
||||
<ul className="topEditionUl">
|
||||
<a href="https://forum.trustie.net/forums/4666/detail" target="_blank" className="font-18">
|
||||
<li>
|
||||
CCF开源发展委员会首批执行委员名单发布
|
||||
</li>
|
||||
</a>
|
||||
<a href="https://forgeplus.trustie.net/Gitlink/forgeplus" target="_blank" className="font-18">
|
||||
<li>
|
||||
平台精选仓库:Gitlink/Gitlink
|
||||
</li>
|
||||
</a>
|
||||
<a href="https://forum.trustie.net/forums/4663/detail" target="_blank" className="font-18">
|
||||
<li>
|
||||
OpenHarmony系统介绍及赛题说明
|
||||
</li>
|
||||
</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="secondEdition">
|
||||
<p className="theTitle">Gitlink,新一代开源创新服务平台</p>
|
||||
{
|
||||
flag &&
|
||||
<Anchor>
|
||||
<li onClick={()=>changeActive("#hadoop")} className={value === "#hadoop"?"active":""}><a>分布式协作开发</a></li>
|
||||
<li onClick={()=>changeActive("#oneStop")} className={value === "#oneStop"?"active":""}><a>一站式过程管理</a></li>
|
||||
<li onClick={()=>changeActive("#highDevops")} className={value === "#highDevops"?"active":""}><a>高效流水线运维</a></li>
|
||||
<li onClick={()=>changeActive("#multipleAnalyse")} className={value === "#multipleAnalyse"?"active":""}><a>多层次代码分析</a></li>
|
||||
<li onClick={()=>changeActive("#multidimensional")} className={value === "#multidimensional"?"active":""}><a>多维度用户画像</a></li>
|
||||
</Anchor>
|
||||
}
|
||||
<SecondEdition {...props} setValue={setValue}/>
|
||||
</div>
|
||||
<div id="thirdContent">
|
||||
<ThirdEdition />
|
||||
</div>
|
||||
|
||||
<div className="forthEdition">
|
||||
<p className="theTitle">加入Gitlink,和社区伙伴们一起踏上开源创新的辉煌旅程!</p>
|
||||
<a className="qulikyreg" href={register}>快速注册</a>
|
||||
<ul className="forthUl">
|
||||
<li>
|
||||
<img src={F41} alt="" width={"100px"}/>
|
||||
<span className="forthtitle">发现</span>
|
||||
<span className="forthsubtitle">探索丰富优质的开发资源</span>
|
||||
</li>
|
||||
<li>
|
||||
<img src={F42} alt="" width={"101px"}/>
|
||||
<span className="forthtitle">加入</span>
|
||||
<span className="forthsubtitle">寻找志同道合的协作伙伴</span>
|
||||
</li>
|
||||
<li>
|
||||
<img src={F43} alt="" width={"104px"}/>
|
||||
<span className="forthtitle">合作</span>
|
||||
<span className="forthsubtitle">开启开放共享的协同之旅</span>
|
||||
</li>
|
||||
<li>
|
||||
<img src={F44} alt="" width={"87px"}/>
|
||||
<span className="forthtitle">贡献</span>
|
||||
<span className="forthsubtitle">书写开源创新的精彩成就</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="fifthEdition">
|
||||
<p className="title">开源生态</p>
|
||||
<p className="subtitle">Gitlink与各大企业、高校、科研机构开展广泛的技术合作,推动我国开源软件生态的快速构建与发展</p>
|
||||
<FifthEdition />
|
||||
</div>
|
||||
<Footnav />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
export default TPMIndexHOC(Index);
|