diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js index a7b2c9f4..4a9d9465 100644 --- a/config/webpack.config.prod.js +++ b/config/webpack.config.prod.js @@ -19,7 +19,8 @@ const getClientEnvironment = require("./env"); let publicPath = "/react/build/"; const publicUrl = publicPath.slice(0, -1); -const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== "false"; +// const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== "false"; +const shouldUseSourceMap = process.env.NODE_ENV !== "production"; const env = getClientEnvironment(publicPath); // This is the production configuration. @@ -54,7 +55,8 @@ module.exports = { }, bail: true, mode: "production", - devtool: false, //测试版 + // devtool: false, //测试版 + devtool: shouldUseSourceMap?'source-map':false, entry: [require.resolve("./polyfills"), paths.appIndexJs], output: { path: paths.appBuild, diff --git a/public/css/iconfont.css b/public/css/iconfont.css index a15df586..4498c693 100644 --- a/public/css/iconfont.css +++ b/public/css/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 2340181 */ - src: url('iconfont.woff2?t=1628841816999') format('woff2'), - url('iconfont.woff?t=1628841816999') format('woff'), - url('iconfont.ttf?t=1628841816999') format('truetype'); + src: url('iconfont.woff2?t=1630632852475') format('woff2'), + url('iconfont.woff?t=1630632852475') format('woff'), + url('iconfont.ttf?t=1630632852475') format('truetype'); } .iconfont { @@ -13,6 +13,146 @@ -moz-osx-font-smoothing: grayscale; } +.icon-gerenziliao1:before { + content: "\e8c7"; +} + +.icon-lichengbeiicon:before { + content: "\e885"; +} + +.icon-cangkushezhiicon:before { + content: "\e889"; +} + +.icon-dongtaiicon:before { + content: "\e88a"; +} + +.icon-gongzuoliuicon:before { + content: "\e88b"; +} + +.icon-yixiuicon1:before { + content: "\e89b"; +} + +.icon-a-wikiicon1:before { + content: "\e8c6"; +} + +.icon-daimakuicon1:before { + content: "\e8c5"; +} + +.icon-wodetongzhi:before { + content: "\e8c8"; +} + +.icon-tongzhiguanli:before { + content: "\e8c9"; +} + +.icon-xuanzhong3:before { + content: "\e8ca"; +} + +.icon-xitongtongzhiicon:before { + content: "\e8cb"; +} + +.icon-xiaoxi2:before { + content: "\e8cc"; +} + +.icon-sshmiyue:before { + content: "\e8cd"; +} + +.icon-gerenziliao:before { + content: "\e8c4"; +} + +.icon-xinshouzhiyin:before { + content: "\e8e4"; +} + +.icon-xinjianxiangmu:before { + content: "\e8e6"; +} + +.icon-jiaruketang1:before { + content: "\e8e9"; +} + +.icon-xiangmugonggao:before { + content: "\e8c2"; +} + +.icon-chengguo:before { + content: "\e8c3"; +} + +.icon-chengjiaogonggao:before { + content: "\e8c0"; +} + +.icon-jishuzichan:before { + content: "\e8c1"; +} + +.icon-feibiaogonggao:before { + content: "\e8bc"; +} + +.icon-zhongbiaogonggao:before { + content: "\e8bd"; +} + +.icon-gengzhenggonggao:before { + content: "\e8be"; +} + +.icon-zhaobiaogonggao:before { + content: "\e8bf"; +} + +.icon-wenjian6:before { + content: "\e8ba"; +} + +.icon-wenjianjia4:before { + content: "\e8bb"; +} + +.icon-quxiaoguanzhu:before { + content: "\e89a"; +} + +.icon-dianzan_icon:before { + content: "\e8a2"; +} + +.icon-wenjian5:before { + content: "\e896"; +} + +.icon-wenjianjia3:before { + content: "\e8a9"; +} + +.icon-fuzhiicon:before { + content: "\e886"; +} + +.icon-zhuye-fill:before { + content: "\e876"; +} + +.icon-daimakuicon:before { + content: "\e884"; +} + .icon-xinjian2:before { content: "\e8b0"; } @@ -29,22 +169,6 @@ content: "\e8a6"; } -.icon-dianzan_icon:before { - content: "\e8ba"; -} - -.icon-quxiaoguanzhu:before { - content: "\e8bb"; -} - -.icon-daimakuicon:before { - content: "\e8a9"; -} - -.icon-zhuyeicon:before { - content: "\e884"; -} - .icon-biaoqianicon:before { content: "\e882"; } @@ -53,14 +177,6 @@ content: "\e883"; } -.icon-cangkushezhiicon:before { - content: "\e885"; -} - -.icon-fuzhiicon:before { - content: "\e886"; -} - .icon-lianjieicon:before { content: "\e887"; } @@ -69,18 +185,6 @@ content: "\e888"; } -.icon-lichengbeiicon:before { - content: "\e889"; -} - -.icon-gongzuoliuicon:before { - content: "\e88a"; -} - -.icon-dongtaiicon:before { - content: "\e88b"; -} - .icon-morendianzan_icon:before { content: "\e88e"; } @@ -93,10 +197,6 @@ content: "\e899"; } -.icon-wenjian5:before { - content: "\e89a"; -} - .icon-tijiaoicon:before { content: "\e89e"; } @@ -105,10 +205,6 @@ content: "\e89f"; } -.icon-wenjianjia3:before { - content: "\e8a2"; -} - .icon-xialaanniu1:before { content: "\e8a4"; } @@ -193,10 +289,6 @@ content: "\e898"; } -.icon-weixuanzhongqingqiuicon:before { - content: "\e89b"; -} - .icon-xiezuozheguanliicon:before { content: "\e8a1"; } @@ -241,10 +333,6 @@ content: "\e875"; } -.icon-fuzhi_icon:before { - content: "\e876"; -} - .icon-shanchuicon:before { content: "\e877"; } diff --git a/public/css/iconfont.js b/public/css/iconfont.js index 94af421b..2aaace21 100644 --- a/public/css/iconfont.js +++ b/public/css/iconfont.js @@ -1 +1 @@ -!function(c){var l,a,h,i,o,z='',t=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss"),p=function(c,l){l.parentNode.insertBefore(c,l)};if(t&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function v(){o||(o=!0,h())}function m(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(m,50)}v()}l=function(){var c,l;(l=document.createElement("div")).innerHTML=z,z=null,(c=l.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",l=c,(c=document.body).firstChild?p(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),l()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(h=l,i=c.document,o=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,v())})}(window); +!function(c){var l,a,h,i,o,z='',t=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss"),p=function(c,l){l.parentNode.insertBefore(c,l)};if(t&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function v(){o||(o=!0,h())}function m(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(m,50)}v()}l=function(){var c,l;(l=document.createElement("div")).innerHTML=z,z=null,(c=l.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",l=c,(c=document.body).firstChild?p(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),l()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(h=l,i=c.document,o=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,v())})}(window); \ No newline at end of file diff --git a/public/css/iconfont.json b/public/css/iconfont.json index 7f25b322..e78a264c 100644 --- a/public/css/iconfont.json +++ b/public/css/iconfont.json @@ -5,6 +5,251 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "24059956", + "name": "个人资料", + "font_class": "gerenziliao1", + "unicode": "e8c7", + "unicode_decimal": 59591 + }, + { + "icon_id": "24059409", + "name": "里程碑icon", + "font_class": "lichengbeiicon", + "unicode": "e885", + "unicode_decimal": 59525 + }, + { + "icon_id": "24059410", + "name": "仓库设置icon", + "font_class": "cangkushezhiicon", + "unicode": "e889", + "unicode_decimal": 59529 + }, + { + "icon_id": "24059411", + "name": "动态icon", + "font_class": "dongtaiicon", + "unicode": "e88a", + "unicode_decimal": 59530 + }, + { + "icon_id": "24059412", + "name": "工作流icon", + "font_class": "gongzuoliuicon", + "unicode": "e88b", + "unicode_decimal": 59531 + }, + { + "icon_id": "24059413", + "name": "易修icon", + "font_class": "yixiuicon1", + "unicode": "e89b", + "unicode_decimal": 59547 + }, + { + "icon_id": "24059414", + "name": "wiki icon", + "font_class": "a-wikiicon1", + "unicode": "e8c6", + "unicode_decimal": 59590 + }, + { + "icon_id": "24047186", + "name": "代码库icon", + "font_class": "daimakuicon1", + "unicode": "e8c5", + "unicode_decimal": 59589 + }, + { + "icon_id": "24047189", + "name": "我的通知", + "font_class": "wodetongzhi", + "unicode": "e8c8", + "unicode_decimal": 59592 + }, + { + "icon_id": "24047190", + "name": "通知管理", + "font_class": "tongzhiguanli", + "unicode": "e8c9", + "unicode_decimal": 59593 + }, + { + "icon_id": "24047191", + "name": "选中", + "font_class": "xuanzhong3", + "unicode": "e8ca", + "unicode_decimal": 59594 + }, + { + "icon_id": "24047192", + "name": "系统通知icon", + "font_class": "xitongtongzhiicon", + "unicode": "e8cb", + "unicode_decimal": 59595 + }, + { + "icon_id": "24047193", + "name": "消息", + "font_class": "xiaoxi2", + "unicode": "e8cc", + "unicode_decimal": 59596 + }, + { + "icon_id": "24047194", + "name": "ssh密钥", + "font_class": "sshmiyue", + "unicode": "e8cd", + "unicode_decimal": 59597 + }, + { + "icon_id": "24014152", + "name": "个人资料", + "font_class": "gerenziliao", + "unicode": "e8c4", + "unicode_decimal": 59588 + }, + { + "icon_id": "23655968", + "name": "新手指引", + "font_class": "xinshouzhiyin", + "unicode": "e8e4", + "unicode_decimal": 59620 + }, + { + "icon_id": "23655969", + "name": "新建项目", + "font_class": "xinjianxiangmu", + "unicode": "e8e6", + "unicode_decimal": 59622 + }, + { + "icon_id": "23658111", + "name": "加入课堂", + "font_class": "jiaruketang1", + "unicode": "e8e9", + "unicode_decimal": 59625 + }, + { + "icon_id": "23791639", + "name": "项目公告", + "font_class": "xiangmugonggao", + "unicode": "e8c2", + "unicode_decimal": 59586 + }, + { + "icon_id": "23791640", + "name": "成果", + "font_class": "chengguo", + "unicode": "e8c3", + "unicode_decimal": 59587 + }, + { + "icon_id": "23791410", + "name": "成交公告", + "font_class": "chengjiaogonggao", + "unicode": "e8c0", + "unicode_decimal": 59584 + }, + { + "icon_id": "23791411", + "name": "技术资产", + "font_class": "jishuzichan", + "unicode": "e8c1", + "unicode_decimal": 59585 + }, + { + "icon_id": "23790928", + "name": "废标公告", + "font_class": "feibiaogonggao", + "unicode": "e8bc", + "unicode_decimal": 59580 + }, + { + "icon_id": "23790929", + "name": "中标公告", + "font_class": "zhongbiaogonggao", + "unicode": "e8bd", + "unicode_decimal": 59581 + }, + { + "icon_id": "23790930", + "name": "更正公告", + "font_class": "gengzhenggonggao", + "unicode": "e8be", + "unicode_decimal": 59582 + }, + { + "icon_id": "23790931", + "name": "招标公告", + "font_class": "zhaobiaogonggao", + "unicode": "e8bf", + "unicode_decimal": 59583 + }, + { + "icon_id": "23732532", + "name": "文件", + "font_class": "wenjian6", + "unicode": "e8ba", + "unicode_decimal": 59578 + }, + { + "icon_id": "23732533", + "name": "文件夹", + "font_class": "wenjianjia4", + "unicode": "e8bb", + "unicode_decimal": 59579 + }, + { + "icon_id": "23642443", + "name": "取消关注", + "font_class": "quxiaoguanzhu", + "unicode": "e89a", + "unicode_decimal": 59546 + }, + { + "icon_id": "23642444", + "name": "点赞_icon", + "font_class": "dianzan_icon", + "unicode": "e8a2", + "unicode_decimal": 59554 + }, + { + "icon_id": "23639530", + "name": "文件", + "font_class": "wenjian5", + "unicode": "e896", + "unicode_decimal": 59542 + }, + { + "icon_id": "23639533", + "name": "文件夹", + "font_class": "wenjianjia3", + "unicode": "e8a9", + "unicode_decimal": 59561 + }, + { + "icon_id": "23639440", + "name": "复制icon", + "font_class": "fuzhiicon", + "unicode": "e886", + "unicode_decimal": 59526 + }, + { + "icon_id": "23639422", + "name": "主页-fill", + "font_class": "zhuye-fill", + "unicode": "e876", + "unicode_decimal": 59510 + }, + { + "icon_id": "23639423", + "name": "代码库icon", + "font_class": "daimakuicon", + "unicode": "e884", + "unicode_decimal": 59524 + }, { "icon_id": "23572260", "name": "新建", @@ -33,34 +278,6 @@ "unicode": "e8a6", "unicode_decimal": 59558 }, - { - "icon_id": "23492900", - "name": "点赞_icon", - "font_class": "dianzan_icon", - "unicode": "e8ba", - "unicode_decimal": 59578 - }, - { - "icon_id": "23492901", - "name": "取消关注", - "font_class": "quxiaoguanzhu", - "unicode": "e8bb", - "unicode_decimal": 59579 - }, - { - "icon_id": "23473151", - "name": "代码库icon", - "font_class": "daimakuicon", - "unicode": "e8a9", - "unicode_decimal": 59561 - }, - { - "icon_id": "23473104", - "name": "主页icon", - "font_class": "zhuyeicon", - "unicode": "e884", - "unicode_decimal": 59524 - }, { "icon_id": "23472253", "name": "标签icon", @@ -75,20 +292,6 @@ "unicode": "e883", "unicode_decimal": 59523 }, - { - "icon_id": "23472256", - "name": "仓库设置icon", - "font_class": "cangkushezhiicon", - "unicode": "e885", - "unicode_decimal": 59525 - }, - { - "icon_id": "23472257", - "name": "复制icon", - "font_class": "fuzhiicon", - "unicode": "e886", - "unicode_decimal": 59526 - }, { "icon_id": "23472258", "name": "链接icon", @@ -103,27 +306,6 @@ "unicode": "e888", "unicode_decimal": 59528 }, - { - "icon_id": "23472260", - "name": "里程碑icon", - "font_class": "lichengbeiicon", - "unicode": "e889", - "unicode_decimal": 59529 - }, - { - "icon_id": "23472261", - "name": "工作流icon", - "font_class": "gongzuoliuicon", - "unicode": "e88a", - "unicode_decimal": 59530 - }, - { - "icon_id": "23472262", - "name": "动态icon", - "font_class": "dongtaiicon", - "unicode": "e88b", - "unicode_decimal": 59531 - }, { "icon_id": "23472263", "name": "默认点赞_icon", @@ -145,13 +327,6 @@ "unicode": "e899", "unicode_decimal": 59545 }, - { - "icon_id": "23472268", - "name": "文件", - "font_class": "wenjian5", - "unicode": "e89a", - "unicode_decimal": 59546 - }, { "icon_id": "23472269", "name": "提交icon", @@ -166,13 +341,6 @@ "unicode": "e89f", "unicode_decimal": 59551 }, - { - "icon_id": "23472271", - "name": "文件夹", - "font_class": "wenjianjia3", - "unicode": "e8a2", - "unicode_decimal": 59554 - }, { "icon_id": "23472272", "name": "下拉按钮", @@ -320,13 +488,6 @@ "unicode": "e898", "unicode_decimal": 59544 }, - { - "icon_id": "23144155", - "name": "未选中请求icon", - "font_class": "weixuanzhongqingqiuicon", - "unicode": "e89b", - "unicode_decimal": 59547 - }, { "icon_id": "23144158", "name": "协作者管理icon", @@ -404,13 +565,6 @@ "unicode": "e875", "unicode_decimal": 59509 }, - { - "icon_id": "23046262", - "name": "复制_icon", - "font_class": "fuzhi_icon", - "unicode": "e876", - "unicode_decimal": 59510 - }, { "icon_id": "23046268", "name": "删除icon", diff --git a/public/css/iconfont.ttf b/public/css/iconfont.ttf index 484348ba..a0b8934f 100644 Binary files a/public/css/iconfont.ttf and b/public/css/iconfont.ttf differ diff --git a/public/css/iconfont.woff b/public/css/iconfont.woff index bfdd0b9c..98e387c0 100644 Binary files a/public/css/iconfont.woff and b/public/css/iconfont.woff differ diff --git a/public/css/iconfont.woff2 b/public/css/iconfont.woff2 index 386dde00..eb219c96 100644 Binary files a/public/css/iconfont.woff2 and b/public/css/iconfont.woff2 differ diff --git a/src/App.js b/src/App.js index e6f1fc3e..af5532ad 100644 --- a/src/App.js +++ b/src/App.js @@ -3,7 +3,7 @@ import './App.css'; import { ConfigProvider } from 'antd' import zhCN from 'antd/lib/locale-provider/zh_CN'; import { - BrowserRouter as Router, + // BrowserRouter as Router, Route, Switch } from 'react-router-dom'; @@ -91,6 +91,10 @@ const ProjectIndex = Loadable({ loader: () => import("./forge/Index"), loading: Loading, }); + +// 此处仅维护前端可能的一级路由,不用进行项目或者组织判断的字段。 +const keyWord = ["explore", "settings", "setting", "CCF", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search"]; + class App extends Component { constructor(props) { super(props); @@ -100,6 +104,51 @@ class App extends Component { mydisplay: false, occupation: 0, mygetHelmetapi: null, + pathType: null, + pathName: null, + } + } + + UNSAFE_componentWillMount() { + initAxiosInterceptors(this.props); + let pathname = window.location.pathname ? window.location.pathname.split('/')[1] : ''; + pathname && this.getPathnameType(pathname); + + // 添加路由监听,决定组织还是个人 + this.unlisten = this.props.history.listen((location) => { + let newPathname = location.pathname.split('/')[1]; + if (this.state.pathName !== newPathname) { + // this.setState({ pathType: '' }); + newPathname && this.getPathnameType(newPathname); + } + }); + } + + shouldComponentUpdate(nextProps, nextState) { + // (!keyWord.includes(this.props.location.pathname.split('/')[1])) && + if (nextProps.location.pathname.split('/')[1] !== this.props.location.pathname.split('/')[1] && nextState.pathType === this.state.pathType) { + return false; + } else { + return true; + } + } + + getPathnameType = (pathname) => { + if (!keyWord.includes(pathname)) { + let url = `/owners/${pathname}.json`; + axios.get(url).then((response) => { + if (response && response.status === 200) { + this.setState({ + pathType: response.data.type || '404', + pathName: pathname, + }) + } + }); + }else{ + this.setState({ + pathType: pathname, + pathName: pathname, + }); } } @@ -119,13 +168,19 @@ class App extends Component { componentDidMount() { document.title = "loading..."; - initAxiosInterceptors(this.props); + this.getAppdata(); window.addEventListener('error', (event) => { const msg = `${event.type}: ${event.message}`; }); + } + + componentWillUnmount() { + this.unlisten && this.unlisten(); // 执行解绑 + } + //修改登录方法 Modifyloginvalue = () => { this.setState({ @@ -196,7 +251,7 @@ class App extends Component { }; render() { - const { mygetHelmetapi } = this.state; + const { mygetHelmetapi, pathType} = this.state; let personal = mygetHelmetapi && mygetHelmetapi.personal; return ( @@ -204,87 +259,123 @@ class App extends Component { this.Modifyloginvalue()}> - - - {/* wiki预览 */} - */} + + {/* wiki预览 */} + { + return () + } + } /> + + {/*项目*/} + { - return () + return () } - } /> - - {/*项目*/} - { - return () - } - }> - - { - return () - } - }> - - {/*项目*/} - { - return () - } - }> - - { - return () - } + }> + + { + return () } - /> - {/*403*/} - + }> + - - { - return () - } - }> - - {/*404*/} - - - {/* 查询 */} - - - - {/* 个人主页 */} - { - return () - } - }> - ( - personal && personal.length > 0 ? - - : - - ) + { + return () } - /> - - - + } + /> + {/*403*/} + + + + + {/*404*/} + + + {/* 查询 */} + + + ( + + ) + } + /> + + + {/* 组织 */} + { + return () + } + }> + + + {/*新建项目等*/} + { + return () + } + }> + + + {/* 判断为用户/组织,并进入对应页面 */} + { + pathType === 'User' ? + { + return () + } + } + /> : pathType === 'Organization' ? { + return () + } + }> + : pathType === '404' ? : + ( + personal && personal.length > 0 ? + + : + + ) + } + /> + // + } + + + + {/* 个人主页 */} + { + return () + } + }> + + + + + {/* */} diff --git a/src/AppConfig.js b/src/AppConfig.js index 034612ec..825a2a3b 100644 --- a/src/AppConfig.js +++ b/src/AppConfig.js @@ -11,9 +11,9 @@ broadcastChannelOnmessage('refreshPage', () => { }) function locationurl(list) { - if (window.location.port !== "3007") { + // if (window.location.port !== "3007") { window.location.href = list - } + // } } // TODO 开发期多个身份切换 let debugType = "" @@ -85,7 +85,10 @@ export function initAxiosInterceptors(props) { } if (response.data.status === 404) { - locationurl('/nopage'); + let responseURL = response.request ? response.request.responseURL:''; + if (responseURL.indexOf('/api/users/') === -1 && responseURL.indexOf('/api/organizations/') === -1 && responseURL.indexOf('/api/owners/') === -1) { + locationurl('/nopage'); + } } if (response.data.status === 500) { diff --git a/src/college/College.js b/src/college/College.js index 85d43fb7..f7a3ab6c 100644 --- a/src/college/College.js +++ b/src/college/College.js @@ -195,7 +195,7 @@ class College extends Component { align: 'center', className: "edu-txt-center font-14 maxnamewidth105", render: (text, record) => ( - { diff --git a/src/context/TPIContextProvider.js b/src/context/TPIContextProvider.js index 22b24727..f3ea3e0f 100644 --- a/src/context/TPIContextProvider.js +++ b/src/context/TPIContextProvider.js @@ -435,11 +435,11 @@ class TPIContextProvider extends Component { image_url: "avatars/User/1" login: "innov" name: "Coder" - user_url: "/users/innov" + user_url: "/innov" */ let user = resData.user; user.username = resData.user.name; - user.user_url = `/users/${resData.user.login}`; + user.user_url = `/${resData.user.login}`; // user.image_url = resData.image_url; user.is_teacher = resData.is_teacher; resData.user = user; diff --git a/src/forge/Activity/ActivityItem.js b/src/forge/Activity/ActivityItem.js index b726a4af..2b1ad3c8 100644 --- a/src/forge/Activity/ActivityItem.js +++ b/src/forge/Activity/ActivityItem.js @@ -14,25 +14,25 @@ class ActivityItem extends Component { {/* 如果是版本发布 */} {item.trend_type === "VersionRelease" ?

- {item.name} + {item.name} {item.trend_type}

: // 如果是任务 item.trend_type === "Issue" ?

- {item.name} + {item.name} {item.trend_type}

: // 如果是合并请求

- {item.name} + {item.name} {item.trend_type}

}

- + {item.user_name} diff --git a/src/forge/Branch/CloneAddress.js b/src/forge/Branch/CloneAddress.js index 38ddf5a0..e936bb70 100644 --- a/src/forge/Branch/CloneAddress.js +++ b/src/forge/Branch/CloneAddress.js @@ -1,16 +1,10 @@ import React, { useState } from 'react'; -import { Dropdown, Menu, Tooltip } from 'antd'; +import { Menu } from 'antd'; import "./branch.scss"; +import CopyTool from '../Component/CopyTool'; function CloneAddress({http_url , ssh_url , zip_url , tar_url}) { const [ key , setKey ] = useState("HTTP"); - // 点击按钮复制功能 - function jsCopy(){ - var e = document.getElementById("copy_rep_content"); - e.select(); - document.execCommand("Copy"); - } - return (

@@ -20,9 +14,7 @@ function CloneAddress({http_url , ssh_url , zip_url , tar_url}) {
- - - +
diff --git a/src/forge/Branch/branch.scss b/src/forge/Branch/branch.scss index bdd4aa39..0c7e136a 100644 --- a/src/forge/Branch/branch.scss +++ b/src/forge/Branch/branch.scss @@ -102,4 +102,7 @@ border-color:transparent ; } } +} +.copytool{ + margin:0px 10px; } \ No newline at end of file diff --git a/src/forge/Component/Contributors.jsx b/src/forge/Component/Contributors.jsx index 1e26354a..2f67b3ab 100644 --- a/src/forge/Component/Contributors.jsx +++ b/src/forge/Component/Contributors.jsx @@ -52,8 +52,8 @@ function Contributors({contributors,owner,projectsId}){ - - {data.name} + + {data.name} { data.is_watch ? FocusFunc(false,data.login)}>取消关注:FocusFunc(true,data.login)}>关注 @@ -137,7 +137,7 @@ function Contributors({contributors,owner,projectsId}){
贡献者{ contributors && contributors.total_count > 0 && {contributors.total_count}} - 全部 + 全部
setVisibleFunc(false)}> { @@ -145,7 +145,7 @@ function Contributors({contributors,owner,projectsId}){ list.map((item,key)=>{ return( - + setVisibleFunc(true,item.login,key)}/> diff --git a/src/forge/Component/CopyTool.jsx b/src/forge/Component/CopyTool.jsx index e659c077..86fb32da 100644 --- a/src/forge/Component/CopyTool.jsx +++ b/src/forge/Component/CopyTool.jsx @@ -6,27 +6,33 @@ CopyTool.defaultProps = { afterText: '复制成功', //点击后显示的文字 className: '', //传给svg的class inputId: 'copyText', //要复制的文本的ID + timeOut:true, //复制后将浮动的文字改为beforeText }; -function CopyTool({ beforeText, afterText, className,inputId }) { +function CopyTool({ beforeText, afterText, className , inputId , timeOut }) { const [title, setTitle] = useState(() => { return beforeText; }); // 复制链接 const copyUrl = useCallback(() => { - let inputDom = document.getElementById(inputId); - if (!inputDom) { + const copyEle = document.querySelector(`#${inputId}`); // 获取要复制的节点 + if (!copyEle) { console.error("您的CopyTool未设置正确的inputId"); return; } - inputDom.select(); + copyEle.select(); // 执行选中元素 if (document.execCommand('copy')) { document.execCommand('copy'); } + setTitle(afterText); - inputDom.blur(); + if(timeOut){ + setTimeout(function(){ + setTitle(beforeText); + },1500) + } }, []); return ( diff --git a/src/forge/Component/DeleteModal/Index.jsx b/src/forge/Component/DeleteModal/Index.jsx index 7e631dac..c3c13689 100644 --- a/src/forge/Component/DeleteModal/Index.jsx +++ b/src/forge/Component/DeleteModal/Index.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { AlignCenter } from '../layout'; -import { Modal , Button } from 'antd'; -import './Index.scss'; +import { Button } from 'antd'; +import Modals from '../PublicModal/Index'; function DeleteBox({ visible , @@ -12,24 +12,22 @@ function DeleteBox({ content }) { return( -
- } + } + onCancel={onCancel} + visible={visible} >
{content} -

{subTitle}

+

{subTitle}

- + ) } export default DeleteBox; \ No newline at end of file diff --git a/src/forge/Component/DeleteModal/Index.scss b/src/forge/Component/DeleteModal/Index.scss deleted file mode 100644 index 7df79ebf..00000000 --- a/src/forge/Component/DeleteModal/Index.scss +++ /dev/null @@ -1,45 +0,0 @@ -.deleteBox{ - .ant-modal-header{ - background-color: #f8f8f8; - border-bottom: none; - .ant-modal-title{ - text-align: left; - font-size: 20px; - } - } - .ant-modal-body{ - padding:30px 50px; - p{ - font-size: 16px; - line-height: 26px; - color:#666; - word-break: break-all; - } - .desc{ - .descMain{ - align-items: center; - justify-content: center; - font-size: 20px; - margin-bottom: 10px; - i{ - font-size: 38px!important; - color:#DF0002 - } - } - } - } - .ant-modal-footer{ - border-top: none; - text-align: center; - padding-bottom: 40px; - button{ - width: 120px; - margin:0px 20px; - &.ant-btn-danger{ - background-color: #fff; - color: #DF0002; - border-color: #D0D0D0; - } - } - } -} \ No newline at end of file diff --git a/src/forge/Component/DrawerPanel.jsx b/src/forge/Component/DrawerPanel.jsx index 0e604d59..fa99e6c6 100644 --- a/src/forge/Component/DrawerPanel.jsx +++ b/src/forge/Component/DrawerPanel.jsx @@ -78,7 +78,7 @@ function DrawerPanel({visible,onClose,branch,owner,projectsId,history, name , li if(dataref.type==="file"){ onClose(); let value = turnbar(branch); - history.push(`/projects/${owner}/${projectsId}/tree/${value}/${dataref.path}`); + history.push(`/${owner}/${projectsId}/tree/${value}/${dataref.path}`); } } diff --git a/src/forge/Component/EAccount.scss b/src/forge/Component/EAccount.scss index d0fd2ef2..6fe44ab3 100644 --- a/src/forge/Component/EAccount.scss +++ b/src/forge/Component/EAccount.scss @@ -1,6 +1,6 @@ .ant-modal-mask{ - z-index: 1001; + z-index: 1031; } .ant-modal-wrap{ - z-index: 1002; + z-index: 1032; } \ No newline at end of file diff --git a/src/forge/Component/MemberCards.jsx b/src/forge/Component/MemberCards.jsx index 393ddbb1..48d90e13 100644 --- a/src/forge/Component/MemberCards.jsx +++ b/src/forge/Component/MemberCards.jsx @@ -45,15 +45,15 @@ const Div = styled.div`{ export default (({ user , img, name, time, focusStatus, is_current_user, login , successFunc }) => { return (
- +
- {name} + {name} { is_current_user ? : - + }
diff --git a/src/forge/Component/ProfileModal/Index.jsx b/src/forge/Component/ProfileModal/Index.jsx new file mode 100644 index 00000000..7cead761 --- /dev/null +++ b/src/forge/Component/ProfileModal/Index.jsx @@ -0,0 +1,72 @@ +import React , { useEffect , useState } from 'react'; +import Modals from '../PublicModal/Index'; +import { Button } from 'antd'; +import axios from 'axios'; + +import ProfileImg from './images/profile.png'; +import './Index.scss'; + +function ProfileModal({visible,onCancel,history}) { + const [ modalVis , setModalVis ] = useState(visible); + const [ addMemberCheck , setAddMemberCheck ] = useState(false); + + useEffect(()=>{ + axios.interceptors.response.use((response) => { + if (response && (response.data.status === 411 || response.data.status === 412)) { + setModalVis(true); + if(response.data.status === 412){ + setAddMemberCheck(true); + } + } + return response; + }, (error) => { + }); + },[]) + + useEffect(()=>{ + setModalVis(visible); + },[visible]) + + function onOk(){ + onCancel(); + setModalVis(false); + setTimeout(function(){ + window.open(`/settings/profile`,"_blank"); + },200) + } + + function onNo() { + onCancel(); + setModalVis(false); + } + + return( + + +
+ : +
+ + +
+ } + > +
+ + { + addMemberCheck ? +

目标用户个人资料不完整,需提醒目标用户补充资料后以进行后续操作

+ : +

您目前的个人资料不完整,需要补充资料以进行后续操作。是否前往补充个人信息?

+ } +
+ + ) +} +export default ProfileModal; \ No newline at end of file diff --git a/src/forge/Component/ProfileModal/Index.scss b/src/forge/Component/ProfileModal/Index.scss new file mode 100644 index 00000000..cf13121e --- /dev/null +++ b/src/forge/Component/ProfileModal/Index.scss @@ -0,0 +1,18 @@ +.contents{ + display: flex; + align-items: center; + justify-content: center; + margin:10px auto 0px; + img{ + margin-right: 13px; + width: 44px; + } + p{ + line-height: 29px; + max-width: 327px; + font-size: 16px!important; + } +} +.font-44{ + font-size: 44px!important; +} \ No newline at end of file diff --git a/src/forge/Component/ProfileModal/Profile.jsx b/src/forge/Component/ProfileModal/Profile.jsx new file mode 100644 index 00000000..e63c1286 --- /dev/null +++ b/src/forge/Component/ProfileModal/Profile.jsx @@ -0,0 +1,17 @@ +import React from 'react'; + +function Profile({children,sureFunc,showCompeleteDialog , completeProfile, className}) { + + function checkProfile() { + if(!completeProfile){ + showCompeleteDialog && showCompeleteDialog(); + }else{ + sureFunc(); + } + } + + return( + {children} + ) +} +export default Profile; \ No newline at end of file diff --git a/src/forge/Component/ProfileModal/images/profile.png b/src/forge/Component/ProfileModal/images/profile.png new file mode 100644 index 00000000..6dbed21f Binary files /dev/null and b/src/forge/Component/ProfileModal/images/profile.png differ diff --git a/src/forge/Component/PublicModal/Index.jsx b/src/forge/Component/PublicModal/Index.jsx new file mode 100644 index 00000000..c12e12b1 --- /dev/null +++ b/src/forge/Component/PublicModal/Index.jsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Modal } from 'antd'; +import './Index.scss'; + +function Modals({title,children,btn,onCancel,visible}) { + return( + + {children} + + ) +} +export default Modals; \ No newline at end of file diff --git a/src/forge/Component/PublicModal/Index.scss b/src/forge/Component/PublicModal/Index.scss new file mode 100644 index 00000000..1a0fbf31 --- /dev/null +++ b/src/forge/Component/PublicModal/Index.scss @@ -0,0 +1,75 @@ +.deleteBox{ + z-index: 1033; + .ant-modal-close-x{ + font-size: 17px!important; + } + .ant-modal-header{ + background-color: #f8f8f8; + padding:10px 30px; + .ant-modal-title{ + text-align: left; + font-size: 16px; + font-weight: bold; + } + } + .ant-modal-close{ + top:0px !important; + font-size: 24px !important; + } + .ant-modal-body{ + padding:30px 50px; + p{ + font-size: 14px; + line-height: 26px; + color:#666; + word-break: break-all; + } + .desc{ + .descMain{ + align-items: center; + justify-content: center; + font-size: 20px; + margin-bottom: 10px; + i.red{ + color:#DF0002; + } + } + } + } + .ant-modal-footer{ + border-top: none; + text-align: center; + padding-bottom: 40px; + button,a{ + width: 96px; + height: 32px; + margin:0px 20px; + font-weight: 400; + font-size: 14px; + &.ant-btn{ + border-color: #D0D0D0; + color: #666; + &:hover,&:active,&:focus{ + background: #f3f4f6; + } + } + &.ant-btn-danger{ + background-color: #fff; + color: #DF0002; + border-color: #D0D0D0; + &:hover,&:active,&:focus{ + border-color: #DF0002; + background-color: #fff; + } + } + &.ant-btn.ant-btn-primary{ + background-color: #466AFF; + color: #fff; + border-color: #466AFF; + &:hover,&:focus,&:active{ + background-color: rgba(70,106,255,0.85); + } + } + } + } +} \ No newline at end of file diff --git a/src/forge/Component/Releases.jsx b/src/forge/Component/Releases.jsx index da984543..bf8caebd 100644 --- a/src/forge/Component/Releases.jsx +++ b/src/forge/Component/Releases.jsx @@ -11,9 +11,9 @@ function Releases({owner,projectsId,releaseVersions , baseOperate , projectType} { releaseVersions && releaseVersions.total_count > 0 && {releaseVersions.total_count}} { (releaseVersions && releaseVersions.total_count > 0) || projectType ===2 ? - 全部 + 全部 : - baseOperate && 新建 + baseOperate && 新建 } { @@ -24,7 +24,7 @@ function Releases({owner,projectsId,releaseVersions , baseOperate , projectType}

- {item.name} + {item.name} 最新

{item.created_at}

diff --git a/src/forge/Component/User.jsx b/src/forge/Component/User.jsx index 4d22c77b..bc652dcf 100644 --- a/src/forge/Component/User.jsx +++ b/src/forge/Component/User.jsx @@ -20,7 +20,7 @@ export default ({ url , name , column , id , login })=>{ `; return( id? - + { url && } {name} diff --git a/src/forge/DevOps/About.jsx b/src/forge/DevOps/About.jsx index b9524d54..31ced220 100644 --- a/src/forge/DevOps/About.jsx +++ b/src/forge/DevOps/About.jsx @@ -149,7 +149,7 @@ function About(props, ref) { axios.post(url).then(result=>{ setIsSpining(false); if(result && result.data.status === 0){ - props.history.push(`/projects/${owner}/${projectsId}/devops/dispose`); + props.history.push(`/${owner}/${projectsId}/devops`); // 需要将顶部的open_devops修改 let { changeOpenDevops } = props; changeOpenDevops && changeOpenDevops(true); diff --git a/src/forge/DevOps/Dispose.jsx b/src/forge/DevOps/Dispose.jsx index 2211dbb5..1e08cdab 100644 --- a/src/forge/DevOps/Dispose.jsx +++ b/src/forge/DevOps/Dispose.jsx @@ -96,7 +96,7 @@ function Dispose(props){ setVisible(false); if(result && result.data){ props.showNotification("流水线新增成功,请进行工作流配置!"); - props.history.push(`/projects/${owner}/${projectsId}/devops/dispose/${result.data.id}`); + props.history.push(`/${owner}/${projectsId}/devops/${result.data.id}`); }else{ props.showNotification("流水线新增失败,请稍后再试!"); } @@ -134,12 +134,12 @@ function Dispose(props){ // 模板管理 function toModalManage(){ - props.history.push(`/projects/${owner}/${projectsId}/devops/mould`); + props.history.push(`/${owner}/${projectsId}/devops/mould`); } // 参数管理 function toparameter(){ - props.history.push(`/projects/${owner}/${projectsId}/devops/params`); + props.history.push(`/${owner}/${projectsId}/devops/params`); } const operate = current_user && (permission && permission !== "Reporter"); diff --git a/src/forge/DevOps/Dispose/List.jsx b/src/forge/DevOps/Dispose/List.jsx index 4c077452..297c5556 100644 --- a/src/forge/DevOps/Dispose/List.jsx +++ b/src/forge/DevOps/Dispose/List.jsx @@ -73,7 +73,7 @@ function List({ list, operate , projectsId , owner , showModal , deleteFunc }){ render:(value,item)=>{ let v = turnbar(item.branch); return( - {value} + {value} ) } }, @@ -117,7 +117,7 @@ function List({ list, operate , projectsId , owner , showModal , deleteFunc }){ return( { operate ? - + 编辑 :"" } { operate ? @@ -125,7 +125,7 @@ function List({ list, operate , projectsId , owner , showModal , deleteFunc }){ 删除 :"" } - 查看运行记录 + 查看运行记录 ) } diff --git a/src/forge/DevOps/Index.jsx b/src/forge/DevOps/Index.jsx index c3a29a3e..3302f603 100644 --- a/src/forge/DevOps/Index.jsx +++ b/src/forge/DevOps/Index.jsx @@ -36,39 +36,37 @@ export default ((props)=>{ return( - () - } - > - () } > - () } > - () } > - () - } - > - () } > - () + (p) => () + } + > + {/* 原本的两种合为一个 */} + {return( p.location.state.open_devops?:)} } > diff --git a/src/forge/DevOps/Infos.jsx b/src/forge/DevOps/Infos.jsx index b5220138..99029cde 100644 --- a/src/forge/DevOps/Infos.jsx +++ b/src/forge/DevOps/Infos.jsx @@ -26,7 +26,7 @@ export default ((props)=>{ return(
- { permission !=="Reporter" && 工作流配置} + { permission !=="Reporter" && 工作流配置}
diff --git a/src/forge/DevOps/Manage/Params.jsx b/src/forge/DevOps/Manage/Params.jsx index 7cb55276..6df62dd4 100644 --- a/src/forge/DevOps/Manage/Params.jsx +++ b/src/forge/DevOps/Manage/Params.jsx @@ -104,7 +104,7 @@ function Params(props){ 工作流 - 参数管理 - 返回 + 返回
diff --git a/src/forge/DevOps/Mould.jsx b/src/forge/DevOps/Mould.jsx index 933299d6..204fd161 100644 --- a/src/forge/DevOps/Mould.jsx +++ b/src/forge/DevOps/Mould.jsx @@ -126,7 +126,7 @@ function Mould(props){
childRef.current = f} ref={childRef} visible={visible} onCancel={()=>setVisible(false)} onOk={onOk}> - 工作流 - 模板管理返回 + 工作流 - 模板管理返回
diff --git a/src/forge/DevOps/Structure.jsx b/src/forge/DevOps/Structure.jsx index 52ac1682..99040d38 100644 --- a/src/forge/DevOps/Structure.jsx +++ b/src/forge/DevOps/Structure.jsx @@ -198,7 +198,7 @@ function Structure(props,ref){ } function clickRows(event,e){ - props.history.push(`/projects/${owner}/${projectsId}/devops/${e.number}/detail`); + props.history.push(`/${owner}/${projectsId}/devops/${e.number}/detail`); } const column = [ { @@ -290,7 +290,7 @@ function Structure(props,ref){ 构建列表 - 返回 + 返回
diff --git a/src/forge/DevOps/disposePipeline.jsx b/src/forge/DevOps/disposePipeline.jsx index 1da142f6..deabc149 100644 --- a/src/forge/DevOps/disposePipeline.jsx +++ b/src/forge/DevOps/disposePipeline.jsx @@ -275,7 +275,7 @@ function disposePipeline(props){ ...params }).then(result=>{ if(result){ - props.history.push(`/projects/${owner}/${projectsId}/devops/dispose`); + props.history.push(`/${owner}/${projectsId}/devops`); } setLoading(false); }).catch(error=>{ diff --git a/src/forge/DevOps/opsDetail.jsx b/src/forge/DevOps/opsDetail.jsx index 6ac3dc44..1944dfe6 100644 --- a/src/forge/DevOps/opsDetail.jsx +++ b/src/forge/DevOps/opsDetail.jsx @@ -48,7 +48,7 @@ export default (props) => { axios.post(url).then((result) => { if (result && result.data) { props.showNotification("工作流正在重新构建!"); - props.history.push(`/projects/${owner}/${projectId}/devops/${result.data.number}/detail`); + props.history.push(`/${owner}/${projectId}/devops/${result.data.number}/detail`); } }) .catch((error) => { @@ -87,7 +87,7 @@ export default (props) => { 退出 diff --git a/src/forge/Divert/DivertModal.jsx b/src/forge/Divert/DivertModal.jsx index 40dd6829..acf88117 100644 --- a/src/forge/Divert/DivertModal.jsx +++ b/src/forge/Divert/DivertModal.jsx @@ -41,15 +41,19 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){ // 确认转移 function onOk(){ validateFields((error,values)=>{ - console.log(...values); if(!error){ const url = `/${owner}/${repo}/applied_transfer_projects.json`; Axios.post(url,{ ...values }).then(result=>{ if(result){ - onSuccess(result.data && result.data.owner); + if(result.data.status === 0){ + onSuccess(result.data && result.data.owner); + }else{ + onSuccess(); + } } + }).catch(error=>{}) } }) diff --git a/src/forge/Head/AddProjectModal.jsx b/src/forge/Head/AddProjectModal.jsx index 8e3073e3..81f1d27c 100644 --- a/src/forge/Head/AddProjectModal.jsx +++ b/src/forge/Head/AddProjectModal.jsx @@ -1,6 +1,7 @@ import React, { useState , forwardRef, useEffect } from 'react'; import { Form , Modal , Input , Radio } from 'antd'; import Axios from 'axios'; +import CheckProfile from '../Component/ProfileModal/Profile'; export default Form.create()( forwardRef((props)=>{ @@ -77,7 +78,7 @@ export default Form.create()( - setVisible(true)}>加入项目 + setVisible(true)}>加入项目 ) }) diff --git a/src/forge/Head/Header.js b/src/forge/Head/Header.js index 7364ebd3..be36d6db 100644 --- a/src/forge/Head/Header.js +++ b/src/forge/Head/Header.js @@ -10,6 +10,7 @@ import HeadSearch from '../Component/HeadSearch'; import AddProjectModal from './AddProjectModal'; import '../../modules/tpm/TPMIndex.css'; +import CheckProfile from '../Component/ProfileModal/Profile'; import './header.scss'; const $ = window.$ @@ -222,6 +223,15 @@ class NewHeader extends Component { } } } + + checkProfile=(url)=>{ + const { showCompeleteDialog , completeProfile } = this.props; + if(!completeProfile){ + showCompeleteDialog && showCompeleteDialog(); + }else{ + window.location.href(url); + } + } addMenu=(list)=>{ return( @@ -231,11 +241,16 @@ class NewHeader extends Component { { list.map((item,key)=>{ return( - (item.name !=="加入课堂" && item.name !=="加入开发项目") && {item.name} + (item.name !=="加入课堂" && item.name !=="加入开发项目") && + + {window.location.href=item.url}}>{item.name} + ) }) } - + + +
) @@ -245,7 +260,7 @@ class NewHeader extends Component { return( - {current_user && current_user.username} + {current_user && current_user.username} { personal && personal.length > 0 && personal.map((item,key)=>{ @@ -254,7 +269,7 @@ class NewHeader extends Component { ) }) } -
  • 设置
  • +
  • 设置
  • this.educoderloginysl()}>退出
    ) @@ -347,7 +362,7 @@ class NewHeader extends Component { }) } - // let search_url = settings && settings.common && settings.common.search; + let search_url = settings && settings.common && settings.common.search; let notice_url = settings && settings.common && settings.common.notice; return (
    @@ -385,16 +400,16 @@ class NewHeader extends Component { if (new_link && (new_link.indexOf("courses") > -1 || new_link.indexOf("contests") > -1)) { if (user_login) { if (new_link.indexOf("courses") > -1) { - new_link = new_link.replace(/courses/g, "users/" + user_login + "/courses") + new_link = new_link.replace(/courses/g, user_login + "/courses") } else if (new_link.indexOf("contests") > -1) { - new_link = new_link.replace(/contests/g, "users/" + user_login + "/contests") + new_link = new_link.replace(/contests/g, user_login + "/contests") } } else { is_hidden = true } } if (user_login && (new_link && new_link.indexOf("homes") > -1)) { - new_link = new_link.replace(/homes/g, "users/" + user_login + "/user_activities") + new_link = new_link.replace(/homes/g, user_login + "/user_activities") } var waiLian = (new_link && str.filter(item=>new_link.indexOf(item)>-1) ); @@ -412,7 +427,7 @@ class NewHeader extends Component {
    {/* {search_url ? this.SearchInput(openSearch,search_url):""} */} - + { search_url && } { current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)? @@ -442,7 +457,7 @@ class NewHeader extends Component { : - + 头像 diff --git a/src/forge/Head/header.scss b/src/forge/Head/header.scss index 0246658a..fc8ca9d6 100644 --- a/src/forge/Head/header.scss +++ b/src/forge/Head/header.scss @@ -30,6 +30,13 @@ width: 120px; text-align: center; padding:0px; + .currentName{ + padding:0px 8px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + display: block; + } li{ height: 40px; line-height: 40px; diff --git a/src/forge/Index.js b/src/forge/Index.js index 3870c088..c2e36916 100644 --- a/src/forge/Index.js +++ b/src/forge/Index.js @@ -12,8 +12,9 @@ import Loadable from "react-loadable"; import Loading from "../Loading"; import { ImageLayerOfCommentHOC } from "../modules/page/layers/ImageLayerOfCommentHOC"; + const ProjectNew = Loadable({ - loader: () => import("./New/Index"), + loader: () => import("./New/Index"), loading: Loading, }); const ProjectIndex = Loadable({ @@ -21,21 +22,23 @@ const ProjectIndex = Loadable({ loading: Loading, }); -const ProjectDetail = Loadable({ - loader: () => import("./Main/Detail"), - loading: Loading, -}); +// 项目详情放在用户和组织下作为二级菜单存在 +// const ProjectDetail = Loadable({ +// loader: () => import("./Main/Detail"), +// loading: Loading, +// }); class Index extends Component { - componentDidUpdate=()=>{ - this.props.history.listen(()=>{ + componentDidUpdate = () => { + this.props.history.listen(() => { if (document.body.scrollTop || document.documentElement.scrollTop > 0) { window.scrollTo(0, 0) } }) } render() { + return (
    @@ -52,23 +55,24 @@ class Index extends Component { )} > ( )} > - ( )} - > + > */} ( )} > + ( @@ -86,3 +90,10 @@ export default withRouter( parentSelector: ".newMain", })(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index)))) ); + +// export default withRouter( +// ImageLayerOfCommentHOC({ +// imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget", +// parentSelector: ".newMain", +// })(Index) +// ); diff --git a/src/forge/Main/CoderDepot.jsx b/src/forge/Main/CoderDepot.jsx index 227aac79..e2dbc49d 100644 --- a/src/forge/Main/CoderDepot.jsx +++ b/src/forge/Main/CoderDepot.jsx @@ -20,6 +20,7 @@ import DrawerPanel from '../Component/DrawerPanel'; import UpdateDescModal from './sub/UpdateDescModal'; import Nodata from '../Nodata'; import Invite from './sub/Invite'; +import CheckProfile from '../Component/ProfileModal/Profile'; /** * projectDetail.type:0是托管项目,1是镜像项目,2是同步镜像项目(为2时不支持在线创建、在线上传、在线修改、在线删除、创建合并请求等功能) */ @@ -112,7 +113,7 @@ function CoderDepot(props){ useEffect(()=>{ if (projectsId && owner && defaultBranch){ let b = turnbar(branchName) ; - if(pathname.indexOf(`/projects/${owner}/${projectsId}`) > -1 && pathname.indexOf(`/tree/${b}/`) > -1) { + if(pathname.indexOf(`/${owner}/${projectsId}`) > -1 && pathname.indexOf(`/tree/${b}/`) > -1) { let url = pathname.split(`/tree/${b}/`)[1]; setTreeValue(url); getFileInfo(url,branchName); @@ -199,7 +200,7 @@ function CoderDepot(props){ // 切换分支或者标签 function changeBranch(value){ let checkvalue = turnbar(value); - let url = `/projects/${owner}/${projectsId}${value && `/tree/${checkvalue}`}${treeValue ? `/${treeValue}`:""}`; + let url = `/${owner}/${projectsId}${value && `/tree/${checkvalue}`}${treeValue ? `/${treeValue}`:""}`; props.history.push(url); } @@ -209,8 +210,12 @@ function CoderDepot(props){ let checkvalue = turnbar(b); return ( - urlLink(`/projects/${owner}/${projectsId}/${checkvalue}/uploadfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>上传文件 - urlLink(`/projects/${owner}/${projectsId}/${checkvalue}/newfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>新建文件 + + urlLink(`/${owner}/${projectsId}/${checkvalue}/uploadfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>上传文件 + + + urlLink(`/${owner}/${projectsId}/${checkvalue}/newfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>新建文件 + ) } @@ -229,12 +234,12 @@ function CoderDepot(props){ setTreeValue(undefined); let branch = branchName || defaultBranch; let checkvalue = turnbar(branch); - props.history.push(`/projects/${owner}/${projectsId}/tree/${checkvalue}`); + props.history.push(`/${owner}/${projectsId}/tree/${checkvalue}`); }; // 子目录路径返回链接 function returnUlr(url){ let enBranch = turnbar(branchName); - props.history.push(`/projects/${owner}/${projectsId}/tree${enBranch?`/${enBranch}`:""}/${url}`); + props.history.push(`/${owner}/${projectsId}/tree${enBranch?`/${enBranch}`:""}/${url}`); } // 点击跳转到子目录 function goToSubRoot(path,type,filename){ @@ -242,7 +247,7 @@ function CoderDepot(props){ let enBranch = branchName || defaultBranch; let checkvalue = turnbar(enBranch); setType(type); - props.history.push(`/projects/${owner}/${projectsId}${`/tree/${checkvalue}`}${path?`/${path}`:""}`); + props.history.push(`/${owner}/${projectsId}${`/tree/${checkvalue}`}${path?`/${path}`:""}`); } } @@ -254,7 +259,7 @@ function CoderDepot(props){ //点击直接跳转页面 加载一次路由 let enBranch = branchName || defaultBranch; let checkvalue = turnbar(enBranch); - props.history.push(`/projects/${owner}/${projectsId}/tree/${checkvalue}/${path}`); + props.history.push(`/${owner}/${projectsId}/tree/${checkvalue}/${path}`); setType("file"); setEditReadme(true); }; @@ -346,13 +351,13 @@ function CoderDepot(props){ }
    - + {projectDetail && projectDetail.branches && projectDetail.branches.total_count}个分支 - + {projectDetail && projectDetail.tags && projectDetail.tags.total_count}个标签 @@ -364,11 +369,11 @@ function CoderDepot(props){
    { projectDetail.type !== 2 && pullsFlag && - urlLink(`/projects/${owner}/${projectsId}/pulls/new`)} >+ 合并请求 + urlLink(`/${owner}/${projectsId}/pulls/new`)} >+ 合并请求 } { issuesFlag && - urlLink(`/projects/${owner}/${projectsId}/issues/new`)} >+ 任务 + urlLink(`/${owner}/${projectsId}/issues/new`)} >+ 任务 }
    } @@ -396,7 +401,7 @@ function CoderDepot(props){ { hideBtn && changeHide(hide)}> } {lastCommit && lastCommit.time_from_now} - { commitCount ? + { commitCount ? {commitCount}次提交 :"" }
    @@ -454,7 +459,10 @@ function CoderDepot(props){
    简介 - {projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner") && setOpenModal(true)} className="iconfont icon-anquanshezhi color-grey-9 font-15">} + { + projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner" || projectDetail.permission==="Manager") && + setOpenModal(true)} className="iconfont icon-anquanshezhi color-grey-9 font-15"> + } {desc &&

    {desc}

    } { diff --git a/src/forge/Main/CoderDepotCatalogue.jsx b/src/forge/Main/CoderDepotCatalogue.jsx index fae63b3f..3aa5ccc8 100644 --- a/src/forge/Main/CoderDepotCatalogue.jsx +++ b/src/forge/Main/CoderDepotCatalogue.jsx @@ -17,7 +17,7 @@ function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId }){ - + {item.commit && item.commit.message} diff --git a/src/forge/Main/CoderRootBranch.js b/src/forge/Main/CoderRootBranch.js index 8ccc5aa4..3f71d692 100644 --- a/src/forge/Main/CoderRootBranch.js +++ b/src/forge/Main/CoderRootBranch.js @@ -38,9 +38,9 @@ export default ((props)=>{ return(
  • - {item.name} + {item.name}

    - {item.last_commit && truncateCommitId(item.last_commit.sha)} + {item.last_commit && truncateCommitId(item.last_commit.sha)} {item.last_commit && item.last_commit.message} 最后更新于{item.last_commit && item.last_commit.time_from_now}

    @@ -48,7 +48,7 @@ export default ((props)=>{ { (isManager || isDeveloper) && (projectDetail && projectDetail.type!==2) && - 创建合并请求 + 创建合并请求 } diff --git a/src/forge/Main/CoderRootCommit.js b/src/forge/Main/CoderRootCommit.js index b6ca0be6..a715fe74 100644 --- a/src/forge/Main/CoderRootCommit.js +++ b/src/forge/Main/CoderRootCommit.js @@ -101,7 +101,7 @@ class CoderRootCommit extends Component{ // 切换分支 search:tag为根据标签搜索 changeBranch=(value)=>{ const { projectsId , owner } = this.props.match.params; - this.props.history.push(`/projects/${owner}/${projectsId}/commits/branch/${value}`); + this.props.history.push(`/${owner}/${projectsId}/commits/branch/${value}`); } ChangePage=(page)=>{ @@ -141,13 +141,13 @@ class CoderRootCommit extends Component{ return(
    - {truncateCommitId(`${item.sha}`)} - {item.message} + {truncateCommitId(`${item.sha}`)} + {item.message}

    { item.id ? - + {item.image_url?:""} : diff --git a/src/forge/Main/CoderRootFileDetail.js b/src/forge/Main/CoderRootFileDetail.js index f86706e4..fb17098b 100644 --- a/src/forge/Main/CoderRootFileDetail.js +++ b/src/forge/Main/CoderRootFileDetail.js @@ -149,7 +149,7 @@ class CoderRootFileDetail extends Component { .then((result) => { if (result) { this.props.showNotification("删除成功!"); - this.props.history.push(`/projects/${owner}/${projectsId}`); + this.props.history.push(`/${owner}/${projectsId}`); } }) .catch((error) => { diff --git a/src/forge/Main/CoderRootIndex.js b/src/forge/Main/CoderRootIndex.js index 84ab94d3..0fb30c4e 100644 --- a/src/forge/Main/CoderRootIndex.js +++ b/src/forge/Main/CoderRootIndex.js @@ -87,57 +87,57 @@ class CoderRootIndex extends Component{ {/* 新建文件 */} - () } > - () } > - () } > - () } > - () } > - () } > - () } > - () } > - () } > - () } > - () } diff --git a/src/forge/Main/CoderRootTag.js b/src/forge/Main/CoderRootTag.js index a87386d5..da1fa96d 100644 --- a/src/forge/Main/CoderRootTag.js +++ b/src/forge/Main/CoderRootTag.js @@ -49,7 +49,7 @@ export default (( props, { projectDetail }) => { {item.name} - {truncateCommitId(`${item.id}`)} + {truncateCommitId(`${item.id}`)} TAR diff --git a/src/forge/Main/Detail.js b/src/forge/Main/Detail.js index 8128ff48..3303d42c 100644 --- a/src/forge/Main/Detail.js +++ b/src/forge/Main/Detail.js @@ -141,8 +141,8 @@ const WikiEdit = Loadable({ */ function checkPathname(projectsId, owner, pathname) { let name = ""; - if (pathname && pathname !== `/projects/${owner}/${projectsId}`) { - let url = pathname.split(`/projects/${owner}/${projectsId}`)[1]; + if (pathname && pathname !== `/${owner}/${projectsId}`) { + let url = pathname.split(`/${owner}/${projectsId}`)[1]; if (url.indexOf("/about") > -1) { name = "about" } else if (url.indexOf("/issues") > -1 || url.indexOf("Milepost") > 0) { @@ -153,8 +153,8 @@ function checkPathname(projectsId, owner, pathname) { name = "milestones" } else if (url.indexOf("/activity") > -1) { name = "activity" - } else if (url.indexOf("/setting") > -1) { - name = "setting" + } else if (url.indexOf("/settings") > -1) { + name = "settings" } else if (url.indexOf(`/devops`) > -1) { name = "devops" } else if (url.indexOf(`/source`) > -1) { @@ -404,7 +404,7 @@ class Detail extends Component { const url = `/${owner}/${projectsId}/forks.json`; axios.post(url).then(result => { if (result && result.data.status === 0) { - this.props.history.push(`/projects/${current_user && current_user.login}/${result.data.identifier}`); + this.props.history.push(`/${current_user && current_user.login}/${result.data.identifier}`); this.props.showNotification(result.data.message); } this.setState({ @@ -440,9 +440,9 @@ class Detail extends Component { return forked_from_project_id && fork_info ?

    复刻自 - {fork_info.fork_project_user_name} + {fork_info.fork_project_user_name} / - {fork_info.fork_form_name} + {fork_info.fork_form_name}
    : "" } @@ -476,10 +476,10 @@ class Detail extends Component {
    {project && project.author && - {project.author.name} + {project.author.name} } / - {projectDetail && projectDetail.name} + {projectDetail && projectDetail.name}
    {projectDetail && projectDetail.private && 私有}
    @@ -512,7 +512,7 @@ class Detail extends Component { { watchers_count > 0 ? platform ? - + {watchers_count} : @@ -528,7 +528,7 @@ class Detail extends Component { { praises_count > 0 ? platform ? - + {praises_count} : {praises_count} @@ -544,7 +544,7 @@ class Detail extends Component { { forked_count > 0 ? platform ? - + {forked_count} : @@ -583,190 +583,191 @@ class Detail extends Component { {/* 资源 */} - () } > {/* 主页 */} - () } > {/* wiki新增文件 */} - () } > {/* wiki编辑文件 */} - () } > {/* wiki */} - () } > {/* 工作流 */} - () } > {/* 标签列表 */} - () } > {/* 仓库设置 */} - () } > - {/* 任务详情 */} - () - } - > + {/*修改里程碑*/} - () } > {/* 新建里程碑 */} - () } > {/*里程碑详情*/} - () } > {/* 里程碑 */} - () } > {/* 里程碑页面新建任务 */} - () } > {/* 新建任务 */} - () } > {/* 修改详情 */} - () } > {/* 复制详情 */} - () } + > + {/* 任务详情 */} + () + } > {/* 动态 */} - () } > {/* 代码Index */} - () } > {/* 新建合并请求 */} - () } > - () } > - () } > - () } > - () } > - () } > - () } > - () } > - () } > {/* 贡献者列表 */} - () } > {/* 代码库----详情页面 */} - () } > - () } > - () } > - () } diff --git a/src/forge/Main/DetailTop.js b/src/forge/Main/DetailTop.js index 260ff1e6..ecd5ab9f 100644 --- a/src/forge/Main/DetailTop.js +++ b/src/forge/Main/DetailTop.js @@ -12,19 +12,19 @@ class DetailTop extends Component { { platform ? - 0 ? "active" : ""}> + 0 ? "active" : ""}> {(coderCount && coderCount.commits_count) || 0}个提交 - 0 ? "active" : ""}> + 0 ? "active" : ""}> {(coderCount && coderCount.branches_count) || 0}个分支 - 0 ? "active" : ""}> + 0 ? "active" : ""}> {(coderCount && coderCount.tags_count) || 0}个标签 - 0 ? "active" : ""}> + 0 ? "active" : ""}> {(coderCount && coderCount.version_releasesed_count) || 0}个发行版 diff --git a/src/forge/Main/Diff.jsx b/src/forge/Main/Diff.jsx index a6b0b49c..0daa6319 100644 --- a/src/forge/Main/Diff.jsx +++ b/src/forge/Main/Diff.jsx @@ -59,7 +59,7 @@ export default ({ match , history }) => { {commit && commit.message &&
    {commit.message}
    } - +
    diff --git a/src/forge/Main/Index.js b/src/forge/Main/Index.js index e58ec0c0..a08c3d3b 100644 --- a/src/forge/Main/Index.js +++ b/src/forge/Main/Index.js @@ -1,5 +1,4 @@ import React, { Component } from 'react'; -import { Link } from 'react-router-dom'; import { Menu, Input , Spin, Pagination , Popover , Select } from 'antd'; import Slider from "react-slick"; import { getImageUrl } from 'educoder'; @@ -13,6 +12,8 @@ import axios from 'axios'; import img_new from '../Images/new.png'; import img_array from '../Images/array.png'; import banner from '../Images/banner_list.jpg'; +import CheckProfile from '../Component/ProfileModal/Profile'; + const Search = Input.Search; class Index extends Component { @@ -228,7 +229,7 @@ class Index extends Component { } getoDetail=(login,identifier)=>{ - this.props.history.push(`/projects/${login}/${identifier}`); + this.props.history.push(`/${login}/${identifier}`); } // 选择语言类别 @@ -255,8 +256,12 @@ class Index extends Component { newItem = ()=>{ return( - 新建镜像项目 - 新建托管项目 + + {this.props.history.push('/projects/mirror/new')}}>新建镜像项目 + + + {this.props.history.push('/projects/deposit/new')}}>新建托管项目 + ) } diff --git a/src/forge/Main/IndexItem.js b/src/forge/Main/IndexItem.js index fcfa2d2a..2265ac20 100644 --- a/src/forge/Main/IndexItem.js +++ b/src/forge/Main/IndexItem.js @@ -28,14 +28,14 @@ class IndexItem extends Component { : - + }
    - + {item.author.name}/{item.name} { !item.is_public && 私有 } diff --git a/src/forge/Main/sub/Contribute.jsx b/src/forge/Main/sub/Contribute.jsx index f65b4524..76d56dc8 100644 --- a/src/forge/Main/sub/Contribute.jsx +++ b/src/forge/Main/sub/Contribute.jsx @@ -52,7 +52,7 @@ function Contribute(props){
    - {item.name} + {item.name}

    提交{item.contributions}次

    diff --git a/src/forge/Main/sub/DetailBanner.jsx b/src/forge/Main/sub/DetailBanner.jsx index 3c37a730..abce4003 100644 --- a/src/forge/Main/sub/DetailBanner.jsx +++ b/src/forge/Main/sub/DetailBanner.jsx @@ -10,7 +10,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa if(pathname && pathname==="source"){ let a = list.filter(item=>item.menu_name === "resources"); if(a && a.length === 0){ - history.push(`/projects/${owner}/${projectsId}`); + history.push(`/${owner}/${projectsId}`); } } setMenuName(list); @@ -28,7 +28,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa { item.menu_name === "home" &&
  • - + 主页 @@ -37,7 +37,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa { item.menu_name === "code" &&
  • - + 代码库 @@ -47,7 +47,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa item.menu_name === "issues" &&
  • - + 易修 {projectDetail && projectDetail.issues_count ? {projectDetail.issues_count} : ""} @@ -58,7 +58,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa { item.menu_name === "pulls" && projectDetail && parseInt(projectDetail.type) !== 2 && platform ?
  • - + 合并请求 {projectDetail && projectDetail.pull_requests_count ? {projectDetail.pull_requests_count} : ""} @@ -68,7 +68,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa { item.menu_name === "wiki" &&
  • - + Wiki @@ -77,7 +77,8 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa { item.menu_name === "devops" && platform ?
  • - + {/* */} + 工作流(beta版) {projectDetail && projectDetail.ops_count ? {projectDetail.ops_count} : ""} @@ -87,7 +88,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa { // item.menu_name === "resources" && //
  • - // + // // // 资源库 // {projectDetail && projectDetail.source_count ? {projectDetail.source_count} :""} @@ -97,7 +98,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa { item.menu_name === "versions" &&
  • - + 里程碑 {projectDetail && projectDetail.versions_count ? {projectDetail.versions_count} :""} @@ -107,17 +108,17 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa { item.menu_name === "activity" &&
  • - + 动态
  • } { - item.menu_name === "setting" && -
  • - - 0 ? "iconfont icon-cangku color-grey-3 mr5 font-14":"iconfont icon-cangku color-grey-6 font-14 mr5"}> + item.menu_name === "settings" && +
  • + + 0 ? "iconfont icon-cangku color-grey-3 mr5 font-14":"iconfont icon-cangku color-grey-6 font-14 mr5"}> 仓库设置
  • diff --git a/src/forge/Main/sub/Invite.jsx b/src/forge/Main/sub/Invite.jsx index ad2a00bd..61fb40cf 100644 --- a/src/forge/Main/sub/Invite.jsx +++ b/src/forge/Main/sub/Invite.jsx @@ -1,26 +1,15 @@ import React from 'react'; -import { Tooltip , message } from 'antd'; import './sub.scss'; +import CopyTool from '../../Component/CopyTool'; function Invite({code,className}) { - function jsCopy(id) { - const copyEle = document.querySelector(id); // 获取要复制的节点 - const range = document.createRange(); // 创造range - window.getSelection().removeAllRanges(); //清除页面中已有的selection - range.selectNode(copyEle); // 选中需要复制的节点 - window.getSelection().addRange(range); // 执行选中元素 - document.execCommand("Copy"); // 执行copy操作 - message.success('复制成功'); - } return(
    邀请码
    - {code} - 可以通过邀请码邀请成员加入项目
    点击复制邀请码。

    } placement={"bottom"}> - jsCopy("#devitecode")}> -
    + + 可以通过邀请码邀请成员加入项目
    点击复制邀请码。

    } className="ml8 font-16" inputId="devitecode"/>
    ) diff --git a/src/forge/Merge/Commits.jsx b/src/forge/Merge/Commits.jsx index 37c254cc..93e867ae 100644 --- a/src/forge/Merge/Commits.jsx +++ b/src/forge/Merge/Commits.jsx @@ -16,10 +16,10 @@ function Commits({ commits , projectsId , owner }){
    - {truncateCommitId(`${item.sha}`)} + {truncateCommitId(`${item.sha}`)}

    {item.message}

    - 浏览代码 + 浏览代码
    :提交于{item.time_from_now} diff --git a/src/forge/Merge/Files.jsx b/src/forge/Merge/Files.jsx index 40e617c2..82a8638c 100644 --- a/src/forge/Merge/Files.jsx +++ b/src/forge/Merge/Files.jsx @@ -47,7 +47,7 @@ function Files({data,history,owner,projectsId}){ {item.name} - + +{item.addition} -{item.deletion} diff --git a/src/forge/Merge/MergeDetail.js b/src/forge/Merge/MergeDetail.js index a7e2f33e..76c31ba0 100644 --- a/src/forge/Merge/MergeDetail.js +++ b/src/forge/Merge/MergeDetail.js @@ -228,7 +228,7 @@ class MergeDetail extends Component {
    { data && data.issue.user_permission ? - 编辑 + 编辑 : '' }
    @@ -248,8 +248,8 @@ class MergeDetail extends Component {
      -
    • 0 ? "active" : ""}>对话内容
    • -
    • 0 ? "active" : ""}>代码提交
    • +
    • 0 ? "active" : ""}>对话内容
    • +
    • 0 ? "active" : ""}>代码提交
    diff --git a/src/forge/Merge/MergeItem.js b/src/forge/Merge/MergeItem.js index f21cc3f5..884c50fe 100644 --- a/src/forge/Merge/MergeItem.js +++ b/src/forge/Merge/MergeItem.js @@ -62,7 +62,7 @@ class MergeItem extends Component {

    @@ -78,7 +78,7 @@ class MergeItem extends Component {

    {item && item.author_name} @@ -109,7 +109,7 @@ class MergeItem extends Component { item.pull_request_head && {item.is_original @@ -133,7 +133,7 @@ class MergeItem extends Component { item.pull_request_base && {/* {item.is_fork ? item.pull_request_base : `${item.author_name}:${item.pull_request_base}`} */} @@ -156,7 +156,7 @@ class MergeItem extends Component {

  • {item.assign_user_name ? ( {item.assign_user_name} @@ -175,7 +175,7 @@ class MergeItem extends Component { {item.journals_count ? ( {item.journals_count} @@ -196,7 +196,7 @@ class MergeItem extends Component { >
    diff --git a/src/forge/Merge/MergeSubmit.js b/src/forge/Merge/MergeSubmit.js index 8f2275d8..d4b42c3b 100644 --- a/src/forge/Merge/MergeSubmit.js +++ b/src/forge/Merge/MergeSubmit.js @@ -100,7 +100,7 @@ class MergeSubmit extends Component{ width:"10%", render: (text,item) => ( - + @@ -110,7 +110,7 @@ class MergeSubmit extends Component{ title:"SHA", dataIndex: 'sha', render: (text) => ( - {text} + {text} ) },{ title:"备注", diff --git a/src/forge/Merge/MessageCount.js b/src/forge/Merge/MessageCount.js index f3e58657..d1b46b86 100644 --- a/src/forge/Merge/MessageCount.js +++ b/src/forge/Merge/MessageCount.js @@ -361,7 +361,7 @@ class MessageCount extends Component {
    {data.pull_request.is_original ? data.pull_request.fork_project_user : data.issue.project_author_name}: {turnbar(data.pull_request && data.pull_request.head)} @@ -376,7 +376,7 @@ class MessageCount extends Component { {data.issue.project_author_name}:{data.pull_request.base} @@ -386,14 +386,14 @@ class MessageCount extends Component { }
    - + - + {data.issue.author_name} @@ -408,7 +408,7 @@ class MessageCount extends Component { 审查人员: {data.issue.assign_user_name ? ( {data.issue.assign_user_name} @@ -448,7 +448,7 @@ class MessageCount extends Component { type="green" ghost className="ml20" - onClick={()=>{this.props.history.push(`/projects/${owner}/${projectsId}/pulls/${mergeId}/UpdateMerge`);}} + onClick={()=>{this.props.history.push(`/${owner}/${projectsId}/pulls/${mergeId}/UpdateMerge`);}} > 编辑 diff --git a/src/forge/Merge/NewMerge.js b/src/forge/Merge/NewMerge.js index 97df7fb1..956be000 100644 --- a/src/forge/Merge/NewMerge.js +++ b/src/forge/Merge/NewMerge.js @@ -186,7 +186,7 @@ class NewMerge extends Component { // this.ischeckmerge(); let { id ,merge , pull } = this.state; if(type==="pull"){ - this.props.history.push(`/projects/${owner}/${projectsId}/pulls/new/${pull}`) + this.props.history.push(`/${owner}/${projectsId}/pulls/new/${pull}`) this.compareProject(id,value,merge); }else{ this.compareProject(id,pull,value); @@ -208,7 +208,7 @@ class NewMerge extends Component { merge_user_login: is_fork_id ? projects_names[0].project_user_login : undefined } }) - this.props.history.push(`/projects/${login}/${identifier}/pulls/new`); + this.props.history.push(`/${login}/${identifier}/pulls/new`); this.newMergelist(login,identifier); }; diff --git a/src/forge/Merge/merge.js b/src/forge/Merge/merge.js index 2b72cbee..1e1285e4 100644 --- a/src/forge/Merge/merge.js +++ b/src/forge/Merge/merge.js @@ -8,6 +8,7 @@ import MergeItem from "./MergeItem"; import './Index.scss'; import axios from "axios"; +import CheckProfile from '../Component/ProfileModal/Profile'; const Search = Input.Search; /** @@ -212,7 +213,7 @@ class merge extends Component { checkOperation() { const { projectsId,owner } = this.props.match.params; - this.props.history.push(`/projects/${owner}/${projectsId}/pulls/new`); + this.props.history.push(`/${owner}/${projectsId}/pulls/new`); } render() { const { projectsId , owner } = this.props.match.params; @@ -256,9 +257,9 @@ class merge extends Component {
    { data && data.user_admin_or_developer && - this.checkOperation()}> + this.checkOperation()}> + 新建合并请求 - + }
    diff --git a/src/forge/Merge/merge_form.js b/src/forge/Merge/merge_form.js index 3481cc8f..9332d9b8 100644 --- a/src/forge/Merge/merge_form.js +++ b/src/forge/Merge/merge_form.js @@ -165,7 +165,7 @@ class MergeForm extends Component { this.setState({ isSpin: false, }); - this.props.history.push(`/projects/${owner}/${projectsId}/pulls`); + this.props.history.push(`/${owner}/${projectsId}/pulls`); const { getDetail } = this.props; getDetail && getDetail(); } else { @@ -195,7 +195,7 @@ class MergeForm extends Component { isSpin: false, }); this.props.history.push( - `/projects/${owner}/${projectsId}/pulls/${mergeId}/Messagecount` + `/${owner}/${projectsId}/pulls/${mergeId}/Messagecount` ); } else { this.setState({ @@ -287,7 +287,7 @@ class MergeForm extends Component { type="default" className="ml30" onClick={()=>{ - this.props.history.push(merge_type === "new" ? `/projects/${owner}/${projectsId}/pulls` : `/projects/${owner}/${projectsId}/pulls/${mergeId}/detail`) + this.props.history.push(merge_type === "new" ? `/${owner}/${projectsId}/pulls` : `/${owner}/${projectsId}/pulls/${mergeId}/detail`) }} > 取消 diff --git a/src/forge/Merge/no_data.js b/src/forge/Merge/no_data.js index 8ad550ab..d5584797 100644 --- a/src/forge/Merge/no_data.js +++ b/src/forge/Merge/no_data.js @@ -12,7 +12,7 @@ class Nodata extends Component{

    欢迎使用合并请求!

    - 合并请求可以帮助您与他人协作编写代码。在使用之前,请先创建一个 合并请求 + 合并请求可以帮助您与他人协作编写代码。在使用之前,请先创建一个 合并请求
    diff --git a/src/forge/New/Index.js b/src/forge/New/Index.js index 18f2aa9a..aaaab6c8 100644 --- a/src/forge/New/Index.js +++ b/src/forge/New/Index.js @@ -209,17 +209,16 @@ class Index extends Component { user_id:owners_id }).then((result) => { if (result && result.data.id) { - this.setState({ - isSpin: false - }) projectsType && projectsType !== "mirror" && this.props.showNotification(`托管项目创建成功!`); - this.props.history.push(`/projects/${result.data.login}/${result.data.identifier}`); + this.props.history.push(`/${result.data.login}/${result.data.identifier}`); } + this.setState({ + isSpin: false + }) }).catch((error) => { this.setState({ isSpin: false }) - console.log(error); }) } else { this.setState({ diff --git a/src/forge/Newfile/UserSubmitComponent.js b/src/forge/Newfile/UserSubmitComponent.js index 5cba3cf6..65fa7ec2 100644 --- a/src/forge/Newfile/UserSubmitComponent.js +++ b/src/forge/Newfile/UserSubmitComponent.js @@ -86,7 +86,7 @@ class UserSubmitComponent extends Component { const { getTopCount } = this.props; getTopCount && getTopCount(values.branchname); } - let url = `/projects/${owner}/${projectsId}${values.branchname ? `/tree/${turnbar(values.branchname)}`: (branch ? `/tree/${turnbar(branch)}` : "")}`; + let url = `/${owner}/${projectsId}${values.branchname ? `/tree/${turnbar(values.branchname)}`: (branch ? `/tree/${turnbar(branch)}` : "")}`; this.props.history.push(url); } }) @@ -123,7 +123,7 @@ class UserSubmitComponent extends Component { this.setState({ isSpin: false }); if (result.data && result.data.status === 1) { let b = currentBranch || branch; - let url = `/projects/${owner}/${projectsId}${(values.branchname ? `/tree/${turnbar(values.branchname)}` : (b ? `/tree/${turnbar(b)}`:""))}`; + let url = `/${owner}/${projectsId}${(values.branchname ? `/tree/${turnbar(values.branchname)}` : (b ? `/tree/${turnbar(b)}`:""))}`; this.props.history.push(url); this.props.showNotification("文件修改成功!"); } @@ -150,7 +150,7 @@ class UserSubmitComponent extends Component { return (
    - + { - this.props.history.push(`/projects/${owner}/${projectsId}`); + this.props.history.push(`/${owner}/${projectsId}`); }} className="mr20" > diff --git a/src/forge/Notice/Apply.jsx b/src/forge/Notice/Apply.jsx index 3c77edfa..aeacd67a 100644 --- a/src/forge/Notice/Apply.jsx +++ b/src/forge/Notice/Apply.jsx @@ -63,11 +63,11 @@ function Apply(props) { { list.map((i,k)=>{ return( -
  • - +
  • +

    - {i.user && i.user.name} + {i.user && i.user.name} {i.time_ago}

    diff --git a/src/forge/Notice/Index.jsx b/src/forge/Notice/Index.jsx index 02f05a87..3f61688f 100644 --- a/src/forge/Notice/Index.jsx +++ b/src/forge/Notice/Index.jsx @@ -33,7 +33,7 @@ function Index(props){ useEffect(()=>{ if((username && current_user && (current_user.login !== username))){ - props.history.push(`/users/${username}`); + props.history.push(`/${username}`); } },[current_user,username]) @@ -47,14 +47,14 @@ function Index(props){ useEffect(()=>{ if(pathname && username){ - if(pathname === `/users/${username}/notice`){ + if(pathname === `/${username}/notice`){ setMenu("notify"); changeNum(user.undo_messages); } - if(pathname === `/users/${username}/notice/undo`){ + if(pathname === `/${username}/notice/undo`){ setMenu("undo"); } - if(pathname === `/users/${username}/notice/apply`){ + if(pathname === `/${username}/notice/apply`){ setMenu("apply"); } } @@ -84,19 +84,19 @@ function Index(props){
    • - + 通知 {messagesCount ? {messagesCount}:""}
    • - + 接收仓库 {transferCount ? {transferCount}:""}
    • - + 成员申请 {applyCount ? {applyCount}:""} @@ -104,19 +104,19 @@ function Index(props){
    { return ; }} > { return ; }} > { return ; }} diff --git a/src/forge/Notice/Notify.jsx b/src/forge/Notice/Notify.jsx index 761366d3..31373908 100644 --- a/src/forge/Notice/Notify.jsx +++ b/src/forge/Notice/Notify.jsx @@ -44,13 +44,13 @@ function Notify(props){ if(status){ switch(status){ case 'canceled': - return

    取消转移【{project && project.name}】仓库

    + return

    取消转移【{project && project.name}】仓库

    case 'common': - return

    正在将【{project && project.name}】仓库转移给【{owner && owner.name}】

    + return

    正在将【{project && project.name}】仓库转移给【{owner && owner.name}】

    case 'successed': - return

    {project && project.name}】仓库成功转移给【{owner && owner.name}】

    + return

    {project && project.name}】仓库成功转移给【{owner && owner.name}】

    default: - return

    拒绝转移【{project && project.name}】仓库

    + return

    拒绝转移【{project && project.name}】仓库

    } }else{ return "" @@ -62,9 +62,9 @@ function Notify(props){ if(status){ switch(status){ case 'successed': - return

    已通过你加入【{project && project.name}】项目的申请

    + return

    已通过你加入【{project && project.name}】项目的申请

    default: - return

    已拒绝你加入【{project && project.name}】项目的申请

    + return

    已拒绝你加入【{project && project.name}】项目的申请

    } }else{ return "" @@ -80,12 +80,13 @@ function Notify(props){
      { list.map((i,k)=>{ + console.log(i); return( -
    • - +
    • +

      - {i.applied_user && i.applied_user.name} + {i.applied_user && i.applied_user.name} {i.time_ago}

      { i.applied_type === "AppliedProject" ? renderApplyStatus(i.status,i.applied):renderStatus(i.status,i.applied)} diff --git a/src/forge/Notice/UndoEvent.jsx b/src/forge/Notice/UndoEvent.jsx index c8c579dc..18cb6d4a 100644 --- a/src/forge/Notice/UndoEvent.jsx +++ b/src/forge/Notice/UndoEvent.jsx @@ -68,16 +68,16 @@ function UndoEvent(props){ { list.map((i,k)=>{ return( -
    • - +
    • +

      - {i.user && i.user.name} + {i.user && i.user.name} {i.time_ago}

      -

      请求将仓库【{i.project && i.project.name}】 - 转移给【{i.owner && i.owner.name}】,是否接受?

      +

      请求将仓库【{i.project && i.project.name}】 + 转移给【{i.owner && i.owner.name}】,是否接受?

      { i.status === "common" && diff --git a/src/forge/Order/Detail.js b/src/forge/Order/Detail.js index 644a653d..8805004b 100644 --- a/src/forge/Order/Detail.js +++ b/src/forge/Order/Detail.js @@ -85,7 +85,7 @@ class Detail extends Component { }) .then((result) => { if (result) { - this.props.history.push(`/projects/${owner}/${projectsId}/issues`); + this.props.history.push(`/${owner}/${projectsId}/issues`); } }) .catch((error) => { @@ -132,7 +132,7 @@ class Detail extends Component { .then((result) => { if (result) { this.props.history.push( - `/projects/${owner}/${projectsId}/issues/${result.data.issue_id}/copyetail` + `/${owner}/${projectsId}/issues/${result.data.issue_id}/copyetail` ); } }) @@ -207,7 +207,7 @@ class Detail extends Component {
      {data && data.author_name} @@ -269,7 +269,7 @@ class Detail extends Component { 编辑 diff --git a/src/forge/Order/Milepost.js b/src/forge/Order/Milepost.js index ede2d314..5f6efeeb 100644 --- a/src/forge/Order/Milepost.js +++ b/src/forge/Order/Milepost.js @@ -4,6 +4,7 @@ import { Dropdown, Icon, Menu, Pagination, Typography, Popconfirm, Spin } from ' import NoneData from '../Nodata'; import axios from 'axios'; import './order.css'; +import CheckProfile from '../Component/ProfileModal/Profile'; const { Text } = Typography; @@ -187,7 +188,7 @@ class Milepost extends Component {
    { data && data.user_admin_or_member ? - 新的里程碑 + {this.props.history.push(`/${owner}/${projectsId}/milestones/new`)}}>新的里程碑 : '' }
    @@ -204,7 +205,7 @@ class Milepost extends Component {
    - {item.name} + {item.name}
    @@ -228,7 +229,7 @@ class Milepost extends Component {
    - 编辑 + 编辑
    diff --git a/src/forge/Order/MilepostDetail.js b/src/forge/Order/MilepostDetail.js index 30526750..c1c8bdd0 100644 --- a/src/forge/Order/MilepostDetail.js +++ b/src/forge/Order/MilepostDetail.js @@ -2,7 +2,8 @@ import React, { Component } from "react"; import { Link } from 'react-router-dom'; import { Dropdown, Menu, Icon, Pagination, Spin } from 'antd'; import './order.css'; -import { FlexAJ } from '../Component/layout' +import { FlexAJ } from '../Component/layout'; +import CheckProfile from '../Component/ProfileModal/Profile'; import NoneData from '../Nodata'; import OrderItem from './OrderItem'; @@ -113,7 +114,7 @@ class MilepostDetail extends Component { this.setState({ data: result.data, issues: result.data.issues, - search_count: result.data.search_count, + search_count: params.status_type ==="1" ? result.data.open_issues_count : result.data.close_issues_count, isSpin: false }) } @@ -238,8 +239,8 @@ class MilepostDetail extends Component { {data && data.percent && data.percent.toFixed(2)}%完成
    - 编辑里程碑 - 创建易修 + 编辑里程碑 + {this.props.history.push(`/${owner}/${projectsId}/issues/${meilid}/new`)}} className="topWrapper_btn">创建易修
    diff --git a/src/forge/Order/Milepostitem.js b/src/forge/Order/Milepostitem.js index 48bf65c1..d79c66fe 100644 --- a/src/forge/Order/Milepostitem.js +++ b/src/forge/Order/Milepostitem.js @@ -31,7 +31,7 @@ class OrderItem extends Component {
    - {item.name} + {item.name}
    @@ -65,7 +65,7 @@ class OrderItem extends Component {
    - 编辑 + 编辑
    diff --git a/src/forge/Order/Nav.js b/src/forge/Order/Nav.js index 93fbc101..b5d196d6 100644 --- a/src/forge/Order/Nav.js +++ b/src/forge/Order/Nav.js @@ -7,8 +7,8 @@ class Nav extends Component{ const { projectsId , owner } = this.props.match.params; return(

    - 标签 - 里程碑 + 标签 + 里程碑

    ) } diff --git a/src/forge/Order/OrderItem.js b/src/forge/Order/OrderItem.js index 3c5e5cf8..08178864 100644 --- a/src/forge/Order/OrderItem.js +++ b/src/forge/Order/OrderItem.js @@ -44,6 +44,7 @@ class OrderItem extends Component { render() { const { item , checkbox , mile , user_admin_or_member } = this.props; const { projectsId , owner } = this.props.match.params; + const { orderid , isdisplay } = this.state; const { current_user } = this.props; return ( item && @@ -51,7 +52,7 @@ class OrderItem extends Component { {current_user && current_user.login && checkbox}

    - {item.name} + {item.name} {TagInfo(item.priority,"mr10")}

    @@ -67,7 +68,7 @@ class OrderItem extends Component {

  • { item.author_name ? - + {item.author_name} : "--" @@ -76,7 +77,7 @@ class OrderItem extends Component {
  • { item.assign_user_name ? - + {item.assign_user_name} : "--" @@ -88,15 +89,24 @@ class OrderItem extends Component {
  • {item.done_ratio || "--"}
  • - {item.journals_count} + {item.journals_count} { user_admin_or_member ? -
    +
    - + + +
    - document.getElementById("hoverBox")} title={'您确定要删除当前易修吗?'} okText="是" cancelText="否" onConfirm={() => this.deletedetail(item.id)}> + this.deletedetail(item.id)} + >
    diff --git a/src/forge/Order/UpdateMilepost.js b/src/forge/Order/UpdateMilepost.js index 88a73033..c4f38657 100644 --- a/src/forge/Order/UpdateMilepost.js +++ b/src/forge/Order/UpdateMilepost.js @@ -79,7 +79,7 @@ class UpdateMilepost extends Component { }).then(result => { if (result) { this.setState({ isSpin: false }) - this.props.history.push(`/projects/${owner}/${projectsId}/milestones`); + this.props.history.push(`/${owner}/${projectsId}/milestones`); } diff --git a/src/forge/Order/newMilepost.js b/src/forge/Order/newMilepost.js index b9513212..b7d1102d 100644 --- a/src/forge/Order/newMilepost.js +++ b/src/forge/Order/newMilepost.js @@ -63,7 +63,7 @@ class NewMilepost extends Component { }).then(result => { if (result) { this.setState({ isSpin: false }) - this.props.history.push(`/projects/${owner}/${projectsId}/milestones`); + this.props.history.push(`/${owner}/${projectsId}/milestones`); const { getDetail } = this.props; getDetail && getDetail(); } diff --git a/src/forge/Order/order.css b/src/forge/Order/order.css index 6a0f029e..0abd116f 100644 --- a/src/forge/Order/order.css +++ b/src/forge/Order/order.css @@ -20,6 +20,9 @@ .overlayBox{ width: 230px; } +.hideOverlay{ + display: none; +} .topmilepost { box-sizing: border-box; display: flex; diff --git a/src/forge/Order/order.js b/src/forge/Order/order.js index 1202f41f..290bb03e 100644 --- a/src/forge/Order/order.js +++ b/src/forge/Order/order.js @@ -1,12 +1,12 @@ import React, { Component } from "react"; import { Input, Dropdown, Menu, Icon, Pagination, Spin, DatePicker, Checkbox } from "antd"; -import { Link } from 'react-router-dom'; import "./order.css"; import './index.scss'; import moment from 'moment'; import NoneData from "../Nodata"; import OrderItem from "./OrderItem"; +import CheckProfile from '../Component/ProfileModal/Profile'; import axios from "axios"; @@ -351,9 +351,9 @@ class order extends Component { if(data && data.user_admin_or_member){ const { projectsId , owner } = this.props.match.params; return( - + {window.open(`/${owner}/${projectsId}/issues/new`,'_blank')}}> + 创建易修 - + ) } } diff --git a/src/forge/Order/order_form.js b/src/forge/Order/order_form.js index b6f065b2..6515dde8 100644 --- a/src/forge/Order/order_form.js +++ b/src/forge/Order/order_form.js @@ -165,7 +165,7 @@ class order_form extends Component { }).then((result) => { if (result && result.data.id) { this.props.showNotification("任务创建成功!"); - this.props.history.push(`/projects/${owner}/${projectsId}/issues/${result.data.id}/detail`); + this.props.history.push(`/${owner}/${projectsId}/issues/${result.data.id}`); this.setState({ description: "", isSpin: false, @@ -191,7 +191,7 @@ class order_form extends Component { ...values, }).then((result) => { if (result) { - this.props.history.push(`/projects/${owner}/${projectsId}/issues/${orderId}/detail`); + this.props.history.push(`/${owner}/${projectsId}/issues/${orderId}`); this.props.showNotification("任务更新成功!"); const { getDetail } = this.props; getDetail && getDetail(); @@ -371,7 +371,7 @@ class order_form extends Component { type="default" className="ml30" onClick={()=> - this.props.history.push(form_type === "new" ? `/projects/${owner}/${projectsId || orderId}/issues` : `/projects/${owner}/${projectsId}/issues/${orderId}/detail`)} + this.props.history.push(form_type === "new" ? `/${owner}/${projectsId || orderId}/issues` : `/${owner}/${projectsId}/issues/${orderId}`)} > 取消 diff --git a/src/forge/SecuritySetting/Index.jsx b/src/forge/SecuritySetting/Index.jsx index e314c66a..d9d4e49c 100644 --- a/src/forge/SecuritySetting/Index.jsx +++ b/src/forge/SecuritySetting/Index.jsx @@ -18,6 +18,10 @@ const SSHNew = Loadable({ loader: () => import("./sub/New"), loading: Loading, }); +const Profile = Loadable({ + loader: () => import("../users/Material/Index"), + loading: Loading, +}); const SSHIndex = Loadable({ loader: () => import("./sub/SSH"), loading: Loading, @@ -35,6 +39,10 @@ function Index(props){ {current_user && current_user.username}
    +
      +
    • 个人信息
    • +
    • -1 ?"active":""}>基本资料
    • +
    • 安全设置
    • -1 ?"active":""}>SSH密钥
    • @@ -49,6 +57,12 @@ function Index(props){ )} > + ( + + )} + > ( diff --git a/src/forge/SecuritySetting/Index.scss b/src/forge/SecuritySetting/Index.scss index 664ed7ab..f533f053 100644 --- a/src/forge/SecuritySetting/Index.scss +++ b/src/forge/SecuritySetting/Index.scss @@ -36,6 +36,8 @@ .securityUl{ padding:20px 16px; color: #333; + margin-bottom: 0px; + padding-bottom: 0px; li{ margin-bottom: 10px; height: 27px; @@ -122,50 +124,6 @@ } } } -.deleteBox{ - .ant-modal-header{ - background-color: rgba(223, 0, 2, 0.06); - border-bottom: none; - .ant-modal-title{ - text-align: left; - font-size: 20px; - } - } - .ant-modal-body{ - padding:30px 50px; - p{ - font-size: 16px; - line-height: 26px; - color:#666 - } - .desc{ - .descMain{ - align-items: center; - justify-content: center; - font-size: 20px; - margin-bottom: 10px; - i{ - font-size: 38px!important; - color:#DF0002 - } - } - } - } - .ant-modal-footer{ - border-top: none; - text-align: center; - padding-bottom: 40px; - button{ - width: 120px; - margin:0px 20px; - &.ant-btn-danger{ - background-color: #fff; - color: #DF0002; - border-color: #D0D0D0; - } - } - } -} .descModal{ .ant-modal-title{ text-align: left; diff --git a/src/forge/SecuritySetting/sub/DeleteBox.jsx b/src/forge/SecuritySetting/sub/DeleteBox.jsx index af8b6418..02d816b3 100644 --- a/src/forge/SecuritySetting/sub/DeleteBox.jsx +++ b/src/forge/SecuritySetting/sub/DeleteBox.jsx @@ -1,17 +1,16 @@ import React from 'react'; import { AlignCenter } from '../../Component/layout'; -import { Modal , Button } from 'antd'; +import Modals from '../../Component/PublicModal/Index'; +import { Button } from 'antd'; function DeleteBox({ visible , onCancel ,onSuccess }) { return( - @@ -19,10 +18,11 @@ function DeleteBox({ visible , onCancel ,onSuccess }) { } >
      - 您确定要删除此 SSH 密钥吗? -

      此操作将永久删除该SSH密钥,且不可恢复。如果您想再次使用该密钥,则需要您重新上传。

      + + 您确定要删除此 SSH 密钥吗? +

      此操作将永久删除该SSH密钥,且不可恢复。如果您想再次使用该密钥,则需要您重新上传。

      -
      + ) } export default DeleteBox; \ No newline at end of file diff --git a/src/forge/Settings/Branch.js b/src/forge/Settings/Branch.js index d345f0fc..3e19f37e 100644 --- a/src/forge/Settings/Branch.js +++ b/src/forge/Settings/Branch.js @@ -88,7 +88,7 @@ export default ((props)=>{ // 跳转 function settingRule(protectBranch){ - props.history.push(`/projects/${owner}/${projectsId}/setting/branch/${protectBranch}`); + props.history.push(`/${owner}/${projectsId}/settings/branches/${protectBranch}`); } // 翻页 diff --git a/src/forge/Settings/BranchRule.jsx b/src/forge/Settings/BranchRule.jsx index d15ecd00..85b9bf20 100644 --- a/src/forge/Settings/BranchRule.jsx +++ b/src/forge/Settings/BranchRule.jsx @@ -290,7 +290,7 @@ export default Form.create()( { - history.push(`/projects/${owner}/${projectsId}/setting/branch`); + history.push(`/${owner}/${projectsId}/settings/branches`); }} > 取消 diff --git a/src/forge/Settings/CollaboratorGroup.jsx b/src/forge/Settings/CollaboratorGroup.jsx index 4836d3e6..5c38b1aa 100644 --- a/src/forge/Settings/CollaboratorGroup.jsx +++ b/src/forge/Settings/CollaboratorGroup.jsx @@ -78,7 +78,7 @@ function CollaboratorGroup({ newGroupId, owner, projectsId , setAddOperation }) dataIndex: "name", render: (value, item) => { if(item.is_admin || item.is_member){ - return {value}; + return {value}; }else{ return {value}; } diff --git a/src/forge/Settings/CollaboratorMember.jsx b/src/forge/Settings/CollaboratorMember.jsx index 1104a864..447e3b26 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 render: (text, item) => ( ( - + {text} ), diff --git a/src/forge/Settings/Index.js b/src/forge/Settings/Index.js index c8fd2f1e..3ebb5b49 100644 --- a/src/forge/Settings/Index.js +++ b/src/forge/Settings/Index.js @@ -49,25 +49,25 @@ class Index extends Component { const { projectsId , owner } = this.props.match.params; const { pathname } = this.props.history.location; - const flag = pathname === `/projects/${owner}/${projectsId}/setting`; + const flag = pathname === `/${owner}/${projectsId}/settings`; return (
      • - + 基本设置

      • -1 ? "active" : "" + pathname.indexOf("settings/collaborators") > -1 ? "active" : "" } >

        - + 协作者管理 @@ -75,11 +75,11 @@ class Index extends Component {

      • -1 ? "active" : "" + pathname.indexOf("settings/webhooks") > -1 ? "active" : "" } >

        - + Webhooks @@ -87,21 +87,21 @@ class Index extends Component {

      • -1 ? "active" : "" + pathname.indexOf("settings/branch") > -1 ? "active" : "" } >

        - + 分支设置

      • -1 ? "active" : ""} + className={pathname.indexOf("settings/labels") > -1 ? "active" : ""} >

        - + 项目标签 @@ -110,7 +110,7 @@ class Index extends Component { {/*

      • -1 ? "active" : "" + pathname.indexOf("settings/manage") > -1 ? "active" : "" } >

        @@ -127,64 +127,64 @@ class Index extends Component { {/* webhooks */} ( )} > ( )} > ( )} > {/* 协作者 */} ( )} > {/* 修改仓库信息 */} ( )} > ( )} > ( )} > ( )} > ( )} > {/* 修改仓库信息 */} ( )} diff --git a/src/forge/Settings/Setting.js b/src/forge/Settings/Setting.js index e4ec2766..c3150323 100644 --- a/src/forge/Settings/Setting.js +++ b/src/forge/Settings/Setting.js @@ -179,11 +179,9 @@ class Setting extends Component { content: 该操作无法撤销!且将会一并删除相关的易修、合并请求、工作流、里程碑、动态等数据。
        是否确认删除 {owner}/{projectName}({projectsId})
        , onOk: () => { const url = `/${owner}/${projectsId}.json`; - axios - .delete(url) - .then((result) => { + axios.delete(url).then((result) => { this.props.showNotification("仓库删除成功!"); - this.props.history.push("/projects"); + this.props.history.push(`/${owner}`); }) .catch((error) => { console.log(error); @@ -223,10 +221,14 @@ class Setting extends Component { } // 确定转移仓库 onSuccess=(owner)=>{ + if(owner){ + this.setState({ + is_transfering:true, + transfer:owner + }) + } this.setState({ - is_transfering:true, - divertVisible:false, - transfer:owner + divertVisible:false }) } @@ -351,7 +353,7 @@ class Setting extends Component { { is_transfering ? 此仓库正在转移给【 - {transfer && {transfer.name}} + {transfer && {transfer.name}} 】,请联系对方接收此仓库。 : `将此仓库转移给其他用户或组织` diff --git a/src/forge/Settings/Webhooks/Index.jsx b/src/forge/Settings/Webhooks/Index.jsx index c6992243..57df13b4 100644 --- a/src/forge/Settings/Webhooks/Index.jsx +++ b/src/forge/Settings/Webhooks/Index.jsx @@ -62,7 +62,7 @@ function Index(props) { if(total >= 20){ return props.showNotification("webhooks数量已到上限!请删除暂不使用的webhooks以进行添加操作"); } - props.history.push(`/projects/${owner}/${projectsId}/setting/webhooks/new`) + props.history.push(`/${owner}/${projectsId}/settings/webhooks/new`) } return( @@ -90,9 +90,9 @@ function Index(props) { return( - {i.url} + {i.url} - + diff --git a/src/forge/Settings/Webhooks/New.jsx b/src/forge/Settings/Webhooks/New.jsx index 0dedaa83..d90934f0 100644 --- a/src/forge/Settings/Webhooks/New.jsx +++ b/src/forge/Settings/Webhooks/New.jsx @@ -111,7 +111,7 @@ function New({ form , match , showNotification , history }) { }).then(result=>{ if(result){ showNotification("webhook更新成功!"); - history.push(`/projects/${owner}/${projectsId}/setting/webhooks`); + history.push(`/${owner}/${projectsId}/settings/webhooks`); } }).catch(error=>{}) }else{ @@ -125,7 +125,7 @@ function New({ form , match , showNotification , history }) { }).then(result=>{ if(result && result.data && result.data.id){ showNotification("webhook新建成功!"); - history.push(`/projects/${owner}/${projectsId}/setting/webhooks`); + history.push(`/${owner}/${projectsId}/settings/webhooks`); } }).catch(error=>{}) } @@ -157,7 +157,7 @@ function New({ form , match , showNotification , history }) { axios.delete(url).then(result=>{ if(result){ showNotification("webhook删除成功!"); - history.push(`/projects/${owner}/${projectsId}/setting/webhooks`); + history.push(`/${owner}/${projectsId}/settings/webhooks`); } }).catch(error=>{}) } @@ -180,7 +180,7 @@ function New({ form , match , showNotification , history }) { subTitle={`删除后未来事件将不会推送至此Webhook地址:${data && data.url}`} /> - Webhooks + Webhooks {id ? "更新" : "添加"}Webhook diff --git a/src/forge/Source/Index.jsx b/src/forge/Source/Index.jsx index 8ba92587..e158d7fb 100644 --- a/src/forge/Source/Index.jsx +++ b/src/forge/Source/Index.jsx @@ -217,7 +217,7 @@ function Index(props){ data.map((item,key)=>{ return(

      • - +
        diff --git a/src/forge/Team/Group/GroupDetailProject.jsx b/src/forge/Team/Group/GroupDetailProject.jsx index 0c843f0a..20284c9f 100644 --- a/src/forge/Team/Group/GroupDetailProject.jsx +++ b/src/forge/Team/Group/GroupDetailProject.jsx @@ -31,7 +31,7 @@ export default (({projects}) => { return (
        - {item.project.name} + {item.project.name}
        ) }) diff --git a/src/forge/Team/Group/GroupDetailSetting.jsx b/src/forge/Team/Group/GroupDetailSetting.jsx index fa060ee3..168ba6ff 100644 --- a/src/forge/Team/Group/GroupDetailSetting.jsx +++ b/src/forge/Team/Group/GroupDetailSetting.jsx @@ -26,18 +26,18 @@ export default (props)=>{ function returnActive (pathname){ let a = 0; - if(pathname === `/organize/${OIdentifier}/group/${groupId}/setting/member`){ + if(pathname === `/${OIdentifier}/teams/${groupId}/setting/member`){ a = 1; - }else if(pathname === `/organize/${OIdentifier}/group/${groupId}/setting/project`){ + }else if(pathname === `/${OIdentifier}/teams/${groupId}/setting/project`){ a = 2; } return a; } const active = returnActive(pathname); const array = {list:[ - {name:'基本设置',icon:"icon-base",href:`/organize/${OIdentifier}/group/${groupId}/setting`}, - {name:'团队成员管理',icon:"icon-zuzhichengyuan",href:`/organize/${OIdentifier}/group/${groupId}/setting/member`}, - {name:'团队项目管理',icon:"icon-zuzhixiangmu",href:`/organize/${OIdentifier}/group/${groupId}/setting/project`}, + {name:'基本设置',icon:"icon-base",href:`/${OIdentifier}/teams/${groupId}/setting`}, + {name:'团队成员管理',icon:"icon-zuzhichengyuan",href:`/${OIdentifier}/teams/${groupId}/setting/member`}, + {name:'团队项目管理',icon:"icon-zuzhixiangmu",href:`/${OIdentifier}/teams/${groupId}/setting/project`}, ], active } @@ -51,19 +51,19 @@ export default (props)=>{ ( )} > ( )} > ( )} diff --git a/src/forge/Team/Group/GroupDetails.jsx b/src/forge/Team/Group/GroupDetails.jsx index 75183f35..ba569386 100644 --- a/src/forge/Team/Group/GroupDetails.jsx +++ b/src/forge/Team/Group/GroupDetails.jsx @@ -87,9 +87,9 @@ export default ((props) => { if (username) { const url = `/organizations/${OIdentifier}/teams/${groupId}/team_users/quit.json`; axios.delete(url).then((result) => { - if (result && result.data) { + if (result && result.message==='success') { props.showNotification(`已成功退出团队!`); - props.history.push(`/organize/${OIdentifier}`); + props.history.push(`/${username}`); } }).catch((error) => { }); } @@ -119,7 +119,7 @@ export default ((props) => {

        管理员团队对 所有仓库 具有操作权限,且对组织具有 管理员权限

        此外,该团队拥有了 创建仓库 的权限:成员可以在组织中创建新的仓库。

        - {group.is_admin ? : ""} + {group.is_admin ? : ""}
        : diff --git a/src/forge/Team/Group/GroupForm.jsx b/src/forge/Team/Group/GroupForm.jsx index 3e5407ad..dad9b64b 100644 --- a/src/forge/Team/Group/GroupForm.jsx +++ b/src/forge/Team/Group/GroupForm.jsx @@ -90,7 +90,7 @@ export default Form.create()( }).then(result => { if (result && result.data) { showNotification("基本设置更新成功!"); - history.push(`/organize/${OIdentifier}/group/${groupId}`); + history.push(`/${OIdentifier}/teams/${groupId}`); } }).catch(error => { }) } else { @@ -101,7 +101,7 @@ export default Form.create()( }).then(result => { if (result && result.data) { showNotification("团队创建成功!"); - history.push(`/organize/${OIdentifier}/group/${result.data.id}`); + history.push(`/${OIdentifier}/teams/${result.data.id}`); } }).catch(error => { }) } @@ -154,9 +154,9 @@ export default Form.create()( function cancelEdit(){ if(groupId){ - history.push(`/organize/${OIdentifier}/group/${groupId}`); + history.push(`/${OIdentifier}/teams/${groupId}`); }else{ - history.push(`/organize/${OIdentifier}`); + history.push(`/${OIdentifier}`); } } diff --git a/src/forge/Team/Group/Setting/GroupMemberSetting.jsx b/src/forge/Team/Group/Setting/GroupMemberSetting.jsx index a0d8ec78..998e7339 100644 --- a/src/forge/Team/Group/Setting/GroupMemberSetting.jsx +++ b/src/forge/Team/Group/Setting/GroupMemberSetting.jsx @@ -87,7 +87,7 @@ export default ((props) => { align: "center", render: (value, item) => { return ( - {item.user.name} + {item.user.name} ) } }, diff --git a/src/forge/Team/Group/Setting/GroupProjectSetting.jsx b/src/forge/Team/Group/Setting/GroupProjectSetting.jsx index 1762a864..9a4f3958 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/Index.jsx b/src/forge/Team/Index.jsx index fd4afedf..1a3bfde9 100644 --- a/src/forge/Team/Index.jsx +++ b/src/forge/Team/Index.jsx @@ -26,39 +26,16 @@ const SubDetailIndex = Loadable({ loader: () => import("./Sub/SubDetail"), loading: Loading, }); +// forge项目详情 +const ProjectDetail = Loadable({ + loader: () => import("../Main/Detail"), + loading: Loading, +}); export default withRouter(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC( ((props)=>{ return (
        - {/* 组织团队-设置 */} - { - return - }} - > - {/* 组织团队-新建 */} - { - return - }} - > - {/* 组织团队-子级(包含组织团队列表) */} - { - return - }} - > - {/* 组织成员 */} - { - return - }} - > {/* 新建组织 */} }} > + {/* 组织团队-新建 */} + { + return + }} + > + {/* 组织团队-设置 */} + { + return + }} + > + {/* 组织团队-子级(包含组织团队列表) */} + { + return + }} + > + {/* 组织成员 */} + { + return + }} + > + + {/* 组织详情(包含组织设置) */} ( + + )} + > + + {/* 组织下的项目详情 */} + ( + + )} + > + + {/* 组织详情(包含组织设置) */} + ( )} diff --git a/src/forge/Team/List.jsx b/src/forge/Team/List.jsx index 8cf96587..7e64c5de 100644 --- a/src/forge/Team/List.jsx +++ b/src/forge/Team/List.jsx @@ -6,6 +6,7 @@ import './Index.scss'; import Item from './ListItem'; import Right from './RightBox'; import NoData from '../Nodata'; +import CheckProfile from '../Component/ProfileModal/Profile'; import { Menu , Pagination , Dropdown , Spin } from 'antd'; import axios from 'axios'; @@ -61,8 +62,12 @@ function List(props){ ) const menu_new=( - 新建托管项目 - 新建镜像项目 + + {props.history.push(`/projects/deposit/new/${OIdentifier}`)}}>新建托管项目 + + + {props.history.push(`/projects/mirror/new/${OIdentifier}`)}}>新建镜像项目 + ) @@ -106,7 +111,13 @@ function List(props){
        }
    - +
    ) } diff --git a/src/forge/Team/ListItem.jsx b/src/forge/Team/ListItem.jsx index 3c2cf3f4..a908f80b 100644 --- a/src/forge/Team/ListItem.jsx +++ b/src/forge/Team/ListItem.jsx @@ -7,7 +7,7 @@ function ListItem({item,key,OIdentifier}) {

    - {item.name} + {item.name} { item.forked_from_project_id && } { item.type && item.type !== 0 ? diff --git a/src/forge/Team/New.jsx b/src/forge/Team/New.jsx index 1f06dc22..414a8d15 100644 --- a/src/forge/Team/New.jsx +++ b/src/forge/Team/New.jsx @@ -49,7 +49,7 @@ export default Form.create()( }).then(result=>{ if(result && result.data){ showNotification("组织创建成功!"); - history.push(`/organize/${result.data.name}`); + history.push(`/${result.data.name}`); } }).catch(error=>{}) } diff --git a/src/forge/Team/RightBox.jsx b/src/forge/Team/RightBox.jsx index daa339f2..7616fd6c 100644 --- a/src/forge/Team/RightBox.jsx +++ b/src/forge/Team/RightBox.jsx @@ -1,5 +1,4 @@ import React , { useEffect , useState } from 'react'; -import { Button } from 'antd'; import styled from 'styled-components'; import Box from './Box'; import axios from 'axios'; @@ -7,6 +6,8 @@ import { getImageUrl } from 'educoder'; import { Link } from 'react-router-dom'; import Nodata from '../Nodata'; +import CheckProfile from '../Component/ProfileModal/Profile'; + const Span = styled.span`{ color:#888; font-size:12px; @@ -36,7 +37,7 @@ const Img = styled.img`{ height:45px; margin-right:12px; }` -function RightBox({ OIdentifier , history , admin }) { +function RightBox({ OIdentifier , history , admin , showCompeleteDialog ,completeProfile }) { const [ memberData, setMemberData ] = useState(undefined); const [ groupData, setGroupData ] = useState(undefined); @@ -67,14 +68,14 @@ function RightBox({ OIdentifier , history , admin }) {

    { memberData && memberData.organization_users && memberData.organization_users.length>0 ? - + { memberData.organization_users.map((item,key)=>{ return(
    - +
    - {item.user && item.user.name} + {item.user && item.user.name} 加入时间:{item.created_at}
    @@ -87,8 +88,16 @@ function RightBox({ OIdentifier , history , admin }) { history.push(`/organize/${OIdentifier}/group/new`)}>新建团队} - url={`/organize/${OIdentifier}/group`} + bottom={ + admin && + history.push(`/${OIdentifier}/teams/new`)} + className={"ant-btn ant-btn-primary"} + >新建团队 + } + url={`/${OIdentifier}/teams`} > { groupData && groupData.teams && groupData.teams.length>0? @@ -99,7 +108,7 @@ function RightBox({ OIdentifier , history , admin }) {
    { (item.is_admin || item.is_member) ? - {item.name} + {item.name} : {item.name} } diff --git a/src/forge/Team/Setting/TeamSettingCommon.jsx b/src/forge/Team/Setting/TeamSettingCommon.jsx index e52361ad..5bab8f53 100644 --- a/src/forge/Team/Setting/TeamSettingCommon.jsx +++ b/src/forge/Team/Setting/TeamSettingCommon.jsx @@ -62,7 +62,7 @@ export default Form.create()( showNotification("组织信息更新成功!"); if(values.name !== organizeDetail.name){ console.log("false111"); - history.push(`/organize/${values.name}/setting`); + history.push(`/${values.name}/setting`); } updateFunc && updateFunc(values.name,values.description); } @@ -92,7 +92,7 @@ export default Form.create()( }).then(result=>{ if(result && result.data){ // 删除后跳转到个人中心的组织页面 - history.push(`/users/${current_user && current_user.login}/organizes`); + history.push(`/${current_user && current_user.login}/organizes`); } }) setVisible(false); diff --git a/src/forge/Team/Setting/TeamSettingGroup.jsx b/src/forge/Team/Setting/TeamSettingGroup.jsx index 006d579c..8ebdb4af 100644 --- a/src/forge/Team/Setting/TeamSettingGroup.jsx +++ b/src/forge/Team/Setting/TeamSettingGroup.jsx @@ -3,11 +3,11 @@ import { WhiteBack , Banner } from '../../Component/layout'; import GroupItems from '../TeamGroupItems'; const limit = 8; -function TeamSettingGroup({organizeDetail,history}){ +function TeamSettingGroup({organizeDetail,history,current_user}){ return( 组织团队管理 - + ) } diff --git a/src/forge/Team/Setting/TeamSettingIndex.jsx b/src/forge/Team/Setting/TeamSettingIndex.jsx index 718f5b5f..462a92d1 100644 --- a/src/forge/Team/Setting/TeamSettingIndex.jsx +++ b/src/forge/Team/Setting/TeamSettingIndex.jsx @@ -30,21 +30,21 @@ export default (( props )=>{ function returnActive (pathname){ let a = 0; - if(pathname === `/organize/${OIdentifier}/setting/member`){ + if(pathname === `/${OIdentifier}/setting/member`){ a = 1; - }else if(pathname === `/organize/${OIdentifier}/setting/group`){ + }else if(pathname === `/${OIdentifier}/setting/group`){ a = 2; - }else if(pathname === `/organize/${OIdentifier}/setting/hooks`){ + }else if(pathname === `/${OIdentifier}/setting/hooks`){ a = 3; } return a; } const active = returnActive(pathname); const array = {list:[ - {name:'基本设置',icon:"icon-base",href:`/organize/${OIdentifier}/setting`}, - {name:'组织成员管理',icon:"icon-zuzhichengyuan",href:`/organize/${OIdentifier}/setting/member`}, - {name:'组织团队管理',icon:"icon-zuzhixiangmu",href:`/organize/${OIdentifier}/setting/group`}, - // {name:'管理web钩子',icon:"icon-zhongqingdianxinicon10",href:`/organize/${OIdentifier}/setting/hooks`} + {name:'基本设置',icon:"icon-base",href:`/${OIdentifier}/setting`}, + {name:'组织成员管理',icon:"icon-zuzhichengyuan",href:`/${OIdentifier}/setting/member`}, + {name:'组织团队管理',icon:"icon-zuzhixiangmu",href:`/${OIdentifier}/setting/group`}, + // {name:'管理web钩子',icon:"icon-zhongqingdianxinicon10",href:`/${OIdentifier}/setting/hooks`} ], active } @@ -58,25 +58,25 @@ export default (( props )=>{
    ( )} > ( )} > ( )} > ( )} diff --git a/src/forge/Team/Setting/TeamSettingMember.jsx b/src/forge/Team/Setting/TeamSettingMember.jsx index 34f0e28e..1ead66e9 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 && ) } }, @@ -73,7 +73,7 @@ export default (({organizeDetail})=>{ dataIndex: 'user', width:"15%", render:(value,item)=>{ - return {value && value.name} + return {value && value.name} } }, { diff --git a/src/forge/Team/Sub/Detail.jsx b/src/forge/Team/Sub/Detail.jsx index 6e048a05..f591c864 100644 --- a/src/forge/Team/Sub/Detail.jsx +++ b/src/forge/Team/Sub/Detail.jsx @@ -38,12 +38,12 @@ function Detail(props){ // 设置页面:顶部不需要设置按钮了 useEffect(()=>{ if(pathname){ - if(pathname.indexOf(`/organize/${OIdentifier}/setting`)>-1){ + if(pathname.indexOf(`/${OIdentifier}/setting`)>-1){ setFlag(false); }else{ setFlag(true); } - if(pathname.indexOf(`/organize/${OIdentifier}/group`)>-1 || pathname.indexOf(`/organize/${OIdentifier}/member`)>-1){ + if(pathname.indexOf(`/${OIdentifier}/teams`)>-1 || pathname.indexOf(`/${OIdentifier}/members`)>-1){ setButtonflagFlag(true); }else{ setButtonflagFlag(false); @@ -77,19 +77,19 @@ function Detail(props){ { detail && {flag && !buttonflag && detail.is_admin ? - 设置 + 设置 :""} {buttonflag && - 组织成员{detail.num_users && {detail.num_users}} - 组织团队{detail.num_teams &&{detail.num_teams}} + 组织成员{detail.num_users && {detail.num_users}} + 组织团队{detail.num_teams &&{detail.num_teams}} } @@ -112,33 +112,33 @@ function Detail(props){ {/* 组织团队-详情 */} { return }} > {/* 组织成员 */} { return }} > {/* 组织团队 */} { return }} > { return }} > { return }} diff --git a/src/forge/Team/Sub/SubDetail.jsx b/src/forge/Team/Sub/SubDetail.jsx index 7b653c55..b4f1d036 100644 --- a/src/forge/Team/Sub/SubDetail.jsx +++ b/src/forge/Team/Sub/SubDetail.jsx @@ -22,7 +22,7 @@ export default ((props)=>{ // 设置页面:顶部不需要设置按钮了 useEffect(()=>{ if(pathname){ - if(pathname.indexOf(`/organize/${OIdentifier}/group/${groupId}/setting`)>-1){ + if(pathname.indexOf(`/${OIdentifier}/teams/${groupId}/setting`)>-1){ setFlag(false); }else{ setFlag(true); @@ -48,19 +48,19 @@ export default ((props)=>{
    - {OIdentifier} + {OIdentifier} {detail ? detail.name : "新建团队"}
    { detail && - 组织成员{detail.num_users && {detail.num_users}} - 组织团队{detail.num_teams &&{detail.num_teams}} + 组织成员{detail.num_users && {detail.num_users}} + 组织团队{detail.num_teams &&{detail.num_teams}} } desc={!flag && detail.description} @@ -69,7 +69,7 @@ export default ((props)=>{ {/* 组织团队-设置 */} { return }} diff --git a/src/forge/Team/TeamGroup.jsx b/src/forge/Team/TeamGroup.jsx index 38725e7d..1920caed 100644 --- a/src/forge/Team/TeamGroup.jsx +++ b/src/forge/Team/TeamGroup.jsx @@ -3,11 +3,11 @@ import { Banner } from '../Component/layout'; import GroupItems from './TeamGroupItems'; const limit = 14; -function TeamGroup({organizeDetail,history}){ +function TeamGroup({organizeDetail,history,current_user}){ return(
    组织团队 - +
    ) } diff --git a/src/forge/Team/TeamGroupItems.jsx b/src/forge/Team/TeamGroupItems.jsx index f3f5b876..5a955818 100644 --- a/src/forge/Team/TeamGroupItems.jsx +++ b/src/forge/Team/TeamGroupItems.jsx @@ -17,7 +17,7 @@ const ImgContent = styled.img`{ border-radius:50%; margin:5px 10px; }` -function TeamGroupItems({organizeDetail,limit, count , history}){ +function TeamGroupItems({organizeDetail,limit, count , history ,current_user}){ const [ page , setPage ] = useState(1); const [ isSpin , setIsSpin ] = useState(true); const [ total , setTotal ] = useState(0); @@ -48,12 +48,13 @@ function TeamGroupItems({organizeDetail,limit, count , history}){ axios.delete(url).then(result =>{ if(result && result.data){ getData(); + history.push(`/${current_user && current_user.login}`); } }).catch(error=>{}) } // 团队设置 function toGroupSetting(id){ - history.push(`/organize/${organizeDetail && organizeDetail.name}/group/${id}/setting`); + history.push(`/${organizeDetail && organizeDetail.name}/teams/${id}/setting`); } // 解散团队 function disMissGroup(id){ @@ -77,7 +78,7 @@ function TeamGroupItems({organizeDetail,limit, count , history}){

    { (item.is_admin || item.is_member) ? - {item.nickname} + {item.nickname} : {item.nickname} } @@ -91,10 +92,10 @@ 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/focus_button.js b/src/forge/UsersList/focus_button.js index 0d099fd6..a2e93bde 100644 --- a/src/forge/UsersList/focus_button.js +++ b/src/forge/UsersList/focus_button.js @@ -3,7 +3,7 @@ import axios from "axios"; import { Button } from "antd"; import "./list.css"; -function FocusButton({is_watch , fontClass, starText, is_block , id , successFunc}){ +function FocusButton({is_watch , fontClass, starText, is_block , id , successFunc,notReset}){ const [ isSpin , setIsSpin ] = useState(false); const [ watchFlag , setWatchFlag ] = useState(is_watch); // 关注和取消关注 @@ -19,7 +19,9 @@ function FocusButton({is_watch , fontClass, starText, is_block , id , successFun }).then((result) => { if (result && result.data.status === 0) { successFunc && successFunc(); - setWatchFlag(!watchFlag); + if(notReset){ + setWatchFlag(!watchFlag); + } } setIsSpin(false); }) diff --git a/src/forge/UsersList/fork_users.js b/src/forge/UsersList/fork_users.js index e38f4619..23cd5bea 100644 --- a/src/forge/UsersList/fork_users.js +++ b/src/forge/UsersList/fork_users.js @@ -83,7 +83,7 @@ class ForkUsers extends Component {

    { + renderList = (users, userClass, current_user, type_title , successFunc , notReset) => { if (users && users.length > 0) { return users.map((item, key) => { return ( @@ -14,7 +14,7 @@ class UserList extends Component {
    @@ -53,9 +53,9 @@ class UserList extends Component { } } render() { - const { users, userClass, current_user , type_title , successFunc } = this.props; + const { users, userClass, current_user , type_title , successFunc , notReset , title_type } = this.props; return ( - this.renderList(users, userClass, current_user, type_title , successFunc) + this.renderList(users, userClass, current_user, type_title , successFunc , notReset , title_type) ); } } diff --git a/src/forge/Version/New.jsx b/src/forge/Version/New.jsx index f2e7ae61..0678a345 100644 --- a/src/forge/Version/New.jsx +++ b/src/forge/Version/New.jsx @@ -103,7 +103,7 @@ export default Form.create()( .then(result => { if (result) { showNotification("版本修改成功!"); - history.push(`/projects/${owner}/${projectsId}/releases`); + history.push(`/${owner}/${projectsId}/releases`); } }); } else { @@ -116,7 +116,7 @@ export default Form.create()( .then(result => { if (result) { showNotification("版本发布成功!"); - history.push(`/projects/${owner}/${projectsId}/releases`); + history.push(`/${owner}/${projectsId}/releases`); } }); } @@ -233,7 +233,7 @@ export default Form.create()(
    diff --git a/src/forge/Wiki/EditWiki.jsx b/src/forge/Wiki/EditWiki.jsx index ae30b446..a7b4911d 100644 --- a/src/forge/Wiki/EditWiki.jsx +++ b/src/forge/Wiki/EditWiki.jsx @@ -126,7 +126,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail, } function goBack() { - history.push(`/projects/${owner}/${projectsId}/wiki`); + history.push(`/${owner}/${projectsId}/wiki`); } function changeModal(e) { diff --git a/src/forge/Wiki/Index.jsx b/src/forge/Wiki/Index.jsx index af883a94..f15b1968 100644 --- a/src/forge/Wiki/Index.jsx +++ b/src/forge/Wiki/Index.jsx @@ -103,19 +103,19 @@ export default (props) => { function goUser(login) { - window.location.href = `/users/${login}`; + window.location.href = `/${login}`; } function addFile() { - history.push(`/projects/${owner}/${projectsId}/wiki/add`); + history.push(`/${owner}/${projectsId}/wiki/add`); } function goEdit() { - history.push(`/projects/${owner}/${projectsId}/wiki/edit/${encodeURI(checkItem.name)}`); + history.push(`/${owner}/${projectsId}/wiki/edit/${encodeURI(checkItem.name)}`); } function preview() { - window.open(`/projects/${owner}/${projectsId}/wiki/preview/${encodeURI(project.name)}/${project.id}`); + window.open(`/${owner}/${projectsId}/wiki/preview/${encodeURI(project.name)}/${project.id}`); } // 支持 Markdown,Html,Pdf格式文件 diff --git a/src/forge/Wiki/Preview.jsx b/src/forge/Wiki/Preview.jsx index e7c6a623..93ebe2e8 100644 --- a/src/forge/Wiki/Preview.jsx +++ b/src/forge/Wiki/Preview.jsx @@ -61,11 +61,11 @@ export default (props) => { }, [project, checkItem]); function goEdit() { - history.push(`/projects/${owner}/${projectsId}/wiki/edit/${checkItem.name}`); + history.push(`/${owner}/${projectsId}/wiki/edit/${checkItem.name}`); } function goBack() { - history.push(`/projects/${owner}/${projectsId}/wiki`); + history.push(`/${owner}/${projectsId}/wiki`); } // 支持 Markdown,Html,Pdf格式文件 diff --git a/src/forge/Wiki/Welcome/index.jsx b/src/forge/Wiki/Welcome/index.jsx index 78cd34e4..fc3af6ef 100644 --- a/src/forge/Wiki/Welcome/index.jsx +++ b/src/forge/Wiki/Welcome/index.jsx @@ -27,7 +27,7 @@ export default ({ project, isManager, history, showNotification, match, reloadLi // } function addFile() { - history.push(`/projects/${owner}/${projectsId}/wiki/add`); + history.push(`/${owner}/${projectsId}/wiki/add`); } return ( diff --git a/src/forge/comments/children_comments.js b/src/forge/comments/children_comments.js index 8a8ccbc8..450a30f1 100644 --- a/src/forge/comments/children_comments.js +++ b/src/forge/comments/children_comments.js @@ -113,7 +113,7 @@ class children_comments extends Component {
    {item && item.user_name} diff --git a/src/forge/comments/children_journals.js b/src/forge/comments/children_journals.js index e293c9f3..2337ce87 100644 --- a/src/forge/comments/children_journals.js +++ b/src/forge/comments/children_journals.js @@ -77,7 +77,7 @@ class children_journals extends Component {
    {item && item.user_name} diff --git a/src/forge/comments/comments.js b/src/forge/comments/comments.js index 93925da6..7de4bdbd 100644 --- a/src/forge/comments/comments.js +++ b/src/forge/comments/comments.js @@ -76,6 +76,8 @@ class comments extends Component { content: "", reply_content: undefined, }); + this.state.new_journal_id = result.data.id; + this.getjournalslist(page, limit); this.setState({ showFiles: false, content: "", @@ -86,10 +88,13 @@ class comments extends Component { journal_spin: false, attachment_clean: false, }); - this.state.new_journal_id = result.data.id; - this.getjournalslist(page, limit); } - this.props.showNotification(result.data.message); + this.setState({ + journal_spin: false + }); + if(result && result.data.status !== 411){ + this.props.showNotification(result.data.message); + } }) .catch((error) => { this.setState({ @@ -304,7 +309,7 @@ class comments extends Component { return (
    {item && item.user_name} diff --git a/src/forge/users/CIList.jsx b/src/forge/users/CIList.jsx index a4e0331c..f4540412 100644 --- a/src/forge/users/CIList.jsx +++ b/src/forge/users/CIList.jsx @@ -62,7 +62,7 @@ function CIList(props){ return(
  • - {item.name} + {item.name} { item.open_devops ? 已激活 : @@ -79,7 +79,7 @@ function CIList(props){ : - + }
  • ) diff --git a/src/forge/users/GeneralView/Activity.jsx b/src/forge/users/GeneralView/Activity.jsx index ce09e885..1f6b46d1 100644 --- a/src/forge/users/GeneralView/Activity.jsx +++ b/src/forge/users/GeneralView/Activity.jsx @@ -11,10 +11,10 @@ function Activity({list}) { list.map((i,k)=>{ return(
  • - +
    - {i.user_name} + {i.user_name} {i.action_time} {i.priority && TagInfo(`${i.priority}`,"")} {i.issue_status && {i.issue_status} } diff --git a/src/forge/users/GeneralView/ConcentrateBox.jsx b/src/forge/users/GeneralView/ConcentrateBox.jsx index 3ee94194..78573984 100644 --- a/src/forge/users/GeneralView/ConcentrateBox.jsx +++ b/src/forge/users/GeneralView/ConcentrateBox.jsx @@ -2,10 +2,11 @@ import React, { useEffect, useState } from 'react'; import { Modal , Checkbox , Spin , Input } from 'antd'; import Axios from 'axios'; import { Link } from 'react-router-dom'; +import CheckProfile from '../../Component/ProfileModal/Profile'; const { Search } = Input; const limit = 20; -function ConcentrateBox({ visible , onCancel , onSure , username , choosed }) { +function ConcentrateBox({ visible , onCancel , onSure , username , choosed , history , showCompeleteDialog , completeProfile }) { const [ page , setPage ]= useState(1); const [ total , setTotal ]= useState(0); const [ pageSize , setPageSize ] = useState(false); @@ -164,7 +165,16 @@ function ConcentrateBox({ visible , onCancel , onSure , username , choosed }) {
    { total > limit && page < pageSize &&
    setPage(page+1)}>查看更多
    } - { (list && list.length === 0) && (copyList && copyList.length === 0) &&
    您还没有公开的{search && `“${search}”`}项目,先去新建项目
    } + { + (list && list.length === 0) && (copyList && copyList.length === 0) && +
    您还没有公开的{search && `“${search}”`}项目,先去 + {history.push(`/projects/deposit/new`)}} + className="color-blue">新建项目 +
    + } ) diff --git a/src/forge/users/GeneralView/ConcentrateProject.jsx b/src/forge/users/GeneralView/ConcentrateProject.jsx index bfcf290d..48875221 100644 --- a/src/forge/users/GeneralView/ConcentrateProject.jsx +++ b/src/forge/users/GeneralView/ConcentrateProject.jsx @@ -4,7 +4,7 @@ import { Link } from 'react-router-dom'; import axios from 'axios'; import Box from './ConcentrateBox'; -function ConcentrateProject({userLogin,current}) { +function ConcentrateProject({userLogin,current,showCompeleteDialog,completeProfile}) { const [ list , setList ] = useState(undefined); const [ visible , setVisible ] = useState(false); const [ value , setValue ] = useState([]); @@ -45,7 +45,15 @@ function ConcentrateProject({userLogin,current}) { } return( - setVisible(false)} onSure={onSure} username={userLogin} choosed={value}/> + setVisible(false)} + onSure={onSure} + username={userLogin} + choosed={value} + completeProfile={completeProfile} + showCompeleteDialog={showCompeleteDialog} + /> { list && list.length>0 &&
    @@ -58,8 +66,8 @@ function ConcentrateProject({userLogin,current}) { { list.map((i,k)=>{ return( -
  • - {i.name} +
  • + {i.name}

    {i.description}

    { i.category && {i.category.name} } diff --git a/src/forge/users/GeneralView/Index.jsx b/src/forge/users/GeneralView/Index.jsx index ded43582..24efe37c 100644 --- a/src/forge/users/GeneralView/Index.jsx +++ b/src/forge/users/GeneralView/Index.jsx @@ -99,7 +99,11 @@ function Index(props) { return(
    - +

    近期活动统计

    diff --git a/src/forge/users/Index.jsx b/src/forge/users/Index.jsx index ce5aeda7..04c867f7 100644 --- a/src/forge/users/Index.jsx +++ b/src/forge/users/Index.jsx @@ -10,19 +10,37 @@ const Infos = Loadable({ loader: () => import("./Infos"), loading: Loading, }); +// forge项目详情 +const ProjectDetail = Loadable({ + loader: () => import("../Main/Detail"), + loading: Loading, +}); export default withRouter( - (CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((props)=>{ - return( -
    - - ( - - )} - > - -
    + (CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((props) => { + + // 个人中心新增的二级目录都需在此添加一次。将项目放组织和个人名下后,此处根据二级目录作判断, + let secondRouter = ''; + if (props.location.pathname) { + secondRouter = props.location.pathname.split('/')[2]; + } + + let userRouterArr = ['statistics', 'projects', 'notice', 'devops', 'organizes', 'info', 'following', 'followers', 'password']; + return ( + + + {secondRouter && (!userRouterArr.includes(secondRouter)) ? ( + + )} + > : ( + + )} + >} + + ) })))) ) \ No newline at end of file diff --git a/src/forge/users/Index.scss b/src/forge/users/Index.scss index 3595aa84..8139ebae 100644 --- a/src/forge/users/Index.scss +++ b/src/forge/users/Index.scss @@ -218,6 +218,7 @@ ul.ant-menu.menuStyle{ border-bottom: 2px solid transparent!important; position: relative; a{ + font-size: 16px; & >i{ font-size: 15px!important; margin-right: 8px; diff --git a/src/forge/users/Infos.js b/src/forge/users/Infos.js index a588cb8b..1cd3969d 100644 --- a/src/forge/users/Infos.js +++ b/src/forge/users/Infos.js @@ -72,22 +72,22 @@ class Infos extends Component { renderPath=(pathname)=>{ const { username } = this.props.match.params; - if(pathname === `/users/${username}`){ + if(pathname === `/${username}`){ this.setState({menuKey:"0",route_type:undefined}); - }else if(pathname === `/users/${username}/statistics`){ + }else if(pathname === `/${username}/statistics`){ this.setState({menuKey:"1",route_type:undefined}); - }else if(pathname.indexOf(`/users/${username}/projects`)>-1){ + }else if(pathname.indexOf(`/${username}/projects`)>-1){ this.setState({menuKey:"2",route_type:undefined}); - }else if(pathname.indexOf(`/users/${username}/notice`)>-1){ + }else if(pathname.indexOf(`/${username}/notice`)>-1){ this.setState({menuKey:"3",route_type:undefined}); - }else if(pathname.indexOf(`/users/${username}/devops`)>-1){ + }else if(pathname.indexOf(`/${username}/devops`)>-1){ this.setState({menuKey:"4",route_type:undefined}); - }else if(pathname === `/users/${username}/organizes`){ + }else if(pathname === `/${username}/organizes`){ this.setState({menuKey:"5",route_type:undefined}); - }else if(pathname === `/users/${username}/watchers`){ - this.setState({menuKey:undefined,route_type:"watchers"}); - }else if(pathname === `/users/${username}/fan_users`){ - this.setState({menuKey:undefined,route_type:"fan_users"}); + }else if(pathname === `/${username}/following`){ + this.setState({menuKey:undefined,route_type:"following"}); + }else if(pathname === `/${username}/followers`){ + this.setState({menuKey:undefined,route_type:"followers"}); }else{ this.setState({menuKey:undefined,route_type:undefined}); } @@ -146,7 +146,7 @@ class Infos extends Component { project_type: type , route_type: undefined }) - this.props.history.push(`/users/${user && user.login}/devops/${type}`); + this.props.history.push(`/${user && user.login}/devops/${type}`); } undo_link = () => { @@ -155,7 +155,7 @@ class Infos extends Component { route_type: undefined, project_type:"notice", },()=>{ - this.props.history.push(`/users/${user && user.login}/notice`); + this.props.history.push(`/${user && user.login}/notice`); this.fetchUser(); }) } @@ -172,7 +172,7 @@ class Infos extends Component { route_type: undefined, project_type:"organizes" }) - this.props.history.push(`/users/${user && user.login}/organizes`) + this.props.history.push(`/${user && user.login}/organizes`) } resetUser=()=>{ @@ -221,12 +221,12 @@ class Infos extends Component { {user && user.description}
    - {user && current_user && user.login === current_user.login && ( + {/* {user && current_user && user.login === current_user.login && (
    - )} + )} */} {current_user && user && user.login !== current_user.login && (
    )}
    this.route_link("watchers")} + to={`/${user && user.login}/following`} + className={`with50 text-center pull-left ${route_type === "following" ? "text-primary" : ""}`} + onClick={() =>this.route_link("following")} >
    {current_user && user && user.login === current_user.login ? "我关注的" : "TA关注的"}
    {user && user.watching_count} this.route_link("fan_users")} - className={`with50 text-center pull-left ${route_type === "fan_users" ? "text-primary" : ""}`} + to={`/${user && user.login}/followers`} + onClick={() =>this.route_link("followers")} + className={`with50 text-center pull-left ${route_type === "followers" ? "text-primary" : ""}`} >
    {current_user && user && user.login === current_user.login ? "关注我的" : "关注TA的"}
    {user && user.watched_count} @@ -280,13 +281,13 @@ class Infos extends Component {
    { !route_type && menuKey && - 概览 - 数据统计 - 项目 + 概览 + 数据统计 + 项目 { current_user && user && user.login === current_user.login ? - + 待办事项 {undo_events && undo_events >0 ? ({undo_events}):""} @@ -294,11 +295,11 @@ class Infos extends Component { } { current_user && current_user.login && current_user.login === username ? - DevOps工作流 + DevOps工作流 :"" } - + 组织 { user && user.user_org_count && user.user_org_count > 0 ? ({user.user_org_count}):""} @@ -308,68 +309,68 @@ class Infos extends Component { {user && ( { return ; }} > { return ; }} > { return ; }} > { return ; }} > { return ; }} > { return ; }} > { return ; }} > - { return ; }} - > - */} + {/* { return ; }} - > + > */} { return ; }} > { return ; }} diff --git a/src/forge/users/InfosUser.js b/src/forge/users/InfosUser.js index e79e1021..276a0b1f 100644 --- a/src/forge/users/InfosUser.js +++ b/src/forge/users/InfosUser.js @@ -1,6 +1,6 @@ import React, { Component } from "react"; -import { Link } from "react-router-dom"; import { Menu, Input, Spin, Pagination, Popover, Button, Divider } from "antd"; +import CheckProfile from '../Component/ProfileModal/Profile'; import axios from "axios"; import ListItem from "../Main/IndexItem"; @@ -74,6 +74,7 @@ class InfosUser extends Component { //切换种类 changeCategory = (cate) => { + this.state.page = 1; this.state.category = cate.target.value; this.get_projects(); }; @@ -115,14 +116,15 @@ class InfosUser extends Component { newItem =()=> ( - 新建镜像项目 + {this.props.history.push('/projects/mirror/new')}}>新建镜像项目 - 新建托管项目 + {this.props.history.push('/projects/deposit/new')}} >新建托管项目 ); + category_button=(category)=>{ const { current_user, user } = this.props; const button_lists = @@ -187,7 +189,7 @@ class InfosUser extends Component { {current_user && user && current_user.login === user.login && ( @@ -235,7 +237,7 @@ class InfosUser extends Component {
    { const { getFieldDecorator, validateFields , setFieldsValue } = props && props.form; - const { username } = props && props.match && props.match.params; - const { user , resetUser , current_user } = props; + // const { username } = props && props.match && props.match.params; + const { resetUserInfo , current_user } = props; + console.log(props); useEffect(()=>{ if(current_user && current_user.login){ @@ -30,10 +31,10 @@ export default Form.create()( } function submitFunc(values) { - const url = `/users/${username}.json`; + const url = `/users/${current_user && current_user.login}.json`; const params={ user: { - nickname: values.real_name, + nickname: values.nickname, user_extension_attributes: { province: values.location && values.location[0], city: values.location && values.location[1], @@ -44,8 +45,7 @@ export default Form.create()( Axios.put(url,params).then(result=>{ if(result && result.data){ props.showNotification("资料修改成功!") - resetUser && resetUser(result.data); - props.history.push(`/users/${username}`) + resetUserInfo && resetUserInfo(); } }).catch(error=>{}) } @@ -68,10 +68,10 @@ export default Form.create()( )} - {getFieldDecorator("real_name",{ + {getFieldDecorator("nickname",{ rules:[{required:true,message:"请输入姓名"}] })( - + )}
    @@ -90,7 +90,7 @@ export default Form.create()( {getFieldDecorator("custom_department",{ rules:[{required:true,message:"请输入单位名称"}] })( - + )} @@ -120,13 +120,13 @@ export default Form.create()( {getFieldDecorator("description",{ rules:[] })( -