diff --git a/package-lock.json b/package-lock.json index f5aabc0e..2bb26e24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "educoder", + "name": "forge", "version": "0.1.0", "lockfileVersion": 1, "requires": true, @@ -3888,11 +3888,6 @@ "randomfill": "^1.0.3" } }, - "crypto-js": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/crypto-js/download/crypto-js-4.0.0.tgz", - "integrity": "sha1-KQSrJnep0EKFai6i74DekuSjbcw=" - }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -20480,6 +20475,16 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, + "xterm": { + "version": "4.8.1", + "resolved": "https://registry.npm.taobao.org/xterm/download/xterm-4.8.1.tgz", + "integrity": "sha1-FVoXKaQ+Gom0BlJOIsVjQznjnKE=" + }, + "xterm-addon-fit": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/xterm-addon-fit/download/xterm-addon-fit-0.4.0.tgz", + "integrity": "sha1-BuDF0KaqrPsAnvVl76HIHpPZAZM=" + }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", diff --git a/package.json b/package.json index edc6e18e..5ad75014 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,9 @@ "webpack-dev-server": "^3.10.3", "webpack-manifest-plugin": "^2.2.0", "whatwg-fetch": "2.0.3", - "wrap-md-editor": "^0.2.20" + "wrap-md-editor": "^0.2.20", + "xterm": "4.8.1", + "xterm-addon-fit": "0.4.0" }, "scripts": { "start": "node --max_old_space_size=15360 scripts/start.js", diff --git a/src/AppConfig.js b/src/AppConfig.js index 5f530ce9..bd24bb7d 100644 --- a/src/AppConfig.js +++ b/src/AppConfig.js @@ -32,7 +32,7 @@ export function initAxiosInterceptors(props) { // 判断网络是否连接 initOnlineOfflineListener(); - var proxy = "https://forgeplus.trustie.net"; + var proxy = "https://testforgeplus.trustie.net"; //响应前的设置 axios.interceptors.request.use( config => { diff --git a/src/common/UrlTool.js b/src/common/UrlTool.js index 329bc81a..07e141eb 100644 --- a/src/common/UrlTool.js +++ b/src/common/UrlTool.js @@ -15,7 +15,7 @@ export function getImageUrl(path) { if (isDev) { return `${local}/${path}` } - return `/${path}`; + return `${path}`; } export function getImage(path) { diff --git a/src/forge/Activity/ActivityItem.js b/src/forge/Activity/ActivityItem.js index 1baa2ce9..b726a4af 100644 --- a/src/forge/Activity/ActivityItem.js +++ b/src/forge/Activity/ActivityItem.js @@ -33,7 +33,7 @@ class ActivityItem extends Component { }

- + {item.user_name} {item.created_at && 创建于{item.created_at}} diff --git a/src/forge/Component/AddMember.jsx b/src/forge/Component/AddMember.jsx index a4188229..0548e52d 100644 --- a/src/forge/Component/AddMember.jsx +++ b/src/forge/Component/AddMember.jsx @@ -42,7 +42,7 @@ function AddMember({getID,login}){ className="user_img radius" width="28" height="28" - src={getImageUrl(`images/${item && item.image_url}`)} + src={getImageUrl(`/${item && item.image_url}`)} alt="" /> diff --git a/src/forge/Component/Cards.jsx b/src/forge/Component/Cards.jsx index 1c9706c3..498b375c 100644 --- a/src/forge/Component/Cards.jsx +++ b/src/forge/Component/Cards.jsx @@ -6,7 +6,7 @@ import './Component.scss'; function Cards({img , title, desc , rightBtn , src}){ return(

- {img &&
} + {img &&
}

{title} diff --git a/src/forge/Component/Contributors.jsx b/src/forge/Component/Contributors.jsx index 7848f9fc..d64e0d42 100644 --- a/src/forge/Component/Contributors.jsx +++ b/src/forge/Component/Contributors.jsx @@ -15,7 +15,7 @@ function Contributors({contributors,owner,projectsId}){ contributors && contributors.total_count > 0 ? contributors.list.map((item,key)=>{ return( - + ) }) :"" diff --git a/src/forge/Component/MemberCards.jsx b/src/forge/Component/MemberCards.jsx index c0bd12c1..393ddbb1 100644 --- a/src/forge/Component/MemberCards.jsx +++ b/src/forge/Component/MemberCards.jsx @@ -45,7 +45,7 @@ const Div = styled.div`{ export default (({ user , img, name, time, focusStatus, is_current_user, login , successFunc }) => { return (

- +
{name} diff --git a/src/forge/Component/SearchUser.jsx b/src/forge/Component/SearchUser.jsx index 43b45e85..0203d24f 100644 --- a/src/forge/Component/SearchUser.jsx +++ b/src/forge/Component/SearchUser.jsx @@ -44,7 +44,7 @@ export default ({ getUser })=>{ className="user_img radius" width="28" height="28" - src={getImageUrl(`images/${item && item.image_url}`)} + src={getImageUrl(`/${item && item.image_url}`)} alt="" /> diff --git a/src/forge/DevOps/OpsDetailRightpanel.jsx b/src/forge/DevOps/OpsDetailRightpanel.jsx index 6998964e..93bf370c 100644 --- a/src/forge/DevOps/OpsDetailRightpanel.jsx +++ b/src/forge/DevOps/OpsDetailRightpanel.jsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react"; import { Spin , Menu } from "antd"; import { FlexAJ, AlignCenter } from "../Component/layout"; import axios from "axios"; +import CodeSSH from './ssh/Index'; export default ({ data, @@ -37,6 +38,7 @@ export default ({ : p[0]; setStep(sub); + setNav("0"); if (sub && sub.status !== "skipped") { getStep(pre.number, sub.number); } @@ -67,51 +69,55 @@ export default ({ } } return ( - + {/* {setNav(e.key)}} selectedKeys={[nav]} mode="horizontal"> - 文件 + 开发流水线 命令行 */} { nav === "0" && -
- {data && data.status !== "error" ? ( -
- - {step && step.name} - - {step && step.duration_time} - - - + +
+ {data && data.status !== "error" ? (
- {coders && coders.length > 0 ? ( - coders.map((item, key) => { - return ( -
- {key + 1} -

{item.out}

-
- ); - }) - ) : empty ? ( -
- 1 -

- {stage && stage.name} – {step && step.name}: Skipped -

-
- ) : ( - "" - )} + + {step && step.name} + + {step && step.duration_time} + + + +
+ {coders && coders.length > 0 ? ( + coders.map((item, key) => { + return ( +
+ {key + 1} +

{item.out}

+
+ ); + }) + ) : empty ? ( +
+ 1 +

+ {stage && stage.name} – {step && step.name}: Skipped +

+
+ ) : ( + "" + )} +
-
- ) : ( -
error:{data && data.error}
- )} -
+ ) : ( +
error:{data && data.error}
+ )} +
+
} - - + { + nav === "1" && + } + ); }; diff --git a/src/forge/DevOps/ssh/Index.jsx b/src/forge/DevOps/ssh/Index.jsx new file mode 100644 index 00000000..9a896a83 --- /dev/null +++ b/src/forge/DevOps/ssh/Index.jsx @@ -0,0 +1,42 @@ +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); + + useEffect(() => { + if (!sshConfigData) { + init(); + } + setTimeout(() => { + mediator.publish("create-socket", 1); + }, 300); + }, [sshConfigData]); + + // 获取服务器连接信息 + function init() { + const url = `/api/ci/pipelines/ssh_server.json`; + axios.get(url).then(result=>{ + if(result && result.data){ + setSshConfigData({...result.data}) + } + }).catch(error=>{}) + } + return ( + + ); +} +export default Index; diff --git a/src/forge/DevOps/ssh/XmlPanel.jsx b/src/forge/DevOps/ssh/XmlPanel.jsx new file mode 100644 index 00000000..ae642caa --- /dev/null +++ b/src/forge/DevOps/ssh/XmlPanel.jsx @@ -0,0 +1,219 @@ +import React, { useRef, useEffect, useState } from 'react'; +import { Base64 } from 'js-base64'; + +import { Terminal } from 'xterm'; +import 'xterm/css/xterm.css'; +import mediator from './mediator'; +import ResizeObserver from 'resize-observer-polyfill'; + +function getColsAndRows(width, height, term) { + let w = term._core._renderService.dimensions.actualCellWidth || 9.5; + let h = term._core._renderService.dimensions.actualCellHeight || 18; + const rows = Math.floor(height / h); + const cols = Math.floor(width / w); + return [cols, rows]; +} + +function onLayout(term, el) { + const ro = new ResizeObserver(entries => { + console.log(entries); + for (let entry of entries) { + if (entry.target.offsetHeight > 0 || entry.target.offsetWidth > 0) { + const [cols, rows] = getColsAndRows( + entry.target.offsetWidth, + entry.target.offsetHeight, + term, + ); + console.log('cols, rows', cols, rows); + term.resize(cols, rows); + mediator.publish('ssh-xterm-resize', { + columns: cols, + rows: rows, + width: entry.target.offsetWidth, + height: entry.target.offsetHeight, + }); + } + } + }); + ro.observe(el); + return ro; +} + +const TimeTicket = 30000; + +//建立 websockt 来交互 +//根据容器大小计算行数和列数并做到自适应 +//socket 与 term 需要分开初始化 因为socket 可能重置连接 +//mediator 监听消息,如果和id匹配,则建立连接,重置,或关闭连接 + +export default ({ sshConfigData, sid }) => { + const [term, setTerm] = useState(null); + + const { ws_url, password, port, secret } = sshConfigData; + const el = useRef(); + const socket = useRef(); + const isFirstConnected = useRef(false); + + //term init + useEffect(() => { + if (el.current && ws_url) { + const term = new Terminal({ fontSize: 16, rendererType: 'dom' }); + term.open(el.current); + + term.onData(data => { + if (socket.current) { + if (socket.current.readyState === 1) { + socket.current.send(JSON.stringify({ tp: 'client', data: data })); + mediator.publish('on-operating-ssh'); //有操作则自动延时 + } else { + //断开连接后重连 + // socket.current = null + // mediator.publish('create-socket', sid) + } + } + }); + term.write('Connecting...'); + setTerm(term); + const ro = onLayout(term, el.current); + return () => { + term.dispose(); + ro.unobserve(el.current); + }; + } + }, [ws_url, el.current]); + + useEffect(() => { + if (term && ws_url) { + function createSocket() { + const socketInstance = new WebSocket(ws_url); + socket.current = socketInstance; + + socketInstance.onopen = () => { + let container = term.element.parentElement; + if (container) { + let width = container.offsetWidth; + let height = container.offsetHeight; + console.log('init', { + tp: 'init', + data: { + ...sshConfigData, + secret: secret, + width, + height, + rows: term.rows, + columns: term.cols, + }, + }); + socketInstance.send( + JSON.stringify({ + tp: 'init', + data: { + ...sshConfigData, + secret: secret, + width, + height, + rows: term.rows, + columns: term.cols, + }, + }), + ); + } + term.focus(); + }; + socketInstance.onerror = error => { + console.log( + '------in socket error----', + error, + socketInstance, + ws_url, + ); + //连接报错后,重新请求资源 + // mediator.publish('on-recreate-socket') + }; + socketInstance.onmessage = event => { + if (!isFirstConnected.current) { + term.write('\r'); + // term.focus() + setTimeout(() => { + // term.clear(); + }, 1000); + } + isFirstConnected.current = true; + console.log('event:', event); + + const data = Base64.decode(event.data.toString()); + let w = term._core._renderService.dimensions.actualCellWidth || 9.5; + + console.log('data:', data, w, term); + term.write(data); + }; + + socketInstance.onclose = evt => { + if (tid) { + clearInterval(tid); + } + term.write('\r\nconnection closed'); + }; + } + + const tid = setInterval(() => { + if (socket.current) { + socket.current.send(JSON.stringify({ tp: 'h' })); + } + }, TimeTicket); + + const unSubCreate = mediator.subscribe('create-socket', id => { + if (sid === id) { + if (socket.current && socket.current.readyState === 1) { + term.focus(); + } else { + createSocket(); + } + term.focus(); + } + }); + + const unSubClose = mediator.subscribe('close-socket', id => { + if (sid === id) { + if (socket.current) { + socket.current.close(); + isFirstConnected.current = false; + term.clear(); + } + socket.current = null; + } + }); + + const unSubResize = mediator.subscribe('ssh-xterm-resize', option => { + if (socket.current && socket.current.readyState === 1) { + socket.current.send( + JSON.stringify({ tp: 'resize', data: { ...option } }), + ); + } + }); + + const unSubAddTime = mediator.subscribe('ssh-add-connect-time', () => { + if (socket.current && socket.current.readyState === 1) { + socket.current.send(JSON.stringify({ tp: 'overtime' })); + } + }); + + return () => { + unSubClose(); + unSubCreate(); + unSubResize(); + unSubAddTime(); + if (socket.current) { + socket.current.close(); + isFirstConnected.current = false; + } + }; + } + }, [term, ws_url, port]); + + return ( +
+ {!ws_url ?

正在连接命令行服务...

: null} +
+ ); +}; \ No newline at end of file diff --git a/src/forge/DevOps/ssh/mediator.jsx b/src/forge/DevOps/ssh/mediator.jsx new file mode 100644 index 00000000..70a4e30f --- /dev/null +++ b/src/forge/DevOps/ssh/mediator.jsx @@ -0,0 +1,46 @@ +function Mediator(obj) { + const channels = {}; + + const mediator = { + subscribe: function(channel, cb) { + if (!channels[channel]) { + channels[channel] = []; + } + channels[channel].push(cb); + return this.unsubscribe.bind(null, channel, cb); + }, + + unsubscribe: function(channel, cb) { + let rs = channels[channel]; + let index = -1; + if (rs) { + for (let i = 0; i < rs.length; i++) { + if (rs[i].name === cb.name) { + index = i; + break; + } + } + if (index >= 0) { + channels[channel].splice(index, 1); + return true; + } + } + return false; + }, + + publish: function(channel) { + if (!channels[channel]) { + return false; + } + const args = Array.prototype.slice.call(arguments, 1); + channels[channel].forEach(subscription => { + subscription.apply(null, args); + }); + return this; + }, + }; + + return obj ? Object.assign(obj, mediator) : mediator; +} +const mediator = new Mediator(); +export default mediator; \ No newline at end of file diff --git a/src/forge/Head/Header.js b/src/forge/Head/Header.js index 05f763ed..7260d114 100644 --- a/src/forge/Head/Header.js +++ b/src/forge/Head/Header.js @@ -603,7 +603,7 @@ class NewHeader extends Component { { settings && settings.nav_logo_url ? - 可控开源社区 + 可控开源社区 : 可控开源社区 } @@ -703,8 +703,7 @@ class NewHeader extends Component { :
- +
    diff --git a/src/forge/Main/CoderDepot.jsx b/src/forge/Main/CoderDepot.jsx index 7d10e3e5..15032641 100644 --- a/src/forge/Main/CoderDepot.jsx +++ b/src/forge/Main/CoderDepot.jsx @@ -315,7 +315,7 @@ function CoderDepot(props){ { lastCommit &&
    - +

    {lastCommit && lastCommit.message}

    { hideBtn && changeHide(hide)}> } diff --git a/src/forge/Main/CoderDepotReadme.jsx b/src/forge/Main/CoderDepotReadme.jsx index c4674740..da1435d5 100644 --- a/src/forge/Main/CoderDepotReadme.jsx +++ b/src/forge/Main/CoderDepotReadme.jsx @@ -1,13 +1,49 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import RenderHtml from '../../components/render-html'; +import { Dropdown , Menu , Spin } from 'antd'; +import { Link } from 'react-router-dom'; +const $ = window.$; function CoderDepotReadme({ operate , history , readme , ChangeFile }){ + const [ menuList ,setMenuList ] = useState(undefined); + + useEffect(()=>{ + if(readme && readme.content){ + let path = history.location.pathname; + const items = $.map($("#readme").find("h1,h2,h3,h4,h5,h6"), function (el, _) { + const anchor = el.id; + const level = el.tagName.replace("H", ""); + const href = `#${anchor}`; + return { href:`${path}${href}`,text:el.textContent , level:level } + }); + setMenuList(items); + } + },[readme]) + + function menu(){ + if(menuList && menuList.length > 0){ + let hash = history.location.hash; + return( + + { + menuList.map((item,key)=>{ + return( + -1 ?"active":""}>{item.text} + ) + }) + } + + ) + }else{ + return + } + } return(
    - - - + + + README.md { operate ? diff --git a/src/forge/Main/CoderRootCommit.js b/src/forge/Main/CoderRootCommit.js index bb4f5ba5..5c509ecd 100644 --- a/src/forge/Main/CoderRootCommit.js +++ b/src/forge/Main/CoderRootCommit.js @@ -140,11 +140,11 @@ class CoderRootCommit extends Component{ { item.id ? - {item.image_url?:""} + {item.image_url?:""} : - {item.image_url?:""} + {item.image_url?:""} } diff --git a/src/forge/Main/CoderRootFileDetail.js b/src/forge/Main/CoderRootFileDetail.js index 2ee43bee..1455086d 100644 --- a/src/forge/Main/CoderRootFileDetail.js +++ b/src/forge/Main/CoderRootFileDetail.js @@ -31,6 +31,18 @@ class CoderRootFileDetail extends Component { this.languages_total(); }; + componentDidUpdate=(prevProps)=>{ + const { content } = this.props && this.props.detail; + const prevcontent = prevProps.detail && prevProps.detail.content; + if (content && prevcontent) { + if (prevcontent !== content){ + this.setState({ + description: content + }); + } + } + } + languages_total = () => { const { detail } = this.props; const file_name = detail.path.split("/").pop().split(".").pop(); @@ -273,7 +285,7 @@ class CoderRootFileDetail extends Component { {...this.state} language={language ? language : "javascript"} filepath={`/${detail.path}`} - content={detail.content} + content={description} readOnly={readOnly} editorType="update" currentBranch={currentBranch} diff --git a/src/forge/Main/Diff.jsx b/src/forge/Main/Diff.jsx index b3645351..d8db5f00 100644 --- a/src/forge/Main/Diff.jsx +++ b/src/forge/Main/Diff.jsx @@ -65,7 +65,7 @@ export default ({ match , history }) => {
      {committer && committer.time_from_now &&
    • {committer.time_from_now}
    • } diff --git a/src/forge/Main/Index.js b/src/forge/Main/Index.js index f968f14b..64a55ed2 100644 --- a/src/forge/Main/Index.js +++ b/src/forge/Main/Index.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import { Link } from 'react-router-dom'; import { Menu, Input , Spin, Pagination , Popover , Select } from 'antd'; -import { getUrl } from 'educoder'; +import { getImageUrl } from 'educoder'; import '../css/index.scss' import './list.css'; import './Index.scss'; @@ -271,7 +271,7 @@ class Index extends Component { return(
      this.getoDetail(item.author && item.author.login,item.identifier)}>
      - +

      {item.name}

      {item.author && item.author.name}

      diff --git a/src/forge/Main/Index.scss b/src/forge/Main/Index.scss index 331eb03d..1e9a8967 100644 --- a/src/forge/Main/Index.scss +++ b/src/forge/Main/Index.scss @@ -286,4 +286,23 @@ .downMenu{ box-shadow: 0px 0px 9px rgba(134, 134, 134,0.4); background-color: #fff; +} + +.menuslist{ + max-height: 200px; + overflow-y: auto; + padding:10px 15px; + border-radius: 4px; + .ant-dropdown-menu-item{ + border-radius: 8px; + a{ + width: 350px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + .ant-dropdown-menu-item.active{ + background-color: #e6f7ff; + } } \ No newline at end of file diff --git a/src/forge/Main/IndexItem.js b/src/forge/Main/IndexItem.js index a7ea04aa..b3ac2a50 100644 --- a/src/forge/Main/IndexItem.js +++ b/src/forge/Main/IndexItem.js @@ -28,7 +28,7 @@ class IndexItem extends Component { : - + }
      diff --git a/src/forge/Main/list.css b/src/forge/Main/list.css index a8143c55..07991f6a 100644 --- a/src/forge/Main/list.css +++ b/src/forge/Main/list.css @@ -437,9 +437,6 @@ font-size: 16px; border-bottom: 1px solid #d9d9d9; } -.branchUl{ - padding:0px 30px; -} .branchUl li{ display: flex; flex-wrap: wrap; diff --git a/src/forge/Main/sub/Contribute.jsx b/src/forge/Main/sub/Contribute.jsx index c6bd3998..a41cb3ed 100644 --- a/src/forge/Main/sub/Contribute.jsx +++ b/src/forge/Main/sub/Contribute.jsx @@ -50,7 +50,7 @@ function Contribute(props){ list.map((item,key)=>{ return( - +
      {item.name}

      提交{item.contributions}次

      diff --git a/src/forge/Merge/Commits.jsx b/src/forge/Merge/Commits.jsx index a7d12073..37c254cc 100644 --- a/src/forge/Merge/Commits.jsx +++ b/src/forge/Merge/Commits.jsx @@ -22,7 +22,7 @@ function Commits({ commits , projectsId , owner }){ 浏览代码 - :提交于{item.time_from_now} + :提交于{item.time_from_now}
      diff --git a/src/forge/Merge/MergeItem.js b/src/forge/Merge/MergeItem.js index dd5f4f45..3b3504da 100644 --- a/src/forge/Merge/MergeItem.js +++ b/src/forge/Merge/MergeItem.js @@ -1,6 +1,7 @@ import React, { Component } from "react"; import { Link } from "react-router-dom"; -import { Popconfirm, Tag } from "antd"; +import { Tag } from "antd"; +import { AlignCenter } from '../Component/layout'; import { getImageUrl } from "educoder"; import "./merge.css"; @@ -74,13 +75,13 @@ class MergeItem extends Component { > - + - +

        ( - + diff --git a/src/forge/Newfile/m_editor.js b/src/forge/Newfile/m_editor.js index 862e5f8d..4e2e6851 100644 --- a/src/forge/Newfile/m_editor.js +++ b/src/forge/Newfile/m_editor.js @@ -12,6 +12,13 @@ class m_editor extends Component { editorValue: this.props.content, }; } + componentDidUpdate=(prevProps)=>{ + if(prevProps && this.props && this.props.content !== prevProps.content){ + this.setState({ + editorValue:this.props.content + }) + } + } changeEditor = (editorValue) => { this.setState({ editorValue, diff --git a/src/forge/Order/Detail.js b/src/forge/Order/Detail.js index 87405919..277f5d4a 100644 --- a/src/forge/Order/Detail.js +++ b/src/forge/Order/Detail.js @@ -212,7 +212,7 @@ class Detail extends Component { > - setNav("1")}>协作者管理 - setNav("2")}>团队管理 + {setNav("1");setNewId(undefined)}}>协作者管理 + {setNav("2");setNewId(undefined)}}>团队管理 : 协作者管理 diff --git a/src/forge/Settings/CollaboratorMember.jsx b/src/forge/Settings/CollaboratorMember.jsx index 9c617f11..86459d87 100644 --- a/src/forge/Settings/CollaboratorMember.jsx +++ b/src/forge/Settings/CollaboratorMember.jsx @@ -186,7 +186,7 @@ function CollaboratorMember({projectsId,owner,project_id,author,showNotification className="show-user-link" >
        - 资源库(18) + 资源库{total ? ({total}):""} { current_user && current_user.login && (props.projectDetail && props.projectDetail.permission) ? {setId(undefined);setVisible(true);}}>上传资源:"" } diff --git a/src/forge/Team/Group/GroupDetailMember.jsx b/src/forge/Team/Group/GroupDetailMember.jsx index 6a871d75..1e03bd09 100644 --- a/src/forge/Team/Group/GroupDetailMember.jsx +++ b/src/forge/Team/Group/GroupDetailMember.jsx @@ -10,6 +10,7 @@ export default (({ data , current_user , successFunc }) => { data.map((item, key) => { return ( { projects.map((item, key) => { return (
        - - {item.project.name} + + {item.project.name}
        ) }) diff --git a/src/forge/Team/Group/GroupDetails.jsx b/src/forge/Team/Group/GroupDetails.jsx index 9d27767d..8d1c519b 100644 --- a/src/forge/Team/Group/GroupDetails.jsx +++ b/src/forge/Team/Group/GroupDetails.jsx @@ -101,7 +101,7 @@ export default ((props) => { group ?
        - {group.name} + {group.nickname} {group.is_member && !group.is_admin ? - + {groupId ? "基本设置" : "新建团队"}
        {helper( - '团队名称:', + '团队标识:', "name", + [ + { required: true, message: "请输入团队标识" }, + { + validator:checkname + } + ], + , true + )} + {helper( + '团队名称:', + "nickname", [{ required: true, message: "请输入团队名称" }], - , true + , true )} {helper( 团队描述:(描述团队的目的或作用), diff --git a/src/forge/Team/Group/Setting/GroupMemberSetting.jsx b/src/forge/Team/Group/Setting/GroupMemberSetting.jsx index c23ca14e..847dd6ef 100644 --- a/src/forge/Team/Group/Setting/GroupMemberSetting.jsx +++ b/src/forge/Team/Group/Setting/GroupMemberSetting.jsx @@ -76,7 +76,7 @@ export default ((props) => { width: "7%", render: (value, item) => { return ( - + ) } }, diff --git a/src/forge/Team/Group/Setting/GroupProjectSetting.jsx b/src/forge/Team/Group/Setting/GroupProjectSetting.jsx index 6d407609..1762a864 100644 --- a/src/forge/Team/Group/Setting/GroupProjectSetting.jsx +++ b/src/forge/Team/Group/Setting/GroupProjectSetting.jsx @@ -180,7 +180,7 @@ function GroupProjectSetting(props) { } > {item.project.owner_name}/{item.project.name}} + title={{item.project.owner_name}/{item.project.name}} /> )} diff --git a/src/forge/Team/RightBox.jsx b/src/forge/Team/RightBox.jsx index 06731712..0603a454 100644 --- a/src/forge/Team/RightBox.jsx +++ b/src/forge/Team/RightBox.jsx @@ -72,7 +72,7 @@ function RightBox({ OIdentifier , history , admin }) { memberData.organization_users.map((item,key)=>{ return(
        - +
        {item.user && item.user.name} 加入时间:{item.created_at} diff --git a/src/forge/Team/Setting/TeamSettingCommon.jsx b/src/forge/Team/Setting/TeamSettingCommon.jsx index 1c44a150..1a48c7f7 100644 --- a/src/forge/Team/Setting/TeamSettingCommon.jsx +++ b/src/forge/Team/Setting/TeamSettingCommon.jsx @@ -169,7 +169,7 @@ export default Form.create()( )}

        选择头像:

        - +
        diff --git a/src/forge/Team/Setting/TeamSettingMember.jsx b/src/forge/Team/Setting/TeamSettingMember.jsx index 4871def6..34f0e28e 100644 --- a/src/forge/Team/Setting/TeamSettingMember.jsx +++ b/src/forge/Team/Setting/TeamSettingMember.jsx @@ -64,7 +64,7 @@ export default (({organizeDetail})=>{ width:"5%", render:(value)=>{ return( - value && + value && ) } }, diff --git a/src/forge/Team/Sub/Detail.jsx b/src/forge/Team/Sub/Detail.jsx index 3979c4c4..bba0b7de 100644 --- a/src/forge/Team/Sub/Detail.jsx +++ b/src/forge/Team/Sub/Detail.jsx @@ -78,7 +78,7 @@ function Detail(props){ detail &&

        - {item.name} + {item.nickname} { item.is_admin && item.authorize!=="owner" && disMissGroup(item.id)}>解散团队} { item.is_member && } @@ -86,7 +86,7 @@ function TeamGroupItems({organizeDetail,limit, count , history}){ { item.users && item.users.map((i,k)=>{ return( - k < count ? + k < count ? : k === count ? diff --git a/src/forge/UsersList/fork_users.js b/src/forge/UsersList/fork_users.js index cd771947..aaaa9b62 100644 --- a/src/forge/UsersList/fork_users.js +++ b/src/forge/UsersList/fork_users.js @@ -88,7 +88,7 @@ class ForkUsers extends Component { > diff --git a/src/forge/UsersList/user_list.js b/src/forge/UsersList/user_list.js index 4c1aeda5..592e9806 100644 --- a/src/forge/UsersList/user_list.js +++ b/src/forge/UsersList/user_list.js @@ -18,7 +18,7 @@ class UserList extends Component { > diff --git a/src/forge/comments/children_comments.js b/src/forge/comments/children_comments.js index 65cf7784..8a8ccbc8 100644 --- a/src/forge/comments/children_comments.js +++ b/src/forge/comments/children_comments.js @@ -118,7 +118,7 @@ class children_comments extends Component { > {user && user.user_identity && (

        diff --git a/src/forge/users/Team-item.jsx b/src/forge/users/Team-item.jsx index d457ee26..f3dbc47c 100644 --- a/src/forge/users/Team-item.jsx +++ b/src/forge/users/Team-item.jsx @@ -4,7 +4,7 @@ import { getImageUrl } from 'educoder'; function TeamItem({item,history}){ return(
        {history.push(`/organize/${item.name}`)}} style={{cursor:"pointer"}}> -
        +
        {item.name}
        diff --git a/src/modules/login/EducoderLogin.js b/src/modules/login/EducoderLogin.js index 5663c69c..9a552673 100644 --- a/src/modules/login/EducoderLogin.js +++ b/src/modules/login/EducoderLogin.js @@ -1,34 +1,14 @@ import React, {Component} from "react"; import moment from 'moment'; -import { SnackbarHOC,getImageUrl } from 'educoder'; +import { getImageUrl } from 'educoder'; import '../courses/css/members.css'; -import "../courses/common/formCommon.css" +import "../courses/common/formCommon.css"; import '../courses/css/Courses.css'; import beijintulogontwo from '../../../src/images/login/beijintulogontwo.png'; import educodernet from '../../../src/images/login/educodernet.png'; import LoginRegisterComponent from '../user/LoginRegisterComponent'; import FindPasswordComponent from '../user/FindPasswordComponent'; -import passopen from "../../images/login/passopen.png"; //educoder登入页面 -var sectionStyle = { - "height": "100%", - "width": "100%", - "min-width": "1000px", -// makesure here is String确保这里是一个字符串,以下是es6写法 - - -}; -var imgback = { - " background-size":"cover", -"background-repeat":"no-repeat", - backgroundImage: `url(${beijintulogontwo})`, -} -var imgmian ={ - width: "100%", - background: `url(${beijintulogontwo})`, - position: "relative", - -} var newContainer={ background: `url(${beijintulogontwo})`, @@ -89,11 +69,6 @@ class EducoderLogin extends Component { } - componentDidMount() { - // console.log("EducoderLogin"); - // console.log(this.props); - } - Setlogins=(i)=>{ console.log("96ye"); console.log(i) @@ -120,9 +95,6 @@ class EducoderLogin extends Component { render() { let {showbool,loginstatus,logini} = this.state; - // console.log("EducoderLogingetHelmetapi"); - // console.log(this.props); - // console.log(this.props.mygetHelmetapi); return (
        diff --git a/src/modules/tpm/TPMIndex.css b/src/modules/tpm/TPMIndex.css index 47696ec9..7b4d15a7 100644 --- a/src/modules/tpm/TPMIndex.css +++ b/src/modules/tpm/TPMIndex.css @@ -21,7 +21,6 @@ body>.-task-title { height: 100%; min-height: 100%; overflow: hidden; - padding-top:70px; } .newHeaders{ max-width: unset; diff --git a/src/modules/tpm/TPMIndexHOC.js b/src/modules/tpm/TPMIndexHOC.js index 87c9a03f..7eecccc7 100644 --- a/src/modules/tpm/TPMIndexHOC.js +++ b/src/modules/tpm/TPMIndexHOC.js @@ -427,6 +427,7 @@ export function TPMIndexHOC(WrappedComponent) { tip={this._gLoadingTip || "加载中..."} >
        +
        { current_user && this.initCommonState(user)}