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

# Conflicts:
#	src/forge/Main/Detail.js
This commit is contained in:
caicai8 2020-04-02 15:51:27 +08:00
commit ac5cf6bde7
21 changed files with 872 additions and 367 deletions

View File

@ -10,116 +10,11 @@
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Setting.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="144">
<caret line="145" column="58" selection-start-line="145" selection-start-column="58" selection-end-line="145" selection-end-column="58" />
<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/Milepost.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-513">
<caret line="97" selection-start-line="97" selection-end-line="97" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Collaborator.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="253">
<caret line="17" column="37" lean-forward="true" selection-start-line="17" selection-start-column="37" selection-end-line="17" selection-end-column="37" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js">
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MessageCount.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="177">
<caret line="65" column="28" lean-forward="true" selection-start-line="65" selection-start-column="28" selection-end-line="65" selection-end-column="28" />
<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/Main/CoderRootFileDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="98">
<caret line="110" column="77" selection-start-line="110" selection-start-column="67" selection-end-line="110" selection-end-column="77" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/New/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="199">
<caret line="245" column="59" lean-forward="true" selection-start-line="245" selection-start-column="59" selection-end-line="245" selection-end-column="59" />
<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/Version/version.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="61">
<caret line="91" column="34" selection-start-line="91" selection-start-column="34" selection-end-line="91" selection-end-column="34" />
<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/order.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2193">
<caret line="352" column="14" selection-start-line="352" selection-start-column="14" selection-end-line="352" selection-end-column="14" />
<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="461">
<caret line="41" column="22" selection-start-line="41" selection-start-column="22" selection-end-line="41" selection-end-column="22" />
<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/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="246">
<caret line="504" column="20" selection-start-line="504" selection-start-column="20" selection-end-line="504" selection-end-column="20" />
<state relative-caret-position="206">
<caret line="594" lean-forward="true" selection-start-line="594" selection-end-line="594" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
@ -131,36 +26,36 @@
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>Educoder</find>
<find>title</find>
<find>textcount</find>
<find>forks</find>
<find>commentCtx</find>
<find>上传文件</find>
<find>subFileType</find>
<find>.ide</find>
<find>.idea</find>
<find>deleteUser</find>
<find>axios.delete</find>
<find>style=</find>
<find>width75f</find>
<find>max-width</find>
<find>请输入合并</find>
<find>journal-list-item</find>
<find>issue-tag-show</find>
<find>创建</find>
<find>.map((item,key)=&gt;{</find>
<find>.map((item,key)</find>
<find>评论成</find>
<find>该合并请求可以进行自动合并操作</find>
<find>没有</find>
<find>创建工单</find>
<find>可读权限</find>
<find>sub_entries</find>
<find>可读</find>
<find>icon-bianji</find>
<find>readOnly</find>
<find>isRe</find>
<find>icon-bianji</find>
<find>可读</find>
<find>journals_count &gt;</find>
<find>readOnly</find>
<find>Fork</find>
<find>forked</find>
<find>.OptionsUl</find>
<find>tyle=</find>
<find>overflo</find>
<find>&lt;span className=&quot;span_title&quot;&gt;里程碑&lt;/span&gt;</find>
<find>&lt;span className=&quot;span_title&quot;&gt;里程碑</find>
<find>分支合并到</find>
<find>Input</find>
<find>新建标签</find>
<find>orderid</find>
<find>deletedetail</find>
<find>onMouseMove</find>
<find>commitKey</find>
<find>TextArea</find>
<find>body</find>
<find>该合并请求可以进行自动合并操作</find>
<find>title</find>
<find>changbodypr</find>
</findStrings>
<dirStrings>
<dir>$PROJECT_DIR$</dir>
@ -176,10 +71,8 @@
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/src/AppConfig.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/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/modules/tpm/NewHeader.js" />
<option value="$PROJECT_DIR$/src/forge/Order/New.js" />
@ -187,35 +80,42 @@
<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/MergeSubmit.js" />
<option value="$PROJECT_DIR$/src/forge/Main/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js" />
<option value="$PROJECT_DIR$/src/forge/Settings/Setting.js" />
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/src/forge/Newfile/UserSubmitComponent.js" />
<option value="$PROJECT_DIR$/src/forge/Settings/Collaborator.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/merge.js" />
<option value="$PROJECT_DIR$/src/forge/Activity/Activity.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/merge.css" />
<option value="$PROJECT_DIR$/src/forge/Version/version.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Milepost.js" />
<option value="$PROJECT_DIR$/src/forge/New/Index.js" />
<option value="$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Main/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/Settings/Collaborator.js" />
<option value="$PROJECT_DIR$/src/forge/Settings/setting.css" />
<option value="$PROJECT_DIR$/src/forge/Order/OrderItem.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/merge.js" />
<option value="$PROJECT_DIR$/src/forge/Order/order.css" />
<option value="$PROJECT_DIR$/src/forge/Merge/MergeDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Version/version.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Milepost.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/New/Index.js" />
<option value="$PROJECT_DIR$/src/forge/Version/NewVersion.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/MergeItem.js" />
<option value="$PROJECT_DIR$/src/forge/Version/UpdateVersion.js" />
<option value="$PROJECT_DIR$/src/forge/Branch/branch.css" />
<option value="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" fullScreen="true">
<option name="y" value="23" />
<option name="width" value="1440" />
<option name="height" value="900" />
<option name="height" value="877" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
@ -239,19 +139,13 @@
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="forge" type="462c0819:PsiDirectoryNode" />
<item name="New" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="forge" type="462c0819:PsiDirectoryNode" />
<item name="Settings" type="462c0819:PsiDirectoryNode" />
<item name="Merge" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
@ -300,18 +194,19 @@
<workItem from="1585217705353" duration="104000" />
<workItem from="1585217834609" duration="4000" />
<workItem from="1585217980103" duration="3406000" />
<workItem from="1585288258489" duration="15174000" />
<workItem from="1585288258489" duration="17495000" />
<workItem from="1585732642767" duration="10719000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="50215000" />
<option name="totallyTimeSpent" value="63255000" />
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1440" height="900" extended-state="0" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.16881259" />
<window_info content_ui="combo" id="Project" order="0" weight="0.17095852" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
@ -323,8 +218,8 @@
<window_info anchor="bottom" id="TODO" order="6" />
<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.4566265" />
<window_info anchor="bottom" id="Terminal" order="10" visible="true" weight="0.38795182" />
<window_info anchor="bottom" id="Version Control" order="9" weight="0.61566263" />
<window_info active="true" anchor="bottom" id="Terminal" order="10" visible="true" weight="0.48433736" />
<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" />
@ -370,27 +265,22 @@
</entry>
</map>
</option>
<option name="RECENT_FILTERS">
<map>
<entry key="Branch">
<value>
<list />
</value>
</entry>
<entry key="User">
<value>
<list />
</value>
</entry>
</map>
</option>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/forge/Version/UpdateVersion.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-755">
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Version/NewVersion.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="698">
<caret line="67" column="25" lean-forward="true" selection-start-line="67" selection-start-column="25" selection-end-line="67" 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/newMilepost.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="87">
@ -453,17 +343,6 @@
</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/quillForEditor/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="125">
@ -549,34 +428,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/DetailTop.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/forge/Main/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-3990">
<folding>
<element signature="e#0#42#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="4777">
<caret line="303" column="11" selection-start-line="303" selection-start-column="11" selection-end-line="303" selection-end-column="11" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.idea/workspace.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-9766" />
@ -628,15 +479,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-12">
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</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="-1216">
@ -666,43 +508,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="464" column="1" lean-forward="true" selection-start-line="464" selection-start-column="1" selection-end-line="464" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="143">
<caret line="244" column="11" selection-start-line="244" selection-start-column="11" selection-end-line="244" selection-end-column="11" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</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="63">
<caret line="580" column="22" selection-start-line="580" selection-start-column="22" selection-end-line="580" selection-end-column="22" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#16273#18539#0" />
<element signature="e#17250#18162#0" />
<element signature="e#18177#18487#0" />
</folding>
</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="432">
<caret line="299" column="61" selection-start-line="299" selection-start-column="61" selection-end-line="299" selection-end-column="61" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/MilepostDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-3903">
@ -722,20 +527,10 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
<entry file="file://$PROJECT_DIR$/src/forge/New/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2193">
<caret line="352" column="14" selection-start-line="352" selection-start-column="14" selection-end-line="352" selection-end-column="14" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</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="461">
<caret line="41" column="22" selection-start-line="41" selection-start-column="22" selection-end-line="41" selection-end-column="22" />
<state relative-caret-position="199">
<caret line="245" column="59" selection-start-line="245" selection-start-column="59" selection-end-line="245" selection-end-column="59" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
@ -744,24 +539,76 @@
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="246">
<caret line="504" column="20" selection-start-line="504" selection-start-column="20" selection-end-line="504" selection-end-column="20" />
<state relative-caret-position="235">
<caret line="102" column="27" selection-start-line="102" selection-start-column="27" selection-end-line="102" selection-end-column="27" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Version/version.js">
<entry file="file://$PROJECT_DIR$/src/forge/Main/DetailTop.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="61">
<caret line="91" column="34" selection-start-line="91" selection-start-column="34" selection-end-line="91" selection-end-column="34" />
<state relative-caret-position="306">
<caret line="18" column="10" selection-start-line="18" selection-start-column="10" selection-end-line="18" selection-end-column="10" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="267">
<caret line="188" column="19" selection-start-line="188" selection-start-column="19" selection-end-line="188" selection-end-column="19" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Collaborator.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="109">
<caret line="189" column="35" lean-forward="true" selection-start-line="189" selection-start-column="35" selection-end-line="189" selection-end-column="35" />
<folding>
<element signature="e#0#42#0" expanded="true" />
<element signature="e#4421#5690#0" />
</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="225">
<caret line="245" column="39" lean-forward="true" selection-start-line="245" selection-start-column="39" selection-end-line="245" selection-end-column="39" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</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="246">
<caret line="295" column="142" selection-start-line="295" selection-start-column="142" selection-end-line="295" selection-end-column="142" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Settings/setting.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="47" column="22" selection-start-line="47" selection-start-column="22" selection-end-line="47" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="166" column="16" selection-start-line="166" selection-start-column="16" selection-end-line="166" selection-end-column="16" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Setting.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="144">
@ -772,39 +619,116 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Collaborator.js">
<entry file="file://$PROJECT_DIR$/src/forge/Version/version.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="253">
<caret line="17" column="37" lean-forward="true" selection-start-line="17" selection-start-column="37" selection-end-line="17" selection-end-column="37" />
<state relative-caret-position="354">
<caret line="145" column="6" selection-start-line="145" selection-start-column="6" selection-end-line="145" selection-end-column="6" />
<folding>
<element signature="e#0#42#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="284">
<caret line="354" column="57" selection-start-line="354" selection-start-column="43" selection-end-line="354" selection-end-column="57" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="182">
<caret line="257" column="23" selection-start-line="257" selection-start-column="23" selection-end-line="257" selection-end-column="23" />
<folding>
<element signature="e#0#40#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="144">
<caret line="427" column="36" selection-start-line="427" selection-start-column="36" selection-end-line="427" selection-end-column="36" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</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="-40">
<caret line="63" column="21" selection-start-line="63" selection-start-column="21" selection-end-line="63" selection-end-column="21" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="308">
<caret line="80" column="26" selection-start-line="80" selection-start-column="26" selection-end-line="80" selection-end-column="26" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Version/NewVersion.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="256">
<caret line="163" column="58" selection-start-line="163" selection-start-column="44" selection-end-line="163" selection-end-column="58" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Version/UpdateVersion.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="115">
<caret line="155" column="20" selection-start-line="155" selection-start-column="20" selection-end-line="155" selection-end-column="20" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Branch/branch.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="291">
<caret line="27" column="15" selection-start-line="27" selection-start-column="15" selection-end-line="27" selection-end-column="15" />
</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="98">
<caret line="110" column="77" selection-start-line="110" selection-start-column="67" selection-end-line="110" selection-end-column="77" />
<state relative-caret-position="252">
<caret line="91" column="17" lean-forward="true" selection-start-line="91" selection-start-column="17" selection-end-line="91" selection-end-column="17" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/New/Index.js">
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="199">
<caret line="245" column="59" lean-forward="true" selection-start-line="245" selection-start-column="59" selection-end-line="245" selection-end-column="59" />
<state relative-caret-position="282">
<caret line="241" column="69" lean-forward="true" selection-start-line="241" selection-start-column="69" selection-end-line="241" selection-end-column="69" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js">
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MessageCount.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="177">
<caret line="65" column="28" lean-forward="true" selection-start-line="65" selection-start-column="28" selection-end-line="65" selection-end-column="28" />
<state relative-caret-position="206">
<caret line="594" lean-forward="true" selection-start-line="594" selection-end-line="594" />
<folding>
<element signature="e#0#42#0" expanded="true" />
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>

View File

@ -15,7 +15,8 @@ class CloneAddress extends Component{
const { http_url , downloadUrl } = this.props;
return(
<div className="gitAddressClone">
<span className={"addressType active"} onClick={()=>this.changeAddress("http")}>HTTP</span>
{/* onClick={()=>this.changeAddress("http")} */}
<span>HTTP</span>
{/* <span className={address ==="ssh" ? "addressType active":"addressType"} onClick={()=>this.changeAddress("ssh")}>SSH</span> */}
<input type="text" id="copy_rep_content" value={ http_url }/>
<Tooltip title="复制链接">

View File

@ -17,20 +17,22 @@
box-shadow: 0px 0px 1px 1px rgba(134, 134, 134, 0.1);
border-radius: 3px;
background: #fff;
max-height: 200px;
max-height: 300px;
}
.OptionsUl{
max-height: 200px;
overflow-y: auto;
margin-top: 10px;
}
.OptionsUl li{
height: 22px;
line-height: 22px;
cursor: pointer;;
height: 30px;
/*line-height: 22px;*/
cursor: pointer;
}
.OptionsUl li a{
display: block;
padding-left: 2px;
padding: 4px;
/*padding-left: 2px;*/
}
.OptionsInput{
height: 32px;

View File

@ -48,6 +48,7 @@ class CoderRootDirectory extends Component{
}
componentDidMount=()=>{
let { search } = this.props.history.location;
let branchName = undefined;
if(search && search.indexOf("branch")>-1){
@ -63,7 +64,6 @@ class CoderRootDirectory extends Component{
// 获取根目录
getProjectRoot=(branch)=>{
const { projectsId } = this.props.match.params;
console.log(this.props);
const url = `/repositories/${projectsId}/entries.json`;
axios.get((url),{
params:{
@ -89,6 +89,7 @@ class CoderRootDirectory extends Component{
ChangeFile=(arr,index)=>{
this.renderUrl(arr.name,arr.path,arr.type);
//点击直接跳转页面 加载一次路由
this.getFileDetail(arr);
this.setState({
subFileType:arr.type
@ -125,8 +126,6 @@ class CoderRootDirectory extends Component{
getFileDetail=(arr)=>{
const { projectsId } = this.props.match.params;
const { branch } = this.state;
const url =`/repositories/${projectsId}/sub_entries.json`;
axios.get(url,{
@ -142,6 +141,10 @@ class CoderRootDirectory extends Component{
rootList:undefined
})
}else{
if(arr.type===""){
this.props.showNotification('该文件夹下已无文件')
return
}
this.setState({
fileDetail:undefined
})

View File

@ -0,0 +1,333 @@
import React , { Component } from 'react';
import {Menu, Spin} from 'antd';
import { getImageUrl , markdownToHTML } from 'educoder';
import { Router , Route , Link } from 'react-router-dom';
import Top from './DetailTop';
import './list.css';
import SelectBranch from '../Branch/SelectBranch';
import CloneAddress from '../Branch/CloneAddress';
import RootTable from './RootTable';
import CoderRootFileDetail from './CoderRootFileDetail';
import NullData from './NullData';
import axios from 'axios';
/**
* address:http和SSHhttp_url(对应git地址)
* branch:当前分支
* filePath:点击目录时当前目录的路径
* subfileType:保存当前点击目录的文件类型显示目录列表时才显示新建文件如果点击的是文件就不显示新建文件按钮
* readMeContent:根目录下面的readme文件内容
*/
class CoderRootDirectorytext extends Component{
constructor(props){
super(props);
this.state={
address:"http",
branch:"master",
filePath:[],
http_url:undefined,
subFileType:"",
readMeContent:undefined,
isSpin:true,
branchList:undefined,
fileDetail:undefined,
branchLastCommit:undefined,
rootData:undefined
}
}
changeAddress=(address)=>{
this.setState({
address
})
}
componentDidMount=()=>{
let { search } = this.props.history.location;
let branchName = undefined;
if(search && search.indexOf("branch")>-1){
branchName = search.split("=")[1];
this.setState({
branch:branchName
})
}
const { branch } = this.state;
this.getProjectRoot(branchName || branch);
}
// 获取根目录
getProjectRoot=(branch)=>{
const { projectsId } = this.props.match.params;
const url = `/repositories/${projectsId}/entries.json`;
axios.get((url),{
params:{
branch
}
}).then((result)=>{
if(result){
if(result && result.data && result.data.length > 0){
this.setState({
filePath:[],
fileDetail:undefined,
isSpin: false
})
this.renderData(result.data);
}
this.setState({
rootData:result.data
})
}
}).catch((error)=>{})
}
ChangeFile=(arr,index)=>{
this.renderUrl(arr.name,arr.path,arr.type);
//点击直接跳转页面 加载一次路由
this.getFileDetail(arr);
this.setState({
subFileType:arr.type
})
}
renderUrl=(name,path,type)=>{
let list =[];
const { filePath } = this.state;
if(path.indexOf("/")){
const array = path.split("/");
let str = "";
array.map((i,k)=>{
str += '/'+i;
return list.push({
index:k,
name:i,
path:str.substr(1),
type:(filePath && filePath.length>0) ? (filePath[k] ? filePath[k].type : type) : type
})
})
}else{
list.push({
index:0,
name,path,type
})
}
this.setState({
filePath:list
})
}
// 获取子目录
getFileDetail=(arr)=>{
const { projectsId } = this.props.match.params;
const { branch } = this.state;
const url =`/repositories/${projectsId}/sub_entries.json`;
axios.get(url,{
params:{
filepath:arr.path,
ref:branch
}
}).then((result)=>{
if(result && result.data && result.data.length > 0){
if(arr.type==="file"){
this.setState({
fileDetail:result.data[0],
rootList:undefined
})
}else{
if(arr.type===""){
this.props.showNotification('该文件夹下已无文件')
return
}
this.setState({
fileDetail:undefined
})
this.renderData(result.data)
}
}
}).catch((error)=>{
console.log(error);
})
}
renderData=(data)=>{
const rootList = [];
const readMeContent = [];
data && data.map((item,key)=>{
rootList.push({
key,
...item
})
if(item.name === 'README.md'){
readMeContent.push({...item})
}
})
this.setState({
rootList:rootList,
readMeContent
})
}
// readme文件内容
renderReadMeContent=(readMeContent)=>{
const { fileDetail } = this.state;
if(fileDetail){return;}
if(readMeContent && readMeContent.length > 0){
return(
<div className="commonBox">
<div className="commonBox-title">{readMeContent[0].name}</div>
<div className="commonBox-info">
{
readMeContent[0].content ?
<div className={"markdown-body"} dangerouslySetInnerHTML={{__html: markdownToHTML(readMeContent[0].content).replace(/▁/g, "▁▁▁")}}></div>
:
<span>暂无~</span>
}
</div>
</div>
)
}
}
// 选择分支
changeBranch=(value)=>{
const { branchList } = this.props;
let branchLastCommit = branchList && branchList.length >0 && branchList.filter(item=>item.name === value)[0];
this.setState({
branch:branchLastCommit && branchLastCommit.name,
branchLastCommit,
http_url:branchLastCommit && branchLastCommit.http_url,
isSpin: true
})
this.getProjectRoot(branchLastCommit.name);
}
render(){
const { rootList , branch ,filePath , fileDetail , subFileType , readMeContent, isSpin , rootData } = this.state;
const { branchLastCommit , http_url , isManager , isDeveloper } = this.props;
const { projectsId } = this.props.match.params;
const columns = [
{
dataIndex: 'name',
width:"100%",
render: (text,item) => (
<a onClick={()=>this.ChangeFile(item)}>
<i className={ item.type === "file" ? "iconfont icon-zuoye font-15 color-blue mr5":"iconfont icon-wenjian font-15 color-blue mr5"}></i>{text}
</a>
),
}
];
const title = () =>{
if(branchLastCommit && branchLastCommit.last_commit){
return(
<div className="f-wrap-alignCenter">
{
branchLastCommit.author ?
<React.Fragment>
<img src={getImageUrl(`images/${branchLastCommit.author.image_url}`)} className="radius mr10" width="32" height="32" alt=""/>
<span className="mr15">{branchLastCommit.author.login}</span>
</React.Fragment>
:""
}
<Link to={``} className="commitKey">{branchLastCommit.last_commit.id}</Link>
<span className="color-blue flex-1 hide-1">{branchLastCommit.last_commit.message}</span>
<span>{branchLastCommit.last_commit.time_from_now}</span>
</div>
)
}else{
return undefined;
}
}
const downloadUrl = ()=>{
if(branchLastCommit && branchLastCommit.zip_url){
return(
<Menu>
<Menu.Item><a href={branchLastCommit.zip_url}>ZIP</a></Menu.Item>
<Menu.Item><a href={branchLastCommit.tar_url}>TAR.GZ</a></Menu.Item>
</Menu>
)
}
}
const urlRoot = filePath && filePath.length > 0 ? `/${filePath[filePath.length - 1].path}` : "";
return(
<React.Fragment>
{
rootData &&
<React.Fragment>
{
rootData.length > 0 ?
<div>
<Top { ...this.props } {...this.state} />
<div className="f-wrap-between mt20">
<div className="f-wrap-alignCenter">
<SelectBranch branch={branch} changeBranch={this.changeBranch} {...this.props} {...this.state}></SelectBranch>
{
filePath && filePath.length > 0 &&
<span className="ml20 font-16">
<a onClick={()=>this.getProjectRoot(branch)} className="color-blue">{projectsId}</a>
{
filePath.map((item,key)=>{
return(
<React.Fragment>
{
key === filePath.length-1 ?
<span className="color-grey-6 subFileName" key={key}>{item.name}</span>
:
<a onClick={()=>this.ChangeFile(item,key)} className="color-blue subFileName" key={key}>{item.name}</a>
}
</React.Fragment>
)
})
}
</span>
}
</div>
<div className="f-wrap-alignCenter">
{
subFileType !== "file" && (isManager || isDeveloper) &&
<p className="addFile mr30">
<Link to={`/projects/${projectsId}/coders/${branch}/newfile${urlRoot}`} >新建文件</Link>
{/* <Link to={``}>上传文件</Link> */}
</p>
}
{
filePath && filePath.length === 0 && <CloneAddress http_url={http_url} downloadUrl={downloadUrl} showNotification={this.props.showNotification}></CloneAddress>
}
</div>
</div>
<Spin spinning={isSpin}>
{/* 文件夹-子目录列表 */}
{
rootList && <RootTable columns = {columns} data={rootList} title={() => title()}></RootTable>
}
{
fileDetail &&
<CoderRootFileDetail detail = {fileDetail} {...this.props} {...this.state}></CoderRootFileDetail>
}
{/* readme.txt */}
{ this.renderReadMeContent(readMeContent) }
</Spin>
</div>
:
<NullData {...this.props} {...this.state} http_url={http_url} ></NullData>
}
</React.Fragment>
}
</React.Fragment>
)
}
}
export default CoderRootDirectorytext;

View File

@ -21,6 +21,7 @@ const CoderRootBranch = Loadable({
loader: () => import('./CoderRootBranch'),
loading: Loading,
})
class CoderRootIndex extends Component{
render(){

View File

@ -251,9 +251,19 @@ class Detail extends Component{
isSpin:false
})
} else {
this.props.showNotification(`服务器开小差了`);
if(result.data.status !== 401){
this.props.showNotification(result.data.message);
}else{
this.setState({
isSpin:false
})
this.props.showNotification(`服务器开小差了`);
}
}
}).catch(error=>{
this.setState({
isSpin:false
})
console.log(error);
})
}

View File

@ -255,12 +255,18 @@ class MergeDetail extends Component{
</div>
</p>
<p className="mt15">{ data && data.issue.description}</p>
<p className="mt10 color-grey-c">
<p className="mt10">
<div className={data&&data.issue_status==="关闭"?"closedetail":"opendetail"}>{data&&data.issue_status==="关闭"?"关闭中!":"开启中!"} </div>
{ 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 className="color-grey-c">
{ 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>
<span className="span_title ml10">
请求从<strong> {data && data.pull_request.head} </strong><strong> {data && data.pull_request.base} </strong>
</span>
</p>
</div>
<div className="detailHeader-wrapper">
<div className="normal f-wrap-between">
@ -313,9 +319,9 @@ class MergeDetail extends Component{
<span className="span_title">指派给</span>
<span>{data && data.issue.assign_user_name}</span>
</p>
<p>
<p style={{display: "inline-block",'white-space': "nowrap" }}>
<span className="span_title">里程碑</span>
<span>{data&&data.issue.version===null?"未添加里程碑":data&&data.issue.version.length===0?data.issue.version:'未添加里程碑'}</span>
<span className="title_overflow">{data&&data.issue.version===null?"未添加里程碑":data&&data.issue.version.length===0?data.issue.version:'未添加里程碑'}</span>
</p>
</div>
</div>

View File

@ -1,7 +1,29 @@
import React , { Component } from 'react';
import { Link } from 'react-router-dom';
import {Popconfirm} from "antd";
class MergeItem extends Component{
constructor(props){
super(props);
this.state={
//显示 隐藏
isdisplay:false,
orderid:'',
}
}
onMouseMove=(type)=>{
this.setState({
isdisplay:true,
orderid:type
})
}
onMouseOut=()=>{
this.setState({
isdisplay:false
})
}
set_issue_tags =(issue_tags)=>{
if(issue_tags && issue_tags.length > 0){
@ -41,12 +63,23 @@ class MergeItem extends Component{
}
</p>
</div>
<ul className="topWrapper_select">
<ul className="topWrapper_select" onMouseMove={()=>this.onMouseMove(item.id)} onMouseOut={()=>this.onMouseOut()}>
<li>{this.set_issue_tags(item.issue_tags)}</li>
{/*<li>{item.issue_type || "--"}</li>*/}
<li>{item.version || "--"}</li>
<li>{item.assign_user_name || "--"}</li>
<li>{ item.journals_count ? <span><i className="iconfont icon-pinglun1 mr3 font-16"></i>{item.journals_count}</span> : "" }</li>
<li>
<div className="flex-1">
<p>
{ item.journals_count ? <Link to={`/projects/${projectsId}/merge/${item.pull_request_id}/Messagecount`}><i className="iconfont icon-pinglun1 mr3 font-16"></i>{item.journals_count}</Link> : "" }
</p>
<div className="milepostleft" style={{display:this.state.orderid===item.id&&this.state.isdisplay?'flex':'none'}}>
<div className="grid-item mr15 color-grey-9">
<Link to={`/projects/${projectsId}/merge/${item.pull_request_id}/updatemerge`} className="color-grey-9"><i className="iconfont icon-bianji3 font-14 mr5"></i></Link>
</div>
</div>
</div>
</li>
</ul>
</div>
)

View File

@ -11,7 +11,7 @@ import './merge.css';
import QuillForEditor from '../quillForEditor';
import MergeSubmit from './MergeSubmit';
// const TextArea = Input.TextArea;
const TextArea = Input.TextArea;
const options = [
['bold', 'italic', 'underline'],
@ -20,6 +20,7 @@ const options = [
['link', 'image'],
['formula']
];
class MessageCount extends Component{
constructor(props){
super(props);
@ -182,7 +183,7 @@ class MessageCount extends Component{
project_id:projectsId,
id:data.pull_request.id,
do:mergekey,
body:JSON.stringify(body),
body:body,
title:title,
}).then(result=>{
if(result){
@ -250,9 +251,9 @@ class MessageCount extends Component{
})
}
changbodypr=(value)=>{
changbodypr=(e)=>{
this.setState({
body:value
body:e.target.value
})
}
editdetail=(count,status)=>{
@ -502,9 +503,13 @@ class MessageCount extends Component{
}
<p className="mt10 color-grey-c">
<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">
<span className="color-grey-c ml10">
{ 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>
<span className="span_title ml10">
请求从<strong> {data && data.pull_request.head} </strong><strong> {data && data.pull_request.base} </strong>
</span>
<span className="pull-right lineH32">
{
data && data.issue.user_permission ?
@ -562,21 +567,21 @@ class MessageCount extends Component{
<div style={{display:this.state.ismesrge,marginTop:15}}>
<Input placeholder="标题" value={this.state.title} onChange={this.changtitlepr}/>
<div className="quillContent" style={{marginTop:"20px"}}>
<QuillForEditor
value = {this.state.body}
wrapStyle={{
height: '220px',
opacity:1,
}}
// autoFocus={true}
style={{ height: '170px' }}
placeholder="请输入合并请求描述..."
options={options}
onContentChange={this.changbodypr}
/>
</div>
{/* <TextArea placeholder="请输入合并描述..." style={{height:"300px",marginTop:15}} value={this.state.body} onChange={this.changbodypr} /> */}
{/*<div className="quillContent" style={{marginTop:"20px"}}>*/}
{/*<QuillForEditor*/}
{/*value = {this.state.body}*/}
{/*wrapStyle={{*/}
{/*height: '220px',*/}
{/*opacity:1,*/}
{/*}}*/}
{/*// autoFocus={true}*/}
{/*style={{ height: '170px' }}*/}
{/*placeholder="请输入合并请求描述..."*/}
{/*options={options}*/}
{/*onContentChange={this.changbodypr}*/}
{/*/>*/}
{/*</div>*/}
<TextArea placeholder="请输入合并描述..." style={{height:"170px",marginTop:20}} 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>
@ -634,9 +639,9 @@ class MessageCount extends Component{
data && data.issue.issue_tags ? <span className="issue-tag-show" style={{background: data.issue.issue_tags[0].color}}>{data.issue.issue_tags[0].name}</span> : "--"
}</span>
</p>
<p>
<p style={{display: "inline-block",'white-space': "nowrap" }}>
<span className="span_title">里程碑</span>
<span>{
<span className="title_overflow">{
data && data.issue.version ? data.issue.version : "--"
}</span>
</p>

View File

@ -167,6 +167,7 @@ class merge extends Component{
this.setState({
status_type:'1',
closeselect:undefined,
openselect:'123',
issue_tag_ids:'标签',
fixed_version_ids:'里程碑',
assigned_to_ids:'指派人',
@ -178,6 +179,8 @@ class merge extends Component{
this.setState({
status_type:'2',
openselect:undefined,
closeselect:'123',
issue_tag_ids:'标签',
fixed_version_ids:'里程碑',
assigned_to_ids:'指派人',

View File

@ -329,7 +329,7 @@ class Detail extends Component{
commentCtx = (ctx) => {
let _ctx = null;
try {
_ctx = JSON.parse(ctx);
} catch (e) {
@ -574,9 +574,9 @@ class Detail extends Component{
data && data.issue_tags ? <span className="issue-tag-show" style={{background: data.issue_tags[0].color}}>{data.issue_tags[0].name}</span> : "--"
}</span>
</p>
<p>
<p style={{display: "inline-block",'white-space': "nowrap" }}>
<span className="span_title">里程碑</span>
<span>{
<span className="title_overflow">{
data && data.version ? data.version : "--"
}</span>
</p>

View File

@ -41,6 +41,7 @@ class Milepost extends Component{
}
}).then((result)=>{
if(result){
this.setState({
data:result.data
})
@ -173,10 +174,10 @@ class Milepost extends Component{
if(data && data.versions && data.versions.length>0 ){
return(
<div>
<div className="tagList">
{
data.versions.map((item,key)=>{
data.versions.length===0?<NoneData></NoneData>:data.versions.map((item,key)=>{
return(
<div style={{display:'block'}}>
<div className="milepostdiv">
@ -279,20 +280,20 @@ class Milepost extends Component{
</div>
</div>
<div className="topWrapper">
<div className="topWrapper_type">
<li className={openselect ? "active":""} onClick={()=>this.opneMilelist(1)}>{data && data.open_count ? data.open_count : 0}个开启中</li>
<li className={closeselect ? "active":""} onClick={()=>this.opneMilelist(2)}>{data && data.closed_count ? data.closed_count : 0}个已关闭</li>
{/* <span onClick={this.opneMilelist}>{ data && data.open_count }</span>
<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>
<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 }

View File

@ -0,0 +1,106 @@
import React , { Component } from 'react';
import { Link } from 'react-router-dom';
class OrderItem extends Component{
set_issue_tags =(issue_tags)=>{
if(issue_tags && issue_tags.length > 0){
return(
issue_tags.map((item,key)=>{
return(
<span className="issue-tag-show" style={{background: item.color}}>{item.name}</span>
)
})
)
}else{
return("--")
}
}
render(){
const { issues , search_count , page , limit } = this.props;
const { projectsId } = this.props.match.params;
const renderList =()=>{
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>
<Link to={`/projects/${projectsId}/orders/${item.id}/MilepostDetail`} className="font-16">{item.name}</Link>
</div>
</div>
</div>
<div className="milepostdiv" style={{marginTop:5}}>
<div className="milepostrighe">
<div className="grid-item mr10">
<i className="iconfont icon-rili font-14 mr5">
</i>
{
item.effective_date ?
<span className="color-red">{item.effective_date}</span>
:
<span className="color-grey-c">暂无截止时间</span>
}
</div>
<div className="grid-item mr10 color-grey-9">
<i className="iconfont icon-issue font-14 mr5"></i>
<span>
{item.open_issues_count}个开启
</span>
</div>
<div className="grid-item mr10 color-grey-9">
<i className="iconfont icon-shanchudiao font-14 mr5"></i>
<span>
{item.close_issues_count}个关闭
</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>
</div>
: ''
}
</div>
<div className="milepostdiv"style={{marginTop:5}}>
<div className="textwidth">
<Text
type="secondary"
ellipsis={{rows: 30, expandable: false, onExpand: Function}}
>
{item.description}</Text>
</div>
</div>
</div>
)
})
}
return(
<div>
{renderList()}
</div>
)
}
}
export default OrderItem;

View File

@ -1,7 +1,18 @@
import React , { Component } from 'react';
import { Link } from 'react-router-dom';
import { Popconfirm} from 'antd'
class OrderItem extends Component{
constructor(props){
super(props);
this.state={
//显示 隐藏
isdisplay:false,
orderid:'',
}
}
set_issue_tags =(issue_tags)=>{
if(issue_tags && issue_tags.length > 0){
return(
@ -16,6 +27,23 @@ class OrderItem extends Component{
}
}
deletedetail=(id)=>{ // 学习挣钱,调用父组件方法
this.props.deletedetail(id);
}
onMouseMove=(type)=>{
this.setState({
isdisplay:true,
orderid:type
})
}
onMouseOut=()=>{
this.setState({
isdisplay:false
})
}
render(){
const { issues , search_count , page , limit } = this.props;
const { projectsId } = this.props.match.params;
@ -41,15 +69,33 @@ class OrderItem extends Component{
}
</p>
</div>
<ul className="topWrapper_select">
<ul className="topWrapper_select" onMouseMove={()=>this.onMouseMove(item.id)} onMouseOut={()=>this.onMouseOut()} >
<li>{this.set_issue_tags(item.issue_tags)}</li>
{/*<li>{item.issue_type || "--"}</li>*/}
<li>{item.tracker || "--"}</li>
<li>{item.author_name || "--"}</li>
<li>{item.assign_user_name || "--"}</li>
<li>{item.priority || "--"}</li>
<li><p style={{width:60,height:25,margin:'auto', paddingTop:2,background:item.priority==='高'?'#e67e22':item.priority==='正常'?'#28be6c':item.priority==='低'?'#1abc9c':'#e74c3c',color:'#ffffff',borderRadius:4}}>{item.priority|| "--"}</p></li>
<li>{item.done_ratio || "--"}</li>
<li>{ item.journals_count ? <Link to={`/projects/${projectsId}/orders/${item.id}/detail`}><i className="iconfont icon-pinglun1 mr3 font-16"></i>{item.journals_count}</Link> : "" }</li>
<li>
<div className="flex-1">
<p>
{ item.journals_count ? <Link to={`/projects/${projectsId}/orders/${item.id}/detail`}><i className="iconfont icon-pinglun1 mr3 font-16"></i>{item.journals_count}</Link> : "" }
</p>
<div className="milepostleft" style={{display:this.state.orderid===item.id&&this.state.isdisplay?'flex':'none'}}>
<div className="grid-item mr15 color-grey-9">
<Link to={`/projects/${projectsId}/orders/${item.id}/updatedetail`} className="color-grey-9"><i className="iconfont icon-bianji3 font-14 mr5"></i></Link>
</div>
<div className="grid-item color-grey-9">
<Popconfirm placement="bottom" title={'您确定要删除吗'} okText="是" cancelText="否" onConfirm={()=>this.deletedetail(item.id)}>
<i className="iconfont icon-yiguanbi1 font-14"></i>
</Popconfirm>
</div>
</div>
</div>
</li>
</ul>
</div>
)

View File

@ -164,6 +164,15 @@
.topWrapper .ant-btn.ant-input-search-button{
height: 30px;
}
.title_overflow{
max-width: 220px;
white-space: nowrap;
overflow: hidden;
display: inline-flex;
white-space: nowrap;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
}
.topWrapper_select li{
text-align: center;
cursor: pointer;

View File

@ -217,12 +217,14 @@ class order extends Component{
openorder=(type)=>{
if(type){
console.log(this.state.closeselect+"|"+this.state.openselect)
const { current_user } = this.props;
if(type===1){
this.setState({
status_type:'1',
closeselect:undefined,
openselect:1,
issue_tag_ids:'标签',
tracker_ids:'所有分类',
author_ids:'发布人',
@ -237,6 +239,8 @@ class order extends Component{
this.setState({
status_type:'2',
openselect:undefined,
closeselect:1,
issue_tag_ids:'标签',
tracker_ids:'所有分类',
author_ids:'发布人',
@ -260,12 +264,13 @@ class order extends Component{
this.setState({
isSpin:true
})
console.log(current_user)
if(type){
if(current_user===undefined){
this.setState({
isSpin:false
})
alert("请登录后查看")
return;
}
if(type===1){
@ -314,6 +319,22 @@ class order extends Component{
this.getIssueList(1,limit,search,undefined,undefined,status_type);
}
}
deletedetail=(id)=>{
const { projectsId} = this.props.match.params;
const url = `/projects/${projectsId}/issues/${id}.json`;
axios.delete(url,{ data: {
project_id: projectsId,
id:id
}
}).then((result)=>{
if(result){
this.getIssueList()
}
}).catch((error)=>{
console.log(error);
})
console.log(id)
}
render(){
const { current_user } = this.props;
@ -373,8 +394,8 @@ class order extends Component{
<ul className="topWrapper_type">
<li className={!author_id && !assigned_to_id ? "active":""} onClick={()=>this.ChangeAssign()}>全部</li>
{}
<li style={{display:current_user===undefined?'none':'flex'}} className={assigned_to_id ? "active":""} onClick={ ()=>this.ChangeAssign(1)}>指派给我</li>
<li style={{display:current_user===undefined?'none':'flex'}} className={author_id ? "active":""} onClick={()=>this.ChangeAssign(2)}>由我创建</li>
<li style={{display:current_user&&current_user.login===""?'none':'flex'}} className={assigned_to_id ? "active":""} onClick={ ()=>this.ChangeAssign(1)}>指派给我</li>
<li style={{display:current_user&&current_user.login===""?'none':'flex'}} className={author_id ? "active":""} onClick={()=>this.ChangeAssign(2)}>由我创建</li>
{/* <li>@我的</li> */}
</ul>
<ul className="topWrapper_select">
@ -424,7 +445,7 @@ class order extends Component{
search_count === 0 ?
<NoneData _html="暂时还没有相关数据哦!" />
:
<OrderItem issues={issues} search_count={search_count} page={page} limit={limit} {...this.props} {...this.state}></OrderItem>
<OrderItem issues={issues} search_count={search_count} page={page} limit={limit} {...this.props} {...this.state} deletedetail={this.deletedetail}></OrderItem>
}
{ Paginations }
</Spin>

View File

@ -191,6 +191,16 @@ class Collaborator extends Component{
<div className="normalBox-title font-16">
协作者
</div>
<div className="addPanel">
<AutoComplete
dataSource={source}
style={{ width: 200 }}
onChange={this.changeInputUser}
onSelect={this.selectInputUser}
placeholder="搜索用户"
/>
<a className="small_submitBtn ml20" onClick={this.addCollaborator}>增加协作者</a>
</div>
<Spin spinning={isSpin}>
<div className="collaboratorList">
{
@ -224,16 +234,7 @@ class Collaborator extends Component{
</div>
</Spin>
<div className="addPanel">
<AutoComplete
dataSource={source}
style={{ width: 200 }}
onChange={this.changeInputUser}
onSelect={this.selectInputUser}
placeholder="搜索用户"
/>
<a className="small_submitBtn ml20" onClick={this.addCollaborator}>增加协作者</a>
</div>
</div>
{
total_count && total_count > LIMIT ?

View File

@ -62,7 +62,7 @@
}
.collaboratorItem{
display: flex;
border-bottom: 1px solid #f4f4f4;
border-top: 1px solid #f4f4f4;
padding:15px;
}
.collaboratorItem>span{

View File

@ -145,7 +145,7 @@ class NewVersion extends Component{
<h5 style={{marginLeft:15}}>版本发布组织项目的版本</h5>
<Divider/>
<div style={{display:'flex'}}>
<Input placeholder="标签名称" style={{width:180,marginLeft:15}} value={tag_name} onChange={this.changmodelname}/>
<Input placeholder="标签名称" style={{width:180,marginLeft:15}} value={tag_name} onChange={this.changmodelname} />
<div style={{marginLeft:20,marginRight:20,lineHeight: '32px'}}>@ </div>
<Dropdown overlay={this.renderMenu(branches &&branches,'pull')} trigger={['click']} placement="bottomCenter">
<Button style={{width:180}}>{pull}</Button>
@ -161,7 +161,7 @@ class NewVersion extends Component{
required: true, message: '请输入标题'
}],
})(
<Input placeholder="标题"/>
<Input placeholder="标题" maxLength="32"/>
)}
</Form.Item>
</div>

View File

@ -152,7 +152,7 @@ class NewVersion extends Component{
initialValue:this.state.data&&this.state.data.name
})(
<Input placeholder="标题"/>
<Input placeholder="标题" maxLength="32"/>
)}
</Form.Item>
</div>