diff --git a/public/css/edu-purge.css b/public/css/edu-purge.css index fa82f3045..9f6e8b289 100644 --- a/public/css/edu-purge.css +++ b/public/css/edu-purge.css @@ -1569,6 +1569,7 @@ a.edu-txt-w80, .font-80 { font-size: 80px !important; } +.color-grey-b{color: #bbb !important} /*a标签的下划线*/ a.decoration { diff --git a/src/AppConfig.js b/src/AppConfig.js index 434b1f9dd..e43977162 100644 --- a/src/AppConfig.js +++ b/src/AppConfig.js @@ -98,7 +98,8 @@ export function initAxiosInterceptors(props) { // TODO 避免重复的请求 https://github.com/axios/axios#cancellation // TODO 读取到package.json中的配置? - var proxy = "http://localhost:3000" + var + // proxy = "http://localhost:3000" // proxy = "https://pre-newweb.educoder.net" proxy = "https://testforgeplus.trustie.net" diff --git a/src/forge/Main/Detail.js b/src/forge/Main/Detail.js index 05899dde8..86c9ca2fb 100644 --- a/src/forge/Main/Detail.js +++ b/src/forge/Main/Detail.js @@ -341,7 +341,7 @@ class Detail extends Component {
-

+

{projectDetail && projectDetail.author && {projectDetail.author.name} diff --git a/src/forge/Merge/MergeItem.js b/src/forge/Merge/MergeItem.js index 5cdb2b9b4..6c294d804 100644 --- a/src/forge/Merge/MergeItem.js +++ b/src/forge/Merge/MergeItem.js @@ -2,7 +2,7 @@ import React, { Component } from "react"; import { Link } from "react-router-dom"; import { Popconfirm, Tag } from "antd"; import { getImageUrl } from "educoder"; -import "./merge.css" +import "./merge.css"; class MergeItem extends Component { constructor(props) { @@ -42,7 +42,7 @@ class MergeItem extends Component { }; render() { - const { issues, project_name } = this.props; + const { issues, project_name, project_author_name } = this.props; const { projectsId } = this.props.match.params; const { current_user } = this.props; const renderList = () => { @@ -60,7 +60,11 @@ class MergeItem extends Component { {item.name} - {item.pull_request_staus==="merged" ? "已合并" : (item.pull_request_staus === "closed"?"已拒绝" : "开启的") } + {item.pull_request_staus === "merged" + ? "已合并" + : item.pull_request_staus === "closed" + ? "已拒绝" + : "开启的"}

@@ -94,19 +98,31 @@ class MergeItem extends Component { - {project_name}:{item.pull_request_head} + {item.is_original + ? item.fork_project_user + : project_author_name} + :{item.pull_request_head} - + - {project_name}:{item.pull_request_base} + {/* {item.is_fork ? item.pull_request_base : `${item.author_name}:${item.pull_request_base}`} */} + {project_author_name}:{item.pull_request_base} @@ -133,7 +149,7 @@ class MergeItem extends Component { )}

  • {item.version || "--"}
  • - +
  • - {data.project_name}:{data.pull_request.head} + {data.pull_request.is_original ? data.pull_request.fork_project_user : data.issue.project_author_name}:{data.pull_request.head} @@ -276,7 +276,8 @@ class MessageCount extends Component { to={`projects/${projectsId}/coders?branch=${data.pull_request.base}`} className="ver-middle" > - {data.project_name}:{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}:{data.pull_request.base}
    diff --git a/src/forge/Merge/NewMerge.js b/src/forge/Merge/NewMerge.js index 6e8ad7f36..a4cbfdda1 100644 --- a/src/forge/Merge/NewMerge.js +++ b/src/forge/Merge/NewMerge.js @@ -3,8 +3,8 @@ import { Input, Select, Button, Spin, Alert } from "antd"; import axios from "axios"; import "../Order/order.css"; import "./merge.css"; -import MergeForm from "./merge_form" -import MergeFooter from "./merge_footer" +import MergeForm from "./merge_form"; +import MergeFooter from "./merge_footer"; const Option = Select.Option; class NewMerge extends Component { constructor(props) { @@ -12,56 +12,132 @@ class NewMerge extends Component { this.state = { data: undefined, branches: undefined, - origin_branches: undefined, - merge: undefined, - pull: undefined, + merge_branches: undefined, + merge_projects: undefined, + merge: "master", + pull: "master", + is_fork: false, + projects_names: undefined, isSpin: false, show_message: true, + merge_head: false, // 是否向fork后的源项目发起合并请求 default_message: "必须选择不同的分支", + project_id: undefined, // 当前项目的id,也即开始发送合并请求的源项目id + merge_project_user: undefined }; } componentDidMount = () => { - this.getmergelist(); + const { projectsId } = this.props.match.params; + + this.getmergelist(projectsId); }; //获取新建分枝数据 - getmergelist = () => { - const { projectsId } = this.props.match.params; + getmergelist = (projectsId) => { + this.setState({isSpin: true}) const url = `/projects/${projectsId}/pull_requests/new.json`; axios .get(url) .then((result) => { if (result) { this.setState({ - data: result.data, + is_fork: result.data.is_fork, + projects_names: result.data.projects_names, + merge_projects: result.data.merge_projects, branches: result.data.branches, - origin_branches: result.data.branches, + merge_branches: result.data.branches, + project_id: result.data.project_id, }); + this.set_default_pull() + this.set_default_merge() } + this.setState({isSpin: false}) }) .catch((error) => { + this.setState({isSpin: false}) + console.log(error); + }); + }; + + set_default_pull = () => { + const {branches} = this.state; + let default_pull = branches.filter((e) => e.name === "master") + if (default_pull.length > 0){ + this.state.pull = default_pull[0].name + }else{ + this.state.pull = "master" + } + } + + set_default_merge = () => { + const {merge_branches} = this.state; + let default_merge = merge_branches.filter((e) => e.name === "master") + if (default_merge.length > 0){ + this.state.merge = default_merge[0].name + }else{ + this.state.merge = "master" + } + this.ischeckmerge(); + } + + newMergelist = (projectsId) => { + this.setState({isSpin: true}) + const url = `/projects/${projectsId}/pull_requests/get_branches.json`; + axios + .get(url) + .then((result) => { + if (result) { + this.setState({ + merge_branches: result.data + }) + this.set_default_merge() + } + this.setState({isSpin: false}) + }) + .catch((error) => { + this.setState({isSpin: false}) console.log(error); }); }; selectBrach = (type, value) => { + const {merge_head,projects_names} = this.state; this.state[type] = value; this.ischeckmerge(); }; + selectProjectName = (value) => { + const { project_id, projects_names } = this.state; + + let is_fork_id = parseInt(value) !== parseInt(project_id) + this.setState({ + isSpin: true, + merge_head: is_fork_id, + data: { + is_original: is_fork_id, + fork_project_id: is_fork_id ? project_id : "", + merge_user_login: is_fork_id ? projects_names[0].project_user_login : undefined + } + }) + this.props.history.push(`/projects/${value}/merge/new`); + this.newMergelist(value); + + }; + //判断2分支是否可以合并 ischeckmerge = () => { this.setState({ isSpin: true }); const { projectsId } = this.props.match.params; - const { pull, merge } = this.state; + const { pull, merge, project_id, merge_head } = this.state; const url = `/projects/${projectsId}/pull_requests/check_can_merge.json`; axios .post(url, { - project_id: projectsId, - head: merge ? merge : "master", - base: pull ? pull : "master", + head: merge, + base: pull, + is_original: merge_head, + fork_project_id: merge_head ? project_id : "" }) .then((result) => { if (result) { @@ -95,20 +171,38 @@ class NewMerge extends Component { const { data, branches, - origin_branches, + merge_branches, + merge_projects, pull, merge, isSpin, show_message, default_message, + merge_head, + projects_names, } = this.state; - - const renderBrances = (list) => { + const { projectsId } = this.props.match.params; + const renderBrances = (list, type) => { if (list && list.length > 0) { return list.map((item, key) => { return ( - + ); + }); + } + }; + + const renderProjectNames = (list) => { + if (list && list.length > 0) { + return list.map((item, key) => { + return ( + ); }); @@ -120,65 +214,77 @@ class NewMerge extends Component { }; return ( -
    +
    - -
    -
    -
    源分支:
    - - - - -
    -
    - -
    -
    -
    -
    目标分支:
    + +
    +
    +
    源分支:
    - +
    +
    + +
    +
    +
    +
    目标分支:
    + + + + +
    +
    -
    - {show_message ? ( -
    - -
    - ) - : - - } - + {show_message ? ( +
    + +
    + ) : ( + + )} +
    -
    + {/*
    -
    - +
    */}
    ); } diff --git a/src/forge/Merge/UpdateMerge.js b/src/forge/Merge/UpdateMerge.js index 3451766f9..473779894 100644 --- a/src/forge/Merge/UpdateMerge.js +++ b/src/forge/Merge/UpdateMerge.js @@ -57,13 +57,13 @@ class UpdateMerge extends Component {
    源分支:
    + @@ -79,11 +79,10 @@ class UpdateMerge extends Component {
    目标分支:
    @@ -105,9 +104,9 @@ class UpdateMerge extends Component { )}
    -
    + {/*
    -
    +
    */}
    ); } diff --git a/src/forge/Merge/merge.js b/src/forge/Merge/merge.js index 83fa8ab59..b306d700f 100644 --- a/src/forge/Merge/merge.js +++ b/src/forge/Merge/merge.js @@ -417,6 +417,7 @@ class merge extends Component { page={select_params.page} limit={select_params.limit} project_name={data.project_name} + project_author_name={data.project_author_name} {...this.props} {...this.state} > diff --git a/src/forge/Merge/merge_footer.js b/src/forge/Merge/merge_footer.js index d242cdbfd..636279775 100644 --- a/src/forge/Merge/merge_footer.js +++ b/src/forge/Merge/merge_footer.js @@ -33,12 +33,12 @@ class MergeFooter extends Component { } - 提交} key="2"> + {/* 提交} key="2"> - - 文件} key="3"> + */} + {/* 文件} key="3"> - + */}
    ); diff --git a/src/forge/Merge/merge_form.js b/src/forge/Merge/merge_form.js index 9563e8158..f7300f569 100644 --- a/src/forge/Merge/merge_form.js +++ b/src/forge/Merge/merge_form.js @@ -1,5 +1,5 @@ import React, { Component } from "react"; -import { Button, Form, Menu, Input, Select, Tag, Checkbox } from "antd"; +import { Button, Form, Menu, Input, Select, Tag, Checkbox, Spin } from "antd"; import axios from "axios"; import "../Order/order.css"; @@ -21,19 +21,45 @@ class MergeForm extends Component { mergedata: undefined, priority_id: undefined, title: undefined, + members: undefined, + issue_tags: undefined, + issue_versions: undefined, + issue_priories: undefined, }; } componentDidMount = () => { + this.get_default_selects(); this.set_defatul(); }; + get_default_selects = () => { + const { projectsId } = this.props.match.params; + this.setState({ isSpin: true }); + axios + .get(`/projects/${projectsId}/pull_requests/create_merge_infos.json`) + .then((result) => { + if (result) { + this.setState({ + members: result.data.members, + issue_tags: result.data.issue_tags, + issue_versions: result.data.issue_versions, + issue_priories: result.data.issue_priories, + }); + } + this.setState({ isSpin: false }); + }) + .catch((error) => { + this.setState({ isSpin: false }); + console.log(error); + }); + }; set_defatul = () => { const { data, merge_type } = this.props; if (data && merge_type === "edit") { this.setState({ desc: data.body, issue_tag_ids: data.issue_tag_ids[0], - fixed_version_id: String(data.fixed_version_id), + fixed_version_id: data.fixed_version_id ? String(data.fixed_version_id) : undefined, assigned_to_id: String(data.assigned_to_id), priority_id: String(data.priority_id), title: data.title, @@ -106,6 +132,8 @@ class MergeForm extends Component { values.issue_tag_ids = []; } const { desc } = this.state; + const { data } = this.props; + console.log("merge_type", merge_type) if (merge_type === "new") { let url = `/projects/${projectsId}/pull_requests.json`; axios @@ -114,6 +142,9 @@ class MergeForm extends Component { body: desc, head: pull, base: merge, + is_original: data.is_original, + fork_project_id: data.fork_project_id, + merge_user_login: data.merge_user_login }) .then((result) => { if (result) { @@ -136,30 +167,32 @@ class MergeForm extends Component { } else { let url = `/projects/${projectsId}/pull_requests/${mergeId}.json`; axios - .put(url, { - ...values, - body: desc, - head: pull, - base: merge, - }) - .then((result) => { - if (result) { + .put(url, { + ...values, + body: desc, + head: pull, + base: merge, + }) + .then((result) => { + if (result) { + this.setState({ + isSpin: false, + }); + this.props.history.push( + `/projects/${projectsId}/merge/${mergeId}/Messagecount` + ); + } else { + this.setState({ + isSpin: false, + }); + } + }) + .catch((error) => { this.setState({ isSpin: false, }); - this.props.history.push(`/projects/${projectsId}/merge/${mergeId}/Messagecount`); - } else { - this.setState({ - isSpin: false, - }); - } - }) - .catch((error) => { - this.setState({ - isSpin: false, + console.log(error); }); - console.log(error); - }); } } else { this.setState({ @@ -187,130 +220,136 @@ class MergeForm extends Component { desc, isSpin, title, + members, + issue_tags, + issue_versions, + issue_priories, } = this.state; return (
    -
    - - {merge_type === "new" ? "新建" : "编辑"}合并请求: - - - 可合并的 - -
    -
    -
    -
    - - {getFieldDecorator("title", { - rules: [ - { - required: true, - message: "请填写请求标题", - }, - ], - initialValue: title, - })()} - - -

    - - -

    -
    -
    -
    + +
    + + {merge_type === "new" ? "新建" : "编辑"}合并请求: + + + 可合并的 + +
    + +
    +
    - {getFieldDecorator("assigned_to_id", { - initialValue: assigned_to_id, - })( - - )} - - - {getFieldDecorator("fixed_version_id", { - initialValue: fixed_version_id, - })( - - )} - - - {getFieldDecorator("issue_tag_ids", { - initialValue: issue_tag_ids, - })( - - )} - - - {getFieldDecorator("priority_id", { - initialValue: priority_id, - })( - - )} - - - -
    - 必须审查代码 -
    -
    - 合并后删除提交分支 -
    -
    - 合并后关闭提到的任务 -
    -
    + {getFieldDecorator("title", { + rules: [ + { + required: true, + message: "请填写请求标题", + }, + ], + initialValue: title, + })()}
    + +

    + + +

    +
    +
    +
    + + {getFieldDecorator("assigned_to_id", { + initialValue: assigned_to_id, + })( + + )} + + + {getFieldDecorator("fixed_version_id", { + initialValue: fixed_version_id, + })( + + )} + + + {getFieldDecorator("issue_tag_ids", { + initialValue: issue_tag_ids, + })( + + )} + + + {getFieldDecorator("priority_id", { + initialValue: priority_id, + })( + + )} + + + +
    + 必须审查代码 +
    +
    + 合并后删除提交分支 +
    +
    + 合并后关闭提到的任务 +
    +
    +
    +
    -
    - + +
    ); } diff --git a/src/forge/Merge/no_data.js b/src/forge/Merge/no_data.js index d77643396..81c65f506 100644 --- a/src/forge/Merge/no_data.js +++ b/src/forge/Merge/no_data.js @@ -7,7 +7,7 @@ class Nodata extends Component{
    - +

    欢迎使用合并请求!