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,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const Index = Loadable({
|
||||||
|
loader: () => import('./forge/Jupyter/Index'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
class App extends Component {
|
class App extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
@ -263,7 +267,7 @@ class App extends Component {
|
||||||
<Route exact path="/"
|
<Route exact path="/"
|
||||||
render={
|
render={
|
||||||
(props) => (
|
(props) => (
|
||||||
<Projects {...this.props} {...props} {...this.state}></Projects>
|
<Index {...this.props} {...props} {...this.state}></Index>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -38,6 +38,7 @@ export default ({
|
||||||
: p[0];
|
: p[0];
|
||||||
|
|
||||||
setStep(sub);
|
setStep(sub);
|
||||||
|
setNav("0");
|
||||||
if (sub && sub.status !== "skipped") {
|
if (sub && sub.status !== "skipped") {
|
||||||
getStep(pre.number, sub.number);
|
getStep(pre.number, sub.number);
|
||||||
}
|
}
|
||||||
|
@ -70,7 +71,7 @@ export default ({
|
||||||
return (
|
return (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<Menu className="devopsNav" onClick={(e)=>{setNav(e.key)}} selectedKeys={[nav]} mode="horizontal">
|
<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.Item key={'1'} value="1">命令行</Menu.Item>
|
||||||
</Menu>
|
</Menu>
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,17 @@
|
||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import XmlPanel from "./XmlPanel";
|
import XmlPanel from "./XmlPanel";
|
||||||
import mediator from "./mediator";
|
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() {
|
function Index() {
|
||||||
const [sshConfigData, setSshConfigData] = useState(undefined);
|
const [sshConfigData, setSshConfigData] = useState(undefined);
|
||||||
|
|
||||||
|
@ -15,16 +25,17 @@ function Index() {
|
||||||
}, [sshConfigData]);
|
}, [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 (
|
return (
|
||||||
<XmlPanel
|
<XmlPanel
|
||||||
sshConfigData={{
|
sshConfigData={sshConfigData||{}}
|
||||||
host: "106.75.231.63",
|
|
||||||
port: "2021",
|
|
||||||
ws_url: "wss://pre-webssh.educoder.net/ws",
|
|
||||||
username: "root",
|
|
||||||
secret: "Dron_123123",
|
|
||||||
}}
|
|
||||||
sid={1}
|
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 { SnackbarHOC } from "educoder";
|
||||||
import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
|
import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
|
||||||
import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
|
import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
|
||||||
import Handbook from './Component/Handbook';
|
|
||||||
import "./css/index.scss";
|
import "./css/index.scss";
|
||||||
|
|
||||||
import Loadable from "react-loadable";
|
import Loadable from "react-loadable";
|
||||||
|
@ -35,7 +34,6 @@ class Index extends Component {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="newMain clearfix">
|
<div className="newMain clearfix">
|
||||||
<Handbook />
|
|
||||||
<Switch {...this.props}>
|
<Switch {...this.props}>
|
||||||
<Route
|
<Route
|
||||||
path="/projects/:projectsType/new/:OIdentifier"
|
path="/projects/:projectsType/new/:OIdentifier"
|
||||||
|
@ -67,7 +65,7 @@ class Index extends Component {
|
||||||
<ProjectIndex {...this.props} {...props} />
|
<ProjectIndex {...this.props} {...props} />
|
||||||
)}
|
)}
|
||||||
></Route>
|
></Route>
|
||||||
<Route
|
{/* <Route
|
||||||
exact
|
exact
|
||||||
path="/"
|
path="/"
|
||||||
render={(props) => (
|
render={(props) => (
|
||||||
|
@ -76,7 +74,7 @@ class Index extends Component {
|
||||||
:
|
:
|
||||||
<ProjectIndex {...this.props} {...props} />
|
<ProjectIndex {...this.props} {...props} />
|
||||||
)}
|
)}
|
||||||
></Route>
|
></Route> */}
|
||||||
</Switch>
|
</Switch>
|
||||||
</div>
|
</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>
|
</li>
|
||||||
:""
|
:""
|
||||||
}
|
}
|
||||||
{
|
{/* {
|
||||||
item.menu_name === "resources" &&
|
item.menu_name === "resources" &&
|
||||||
<li className={pathname==="source" ? "active" : ""}>
|
<li className={pathname==="source" ? "active" : ""}>
|
||||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}/source`, state }}>
|
<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> :""}
|
{projectDetail && projectDetail.source_count ? <span className="num">{projectDetail.source_count}</span> :""}
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
}
|
} */}
|
||||||
{
|
{
|
||||||
item.menu_name === "versions" &&
|
item.menu_name === "versions" &&
|
||||||
<li className={pathname==="milestones" ? "active" : ""}>
|
<li className={pathname==="milestones" ? "active" : ""}>
|
||||||
|
|
|
@ -6,7 +6,6 @@ import { withRouter } from "react-router";
|
||||||
import { SnackbarHOC } from "educoder";
|
import { SnackbarHOC } from "educoder";
|
||||||
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
|
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
|
||||||
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
|
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
|
||||||
import Handbook from '../Component/Handbook';
|
|
||||||
const Infos = Loadable({
|
const Infos = Loadable({
|
||||||
loader: () => import("./Infos"),
|
loader: () => import("./Infos"),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
|
@ -15,7 +14,6 @@ export default withRouter(
|
||||||
(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((props)=>{
|
(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((props)=>{
|
||||||
return(
|
return(
|
||||||
<div>
|
<div>
|
||||||
<Handbook />
|
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route
|
<Route
|
||||||
path="/users/:username"
|
path="/users/:username"
|
||||||
|
|
|
@ -96,7 +96,7 @@ body>.-task-title {
|
||||||
}
|
}
|
||||||
|
|
||||||
.newContainer {
|
.newContainer {
|
||||||
background: #f5f5f5;
|
background: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-modal-title {
|
.ant-modal-title {
|
||||||
|
|
|
@ -165,9 +165,9 @@ export function TPMIndexHOC(WrappedComponent) {
|
||||||
this.setState({
|
this.setState({
|
||||||
tpmLoading: false
|
tpmLoading: false
|
||||||
})
|
})
|
||||||
if (this.props.match.path === "/" && response.data.login) {
|
// if (this.props.match.path === "/" && response.data.login) {
|
||||||
this.props.history.push(`/users/${response.data.login}`);
|
// this.props.history.push(`/users/${response.data.login}`);
|
||||||
}
|
// }
|
||||||
if(response.data && response.data.login){
|
if(response.data && response.data.login){
|
||||||
if(response.data.need_edit_info){
|
if(response.data.need_edit_info){
|
||||||
this.setState({
|
this.setState({
|
||||||
|
|