forked from Gitlink/forgeplus-react
issue问题修改
This commit is contained in:
commit
364827b63f
|
|
@ -1,12 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<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/Activity/Activity.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Activity/Activity.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/forge/Merge/merge.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Merge/merge.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/forge/Order/Milepost.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Order/Milepost.js" afterDir="false" />
|
||||
</list>
|
||||
<list default="true" id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="" />
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
|
@ -16,10 +11,10 @@
|
|||
<component name="FileEditorManager">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Merge/merge.js">
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Setting.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="333">
|
||||
<caret line="264" column="19" selection-start-line="264" selection-start-column="19" selection-end-line="264" selection-end-column="19" />
|
||||
<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>
|
||||
|
|
@ -30,8 +25,8 @@
|
|||
<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="131">
|
||||
<caret line="171" column="10" selection-start-line="171" selection-start-column="10" selection-end-line="171" selection-end-column="10" />
|
||||
<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>
|
||||
|
|
@ -39,11 +34,11 @@
|
|||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Activity/Activity.js">
|
||||
<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="303">
|
||||
<caret line="163" column="16" selection-start-line="163" selection-start-column="16" selection-end-line="163" selection-end-column="16" />
|
||||
<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>
|
||||
|
|
@ -51,21 +46,91 @@
|
|||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.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" />
|
||||
<folding>
|
||||
<element signature="e#0#40#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</component>
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<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>
|
||||
|
|
@ -80,11 +145,28 @@
|
|||
<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)=>{</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>
|
||||
</findStrings>
|
||||
<dirStrings>
|
||||
<dir>$PROJECT_DIR$/src/forge</dir>
|
||||
<dir>$PROJECT_DIR$</dir>
|
||||
<dir>$PROJECT_DIR$/src</dir>
|
||||
<dir>$PROJECT_DIR$/src/forge/Merge</dir>
|
||||
<dir>$PROJECT_DIR$/src/forge</dir>
|
||||
</dirStrings>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
|
|
@ -101,11 +183,9 @@
|
|||
<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" />
|
||||
<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" />
|
||||
<option value="$PROJECT_DIR$/src/forge/Main/Detail.js" />
|
||||
<option value="$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js" />
|
||||
|
|
@ -113,22 +193,29 @@
|
|||
<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/Order/Milepost.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/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" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" fullScreen="true">
|
||||
<option name="y" value="23" />
|
||||
<option name="width" value="1440" />
|
||||
<option name="height" value="877" />
|
||||
<option name="height" value="900" />
|
||||
</component>
|
||||
<component name="ProjectView">
|
||||
<navigator proportions="" version="1">
|
||||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="Scope" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
|
|
@ -152,13 +239,19 @@
|
|||
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="forge" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="Activity" 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" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</subPane>
|
||||
</pane>
|
||||
<pane id="Scope" />
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
|
|
@ -206,18 +299,19 @@
|
|||
<workItem from="1585210651078" duration="1600000" />
|
||||
<workItem from="1585217705353" duration="104000" />
|
||||
<workItem from="1585217834609" duration="4000" />
|
||||
<workItem from="1585217980103" duration="1984000" />
|
||||
<workItem from="1585217980103" duration="3406000" />
|
||||
<workItem from="1585288258489" duration="15174000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="33619000" />
|
||||
<option name="totallyTimeSpent" value="50215000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="0" y="0" width="1440" height="900" extended-state="0" />
|
||||
<editor active="true" />
|
||||
<layout>
|
||||
<window_info content_ui="combo" id="Project" order="0" weight="0.26752505" />
|
||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.16881259" />
|
||||
<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" />
|
||||
|
|
@ -229,8 +323,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.24096386" />
|
||||
<window_info active="true" anchor="bottom" id="Terminal" order="10" visible="true" weight="0.53975904" />
|
||||
<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="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" />
|
||||
|
|
@ -251,6 +345,32 @@
|
|||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State>
|
||||
<option name="RECENTLY_FILTERED_USER_GROUPS">
|
||||
<collection />
|
||||
</option>
|
||||
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
|
||||
<collection />
|
||||
</option>
|
||||
<option name="COLUMN_ORDER">
|
||||
<list>
|
||||
<option value="0" />
|
||||
<option value="1" />
|
||||
<option value="2" />
|
||||
<option value="3" />
|
||||
</list>
|
||||
</option>
|
||||
</State>
|
||||
</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">
|
||||
|
|
@ -351,16 +471,6 @@
|
|||
</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">
|
||||
|
|
@ -395,15 +505,6 @@
|
|||
</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">
|
||||
|
|
@ -448,36 +549,6 @@
|
|||
</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/Order/Detail.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2872">
|
||||
<caret line="327" lean-forward="true" selection-start-line="327" selection-end-line="327" />
|
||||
<folding>
|
||||
<element signature="e#0#40#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="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/Main/DetailTop.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state>
|
||||
|
|
@ -496,23 +567,6 @@
|
|||
</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="-5010">
|
||||
<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>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-1049">
|
||||
<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/Detail.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="4777">
|
||||
|
|
@ -523,31 +577,11 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="326">
|
||||
<caret line="305" column="20" selection-start-line="305" selection-start-column="20" selection-end-line="305" selection-end-column="20" />
|
||||
<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" />
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Setting.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1360">
|
||||
<caret line="80" column="27" selection-start-line="80" selection-start-column="27" selection-end-line="80" selection-end-column="27" />
|
||||
<folding>
|
||||
<element signature="e#0#42#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Newfile/Index.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="884">
|
||||
|
|
@ -568,16 +602,6 @@
|
|||
</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="237">
|
||||
<caret line="137" column="24" lean-forward="true" selection-start-line="137" selection-start-column="24" selection-end-line="137" selection-end-column="24" />
|
||||
<folding>
|
||||
<element signature="e#0#42#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/.gitignore">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="444">
|
||||
|
|
@ -594,10 +618,94 @@
|
|||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Activity/Activity.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="354">
|
||||
<caret line="166" column="11" selection-start-line="166" selection-start-column="11" selection-end-line="166" selection-end-column="11" />
|
||||
<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="-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">
|
||||
<caret line="202" column="10" selection-start-line="202" selection-start-column="10" selection-end-line="202" selection-end-column="10" />
|
||||
<folding>
|
||||
<element signature="e#0#40#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Merge/UpdateMerge.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-3457">
|
||||
<folding>
|
||||
<element signature="e#0#40#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/index.css">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Merge/merge.css">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="454">
|
||||
<caret line="31" column="23" selection-start-line="31" selection-start-column="23" selection-end-line="31" selection-end-column="23" />
|
||||
</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="333">
|
||||
<caret line="264" column="19" selection-start-line="264" selection-start-column="19" selection-end-line="264" selection-end-column="19" />
|
||||
<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">
|
||||
<folding>
|
||||
<element signature="e#0#42#0" expanded="true" />
|
||||
</folding>
|
||||
|
|
@ -606,18 +714,95 @@
|
|||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Order/Milepost.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="131">
|
||||
<caret line="171" column="10" selection-start-line="171" selection-start-column="10" selection-end-line="171" selection-end-column="10" />
|
||||
<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>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Activity/Activity.js">
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="303">
|
||||
<caret line="163" column="16" selection-start-line="163" selection-start-column="16" selection-end-line="163" selection-end-column="16" />
|
||||
<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" />
|
||||
<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="246">
|
||||
<caret line="504" column="20" selection-start-line="504" selection-start-column="20" selection-end-line="504" selection-end-column="20" />
|
||||
<folding>
|
||||
<element signature="e#0#40#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.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>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
import React , { Component } from 'react';
|
||||
import { Dropdown , Menu , Icon , Pagination} from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import moment from 'moment';
|
||||
import '../css/index.css';
|
||||
import '../Branch/branch.css';
|
||||
import './activity.css';
|
||||
import NoneData from '../Nodata';
|
||||
|
||||
|
||||
import ActivityItem from './ActivityItem';
|
||||
import axios from 'axios';
|
||||
|
|
@ -155,23 +155,29 @@ class Activity extends Component{
|
|||
</div>
|
||||
<div className="df trendsTop mt20">
|
||||
<div className="branchDropdown f-wrap-alignCenter">
|
||||
<span className="color-grey-9 mr3">周期:</span>
|
||||
<Dropdown overlay={menu} trigger={['click']} placement="bottomLeft">
|
||||
<a className="ant-dropdown-link" style={{'max-width': 75}}>
|
||||
<a className="ant-dropdown-link">
|
||||
<span className="color-grey-9 mr3">周期:</span>
|
||||
{name && name.length>0 && name[0].name} <Icon type="down" />
|
||||
</a>
|
||||
</Dropdown>
|
||||
</div>
|
||||
</div>
|
||||
<div className="activity_list">
|
||||
{
|
||||
project_trends && project_trends.map((item,key)=>{
|
||||
return(
|
||||
<ActivityItem item={item} {...this.props} ></ActivityItem>
|
||||
)
|
||||
})
|
||||
}
|
||||
</div>
|
||||
{
|
||||
project_trends && project_trends.length > 0 ?
|
||||
<div className="activity_list">
|
||||
{
|
||||
project_trends && project_trends.map((item,key)=>{
|
||||
return(
|
||||
<ActivityItem item={item} {...this.props} ></ActivityItem>
|
||||
)
|
||||
})
|
||||
}
|
||||
</div>
|
||||
:
|
||||
<NoneData _html="暂时还没有相关数据哦!" />
|
||||
}
|
||||
|
||||
{
|
||||
data && data.project_trends_size > 0 && data.project_trends_size > LIMIT &&
|
||||
<div className="pageDIV">
|
||||
|
|
|
|||
|
|
@ -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="复制链接">
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 5.7 KiB |
|
|
@ -1,6 +1,7 @@
|
|||
import React , { Component } from 'react';
|
||||
import { Link } from "react-router-dom";
|
||||
import { Dropdown , Menu , Icon , Tooltip } from 'antd';
|
||||
import { truncateCommitId } from '../common/util';
|
||||
|
||||
import './list.css'
|
||||
import { branch } from 'recompose';
|
||||
|
|
@ -21,7 +22,7 @@ class CoderRootBranch extends Component {
|
|||
if(branchList && branchList.length>0){
|
||||
return(
|
||||
<React.Fragment>
|
||||
|
||||
|
||||
|
||||
<ul className="branchUl">
|
||||
{
|
||||
|
|
@ -32,7 +33,7 @@ class CoderRootBranch extends Component {
|
|||
<Link to={`/projects/${projectsId}/coders?branch=${item.name}`} className="color-blue font-15" style={{"maxWidth":"100px"}}>{item.name}</Link>
|
||||
{/*<span className="color-blue font-15">{item.name}</span>*/}
|
||||
<p className="f-wrap-alignCenter">
|
||||
<span className="mr5 color-blue">{item.last_commit && item.last_commit.id}</span>
|
||||
<span className="mr5 color-blue">{item.last_commit && truncateCommitId(item.last_commit.id)}</span>
|
||||
{/*<Link to="javascript:void(0)" className="mr5 color-blue" >{item.last_commit && item.last_commit.id}</Link>*/}
|
||||
<span className="color-grey-9 hide-1 messages leftPoint">{item.last_commit && item.last_commit.message}</span>
|
||||
<span className="color-grey-6 leftPoint">最后更新于{item.last_commit && item.last_commit.time_from_now}</span>
|
||||
|
|
@ -40,7 +41,7 @@ class CoderRootBranch extends Component {
|
|||
</div>
|
||||
<span>
|
||||
<Link to={`/projects/${projectsId}/merge/new`} className="mr20 operationBtn">创建合并请求</Link>
|
||||
|
||||
|
||||
<Dropdown overlay={menu(item.zip_url,item.tar_url)} trigger={['click']} placement="bottomRight" className="operationBtn">
|
||||
<a className="ant-dropdown-link">
|
||||
<Tooltip title={`下载分支${item.name}`}><Icon type="cloud-download" className="font-18"/></Tooltip>
|
||||
|
|
@ -75,4 +76,4 @@ class CoderRootBranch extends Component {
|
|||
|
||||
}
|
||||
|
||||
export default CoderRootBranch;
|
||||
export default CoderRootBranch;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import React , { Component } from 'react';
|
||||
import { Table , Spin } from 'antd';
|
||||
import { getImageUrl } from 'educoder';
|
||||
import { truncateCommitId } from '../common/util'
|
||||
import SelectBranch from '../Branch/SelectBranch';
|
||||
import Top from './DetailTop';
|
||||
|
||||
|
|
@ -92,7 +93,7 @@ class CoderRootCommit extends Component{
|
|||
title:"SHA",
|
||||
dataIndex: 'sha',
|
||||
render: (text) => (
|
||||
<span className="commitKey">{text}</span>
|
||||
<span className="commitKey">{truncateCommitId(text)}</span>
|
||||
)
|
||||
},{
|
||||
title:"备注",
|
||||
|
|
@ -124,7 +125,7 @@ class CoderRootCommit extends Component{
|
|||
|
||||
const Pagination =()=> {
|
||||
if(dataCount > limit){
|
||||
return(
|
||||
return(
|
||||
<div className="edu-txt-center pt30 mb30">
|
||||
<Pagination simple defaultCurrent={page} total={dataCount} pageSize={limit} onChange={this.ChangePage}></Pagination>
|
||||
</div>
|
||||
|
|
@ -153,4 +154,4 @@ class CoderRootCommit extends Component{
|
|||
)
|
||||
}
|
||||
}
|
||||
export default CoderRootCommit;
|
||||
export default CoderRootCommit;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import CloneAddress from '../Branch/CloneAddress';
|
|||
import RootTable from './RootTable';
|
||||
import CoderRootFileDetail from './CoderRootFileDetail';
|
||||
import NullData from './NullData';
|
||||
import { truncateCommitId } from '../common/util';
|
||||
|
||||
import axios from 'axios';
|
||||
/**
|
||||
|
|
@ -236,7 +237,7 @@ class CoderRootDirectory extends Component{
|
|||
</React.Fragment>
|
||||
:""
|
||||
}
|
||||
<Link to={``} className="commitKey">{branchLastCommit.last_commit.id}</Link>
|
||||
<Link to={``} className="commitKey">{truncateCommitId(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>
|
||||
|
|
|
|||
|
|
@ -1,20 +1,15 @@
|
|||
import React , { Component } from "react";
|
||||
// import Editor from "react-monaco-editor";
|
||||
|
||||
import {UnControlled as CodeMirror} from 'react-codemirror2';
|
||||
import 'codemirror/mode/cmake/cmake';
|
||||
import 'codemirror/mode/sql/sql';
|
||||
import 'codemirror/mode/xml/xml';
|
||||
import 'codemirror/mode/clike/clike';
|
||||
import 'codemirror/mode/javascript/javascript';
|
||||
import 'codemirror/addon/hint/show-hint.css';
|
||||
import 'codemirror/addon/hint/show-hint.js';
|
||||
|
||||
import { Popconfirm, Result } from 'antd';
|
||||
|
||||
import './list.css';
|
||||
|
||||
import axios from 'axios';
|
||||
|
||||
import CodeMirror from 'react-codemirror';
|
||||
require('codemirror/lib/codemirror.css');
|
||||
require('codemirror/mode/javascript/javascript');
|
||||
require('codemirror/mode/xml/xml');
|
||||
require('codemirror/mode/markdown/markdown');
|
||||
|
||||
function bytesToSize(bytes) {
|
||||
if (bytes === 0) return '0 B';
|
||||
let k = 1024,
|
||||
|
|
@ -51,7 +46,7 @@ class CoderRootFileDetail extends Component{
|
|||
}
|
||||
|
||||
// 编辑文件
|
||||
|
||||
|
||||
changeMmirror=(e,e1,value)=>{
|
||||
this.setState({
|
||||
value
|
||||
|
|
@ -104,12 +99,22 @@ class CoderRootFileDetail extends Component{
|
|||
console.log(error);
|
||||
})
|
||||
}
|
||||
updateCode=(value)=> {
|
||||
this.setState({
|
||||
value,
|
||||
});
|
||||
}
|
||||
|
||||
render(){
|
||||
const { detail , current_user , isManager , isReporter , isDeveloper } = this.props;
|
||||
const { readOnly ,value } = this.state;
|
||||
let flag = current_user && current_user.login && (isManager || isReporter);
|
||||
|
||||
let flag = current_user && current_user.login && (isManager || isDeveloper);
|
||||
var options = {
|
||||
lineNumbers: true,
|
||||
mode: 'javascript',
|
||||
readOnly:readOnly?'nocursor':false,
|
||||
autofocus:readOnly?false:true
|
||||
};
|
||||
return(
|
||||
<div>
|
||||
<div className="branchTable">
|
||||
|
|
@ -144,23 +149,7 @@ class CoderRootFileDetail extends Component{
|
|||
<a href={detail.download_url} className="color-blue font-15">下载原始文件</a>
|
||||
</div>
|
||||
:
|
||||
<CodeMirror
|
||||
value={value}
|
||||
options={{
|
||||
// mode: 'xml',
|
||||
theme: 'default',
|
||||
lineNumbers: true,
|
||||
// extraKeys: {"Ctrl-Q": "autocomplete"}, // 快捷键
|
||||
indentUnit: 4, //代码缩进为一个tab的距离
|
||||
matchBrackets: true,
|
||||
autoRefresh: true,
|
||||
smartIndent: true,//智能换行
|
||||
styleActiveLine: true,
|
||||
lint: true,
|
||||
readOnly: readOnly?"nocursor":false
|
||||
}}
|
||||
onChange={this.changeMmirror}
|
||||
/>
|
||||
<CodeMirror ref="editor" value={detail.content} onChange={this.updateCode} options={options} />
|
||||
// <Editor
|
||||
// height="300px"
|
||||
// theme={"vs-dark"}
|
||||
|
|
@ -177,4 +166,4 @@ class CoderRootFileDetail extends Component{
|
|||
}
|
||||
}
|
||||
|
||||
export default CoderRootFileDetail;
|
||||
export default CoderRootFileDetail;
|
||||
|
|
|
|||
|
|
@ -139,30 +139,16 @@ class Detail extends Component{
|
|||
watchers_count:undefined ,
|
||||
praises_count:undefined ,
|
||||
forked_count:undefined,
|
||||
watched: false,
|
||||
praised: false,
|
||||
http_url: undefined,
|
||||
author:undefined,
|
||||
// current_user:undefined,
|
||||
|
||||
branchs:undefined,
|
||||
branchList:undefined,
|
||||
branchLastCommit:undefined,
|
||||
}
|
||||
}
|
||||
|
||||
getUserInfo=()=>{
|
||||
const url = `/users/me.json`;
|
||||
axios.get(url).then(result=>{
|
||||
if(result && result.data.login){
|
||||
this.setState({
|
||||
current_user:result.data
|
||||
})
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
componentDidMount=()=>{
|
||||
this.getDetail();
|
||||
}
|
||||
|
|
@ -187,7 +173,8 @@ class Detail extends Component{
|
|||
isDeveloper:result.data.permission && result.data.permission === "Developer",
|
||||
http_url: result.data.clone_url,
|
||||
author:result.data.author,
|
||||
|
||||
praised: result.data.praised,
|
||||
watched: result.data.watched,
|
||||
watchers_count:result.data.watchers_count,
|
||||
praises_count:result.data.praises_count,
|
||||
forked_count:result.data.forked_count,
|
||||
|
|
@ -202,51 +189,51 @@ class Detail extends Component{
|
|||
// 关注和取消关注
|
||||
focusFunc =(flag)=>{
|
||||
const { project_id } = this.state;
|
||||
if(!flag){
|
||||
const url = `/projects/${project_id}/watchers/follow.json`;
|
||||
axios.post(url).then(result=>{
|
||||
if(result && result.data.status === 0){
|
||||
this.getDetail();
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
})
|
||||
}else{
|
||||
const url = `/projects/${project_id}/watchers/unfollow.json`;
|
||||
axios.delete(url).then(result=>{
|
||||
if(result && result.data.status === 0){
|
||||
this.getDetail();
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
axios({
|
||||
method: flag? 'delete' : 'post',
|
||||
url: `/projects/${project_id}/watchers/${flag? 'unfollow' : 'follow'}.json`
|
||||
})
|
||||
.then(result => {
|
||||
if(result && result.data.status === 0){
|
||||
this.setWatchersCount(result.data.watchers_count, result.data.watched);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
|
||||
// 点赞和取消点赞
|
||||
pariseFunc=(flag)=>{
|
||||
const { project_id } = this.state;
|
||||
if(!flag){
|
||||
const url = `/projects/${project_id}/praise_tread/like.json`;
|
||||
axios.post(url).then(result=>{
|
||||
if(result && result.data.status === 0){
|
||||
this.getDetail();
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
})
|
||||
}else{
|
||||
const url = `/projects/${project_id}/praise_tread/unlike.json`;
|
||||
axios.delete(url).then(result=>{
|
||||
if(result && result.data.status === 0){
|
||||
this.getDetail();
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
})
|
||||
}
|
||||
axios({
|
||||
method: flag? 'delete' : 'post',
|
||||
url: `/projects/${project_id}/praise_tread/${flag? 'unlike' : 'like'}.json`
|
||||
})
|
||||
.then(result => {
|
||||
if(result && result.data.status === 0){
|
||||
this.setPraisesCount(result.data.praises_count, result.data.praised)
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
|
||||
setWatchersCount = (count, is_watched) => {
|
||||
this.setState({
|
||||
watched: is_watched,
|
||||
watchers_count: count
|
||||
})
|
||||
}
|
||||
|
||||
setPraisesCount = (count, is_praised) => {
|
||||
this.setState({
|
||||
praised: is_praised,
|
||||
praises_count: count
|
||||
})
|
||||
}
|
||||
|
||||
// fork项目
|
||||
forkFunc=()=>{
|
||||
this.setState({
|
||||
|
|
@ -255,17 +242,20 @@ class Detail extends Component{
|
|||
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.id}/coders`);
|
||||
this.props.showNotification(result.data.message);
|
||||
this.setState({
|
||||
if (result) {
|
||||
if (result.data.status === 0) {
|
||||
this.props.history.push(`/projects/${result.data.id}/coders`);
|
||||
}
|
||||
this.setState({
|
||||
isSpin:false
|
||||
})
|
||||
this.props.showNotification(result.data.message);
|
||||
}else{
|
||||
this.setState({
|
||||
isSpin:false
|
||||
})
|
||||
this.props.showNotification(result.data.message);
|
||||
|
||||
this.props.showNotification(`服务器开小差了`);
|
||||
}
|
||||
}).catch(error=>{
|
||||
console.log(error);
|
||||
|
|
@ -293,8 +283,7 @@ class Detail extends Component{
|
|||
}
|
||||
|
||||
render(){
|
||||
|
||||
const { projectDetail , watchers_count , praises_count , forked_count , isSpin , isManager } = this.state;
|
||||
const { projectDetail , watchers_count , praises_count , forked_count , isSpin , isManager, watched, praised } = this.state;
|
||||
const url = this.props.history.location.pathname;
|
||||
const urlArr= url.split("/");
|
||||
const urlFlag = (urlArr.length === 3);
|
||||
|
|
@ -331,16 +320,16 @@ class Detail extends Component{
|
|||
</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 className="detail_tag_btn_name" onClick={()=>this.focusFunc(watched)}>
|
||||
<img src={watched ? img_focused : img_focus} alt="" width="14px"/>
|
||||
{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 className="detail_tag_btn_name" onClick={()=>this.pariseFunc(praised)}>
|
||||
<img src={praised ? img_parised : img_parise} width="13px" alt=""/>
|
||||
{praised ? '取消点赞':'点赞'}
|
||||
</a>
|
||||
<span className="detail_tag_btn_count">{praises_count}</span>
|
||||
</span>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import Nav from '../Order/Nav';
|
|||
import UploadComponent from '../Upload/Index';
|
||||
|
||||
import{ Modal,Col,Form,Input,Tooltip,Popconfirm } from 'antd'
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import NoneData from '../Nodata';
|
||||
|
||||
|
||||
const TextArea = Input.TextArea;
|
||||
|
|
@ -226,7 +226,7 @@ class MergeDetail extends Component{
|
|||
)
|
||||
}else{
|
||||
return(
|
||||
<NoneData />
|
||||
<NoneData _html="暂时还没有相关数据哦!" />
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -235,14 +235,23 @@ class MergeDetail extends Component{
|
|||
<div className="main">
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state}/>
|
||||
<Link to={`/projects/${projectsId}/merge/new`} className="topWrapper_btn">创建合并请求</Link>
|
||||
{
|
||||
data && data.issue.user_permission ?
|
||||
<Link to={`/projects/${projectsId}/merge/new`} className="topWrapper_btn">创建合并请求</Link>
|
||||
: ''
|
||||
}
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<div className="detailContent">
|
||||
<p>
|
||||
<span className="font-16" > { data && data.issue.subject}</span>
|
||||
<div>
|
||||
<Link to={`/projects/${projectsId}/merge/${mergeid}/updatemerge`} className="color-blue fr">编辑</Link>
|
||||
<div>
|
||||
{
|
||||
data && data.issue.user_permission ?
|
||||
<Link to={`/projects/${projectsId}/merge/${mergeid}/updatemerge`} className="color-blue fr">编辑</Link>
|
||||
: ''
|
||||
}
|
||||
</div>
|
||||
</p>
|
||||
<p className="mt15">{ data && data.issue.description}</p>
|
||||
|
|
|
|||
|
|
@ -479,7 +479,11 @@ class MessageCount extends Component{
|
|||
<div className="main">
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state}/>
|
||||
<Link to={`/projects/${projectsId}/merge/new`} className="topWrapper_btn">创建合并请求</Link>
|
||||
{
|
||||
data && data.issue.user_permission ?
|
||||
<Link to={`/projects/${projectsId}/merge/new`} className="topWrapper_btn">创建合并请求</Link>
|
||||
: ''
|
||||
}
|
||||
</div>
|
||||
<div>
|
||||
<div className="detailContent">
|
||||
|
|
@ -501,7 +505,11 @@ class MessageCount extends Component{
|
|||
{/* 由 { 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="pull-right lineH32">
|
||||
<Link to={`/projects/${projectsId}/merge/${mergeId}/UpdateMerge`} className="color-blue fr">编辑</Link>
|
||||
{
|
||||
data && data.issue.user_permission ?
|
||||
<Link to={`/projects/${projectsId}/merge/${mergeId}/UpdateMerge`} className="color-blue fr">编辑</Link>
|
||||
: ''
|
||||
}
|
||||
</span>
|
||||
</p>
|
||||
<div className="df mt20">
|
||||
|
|
@ -531,45 +539,51 @@ class MessageCount extends Component{
|
|||
</Spin>
|
||||
|
||||
{ Paginations }
|
||||
<div className="df" style={{display:this.state.data&&this.state.data.pull_request.status===1?'none':'flex'}}>
|
||||
<img className="user_img" src={getImageUrl(`images/${current_user && current_user.image_url}`)} alt=""/>
|
||||
<div className="new_context" >
|
||||
<p>该合并请求可以进行自动合并操作</p>
|
||||
<p style={{marginTop:15,display:this.state.mergekey==='rebase'?this.state.buttonshow==='none'?"block":"none":this.state.ismesrge==='none'?"block":"none"}}>
|
||||
{/* <button className="topmerge_btn" onClick={this.submitmerge} >{this.state.mergename}</button> */}
|
||||
{/* <Dropdown style={{marginBottom:5}} overlay={menu} trigger={['click']} > */}
|
||||
<Dropdown.Button overlay={menu} type="primary" onClick={this.submitmerge} icon={<Icon type="caret-down"/>}>
|
||||
{this.state.mergename}
|
||||
</Dropdown.Button>
|
||||
|
||||
{/* </Dropdown> */}
|
||||
</p>
|
||||
|
||||
<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}
|
||||
/>
|
||||
|
||||
{
|
||||
data && data.issue.user_permission ?
|
||||
<div className="df" style={{display:this.state.data&&this.state.data.pull_request.status===1?'none':'flex'}}>
|
||||
<img className="user_img" src={getImageUrl(`images/${current_user && current_user.image_url}`)} alt=""/>
|
||||
<div className="new_context" >
|
||||
<p>该合并请求可以进行自动合并操作</p>
|
||||
<p style={{marginTop:15,display:this.state.mergekey==='rebase'?this.state.buttonshow==='none'?"block":"none":this.state.ismesrge==='none'?"block":"none"}}>
|
||||
{/* <button className="topmerge_btn" onClick={this.submitmerge} >{this.state.mergename}</button> */}
|
||||
{/* <Dropdown style={{marginBottom:5}} overlay={menu} trigger={['click']} > */}
|
||||
<Dropdown.Button overlay={menu} type="primary" onClick={this.submitmerge} icon={<Icon type="caret-down"/>}>
|
||||
{this.state.mergename}
|
||||
</Dropdown.Button>
|
||||
|
||||
{/* </Dropdown> */}
|
||||
</p>
|
||||
|
||||
<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>
|
||||
<p className="clearfix mt15" style={{display:this.state.buttonshow}}>
|
||||
<a className="topWrapper_btn " type="submit" onClick={()=>this.prmerge()}>合并请求</a>
|
||||
<a className="a_btn cancel_btn " type="submit" style={{marginLeft:15}} onClick={this.nonemerge}>取消</a>
|
||||
</p>
|
||||
</div>
|
||||
{/* <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>
|
||||
<a className="a_btn cancel_btn " type="submit" style={{marginLeft:15}} onClick={this.nonemerge}>取消</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
: ''
|
||||
}
|
||||
|
||||
<div className="order_line" style={{marginLeft:80}}></div>
|
||||
<div className="df">
|
||||
<img className="user_img" src={getImageUrl(`images/${current_user && current_user.image_url}`)} alt=""/>
|
||||
|
|
@ -592,7 +606,7 @@ class MessageCount extends Component{
|
|||
}}
|
||||
// autoFocus={true}
|
||||
style={{ height: '170px' }}
|
||||
placeholder="请输入合并描述..."
|
||||
placeholder="请输入评论内容..."
|
||||
options={options}
|
||||
onContentChange={this.changeComments}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import {Link} from 'react-router-dom';
|
|||
import { Input ,Dropdown , Menu , Icon , Pagination , Spin } from 'antd';
|
||||
import './merge.css';
|
||||
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import NoneData from '../Nodata';
|
||||
import Nav from '../Order/Nav';
|
||||
import OrderItem from './MergeItem';
|
||||
|
||||
|
|
@ -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:'指派人',
|
||||
|
|
@ -304,7 +307,7 @@ class merge extends Component{
|
|||
</div>
|
||||
{
|
||||
search_count === 0 ?
|
||||
<NoneData></NoneData>
|
||||
<NoneData _html="暂时还没有相关数据哦!"></NoneData>
|
||||
:
|
||||
<OrderItem issues={issues} search_count={search_count} page={page} limit={limit} {...this.props} {...this.state}></OrderItem>
|
||||
}
|
||||
|
|
@ -312,7 +315,7 @@ class merge extends Component{
|
|||
</Spin>
|
||||
</div>
|
||||
:
|
||||
<NoneData/>
|
||||
<NoneData _html="暂时还没有相关数据哦!"/>
|
||||
}
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -228,17 +228,17 @@ class Index extends Component{
|
|||
</Form.Item>
|
||||
<Form.Item
|
||||
label="仓库名称"
|
||||
style={{marginBottom:"0px"}}
|
||||
style={{marginBottom:"20px"}}
|
||||
>
|
||||
{getFieldDecorator('repository_name', {
|
||||
rules: [{
|
||||
required: true, message: '请填写仓库名称'
|
||||
}],
|
||||
})(
|
||||
<Input placeholder="请输入仓库名称"/>
|
||||
<Input placeholder="仓库名称请使用简单、深刻和独特的关键字"/>
|
||||
)}
|
||||
</Form.Item>
|
||||
<p className="formTip">好的存储库名称使用简单、深刻和独特的关键字</p>
|
||||
{/*<p className="formTip">好的存储库名称使用简单、深刻和独特的关键字</p>*/}
|
||||
{/* <div className="newContent_inline"> */}
|
||||
<Form.Item
|
||||
label="项目类别"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
import React , { Component } from 'react';
|
||||
|
||||
import nodata from './Images/nodata.png';
|
||||
|
||||
class Nodata extends Component{
|
||||
render(){
|
||||
const { _html } = this.props;
|
||||
return(
|
||||
<div className="none_panels">
|
||||
<div>
|
||||
<img src={nodata} alt="" />
|
||||
<div className="none_p_title">{_html}</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
export default Nodata;
|
||||
|
|
@ -101,7 +101,7 @@ class Detail extends Component{
|
|||
issue_id:data.id,
|
||||
attachment_ids:fileList
|
||||
}).then(result=>{
|
||||
if(result){
|
||||
if(result && result.journals_count > 0){
|
||||
this.props.form.setFieldsValue({
|
||||
content: ""
|
||||
});
|
||||
|
|
@ -452,10 +452,15 @@ class Detail extends Component{
|
|||
|
||||
return(
|
||||
<div className="main">
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state}/>
|
||||
<Link to={`/projects/${projectsId}/orders/new`} className="topWrapper_btn">创建工单</Link>
|
||||
</div>
|
||||
<div className="topWrapper">
|
||||
<Nav {...this.props} {...this.state}/>
|
||||
{
|
||||
data && data.user_permission ?
|
||||
<Link to={`/projects/${projectsId}/orders/new`} className="topWrapper_btn">创建工单</Link>
|
||||
: ''
|
||||
}
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<div className="detailContent">
|
||||
<p>
|
||||
|
|
@ -495,7 +500,8 @@ class Detail extends Component{
|
|||
readOnly={true}
|
||||
value={ data && data.description}
|
||||
/> */}
|
||||
{data&&data.description===null||data&&data.description===""?<span className="color-grey-9 ml3 mr3">没有描述</span>:this.commentCtx(data && data.description)}
|
||||
|
||||
{data&&data.description&&(data.description.length > 0)?this.commentCtx(data.description): <span className="color-grey-9 ml3 mr3">没有描述</span>}
|
||||
</div>
|
||||
{
|
||||
data && data.attachments && data.attachments.length > 0 ?
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import React , {Component} from 'react';
|
|||
import { Link } from 'react-router-dom';
|
||||
import { Dropdown , Icon , Menu , Pagination,Typography,Popconfirm} from 'antd';
|
||||
import Nav from './Nav';
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import NoneData from '../Nodata';
|
||||
import axios from 'axios';
|
||||
|
||||
const { Text } = Typography;
|
||||
|
|
@ -76,7 +76,7 @@ class Milepost extends Component{
|
|||
|
||||
updatestatusemile=(status,arr)=>{
|
||||
const { projectsId } = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/versions/${arr.id}/update_status`;
|
||||
const url = `/projects/${projectsId}/versions/${arr.id}/update_status.json`;
|
||||
const { current_user } = this.props;
|
||||
axios.post(url,{
|
||||
project_id:projectsId,
|
||||
|
|
@ -99,7 +99,7 @@ class Milepost extends Component{
|
|||
|
||||
closemile=(arr)=>{
|
||||
const { projectsId } = this.props.match.params;
|
||||
const url = `/projects/${projectsId}/versions/${arr.id}`;
|
||||
const url = `/projects/${projectsId}/versions/${arr.id}.json`;
|
||||
axios.delete(url,{ data: {
|
||||
project_id: projectsId,
|
||||
id: arr.id
|
||||
|
|
@ -257,7 +257,7 @@ class Milepost extends Component{
|
|||
)
|
||||
}else{
|
||||
return(
|
||||
<NoneData />
|
||||
<NoneData _html="暂时还没有相关数据哦!" />
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import {Link} from 'react-router-dom';
|
|||
import { Dropdown , Menu , Icon , Pagination , Spin } from 'antd';
|
||||
import './order.css';
|
||||
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import NoneData from '../Nodata';
|
||||
import OrderItem from './OrderItem';
|
||||
|
||||
|
||||
|
|
@ -362,7 +362,7 @@ class MilepostDetail extends Component{
|
|||
</div>
|
||||
{
|
||||
search_count === 0 ?
|
||||
<NoneData></NoneData>
|
||||
<NoneData _html="暂时还没有相关数据哦!"/>
|
||||
:
|
||||
<OrderItem issues={issues} search_count={search_count} page={page} limit={limit} {...this.props} {...this.state}></OrderItem>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,31 @@ 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>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import React , {Component} from 'react';
|
|||
import { Dropdown , Icon , Menu , Pagination, Modal,Input,Popconfirm,Form } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import Nav from './Nav';
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import NoneData from '../Nodata';
|
||||
import { SketchPicker } from 'react-color'
|
||||
import reactCSS from 'reactcss'
|
||||
import axios from 'axios';
|
||||
|
|
@ -323,7 +323,7 @@ class Tags extends Component{
|
|||
)
|
||||
}else{
|
||||
return(
|
||||
<NoneData />
|
||||
<NoneData _html="暂时还没有相关数据哦!" />
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -464,6 +464,7 @@
|
|||
flex-wrap: wrap;
|
||||
}
|
||||
.issue-tag-show{padding: 3px 8px; color: #fff; border-radius: 6px;}
|
||||
.journal-list-item{padding: 12px 15px}
|
||||
|
||||
/*.DetailRight > p >span:nth-child(1){*/
|
||||
/*min-width: 90px;*/
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import {Link} from 'react-router-dom';
|
|||
import { Input ,Dropdown , Menu , Icon , Pagination , Spin } from 'antd';
|
||||
import './order.css';
|
||||
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import NoneData from '../Nodata';
|
||||
import Nav from './Nav';
|
||||
import OrderItem from './OrderItem';
|
||||
|
||||
|
|
@ -319,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;
|
||||
|
|
@ -427,9 +443,9 @@ class order extends Component{
|
|||
</div>
|
||||
{
|
||||
search_count === 0 ?
|
||||
<NoneData></NoneData>
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,11 @@
|
|||
import React , { Component } from "react";
|
||||
import {Link} from 'react-router-dom';
|
||||
import { Input ,Dropdown , Menu , Icon , Pagination , Spin, Divider } from 'antd';
|
||||
import NoneData from '../../modules/courses/coursesPublic/NoneData';
|
||||
import Nav from '../Order/Nav';
|
||||
import { Input } from 'antd';
|
||||
import NoneData from '../Nodata';
|
||||
import './version.css';
|
||||
|
||||
|
||||
import axios from 'axios';
|
||||
|
||||
const Search = Input.Search;
|
||||
/**
|
||||
* issue_chosen:下拉的筛选列表,
|
||||
* data:列表接口返回的所有数据,
|
||||
|
|
@ -73,59 +70,69 @@ class version extends Component{
|
|||
<div>{
|
||||
data.releases.map((item,key)=>{
|
||||
return(
|
||||
<div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionleft">
|
||||
<div className="versionrighe"></div><span className={item&&item.draft==="稳定"?"opendversionetail":"closedversionetail"} style={{marginTop:5,margin:'auto',marginRight:15}}>{item.draft} </span>
|
||||
</div>
|
||||
<div className="version_line_one">
|
||||
<p className="versionrectangle"> </p>
|
||||
</div>
|
||||
{
|
||||
data && data.user_permission ?
|
||||
<div className="versionrighe">
|
||||
<h1 style={{marginLeft:15,marginTop:5}}>{item.name}<Link to={`/projects/${projectsId}/version/${item.version_id}/upversion`} style={{color:'blue',fontSize:10,marginLeft:5}}>(编辑)</Link> </h1>
|
||||
</div>
|
||||
: ''
|
||||
}
|
||||
<div key={key}>
|
||||
{
|
||||
item && item.id ?
|
||||
<div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionleft">
|
||||
<div className="versionrighe"></div><span className={item&&item.draft==="稳定"?"opendversionetail":"closedversionetail"} style={{marginTop:5,margin:'auto',marginRight:15}}>{item.draft} </span>
|
||||
</div>
|
||||
<div className="version_line_one">
|
||||
<p className="versionrectangle"> </p>
|
||||
</div>
|
||||
<div className="versionrighe">
|
||||
<h1 style={{marginLeft:15,marginTop:5}}>{item.name}
|
||||
{
|
||||
data && data.user_permission ?
|
||||
<Link to={`/projects/${projectsId}/version/${item.version_id}/upversion`} style={{color:'blue',fontSize:10,marginLeft:5}}>(编辑)</Link>
|
||||
: ''
|
||||
}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionleft">
|
||||
<span style={{marginTop:5,margin:'auto',marginRight:15}}>{item.tag_name} </span>
|
||||
</div>
|
||||
<div className="version_line_one">
|
||||
<p style={{width:4}}> </p>
|
||||
|
||||
</div>
|
||||
<div className="versionrighe">
|
||||
<h5 style={{marginLeft:15,marginTop:10}}>{item.body} </h5>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionleft">
|
||||
<span style={{marginTop:5,marginRight:15}}></span>
|
||||
</div>
|
||||
<div className="version_line_tpw">
|
||||
<p style={{width:4}}> </p>
|
||||
</div>
|
||||
<div className="versionrighe">
|
||||
<h1 style={{marginLeft:15,marginTop:10}}>下载附件
|
||||
</h1>
|
||||
<a href={item.zipball_url} download="源代码(ZIP)" style={{color:'blue',marginLeft:15}}>源代码(ZIP)</a>
|
||||
<a href={item.tarball_url} download="源文件(TAR.GZ)" style={{color:'blue',marginLeft:15}}>源文件(TAR.GZ)</a>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionleft">
|
||||
<span style={{marginTop:5,marginRight:15}}></span>
|
||||
</div>
|
||||
<div className="version_line_tpw">
|
||||
<p style={{width:4}}> </p>
|
||||
</div>
|
||||
<div className="versionrighe">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionleft">
|
||||
<span style={{marginTop:5,margin:'auto',marginRight:15}}>{item.tag_name} </span>
|
||||
</div>
|
||||
<div className="version_line_one">
|
||||
<p style={{width:4}}> </p>
|
||||
|
||||
</div>
|
||||
<div className="versionrighe">
|
||||
<h5 style={{marginLeft:15,marginTop:10}}>{item.body} </h5>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionleft">
|
||||
<span style={{marginTop:5,marginRight:15}}></span>
|
||||
</div>
|
||||
<div className="version_line_tpw">
|
||||
<p style={{width:4}}> </p>
|
||||
</div>
|
||||
<div className="versionrighe">
|
||||
<h1 style={{marginLeft:15,marginTop:10}}>下载附件
|
||||
</h1>
|
||||
<a href={item.zipball_url} download="源代码(ZIP)" style={{color:'blue',marginLeft:15}}>源代码(ZIP)</a>
|
||||
<a href={item.tarball_url} download="源文件(TAR.GZ)" style={{color:'blue',marginLeft:15}}>源文件(TAR.GZ)</a>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{display:'flex'}}>
|
||||
<div className="versionleft">
|
||||
<span style={{marginTop:5,marginRight:15}}></span>
|
||||
</div>
|
||||
<div className="version_line_tpw">
|
||||
<p style={{width:4}}> </p>
|
||||
</div>
|
||||
<div className="versionrighe">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
:
|
||||
""
|
||||
}
|
||||
</div>
|
||||
)
|
||||
})
|
||||
|
|
@ -134,7 +141,7 @@ class version extends Component{
|
|||
)
|
||||
}else{
|
||||
return(
|
||||
<NoneData />
|
||||
<NoneData _html="暂时还没有相关数据哦!" />
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
export function truncateCommitId(str) {
|
||||
if (str.length > 11) {
|
||||
return str.substring(0, 10)
|
||||
}
|
||||
}
|
||||
|
|
@ -71,6 +71,20 @@
|
|||
background-color: #f4f4f4;
|
||||
line-height: 18px;
|
||||
}
|
||||
.none_panels{
|
||||
text-align: center;
|
||||
height: 400px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.none_panels img{
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.none_p_title{
|
||||
font-size: 16px;
|
||||
color: #999;
|
||||
}
|
||||
@media screen and (max-width: 1000px){
|
||||
.main{
|
||||
width: 750px;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import Tree, { TreeNode } from 'rc-tree';
|
|||
import 'rc-tree/assets/index.css';
|
||||
|
||||
import classNames from 'classnames'
|
||||
// import CodeMirror from 'react-codeMirror'
|
||||
// import CodeMirror from 'react-codemirror'
|
||||
|
||||
import axios from 'axios'
|
||||
import _ from 'lodash'
|
||||
|
|
@ -52,12 +52,12 @@ class CodeRepositoryView extends Component {
|
|||
}
|
||||
componentDidUpdate(prevProps, prevState, snapshot) {
|
||||
const { game, challenge, hide_code, tabIndex, } = this.props
|
||||
|
||||
|
||||
if ( // 初始化 或者 game切换
|
||||
!this.treeExpanded && challenge.path && challenge.path.length && this.state.expandedKeys.length === 0 ||
|
||||
game && (!prevProps.game
|
||||
!this.treeExpanded && challenge.path && challenge.path.length && this.state.expandedKeys.length === 0 ||
|
||||
game && (!prevProps.game
|
||||
|| prevProps.game.identifier !== this.props.game.identifier) ) {
|
||||
|
||||
|
||||
if (!this.treeExpanded) {
|
||||
this.treeExpanded = true
|
||||
const _path = challenge.multiPath ? challenge.path[0] : challenge.path;
|
||||
|
|
@ -77,8 +77,8 @@ class CodeRepositoryView extends Component {
|
|||
})
|
||||
}
|
||||
|
||||
if (game && (!prevProps.game
|
||||
|| prevProps.game.identifier !== this.props.game.identifier)) {
|
||||
if (game && (!prevProps.game
|
||||
|| prevProps.game.identifier !== this.props.game.identifier)) {
|
||||
// 切换关卡时切换到第一个tab
|
||||
// 如果隐藏code tab,就只有一个ssh tab了
|
||||
if (hide_code == true) {
|
||||
|
|
@ -90,12 +90,12 @@ class CodeRepositoryView extends Component {
|
|||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
componentDidMount() {
|
||||
// 隐藏code tab,则显示ssh tab(81)
|
||||
if (this.props.hide_code === true) {
|
||||
this.tabIndexChange(81)
|
||||
}
|
||||
|
||||
|
||||
//显示所有代码文件
|
||||
$(".code-file-tab").hover(function(){
|
||||
// var ulwidth=$("#blacktab_nav").width();
|
||||
|
|
@ -119,22 +119,22 @@ class CodeRepositoryView extends Component {
|
|||
const expandedKeys = this.state.expandedKeys.slice(0)
|
||||
const _index = expandedKeys.indexOf(selectedKeys[0]);
|
||||
if (_index == -1) {
|
||||
expandedKeys.push(selectedKeys[0])
|
||||
expandedKeys.push(selectedKeys[0])
|
||||
} else {
|
||||
expandedKeys.splice( _index, 1)
|
||||
}
|
||||
this.setState({ expandedKeys })
|
||||
}
|
||||
|
||||
|
||||
this.props.onTreeSelect(selectedKeys, info)
|
||||
}
|
||||
}
|
||||
buildTree() {
|
||||
// TODO http://localhost:3007/tasks/xgffnuomytpj 这个实训没有文件树
|
||||
const { fileTreeData, onLoadData, fileTreeSelectedKeys } = this.props;
|
||||
if (!fileTreeData || fileTreeData.length === 0) {
|
||||
return ""
|
||||
}
|
||||
|
||||
|
||||
|
||||
const loop = (data) => {
|
||||
return data.map((item) => {
|
||||
|
|
@ -147,8 +147,8 @@ class CodeRepositoryView extends Component {
|
|||
});
|
||||
};
|
||||
const treeNodes = loop(fileTreeData);
|
||||
|
||||
|
||||
|
||||
|
||||
// selectable={false}
|
||||
return (
|
||||
<Tree
|
||||
|
|
@ -190,15 +190,15 @@ class CodeRepositoryView extends Component {
|
|||
var domArray = [];
|
||||
const pathArray = path.forEach ? path : [path]
|
||||
pathArray.forEach( (item, index) => {
|
||||
domArray.push(
|
||||
domArray.push(
|
||||
<p key={index} className={classNames({'blue-line': pathIndex == index})} onClick={ () => this.onPathChange(index, true) } >
|
||||
{item}
|
||||
{item}
|
||||
</p> )
|
||||
})
|
||||
|
||||
|
||||
return (
|
||||
<div className="codefile-all pl10">
|
||||
{domArray}
|
||||
{domArray}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
@ -209,11 +209,11 @@ class CodeRepositoryView extends Component {
|
|||
axios.get(url,
|
||||
{
|
||||
// withCredentials: true
|
||||
}
|
||||
).then((response) => {
|
||||
}
|
||||
).then((response) => {
|
||||
tabIndex && $(`#codetab_con_${tabIndex}`).html('') // 清空 ‘正在连接命令行服务...’
|
||||
|
||||
if (response.data.game_id) {
|
||||
if (response.data.game_id) {
|
||||
// 重置ssh状态
|
||||
this.setSSHClosed(false);
|
||||
|
||||
|
|
@ -227,7 +227,7 @@ class CodeRepositoryView extends Component {
|
|||
var line_h = (navigator.userAgent.indexOf('Chrome') >= 0 ? 18 : 19);
|
||||
var rows = Math.round(h / line_h);
|
||||
var cols = parseInt(w / 9.9);
|
||||
|
||||
|
||||
response.data.width = w;
|
||||
response.data.height = h;
|
||||
response.data.line_h = line_h;
|
||||
|
|
@ -237,7 +237,7 @@ class CodeRepositoryView extends Component {
|
|||
// this.loadSshInIframe( response.data, tabIndex )
|
||||
|
||||
this.loadSshNormal(response.data, tabIndex, isReInit)
|
||||
|
||||
|
||||
}
|
||||
// console.log(response)
|
||||
}).catch((error) => {
|
||||
|
|
@ -257,7 +257,7 @@ class CodeRepositoryView extends Component {
|
|||
// $(".game_webssh").css({"min-height":h, "max-height":h});
|
||||
const container = $(`#codetab_con_${tabIndex}`);
|
||||
// ReactDOM.unmountComponentAtNode(container)
|
||||
// ReactDOM.render(<Webssh {...data}
|
||||
// ReactDOM.render(<Webssh {...data}
|
||||
// ></Webssh>, container);
|
||||
// this.setState({
|
||||
// sshData: data
|
||||
|
|
@ -273,7 +273,7 @@ class CodeRepositoryView extends Component {
|
|||
, height, width, line_h, rows, cols, } = data
|
||||
|
||||
let _domain = webssh_url || 'https://webssh.educoder.net';
|
||||
// window.location.host === "www.educoder.net" ?
|
||||
// window.location.host === "www.educoder.net" ?
|
||||
// 'https://webssh.educoder.net'
|
||||
// : 'https://testwebssh.educoder.net'
|
||||
const html = `<iframe src="${_domain}/?Host=${host}&Port=${port}&Username=${username}&Password=${password}&Gameid=${game_id}&Rows=${rows}&Tab=81&Columns=${cols}&Width=${width}&Height=${height}" style="width: 100%; border: 0px; min-height: 454px; max-height: 454px; " scrolling="no" id="game_webssh" class="game_webssh"></iframe>`
|
||||
|
|
@ -286,9 +286,9 @@ class CodeRepositoryView extends Component {
|
|||
if ($(`#codetab_con_${index} .terminal.xterm`).length === 1) { // 已经初始化过了
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
this.initSsh($, index);
|
||||
|
||||
|
||||
}
|
||||
/** multi ssh */
|
||||
setSSHClosed = (isClose) => {
|
||||
|
|
@ -318,7 +318,7 @@ class CodeRepositoryView extends Component {
|
|||
close_ssh_cocket_iframe = (id) => {
|
||||
/*
|
||||
关闭连接,清空tab content
|
||||
*/
|
||||
*/
|
||||
let _w = $(`.game_webssh_${id}`)[0].contentWindow
|
||||
_w && _w.postMessage({tp: 'close_ssh_cocket'}, "*");
|
||||
$(`#codetab_con_${id}`).html('')
|
||||
|
|
@ -326,7 +326,7 @@ class CodeRepositoryView extends Component {
|
|||
close_ssh_cocket_normal = (id) => {
|
||||
/*
|
||||
关闭连接,清空tab content
|
||||
*/
|
||||
*/
|
||||
// let _w = $(`.game_webssh_${id}`)[0].contentWindow
|
||||
// _w && _w.postMessage({tp: 'close_ssh_cocket'}, "*");
|
||||
// $(`#codetab_con_${id}`).html('')
|
||||
|
|
@ -338,7 +338,7 @@ class CodeRepositoryView extends Component {
|
|||
this.tabIndexChange(STABLE_SSH_TAB_ID)
|
||||
this.setState({ addtionalSSHArray })
|
||||
// game_webssh_${tabIndex} TODO
|
||||
|
||||
|
||||
this.close_ssh_cocket_normal(id)
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
|
@ -379,7 +379,7 @@ class CodeRepositoryView extends Component {
|
|||
|
||||
width={300}
|
||||
open={drawerOpen}
|
||||
|
||||
|
||||
onClose={() => showFilesDrawer( false )}
|
||||
>
|
||||
{ loadingFirstRepoFiles ? (
|
||||
|
|
@ -390,7 +390,7 @@ class CodeRepositoryView extends Component {
|
|||
</Drawer>
|
||||
|
||||
<ul id="blacktab_nav" className="">
|
||||
|
||||
|
||||
{ hide_code === false && <li id="codetab_nav_1" className={classNames('code-file-tab', 'eud-pointer', 'pr', 'blacktab_nomal', {'blacktab_hover':tabIndex===0 })} onClick={() => tabIndexChange(0)}>
|
||||
<a href="javascript:void(0);" className={classNames('tab_type', 'tab_color', {'fl': challenge.pathIndex === -1 || challenge.multiPath === true } )}>代码文件</a>
|
||||
|
||||
|
|
@ -402,23 +402,23 @@ class CodeRepositoryView extends Component {
|
|||
</div>
|
||||
</React.Fragment>
|
||||
: "" }
|
||||
|
||||
|
||||
</li> }
|
||||
|
||||
{shixun.webssh !== 0 &&
|
||||
<li id="codetab_nav_2" data-tab="2" className={classNames('add-webssh', 'blacktab_nomal', {'blacktab_hover':tabIndex===STABLE_SSH_TAB_ID })}
|
||||
{shixun.webssh !== 0 &&
|
||||
<li id="codetab_nav_2" data-tab="2" className={classNames('add-webssh', 'blacktab_nomal', {'blacktab_hover':tabIndex===STABLE_SSH_TAB_ID })}
|
||||
onClick={() => this.tabIndexChange(STABLE_SSH_TAB_ID)}>
|
||||
<a href="javascript:void(0);" className="tab_type tab_color">命令行</a>
|
||||
</li> }
|
||||
{
|
||||
{
|
||||
addtionalSSHArray.map( (item, index) => {
|
||||
return (<li id={`codetab_nav_${item}`} data-tab={item}
|
||||
className={classNames('add-webssh', 'blacktab_nomal', {'blacktab_hover':tabIndex===item })}
|
||||
return (<li id={`codetab_nav_${item}`} data-tab={item}
|
||||
className={classNames('add-webssh', 'blacktab_nomal', {'blacktab_hover':tabIndex===item })}
|
||||
onClick={() => this.tabIndexChange(item)}>
|
||||
<a href="javascript:void(0);" className="tab_type tab_color">命令行{index + 1}</a>
|
||||
<Tooltip title={ "关闭该命令行窗口"} disableFocusListener={true}>
|
||||
<i class="anticon anticon-close ant-tabs-close-x" onClick={(e) => this.onSSHTabClose(item, e)}>
|
||||
<svg viewBox="64 64 896 896" class="" data-icon="close" width="1em" height="1em"
|
||||
<svg viewBox="64 64 896 896" class="" data-icon="close" width="1em" height="1em"
|
||||
fill="currentColor" aria-hidden="true">
|
||||
<path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 0 0 203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path>
|
||||
</svg>
|
||||
|
|
@ -429,7 +429,7 @@ class CodeRepositoryView extends Component {
|
|||
}
|
||||
|
||||
{/* */}
|
||||
{ shixun.webssh !== 0 && shixun.multi_webssh == true && addtionalSSHArray.length < totalAddtionalTabCount
|
||||
{ shixun.webssh !== 0 && shixun.multi_webssh == true && addtionalSSHArray.length < totalAddtionalTabCount
|
||||
&& sshIsClosed === false && <li id="codetab_nav_add" className="c_white" style={{paddingLeft:'10px'}}>
|
||||
<Tooltip title={ "新开命令行窗口"} disableFocusListener={true}>
|
||||
<a href="javascript:void(0);" className="tab_type tab_color"
|
||||
|
|
@ -437,32 +437,32 @@ class CodeRepositoryView extends Component {
|
|||
>+</a>
|
||||
</Tooltip>
|
||||
</li> }
|
||||
|
||||
|
||||
{ tabIndex === 0 && <h3 id="save_status" className="ml15 mt7 fl color-grey font-14" style={{fontWeight: 'normal'}}>
|
||||
{codeStatus === 0 ? '已修改' : (codeStatus === 1 ? '保存中...' : '已保存' ) }
|
||||
</h3> }
|
||||
<div className="fr -horizontal">
|
||||
|
||||
{ /**/ }
|
||||
{
|
||||
<WebSSHTimer game={game} showTimerProp={this.isSSHTabIndex()}
|
||||
{
|
||||
<WebSSHTimer game={game} showTimerProp={this.isSSHTabIndex()}
|
||||
reInitSsh={this.initSsh} setSSHClosed={this.setSSHClosed}></WebSSHTimer>
|
||||
}
|
||||
|
||||
{ showUpdateButton &&
|
||||
<React.Fragment>
|
||||
|
||||
|
||||
<a className="iconButton" onClick={()=>{ onShowUpdateDialog() }}>
|
||||
<Tooltip title={ "更新通知"} disableFocusListener={true}>
|
||||
<i className="iconfont icon-gonggao font-20 "></i>
|
||||
</Tooltip>
|
||||
</a>
|
||||
|
||||
|
||||
<span className="dot"></span>
|
||||
</React.Fragment>
|
||||
}
|
||||
|
||||
{ !shixun.code_hidden && tabIndex === 0 &&
|
||||
{ !shixun.code_hidden && tabIndex === 0 &&
|
||||
<a className="iconButton" onClick={showFilesDrawer.bind(this, true)} >
|
||||
<Tooltip title={ "文件目录"} disableFocusListener={true}>
|
||||
<i className="iconfont icon-wenjian font-18 "></i>
|
||||
|
|
@ -471,10 +471,10 @@ class CodeRepositoryView extends Component {
|
|||
}
|
||||
|
||||
<span id="return_last_code">
|
||||
</span>
|
||||
</span>
|
||||
|
||||
{ challenge.pathIndex !== -1 && game.status === 2 && tabIndex === 0 &&
|
||||
this.props.readRepoTimeout !== true &&
|
||||
{ challenge.pathIndex !== -1 && game.status === 2 && tabIndex === 0 &&
|
||||
this.props.readRepoTimeout !== true &&
|
||||
<a href="javascript:void(0);" className="iconButton" id="reset_success_game_code" onClick={showResetPassedCodeDialog}>
|
||||
<Tooltip title={ "加载上次通过的代码"} disableFocusListener={true}>
|
||||
<i className="iconfont icon-fanhuishangcidaima font-20 "></i>
|
||||
|
|
@ -483,7 +483,7 @@ class CodeRepositoryView extends Component {
|
|||
}
|
||||
|
||||
{
|
||||
challenge.pathIndex !== -1 && tabIndex === 0 && this.props.readRepoTimeout !== true &&
|
||||
challenge.pathIndex !== -1 && tabIndex === 0 && this.props.readRepoTimeout !== true &&
|
||||
<a href="javascript:void(0);" className="iconButton" id="reset_game_code" onClick={showResetCodeDialog}>
|
||||
<Tooltip title={ "恢复初始代码"} disableFocusListener={true}>
|
||||
<i className="iconfont icon-zhongzhi font-20 "></i>
|
||||
|
|
@ -492,41 +492,41 @@ class CodeRepositoryView extends Component {
|
|||
}
|
||||
|
||||
{
|
||||
tabIndex === 0 && this.props.readRepoTimeout !== true &&
|
||||
tabIndex === 0 && this.props.readRepoTimeout !== true &&
|
||||
<a href="javascript:void(0);" className="iconButton" id="setting" onClick={() => showSettingDrawer(true)}>
|
||||
<Tooltip title={ "设置"} disableFocusListener={true}>
|
||||
<i className="iconfont icon-shezhi " style={{fontSize: '19px'}}></i>
|
||||
</Tooltip>
|
||||
</a>
|
||||
}
|
||||
|
||||
|
||||
<a href="javascript:void(0);" className="mr15 iconButton" onClick={onRepositoryViewExpand} id="extend_and_zoom">
|
||||
<Tooltip id="tooltip-icon-expand" title={ evaluateViewExpanded ? "收起" : "展开"}>
|
||||
{/*<i className="fa font-16 fa-expand"></i>*/}
|
||||
<i className={ evaluateViewExpanded ? "font-18 iconfont icon-shousuo" : "iconfont icon-zhankai font-18" }></i>
|
||||
</Tooltip>
|
||||
</a>
|
||||
|
||||
|
||||
</div>
|
||||
<div className="cl"></div>
|
||||
</ul>
|
||||
<div className="cl"></div>
|
||||
|
||||
|
||||
<div id="codetab_con_1" style={{display: 'block', flex: 'auto'}} style={ tabIndex === 0 ? {display: 'block'} : {display: 'none'} }>
|
||||
{/* 没必要显示这个,注释掉了 */}
|
||||
{/* { !isEditablePath &&
|
||||
{/* { !isEditablePath &&
|
||||
<Tooltip title={ "当前文件路径(只读)"}>
|
||||
<div className="codePath">
|
||||
{currentPath}
|
||||
</div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
} */}
|
||||
{this.props.readRepoTimeout === true ? <div className="readRepoFailed">
|
||||
代码加载失败,<a className="retry"
|
||||
代码加载失败,<a className="retry"
|
||||
onClick={() => this.props.fetchRepositoryCode(this.props, null, null, true, true)}>重试</a>
|
||||
</div> :
|
||||
<React.Fragment>
|
||||
<div className="codemirrorBackground"
|
||||
<div className="codemirrorBackground"
|
||||
style={{ backgroundImage: `url('${notEditablePathImg}')`
|
||||
, display: (isEditablePath || this.props.shixun && this.props.shixun.code_edit_permission ? 'none' : 'block') }}></div>
|
||||
{/*<textarea className = "" id="extend-challenge-file-edit" name="content">{repositoryCode}</textarea>*/}
|
||||
|
|
@ -536,17 +536,17 @@ class CodeRepositoryView extends Component {
|
|||
</React.Fragment>
|
||||
}
|
||||
</div>
|
||||
<div id="codetab_con_81" className="undis -relative"
|
||||
<div id="codetab_con_81" className="undis -relative"
|
||||
style={ { color: '#fff', display: tabIndex === STABLE_SSH_TAB_ID ? 'block' : 'none', 'marginLeft': '2px'} }>
|
||||
{/* { tabIndex === STABLE_SSH_TAB_ID && this.state.sshData && <Webssh {...this.state.sshData} ></Webssh> } */}
|
||||
</div>
|
||||
<div id="codetab_con_82" className="undis -relative"
|
||||
<div id="codetab_con_82" className="undis -relative"
|
||||
style={ { color: '#fff', display: tabIndex === 82 ? 'block' : 'none', 'marginLeft': '2px', 'paddingBottom': '30px' } }>
|
||||
</div>
|
||||
<div id="codetab_con_83" className="undis -relative"
|
||||
<div id="codetab_con_83" className="undis -relative"
|
||||
style={ { color: '#fff', display: tabIndex === 83 ? 'block' : 'none', 'marginLeft': '2px', 'paddingBottom': '30px'} }>
|
||||
</div>
|
||||
<div id="codetab_con_84" className="undis -relative"
|
||||
<div id="codetab_con_84" className="undis -relative"
|
||||
style={ { color: '#fff', display: tabIndex === 84 ? 'block' : 'none', 'marginLeft': '2px', 'paddingBottom': '30px'} }>
|
||||
</div>
|
||||
<div id="codetab_con_3" className="undis -relative" style={{display: 'none'}}></div>
|
||||
|
|
@ -554,13 +554,13 @@ class CodeRepositoryView extends Component {
|
|||
);
|
||||
}
|
||||
}
|
||||
/*
|
||||
/*
|
||||
<%= Redmine::CodesetUtil.replace_invalid_utf8(@content) %>
|
||||
, overflow: 'scroll' ref="editor"
|
||||
, overflow: 'scroll' ref="editor"
|
||||
<CodeMirror style={{height: '100%'}} value={repositoryCode} onChange={onRepositoryCodeUpdate} options={cmOptions} />
|
||||
|
||||
<iframe src="https://testwebssh.educoder.net/?Host=10.9.81.28&Port=44940&Username=root&Password=123123&Gameid=2618&Rows=24&Tab=2"
|
||||
<iframe src="https://testwebssh.educoder.net/?Host=10.9.81.28&Port=44940&Username=root&Password=123123&Gameid=2618&Rows=24&Tab=2"
|
||||
style={{width: '100%', border: '0px', minHeight: '440px', maxHeight: '440px'}} scrolling="no" id="game_webssh" className="game_webssh"></iframe>
|
||||
*/
|
||||
|
||||
export default CodeRepositoryView;
|
||||
export default CodeRepositoryView;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import React, { Component } from 'react';
|
||||
|
||||
import CodeMirror from 'react-codeMirror'
|
||||
import CodeMirror from 'react-codemirror'
|
||||
|
||||
require('codemirror/lib/codemirror.css');
|
||||
require('codemirror/mode/javascript/javascript');
|
||||
|
|
@ -28,13 +28,13 @@ class TestCodeMirror extends Component {
|
|||
|
||||
componentDidMount() {
|
||||
var readOnlyLines = [0,1,2,3,8];
|
||||
|
||||
|
||||
this.refs.editor.getCodeMirror().on('beforeChange',function(cm,change) {
|
||||
console.log('change.from.line', change.from.line)
|
||||
if ( readOnlyLines.indexOf(change.from.line) !== -1
|
||||
if ( readOnlyLines.indexOf(change.from.line) !== -1
|
||||
// 有问题:如果用回车将有内容的行挤到不可编辑的行,那么无法删除掉不可编辑行里的内容了
|
||||
// 解决办法:将所需的行数固定写好,禁用掉回车键。
|
||||
// || change.from.line > ( readOnlyLines[readOnlyLines.length -1] + 1 )
|
||||
// || change.from.line > ( readOnlyLines[readOnlyLines.length -1] + 1 )
|
||||
) {
|
||||
change.cancel();
|
||||
}
|
||||
|
|
@ -60,4 +60,4 @@ class TestCodeMirror extends Component {
|
|||
}
|
||||
}
|
||||
|
||||
export default TestCodeMirror;
|
||||
export default TestCodeMirror;
|
||||
|
|
|
|||
Loading…
Reference in New Issue