Compare commits
7 Commits
master
...
dev_jupter
Author | SHA1 | Date |
---|---|---|
caishi | 12779419fe | |
caishi | ab78ffe84f | |
caishi | 1617626774 | |
caishi | eb6ba8edb7 | |
caishi | 3802182b5c | |
caishi | 7237e42c94 | |
caishi | 48a6b9ac4f |
|
@ -75,6 +75,10 @@ const EducoderLogin = Loadable({
|
|||
loading: Loading,
|
||||
})
|
||||
|
||||
const Index = Loadable({
|
||||
loader: () => import('./forge/Jupyter/Index'),
|
||||
loading: Loading,
|
||||
})
|
||||
class App extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
@ -263,7 +267,7 @@ class App extends Component {
|
|||
<Route exact path="/"
|
||||
render={
|
||||
(props) => (
|
||||
<Projects {...this.props} {...props} {...this.state}></Projects>
|
||||
<Index {...this.props} {...props} {...this.state}></Index>
|
||||
)
|
||||
}
|
||||
/>
|
||||
|
|
|
@ -38,6 +38,7 @@ export default ({
|
|||
: p[0];
|
||||
|
||||
setStep(sub);
|
||||
setNav("0");
|
||||
if (sub && sub.status !== "skipped") {
|
||||
getStep(pre.number, sub.number);
|
||||
}
|
||||
|
@ -70,7 +71,7 @@ export default ({
|
|||
return (
|
||||
<React.Fragment>
|
||||
<Menu className="devopsNav" onClick={(e)=>{setNav(e.key)}} selectedKeys={[nav]} mode="horizontal">
|
||||
<Menu.Item key={'0'} value="0">文件</Menu.Item>
|
||||
<Menu.Item key={'0'} value="0">开发流水线</Menu.Item>
|
||||
<Menu.Item key={'1'} value="1">命令行</Menu.Item>
|
||||
</Menu>
|
||||
{
|
||||
|
|
|
@ -1,7 +1,17 @@
|
|||
import React, { useState, useEffect } from "react";
|
||||
import XmlPanel from "./XmlPanel";
|
||||
import mediator from "./mediator";
|
||||
import axios from "axios";
|
||||
|
||||
// 本地测试时给予默认的接口地址
|
||||
// const defaulturl = `http://47.111.130.18:48088`;
|
||||
const defaultValue = {
|
||||
host: "106.75.231.63",
|
||||
port: "2021",
|
||||
ws_url: "wss://pre-webssh.educoder.net/ws",
|
||||
username: "root",
|
||||
secret: "Dron_123123",
|
||||
};
|
||||
function Index() {
|
||||
const [sshConfigData, setSshConfigData] = useState(undefined);
|
||||
|
||||
|
@ -15,16 +25,17 @@ function Index() {
|
|||
}, [sshConfigData]);
|
||||
|
||||
// 获取服务器连接信息
|
||||
function init() {}
|
||||
function init() {
|
||||
const url = `/ci/pipelines/ssh_server.json`;
|
||||
axios.get(url).then(result=>{
|
||||
if(result && result.data){
|
||||
setSshConfigData({...result.data})
|
||||
}
|
||||
}).catch(error=>{})
|
||||
}
|
||||
return (
|
||||
<XmlPanel
|
||||
sshConfigData={{
|
||||
host: "106.75.231.63",
|
||||
port: "2021",
|
||||
ws_url: "wss://pre-webssh.educoder.net/ws",
|
||||
username: "root",
|
||||
secret: "Dron_123123",
|
||||
}}
|
||||
sshConfigData={sshConfigData||{}}
|
||||
sid={1}
|
||||
/>
|
||||
);
|
||||
|
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 64 KiB |
|
@ -6,7 +6,6 @@ import { withRouter } from "react-router";
|
|||
import { SnackbarHOC } from "educoder";
|
||||
import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
|
||||
import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
|
||||
import Handbook from './Component/Handbook';
|
||||
import "./css/index.scss";
|
||||
|
||||
import Loadable from "react-loadable";
|
||||
|
@ -35,7 +34,6 @@ class Index extends Component {
|
|||
render() {
|
||||
return (
|
||||
<div className="newMain clearfix">
|
||||
<Handbook />
|
||||
<Switch {...this.props}>
|
||||
<Route
|
||||
path="/projects/:projectsType/new/:OIdentifier"
|
||||
|
@ -67,7 +65,7 @@ class Index extends Component {
|
|||
<ProjectIndex {...this.props} {...props} />
|
||||
)}
|
||||
></Route>
|
||||
<Route
|
||||
{/* <Route
|
||||
exact
|
||||
path="/"
|
||||
render={(props) => (
|
||||
|
@ -76,7 +74,7 @@ class Index extends Component {
|
|||
:
|
||||
<ProjectIndex {...this.props} {...props} />
|
||||
)}
|
||||
></Route>
|
||||
></Route> */}
|
||||
</Switch>
|
||||
</div>
|
||||
);
|
||||
|
|
After Width: | Height: | Size: 145 KiB |
After Width: | Height: | Size: 202 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 975 B |
After Width: | Height: | Size: 281 B |
|
@ -0,0 +1,116 @@
|
|||
import React from "react";
|
||||
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
|
||||
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
|
||||
import { SnackbarHOC } from "educoder";
|
||||
import "./Index.scss";
|
||||
import two from "./Images/2.png";
|
||||
import three from "./Images/3-1.png";
|
||||
import threesub from "./Images/3-2.png";
|
||||
import arrow from "./Images/a.png";
|
||||
import four1 from "./Images/4-1.png";
|
||||
import four2 from "./Images/4-2.png";
|
||||
import four3 from "./Images/4-3.png";
|
||||
import four4 from "./Images/4-4.png";
|
||||
import four5 from "./Images/4-5.png";
|
||||
import four6 from "./Images/4-6.png";
|
||||
import four7 from "./Images/4-7.png";
|
||||
import four8 from "./Images/4-8.png";
|
||||
|
||||
function Index(props) {
|
||||
return (
|
||||
<div>
|
||||
<div className="firstPanel">
|
||||
<div className="firstPaneltxt">
|
||||
<div>
|
||||
<p>集协同开发、资源共享、运行评估于一体的在线科研服务平台</p>
|
||||
<p>
|
||||
Research Service Platform Integrating Collaborative Development, Resource Sharing and Runtime Evaluation Tools
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="doubleBox">
|
||||
<img src={two} alt="" />
|
||||
<div className="m-left infobox">
|
||||
<div className="titleLeft">
|
||||
<p>JupyterLab,功能强大的新一代可视化科研环境</p>
|
||||
</div>
|
||||
<div className="desc">
|
||||
JupyterLab是Jupyter Notebook的全面升级,是一个集Jupyter、Notebook、文本编辑器、终端以及各种个性化组件于一体的全能科研IDE。作为一种基于web的集成开发环境,你可以使用它完成notebook编写、终端操作、markdown文本编辑、交互模式启用、csv文件及图片查看等科研活动。
|
||||
</div>
|
||||
<a href="http://39.105.62.120:60088/lab?" target="_blank" className="btnBox" style={{width:'160px'}}>
|
||||
<img src={arrow} alt="" style={{ marginRight: "5px" }} />
|
||||
<span>试用</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="doubleBox" style={{padding:'160px 0px 120px 0px'}}>
|
||||
<div className="infobox">
|
||||
<div className="titleLeft">
|
||||
<p>基于网络的软件开发群体化方法</p>
|
||||
<span>持续构建协同、共享、可信的软件创新生态</span>
|
||||
</div>
|
||||
<div className="desc">
|
||||
将大众化协同开发、开放式资源共享、持续性可信评估为核心的互联网大规模协同机理,与软件开发工程化方法相结合,形成面向群体化方法的软件智能开发服务环境
|
||||
</div>
|
||||
<img src={threesub} alt="" style={{marginTop:"100px"}}/>
|
||||
</div>
|
||||
<div style={{marginLeft:"50px",marginBottom:"100px"}}>
|
||||
<img src={three} alt="" />
|
||||
<a href="http://47.111.130.18:48088/projects" target="_blank" className="btnBox" style={{marginLeft:"43px"}}>
|
||||
<img src={arrow} alt="" />
|
||||
<span>查看更多</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="thirdPanel">
|
||||
<p className="mainTitle">协作开发平台</p>
|
||||
<p className="subTitle">为您提供了软件开发的一切</p>
|
||||
<ul className="thirdbox">
|
||||
<li>
|
||||
<img src={four1} alt="" />
|
||||
<p className="bt">项目管理</p>
|
||||
<p className="bdesc">敏捷模式,缩短交付周期,提升产品质量和协作效率</p>
|
||||
</li>
|
||||
<li>
|
||||
<img src={four2} alt="" />
|
||||
<p className="bt">配置管理</p>
|
||||
<p className="bdesc">代码在线托管服务,跨地域协同开发,便于代码合入审查</p>
|
||||
</li>
|
||||
<li>
|
||||
<img src={four3} alt="" />
|
||||
<p className="bt">流水线</p>
|
||||
<p className="bdesc">业务流程按需制定,全周期业务集成,实时监控流水线状态</p>
|
||||
</li>
|
||||
<li>
|
||||
<img src={four4} alt="" />
|
||||
<p className="bt">镜像制作</p>
|
||||
<p className="bdesc">为IT开发者营造活跃和开放的社区环境,提供即时通讯</p>
|
||||
</li>
|
||||
<li>
|
||||
<img src={four5} alt="" />
|
||||
<p className="bt">编译构建</p>
|
||||
<p className="bdesc">混合语言并行构建,支持Maven/web/移动终端/loT应用</p>
|
||||
</li>
|
||||
<li>
|
||||
<img src={four6} alt="" />
|
||||
<p className="bt">实时交互</p>
|
||||
<p className="bdesc">项目进程管理应用于研发管理、任务分配、目标跟踪等让项目</p>
|
||||
</li>
|
||||
<li>
|
||||
<img src={four7} alt="" />
|
||||
<p className="bt">JupyterLab</p>
|
||||
<p className="bdesc">基于Sonar的代码静态分析工具,及时发现代码中的潜在隐患</p>
|
||||
</li>
|
||||
<li>
|
||||
<img src={four8} alt="" />
|
||||
<p className="bt">部署</p>
|
||||
<p className="bdesc">一键式、快捷、并行部署基础组件和应用到开发、测试、生产环境</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
export default CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index)));
|
|
@ -0,0 +1,135 @@
|
|||
.firstPanel{
|
||||
position: relative;
|
||||
background:url('./Images/1.png') center no-repeat;
|
||||
height: 556px;
|
||||
width: 100%;
|
||||
.firstPaneltxt{
|
||||
width: 1200px;
|
||||
height: 100%;
|
||||
align-items: center;
|
||||
text-align: left;
|
||||
display: flex;
|
||||
margin:0px auto;
|
||||
&>div{
|
||||
margin-bottom: 100px;
|
||||
p{
|
||||
max-width: 600px;
|
||||
color:#fff;
|
||||
font-size: 22px;
|
||||
line-height: 28px;
|
||||
&:first-child{
|
||||
font-size: 30px;
|
||||
line-height: 50px;
|
||||
margin-bottom: 30px!important;
|
||||
max-width: 500px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.doubleBox{
|
||||
display: flex;
|
||||
padding-top:130px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
.infobox{
|
||||
max-width: 550px;
|
||||
}
|
||||
.m-left{
|
||||
margin-left: 100px;
|
||||
}
|
||||
.desc{
|
||||
font-size: 18px;
|
||||
color: #888;
|
||||
line-height: 25px;
|
||||
margin-top: 30px;
|
||||
word-break: break-all;
|
||||
}
|
||||
.btnBox{
|
||||
display: block;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 220px;
|
||||
height: 80px;
|
||||
color: #1890FF;
|
||||
font-size: 18px;
|
||||
background: #FFFFFF;
|
||||
box-shadow: -10px 0px 26px 0px rgba(45, 21, 130, 0.1);
|
||||
border-radius: 40px;
|
||||
margin-top: 60px;
|
||||
}
|
||||
}
|
||||
.titleLeft{
|
||||
position: relative;
|
||||
padding-left: 30px;
|
||||
p{
|
||||
font-size: 24px;
|
||||
color:#199aff;
|
||||
line-height: 38px;
|
||||
}
|
||||
span{
|
||||
color: #3a3a3a;
|
||||
font-size: 18px;
|
||||
line-height: 20px;
|
||||
margin-top: 5px;
|
||||
display: block;
|
||||
}
|
||||
&::before{
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
height: 100%;
|
||||
width: 19px;
|
||||
top:0px;
|
||||
content: "";
|
||||
background-color: #199aff;
|
||||
}
|
||||
}
|
||||
|
||||
.thirdPanel{
|
||||
width: 1200px;
|
||||
margin:100px auto 300px;
|
||||
.mainTitle{
|
||||
height: 48px;
|
||||
font-size: 36px;
|
||||
color: #333333;
|
||||
line-height: 48px;
|
||||
text-align: center;
|
||||
}
|
||||
.subTitle{
|
||||
height: 20px;
|
||||
font-size: 18px;
|
||||
color: #666666;
|
||||
line-height: 20px;
|
||||
margin-top: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
.thirdbox{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 50px;
|
||||
li{
|
||||
width: 22%;
|
||||
margin:42px 1.5% ;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0px 0px 22px 0px rgba(45, 21, 130, 0.06);
|
||||
border-radius: 20px;
|
||||
padding:50px 30px;
|
||||
&:hover{
|
||||
box-shadow: 0px 0px 40px 0px rgba(24, 144, 255, 0.3);
|
||||
}
|
||||
.bt{
|
||||
font-size: 24px;
|
||||
color: #333333;
|
||||
line-height: 26px;
|
||||
margin-top:36px;
|
||||
}
|
||||
.bdesc{
|
||||
font-size: 16px;
|
||||
color: #666666;
|
||||
line-height: 20px;
|
||||
margin-top:20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -75,7 +75,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
|
|||
</li>
|
||||
:""
|
||||
}
|
||||
{
|
||||
{/* {
|
||||
item.menu_name === "resources" &&
|
||||
<li className={pathname==="source" ? "active" : ""}>
|
||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}/source`, state }}>
|
||||
|
@ -84,7 +84,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
|
|||
{projectDetail && projectDetail.source_count ? <span className="num">{projectDetail.source_count}</span> :""}
|
||||
</Link>
|
||||
</li>
|
||||
}
|
||||
} */}
|
||||
{
|
||||
item.menu_name === "versions" &&
|
||||
<li className={pathname==="milestones" ? "active" : ""}>
|
||||
|
|
|
@ -6,7 +6,6 @@ import { withRouter } from "react-router";
|
|||
import { SnackbarHOC } from "educoder";
|
||||
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
|
||||
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
|
||||
import Handbook from '../Component/Handbook';
|
||||
const Infos = Loadable({
|
||||
loader: () => import("./Infos"),
|
||||
loading: Loading,
|
||||
|
@ -15,7 +14,6 @@ export default withRouter(
|
|||
(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((props)=>{
|
||||
return(
|
||||
<div>
|
||||
<Handbook />
|
||||
<Switch>
|
||||
<Route
|
||||
path="/users/:username"
|
||||
|
|
|
@ -96,7 +96,7 @@ body>.-task-title {
|
|||
}
|
||||
|
||||
.newContainer {
|
||||
background: #f5f5f5;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.ant-modal-title {
|
||||
|
|
|
@ -165,9 +165,9 @@ export function TPMIndexHOC(WrappedComponent) {
|
|||
this.setState({
|
||||
tpmLoading: false
|
||||
})
|
||||
if (this.props.match.path === "/" && response.data.login) {
|
||||
this.props.history.push(`/users/${response.data.login}`);
|
||||
}
|
||||
// if (this.props.match.path === "/" && response.data.login) {
|
||||
// this.props.history.push(`/users/${response.data.login}`);
|
||||
// }
|
||||
if(response.data && response.data.login){
|
||||
if(response.data.need_edit_info){
|
||||
this.setState({
|
||||
|
|