tuonina 5 роки тому
батько
коміт
6a87ad6a2c

+ 8 - 0
.idea/inspectionProfiles/Project_Default.xml

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

+ 473 - 21
.idea/workspace.xml

@@ -1,7 +1,20 @@
 <?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 afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/axios/property/label.js" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/const/index.js" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/pages/config/ConfigLabel.js" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/pages/config/styles/label.less" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/pages/config/widget/AddLabelForm.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/axios/config.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/axios/config.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/axios/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/axios/index.js" 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/routes/config.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/routes/config.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/routes/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/routes/index.js" afterDir="false" />
+    </list>
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
     <ignored path="$PROJECT_DIR$/tmp/" />
@@ -12,11 +25,33 @@
     <option name="LAST_RESOLUTION" value="IGNORE" />
   </component>
   <component name="FileEditorManager">
-    <leaf>
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <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="864">
+              <caret line="94" column="36" selection-start-line="94" selection-start-column="36" selection-end-line="94" selection-end-column="36" />
+              <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/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>
+          </provider>
+        </entry>
+      </file>
       <file pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/src/Page.js">
+        <entry file="file://$PROJECT_DIR$/src/pages/config/widget/AddLabelForm.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state>
+            <state relative-caret-position="318">
+              <caret line="98" column="24" lean-forward="true" selection-start-line="98" selection-start-column="24" selection-end-line="98" selection-end-column="24" />
               <folding>
                 <element signature="e#0#26#0" expanded="true" />
               </folding>
@@ -24,13 +59,112 @@
           </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="143">
+              <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>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <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="35" selection-start-line="8" selection-start-column="35" selection-end-line="8" selection-end-column="35" />
+            </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">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="197">
+              <caret line="147" column="6" selection-start-line="147" selection-start-column="6" selection-end-line="147" selection-end-column="6" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/index.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" />
+              <folding>
+                <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$/node_modules/antd/lib/button/button.d.ts">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="47">
+              <caret line="42" column="14" selection-start-line="42" selection-start-column="14" selection-end-line="42" selection-end-column="14" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/axios/property/label.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="189">
+              <caret line="9" column="34" selection-start-line="9" selection-start-column="34" selection-end-line="9" selection-end-column="34" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/axios/index.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="125">
+              <caret line="6" column="34" lean-forward="true" selection-start-line="6" selection-start-column="34" selection-end-line="6" selection-end-column="34" />
+            </state>
+          </provider>
+        </entry>
+      </file>
     </leaf>
   </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Less File" />
+        <option value="JavaScript File" />
+      </list>
+    </option>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <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/const/index.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" />
+      </list>
+    </option>
+  </component>
   <component name="ProjectFrameBounds" extendedState="6">
-    <option name="x" value="85" />
-    <option name="y" value="25" />
-    <option name="width" value="1750" />
-    <option name="height" value="980" />
+    <option name="width" value="1920" />
+    <option name="height" value="1030" />
+  </component>
+  <component name="ProjectLevelVcsManager">
+    <ConfirmationsSetting value="2" id="Add" />
   </component>
   <component name="ProjectView">
     <navigator proportions="" version="1">
@@ -49,6 +183,25 @@
               <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="axios" type="462c0819:PsiDirectoryNode" />
+              <item name="property" 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>
           </expand>
           <select />
         </subPane>
@@ -59,6 +212,8 @@
   <component name="PropertiesComponent">
     <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/../redux-alita" />
+    <property name="list.type.of.created.stylesheet" value="Less" />
     <property name="node.js.detected.package.eslint" value="true" />
     <property name="node.js.detected.package.standard" value="true" />
     <property name="node.js.path.for.package.eslint" value="project" />
@@ -68,6 +223,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="ts.external.directory.path" value="I:\Program Files\JetBrains\WebStorm 2019.1\plugins\JavaScriptLanguage\jsLanguageServicesImpl\external" />
   </component>
   <component name="RunDashboard">
     <option name="ruleStates">
@@ -92,31 +248,35 @@
       <option name="presentableId" value="Default" />
       <updated>1565328742876</updated>
       <workItem from="1565328743940" duration="480000" />
+      <workItem from="1565412727241" duration="14134000" />
+      <workItem from="1565485978005" duration="12010000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="480000" />
+    <option name="totallyTimeSpent" value="26624000" />
   </component>
   <component name="ToolWindowManager">
-    <frame x="-7" y="-7" width="1550" height="838" extended-state="7" />
+    <frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
+    <editor active="true" />
     <layout>
-      <window_info id="npm" side_tool="true" />
-      <window_info id="Favorites" side_tool="true" />
-      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.24966975" />
+      <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" />
-      <window_info anchor="bottom" id="Docker" show_stripe_button="false" />
-      <window_info anchor="bottom" id="Version Control" />
-      <window_info anchor="bottom" id="RNConsole" />
-      <window_info active="true" anchor="bottom" id="Terminal" visible="true" weight="0.32956153" />
-      <window_info anchor="bottom" id="Event Log" side_tool="true" />
+      <window_info id="npm" order="2" side_tool="true" />
+      <window_info id="Favorites" order="3" side_tool="true" />
       <window_info anchor="bottom" id="Message" order="0" />
-      <window_info anchor="bottom" id="Find" order="1" />
+      <window_info anchor="bottom" id="Find" order="1" weight="0.329718" />
       <window_info anchor="bottom" id="Run" order="2" />
       <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
       <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
       <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
       <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
+      <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.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" />
       <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
@@ -126,14 +286,306 @@
     <option name="version" value="1" />
   </component>
   <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/config/webpackDevServer.config.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="275">
+          <caret line="11" column="25" lean-forward="true" selection-start-line="11" selection-start-column="25" selection-end-line="11" selection-end-column="25" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/config/webpack.config.dev.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-2700" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/config/webpack.config.prod.js">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/serviceWorker.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="450">
+          <caret line="18" column="21" selection-start-line="18" selection-start-column="21" selection-end-line="18" selection-end-column="21" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/lib.webworker.d.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="197">
+          <caret line="2297" column="4" selection-start-line="2297" selection-start-column="4" selection-end-line="2297" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/index.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="200">
+          <caret line="38" column="15" lean-forward="true" selection-start-line="38" selection-start-column="15" selection-end-line="38" selection-end-column="15" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/forms/BasicForm.jsx">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-2850" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/config/env.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="225">
+          <caret line="9" column="38" lean-forward="true" selection-start-line="9" selection-end-line="10" />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/src/routes/config.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-684" />
+        <state relative-caret-position="100">
+          <caret line="4" column="17" lean-forward="true" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/SiderCustom.jsx">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-50">
+          <caret line="7" column="36" lean-forward="true" selection-start-line="7" selection-start-column="36" selection-end-line="7" selection-end-column="36" />
+          <folding>
+            <element signature="e#46#87#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/routes/index.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="575">
+          <caret line="66" column="68" selection-start-line="66" selection-start-column="63" selection-end-line="66" selection-end-column="68" />
+          <folding>
+            <element signature="e#39#80#0" expanded="true" />
+          </folding>
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/Page.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state>
+        <state relative-caret-position="250">
+          <caret line="10" column="43" lean-forward="true" selection-start-line="10" selection-start-column="43" selection-end-line="10" selection-end-column="43" />
+          <folding>
+            <element signature="e#0#26#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/extension/QueryParams.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-507">
+          <folding>
+            <element signature="n#!!doc" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/BreadcrumbCustom.jsx">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-132" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/dashboard/EchartsProjects.jsx">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-2432" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/dashboard/Dashboard.jsx">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/auth/RouterEnter.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-457" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/auth/Basic.js">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/dashboard/EchartsViews.jsx">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-2532" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/Page.jsx">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/node_modules/redux-alita/dist/redux-alita.esm.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="492">
+          <caret line="147" column="4" selection-start-line="147" selection-start-column="4" selection-end-line="147" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/node_modules/@types/react-slick/index.d.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="197">
+          <caret line="66" column="4" selection-start-line="66" selection-start-column="4" selection-end-line="66" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/HeaderCustom.jsx">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="825">
+          <caret line="48" column="38" lean-forward="true" selection-start-line="48" selection-start-column="38" selection-end-line="48" selection-end-column="38" />
+          <folding>
+            <element signature="e#46#87#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/scripts/start.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-1125" />
+      </provider>
+    </entry>
+    <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" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/style/scroll.less">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/node_modules/axios/index.d.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2775">
+          <caret line="111" column="50" selection-start-line="111" selection-start-column="50" selection-end-line="111" selection-end-column="50" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/components/pages/Login.jsx">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-46">
+          <caret line="6" column="41" selection-start-line="6" selection-start-column="30" selection-end-line="6" selection-end-column="41" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/axios/config.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="417">
+          <caret line="17" column="24" selection-start-line="17" selection-start-column="24" selection-end-line="17" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/index.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" />
+          <folding>
+            <element signature="e#223#278#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/node_modules/react/cjs/react.development.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="298">
+          <caret line="1838" column="15" lean-forward="true" selection-start-line="1838" selection-start-column="15" selection-end-line="1838" selection-end-column="15" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/node_modules/antd/lib/form/Form.d.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="268">
+          <caret line="127" column="8" selection-start-line="127" selection-start-column="8" selection-end-line="127" selection-end-column="8" />
+        </state>
+      </provider>
+    </entry>
+    <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="47">
+          <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/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>
+      </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="35" selection-start-line="8" selection-start-column="35" selection-end-line="8" selection-end-column="35" />
+        </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="197">
+          <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/pages/config/ConfigLabel.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="864">
+          <caret line="94" column="36" selection-start-line="94" selection-start-column="36" selection-end-line="94" selection-end-column="36" />
+          <folding>
+            <element signature="e#0#26#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/axios/index.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="125">
+          <caret line="6" column="34" lean-forward="true" 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="189">
+          <caret line="9" column="34" selection-start-line="9" selection-start-column="34" selection-end-line="9" 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="143">
+          <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>
+      </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" lean-forward="true" selection-start-line="98" selection-start-column="24" selection-end-line="98" selection-end-column="24" />
           <folding>
             <element signature="e#0#26#0" expanded="true" />
           </folding>

+ 1 - 2
src/axios/config.js

@@ -15,5 +15,4 @@ export const GIT_OAUTH = 'https://github.com/login/oauth';
 export const GIT_USER = 'https://api.github.com/user';
 
 // bbc top news
-export const NEWS_BBC =
-    'https://newsapi.org/v2/top-headlines?sources=bbc-news&apiKey=429904aa01f54a39a278a406acf50070';
+export const NEWS_BBC = 'https://newsapi.org/v2/top-headlines?sources=bbc-news&apiKey=429904aa01f54a39a278a406acf50070';

+ 8 - 1
src/axios/index.js

@@ -4,6 +4,11 @@
 import axios from 'axios';
 import { get, post } from './tools';
 import * as config from './config';
+import { findPLabel, labelAdd, labelEdit, pLabelDelete, searchLabel } from './property/label';
+
+export {
+    findPLabel, searchLabel, labelAdd, labelEdit, pLabelDelete,
+};
 
 export const getBbcNews = () => get({ url: config.NEWS_BBC });
 
@@ -23,7 +28,7 @@ export const gitOauthLogin = () =>
     get({
         url: `${
             config.GIT_OAUTH
-        }/authorize?client_id=792cdcd244e98dcd2dee&redirect_uri=http://localhost:3006/&scope=user&state=reactAdmin`,
+            }/authorize?client_id=792cdcd244e98dcd2dee&redirect_uri=http://localhost:3006/&scope=user&state=reactAdmin`,
     });
 export const gitOauthToken = code =>
     post({
@@ -45,3 +50,5 @@ export const gitOauthInfo = access_token =>
 export const admin = () => get({ url: config.MOCK_AUTH_ADMIN });
 // 访问权限获取
 export const guest = () => get({ url: config.MOCK_AUTH_VISITOR });
+
+

+ 21 - 0
src/axios/property/label.js

@@ -0,0 +1,21 @@
+import {get,post,put,del} from '../tools'
+/**
+ * 查询标签信息
+ * @param params
+ */
+export const findPLabel=(params)=>get({url:'/v1/property/label',params});
+
+export const labelAdd=(params)=>post({url:'/v1/property/label',data:params});
+
+export const labelEdit=(params)=>put({url:'/v1/property/label',data:params});
+export const pLabelDelete=(id)=>del({url:`/v1/property/label/${id}`});
+
+/**
+ * 如果没有关键词,则不查询网络
+ * @param keywords
+ * @returns {{records: Array}|Promise<any | never>}
+ */
+export const searchLabel=({keywords})=>{
+    if (keywords === '') return {records:[]};
+    return get({url:'/v1/property/label',params:{keywords}})
+};

+ 34 - 3
src/axios/tools.js

@@ -4,16 +4,25 @@
  */
 import axios from 'axios';
 import { message } from 'antd';
+import config from '../const';
+
+function checkURL(url) {
+    if (/(http|ws|https)/.test(url)) {
+        return url;
+    }
+    return `${config.BASE_API}${url}`;
+}
 
 /**
  * 公用get请求
  * @param url       接口地址
  * @param msg       接口异常提示
+ * @param params    请求参数
  * @param headers   接口所需header配置
  */
-export const get = ({ url, msg = '接口异常', headers }) =>
+export const get = ({ url, headers, params, msg = '接口异常' }) =>
     axios
-        .get(url, headers)
+        .get(checkURL(url), { headers, params })
         .then(res => res.data)
         .catch(err => {
             console.log(err);
@@ -29,9 +38,31 @@ export const get = ({ url, msg = '接口异常', headers }) =>
  */
 export const post = ({ url, data, msg = '接口异常', headers }) =>
     axios
-        .post(url, data, headers)
+        .post(checkURL(url), data, headers)
         .then(res => res.data)
         .catch(err => {
             console.log(err);
             message.warn(msg);
         });
+
+
+/**
+ *
+ * @param url
+ * @param data
+ * @param msg
+ * @param headers
+ * @returns {Promise<AxiosResponse<any> | never>}
+ */
+export const put = ({ url, data, msg = '接口异常', headers }) =>
+    axios.put(checkURL(url), data, headers)
+        .then(resp => resp.data)
+        .catch(err => {
+            console.log('err : ', url, ' err: ', err);
+            return err;
+        });
+
+
+export const del = ({ url, data, headers }) =>
+    axios.delete(checkURL(url), { data, headers })
+        .then(resp => resp.data);

+ 24 - 0
src/const/index.js

@@ -0,0 +1,24 @@
+const NODE_ENV = process.env.NODE_ENV;
+console.log('当前环境: ', NODE_ENV);
+
+/**
+ * 基础环境配置
+ * @type {{BASE_API: string}}
+ */
+const BASE_CONF = {
+    BASE_API: 'http://192.168.1.113:11111/',
+};
+
+/**
+ * 生成环境下的环境覆盖
+ * @type {{}}
+ */
+const PROD_CONF = {};
+
+let CONF = BASE_CONF;
+if (NODE_ENV === 'development') {
+    CONF = { ...CONF, ...PROD_CONF };
+}
+export default CONF;
+
+

+ 102 - 0
src/pages/config/ConfigLabel.js

@@ -0,0 +1,102 @@
+import React from 'react';
+import { connectAlita } from 'redux-alita';
+import { withRouter } from 'react-router-dom';
+import { Button, List, Modal } from 'antd';
+import './styles/label.less';
+import AddLabelForm from './widget/AddLabelForm';
+
+
+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,
+            currentLabel: null,
+        };
+    }
+
+
+    componentDidMount() {
+        this._fetchLabels();
+    }
+
+    _fetchLabels() {
+        let params = this.state.params;
+        this.props.setAlitaState({ funcName: 'findPLabel', params });
+
+    }
+
+    _handleSearch(value) {
+        this.state.params.keywords = value;
+        this._fetchLabels();
+
+    }
+
+
+    renderItem(item) {
+        return (<List.Item className='prop-label-item'>
+            <div>
+                <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>
+        </List.Item>);
+    }
+
+    _onAddModalHide() {
+        this.setState({ addVisible: false, currentLabel: null });
+
+    }
+
+    render() {
+        const { data: labelList = {} } = this.props.findPLabel || {};
+        const { currentLabel, loading, addModalTitle } = this.state;
+        return (<div>
+            <div className='prop-label-header'>
+                <Button type='primary' icon='sync' onClick={this._fetchLabels.bind(this)}/>
+                <Button type='primary' icon='plus' onClick={()=>this.setState({currentLabel:{}})}/>
+            </div>
+
+            <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>
+        </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 });
+            },
+        });
+    }
+
+}
+
+export default withRouter(connectAlita(['findPLabel'])(ConfigLabel));

+ 25 - 0
src/pages/config/styles/label.less

@@ -0,0 +1,25 @@
+
+.prop-label-header{
+  padding: 10px;
+}
+
+.prop-label-item{
+  background: white;
+  display: block;
+  .label-label{
+    font-size: x-large;
+    color: #333333;
+    display: inline-block;
+  }
+  .label-title{
+    font-size: larger;
+    color: #666666;
+    padding-left: 10px;
+  }
+  .tool-btns{
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-end;
+  }
+}
+

+ 106 - 0
src/pages/config/widget/AddLabelForm.js

@@ -0,0 +1,106 @@
+import React from 'react';
+import { AutoComplete, Button, Form, Input } from 'antd';
+import { connectAlita } from 'redux-alita';
+
+
+/**
+ * 添加属性标签的表单,
+ * 包括编辑,和添加
+ */
+class AddLabelForm extends React.Component {
+
+    static defaultProps = {
+        searchLabel: { data: {} },
+        cancel: () => {
+        },
+    };
+
+    constructor(props) {
+        super(props);
+        let { label } = props;
+        this.state = {
+            label: label || { pid: 0 },
+            labelList: [],
+        };
+    }
+
+    handleSubmit = e => {
+        e.preventDefault();
+        const _this = this;
+        this.props.form.validateFieldsAndScroll((err, values) => {
+            if (!err) {
+                if (_this.state.label.id) {
+                    _this.props.setAlitaState({ funcName: 'labelEdit', params: values })
+                        .then((resp)=>{
+                            console.log(' resp ',resp)
+                        })
+                } else {
+                    _this.props.setAlitaState({ funcName: 'labelAdd', params: values });
+                }
+            }
+        });
+    };
+
+    handleSearchLabel = (keywords) => {
+        this.props.setAlitaState({ funcName: 'searchLabel', params: { keywords } });
+    };
+
+    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 } });
+                break;
+            }
+        }
+    }
+
+    render() {
+        console.log('props=>',this.props)
+        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 = [];
+        return (<Form onSubmit={this.handleSubmit}>
+            {(!label.id) && (<Form.Item>
+                {getFieldDecorator('path')(<AutoComplete onSearch={this.handleSearchLabel}
+                                                         dataSource={dataSource.records.map(item => item.path)}
+                                                         loading={isFetching}
+                                                         onSelect={this.onSelect.bind(this, dataSource.records)}
+                                                         placeholder='输入关键词查询上级标签'/>)}
+            </Form.Item>)}
+            <Form.Item style={{ display: 'none' }}>
+                {getFieldDecorator('id', { initialValue: label.id })}(<Input/>
+            </Form.Item>
+            <Form.Item style={{ display: 'none' }}>
+                {getFieldDecorator('pid', { initialValue: label.pid })}(<Input/>
+            </Form.Item>
+            <Form.Item>
+                {getFieldDecorator('label', {
+                    rules: [{ required: true, message: '请输入标签' }],
+                    initialValue: label.label,
+                })
+                (<Input disabled={!!label.id} placeholder='请输入标签'/>)}
+            </Form.Item>
+            <Form.Item>
+                {getFieldDecorator('title', { initialValue: label.title })(<Input placeholder='请输入标签名称'/>)}
+            </Form.Item>
+            <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>);
+    }
+
+
+}
+
+export default connectAlita(['searchLabel', 'labelAdd','labelEdit'])(Form.create({ name: 'AddLabelForm' })(AddLabelForm));

+ 6 - 0
src/routes/config.js

@@ -1,7 +1,13 @@
+import ConfigLabel from '../pages/config/ConfigLabel';
+
 export default {
     menus: [
         // 菜单相关路由
         { key: '/app/dashboard/index', title: '首页', icon: 'mobile', component: 'Dashboard' },
+        {
+            key: '/app/config', title: '配置中心', icon: 'mobile',
+            subs: [{ key: '/app/config/label', title: '属性标签', component: ConfigLabel}],
+        },
         {
             key: '/app/ui',
             title: 'UI',

+ 12 - 5
src/routes/index.js

@@ -13,7 +13,7 @@ export default class CRouter extends Component {
         const { auth } = this.props;
         const { permissions } = auth.data;
         // const { auth } = store.getState().httpData;
-        if (!permissions || !permissions.includes(permission)) return <Redirect to={'404'} />;
+        if (!permissions || !permissions.includes(permission)) return <Redirect to={'404'}/>;
         return component;
     };
     requireLogin = (component, permission) => {
@@ -21,17 +21,24 @@ export default class CRouter extends Component {
         const { permissions } = auth.data;
         if (process.env.NODE_ENV === 'production' && !permissions) {
             // 线上环境判断是否登录
-            return <Redirect to={'/login'} />;
+            return <Redirect to={'/login'}/>;
         }
         return permission ? this.requireAuth(permission, component) : component;
     };
+
     render() {
         return (
             <Switch>
                 {Object.keys(routesConfig).map(key =>
                     routesConfig[key].map(r => {
                         const route = r => {
-                            const Component = AllComponents[r.component];
+                            let Component;
+                            let component = r.component;
+                            if (typeof component == 'string') {
+                                Component = AllComponents[r.component];
+                            } else {
+                                Component = component;
+                            }
                             return (
                                 <Route
                                     key={r.route || r.key}
@@ -68,10 +75,10 @@ export default class CRouter extends Component {
                             );
                         };
                         return r.component ? route(r) : r.subs.map(r => route(r));
-                    })
+                    }),
                 )}
 
-                <Route render={() => <Redirect to="/404" />} />
+                <Route render={() => <Redirect to="/404"/>}/>
             </Switch>
         );
     }