forked from Gitlink/forgeplus-react
Merge branch 'dev_m_copy' into dev_military
# Conflicts: # src/forge/DevOps/Index.jsx # src/forge/Index.js # src/forge/Main/Detail.js # src/forge/Merge/MessageCount.js # src/forge/Settings/Collaborator.js # src/forge/Settings/CollaboratorMember.jsx # src/forge/users/watch_users.js # src/modules/tpm/NewHeader.js
This commit is contained in:
commit
c32b333bc2
|
@ -25,7 +25,7 @@ if (isDev) {
|
||||||
}
|
}
|
||||||
debugType = window.location.search.indexOf('debug=t') !== -1 ? 'teacher' :
|
debugType = window.location.search.indexOf('debug=t') !== -1 ? 'teacher' :
|
||||||
window.location.search.indexOf('debug=s') !== -1 ? 'student' :
|
window.location.search.indexOf('debug=s') !== -1 ? 'student' :
|
||||||
window.location.search.indexOf('debug=a') !== -1 ? 'admin' : parsed.debug || 'p86402359'
|
window.location.search.indexOf('debug=a') !== -1 ? 'admin' : parsed.debug || 's'
|
||||||
}
|
}
|
||||||
function clearAllCookie() {
|
function clearAllCookie() {
|
||||||
cookie.remove('_educoder_session', { path: '/' });
|
cookie.remove('_educoder_session', { path: '/' });
|
||||||
|
|
|
@ -10,40 +10,55 @@ const About = Loadable({
|
||||||
loader: () => import('./About'),
|
loader: () => import('./About'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
const Infos = Loadable({
|
const New = Loadable({
|
||||||
loader: () => import('./Infos'),
|
loader: () => import('./disposePipeline'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
|
const Dispose = Loadable({
|
||||||
|
loader: () => import('./Dispose'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
|
const Stucture = Loadable({
|
||||||
|
loader: () => import('./Structure'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
|
const Mould = Loadable({
|
||||||
|
loader: () => import('./Mould'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
export default ((props)=>{
|
export default ((props)=>{
|
||||||
const { projectsId , owner } = props.match.params;
|
|
||||||
const open_devops = props.projectDetail && props.projectDetail.open_devops;
|
|
||||||
|
|
||||||
// 工作流:两种状态进入的链接不同
|
|
||||||
useEffect(()=>{
|
|
||||||
if(open_devops !== undefined){
|
|
||||||
if(open_devops){
|
|
||||||
props.history.replace(`/projects/${owner}/${projectsId}/devops/list`);
|
|
||||||
}else{
|
|
||||||
props.history.replace(`/projects/${owner}/${projectsId}/devops`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},[open_devops])
|
|
||||||
return(
|
return(
|
||||||
<WhiteBack className="opsPanel">
|
<WhiteBack className="opsPanel">
|
||||||
<Switch {...props}>
|
<Switch {...props}>
|
||||||
<Route path="/projects/:owner/:projectsId/devops/dispose"
|
<Route path="/projects/:owner/:projectsId/devops/dispose/:disposeId"
|
||||||
render={
|
render={
|
||||||
() => (<Infos {...props} />)
|
(p) => (<New {...props} {...p}/>)
|
||||||
}
|
}
|
||||||
></Route>
|
></Route>
|
||||||
<Route path="/projects/:owner/:projectsId/devops/list"
|
<Route path="/projects/:owner/:projectsId/devops/mould"
|
||||||
render={
|
render={
|
||||||
() => (<Infos {...props} />)
|
(p) => (<Mould {...props} {...p}/>)
|
||||||
|
}
|
||||||
|
></Route>
|
||||||
|
<Route path="/projects/:owner/:projectsId/devops/dispose/new"
|
||||||
|
render={
|
||||||
|
(p) => (<New {...props} {...p}/>)
|
||||||
|
}
|
||||||
|
></Route>
|
||||||
|
<Route path="/projects/:owner/:projectsId/devops/dispose"
|
||||||
|
render={
|
||||||
|
(p) => (<Dispose {...props} {...p}/>)
|
||||||
|
}
|
||||||
|
></Route>
|
||||||
|
<Route path="/projects/:owner/:projectsId/devops/list/:branch"
|
||||||
|
render={
|
||||||
|
(p) => (<Stucture {...props} {...p}/>)
|
||||||
}
|
}
|
||||||
></Route>
|
></Route>
|
||||||
<Route path="/projects/:owner/:projectsId/devops"
|
<Route path="/projects/:owner/:projectsId/devops"
|
||||||
render={
|
render={
|
||||||
() => (<About {...props} />)
|
(p) => (<About {...props} {...p}/>)
|
||||||
}
|
}
|
||||||
></Route>
|
></Route>
|
||||||
</Switch>
|
</Switch>
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { withRouter } from "react-router";
|
||||||
import { SnackbarHOC } from "educoder";
|
import { SnackbarHOC } from "educoder";
|
||||||
import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
|
import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
|
||||||
import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
|
import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
|
||||||
|
import Handbook from './Component/Handbook';
|
||||||
import "./css/index.scss";
|
import "./css/index.scss";
|
||||||
|
|
||||||
import Loadable from "react-loadable";
|
import Loadable from "react-loadable";
|
||||||
|
@ -30,13 +31,18 @@ const Infos = Loadable({
|
||||||
loader: () => import("./users/Infos"),
|
loader: () => import("./users/Infos"),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
});
|
});
|
||||||
|
|
||||||
class Index extends Component {
|
class Index extends Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="newMain clearfix">
|
<div className="newMain clearfix">
|
||||||
|
<Handbook />
|
||||||
<Switch {...this.props}>
|
<Switch {...this.props}>
|
||||||
|
<Route
|
||||||
|
path="/projects/:projectsType/new/:OIdentifier"
|
||||||
|
render={(props) => (
|
||||||
|
<ProjectNew {...this.props} {...props} />
|
||||||
|
)}
|
||||||
|
></Route>
|
||||||
<Route
|
<Route
|
||||||
path="/projects/:projectsType/new"
|
path="/projects/:projectsType/new"
|
||||||
render={(props) => (
|
render={(props) => (
|
||||||
|
|
|
@ -145,7 +145,7 @@ class CoderRootCommit extends Component{
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
{commitDatas && commitDatas.length > 0 && <Nodata _html="暂无数据"/>}
|
{commitDatas && commitDatas.length === 0 && <Nodata _html="暂无数据"/>}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
|
|
|
@ -251,7 +251,7 @@ class CoderRootDirectory extends Component {
|
||||||
// readme文件内容
|
// readme文件内容
|
||||||
renderReadMeContent = (readMeContent, permission) => {
|
renderReadMeContent = (readMeContent, permission) => {
|
||||||
const { fileDetail, readMeFile } = this.state;
|
const { fileDetail, readMeFile } = this.state;
|
||||||
if (fileDetail) {
|
if (fileDetail && fileDetail.length !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (readMeContent && readMeContent.length > 0) {
|
if (readMeContent && readMeContent.length > 0) {
|
||||||
|
|
|
@ -115,22 +115,23 @@ const DevIndex = Loadable({
|
||||||
/**
|
/**
|
||||||
* permission:Manager:管理员,Reporter:报告人员(只有读取权限),Developer:开发人员(除不能设置仓库信息外)
|
* permission:Manager:管理员,Reporter:报告人员(只有读取权限),Developer:开发人员(除不能设置仓库信息外)
|
||||||
*/
|
*/
|
||||||
function checkPathname(pathname){
|
function checkPathname(projectsId,owner,pathname){
|
||||||
let name = "";
|
let name = "";
|
||||||
if(pathname){
|
if(pathname && pathname !== `/projects/${owner}/${projectsId}`){
|
||||||
if(pathname.indexOf("/about")>-1){
|
let url = pathname.split(`/projects/${owner}/${projectsId}`)[1];
|
||||||
|
if(url.indexOf("/about")>-1){
|
||||||
name="about"
|
name="about"
|
||||||
}else if(pathname.indexOf("/issues")>-1 ||pathname.indexOf("Milepost") > 0){
|
}else if(url.indexOf("/issues")>-1 ||url.indexOf("Milepost") > 0){
|
||||||
name = "issues";
|
name = "issues";
|
||||||
}else if(pathname.indexOf("/pulls")>-1){
|
}else if(url.indexOf("/pulls")>-1){
|
||||||
name="pulls"
|
name="pulls"
|
||||||
}else if(pathname.indexOf("/milestones")>-1){
|
}else if(url.indexOf("/milestones")>-1){
|
||||||
name="milestones"
|
name="milestones"
|
||||||
}else if(pathname.indexOf("/activity")>-1){
|
}else if(url.indexOf("/activity")>-1){
|
||||||
name="activity"
|
name="activity"
|
||||||
}else if(pathname.indexOf("/setting")>-1){
|
}else if(url.indexOf("/setting")>-1){
|
||||||
name="setting"
|
name="setting"
|
||||||
}else if(pathname.indexOf("/devops")>-1){
|
}else if(url.indexOf(`/devops`)>-1){
|
||||||
name="devops"
|
name="devops"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -369,6 +370,7 @@ class Detail extends Component {
|
||||||
const url = `/${owner}/${projectsId}/sync_mirror.json`;
|
const url = `/${owner}/${projectsId}/sync_mirror.json`;
|
||||||
axios.post(url).then(result => {
|
axios.post(url).then(result => {
|
||||||
if (result && result.data && result.data.status === 0) {
|
if (result && result.data && result.data.status === 0) {
|
||||||
|
this.props.showNotification("镜像同步成功!");
|
||||||
this.getProject(2);
|
this.getProject(2);
|
||||||
} else {
|
} else {
|
||||||
this.props.showNotification("镜像同步失败!");
|
this.props.showNotification("镜像同步失败!");
|
||||||
|
@ -399,9 +401,9 @@ class Detail extends Component {
|
||||||
const url = this.props.history.location.pathname;
|
const url = this.props.history.location.pathname;
|
||||||
const urlArr = url.split("/");
|
const urlArr = url.split("/");
|
||||||
const urlFlag = (urlArr.length === 3);
|
const urlFlag = (urlArr.length === 3);
|
||||||
let pathname = checkPathname(url);
|
|
||||||
|
|
||||||
const { projectsId , owner } = this.props.match.params;
|
const { projectsId , owner } = this.props.match.params;
|
||||||
|
let pathname = checkPathname(projectsId,owner,url);
|
||||||
|
|
||||||
const { state } = this.props.history.location;
|
const { state } = this.props.history.location;
|
||||||
|
|
||||||
|
@ -729,7 +731,7 @@ class Detail extends Component {
|
||||||
(props) => (<CoderRootIndex {...this.props} {...props} {...this.state} {...common} />)
|
(props) => (<CoderRootIndex {...this.props} {...props} {...this.state} {...common} />)
|
||||||
}
|
}
|
||||||
></Route>
|
></Route>
|
||||||
<Route path="/projects/:owner/:projectsId/branch/:branchName"
|
<Route path="/projects/:owner/:projectsId/tree/:branchName"
|
||||||
render={
|
render={
|
||||||
(props) => (<CoderRootIndex {...this.props} {...props} {...this.state} {...common} />)
|
(props) => (<CoderRootIndex {...this.props} {...props} {...this.state} {...common} />)
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,12 +122,12 @@ class MessageCount extends Component {
|
||||||
SpinMerge: true,
|
SpinMerge: true,
|
||||||
});
|
});
|
||||||
const { projectsId , owner } = this.props.match.params;
|
const { projectsId , owner } = this.props.match.params;
|
||||||
const { title, body, mergekey, pull_request } = this.state;
|
const { data, title, body, mergekey, pr_status } = this.state;
|
||||||
const url = `/${owner}/${projectsId}/pulls/${pull_request.id}/pr_merge.json`;
|
const url = `/${owner}/${projectsId}/pulls/${data.pull_request.id}/pr_merge.json`;
|
||||||
axios
|
axios
|
||||||
.post(url, {
|
.post(url, {
|
||||||
project_id: projectsId,
|
project_id: projectsId,
|
||||||
id: pull_request.id,
|
id: data.pull_request.id,
|
||||||
do: mergekey,
|
do: mergekey,
|
||||||
body: body,
|
body: body,
|
||||||
title: title,
|
title: title,
|
||||||
|
@ -255,11 +255,6 @@ class MessageCount extends Component {
|
||||||
pull_request
|
pull_request
|
||||||
} = this.state;
|
} = this.state;
|
||||||
const { current_user, projectDetail } = this.props;
|
const { current_user, projectDetail } = this.props;
|
||||||
|
|
||||||
const permission = projectDetail && (projectDetail.permission === "Admin" || projectDetail.permission === "Owner" || projectDetail.permission === "Manager");
|
|
||||||
const userLogin = current_user && current_user.login;
|
|
||||||
const operate = userLogin && projectDetail && pr_status === 0 && permission;
|
|
||||||
|
|
||||||
const menu = (
|
const menu = (
|
||||||
<Menu onClick={(e) => this.getOption(e)}>
|
<Menu onClick={(e) => this.getOption(e)}>
|
||||||
<Menu.Item key={"merge"} value="合并请求">
|
<Menu.Item key={"merge"} value="合并请求">
|
||||||
|
@ -276,9 +271,11 @@ class MessageCount extends Component {
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
</Menu>
|
</Menu>
|
||||||
);
|
);
|
||||||
|
const permission = projectDetail && (projectDetail.permission === "Admin" || projectDetail.permission === "Owner" || projectDetail.permission === "Manager");
|
||||||
|
const userLogin = current_user && current_user.login;
|
||||||
|
const operate = userLogin && projectDetail && pr_status === 0 && permission;
|
||||||
return (
|
return (
|
||||||
<div className="">
|
<div>
|
||||||
{data ? (
|
{data ? (
|
||||||
<div>
|
<div>
|
||||||
<div className="main">
|
<div className="main">
|
||||||
|
@ -288,13 +285,13 @@ class MessageCount extends Component {
|
||||||
<div className="ver-middle">
|
<div className="ver-middle">
|
||||||
<span className="mr10 ver-middle">
|
<span className="mr10 ver-middle">
|
||||||
<span className="font-18 fwb">
|
<span className="font-18 fwb">
|
||||||
{ data.issue && data.issue.subject}
|
{data.issue.subject}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
{pull_request && (
|
{data.pull_request && (
|
||||||
<Tag
|
<Tag
|
||||||
className={`pr_tags_${pull_request.pull_request_staus}`}
|
className={`pr_tags_${data.pull_request.pull_request_staus}`}
|
||||||
>
|
>
|
||||||
{pr_status === 1
|
{pr_status === 1
|
||||||
? "已合并"
|
? "已合并"
|
||||||
|
@ -308,10 +305,10 @@ class MessageCount extends Component {
|
||||||
<div className="mt15">
|
<div className="mt15">
|
||||||
<Tag className="pr-branch-tag">
|
<Tag className="pr-branch-tag">
|
||||||
<Link
|
<Link
|
||||||
to={`/projects/${owner}/${pull_request.is_original?data.project_identifier:projectsId}/branch/${pull_request.head}`}
|
to={`/projects/${owner}/${data.pull_request.is_original?data.project_identifier:projectsId}/branch/${data.pull_request.head}`}
|
||||||
className="ver-middle"
|
className="ver-middle"
|
||||||
>
|
>
|
||||||
{pull_request.is_original ? pull_request.fork_project_user : data.issue.project_author_name}:{pull_request.head}
|
{data.pull_request.is_original ? data.pull_request.fork_project_user : data.issue.project_author_name}:{data.pull_request.head}
|
||||||
</Link>
|
</Link>
|
||||||
</Tag>
|
</Tag>
|
||||||
<span className="mr8 ver-middle">
|
<span className="mr8 ver-middle">
|
||||||
|
@ -323,11 +320,11 @@ class MessageCount extends Component {
|
||||||
</span>
|
</span>
|
||||||
<Tag className="pr-branch-tag">
|
<Tag className="pr-branch-tag">
|
||||||
<Link
|
<Link
|
||||||
to={`/projects/${owner}/${projectsId}/branch/${pull_request.base}`}
|
to={`/projects/${owner}/${projectsId}/branch/${data.pull_request.base}`}
|
||||||
className="ver-middle"
|
className="ver-middle"
|
||||||
>
|
>
|
||||||
{/* {data.pull_request.is_fork ? data.pull_request.base : `${data.pull_request.pull_request_user}:${data.pull_request.base}`} */}
|
{/* {data.pull_request.is_fork ? data.pull_request.base : `${data.pull_request.pull_request_user}:${data.pull_request.base}`} */}
|
||||||
{data.issue.project_author_name}:{pull_request.base}
|
{data.issue.project_author_name}:{data.pull_request.base}
|
||||||
</Link>
|
</Link>
|
||||||
</Tag>
|
</Tag>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,528 +1,53 @@
|
||||||
import React, { Component } from "react";
|
import React, { useState } from "react";
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import {
|
|
||||||
Input,
|
|
||||||
AutoComplete,
|
|
||||||
Dropdown,
|
|
||||||
Menu,
|
|
||||||
Icon,
|
|
||||||
Spin,
|
|
||||||
Pagination,
|
|
||||||
Button,
|
|
||||||
Table,
|
|
||||||
Tooltip
|
|
||||||
} from "antd";
|
|
||||||
import NoneData from "../Nodata";
|
|
||||||
import axios from "axios";
|
|
||||||
import { getImageUrl } from "educoder";
|
|
||||||
import {WhiteBack} from '../Component/layout';
|
import {WhiteBack} from '../Component/layout';
|
||||||
|
import AddMember from '../Component/AddMember';
|
||||||
|
import AddGroup from '../Component/AddGroup';
|
||||||
|
import Member from './CollaboratorMember';
|
||||||
|
import Group from './CollaboratorGroup';
|
||||||
|
|
||||||
const { Search } = Input;
|
function Collaborator(props){
|
||||||
|
const [ nav , setNav] = useState("1");
|
||||||
|
const [ newId , setNewId] = useState(undefined);
|
||||||
|
const [ newGroupId , setNewGroupId] = useState(undefined);
|
||||||
|
const {projectsId ,owner} = props.match.params;
|
||||||
|
|
||||||
const { Option } = AutoComplete;
|
const author = props.projectDetail && props.projectDetail.author;
|
||||||
const MENU_LIST = [
|
|
||||||
{
|
function getID(id){
|
||||||
id: "Manager",
|
setNewId(id);
|
||||||
name: "管理员",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "Developer",
|
|
||||||
name: "开发者",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "Reporter",
|
|
||||||
name: "报告者",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
const LIMIT = 15;
|
|
||||||
class Collaborator extends Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props);
|
|
||||||
this.state = {
|
|
||||||
listData: undefined,
|
|
||||||
user: undefined,
|
|
||||||
user_id: undefined,
|
|
||||||
userDataSource: undefined,
|
|
||||||
page: 1,
|
|
||||||
total_count: undefined,
|
|
||||||
isSpin: true,
|
|
||||||
searchKey: undefined,
|
|
||||||
search: undefined,
|
|
||||||
role: undefined,
|
|
||||||
otherSpin: false,
|
|
||||||
searchSpin: false,
|
|
||||||
roleName: undefined,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
componentDidUpdate=(prevPros)=>{
|
function getGroupID(id){
|
||||||
if(prevPros && this.props && !this.props.checkIfLogin()){
|
setNewGroupId(id);
|
||||||
this.props.history.push("/403")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
componentDidMount = () => {
|
|
||||||
// this.check_is_login()
|
|
||||||
if (this.props.project_id) {
|
|
||||||
this.getMember();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// check_is_login =() =>{
|
return (
|
||||||
// if(!this.props.checkIfLogin()){
|
<WhiteBack>
|
||||||
// this.props.history.push("/403")
|
<div className="flex-a-center baseForm bbr">
|
||||||
// return
|
{
|
||||||
// }
|
author && author.type === "Organization" ?
|
||||||
// };
|
<span>
|
||||||
|
<span style={{cursor:"pointer"}} className={nav === "1" ? "font-18 text-black color-blue":"font-18 text-black"} onClick={()=>setNav("1")}>协作者管理</span>
|
||||||
componentDidUpdate = (prevState) => {
|
<span style={{cursor:"pointer"}} className={nav === "2" ? "font-18 text-black ml30 color-blue":"font-18 text-black ml30"} onClick={()=>setNav("2")}>团队管理</span>
|
||||||
if (
|
</span>
|
||||||
this.props.project_id &&
|
|
||||||
this.props.project_id !== prevState.project_id
|
|
||||||
) {
|
|
||||||
this.getMember();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 获取项目协作者
|
|
||||||
getMember = () => {
|
|
||||||
const { page, search, role } = this.state;
|
|
||||||
const {projectsId ,owner} = this.props.match.params;
|
|
||||||
const url = `/${owner}/${projectsId}/collaborators.json`;
|
|
||||||
axios
|
|
||||||
.get(url, {
|
|
||||||
params: {
|
|
||||||
page,
|
|
||||||
search: search,
|
|
||||||
role: role,
|
|
||||||
limit: LIMIT,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
if (result) {
|
|
||||||
this.setState({
|
|
||||||
listData: result.data.members,
|
|
||||||
isSpin: false,
|
|
||||||
otherSpin: false,
|
|
||||||
searchSpin: false,
|
|
||||||
total_count: result.data.total_count,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
this.setState({
|
|
||||||
isSpin: false,
|
|
||||||
otherSpin: false,
|
|
||||||
searchSpin: false,
|
|
||||||
});
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
// 输入用户
|
|
||||||
changeInputUser = (e) => {
|
|
||||||
this.setState({
|
|
||||||
searchKey: e,
|
|
||||||
});
|
|
||||||
this.getUserList(e);
|
|
||||||
};
|
|
||||||
searchMember = (e) => {
|
|
||||||
this.state.search = e;
|
|
||||||
this.setState({
|
|
||||||
searchSpin: true,
|
|
||||||
});
|
|
||||||
this.getMember();
|
|
||||||
};
|
|
||||||
orderMember = (id, name) => {
|
|
||||||
this.setState({
|
|
||||||
isSpin: true
|
|
||||||
})
|
|
||||||
this.state.role = id;
|
|
||||||
this.state.roleName = name;
|
|
||||||
this.getMember();
|
|
||||||
};
|
|
||||||
// 选择用户
|
|
||||||
selectInputUser = (e, option) => {
|
|
||||||
this.setState({
|
|
||||||
user_id: e,
|
|
||||||
searchKey: option.props.searchValue,
|
|
||||||
});
|
|
||||||
this.getUserList(option.props.searchValue);
|
|
||||||
};
|
|
||||||
getUserList = (e) => {
|
|
||||||
const url = `/users/list.json`;
|
|
||||||
axios
|
|
||||||
.get(url, {
|
|
||||||
params: {
|
|
||||||
search: e,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
if (result) {
|
|
||||||
this.setState({
|
|
||||||
userDataSource: result.data.users,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 增加协作者
|
|
||||||
addCollaborator = () => {
|
|
||||||
// const { project_id } = this.props;
|
|
||||||
const { user_id } = this.state;
|
|
||||||
if(user_id){
|
|
||||||
this.setState({
|
|
||||||
otherSpin: true,
|
|
||||||
});
|
|
||||||
const {projectsId ,owner} = this.props.match.params;
|
|
||||||
const url = `/${owner}/${projectsId}/collaborators.json`;
|
|
||||||
axios.post(url, {
|
|
||||||
user_id,
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
if (result) {
|
|
||||||
this.setState({
|
|
||||||
isSpin: true,
|
|
||||||
otherSpin: false,
|
|
||||||
});
|
|
||||||
this.getMember();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
this.setState({
|
|
||||||
isSpin: false,
|
|
||||||
otherSpin: false,
|
|
||||||
});
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 修改权限
|
|
||||||
changeOperaiton = (e, id) => {
|
|
||||||
// const { project_id, page } = this.state;
|
|
||||||
this.setState({
|
|
||||||
isSpin: true,
|
|
||||||
});
|
|
||||||
const {projectsId ,owner} = this.props.match.params;
|
|
||||||
|
|
||||||
const url = `/${owner}/${projectsId}/collaborators/change_role.json`;
|
|
||||||
axios
|
|
||||||
.put(url, {
|
|
||||||
user_id: id,
|
|
||||||
role: e.key,
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
if (result) {
|
|
||||||
this.setState({
|
|
||||||
isSpin: true,
|
|
||||||
});
|
|
||||||
this.props.showNotification("权限修改成功!");
|
|
||||||
this.getMember();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
this.setState({
|
|
||||||
isSpin: false,
|
|
||||||
});
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 删除协作者
|
|
||||||
deleteUser = (id) => {
|
|
||||||
const { page } = this.state;
|
|
||||||
const {projectsId ,owner} = this.props.match.params;
|
|
||||||
this.props.confirm({
|
|
||||||
content: "确认将此成员从项目中移除?",
|
|
||||||
onOk: () => {
|
|
||||||
const { project_id } = this.props;
|
|
||||||
const url = `/${owner}/${projectsId}/collaborators/remove.json`;
|
|
||||||
axios
|
|
||||||
.delete(url, {
|
|
||||||
data: {
|
|
||||||
user_id: id,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
if (result) {
|
|
||||||
this.setState({
|
|
||||||
isSpin: true,
|
|
||||||
});
|
|
||||||
this.props.showNotification("成员删除成功!");
|
|
||||||
this.getMember();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
this.setState({
|
|
||||||
isSpin: false,
|
|
||||||
});
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
changePage = (page) => {
|
|
||||||
this.state.page = page;
|
|
||||||
this.setState({
|
|
||||||
isSpin: true,
|
|
||||||
});
|
|
||||||
this.getMember();
|
|
||||||
};
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const {
|
|
||||||
userDataSource,
|
|
||||||
listData,
|
|
||||||
isSpin,
|
|
||||||
page,
|
|
||||||
total_count,
|
|
||||||
searchKey,
|
|
||||||
otherSpin,
|
|
||||||
searchSpin,
|
|
||||||
roleName,
|
|
||||||
} = this.state;
|
|
||||||
// 获取当前项目的拥有者
|
|
||||||
const { author } = this.props;
|
|
||||||
const get_color = (role) => {
|
|
||||||
if (role === "Manager") {
|
|
||||||
return "text-green";
|
|
||||||
} else if (role === "Developer") {
|
|
||||||
return "text-primary";
|
|
||||||
} else if(role === "Reporter"){
|
|
||||||
return "text-yellow";
|
|
||||||
}else{
|
|
||||||
return "text-gray";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const member_roles = (item) => {
|
|
||||||
const operation = MENU_LIST.filter((i) => i.id === item.role);
|
|
||||||
return (
|
|
||||||
<span>
|
|
||||||
{author && author.login === item.login ? (
|
|
||||||
<label className={get_color(item.role)}>
|
|
||||||
{operation && operation[0].name}
|
|
||||||
</label>
|
|
||||||
) :
|
|
||||||
item.is_apply_signature ?
|
|
||||||
<label className="text-grey">外围贡献者</label>
|
|
||||||
:
|
:
|
||||||
(
|
|
||||||
<Dropdown overlay={setRoles(`${item.id}`)} placement={"bottomCenter"}>
|
|
||||||
<span className={get_color(item.role)}>
|
|
||||||
{operation && operation[0].name}
|
|
||||||
<Icon type="caret-down" className="ml2" size="13" />
|
|
||||||
</span>
|
|
||||||
</Dropdown>
|
|
||||||
)}
|
|
||||||
</span>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
const roleTitle = (
|
|
||||||
<div><span className="mr3">角色</span>
|
|
||||||
<Tooltip placement='bottom' title={<div>
|
|
||||||
<div className="mb3">管理员:拥有仓库设置功能、代码库读、写操作</div>
|
|
||||||
<div className="mb3">开发人员:只拥有代码库读、写操作</div>
|
|
||||||
<div className="mb3">报告者:只拥有代码库读操作</div>
|
|
||||||
</div>
|
|
||||||
}>
|
|
||||||
<Icon type="question-circle"></Icon>
|
|
||||||
</Tooltip>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
const columns = [
|
|
||||||
{
|
|
||||||
title: "头像",
|
|
||||||
dataIndex: "image_url",
|
|
||||||
render: (text, item) => (
|
|
||||||
<span className="f-wrap-alignCenter">
|
|
||||||
<Link
|
|
||||||
to={`/users/${item.login}`}
|
|
||||||
className="show-user-link"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
src={getImageUrl(`images/${text}`)}
|
|
||||||
alt=""
|
|
||||||
width="32px"
|
|
||||||
height="32px"
|
|
||||||
className="mr3 radius"
|
|
||||||
/>
|
|
||||||
</Link>
|
|
||||||
</span>
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "用户名",
|
|
||||||
dataIndex: "name",
|
|
||||||
render: (text, item) => (
|
|
||||||
<Link to={`/users/${item.login}`} className="show-user-link">
|
|
||||||
{text}
|
|
||||||
</Link>
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "邮箱",
|
|
||||||
dataIndex: "email",
|
|
||||||
render: (text) => <span>{text}</span>,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Token值",
|
|
||||||
dataIndex: "token",
|
|
||||||
render: (text) => <span>{text}</span>,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: roleTitle,
|
|
||||||
dataIndex: "role_name",
|
|
||||||
render: (text, item) => member_roles(item),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "操作",
|
|
||||||
dataIndex: "action",
|
|
||||||
render: (text, item) => (
|
|
||||||
<span style={{ justifyContent: "center" }}>
|
|
||||||
{author && author.login !== item.login && (
|
|
||||||
<a
|
|
||||||
className="text-delete"
|
|
||||||
onClick={() => this.deleteUser(item.id)}
|
|
||||||
>
|
|
||||||
删除
|
|
||||||
</a>
|
|
||||||
)}
|
|
||||||
</span>
|
|
||||||
),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
const roles = (id) => (
|
|
||||||
<Menu>
|
|
||||||
<Menu.Item
|
|
||||||
key={0}
|
|
||||||
value={undefined}
|
|
||||||
onClick={(e) => this.orderMember(undefined, "角色筛选")}
|
|
||||||
>
|
|
||||||
全部
|
|
||||||
</Menu.Item>
|
|
||||||
{MENU_LIST.map((item, key) => {
|
|
||||||
return (
|
|
||||||
<Menu.Item
|
|
||||||
key={item.id}
|
|
||||||
value={item.id}
|
|
||||||
onClick={(e) => this.orderMember(item.id, item.name)}
|
|
||||||
>
|
|
||||||
{item.name}
|
|
||||||
</Menu.Item>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</Menu>
|
|
||||||
);
|
|
||||||
const setRoles = (id) => (
|
|
||||||
<Menu>
|
|
||||||
{MENU_LIST.map((item, key) => {
|
|
||||||
return (
|
|
||||||
<Menu.Item
|
|
||||||
key={item.id}
|
|
||||||
value={item.id}
|
|
||||||
onClick={(e) => this.changeOperaiton(e,id)}
|
|
||||||
>
|
|
||||||
{item.name}
|
|
||||||
</Menu.Item>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</Menu>
|
|
||||||
);
|
|
||||||
|
|
||||||
const source =
|
|
||||||
userDataSource &&
|
|
||||||
userDataSource.map((item, key) => {
|
|
||||||
return (
|
|
||||||
<Option
|
|
||||||
key={key}
|
|
||||||
value={`${item.user_id}`}
|
|
||||||
searchValue={`${item.username}`}
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
className="user_img radius"
|
|
||||||
width="28"
|
|
||||||
height="28"
|
|
||||||
src={getImageUrl(`images/${item && item.image_url}`)}
|
|
||||||
alt=""
|
|
||||||
/>
|
|
||||||
<span className="ml10" style={{ "vertical-align": "middle" }}>
|
|
||||||
{item.username}
|
|
||||||
<span className="color-grey ml10">({item.login})</span>
|
|
||||||
</span>
|
|
||||||
</Option>
|
|
||||||
);
|
|
||||||
});
|
|
||||||
return (
|
|
||||||
<WhiteBack>
|
|
||||||
<div className="flex-a-center baseForm bbr">
|
|
||||||
<span className="font-18 text-black">协作者管理</span>
|
<span className="font-18 text-black">协作者管理</span>
|
||||||
<div className="addPanel">
|
}
|
||||||
<AutoComplete
|
{
|
||||||
dataSource={source}
|
nav === "1" ?
|
||||||
value={searchKey}
|
<AddMember getID={getID} login/>
|
||||||
style={{ width: 300 }}
|
:
|
||||||
onChange={this.changeInputUser}
|
<AddGroup getGroupID={getGroupID} organizeId={owner}/>
|
||||||
onSelect={this.selectInputUser}
|
}
|
||||||
placeholder="搜索需要添加的用户..."
|
</div>
|
||||||
/>
|
<div>
|
||||||
<Button
|
{
|
||||||
type="primary"
|
nav === "1" ?
|
||||||
ghost
|
<Member newId={newId} projectsId={projectsId} owner={owner} project_id={props.project_id} author={props.author} showNotification={props.showNotification}/>
|
||||||
onClick={this.addCollaborator}
|
:
|
||||||
className="ml15"
|
<Group owner={owner} projectsId={projectsId} newGroupId={newGroupId}/>
|
||||||
loading={otherSpin}
|
}
|
||||||
>
|
</div>
|
||||||
<Icon type="plus" size="16"></Icon>
|
</WhiteBack>
|
||||||
添加成员
|
);
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="grid-item-left baseForm">
|
|
||||||
<Search
|
|
||||||
placeholder="搜索项目成员..."
|
|
||||||
enterButton="搜索"
|
|
||||||
loading={searchSpin}
|
|
||||||
onSearch={(value) => this.searchMember(value)}
|
|
||||||
/>
|
|
||||||
<Dropdown overlay={roles} placement={"bottomCenter"}>
|
|
||||||
<a className="ml180 text-primary">
|
|
||||||
{roleName ? roleName : "角色筛选"}
|
|
||||||
<Icon type="caret-down" size="16"></Icon>
|
|
||||||
</a>
|
|
||||||
</Dropdown>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<Spin spinning={isSpin}>
|
|
||||||
<div className="collaboratorList baseForm">
|
|
||||||
{listData && listData.length>0 ? (
|
|
||||||
<Table
|
|
||||||
pagination={false}
|
|
||||||
columns={columns}
|
|
||||||
dataSource={listData}
|
|
||||||
rowKey={(record) => record.id}
|
|
||||||
></Table>
|
|
||||||
) : (
|
|
||||||
<NoneData _html="暂时还没有相关数据!" />
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</Spin>
|
|
||||||
{total_count && total_count > LIMIT ? (
|
|
||||||
<div className="edu-txt-center mt20 mb20">
|
|
||||||
<Pagination
|
|
||||||
showQuickJumper
|
|
||||||
pageSize={LIMIT}
|
|
||||||
current={page}
|
|
||||||
total={total_count}
|
|
||||||
onChange={this.changePage}
|
|
||||||
></Pagination>
|
|
||||||
</div>
|
|
||||||
) : (
|
|
||||||
""
|
|
||||||
)}
|
|
||||||
</WhiteBack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
export default Collaborator;
|
export default Collaborator;
|
||||||
|
|
|
@ -166,7 +166,11 @@ function CollaboratorMember({projectsId,owner,project_id,author,showNotification
|
||||||
<label className={get_color(item.role)}>
|
<label className={get_color(item.role)}>
|
||||||
{operation && operation[0].name}
|
{operation && operation[0].name}
|
||||||
</label>
|
</label>
|
||||||
) : (
|
)
|
||||||
|
:
|
||||||
|
item.is_apply_signature ?
|
||||||
|
<label className="text-grey">外围贡献者</label>
|
||||||
|
:(
|
||||||
<Dropdown overlay={setRoles(`${item.id}`)} placement={"bottomCenter"}>
|
<Dropdown overlay={setRoles(`${item.id}`)} placement={"bottomCenter"}>
|
||||||
<span className={get_color(item.role)}>
|
<span className={get_color(item.role)}>
|
||||||
{operation && operation[0].name}
|
{operation && operation[0].name}
|
||||||
|
@ -262,13 +266,7 @@ function CollaboratorMember({projectsId,owner,project_id,author,showNotification
|
||||||
</Spin>
|
</Spin>
|
||||||
{total > LIMIT ?
|
{total > LIMIT ?
|
||||||
<div className="edu-txt-center mt20 pb20">
|
<div className="edu-txt-center mt20 pb20">
|
||||||
<Pagination
|
<Pagination simple current={page} pageSize={LIMIT} total={total} onChange={(page)=>setPage(page)}/>
|
||||||
simple
|
|
||||||
pageSize={LIMIT}
|
|
||||||
current={page}
|
|
||||||
total={total}
|
|
||||||
onChange={(page)=>setPage(page)}
|
|
||||||
></Pagination>
|
|
||||||
</div>
|
</div>
|
||||||
:""}
|
:""}
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
|
|
|
@ -137,7 +137,7 @@ class Infos extends Component {
|
||||||
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { current_user, mygetHelmetapi } = this.props;
|
const { current_user, main_web_site_url } = this.props;
|
||||||
const { username } = this.props.match.params;
|
const { username } = this.props.match.params;
|
||||||
|
|
||||||
const { user, isSpin, project_type, route_type } = this.state;
|
const { user, isSpin, project_type, route_type } = this.state;
|
||||||
|
@ -167,7 +167,7 @@ class Infos extends Component {
|
||||||
<Button
|
<Button
|
||||||
block
|
block
|
||||||
className="text-button-grey"
|
className="text-button-grey"
|
||||||
href={`/users/${user.login}/profiles`}
|
href={`${main_web_site_url || "https://osredm.com/"}users/${user.login}/profiles`}
|
||||||
>
|
>
|
||||||
{" "}
|
{" "}
|
||||||
<i className="iconfont icon-shezhi4 font-15 mr5"></i>
|
<i className="iconfont icon-shezhi4 font-15 mr5"></i>
|
||||||
|
|
|
@ -5,8 +5,8 @@ class WatcherUsers extends Component {
|
||||||
const {user, current_user} = this.props
|
const {user, current_user} = this.props
|
||||||
return (
|
return (
|
||||||
<div className="minH-650">
|
<div className="minH-650">
|
||||||
{user && user.login && <CommonLists userType="watch_users" login={user.login} current_user={current_user} />}
|
{user && user.login && <CommonLists userType="watch_users" login={user.login} current_user={current_user} />}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -580,9 +580,9 @@ class LoginDialog extends Component {
|
||||||
<label htmlFor="p_autolog" style={{ top: '0px' }}>下次自动登录</label>
|
<label htmlFor="p_autolog" style={{ top: '0px' }}>下次自动登录</label>
|
||||||
</span>
|
</span>
|
||||||
<span className="fr">
|
<span className="fr">
|
||||||
<a onClick={(url) => this.getloginurl("http://39.105.176.215/account/lost_password")}
|
<a onClick={(url) => this.getloginurl("https://osredm.com/account/lost_password")}
|
||||||
className="mr3 color-grey-9">找回密码</a><em className="vertical-line"></em>
|
className="mr3 color-grey-9">找回密码</a><em className="vertical-line"></em>
|
||||||
<a onClick={(url) => this.getloginurl("http://39.105.176.215/user_join")} className="color-grey-9">注册</a>
|
<a onClick={(url) => this.getloginurl("https://osredm.com/user_join")} className="color-grey-9">注册</a>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,12 @@ import 'antd/lib/radio/style/index.css';
|
||||||
import 'antd/lib/input/style/index.css';
|
import 'antd/lib/input/style/index.css';
|
||||||
import './TPMIndex.css';
|
import './TPMIndex.css';
|
||||||
import logo from './images/logo.png';
|
import logo from './images/logo.png';
|
||||||
import { result } from 'lodash';
|
|
||||||
|
|
||||||
const $ = window.$
|
const $ = window.$
|
||||||
|
// TODO 这部分脚本从公共脚本中直接调用
|
||||||
|
const { Search } = Input;
|
||||||
|
let old_url;
|
||||||
|
|
||||||
window._header_componentHandler = null;
|
window._header_componentHandler = null;
|
||||||
// 非trustie链接则新开页跳转
|
// 非trustie链接则新开页跳转
|
||||||
const str = ['www.trustie.net','forgeplus.trustie.net','forum.trustie.net','testforgeplus.trustie.net']
|
const str = ['www.trustie.net','forgeplus.trustie.net','forum.trustie.net','testforgeplus.trustie.net']
|
||||||
|
@ -46,7 +49,7 @@ class NewHeader extends Component {
|
||||||
headtypess: "/",
|
headtypess: "/",
|
||||||
mygetHelmetapi2: null,
|
mygetHelmetapi2: null,
|
||||||
goshowqqgtounp: false,
|
goshowqqgtounp: false,
|
||||||
visiblemyss: false
|
visiblemyss: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
|
@ -93,6 +96,10 @@ class NewHeader extends Component {
|
||||||
this.setState({
|
this.setState({
|
||||||
user: newProps.user
|
user: newProps.user
|
||||||
})
|
})
|
||||||
|
if (newProps.Headertop !== undefined) {
|
||||||
|
old_url = newProps.Headertop.old_url
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
getCookie = (key) => {
|
getCookie = (key) => {
|
||||||
var arr, reg = RegExp('(^| )' + key + '=([^;]+)(;|$)');
|
var arr, reg = RegExp('(^| )' + key + '=([^;]+)(;|$)');
|
||||||
|
@ -388,7 +395,6 @@ class NewHeader extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
inputjoinclassvalue = (e) => {
|
inputjoinclassvalue = (e) => {
|
||||||
console.log(e.target.value.length);
|
|
||||||
if (e.target.value.length >= 7) {
|
if (e.target.value.length >= 7) {
|
||||||
this.openNotification("请输入6位项目邀请码!");
|
this.openNotification("请输入6位项目邀请码!");
|
||||||
return
|
return
|
||||||
|
@ -546,6 +552,8 @@ class NewHeader extends Component {
|
||||||
axios.get(url).then((response) => {
|
axios.get(url).then((response) => {
|
||||||
if (response && response.data) {
|
if (response && response.data) {
|
||||||
this.setState({ mygetHelmetapi2: response.data.setting });
|
this.setState({ mygetHelmetapi2: response.data.setting });
|
||||||
|
// localStorage.setItem('chromesetting', JSON.stringify(response.data.setting));
|
||||||
|
// localStorage.setItem('chromesettingresponse', JSON.stringify(response));
|
||||||
try {
|
try {
|
||||||
if (response.data.setting.tab_logo_url) {
|
if (response.data.setting.tab_logo_url) {
|
||||||
this.gettablogourldata(response);
|
this.gettablogourldata(response);
|
||||||
|
@ -602,7 +610,7 @@ class NewHeader extends Component {
|
||||||
headtypesonClickbool,
|
headtypesonClickbool,
|
||||||
headtypess,
|
headtypess,
|
||||||
mygetHelmetapi2,
|
mygetHelmetapi2,
|
||||||
goshowqqgtounp
|
goshowqqgtounp,
|
||||||
} = this.state;
|
} = this.state;
|
||||||
/*用户名称 用户头像url*/
|
/*用户名称 用户头像url*/
|
||||||
let activeIndex = false;
|
let activeIndex = false;
|
||||||
|
@ -705,7 +713,7 @@ class NewHeader extends Component {
|
||||||
mygetHelmetapi2 && mygetHelmetapi2.nav_logo_url ?
|
mygetHelmetapi2 && mygetHelmetapi2.nav_logo_url ?
|
||||||
<img alt="可控开源社区" className="logoimg" style={{ heigth: "40px" }} src={getImageUrl(mygetHelmetapi2.nav_logo_url)}></img>
|
<img alt="可控开源社区" className="logoimg" style={{ heigth: "40px" }} src={getImageUrl(mygetHelmetapi2.nav_logo_url)}></img>
|
||||||
:
|
:
|
||||||
<img alt="可控开源社区" className="logoimg" style={{ heigth: "40px" }} src={logo}></img>
|
""
|
||||||
}
|
}
|
||||||
</a>
|
</a>
|
||||||
<div className="head-nav pr" id={"head-navpre1"}>
|
<div className="head-nav pr" id={"head-navpre1"}>
|
||||||
|
@ -753,10 +761,11 @@ class NewHeader extends Component {
|
||||||
<div className="overPart"></div>
|
<div className="overPart"></div>
|
||||||
{
|
{
|
||||||
coursestypes === true && this.props.user && this.props.user.main_site === false ? "" :
|
coursestypes === true && this.props.user && this.props.user.main_site === false ? "" :
|
||||||
<ul className="edu-txt-center">
|
<ul className="edu-txt-center">
|
||||||
<li><Link to={"/projects/mirror/new"}>新建镜像项目</Link></li>
|
<li><Link to={"/projects/mirror/new"}>新建镜像项目</Link></li>
|
||||||
<li><Link to={"/projects/deposit/new"}>新建托管项目</Link></li>
|
<li><Link to={"/projects/deposit/new"}>新建托管项目</Link></li>
|
||||||
</ul>
|
<li><Link to={"/organize/new"}>新建组织</Link></li>
|
||||||
|
</ul>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -825,33 +834,17 @@ class NewHeader extends Component {
|
||||||
<ul className="edu-menu-list" style={{ top: '60px', textAlign: 'center' }}>
|
<ul className="edu-menu-list" style={{ top: '60px', textAlign: 'center' }}>
|
||||||
<li className="bor-bottom-greyE" style={{cursor:"default",background:"#fff"}}>{this.props.current_user.username}</li>
|
<li className="bor-bottom-greyE" style={{cursor:"default",background:"#fff"}}>{this.props.current_user.username}</li>
|
||||||
<li>
|
<li>
|
||||||
<a href={`/users/${user.login}`}>个人中心</a>
|
<Link to={`/users/${this.props.current_user.login}`}>个人中心</Link>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
{
|
||||||
<a
|
mygetHelmetapi2 && mygetHelmetapi2.new_course && mygetHelmetapi2.new_course.my_courses &&
|
||||||
href={`${mygetHelmetapi2 && mygetHelmetapi2.main_web_site_url}users/${user.login}/profiles`}
|
<li><a href={`${mygetHelmetapi2.new_course.my_courses}`} target="_blank">我的课程</a></li>
|
||||||
>
|
}
|
||||||
账号管理
|
{
|
||||||
</a>
|
mygetHelmetapi2 && mygetHelmetapi2.new_course && mygetHelmetapi2.new_course.my_organ &&
|
||||||
</li>
|
<li><a href={`/users/${this.props.current_user.login}/organizes`} target="_blank">我的组织</a></li>
|
||||||
<li>
|
}
|
||||||
<a
|
<li className="bor-top-greyE">
|
||||||
href={`${mygetHelmetapi2 && mygetHelmetapi2.main_web_site_url}users/${user.login}/user_tidings`}
|
|
||||||
>
|
|
||||||
我的消息
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href={`${mygetHelmetapi2 && mygetHelmetapi2.main_web_site_url}my/account`}>
|
|
||||||
账号安全
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href={`${mygetHelmetapi2 && mygetHelmetapi2.main_web_site_url}tasks/my_tasks`}>
|
|
||||||
创客管理
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li className="border-Tgrey-eb">
|
|
||||||
<a onClick={() => this.educoderloginysl()}>退出</a>
|
<a onClick={() => this.educoderloginysl()}>退出</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
Loading…
Reference in New Issue