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 {
|
html body {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 2.0;
|
line-height: 2.0;
|
||||||
background: #fafafa;
|
background: #fafafa;
|
||||||
font-family: "Microsoft YaHei", "SimSun";
|
font-family: "iconfont";
|
||||||
color: #05101a;
|
color: #05101a;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -6705,10 +6711,13 @@ p{
|
||||||
right: 0px;
|
right: 0px;
|
||||||
top:4px;
|
top:4px;
|
||||||
color: #999;
|
color: #999;
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
}
|
}
|
||||||
.ant-input, .ant-input .ant-input-suffix{
|
.ant-input, .ant-input .ant-input-suffix{
|
||||||
background-color: #fff!important;
|
background-color: #fff!important;
|
||||||
}
|
}
|
||||||
.has-error .ant-input{
|
.has-error .ant-input{
|
||||||
background-color: #FEF1F0!important;
|
background-color: #FEF1F0!important;
|
||||||
|
>>>>>>> pre_develop
|
||||||
}
|
}
|
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 axios from 'axios';
|
||||||
import LoginDialog from './modules/login/LoginDialog';
|
import LoginDialog from './modules/login/LoginDialog';
|
||||||
import 'babel-polyfill';
|
import 'babel-polyfill';
|
||||||
import Loading from './Loading'
|
import Loading from './Loading';
|
||||||
|
|
||||||
import Loadable from 'react-loadable';
|
import Loadable from 'react-loadable';
|
||||||
import marked from './common/marked';
|
import marked from './common/marked';
|
||||||
|
@ -97,6 +97,10 @@ const ProjectIndex = Loadable({
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const Home = Loadable({
|
||||||
|
loader: () => import('./home/Index'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
// const CreateMerge = Loadable({
|
// const CreateMerge = Loadable({
|
||||||
// loader: () => import('./forge/Merge/NewMerge'),
|
// loader: () => import('./forge/Merge/NewMerge'),
|
||||||
// loading: Loading,
|
// loading: Loading,
|
||||||
|
@ -353,34 +357,28 @@ class App extends Component {
|
||||||
{/* 判断为用户/组织,并进入对应页面 */}
|
{/* 判断为用户/组织,并进入对应页面 */}
|
||||||
{
|
{
|
||||||
pathType === 'User' ?
|
pathType === 'User' ?
|
||||||
<Route exact path="/:username"
|
<Route exact path="/:username"
|
||||||
render={
|
render={
|
||||||
(props) => {
|
(props) => {
|
||||||
return (<InfosIndex {...this.props} {...this.state} />)
|
return (<InfosIndex {...this.props} {...this.state} />)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/> : pathType === 'Organization' ? <Route path={"/:OIdentifier"}
|
}
|
||||||
render={
|
/> : pathType === 'Organization' ? <Route path={"/:OIdentifier"}
|
||||||
(props) => {
|
render={
|
||||||
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
|
(props) => {
|
||||||
}
|
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
|
||||||
}>
|
}
|
||||||
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
|
}>
|
||||||
<Route exact path="/"
|
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
|
||||||
render={
|
""
|
||||||
(props) => (
|
|
||||||
personal && personal.length > 0 ?
|
|
||||||
<InfosIndex {...this.props} {...props} />
|
|
||||||
:
|
|
||||||
<ProjectIndex {...this.props} {...props} />
|
|
||||||
)
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
// <Route path="/" component={Loading} />
|
|
||||||
// <Route path="/" component={Shixunnopage} />
|
|
||||||
}
|
}
|
||||||
|
<Route exact path="/"
|
||||||
|
render={
|
||||||
|
(props) => (
|
||||||
|
<Home {...props} {...this.props} {...this.state}/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
{/* 个人主页 */}
|
{/* 个人主页 */}
|
||||||
<Route path="/:username"
|
<Route path="/:username"
|
||||||
|
|
|
@ -363,7 +363,7 @@ li.ant-menu-item{
|
||||||
color: #333;
|
color: #333;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
line-height: 34px;
|
line-height: 34px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px!important;
|
||||||
a{
|
a{
|
||||||
display: block;
|
display: block;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
@ -19,46 +19,46 @@ function Footer(){
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<div>
|
<div>
|
||||||
<div style={{height:"543px"}}></div>
|
{/* {value && showhtml(value)} */}
|
||||||
|
<div style={{height:"483px"}}></div>
|
||||||
<div className="newFooter edu-txt-center">
|
<div className="newFooter edu-txt-center">
|
||||||
{value && showhtml(value)}
|
{value && showhtml(value)}
|
||||||
{/* <div className="footerInfos">
|
{/* <div className="footEdition">
|
||||||
<ul>
|
<div className="footContent">
|
||||||
<li>社区</li>
|
<ul className="center">
|
||||||
<li><a href={`/`} target="_blank">网站首页</a></li>
|
<img src={""} alt="Gitlink(确实开源)" height="29px"/>
|
||||||
<li><a href={`https://www.trustie.net/agreement`} target="_blank">服务协议</a></li>
|
<p>(确实开源)</p>
|
||||||
<li><a href={`https://forum.trustie.net/forums/1168/detail`} target="_blank">帮助中心</a></li>
|
</ul>
|
||||||
<li><a href={`https://forum.trustie.net/`} target="_blank">问吧交流</a></li>
|
<ul>
|
||||||
<li><a href={`https://www.trustie.net/cooperation`} target="_blank">合作伙伴</a></li>
|
<li className="thehead">社区</li>
|
||||||
</ul>
|
<li><a href="/">网站首页</a></li>
|
||||||
<ul>
|
<li><a href="https://forum.trustie.net/forums/1168/detail">帮助中心</a></li>
|
||||||
<li>支持与服务</li>
|
<li><a href="https://forum.trustie.net/">论坛交流</a></li>
|
||||||
<li><a href={`https://forgeplus.trustie.net/docs/api`} target="_blank">API文档</a></li>
|
<li><a href="https://www.trustie.net/cooperation">合作伙伴</a></li>
|
||||||
<li><a href={`https://forum.trustie.net/forums/1168/detail`} target="_blank">帮助中心</a></li>
|
</ul>
|
||||||
<li><a href={`https://git-scm.com`} target="_blank">Git常用命令</a></li>
|
<ul>
|
||||||
<li><a href={`https://forum.trustie.net/forums/3080/detail`} target="_blank">DevOps使用文档</a></li>
|
<li className="thehead">支持与服务</li>
|
||||||
<li><a href={`https://forgeplus.trustie.net/projects/jasder/forgeplus/tree/master/CHANGELOG.md`} target="_blank">日志更新</a></li>
|
<li><a href="https://forgeplus.trustie.net/docs/api">API文档</a></li>
|
||||||
</ul>
|
<li><a href="https://git-scm.com">Git常用命令</a></li>
|
||||||
<ul>
|
<li><a href="https://forum.trustie.net/forums/3080/detail">DevOps使用文档</a></li>
|
||||||
<li>合作伙伴</li>
|
<li><a href='https://www.trustie.net/agreement'>服务协议</a></li>
|
||||||
<li><a href={`http://www.sei.pku.edu.cn`} target="_blank">北京大学</a></li>
|
</ul>
|
||||||
<li><a href={`http://scse.buaa.edu.cn`} target="_blank">北京航空航天大学</a></li>
|
<ul>
|
||||||
<li><a href={`https://www.nju.edu.cn`} target="_blank">南京大学</a></li>
|
<li className="thehead">加入我们</li>
|
||||||
<li><a href={`https://www.xtu.edu.cn`} target="_blank">湘潭大学</a></li>
|
<li className="theline">
|
||||||
<li><a href={`http://www.iscas.ac.cn`} target="_blank">ISCAS</a></li>
|
<div className="mr50">
|
||||||
<li><a href={`https://www.ucloud.cn`} target="_blank">UCloud优刻得</a></li>
|
<li>公众号</li>
|
||||||
<li><a href={`http://www.inforbus.com`} target="_blank">中创软件</a></li>
|
<img src={"Img"} alt="公众号"/>
|
||||||
<li><a href={`https://www.inspur.com`} target="_blank">浪潮集团</a></li>
|
</div>
|
||||||
<li><a href={`http://www.copu.org.cn`} target="_blank">中国开源软件推进联盟</a></li>
|
<div>
|
||||||
<li><a href={`https://www.sjtu.edu.cn`} target="_blank">上海交通大学</a></li>
|
<li>QQ群</li>
|
||||||
</ul>
|
<img src={"qqImg"} alt="QQ群"/>
|
||||||
<ul>
|
</div>
|
||||||
<li>合作伙伴</li>
|
</li>
|
||||||
<li><span>热线:</span></li>
|
</ul>
|
||||||
<li><span>QQ群:1071514693</span></li>
|
</div>
|
||||||
</ul>
|
<p className="copyrightDesc">©Copyright 2007~2021 国防科技大学Gitlink团队 & IntelliDE <br/>湘ICP备 17009477号</p>
|
||||||
</div>
|
</div> */}
|
||||||
<p className="footerCopy">© Copyright 2007~2021 国防科技大学Trustie团队 & IntelliDE <a href="https://beian.miit.gov.cn">湘ICP备 17009477号</a></p> */}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|
|
@ -262,4 +262,77 @@
|
||||||
|
|
||||||
.text-center{
|
.text-center{
|
||||||
text-align: 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} />
|
<ProjectNew {...this.props} {...props} />
|
||||||
)}
|
)}
|
||||||
></Route>
|
></Route>
|
||||||
{/* <Route
|
|
||||||
path="/:owner/:projectsId"
|
|
||||||
render={(props) => (
|
|
||||||
<ProjectDetail {...this.props} {...props} />
|
|
||||||
)}
|
|
||||||
></Route> */}
|
|
||||||
<Route
|
<Route
|
||||||
path="/explore"
|
path="/explore"
|
||||||
render={(props) => (
|
render={(props) => (
|
||||||
|
@ -73,12 +67,12 @@ class Index extends Component {
|
||||||
)}
|
)}
|
||||||
></Route>
|
></Route>
|
||||||
|
|
||||||
<Route
|
{/* <Route
|
||||||
path="/"
|
path="/"
|
||||||
render={(props) => (
|
render={(props) => (
|
||||||
<ProjectIndex {...this.props} {...props} />
|
<ProjectIndex {...this.props} {...props} />
|
||||||
)}
|
)}
|
||||||
></Route>
|
></Route> */}
|
||||||
</Switch>
|
</Switch>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -90,10 +84,3 @@ export default withRouter(
|
||||||
parentSelector: ".newMain",
|
parentSelector: ".newMain",
|
||||||
})(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
|
})(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.Item key={'1'}><a href={tar_url}>TAR.GZ</a></Menu.Item>
|
||||||
</Menu>
|
</Menu>
|
||||||
)
|
)
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<div className="main">
|
<div className="main">
|
||||||
|
|
|
@ -509,11 +509,6 @@ class Detail extends Component {
|
||||||
this.textFunc(projectDetail.forked_from_project_id, projectDetail.fork_info)
|
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>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -52,12 +52,6 @@ class IndexItem extends Component {
|
||||||
<i className="iconfont icon-banbenku font-18 color-green" />
|
<i className="iconfont icon-banbenku font-18 color-green" />
|
||||||
</Tooltip>:""
|
</Tooltip>:""
|
||||||
}
|
}
|
||||||
{
|
|
||||||
item.type && item.type === 1 ?
|
|
||||||
<Tooltip title="该项目是一个导入于其他网站的仓库" className="ml5">
|
|
||||||
<i className="iconfont icon-jingxiang font-18 color-green" />
|
|
||||||
</Tooltip>:""
|
|
||||||
}
|
|
||||||
</AlignCenter>
|
</AlignCenter>
|
||||||
<span className="p-r-tags">
|
<span className="p-r-tags">
|
||||||
{
|
{
|
||||||
|
|
|
@ -267,6 +267,11 @@ class Setting extends Component {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})(<Input placeholder="请输入项目名称" />)}
|
})(<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>
|
</Form.Item>
|
||||||
<div className="df" style={{ alignItems: "center" }}>
|
<div className="df" style={{ alignItems: "center" }}>
|
||||||
<span className="mr20 mb15 font-16">可见性</span>
|
<span className="mr20 mb15 font-16">可见性</span>
|
||||||
|
|
|
@ -157,6 +157,17 @@ export default Form.create()(
|
||||||
setAuth(params.target.value)
|
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){
|
function checkname(rule, value, callback){
|
||||||
if(!value){
|
if(!value){
|
||||||
callback();
|
callback();
|
||||||
|
|
|
@ -10,14 +10,10 @@ function ListItem({item,key,OIdentifier}) {
|
||||||
<Link to={`/${OIdentifier}/${item.identifier}`} className="name">{item.name}</Link>
|
<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.forked_from_project_id && <i className="iconfont icon-fork font-18 color-orange ml8" /> }
|
||||||
{
|
{
|
||||||
item.type && item.type !== 0 ?
|
item.type && item.type === 2 ?
|
||||||
item.type === 2 ?
|
|
||||||
<Tooltip title="该项目是一个镜像" className="ml8">
|
<Tooltip title="该项目是一个镜像" className="ml8">
|
||||||
<i className="iconfont icon-banbenku font-18 color-green" />
|
<i className="iconfont icon-banbenku font-18 color-green" />
|
||||||
</Tooltip>:
|
</Tooltip>:""
|
||||||
<span className="ml8">
|
|
||||||
<i className="iconfont icon-jingxiang font-18 color-green" />
|
|
||||||
</span>:""
|
|
||||||
}
|
}
|
||||||
</span>
|
</span>
|
||||||
<ListCount fork={item.forked_count} parise={item.praises_count}/>
|
<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 { current_user } = this.props;
|
||||||
const { username } = this.props.match.params;
|
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`;
|
let url = `/users/${username || (current_user && current_user.login)}.json`;
|
||||||
axios.get(url).then((result) => {
|
axios.get(url).then((result) => {
|
||||||
|
|
|
@ -48,7 +48,6 @@ function Team(props){
|
||||||
</Menu>
|
</Menu>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<div>
|
<div>
|
||||||
<div className="headerbox">
|
<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);
|
|
@ -0,0 +1,210 @@
|
||||||
|
import React , { useEffect , useState } from 'react';
|
||||||
|
import Img1 from './Img/2-2-1.png';
|
||||||
|
import ImgHead from './Img/2-2-head.png';
|
||||||
|
import Img2 from './Img/2-2-2.png';
|
||||||
|
import Img3 from './Img/2-2-3.png';
|
||||||
|
import Imgring from './Img/2-2-ring.png';
|
||||||
|
import ImgS1 from './Img/2-3-1.png';
|
||||||
|
import ImgS2 from './Img/2-3-2.png';
|
||||||
|
import ImgS3 from './Img/2-3-3.png';
|
||||||
|
import ImgS4 from './Img/2-3-4.png';
|
||||||
|
import ImgM2 from './Img/2-6-2.png';
|
||||||
|
import ImgM4 from './Img/2-6-1.png';
|
||||||
|
import Codeafter from './Img/codeafter.png';
|
||||||
|
import './code.scss';
|
||||||
|
|
||||||
|
const code=[
|
||||||
|
{str:<span><span className='code-green'>git remote</span> add origin https://git.trustie.net/Gitlink/Gitlink.git</span>},
|
||||||
|
{str:<span><span className='code-red'>git push</span> -u origin master</span>},
|
||||||
|
{str:<span><span className='code-green'>git branch</span> dev</span>},
|
||||||
|
{str:<span><span className='code-blue'>git checkout</span> dev</span>},
|
||||||
|
{str:<span><span className='code-green'>git add</span> .</span>},
|
||||||
|
{str:<span><span className='code-red'>git commit</span> -m "xxx"</span>},
|
||||||
|
{str:<span><span className='code-red'>git push</span> origin dev</span>},
|
||||||
|
{str:<span><span className='code-blue'>git checkout</span> master</span>},
|
||||||
|
{str:<span><span className='code-green'>git pull</span> origin master</span>},
|
||||||
|
{str:<span><span className='code-green'>git merge</span> dev</span>},
|
||||||
|
{str:<span><span className='code-red'>git push</span> origin master</span>}
|
||||||
|
]
|
||||||
|
const codes=[
|
||||||
|
{str:<span><span className='code-blue'>latest:</span> Pulling from appleboy/drone-ssh</span>},
|
||||||
|
{str:<span><span className='code-red'>Digest:</span>sha256:095ca4ceafcb751f1f22fe416057d3e2a6302f7b1f7011b17010973cb6bbdd9f</span>},
|
||||||
|
{str:<span>Status:Image is up to date for appleboy/drone-ssh:latest</span>},
|
||||||
|
{str:<span><span className='code-green'>======CMD======</span></span>},
|
||||||
|
{str:<span><span className='code-green'>echo ====暂停容器开始======= </span></span>},
|
||||||
|
{str:<span><span className='code-red'>docker</span> rm -f mo-test</span>},
|
||||||
|
{str:<span><span className='code-red'>docker</span> rmi mo-test:1.0</span>},
|
||||||
|
{str:<span><span className='code-blue'>cd</span> /opt/demo</span>},
|
||||||
|
{str:<span><span className='code-green'>echo ====开始部署=======</span></span>},
|
||||||
|
{str:<span><span className='code-red'>docker </span>build -t mo-test:1.0 .</span>},
|
||||||
|
{str:<span><span className='code-red'>docker </span>run -d -p 8080:8080 --name mo-test mo-test:1.0</span>},
|
||||||
|
{str:<span><span className='code-green'>echo ====部署成功======</span></span>},
|
||||||
|
{str:<span><span className='code-green'>======END======</span></span>},
|
||||||
|
]
|
||||||
|
|
||||||
|
function SecondEdition({setValue}) {
|
||||||
|
useEffect(()=>{
|
||||||
|
window.addEventListener('scroll', handleScroll);
|
||||||
|
},[])
|
||||||
|
|
||||||
|
const [ hadoop , setHadoop ] = useState(false);
|
||||||
|
const [ highDevops , setHighDevops ] = useState(false);
|
||||||
|
const [ multipleAnalyse , setMultipleAnalyse ] = useState(false);
|
||||||
|
const [ multidimensional , setMultidimensional ] = useState(false);
|
||||||
|
|
||||||
|
const [ oneStop , setOneStop ] = useState(false);
|
||||||
|
|
||||||
|
function handleScroll() {
|
||||||
|
let clientHeight = document.documentElement.clientHeight; //可视区域高度
|
||||||
|
let scrollTop = document.documentElement.scrollTop; //滚动条滚动高度
|
||||||
|
let f = checkPosi("hadoop",clientHeight,scrollTop);
|
||||||
|
if(f){
|
||||||
|
setValue("#hadoop");
|
||||||
|
setHadoop(true);
|
||||||
|
}else{
|
||||||
|
setHadoop(false);
|
||||||
|
}
|
||||||
|
let f1 = checkPosi("oneStop",clientHeight,scrollTop);
|
||||||
|
if(f1){
|
||||||
|
setValue("#oneStop");
|
||||||
|
setOneStop(true);
|
||||||
|
}else{
|
||||||
|
setOneStop(false);
|
||||||
|
setOneStop(false);
|
||||||
|
}
|
||||||
|
let f3 = checkPosi("highDevops",clientHeight,scrollTop);
|
||||||
|
if(f3){
|
||||||
|
setValue("#highDevops");
|
||||||
|
setHighDevops(true);
|
||||||
|
}else{
|
||||||
|
setHighDevops(false);
|
||||||
|
setHighDevops(false);
|
||||||
|
}
|
||||||
|
let f4 = checkPosi("multipleAnalyse",clientHeight,scrollTop);
|
||||||
|
if(f4){
|
||||||
|
setValue("#multipleAnalyse");
|
||||||
|
setMultipleAnalyse(true);
|
||||||
|
}else{
|
||||||
|
setMultipleAnalyse(false);
|
||||||
|
setMultipleAnalyse(false);
|
||||||
|
}
|
||||||
|
let f5 = checkPosi("multidimensional",clientHeight,scrollTop);
|
||||||
|
if(f5){
|
||||||
|
setValue("#multidimensional");
|
||||||
|
setMultidimensional(true);
|
||||||
|
}else{
|
||||||
|
setMultidimensional(false);
|
||||||
|
setMultidimensional(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkPosi(ele,clientHeight,scrollTop) {
|
||||||
|
var a = document.getElementById(ele).offsetTop - scrollTop -(clientHeight/3);
|
||||||
|
var b = document.getElementById(ele).clientHeight + (clientHeight/4);
|
||||||
|
if(a>0 || a<-b){
|
||||||
|
return false;
|
||||||
|
}else{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(
|
||||||
|
<div className="secondEditionContent">
|
||||||
|
<div className="hadoop" id="hadoop">
|
||||||
|
<div className="hadoopCon">
|
||||||
|
<div className="descBox">
|
||||||
|
<p className="desc1">分布式协作开发</p>
|
||||||
|
<p className="desc2">基于Git打造分布式代码托管环境,提供免费公、私有代码仓库;</p>
|
||||||
|
<p className="desc3">支持在线文件编辑、代码分支管理、协作贡献统计、代码仓库复刻(Fork)、贡献合并请求(PR)、群智贡献审阅等功能;</p>
|
||||||
|
</div>
|
||||||
|
<div className={hadoop ? "hadoopCode activeCode" :"hadoopCode"}>
|
||||||
|
{
|
||||||
|
code.map((i,k)=>{
|
||||||
|
return(
|
||||||
|
<li><pre className="word-item" style={{animationDelay: `${k * 0.2 + .2}s`}}><span className="codenum">{k+1}</span>{i.str}</pre></li>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
<img src={Codeafter} alt="运行结果" className={"activeImg"}/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p className="hadoopdesc">让您的项目在这里健康、快速的成长!</p>
|
||||||
|
</div>
|
||||||
|
<div className={oneStop ? "oneStop activeCode" :"oneStop"} id="oneStop">
|
||||||
|
<div className={"oneStopContent"}>
|
||||||
|
<div className={"osLeftMain"}>
|
||||||
|
<img src={Img1} alt="" width="520px" className="osleftPosi"/>
|
||||||
|
<img src={ImgHead} alt="" width="213px" style={{marginLeft:"-12px"}}/>
|
||||||
|
<img src={Img2} alt="" width="653px" className="osleftPosi1"/>
|
||||||
|
<img src={Img3} alt="" width="367px" className="osleftPosi2"/>
|
||||||
|
</div>
|
||||||
|
<div className="osRightMain">
|
||||||
|
<p className="osRightTitle">一站式过程管理</p>
|
||||||
|
<p>提供<span>易修(Issue)、里程碑、通知提醒、标签归档</span>等多样化任务管理工具,支持各类开发任务的发布、指派与跟踪;</p>
|
||||||
|
<p>同时提供<span>在线Wiki文档、组织多粒度管理</span>等功能,为您搭建一站式的项目过程管理环境;</p>
|
||||||
|
<p><span>让您的团队协作更高效、过程更透明!</span></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src={Imgring} alt="" height="83px" className="imgring"/>
|
||||||
|
</div>
|
||||||
|
<div className={highDevops ? "highDevops activeCode" : "highDevops"} id="highDevops">
|
||||||
|
<div className="highDoTitle">
|
||||||
|
<span>高效流水线运维</span>
|
||||||
|
</div>
|
||||||
|
<div className="highDoSubtitle">
|
||||||
|
融合DevOps思想,提供轻量级的工作流引擎(Engine),
|
||||||
|
<span>打通编码、测试、构建、部署</span>等开发运维环节;支持
|
||||||
|
<span>自定义配置、代码静态扫描、构建自动触发、容器镜像托管</span>等功能,同时支持接入第三方运维工具。
|
||||||
|
</div>
|
||||||
|
<div className="highDoContent">
|
||||||
|
<div>
|
||||||
|
<img src={ImgS1} alt="" width="794px"/>
|
||||||
|
<div style={{marginBottom:'74px',marginTop:"25px",position:"relative"}}>
|
||||||
|
<img src={ImgS2} alt="" width="520px"/>
|
||||||
|
{/* <div className="highCodes">
|
||||||
|
{
|
||||||
|
codes.map((i,k)=>{
|
||||||
|
return(
|
||||||
|
<li><pre className="word-item" style={{animationDelay: `${k * 0.2 + .2}s`}}><span className="codenum">{k+1}</span>{i.str}</pre></li>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</div> */}
|
||||||
|
</div>
|
||||||
|
<img src={ImgS3} alt="" width="427px" className="highImg2"/>
|
||||||
|
<img src={ImgS4} alt="" width="413px" className="highImg1"/>
|
||||||
|
</div>
|
||||||
|
<p className="highDoBottondesc">让您的代码更加快速、可靠地形成高质量的产品!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={multipleAnalyse ? "multipleAnalyse activeCode":"multipleAnalyse"} id="multipleAnalyse">
|
||||||
|
<span className="title">多层次代码分析</span>
|
||||||
|
<div className="maContent"></div>
|
||||||
|
<p className="desc">提供软件软代码和芯片RTL代码的溯源分析、文件级和组件级许可证识别及风险分析、输入性开源漏洞检测和加固建议,支持分析结果的多层次可视化展示。</p>
|
||||||
|
</div>
|
||||||
|
<div className={"multidimensional"} style={{opacity:multidimensional?"1":"0.3"}}>
|
||||||
|
<div style={{height:"168px"}}></div>
|
||||||
|
<div className={multidimensional ? "activeCode":""} id="multidimensional">
|
||||||
|
<div className={"multidimensinalhalf"}>
|
||||||
|
<div>
|
||||||
|
<p className="halfTitle">多维度用户画像</p>
|
||||||
|
<p className="halfsubTitle"><span>实时采集和分析平台中的各类开源资源数<br/>据,</span>搭建多维度用户画像评估系统;</p>
|
||||||
|
</div>
|
||||||
|
<div style={{width:"820px",marginLeft:"34px"}}>
|
||||||
|
<img src={ImgM4} alt="" width="820px" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="multidimensinalPart">
|
||||||
|
<div style={{width:"614px",marginRight:"40px"}}>
|
||||||
|
<img src={ImgM2} alt="" width="614px" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<p><span>提供</span>开发活动统计、贡献度日历、用户能力建模、角色与专业定位分析<span>等功能。</span></p>
|
||||||
|
<p>让您在个人主页展示开发动态与创新能力!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default SecondEdition
|