Merge branch 'develop' of http://git.trustie.net/jasder/forgeplus-react into develop

This commit is contained in:
dinglink 2020-03-24 18:06:03 +08:00
commit 56ea97b8b2
19 changed files with 732 additions and 475 deletions

View File

@ -3,8 +3,8 @@
<component name="ChangeListManager">
<list default="true" id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Order/Detail.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Order/Detail.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
@ -13,24 +13,12 @@
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileEditorManager">
<leaf>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="231">
<caret line="23" column="19" selection-start-line="23" selection-start-column="19" selection-end-line="23" selection-end-column="19" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2342">
<caret line="436" column="13" selection-start-line="436" selection-start-column="13" selection-end-line="436" selection-end-column="13" />
<state relative-caret-position="222">
<caret line="175" column="212" lean-forward="true" selection-start-line="175" selection-start-column="212" selection-end-line="175" selection-end-column="212" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
@ -39,32 +27,12 @@
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js">
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MessageCount.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="166">
<caret line="58" column="29" selection-start-line="58" selection-start-column="29" selection-end-line="58" selection-end-column="29" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootIndex.js">
<provider selected="true" editor-type-id="text-editor">
<state>
<state relative-caret-position="32">
<caret line="428" column="11" selection-start-line="428" selection-start-column="11" selection-end-line="428" selection-end-column="238" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Order/OrderItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="295">
<caret line="19" column="25" selection-start-line="19" selection-start-column="25" selection-end-line="19" selection-end-column="25" />
<folding>
<element signature="e#0#42#0" expanded="true" />
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
@ -77,10 +45,24 @@
<find>versions</find>
<find>缺陷</find>
<find>contents/file</find>
<find>新建翻转课堂</find>
<find>nHeader</find>
<find>点赞</find>
<find>fork</find>
<find>.push(</find>
<find>QuillForEditor</find>
<find>setContents</find>
<find>isedit</find>
<find>Educoder</find>
<find>title</find>
<find>textcount</find>
<find>forks</find>
<find>commentCtx</find>
</findStrings>
<dirStrings>
<dir>$PROJECT_DIR$/src/forge</dir>
<dir>$PROJECT_DIR$/src</dir>
<dir>$PROJECT_DIR$</dir>
</dirStrings>
</component>
<component name="Git.Settings">
@ -90,11 +72,22 @@
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/src/AppConfig.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Tags.js" />
<option value="$PROJECT_DIR$/src/forge/Version/NewVersion.js" />
<option value="$PROJECT_DIR$/src/forge/Order/newMilepost.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/Index.js" />
<option value="$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Tags.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Milepost.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/merge.js" />
<option value="$PROJECT_DIR$/src/modules/tpm/NewHeader.js" />
<option value="$PROJECT_DIR$/src/forge/Order/New.js" />
<option value="$PROJECT_DIR$/src/forge/Main/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/Order/UpdateDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Order/CopyDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/NewMerge.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js" />
</list>
</option>
</component>
@ -114,6 +107,11 @@
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
<item name="build" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
@ -130,7 +128,7 @@
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="forge" type="462c0819:PsiDirectoryNode" />
<item name="Main" type="462c0819:PsiDirectoryNode" />
<item name="Merge" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
@ -171,25 +169,21 @@
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1584692398144</updated>
<workItem from="1584692401543" duration="5996000" />
<workItem from="1584692401543" duration="6228000" />
<workItem from="1585015135223" duration="17366000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="5996000" />
<option name="totallyTimeSpent" value="23594000" />
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1440" height="900" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="Favorites" side_tool="true" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.24964234" />
<window_info content_ui="combo" id="Project" order="0" weight="0.2532189" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Docker" show_stripe_button="false" />
<window_info anchor="bottom" id="Database Changes" />
<window_info anchor="bottom" id="Version Control" weight="0.47228914" />
<window_info active="true" anchor="bottom" id="Terminal" visible="true" weight="0.49156627" />
<window_info anchor="bottom" id="Event Log" side_tool="true" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
@ -197,10 +191,15 @@
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="right" id="Database" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Database Changes" order="8" />
<window_info anchor="bottom" id="Version Control" order="9" weight="0.47228914" />
<window_info active="true" anchor="bottom" id="Terminal" order="10" visible="true" weight="0.17228916" />
<window_info anchor="bottom" id="Event Log" order="11" side_tool="true" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
<window_info anchor="right" id="Database" order="3" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
@ -236,25 +235,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Milepost.js">
<provider selected="true" editor-type-id="text-editor">
<state>
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Tags.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-3771">
<caret line="70" column="25" selection-start-line="70" selection-start-column="25" selection-end-line="70" selection-end-column="25" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/newMilepost.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="87">
@ -275,19 +255,9 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/OrderItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="295">
<caret line="19" column="25" selection-start-line="19" selection-start-column="25" selection-end-line="19" selection-end-column="25" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="231">
<state relative-caret-position="221">
<caret line="23" column="19" selection-start-line="23" selection-start-column="19" selection-end-line="23" selection-end-column="19" />
<folding>
<element signature="e#0#42#0" expanded="true" />
@ -304,17 +274,220 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="255">
<caret line="33" column="4" selection-start-line="33" selection-start-column="4" selection-end-line="33" selection-end-column="4" />
<folding>
<element signature="e#0#26#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/home/shixunsHome.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-5268">
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="166">
<caret line="58" column="29" selection-start-line="58" selection-start-column="29" selection-end-line="58" selection-end-column="29" />
<state relative-caret-position="277">
<caret line="64" column="45" selection-start-line="64" selection-start-column="45" selection-end-line="64" selection-end-column="45" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/IndexItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="209">
<caret line="35" column="23" selection-start-line="35" selection-start-column="23" selection-end-line="35" selection-end-column="23" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/merge.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<caret line="276" column="20" selection-start-line="276" selection-start-column="20" selection-end-line="276" selection-end-column="20" />
<folding>
<element signature="e#0#42#0" expanded="true" />
<element signature="e#6583#7400#0" />
<element signature="e#7409#9273#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187">
<caret line="11" selection-start-line="11" selection-end-line="11" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Tags.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="337">
<caret line="319" column="18" selection-start-line="319" selection-start-column="18" selection-end-line="319" selection-end-column="18" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#6599#6910#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Milepost.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="172">
<caret line="280" column="38" selection-start-line="280" selection-start-column="38" selection-end-line="280" selection-end-column="38" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#4332#4367#0" />
<element signature="e#4350#5226#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/OrderItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="323">
<caret line="19" column="25" selection-start-line="19" selection-start-column="25" selection-end-line="19" selection-end-column="25" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/quillForEditor/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="125">
<caret line="46" column="7" selection-start-line="46" selection-start-column="2" selection-end-line="46" selection-end-column="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/NewMerge.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="101">
<caret line="202" column="40" selection-start-line="202" selection-start-column="40" selection-end-line="202" selection-end-column="40" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/CopyDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="360">
<caret line="242" column="24" selection-start-line="242" selection-start-column="24" selection-end-line="242" selection-end-column="24" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/App.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="173">
<caret line="178" column="31" selection-start-line="178" selection-start-column="31" selection-end-line="178" selection-end-column="31" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-462">
<caret column="512" selection-start-column="512" selection-end-column="512" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/public/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="233">
<caret line="25" column="20" selection-start-line="25" selection-start-column="20" selection-end-line="25" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/New/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state>
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/tpm/NewHeader.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="334">
<caret line="111" column="9" lean-forward="true" selection-start-line="111" selection-start-column="9" selection-end-line="111" selection-end-column="9" />
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/UpdateDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="175">
<caret line="137" column="7" selection-start-line="137" selection-start-column="7" selection-end-line="137" selection-end-column="7" />
<folding>
<element signature="e#1439#2512#0" />
<element signature="e#2533#2593#0" />
<element signature="e#2616#2676#0" />
<element signature="e#2694#2754#0" />
<element signature="e#2875#2951#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="221">
<caret line="13" selection-start-line="13" selection-end-line="13" />
<folding>
<element signature="e#0#26#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="260">
<caret line="495" column="3" lean-forward="true" selection-start-line="495" selection-start-column="3" selection-end-line="495" selection-end-column="3" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2342">
<caret line="436" column="13" selection-start-line="436" selection-start-column="13" selection-end-line="436" selection-end-column="13" />
<state relative-caret-position="300">
<caret line="327" lean-forward="true" selection-start-line="327" selection-end-line="327" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#15286#16091#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MessageCount.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="32">
<caret line="428" column="11" selection-start-line="428" selection-start-column="11" selection-end-line="428" selection-end-column="238" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="222">
<caret line="175" column="212" lean-forward="true" selection-start-line="175" selection-start-column="212" selection-end-line="175" selection-end-column="212" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>

View File

@ -481,7 +481,7 @@ class App extends Component {
this.setState({
mygetHelmetapi: undefined
});
document.title = "EduCoder";
document.title = "Forge";
var link = document.createElement('link'),
oldLink = document.getElementById('dynamic-favicon');
link.id = 'dynamic-favicon';

View File

@ -33,14 +33,8 @@ const ProjectDetail = Loadable({
})
class Index extends Component{
constructor(props){
super(props);
}
render(){
console.log("123",this.props);
return(
<div className="newMain clearfix">
<Switch {...this.props}>

View File

@ -57,12 +57,13 @@ class CoderRootFileDetail extends Component{
axios.delete(url,{
params:{
filepath:detail.path,
branch
branch,
sha:detail.sha
}
}).then(result=>{
if(result){
this.props.showNotification("删除成功!");
this.props.history.push(`/projects/${projectsId}/${authorLogin}`);
this.props.history.push(`/projects/${projectsId}`);
}
}).catch(error=>{
console.log(error);

View File

@ -1,5 +1,6 @@
import React , { Component } from 'react';
import { Link , Route , Switch } from 'react-router-dom';
import { Spin } from 'antd';
import { Link , Route , Switch,withRouter } from 'react-router-dom';
import '../css/index.css'
import './list.css';
@ -124,10 +125,12 @@ const TrendsIndex = Loadable({
/**
* permissionManager:管理员Reporter报告人员(只有读取权限)Developer开发人员除不能设置仓库信息外
*/
class Detail extends Component{
constructor(props){
super(props);
this.state={
isSpin:false,
projectDetail:undefined,
isManager:false,
isReporter:false,
@ -138,7 +141,7 @@ class Detail extends Component{
forked_count:undefined,
http_url: undefined,
author:undefined,
current_user:undefined,
// current_user:undefined,
branchs:undefined,
branchList:undefined,
@ -161,15 +164,15 @@ class Detail extends Component{
componentDidMount=()=>{
this.getUserInfo();
this.getDetail();
}
// componentDidUpdate=(provState)=>{
// if(provState.match.params.projectsId !== this.props.match.params.projectsId){
// this.getDetail();
// }
// }
componentDidUpdate=(prevState)=>{
if(prevState.match.params.projectsId !== this.props.match.params.projectsId){
this.getDetail();
}
}
getDetail=()=>{
const { projectsId } = this.props.match.params;
@ -246,11 +249,18 @@ class Detail extends Component{
// fork项目
forkFunc=()=>{
this.setState({
isSpin:true
})
const { project_id } = this.state;
const url = `/projects/${project_id}/forks.json`;
axios.post(url).then(result=>{
if(result && result.data.status === 0){
this.props.history.push(`/projects/${result.data.identifier}/coders`);
this.props.history.push(`/projects/${result.data.id}/coders`);
this.props.showNotification(result.data.message);
this.setState({
isSpin:false
})
}else{
this.props.showNotification(result.data.message);
}
@ -274,7 +284,6 @@ class Detail extends Component{
branchList:result.data,
branchs,
branchLastCommit:result.data[0],
// http_url:result.data[0].http_url
})
}
}).catch((error)=>{})
@ -282,220 +291,224 @@ class Detail extends Component{
render(){
const { projectDetail , watchers_count , praises_count , forked_count , project_id , current_user } = this.state;
const { projectDetail , watchers_count , praises_count , forked_count , isSpin } = this.state;
const url = this.props.history.location.pathname;
const urlArr= url.split("/");
const urlFlag = (urlArr.length === 3);
const { isManager , isDeveloper } = this.props;
const { isManager } = this.props;
const { projectsId } = this.props.match.params;
const { state } = this.props.history.location;
return(
<div>
<div className="detailHeader-wrapper">
<div className="normal">
<div className="f-wrap-between mb20">
<p className="font-18 color-white df flex-1 lineH2 mt15" style={{alignItems:"center"}}>
{projectDetail && projectDetail.author && projectDetail.author.name}
<span className="ml5 mr5">/</span>
<span className="hide-1 flex-1">
<Link to={`/projects/${projectsId}/coders`} className="color-white">{ projectDetail && projectDetail.name }</Link>
</span>
</p>
</div>
<div className="f-wrap-between">
<ul className="headerMenu-wrapper">
<li className={(url.indexOf("coders")>-1 || urlFlag) ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/coders`,state}}><img alt="" src={img_1} width="18" />代码</Link></li>
<li className={url.indexOf("orders")>-1 ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/orders`,state}}><img alt="" src={img_2} width="12" />工单{projectDetail&&projectDetail.issues_count===0?"":projectDetail&&projectDetail.issues_count===0?projectDetail.issues_count:""}</Link></li>
<li className={url.indexOf("merge")>-1 ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/merge`,state}}><img alt="" src={img_3} width="13" />合并请求{projectDetail&&projectDetail.pull_requests_count===0?"":projectDetail&&projectDetail.pull_requests_count===0?projectDetail.pull_requests_count:""}</Link></li>
<li className={url.indexOf("version")>-1 ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/version`,state}}><img alt="" src={img_4} width="16" />版本发布</Link></li>
<li className={url.indexOf("trends")>-1 ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/trends`,state}}><img alt="" src={img_6} width="16" />动态</Link></li>
{
isManager &&
<li className={url.indexOf("setting")>0 ? "active" : ""}><Link to={`/projects/${projectsId}/setting`}><img alt="" src={img_7} width="19" />仓库设置</Link></li>
}
</ul>
<span className="df">
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" onClick={()=>this.focusFunc(projectDetail && projectDetail.watched)}>
<img src={projectDetail && projectDetail.watched ? img_focused : img_focus} alt="" width="14px"/>
{projectDetail && projectDetail.watched ? '取消关注':'关注'}
</a>
<span className="detail_tag_btn_count">{watchers_count}</span>
<Spin spinning={isSpin}>
<div className="detailHeader-wrapper">
<div className="normal">
<div className="f-wrap-between mb20">
<p className="font-18 color-white df flex-1 lineH2 mt15" style={{alignItems:"center"}}>
{projectDetail && projectDetail.author && projectDetail.author.name}
<span className="ml5 mr5">/</span>
<span className="hide-1 flex-1">
<Link to={`/projects/${projectsId}/coders`} className="color-white">{ projectDetail && projectDetail.name }</Link>
</span>
</p>
</div>
<div className="f-wrap-between">
<ul className="headerMenu-wrapper">
<li className={(url.indexOf("coders")>-1 || urlFlag) ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/coders`,state}}><img alt="" src={img_1} width="18" />代码</Link></li>
<li className={url.indexOf("orders")>-1 ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/orders`,state}}><img alt="" src={img_2} width="12" />工单{projectDetail&&projectDetail.issues_count===0?"":projectDetail&&projectDetail.issues_count===0?projectDetail.issues_count:""}</Link></li>
<li className={url.indexOf("merge")>-1 ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/merge`,state}}><img alt="" src={img_3} width="13" />合并请求{projectDetail&&projectDetail.pull_requests_count===0?"":projectDetail&&projectDetail.pull_requests_count===0?projectDetail.pull_requests_count:""}</Link></li>
<li className={url.indexOf("version")>-1 ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/version`,state}}><img alt="" src={img_4} width="16" />版本发布</Link></li>
<li className={url.indexOf("trends")>-1 ? "active" : ""}><Link to={{pathname:`/projects/${projectsId}/trends`,state}}><img alt="" src={img_6} width="16" />动态</Link></li>
{
isManager &&
<li className={url.indexOf("setting")>0 ? "active" : ""}><Link to={`/projects/${projectsId}/setting`}><img alt="" src={img_7} width="19" />仓库设置</Link></li>
}
</ul>
<span className="df">
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" onClick={()=>this.focusFunc(projectDetail && projectDetail.watched)}>
<img src={projectDetail && projectDetail.watched ? img_focused : img_focus} alt="" width="14px"/>
{projectDetail && projectDetail.watched ? '取消关注':'关注'}
</a>
<span className="detail_tag_btn_count">{watchers_count}</span>
</span>
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" onClick={()=>this.pariseFunc(projectDetail && projectDetail.praised)}>
<img src={projectDetail && projectDetail.praised ? img_parised : img_parise} width="13px" alt=""/>
{projectDetail && projectDetail.praised ? '取消点赞':'点赞'}
</a>
<span className="detail_tag_btn_count">{praises_count}</span>
</span>
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" onClick={this.forkFunc}>
<img src={img_fork} alt="" width="10px"/>Fork</a>
<span className="detail_tag_btn_count">{forked_count}</span>
</span>
</span>
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" onClick={()=>this.pariseFunc(projectDetail && projectDetail.praised)}>
<img src={projectDetail && projectDetail.praised ? img_parised : img_parise} width="13px" alt=""/>
{projectDetail && projectDetail.praised ? '取消点赞':'点赞'}
</a>
<span className="detail_tag_btn_count">{praises_count}</span>
</span>
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" onClick={this.forkFunc}>
<img src={img_fork} alt="" width="10px"/>Fork</a>
<span className="detail_tag_btn_count">{forked_count}</span>
</span>
</span>
</div>
</div>
</div>
</div>
<Switch {...this.props}>
{/* 新建文件 */}
<Route path="/projects/:projectsId/coders/:branch/newfile/:path"
render={
(props) => (<FileNew {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/coders/:branch/newfile"
render={
(props) => (<FileNew {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Switch {...this.props}>
{/* 新建文件 */}
<Route path="/projects/:projectsId/coders/:branch/newfile/:path"
render={
(props) => (<FileNew {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/coders/:branch/newfile"
render={
(props) => (<FileNew {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 标签列表 */}
<Route path="/projects/:projectsId/orders/tags"
render={
(props) => (<TagList {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/* 仓库设置 */}
<Route path="/projects/:projectsId/setting"
render={
(props) => (<Setting {...this.props} {...props} {...this.state} getDetail={this.getDetail} current_user={current_user}/>)
}
></Route>
{/* 工单详情 */}
<Route path="/projects/:projectsId/orders/:orderId/detail"
render={
(props) => (<OrderDetail {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/* 里程碑 */}
<Route path="/projects/:projectsId/orders/Milepost"
render={
(props) => (<OrderMilepost {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/* 新建里程碑 */}
<Route path="/projects/:projectsId/orders/meilpost"
render={
(props) => (<OrdernewMilepost {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/*里程碑详情*/ }
<Route path="/projects/:projectsId/orders/:meilid/MilepostDetail"
render={
(props) => (<MilepostDetail {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/*修改里程碑*/}
<Route path="/projects/:projectsId/orders/:meilid/meilpost"
render={
(props) => (<OrderupdateMilepost {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/* 标签列表 */}
<Route path="/projects/:projectsId/orders/tags"
render={
(props) => (<TagList {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 仓库设置 */}
<Route path="/projects/:projectsId/setting"
render={
(props) => (<Setting {...this.props} {...props} {...this.state} getDetail={this.getDetail}/>)
}
></Route>
{/* 工单详情 */}
<Route path="/projects/:projectsId/orders/:orderId/detail"
render={
(props) => (<OrderDetail {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 里程碑 */}
<Route path="/projects/:projectsId/orders/Milepost"
render={
(props) => (<OrderMilepost {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 新建里程碑 */}
<Route path="/projects/:projectsId/orders/meilpost"
render={
(props) => (<OrdernewMilepost {...this.props} {...props} {...this.state}/>)
}
></Route>
{/*里程碑详情*/ }
<Route path="/projects/:projectsId/orders/:meilid/MilepostDetail"
render={
(props) => (<MilepostDetail {...this.props} {...props} {...this.state}/>)
}
></Route>
{/*修改里程碑*/}
<Route path="/projects/:projectsId/orders/:meilid/meilpost"
render={
(props) => (<OrderupdateMilepost {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 新建工单 */}
{/* 新建工单 */}
<Route path="/projects/:projectsId/orders/new"
render={
(props) => (<OrderNew {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/orders/new"
render={
(props) => (<OrderNew {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 修改详情 */}
<Route path="/projects/:projectsId/orders/:orderId/updatedetail"
render={
(props) => (<OrderupdateDetail {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/* 修改详情 */}
<Route path="/projects/:projectsId/orders/:orderId/updatedetail"
render={
(props) => (<OrderupdateDetail {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 复制详情 */}
<Route path="/projects/:projectsId/orders/:orderId/copyetail"
render={
(props) => (<OrdercopyDetail {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/* 复制详情 */}
<Route path="/projects/:projectsId/orders/:orderId/copyetail"
render={
(props) => (<OrdercopyDetail {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 动态 */}
<Route path="/projects/:projectsId/trends"
render={
(props) => (<TrendsIndex {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/* 动态 */}
<Route path="/projects/:projectsId/trends"
render={
(props) => (<TrendsIndex {...this.props} {...props} {...this.state}/>)
}
></Route>
{/* 代码Index */}
<Route path="/projects/:projectsId/orders"
render={
(props) => (<OrderIndex {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
{/* 代码Index */}
<Route path="/projects/:projectsId/orders"
render={
(props) => (<OrderIndex {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/merge/new"
render={
(props) => (<CreateMerge {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/merge/new"
render={
(props) => (<CreateMerge {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/merge/:mergeId/UpdateMerge"
render={
(props) => (<UpdateMerge {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/merge/:mergeId/UpdateMerge"
render={
(props) => (<UpdateMerge {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/merge/:mergeId/Messagecount"
render={
(props) => (<MessageCount {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/merge/:mergeId/Messagecount"
render={
(props) => (<MessageCount {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/merge/:mergeId/MergeSubmit"
render={
(props) => (<MergeSubmit {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/version/new"
render={
(props) => (<NewVersionIndex {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/merge/:mergeId/MergeSubmit"
render={
(props) => (<MergeSubmit {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/version/new"
render={
(props) => (<NewVersionIndex {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/version/:versionId/upversion"
render={
(props) => (<UpVersionIndex {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/version/:versionId/upversion"
render={
(props) => (<UpVersionIndex {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/version"
render={
(props) => (<VersionIndex {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/version"
render={
(props) => (<VersionIndex {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/merge"
render={
(props) => (<MergeIndexDetail {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId/coders"
render={
(props) => (<CoderRootIndex {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
<Route path="/projects/:projectsId"
render={
(props) => (<CoderRootIndex {...this.props} {...props} {...this.state} current_user={current_user}/>)
}
></Route>
</Switch>
<Route path="/projects/:projectsId/merge"
render={
(props) => (<MergeIndexDetail {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId/coders"
render={
(props) => (<CoderRootIndex {...this.props} {...props} {...this.state}/>)
}
></Route>
<Route path="/projects/:projectsId"
render={
(props) => (<CoderRootIndex {...this.props} {...props} {...this.state}/>)
}
></Route>
</Switch>
</Spin>
</div>
)
}
}
export default Detail;
export default withRouter(Detail);

View File

@ -177,6 +177,7 @@ class Index extends Component{
}
render(){
const { current_user } = this.props;
const menu=(
<Menu onClick={this.ChangeSoryBy}>
<Menu.Item key="updated_on">更新时间排序</Menu.Item>
@ -200,6 +201,8 @@ class Index extends Component{
<Pagination simple defaultCurrent={page} total={total} pageSize={limit} onChange={this.ChangePage}></Pagination>
</div>:""
)
return(
<div style={{background:"#fafafa"}}>
<p className="t_project_banner"></p>
@ -218,12 +221,14 @@ class Index extends Component{
<Spin spinning={isSpin}>
<div className="list-r-operation">
<div>
<Dropdown overlay={newItem} trigger={["click"]} placement='bottomRight' className="mr30">
<a className="ant-dropdown-link">
<span className="color-blue font-16"><img src={img_new} alt="" width="13px"/> 新建</span>
</a>
</Dropdown>
{
current_user && current_user.login &&
<Dropdown overlay={newItem} trigger={["click"]} placement='bottomRight' className="mr30">
<a className="ant-dropdown-link">
<span className="color-blue font-16"><img src={img_new} alt="" width="13px"/> 新建</span>
</a>
</Dropdown>
}
<Dropdown overlay={menu} trigger={['click']} placement='bottomRight'>
<a className="ant-dropdown-link">

View File

@ -165,7 +165,7 @@ class MergeSubmit extends Component{
<p>
{
data ?
<span className="font-20">{ data.issue.tracker}</span>
<span className="font-20">{ data.issue.issue_classify==='issue'?data.issue.tracker:"合并"}</span>
:
""
}
@ -173,7 +173,7 @@ class MergeSubmit extends Component{
</p>
<p className="mt10 color-grey-c">
<span className={data&&data.issue.issue_status==="关闭"?"closedetail":"opendetail"}>{data&&data.issue.issue_status==="关闭"?"关闭中":"开启中"} </span>
<span className={data&&data.issue.issue_status==="关闭"?"closedetail":data&&data.pull_request.status===0?"opendetail":"prdetail"}>{data&&data.issue.issue_status==="关闭"?"关闭中":data&&data.pull_request.status===0?"开启中":"已合并"} </span>
<span className="ml10 lineH32">
{ data && data.issue.author_name} { data && data.issue.created_at }创建{ data && data.issue.journals_count && data.issue.journals_count > 0 ?` · ${data.issue.journals_count} 条评论`:""}
</span>

View File

@ -476,8 +476,8 @@ class MessageCount extends Component{
</p>
<div style={{display:this.state.ismesrge,marginTop:15}}>
<Input placeholder="标题" value={this.state.title} onChange={this.changtitlepr}/>
<TextArea placeholder="=描述..." style={{height:"300px",marginTop:15}} value={this.state.body} onChange={this.changbodypr} />
<Input placeholder="合并请求标题" value={this.state.title} onChange={this.changtitlepr}/>
<TextArea placeholder="合并请求描述..." style={{height:"300px",marginTop:15}} value={this.state.body} onChange={this.changbodypr} />
</div>
<p className="clearfix mt15" style={{display:this.state.buttonshow}}>
<a className="topWrapper_btn " type="submit" onClick={()=>this.prmerge()}>合并请求</a>

View File

@ -201,7 +201,7 @@ class NewMerge extends Component{
ischeckmerge=(head,base)=>{
const { projectsId } = this.props.match.params;
const url = `/projects/${projectsId}/pull_requests/check_can_merge`;
const url = `/projects/${projectsId}/pull_requests/check_can_merge.json`;
axios.post(url,{
project_id:projectsId,
head:head,

View File

@ -248,62 +248,73 @@ class merge extends Component{
<div className="main">
<div className="topWrapper">
<Nav {...this.props} {...this.state}/>
<Link to={`/projects/${projectsId}/merge/new`} className="topWrapper_btn">创建合并请求</Link>
</div>
<div className="topWrapper" style={{borderBottom:"none"}}>
<p className="topWrapper_type">
<li className={openselect ? "active":""} onClick={()=>this.openorder(1)}>{data && data.open_count}个开启中</li>
<li className={closeselect ? "active":""} onClick={()=>this.openorder(2)}>{data && data.close_count}个已关闭</li>
{/* <span onClick={this.openorder} className={author_id ? "active":""}>{data && data.open_count}</span>
<span onClick={this.closeorder} className={author_id ? "active":""}>{data && data.close_count}个已关闭</span> */}
</p>
<div>
<Search
placeholder="搜索"
enterButton
onSearch={this.searchFunc}
style={{ width: 300 }}
/>
</div>
</div>
<Spin spinning={isSpin}>
<div className="f-wrap-between mb20">
<ul >
<li> </li>
</ul>
<ul className="topWrapper_select">
<li>
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.issue_tag,'标签','issue_tag_id')} trigger={['click']} placement="bottomCenter">
<span>{this.state.issue_tag_ids}<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
<li>
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.issue_version,'里程碑','fixed_version_id')} trigger={['click']} placement="bottomCenter">
<span>{this.state.fixed_version_ids}<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
<li>
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.assign_user,'指派人','assigned_to_id')} trigger={['click']} placement="bottomCenter">
<span>{this.state.assigned_to_ids}<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
<li>
<Dropdown className="topWrapperSelect" overlay={menu} trigger={['click']} placement="bottomCenter">
<span>{this.state.paix}<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
</ul>
</div>
{
search_count === 0 ?
<NoneData></NoneData>
:
<OrderItem issues={issues} search_count={search_count} page={page} limit={limit} {...this.props} {...this.state}></OrderItem>
data && data.user_admin_or_member ?
<Link to={`/projects/${projectsId}/merge/new`} className="topWrapper_btn">创建合并请求</Link>
: ''
}
{ Paginations }
</Spin>
</div>
{
data && data.search_count && data.search_count > 0 ?
<div>
<div className="topWrapper" style={{borderBottom:"none"}}>
<p className="topWrapper_type">
<li className={openselect ? "active":""} onClick={()=>this.openorder(1)}>{data && data.open_count}个开启中</li>
<li className={closeselect ? "active":""} onClick={()=>this.openorder(2)}>{data && data.close_count}个已关闭</li>
{/* <span onClick={this.openorder} className={author_id ? "active":""}>{data && data.open_count}</span>
<span onClick={this.closeorder} className={author_id ? "active":""}>{data && data.close_count}个已关闭</span> */}
</p>
<div>
<Search
placeholder="搜索"
enterButton
onSearch={this.searchFunc}
style={{ width: 300 }}
/>
</div>
</div>
<Spin spinning={isSpin}>
<div className="f-wrap-between mb20">
<ul >
<li> </li>
</ul>
<ul className="topWrapper_select">
<li>
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.issue_tag,'标签','issue_tag_id')} trigger={['click']} placement="bottomCenter">
<span>{this.state.issue_tag_ids}<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
<li>
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.issue_version,'里程碑','fixed_version_id')} trigger={['click']} placement="bottomCenter">
<span>{this.state.fixed_version_ids}<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
<li>
<Dropdown className="topWrapperSelect" overlay={this.renderMenu(issue_chosen && issue_chosen.assign_user,'指派人','assigned_to_id')} trigger={['click']} placement="bottomCenter">
<span>{this.state.assigned_to_ids}<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
<li>
<Dropdown className="topWrapperSelect" overlay={menu} trigger={['click']} placement="bottomCenter">
<span>{this.state.paix}<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
</ul>
</div>
{
search_count === 0 ?
<NoneData></NoneData>
:
<OrderItem issues={issues} search_count={search_count} page={page} limit={limit} {...this.props} {...this.state}></OrderItem>
}
{ Paginations }
</Spin>
</div>
:
<NoneData/>
}
</div>
)
}

View File

@ -23,7 +23,6 @@ class Index extends Component{
GitignoreList:undefined,
LicensesList:undefined,
isSpin:false,
current_user:undefined
}
}
getUserInfo=()=>{
@ -40,7 +39,7 @@ class Index extends Component{
})
}
componentDidMount=()=>{
this.getUserInfo();
// this.getUserInfo();
// 获取项目类别
this.getCategory();
// 获取项目语言
@ -116,7 +115,7 @@ class Index extends Component{
})
this.props.form.validateFieldsAndScroll((err, values) => {
if(!err){
const { current_user } = this.state;
const { current_user } = this.props;
const { projectsType } =this.props.match.params;
const url = projectsType === "deposit" ? "/projects.json" :"/projects/migrate.json";
axios.post(url,{
@ -129,7 +128,7 @@ class Index extends Component{
isSpin:false
})
this.props.showNotification(`${projectsType === "deposit" ? "托管" :"镜像"}项目创建成功!`);
this.props.history.push(`/projects/${result.data.identifier}/${current_user && current_user.login}/coders`);
this.props.history.push(`/projects/${result.data.id}/coders`);
}
}
}).catch((error)=>{
@ -148,7 +147,6 @@ class Index extends Component{
render(){
const { getFieldDecorator } = this.props.form;
console.log(this.props);
// 项目类型deposit-托管项目mirror-镜像项目
const { projectsType } =this.props.match.params;
const {
@ -165,6 +163,8 @@ class Index extends Component{
LicensesList,
isSpin
}=this.state;
console.log("current_user",this.props);
return(
<div className="main back-white">
<div className="newPanel">

View File

@ -106,6 +106,16 @@ class CopyDetail extends Component{
isShow:true
});
};
stringJson=(value) =>{
let _value = null;
try {
_value = JSON.parse(value);
} catch (e) {
_value = value;
}
return _value
}
//删除工单
deleteorder=(id)=>{
@ -225,9 +235,8 @@ class CopyDetail extends Component{
)}
</Form.Item>
<div className="quillContent" style={{marginBottom:"20px"}}>
<QuillForEditor
value = {textcount}
imgAttrs={{ width: '60px', height: '30px' }}
<QuillForEditor
value = {this.stringJson(textcount)}
wrapStyle={{
height: '220px',
opacity:1,

View File

@ -309,7 +309,18 @@ class Detail extends Component{
}
handleShowImage=(value)=>{
console.log("imgOnclick",value);
// console.log("imgOnclick",value);
}
stringJson=(value) =>{
let _value = null;
try {
_value = JSON.parse(value);
} catch (e) {
_value = value;
}
return _value
}
commentCtx = (ctx) => {
@ -387,7 +398,26 @@ class Detail extends Component{
}
</div>
<div style={{display: (isedit && isedit === item.id) ? "block" : "none"}}>
<TextArea style={{height:"200px"}} value={this.state.countvalue} onChange={this.changmodelname}/>
<div className="quillContent">
<QuillForEditor
wrapStyle={{
height: '220px',
opacity:1,
}}
autoFocus={true}
style={{ height: '150px' }}
placeholder="添加评论..."
options={options}
value={this.stringJson(this.state.countvalue)}
onContentChange={this.onContentChange}
showUploadImage={this.handleShowImage}
// onContentChange={handleContentChange}
/>
<p className="quillFlag">
{ quillFlag && <span className="">请输入评论内容</span>}
</p>
</div>
{/*<TextArea style={{height:"200px"}} value={this.state.countvalue} onChange={this.changmodelname}/>*/}
<p className="clearfix mt15">
<a className="topWrapper_btn fr" type="submit" onClick={()=>this.updatedetail(item.id)}>保存</a>
<a className="a_btn cancel_btn fr" type="submit" onClick={()=>this.editdetail(item.content,undefined)}>取消</a>
@ -492,7 +522,7 @@ class Detail extends Component{
<div className="new_context">
<div className="quillContent">
<QuillForEditor
imgAttrs={{ width: '30px' }}
wrapStyle={{
height: '220px',
opacity:1,

View File

@ -172,12 +172,28 @@ class Milepost extends Component{
const renderList =()=>{
if(data && data.versions && data.versions.length>0 ){
return(
<div className="tagList">
{
data.versions.map((item,key)=>{
return(
<div style={{display:'block'}}>
<div className="milepostdiv">
<div>
<div className="topWrapper">
<div className="topWrapper_type">
<li className={openselect ? "active":""} onClick={()=>this.opneMilelist(1)}>{data && data.open_count}个开启中</li>
<li className={closeselect ? "active":""} onClick={()=>this.opneMilelist(2)}>{data && data.closed_count}个已关闭</li>
{/* <span onClick={this.opneMilelist}>{ data && data.open_count }</span>
<span onClick={this.closeMilelist}>{ data && data.closed_count }已关闭</span> */}
</div>
<ul className="topWrapper_select">
<li>
<Dropdown className="topWrapperSelect" overlay={menu} trigger={['click']} placement="bottomCenter">
<span>排序<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
</ul>
</div>
<div className="tagList">
{
data.versions.map((item,key)=>{
return(
<div style={{display:'block'}}>
<div className="milepostdiv">
<div className="milepostwidth">
<div className="grid-item width100">
<i className="iconfont icon-lubiaosignpost3 font-12 mr3"></i>
@ -185,8 +201,8 @@ class Milepost extends Component{
</div>
</div>
</div>
<div className="milepostdiv" style={{marginTop:5}}>
</div>
<div className="milepostdiv" style={{marginTop:5}}>
<div className="milepostrighe">
<div className="grid-item mr10">
@ -212,43 +228,45 @@ class Milepost extends Component{
</span>
</div>
</div>
{
data && data.user_admin_or_member ?
<div className="milepostleft">
<div className="grid-item mr15 color-grey-9">
<i className="iconfont icon-bianji3 font-14 mr5"></i>
<Link to={`/projects/${projectsId}/orders/${item.id}/meilpost`} className="color-grey-9">编辑</Link>
</div>
<div className="grid-item mr15 color-grey-9">
<i className="iconfont icon-yiguanbi1 font-14 mr5"></i>
<a onClick={()=>this.updatestatusemile(this.state.status==="closed"?"open":"closed",item)} className="color-grey-9">{this.state.status==="closed"?"开启":"关闭"}</a>
</div>
<div className="grid-item mr15 color-grey-9">
<i className="iconfont icon-lajitong font-14 mr5" ></i>
<Popconfirm placement="bottom" title={'是否删除里程碑?'} okText="是" cancelText="否" onConfirm={()=>this.closemile(item)}>
<a className="color-grey-9">删除</a>
</Popconfirm>
</div>
{
data && data.user_admin_or_member ?
<div className="milepostleft">
<div className="grid-item mr15 color-grey-9">
<i className="iconfont icon-bianji3 font-14 mr5"></i>
<Link to={`/projects/${projectsId}/orders/${item.id}/meilpost`} className="color-grey-9">编辑</Link>
</div>
<div className="grid-item mr15 color-grey-9">
<i className="iconfont icon-yiguanbi1 font-14 mr5"></i>
<a onClick={()=>this.updatestatusemile(this.state.status==="closed"?"open":"closed",item)} className="color-grey-9">{this.state.status==="closed"?"开启":"关闭"}</a>
</div>
<div className="grid-item mr15 color-grey-9">
<i className="iconfont icon-lajitong font-14 mr5" ></i>
<Popconfirm placement="bottom" title={'是否删除里程碑?'} okText="是" cancelText="否" onConfirm={()=>this.closemile(item)}>
<a className="color-grey-9">删除</a>
</Popconfirm>
</div>
</div>
: ''
}
</div>
: ''
}
</div>
<div className="milepostdiv"style={{marginTop:5}}>
</div>
<div className="milepostdiv"style={{marginTop:5}}>
<div className="textwidth">
<Text
<Text
type="secondary"
ellipsis={{rows: 30, expandable: false, onExpand: Function}}
>
>
{item.description}</Text>
</div>
</div>
</div>
)
})
}
</div>
</div>
)
})
}
</div>
</div>
)
}else{
return(
@ -268,28 +286,13 @@ class Milepost extends Component{
: ''
}
</div>
<div style={{display: this.state.display}}>
<div className="tagdiv" >
<span>里程碑{ data && data.issue_tags_count }已创建</span>
</div>
</div>
<div className="topWrapper">
<div className="topWrapper_type">
<li className={openselect ? "active":""} onClick={()=>this.opneMilelist(1)}>{data && data.open_count}个开启中</li>
<li className={closeselect ? "active":""} onClick={()=>this.opneMilelist(2)}>{data && data.closed_count}个已关闭</li>
{/* <span onClick={this.opneMilelist}>{ data && data.open_count }</span>
<span onClick={this.closeMilelist}>{ data && data.closed_count }已关闭</span> */}
</div>
<ul className="topWrapper_select">
<li>
<Dropdown className="topWrapperSelect" overlay={menu} trigger={['click']} placement="bottomCenter">
<span>排序<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
</ul>
</div>
{ renderList()}
{ Paginations }
</div>

View File

@ -163,7 +163,6 @@ class New extends Component{
<div className="quillContent" style={{marginBottom:"20px"}}>
<QuillForEditor
value = {description}
imgAttrs={{ width: '60px', height: '30px' }}
wrapStyle={{
height: '220px',
opacity:1,

View File

@ -280,33 +280,46 @@ class Tags extends Component{
const renderList =()=>{
if(data && data.issue_tags && data.issue_tags.length>0 ){
return(
<div className="tagList">
{
data.issue_tags.map((item,key)=>{
return(
<div>
<div>
<div className="topWrapper">
<span>{ data && data.issue_tags_count }个标签</span>
<ul className="topWrapper_select">
<li>
<Dropdown className="topWrapperSelect" overlay={menu} trigger={['click']} placement="bottomCenter">
<span>标签<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
</ul>
</div>
<div className="tagList">
{
data.issue_tags.map((item,key)=>{
return(
<div>
<span className="width20 mr10">
<span style={{backgroundColor:`${item.color}`}} className="tagColor"></span>
{item.name}
</span>
<span className="hide-1 width50 mr10">{item.description}</span>
<span className="width15 mr10">{item.issues_count}个开启的工单</span>
{
data && data.user_admin_or_member ?
<div className="width15 text-right">
<a onClick={()=>this.editshow(item)} className="topWrapper_btn fr" >编辑</a>
<Popconfirm placement="bottom" title={'删除标签会将其从所有引用中删除。继续?'} okText="是" cancelText="否" onConfirm={()=>this.deletetag(item.id)}>
<a className="a_btn delete_btn fr" >删除</a>
</Popconfirm>
<span className="hide-1 width50 mr10">{item.description}</span>
<span className="width15 mr10">{item.issues_count}个开启的工单</span>
{
data && data.user_admin_or_member ?
<div className="width15 text-right">
<a onClick={()=>this.editshow(item)} className="topWrapper_btn fr" >编辑</a>
<Popconfirm placement="bottom" title={'删除标签会将其从所有引用中删除。继续?'} okText="是" cancelText="否" onConfirm={()=>this.deletetag(item.id)}>
<a className="a_btn delete_btn fr" >删除</a>
</Popconfirm>
</div>
: ''
}
</div>
)
})
}
</div>
: ''
}
</div>
)
})
}
</div>
</div>
)
}else{
return(
@ -378,16 +391,7 @@ class Tags extends Component{
</div>
<div className="topWrapper">
<span>{ data && data.issue_tags_count }个标签</span>
<ul className="topWrapper_select">
<li>
<Dropdown className="topWrapperSelect" overlay={menu} trigger={['click']} placement="bottomCenter">
<span>标签<Icon type="caret-down" className="ml5" /></span>
</Dropdown>
</li>
</ul>
</div>
{ renderList() }
{ Paginations }
</div>

View File

@ -136,6 +136,16 @@ class UpdateDetail extends Component{
)
}
}
stringJson=(value) =>{
let _value = null;
try {
_value = JSON.parse(value);
} catch (e) {
_value = value;
}
return _value
}
// 获取上传后的文件id数组
UploadFunc=(fileList)=>{
this.setState({
@ -208,9 +218,8 @@ class UpdateDetail extends Component{
)}
</Form.Item>
<div className="quillContent" style={{marginBottom:"20px"}}>
<QuillForEditor
value = {textcount}
imgAttrs={{ width: '60px', height: '30px' }}
<QuillForEditor
value = {this.stringJson(textcount)}
wrapStyle={{
height: '220px',
opacity:1,

View File

@ -691,7 +691,7 @@ submittojoinclass=(value)=>{
this.setState({
mygetHelmetapi2: undefined
});
document.title = "EduCoder";
document.title = "Forge";
var link = document.createElement('link'),
oldLink = document.getElementById('dynamic-favicon');
link.id = 'dynamic-favicon';
@ -730,21 +730,18 @@ submittojoinclass=(value)=>{
try {
var chromesettingArray = JSON.parse(localStorage.getItem('chromesetting'));
var chromesettingresponseArray = JSON.parse(localStorage.getItem('chromesettingresponse'));
// console.log("NewHeaderNewHeaderNewHeader");
// console.log(chromesettingArray);
// console.log(chromesettingresponseArray);
this.setState({
mygetHelmetapi2:chromesettingArray
});
if (chromesettingArray.tab_logo_url) {
this.gettablogourldata(chromesettingresponseArray);
} else {
this.gettablogourlnull();
}
this.setState({
mygetHelmetapi2:chromesettingArray
});
if (chromesettingArray.tab_logo_url) {
this.gettablogourldata(chromesettingresponseArray);
} else {
this.gettablogourlnull();
}
}catch (e) {
console.log("head获取游览器配置失败 重新请求开始读取配置");
this.geturlsdata();
// console.log("head获取游览器配置失败 重新请求开始读取配置");
this.geturlsdata();
}
};
@ -1082,13 +1079,15 @@ submittojoinclass=(value)=>{
{/*<li className={`${activeIndex === true ? 'active' : ''}`}><a href="/">首页</a></li>*/}
{/*<li><a href={this.props.Headertop===undefined?"":this.props.Headertop.shixun_paths_url}>实训路径</a></li>*/}
<li className={`${activePaths === true ? 'pr active' : 'pr'}`}>
<Link to={this.props.Headertop===undefined?"":'/paths'}>实践课程</Link>
</li>
<li className={`${activePaths === true ? 'pr active' : 'pr'}`}>
<Link to={'/projects'}>开源项目</Link>
</li>
{/*<li className={`${activePaths === true ? 'pr active' : 'pr'}`}>*/}
{/*<Link to={this.props.Headertop===undefined?"":'/paths'}>实践课程</Link>*/}
{/*</li>*/}
{/*<li><a href={this.props.Headertop===undefined?"":'/courses'}>课堂</a></li>*/}
<li className={`${coursestype === true ? 'pr active' : 'pr'}`}>
{/*<a href={this.props.Headertop===undefined?"":this.props.Headertop.course_url}>课堂</a>*/}
<Link to={this.props.Headertop===undefined?"":'/courses'}>翻转课堂</Link>
</li>
<li className={`${activeShixuns === true ? 'pr active' : 'pr'}`}>
@ -1283,7 +1282,14 @@ submittojoinclass=(value)=>{
{this.props.user&&this.props.user.main_site===true?"":this.props.Headertop===undefined?"":
pathstype===true?"":this.props.user&&this.props.user.admin===true||this.props.user&&this.props.user.is_teacher===true||this.props.user&&this.props.user.business===true?<li><a onClick={(url)=>this.getUser("/paths/new")} >新建实践课程</a></li>:""
}
{this.props.user&&this.props.user.main_site===true?<li><a onClick={(url)=>this.getUser("/projects/new","projects")} target="_blank">新建开发项目</a></li>:""}
{/*{this.props.user&&this.props.user.login?<li><a onClick={(url)=>this.getUser("/projects/new","projects")} target="_blank">新建开发项目</a></li>:""}*/}
{
this.props.user&&this.props.user.login?<li><Link to={"/projects/mirror/new"}>新建镜像项目</Link></li>:""
}
{
this.props.user&&this.props.user.login?<li><Link to={"/projects/deposit/new"}>新建托管项目</Link></li>:""
}
</ul>
{coursestypes===true&&this.props.user&&this.props.user.main_site===false?"":<ul className="fl with50 edu-txt-center">

View File

@ -264,7 +264,7 @@ export function TPMIndexHOC(WrappedComponent) {
this.setState({
mygetHelmetapi: undefined
});
document.title = "EduCoder";
document.title = "Forge";
var link = document.createElement('link'),
oldLink = document.getElementById('dynamic-favicon');
link.id = 'dynamic-favicon';