Forráskód Böngészése

完善添加标签

tuonina 5 éve
szülő
commit
2c1361aaf6

+ 2 - 1
.idea/inspectionProfiles/Project_Default.xml

@@ -1,8 +1,9 @@
 <component name="InspectionProjectProfileManager">
   <profile version="1.0">
     <option name="myName" value="Project Default" />
+    <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
     <inspection_tool class="RequiredAttributes" enabled="true" level="WARNING" enabled_by_default="true">
-      <option name="myAdditionalRequiredHtmlAttributes" value="align,htmlType" />
+      <option name="myAdditionalRequiredHtmlAttributes" value="align,htmlType,htmlType,htmlType,htmlType,htmlType" />
     </inspection_tool>
   </profile>
 </component>

+ 167 - 89
.idea/workspace.xml

@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ChangeListManager">
-    <list default="true" id="6f4a0bf1-27c2-4804-af97-a0a1bdd98e1d" name="Default Changelist" comment="" />
+    <list default="true" id="6f4a0bf1-27c2-4804-af97-a0a1bdd98e1d" name="Default Changelist" comment="">
+      <change beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/axios/tools.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/axios/tools.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/index.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/pages/config/ConfigLabel.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/config/ConfigLabel.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/pages/config/styles/label.less" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/config/styles/label.less" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/pages/config/widget/AddLabelForm.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/config/widget/AddLabelForm.js" afterDir="false" />
+    </list>
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
     <ignored path="$PROJECT_DIR$/tmp/" />
@@ -16,8 +24,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/pages/config/ConfigLabel.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="518">
-              <caret line="94" column="36" selection-start-line="94" selection-start-column="36" selection-end-line="94" selection-end-column="36" />
+            <state relative-caret-position="293">
+              <caret line="82" column="51" selection-start-line="82" selection-start-column="51" selection-end-line="82" selection-end-column="51" />
               <folding>
                 <element signature="e#0#26#0" expanded="true" />
               </folding>
@@ -25,71 +33,78 @@
           </provider>
         </entry>
       </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/axios/tools.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="1350">
-              <caret line="56" column="13" selection-start-line="56" selection-start-column="13" selection-end-line="56" selection-end-column="13" />
-              <folding>
-                <element signature="e#53#79#0" expanded="true" />
-              </folding>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/README.md">
+          <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+            <state split_layout="SPLIT">
+              <first_editor relative-caret-position="100">
+                <caret line="4" column="2" selection-start-line="4" selection-start-column="2" selection-end-line="4" selection-end-column="2" />
+              </first_editor>
+              <second_editor />
             </state>
           </provider>
         </entry>
       </file>
-      <file pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/src/const/index.js">
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/pages/config/styles/label.less">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="200">
-              <caret line="8" column="44" selection-start-line="8" selection-start-column="44" selection-end-line="8" selection-end-column="44" />
+            <state relative-caret-position="275">
+              <caret line="15" column="15" selection-start-line="15" selection-start-column="3" selection-end-line="15" selection-end-column="15" />
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/node_modules/redux-alita/dist/redux-alita.umd.js">
+        <entry file="file://$PROJECT_DIR$/src/pages/config/widget/AddLabelForm.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="3675">
-              <caret line="147" column="6" selection-start-line="147" selection-start-column="6" selection-end-line="147" selection-end-column="6" />
+            <state relative-caret-position="264">
+              <caret line="59" column="65" lean-forward="true" selection-start-line="59" selection-start-column="65" selection-end-line="59" selection-end-column="65" />
+              <folding>
+                <element signature="e#0#26#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/index.js">
+        <entry file="file://$PROJECT_DIR$/src/App.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="100">
-              <caret line="4" column="28" selection-start-line="4" selection-start-column="28" selection-end-line="4" selection-end-column="28" />
+            <state relative-caret-position="-725">
+              <caret line="20" column="61" selection-start-line="20" selection-start-column="57" selection-end-line="20" selection-end-column="61" />
               <folding>
-                <element signature="e#223#278#0" expanded="true" />
+                <element signature="e#0#41#0" expanded="true" />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/node_modules/antd/lib/button/button.d.ts">
+        <entry file="file://$PROJECT_DIR$/src/const/index.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="975">
-              <caret line="42" column="14" selection-start-line="42" selection-start-column="14" selection-end-line="42" selection-end-column="14" />
+            <state relative-caret-position="200">
+              <caret line="8" column="44" selection-start-line="8" selection-start-column="44" selection-end-line="8" selection-end-column="44" />
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/axios/property/label.js">
+        <entry file="file://$PROJECT_DIR$/src/index.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="225">
-              <caret line="9" column="34" selection-start-line="9" selection-start-column="34" selection-end-line="9" selection-end-column="34" />
+            <state relative-caret-position="168">
+              <caret line="51" column="37" selection-start-line="51" selection-start-column="37" selection-end-line="51" selection-end-column="37" />
+              <folding>
+                <element signature="e#0#26#0" expanded="true" />
+                <element signature="e#223#278#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/axios/index.js">
+        <entry file="file://$PROJECT_DIR$/src/axios/property/label.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="150">
-              <caret line="6" column="34" selection-start-line="6" selection-start-column="34" selection-end-line="6" selection-end-column="34" />
+            <state relative-caret-position="43">
+              <caret line="5" column="34" lean-forward="true" selection-start-line="5" selection-start-column="34" selection-end-line="5" selection-end-column="34" />
             </state>
           </provider>
         </entry>
@@ -104,6 +119,16 @@
       </list>
     </option>
   </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>addVisible</find>
+      <find>labelPathList</find>
+      <find>addModalTitle</find>
+      <find>removeLoading</find>
+      <find>removeModalVisible</find>
+      <find>currentLabel</find>
+    </findStrings>
+  </component>
   <component name="Git.Settings">
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
   </component>
@@ -113,15 +138,17 @@
         <option value="$PROJECT_DIR$/src/components/pages/Login.jsx" />
         <option value="$PROJECT_DIR$/src/routes/index.js" />
         <option value="$PROJECT_DIR$/src/routes/config.js" />
-        <option value="$PROJECT_DIR$/src/index.js" />
         <option value="$PROJECT_DIR$/src/axios/config.js" />
-        <option value="$PROJECT_DIR$/src/pages/config/styles/label.less" />
-        <option value="$PROJECT_DIR$/src/pages/config/ConfigLabel.js" />
-        <option value="$PROJECT_DIR$/src/axios/tools.js" />
         <option value="$PROJECT_DIR$/src/axios/property/label.js" />
         <option value="$PROJECT_DIR$/src/axios/index.js" />
-        <option value="$PROJECT_DIR$/src/pages/config/widget/AddLabelForm.js" />
+        <option value="$PROJECT_DIR$/.gitignore" />
+        <option value="$PROJECT_DIR$/src/axios/tools.js" />
+        <option value="$PROJECT_DIR$/src/index.js" />
         <option value="$PROJECT_DIR$/src/const/index.js" />
+        <option value="$PROJECT_DIR$/src/pages/config/widget/AddLabelForm.js" />
+        <option value="$PROJECT_DIR$/src/pages/config/styles/label.less" />
+        <option value="$PROJECT_DIR$/src/pages/config/ConfigLabel.js" />
+        <option value="$PROJECT_DIR$/README.md" />
       </list>
     </option>
   </component>
@@ -137,8 +164,48 @@
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="tuonq-admin" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tuonq-admin" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tuonq-admin" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tuonq-admin" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tuonq-admin" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tuonq-admin" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="axios" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tuonq-admin" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tuonq-admin" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="const" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tuonq-admin" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tuonq-admin" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="tuonq-admin" type="b2602c69:ProjectViewProjectNode" />
+              <item name="tuonq-admin" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="config" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
       <pane id="Scope" />
-      <pane id="ProjectPane" />
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -155,6 +222,7 @@
     <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
     <property name="nodejs_npm_path_reset_for_default_project" value="true" />
     <property name="nodejs_package_manager_path" value="yarn" />
+    <property name="prettierjs.PrettierConfiguration.Package" value="H:\tuonq\tuonq-admin\node_modules\prettier" />
     <property name="ts.external.directory.path" value="I:\Program Files\JetBrains\WebStorm 2019.1\plugins\JavaScriptLanguage\jsLanguageServicesImpl\external" />
   </component>
   <component name="RunDashboard">
@@ -183,14 +251,16 @@
       <workItem from="1565412727241" duration="14134000" />
       <workItem from="1565485978005" duration="12032000" />
       <workItem from="1565783970634" duration="530000" />
+      <workItem from="1565784533887" duration="7868000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="27176000" />
+    <option name="totallyTimeSpent" value="35044000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
+    <editor active="true" />
     <layout>
       <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24920969" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
@@ -207,7 +277,7 @@
       <window_info anchor="bottom" id="Version Control" order="8" />
       <window_info anchor="bottom" id="RNConsole" order="9" />
       <window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.50105375" side_tool="true" weight="0.32936078" />
-      <window_info anchor="bottom" id="Terminal" order="11" sideWeight="0.49894625" visible="true" weight="0.32936078" />
+      <window_info anchor="bottom" id="Terminal" order="11" sideWeight="0.49894625" visible="true" weight="0.329718" />
       <window_info anchor="bottom" id="TypeScript" order="12" />
       <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" />
@@ -373,32 +443,12 @@
     <entry file="file://$PROJECT_DIR$/src/logo.svg">
       <provider selected="true" editor-type-id="images" />
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/App.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-100">
-          <caret line="20" column="61" selection-start-line="20" selection-start-column="57" selection-end-line="20" selection-end-column="61" />
-          <folding>
-            <element signature="e#0#41#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/style/banner.less">
       <provider selected="true" editor-type-id="text-editor" />
     </entry>
     <entry file="file://$PROJECT_DIR$/src/style/button.less">
       <provider selected="true" editor-type-id="text-editor" />
     </entry>
-    <entry file="file://$PROJECT_DIR$/README.md">
-      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
-        <state split_layout="SPLIT">
-          <first_editor relative-caret-position="114">
-            <caret line="113" column="8" selection-start-line="113" selection-start-column="8" selection-end-line="113" selection-end-column="8" />
-          </first_editor>
-          <second_editor />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/style/index.less">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="-150" />
@@ -442,58 +492,83 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/axios/tools.js">
+    <entry file="file://$PROJECT_DIR$/.gitignore">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1350">
-          <caret line="56" column="13" selection-start-line="56" selection-start-column="13" selection-end-line="56" selection-end-column="13" />
-          <folding>
-            <element signature="e#53#79#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="50">
+          <caret line="2" column="6" selection-start-line="2" selection-start-column="6" selection-end-line="2" selection-end-column="6" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/node_modules/redux-alita/dist/redux-alita.umd.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="3675">
+        <state relative-caret-position="518">
           <caret line="147" column="6" selection-start-line="147" selection-start-column="6" selection-end-line="147" selection-end-column="6" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/index.js">
+    <entry file="file://$PROJECT_DIR$/node_modules/antd/lib/button/button.d.ts">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="100">
-          <caret line="4" column="28" selection-start-line="4" selection-start-column="28" selection-end-line="4" selection-end-column="28" />
+        <state relative-caret-position="518">
+          <caret line="42" column="14" selection-start-line="42" selection-start-column="14" selection-end-line="42" selection-end-column="14" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/axios/index.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret line="6" column="34" selection-start-line="6" selection-start-column="34" selection-end-line="6" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/axios/property/label.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="43">
+          <caret line="5" column="34" lean-forward="true" selection-start-line="5" selection-start-column="34" selection-end-line="5" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/axios/tools.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="275">
+          <caret line="11" column="5" lean-forward="true" selection-start-line="11" selection-start-column="5" selection-end-line="11" selection-end-column="5" />
           <folding>
-            <element signature="e#223#278#0" expanded="true" />
+            <element signature="e#53#79#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/node_modules/antd/lib/button/button.d.ts">
+    <entry file="file://$PROJECT_DIR$/src/App.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="975">
-          <caret line="42" column="14" selection-start-line="42" selection-start-column="14" selection-end-line="42" selection-end-column="14" />
+        <state relative-caret-position="-725">
+          <caret line="20" column="61" selection-start-line="20" selection-start-column="57" selection-end-line="20" selection-end-column="61" />
+          <folding>
+            <element signature="e#0#41#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/axios/property/label.js">
+    <entry file="file://$PROJECT_DIR$/src/index.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="225">
-          <caret line="9" column="34" selection-start-line="9" selection-start-column="34" selection-end-line="9" selection-end-column="34" />
+        <state relative-caret-position="168">
+          <caret line="51" column="37" selection-start-line="51" selection-start-column="37" selection-end-line="51" selection-end-column="37" />
+          <folding>
+            <element signature="e#0#26#0" expanded="true" />
+            <element signature="e#223#278#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/axios/index.js">
+    <entry file="file://$PROJECT_DIR$/src/const/index.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="150">
-          <caret line="6" column="34" selection-start-line="6" selection-start-column="34" selection-end-line="6" selection-end-column="34" />
+        <state relative-caret-position="200">
+          <caret line="8" column="44" selection-start-line="8" selection-start-column="44" selection-end-line="8" selection-end-column="44" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/pages/config/widget/AddLabelForm.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="318">
-          <caret line="98" column="24" selection-start-line="98" selection-start-column="24" selection-end-line="98" selection-end-column="24" />
+        <state relative-caret-position="264">
+          <caret line="59" column="65" lean-forward="true" selection-start-line="59" selection-start-column="65" selection-end-line="59" selection-end-column="65" />
           <folding>
             <element signature="e#0#26#0" expanded="true" />
           </folding>
@@ -502,25 +577,28 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/src/pages/config/styles/label.less">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="25">
-          <caret line="1" column="18" selection-start-line="1" selection-start-column="1" selection-end-line="1" selection-end-column="18" />
+        <state relative-caret-position="275">
+          <caret line="15" column="15" selection-start-line="15" selection-start-column="3" selection-end-line="15" selection-end-column="15" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/pages/config/ConfigLabel.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="518">
-          <caret line="94" column="36" selection-start-line="94" selection-start-column="36" selection-end-line="94" selection-end-column="36" />
+        <state relative-caret-position="293">
+          <caret line="82" column="51" selection-start-line="82" selection-start-column="51" selection-end-line="82" selection-end-column="51" />
           <folding>
             <element signature="e#0#26#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/const/index.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="200">
-          <caret line="8" column="44" selection-start-line="8" selection-start-column="44" selection-end-line="8" selection-end-column="44" />
+    <entry file="file://$PROJECT_DIR$/README.md">
+      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+        <state split_layout="SPLIT">
+          <first_editor relative-caret-position="100">
+            <caret line="4" column="2" selection-start-line="4" selection-start-column="2" selection-end-line="4" selection-end-column="2" />
+          </first_editor>
+          <second_editor />
         </state>
       </provider>
     </entry>

+ 4 - 182
README.md

@@ -1,185 +1,7 @@
-# react-admin([尝试一下](https://codesandbox.io/s/react-admin-u9kdb))
-react-admin system solution
+# 后台管理系统前端
 
-<img src="https://raw.githubusercontent.com/yezihaohao/react-admin/master/screenshots/logo.png" alt="logo" width="150" height="53" />
+## 问题集中
+### 2019-8-14
+- 搜索应该按照标签的path搜索
 
-![travis-ci](https://travis-ci.org/yezihaohao/react-admin.svg?branch=master)
-[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
 
-### 文档地址:[wiki](https://github.com/yezihaohao/react-admin/wiki)
-
-### 问题和方案汇总:[issue](https://github.com/yezihaohao/react-admin/issues/12)
-
-### 更新日志迁移至[CHANGELOG.md](https://github.com/yezihaohao/react-admin/blob/master/CHANGELOG.md)😁(重要!对于了解项目部分功能和代码很有用!)
-
-### 前言
-> 网上react后台管理开源免费的完整版项目比较少,所以利用空余时间集成了一个版本出来,已放到GitHub
-  启动和打包的时间都稍长,请耐心等待两分钟
-
-- [GitHub地址](https://github.com/yezihaohao/react-admin)
-- [预览地址](https://admiring-dijkstra-34cb29.netlify.com)(已增加响应式,可手机预览😄)
-
-### 依赖模块
-<span style="color: rgb(184,49,47);">项目是用create-react-app创建的,主要还是列出新加的功能依赖包</span>
-
-<span style="color: rgb(184,49,47);">点击名称可跳转相关网站😄😄</span>
-
-- [react](https://facebook.github.io/react/)
-- [react-router](https://react-guide.github.io/react-router-cn/)(<span style="color: rgb(243,121,52);">react路由,4.x的版本,如果还使用3.x的版本,请切换分支(ps:分支不再维护)</span>)
-- [redux](https://redux.js.org/)(基础用法,但是封装了通用action和reducer,demo中主要用于权限控制(ps:目前可以用16.x的context api代替),可以简单了解下)
-- [antd](https://ant.design/index-cn)(<span style="color: rgb(243,121,52);">蚂蚁金服开源的react ui组件框架</span>)
-- [axios](https://github.com/mzabriskie/axios)(<span style="color: rgb(243,121,52);">http请求模块,可用于前端任何场景,很强大👍</span>)
-- [echarts-for-react](https://github.com/hustcc/echarts-for-react)(<span style="color: rgb(243,121,52);">可视化图表,别人基于react对echarts的封装,足够用了</span>)
-- [recharts](http://recharts.org/#/zh-CN/)(<span style="color: rgb(243,121,52);">另一个基于react封装的图表,个人觉得是没有echarts好用</span>)
-- [nprogress](https://github.com/rstacruz/nprogress)(<span style="color: rgb(243,121,52);">顶部加载条,蛮好用👍</span>)
-- [react-draft-wysiwyg](https://github.com/jpuri/react-draft-wysiwyg)(<span style="color: rgb(243,121,52);">别人基于react的富文本封装,如果找到其他更好的可以替换</span>)
-- [react-draggable](https://github.com/mzabriskie/react-draggable)(<span style="color: rgb(243,121,52);">拖拽模块,找了个简单版的</span>)
-- [screenfull](https://github.com/sindresorhus/screenfull.js/)(<span style="color: rgb(243,121,52);">全屏插件</span>)
-- [photoswipe](https://github.com/dimsemenov/photoswipe)(<span style="color: rgb(243,121,52);">图片弹层查看插件,不依赖jQuery,还是蛮好用👍</span>)
-- [animate.css](http://daneden.me/animate)(<span style="color: rgb(243,121,52);">css动画库</span>)
-- [react-loadable](https://github.com/jamiebuilds/react-loadable)(代码拆分,按需加载,预加载,样样都行,具体见其文档,推荐使用)
-- [redux-alita](https://github.com/yezihaohao/redux-alita) 极简的redux2react工具
-- 其他小细节省略
-
-### 功能模块
-<span style="color: rgb(184,49,47);">备注:项目只引入了ant-design的部分组件,其他的组件antd官网有源码,可以直接复制到项目中使用,后续有时间补上全部组件。</span>
-
-<span style="color: rgb(184,49,47);">项目使用了antd的自定义主题功能-->黑色,若想替换其他颜色,具体操作请查看antd官网</span>
-<!--more-->
-
-- 首页
-    - 完整布局
-    - 换肤(全局功能,暂时只实现了顶部导航的换肤,后续加上其他模块)
-- 导航菜单
-    - 顶部导航(菜单伸缩,全屏功能)
-    - 左边菜单(增加滚动条以及适配路由的active操作)
-- UI模块
-    - 按钮(antd组件)
-    - 图标(antd组件并增加彩色表情符)
-    - 加载中(antd组件并增加顶部加载条)
-    - 通知提醒框(antd组件)
-    - 标签页(antd组件)
-    - 轮播图(ant动效组件)
-    - 富文本
-    - 拖拽
-    - 画廊
-- 动画
-    - 基础动画(animate.css所有动画)
-    - 动画案例
-- 表格
-    - 基础表格(antd组件)
-    - 高级表格(antd组件)
-    - 异步表格(数据来自掘金酱的接口)
-- 表单
-    - 基础表单(antd组件)
-- 图表
-    - echarts图表
-    - recharts图表
-- 页面
-    - 登录页面(包括GitHub第三方登录)
-    - 404页面
-
-### 功能截图
-#### 首页
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd1.gif)
-#### 按钮图标等
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd2.gif)
-#### 轮播图
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd3.gif)
-#### 富文本
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd4.gif)
-#### 拖拽
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd5.gif)
-#### 画廊
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd6.gif)
-#### 动画
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd7.gif)
-#### 表格
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd8.gif)
-#### 表单
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd9.gif)
-#### 图表
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd10.gif)
-#### 页面
-![截图](https://raw.githubusercontent.com/yezihaohao/yezihaohao.github.io/master/imgs/rd11.gif)
-#### 菜单拖拽
-![截图](https://raw.githubusercontent.com/yezihaohao/react-admin/master/screenshots/menu_draggable.gif)
-
-### 代码目录
-```js
-+-- build/                                  ---打包的文件目录
-+-- config/                                 ---npm run eject 后的配置文件目录
-+-- node_modules/                           ---npm下载文件目录
-+-- public/
-|   --- index.html							---首页入口html文件
-|   --- npm.json							---echarts测试数据
-|   --- weibo.json							---echarts测试数据
-+-- src/                                    ---核心代码目录
-|   +-- axios                               ---http请求存放目录
-|   |    --- index.js
-|   +-- components                          ---各式各样的组件存放目录
-|   |    +-- animation                      ---动画组件
-|   |    |    --- ...
-|   |    +-- charts                         ---图表组件
-|   |    |    --- ...
-|   |    +-- dashboard                      ---首页组件
-|   |    |    --- ...
-|   |    +-- forms                          ---表单组件
-|   |    |    --- ...
-|   |    +-- pages                          ---页面组件
-|   |    |    --- ...
-|   |    +-- tables                         ---表格组件
-|   |    |    --- ...
-|   |    +-- ui                             ---ui组件
-|   |    |    --- ...
-|   |    --- BreadcrumbCustom.jsx           ---面包屑组件
-|   |    --- HeaderCustom.jsx               ---顶部导航组件
-|   |    --- Page.jsx                       ---页面容器
-|   |    --- SiderCustom.jsx                ---左边菜单组件
-|   +-- style                               ---项目的样式存放目录,主要采用less编写
-|   +-- utils                               ---工具文件存放目录
-|   --- App.js                              ---组件入口文件
-|   --- index.js                            ---项目的整体js入口文件,包括路由配置等
---- .env                                    ---启动项目自定义端口配置文件
---- .eslintrc                               ---自定义eslint配置文件,包括增加的react jsx语法限制
---- package.json
-```
-### 安装运行
-##### 1.下载或克隆项目源码
-##### 2.yarn 或者 npm安装相关包文件(首先推荐使用yarn,国内建议增加淘宝镜像源,不然很慢,你懂的😁)
-> 有些老铁遇到运行时报错,首先确定下是不是最新稳定版的nodejs和npm或者yarn(推荐用yarn),切记不要用cnpn
-
-```js
-// 首推荐使用yarn装包
-yarn or npm i
-```
-##### 3.启动项目
-```js
-yarn start or npm start
-```
-##### 4.打包项目
-```js
-yarn build or npm run build
-```
-
-### Q&A(点击问题查看答案)
-#### 1.[create-react-app 打包项目run build 增加进度条信息?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-325383346)
-#### 2.[接口跨域了,怎么在本地开发时配置代理?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-326169055)
-#### 3.[在使用hashRouter的情况下怎么实现类似锚点跳转?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-345127221)
-#### 4.[怎么添加多页面配置?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-348088852)
-#### 5.[路由传参数接问号怎么传?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-375583089)
-#### 6.[如何兼容IE浏览器?](https://github.com/yezihaohao/react-admin/issues/12#issuecomment-510295292)
-
-### 结尾
-该项目会不定时更新,后续时间会添加更多的模块
-
-欢迎和感谢大家PR~~👏👏
-
-若有问题,可加QQ群与我交流
-
-- 1群:264591039(已满)
-- 2群:592688854(已满)
-- 3群:743490497 (已满)
-- 4群:150131600
-
-如果对你有帮助,给个star哟~~❤️❤️❤️❤️

+ 7 - 2
src/axios/tools.js

@@ -27,6 +27,7 @@ export const get = ({ url, headers, params, msg = '接口异常' }) =>
         .catch(err => {
             console.log(err);
             message.warn(msg);
+            return Promise.reject(err);
         });
 
 /**
@@ -43,6 +44,7 @@ export const post = ({ url, data, msg = '接口异常', headers }) =>
         .catch(err => {
             console.log(err);
             message.warn(msg);
+            return Promise.reject(err);
         });
 
 
@@ -59,10 +61,13 @@ export const put = ({ url, data, msg = '接口异常', headers }) =>
         .then(resp => resp.data)
         .catch(err => {
             console.log('err : ', url, ' err: ', err);
-            return err;
+            return Promise.reject(err);
         });
 
 
 export const del = ({ url, data, headers }) =>
     axios.delete(checkURL(url), { data, headers })
-        .then(resp => resp.data);
+        .then(resp => resp.data)
+        .catch(err => {
+            return Promise.reject(err);
+        });

+ 4 - 1
src/index.js

@@ -8,6 +8,9 @@ import { AlitaProvider, setConfig } from 'redux-alita';
 import './style/lib/animate.css';
 import './style/antd/index.less';
 import './style/index.less';
+import {LocaleProvider} from 'antd'
+import zh_CN from 'antd/lib/locale-provider/zh_CN'
+
 
 setConfig(apis);
 // const render = Component => { // 增加react-hot-loader保持状态刷新操作,如果不需要可去掉并把下面注释的打开
@@ -46,7 +49,7 @@ setConfig(apis);
 ReactDOM.render(
     // <AppContainer>
     <AlitaProvider>
-        <Page />
+        <LocaleProvider locale={zh_CN}><Page /></LocaleProvider>
     </AlitaProvider>,
     // </AppContainer>
     document.getElementById('root')

+ 48 - 45
src/pages/config/ConfigLabel.js

@@ -1,7 +1,7 @@
 import React from 'react';
 import { connectAlita } from 'redux-alita';
 import { withRouter } from 'react-router-dom';
-import { Button, List, Modal } from 'antd';
+import { Button, Input, List, message, Modal, Spin } from 'antd';
 import './styles/label.less';
 import AddLabelForm from './widget/AddLabelForm';
 
@@ -11,11 +11,7 @@ class ConfigLabel extends React.Component {
     constructor(props) {
         super(props);
         this.state = {
-            params: { keywords: undefined },
-            labelPathList: [],
-            addVisible: false,
             loading: false,
-            addModalTitle: '添加属性标签',
             removeModalTitle: '提示',
             removeLoading: false,
             removeModalVisible: false,
@@ -26,76 +22,83 @@ class ConfigLabel extends React.Component {
 
     componentDidMount() {
         this._fetchLabels();
+        this.params = {};
     }
 
     _fetchLabels() {
-        let params = this.state.params;
+        this.setState({ currentLabel: null });
+        let params = this.params;
         this.props.setAlitaState({ funcName: 'findPLabel', params });
-
     }
 
     _handleSearch(value) {
-        this.state.params.keywords = value;
+        this.params.keywords = value;
         this._fetchLabels();
 
     }
 
+    removeLabel(item) {
+        let { removeModalTitle } = this.state;
+        let _this = this;
+        Modal.confirm({
+            title: removeModalTitle,
+            content: `您确定要删除:${item.path} 标签吗?`,
+            onOk() {
+                _this.props.setAlitaState({ funcName: 'pLabelDelete', params: item.id })
+                    .then(() => {
+                        message.info('删除失败!');
+                        _this._fetchLabels();
+                    });
+            },
+        });
+    }
+
 
     renderItem(item) {
-        return (<List.Item className='prop-label-item'>
+        return (<List.Item className="prop-label-item">
             <div>
-                <h3 className='label-label'>{item.path}</h3>
+                <h3 className="label-label">{item.path}</h3>
                 <span className={'label-title'}>{item.title}</span>
             </div>
             <div>{item.description}</div>
-            <div className='tool-btns'>
-                <Button icon='edit' type='primary' size='small' onClick={() => this.setState({ currentLabel: item })}/>
-                <Button icon='delete' type='danger' size='small' onClick={this.removeLabel.bind(this, item)}/>
+            <div className="tool-btns">
+                <Button htmlType="button" icon="edit" type="primary" size="small"
+                        onClick={() => this.setState({ currentLabel: item })}/>
+                <Button htmlType="button" icon="delete" type="danger" size="small"
+                        onClick={this.removeLabel.bind(this, item)}/>
             </div>
         </List.Item>);
     }
 
-    _onAddModalHide() {
-        this.setState({ addVisible: false, currentLabel: null });
-
-    }
 
     render() {
-        const { data: labelList = {} ,isFetching} = this.props.findPLabel || {};
-        const { currentLabel, loading, addModalTitle } = this.state;
-        return (<div>
-            <div className='prop-label-header'>
-                <Button type='primary' icon='sync' loading={isFetching} onClick={this._fetchLabels.bind(this)}/>
-                <Button type='primary' icon='plus' onClick={()=>this.setState({currentLabel:{}})}/>
+        const { data: labelList = {}, isFetching } = this.props.findPLabel || {};
+        const { currentLabel } = this.state;
+        return (<div className="page-label-container">
+            <div className="prop-label-header">
+                <Button htmlType="button" type="primary" icon="sync" loading={isFetching}
+                        onClick={this._fetchLabels.bind(this)}/>
+                <Button htmlType="button" icon="plus"
+                        onClick={() => this.setState({ currentLabel: {} })}/>
+                <Input.Search placeholder="输入关键词查询"
+                              onSearch={this._handleSearch.bind(this)}
+                              className="search-input"/>
             </div>
-
+            <Spin className="spin" spinning={isFetching} size="large"/>
             <List
                 dataSource={labelList.records}
                 bordered
-                size='small'
-                renderItem={this.renderItem.bind(this)}/>
-            <Modal visible={!!currentLabel} title={addModalTitle}
-                   onCancel={this._onAddModalHide.bind(this)}
-                   footer={null}>
-                <AddLabelForm cancel={this._onAddModalHide.bind(this)}
-                              label={currentLabel}/>
-            </Modal>
+                size="small"
+                renderItem={this.renderItem.bind(this)}
+            />
+            <AddLabelForm cancel={() => this.setState({ currentLabel: null })}
+                          refresh={this._fetchLabels.bind(this)}
+                          visible={!!currentLabel}
+                          label={currentLabel}
+            />
         </div>);
     }
 
-    removeLabel(item) {
-        let { removeModalTitle, removeLoading } = this.state;
-        let _this = this;
-        Modal.confirm({
-            title: removeModalTitle,
-            content: `您确定要删除:${item.path} 标签吗?`,
-            onCancel() {
-            },
-            onOk() {
-                _this.props.setAlitaState({ funcName: 'pLabelDelete', params: item.id });
-            },
-        });
-    }
 
 }
 

+ 24 - 5
src/pages/config/styles/label.less

@@ -1,22 +1,41 @@
 
-.prop-label-header{
+.page-label-container {
+  position: relative;
+
+  .spin {
+    position: absolute;
+    top: 40%;
+    left: 50%;
+    transform: translateX(50%);
+  }
+}
+
+.prop-label-header {
   padding: 10px;
+
+  .search-input {
+    width: 200px;
+    margin-left: 10px;
+  }
 }
 
-.prop-label-item{
+.prop-label-item {
   background: white;
   display: block;
-  .label-label{
+
+  .label-label {
     font-size: x-large;
     color: #333333;
     display: inline-block;
   }
-  .label-title{
+
+  .label-title {
     font-size: larger;
     color: #666666;
     padding-left: 10px;
   }
-  .tool-btns{
+
+  .tool-btns {
     display: flex;
     flex-direction: row;
     justify-content: flex-end;

+ 77 - 22
src/pages/config/widget/AddLabelForm.js

@@ -1,7 +1,7 @@
 import React from 'react';
-import { AutoComplete, Button, Form, Input } from 'antd';
+import { AutoComplete, Form, Input, message, Modal } from 'antd';
 import { connectAlita } from 'redux-alita';
-
+import * as PropTypes from 'prop-types';
 
 /**
  * 添加属性标签的表单,
@@ -15,71 +15,130 @@ class AddLabelForm extends React.Component {
         },
     };
 
+    static propTypes = {
+        visible: PropTypes.bool,
+        refresh: PropTypes.func,
+    };
+
     constructor(props) {
         super(props);
         let { label } = props;
         this.state = {
             label: label || { pid: 0 },
             labelList: [],
+            visible: false,
         };
     }
 
+    pLabel = {};
+
+    componentWillReceiveProps(nextProps, nextContext) {
+        let { label, visible } = nextProps;
+        this.setState({ label: label || { pid: 0 }, visible });
+    }
+
+
+    closeModal() {
+
+
+    }
+
+    handleLabelAdd = (values, label) => {
+        let params = { id: this.state.label.id, pid: label.pid };
+        this.props.setAlitaState({ funcName: 'labelAdd', params: { ...values, ...params } })
+            .then(() => {
+                message.success('添加成功');
+                this.props.refresh && this.props.refresh();
+                this.setState({ visible: false });
+            })
+            .catch(e => {
+                console.log('catch ', e);
+            });
+    };
+
+    handleLabelEdit = (values, label) => {
+        let params = { id: this.state.label.id, pid: label.pid };
+        this.props.setAlitaState({ funcName: 'labelEdit', params: { ...values, ...params } })
+            .then(() => {
+                message.success('编辑成功');
+                this.props.refresh && this.props.refresh();
+                this.setState({ visible: false });
+            });
+
+    };
+
     handleSubmit = e => {
         e.preventDefault();
         const _this = this;
-        let params = { id: _this.state.label.id, pid: _this.state.label.pid };
+        let pLabel = _this.pLabel;
         this.props.form.validateFieldsAndScroll((err, values) => {
             if (!err) {
-                if (_this.state.label.id) {
-                    _this.props.setAlitaState({ funcName: 'labelEdit', params: { ...values, ...params } })
-                        .then((resp) => {
-                            console.log(' resp ', resp);
-                        });
+                if (pLabel.id) {
+                    _this.handleLabelEdit(values, pLabel);
                 } else {
-                    _this.props.setAlitaState({ funcName: 'labelAdd', params: { ...values, ...params } });
+                    _this.handleLabelAdd(values, pLabel);
                 }
             }
         });
     };
 
     handleSearchLabel = (keywords) => {
-        this.props.setAlitaState({ funcName: 'searchLabel', params: { keywords } });
+        this.props.setAlitaState({ funcName: 'searchLabel', params: { keywords } })
+            .then(resp => {
+                console.log('resp label ', resp);
+            })
+            .catch(e => {
+                console.log('err ', e);
+            });
     };
 
     onSelect(sources = [], path) {
         for (let i in sources) {
             let source = sources[i];
             if (source.path === path) {
-                let oldV = this.state.label;
-                this.setState({ label: { ...oldV, pid: source.id } });
+                this.pLabel = { pid: source.id };
                 break;
             }
         }
     }
 
+
     render() {
-        const { getFieldDecorator } = this.props.form;
         let { label } = this.props;
         if (!label) return null;
         const { data: dataSource, isFetching } = this.props.searchLabel || { data: {} };
         const { isFetching: isSubmitLoading } = this.props.labelAdd || {};
         const { isFetching: isEditLoading } = this.props.labelEdit || {};
 
-        if (!dataSource.records) dataSource.records = [];
+        let records = dataSource ? dataSource.records : [];
+        if (!records) records = [];
+
+        return (<Modal visible={this.state.visible}
+                       title={label.id ? '编辑标签' : '添加标签'}
+                       onOk={this.handleSubmit.bind(this)}
+                       onCancel={() => this.setState({ visible: false })}>
+            {this.renderForm(records, label, isFetching, isSubmitLoading || isEditLoading)}
+        </Modal>);
+
+    }
+
+    renderForm(records = [], label = {}, isFetching, isLoading = false) {
+        const { getFieldDecorator } = this.props.form;
         return (<Form onSubmit={this.handleSubmit}>
             {(!label.id) && (<Form.Item>
                 {getFieldDecorator('path')(<AutoComplete onSearch={this.handleSearchLabel}
-                                                         dataSource={dataSource.records.map(item => item.path)}
+                                                         dataSource={records.map(item => item.path)}
                                                          loading={isFetching}
-                                                         onSelect={this.onSelect.bind(this, dataSource.records)}
-                                                         placeholder='输入关键词查询上级标签'/>)}
+                                                         onSelect={this.onSelect.bind(this, records)}
+                                                         placeholder="输入关键词查询上级标签"
+                />)}
             </Form.Item>)}
             <Form.Item>
                 {getFieldDecorator('label', {
                     rules: [{ required: true, message: '请输入标签' }],
                     initialValue: label.label,
                 })
-                (<Input disabled={!!label.id} placeholder='请输入标签'/>)}
+                (<Input disabled={!!label.id} placeholder="请输入标签"/>)}
             </Form.Item>
             <Form.Item>
                 {getFieldDecorator('title', { initialValue: label.title })(<Input placeholder='请输入标签名称'/>)}
@@ -87,10 +146,6 @@ class AddLabelForm extends React.Component {
             <Form.Item>
                 {getFieldDecorator('description', { initialValue: label.description })(<Input placeholder='请输入标签简介'/>)}
             </Form.Item>
-            <Form.Item>
-                <Button type='default' htmlType='button' onClick={this.props.cancel}>取消</Button>
-                <Button loading={isSubmitLoading || isEditLoading} htmlType='submit' type='primary'>提交</Button>
-            </Form.Item>
         </Form>);
     }