Commit 9b2c994c authored by superman's avatar superman

update

parent deccc40d
......@@ -23,23 +23,23 @@
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="List.jsx" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/List.jsx">
<file leaf-file-name="product.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/services/product.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="375">
<caret line="68" column="9" selection-start-line="68" selection-start-column="9" selection-end-line="68" selection-end-column="9" />
<state relative-caret-position="420">
<caret line="28" column="7" selection-start-line="25" selection-start-column="4" selection-end-line="28" selection-end-column="7" />
<folding>
<element signature="e#0#50#0" expanded="true" />
<element signature="e#0#30#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Item.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.jsx">
<file leaf-file-name="ShouyiYongjingForm.jsx" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="23" column="36" selection-start-line="23" selection-start-column="36" selection-end-line="23" selection-end-column="36" />
<state relative-caret-position="447">
<caret line="57" column="13" selection-start-line="57" selection-start-column="13" selection-end-line="57" selection-end-column="13" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
......@@ -47,89 +47,94 @@
</provider>
</entry>
</file>
<file leaf-file-name="List.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Product/List.jsx">
<file leaf-file-name="utils.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/utils.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="224">
<caret line="41" column="14" selection-start-line="41" selection-start-column="14" selection-end-line="41" selection-end-column="51" />
<state relative-caret-position="75">
<caret line="5" column="25" selection-start-line="5" selection-start-column="16" selection-end-line="5" selection-end-column="25" />
<folding>
<element signature="e#0#50#0" expanded="true" />
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Item.less" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.less">
<file leaf-file-name="xFetch.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/services/xFetch.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<caret line="18" column="33" selection-start-line="18" selection-start-column="33" selection-end-line="18" selection-end-column="33" />
<state relative-caret-position="494">
<caret line="44" column="75" selection-start-line="44" selection-start-column="75" selection-end-line="44" selection-end-column="75" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="App.less" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/App/App.less">
<file leaf-file-name="ProductBaseInfo.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="620">
<caret line="43" column="34" selection-start-line="43" selection-start-column="34" selection-end-line="43" selection-end-column="34" />
<folding />
<state relative-caret-position="177">
<caret line="34" column="6" selection-start-line="29" selection-start-column="4" selection-end-line="34" selection-end-column="6" />
<folding>
<element signature="e#0#50#0" expanded="true" />
<element signature="e#2068#2983#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="utils.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/utils.js">
<file leaf-file-name="Login.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Login/Login.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="539">
<caret line="75" column="36" selection-start-line="75" selection-start-column="13" selection-end-line="75" selection-end-column="36" />
<folding />
<state relative-caret-position="282">
<caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="trade.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/reducers/trade.js">
<file leaf-file-name="user.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/services/user.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
<caret line="16" column="46" selection-start-line="16" selection-start-column="46" selection-end-line="16" selection-end-column="46" />
<folding>
<element signature="e#0#44#0" expanded="true" />
</folding>
<state relative-caret-position="75">
<caret line="5" column="38" selection-start-line="3" selection-start-column="4" selection-end-line="5" selection-end-column="38" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="App.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/App/App.jsx">
<file leaf-file-name="proxy.config.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/proxy.config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15">
<caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="63" />
<folding />
<state relative-caret-position="582">
<caret line="76" column="69" selection-start-line="76" selection-start-column="69" selection-end-line="76" selection-end-column="69" />
<folding>
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="todos.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/sagas/todos.js">
<file leaf-file-name="Item.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="405">
<caret line="30" column="2" selection-start-line="30" selection-start-column="5" selection-end-line="33" selection-end-column="8" />
<state relative-caret-position="582">
<caret line="119" column="20" selection-start-line="119" selection-start-column="20" selection-end-line="119" selection-end-column="90" />
<folding>
<marker date="1468568582000" expanded="true" signature="624:690" placeholder="..." />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="trade.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/sagas/trade.js">
<file leaf-file-name="Item.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Product/Item.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="32" column="47" selection-start-line="32" selection-start-column="47" selection-end-line="32" selection-end-column="47" />
<state relative-caret-position="582">
<caret line="88" column="5" selection-start-line="88" selection-start-column="5" selection-end-line="88" selection-end-column="5" />
<folding>
<element signature="e#0#38#0" expanded="true" />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
......@@ -145,11 +150,6 @@
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/.editorconfig" />
<option value="$PROJECT_DIR$/src/components/Todos/Todos.jsx" />
<option value="$PROJECT_DIR$/src/reducers/todos.js" />
<option value="$PROJECT_DIR$/package.json" />
<option value="$PROJECT_DIR$/webpack.config.js" />
<option value="$PROJECT_DIR$/src/sagas/index.js" />
<option value="$PROJECT_DIR$/src/components/Product/AddItem.jsx" />
<option value="$PROJECT_DIR$/src/services/authenticate.js" />
......@@ -162,31 +162,45 @@
<option value="$PROJECT_DIR$/src/layouts/MainLayout/App.jsx" />
<option value="$PROJECT_DIR$/src/components/App/App.jsx" />
<option value="$PROJECT_DIR$/src/sagas/authenticate.js" />
<option value="$PROJECT_DIR$/src/services/user.js" />
<option value="$PROJECT_DIR$/src/reducers/user.js" />
<option value="$PROJECT_DIR$/src/entries/index.js" />
<option value="$PROJECT_DIR$/src/services/xFetch.js" />
<option value="$PROJECT_DIR$/src/reducers/product.js" />
<option value="$PROJECT_DIR$/src/entries/index.html" />
<option value="$PROJECT_DIR$/proxy.config.js" />
<option value="$PROJECT_DIR$/src/sagas/user.js" />
<option value="$PROJECT_DIR$/src/containers/Login/Login.less" />
<option value="$PROJECT_DIR$/src/containers/Login/Login.jsx" />
<option value="$PROJECT_DIR$/src/sagas/todos.js" />
<option value="$PROJECT_DIR$/src/containers/App/App.jsx" />
<option value="$PROJECT_DIR$/src/containers/Product/AddItem.jsx" />
<option value="$PROJECT_DIR$/src/routes/index.js" />
<option value="$PROJECT_DIR$/src/services/trade.js" />
<option value="$PROJECT_DIR$/src/services/product.js" />
<option value="$PROJECT_DIR$/src/sagas/product.js" />
<option value="$PROJECT_DIR$/src/reducers/trade.js" />
<option value="$PROJECT_DIR$/src/sagas/trade.js" />
<option value="$PROJECT_DIR$/src/utils.js" />
<option value="$PROJECT_DIR$/src/containers/Trade/Item.less" />
<option value="$PROJECT_DIR$/src/containers/Trade/Item.jsx" />
<option value="$PROJECT_DIR$/src/containers/App/App.less" />
<option value="$PROJECT_DIR$/src/containers/Product/List.jsx" />
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/src/containers/Trade/Commission.js" />
<option value="$PROJECT_DIR$/src/containers/Trade/Item.less" />
<option value="$PROJECT_DIR$/src/containers/Trade/Contract.jsx" />
<option value="$PROJECT_DIR$/src/containers/Trade/List.jsx" />
<option value="$PROJECT_DIR$/src/entries/index.less" />
<option value="$PROJECT_DIR$/src/containers/Login/Login.less" />
<option value="$PROJECT_DIR$/src/services/user.js" />
<option value="$PROJECT_DIR$/src/containers/Trade/AddItem.jsx" />
<option value="$PROJECT_DIR$/src/components/YongjingSuanFaItem/YongjingSuanFaItem.jsx" />
<option value="$PROJECT_DIR$/src/components/ProductBaseElement/ProductBaseElement.jsx" />
<option value="$PROJECT_DIR$/src/components/HuikuanInfoForm/HuikuanInfoForm.jsx" />
<option value="$PROJECT_DIR$/src/containers/Product/AddItem.less" />
<option value="$PROJECT_DIR$/src/containers/Product/AddItem.jsx" />
<option value="$PROJECT_DIR$/src/containers/Product/List.jsx" />
<option value="$PROJECT_DIR$/src/containers/Trade/Item.jsx" />
<option value="$PROJECT_DIR$/src/reducers/trade.js" />
<option value="$PROJECT_DIR$/src/containers/App/App.jsx" />
<option value="$PROJECT_DIR$/src/routes/index.js" />
<option value="$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.less" />
<option value="$PROJECT_DIR$/src/sagas/product.js" />
<option value="$PROJECT_DIR$/src/reducers/product.js" />
<option value="$PROJECT_DIR$/src/containers/Product/EditItem.jsx" />
<option value="$PROJECT_DIR$/src/services/xFetch.js" />
<option value="$PROJECT_DIR$/src/utils.js" />
<option value="$PROJECT_DIR$/proxy.config.js" />
<option value="$PROJECT_DIR$/src/containers/Product/Item.jsx" />
<option value="$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.jsx" />
<option value="$PROJECT_DIR$/src/services/product.js" />
<option value="$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx" />
</list>
</option>
</component>
......@@ -257,6 +271,264 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="services" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="sagas" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="routes" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="reducers" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="entries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="containers" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Trade" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="containers" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="containers" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Product" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="containers" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Login" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="containers" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="App" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ShouyiYongjingForm" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ProductBaseInfo" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Scope" />
......@@ -422,6 +694,9 @@
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="ec208c71-5ff8-4642-a786-fad4f24be9b8" name="Default" comment="" />
......@@ -431,169 +706,70 @@
<updated>1468391520559</updated>
<workItem from="1468394206076" duration="1879000" />
<workItem from="1468396235889" duration="33823000" />
<workItem from="1468540294765" duration="37456000" />
<workItem from="1468540294765" duration="94258000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="73158000" />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
<is-autoscroll-to-source value="true" />
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="true" />
<is-autoscroll-to-source value="true" />
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1280" height="800" extended-state="0" />
<editor active="false" />
<layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.329235" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32896653" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32876712" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.24071082" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="1" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/services/product.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="195">
<caret line="13" column="5" selection-start-line="6" selection-start-column="2" selection-end-line="13" selection-end-column="5" />
<folding>
<element signature="e#0#30#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/sagas/user.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="e#0#38#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/sagas/product.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
<caret line="19" column="17" selection-start-line="0" selection-start-column="0" selection-end-line="39" selection-end-column="0" />
<folding>
<element signature="e#0#38#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/todos.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.editorconfig">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" column="15" selection-start-line="5" selection-start-column="15" selection-end-line="5" selection-end-column="15" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.eslintrc">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/atool-build/lib/transformLess.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-315">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/atool-build/lib/mergeCustomConfig.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/atool-build/bin/atool-build">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/atool-build/lib/build.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1710">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/atool-build/lib/webpack.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/atool-build/lib/getBabelCommonConfig.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/atool-build/lib/getTSCommonConfig.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/atool-build/lib/getWebpackCommonConfig.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-528">
<caret line="95" column="0" selection-start-line="95" selection-start-column="0" selection-end-line="95" selection-end-column="0" />
</state>
</provider>
</entry>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="129960000" />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
<is-autoscroll-to-source value="true" />
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="true" />
<is-autoscroll-to-source value="true" />
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1280" height="800" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.329235" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32896653" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32876712" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.24071082" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
</layout>
</component>
<component name="Vcs.Log.UiProperties">
<option name="RECENTLY_FILTERED_USER_GROUPS">
<collection />
</option>
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
<collection />
</option>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="2" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/webpack.config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="492">
......@@ -690,14 +866,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/user.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="23" column="0" selection-start-line="23" selection-start-column="0" selection-end-line="23" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Todos/Todos.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="495">
......@@ -708,14 +876,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/xFetch.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="344">
<caret line="41" column="40" selection-start-line="41" selection-start-column="40" selection-end-line="41" selection-end-column="40" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/entries/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-361">
......@@ -734,192 +894,347 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/reducers/product.js">
<entry file="file://$PROJECT_DIR$/src/sagas/user.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/trade.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="10" column="29" selection-start-line="10" selection-start-column="4" selection-end-line="10" selection-end-column="29" />
<state relative-caret-position="135">
<caret line="9" column="0" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
<folding>
<element signature="e#0#46#0" expanded="true" />
<element signature="e#0#30#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/reducers/user.js">
<entry file="file://$PROJECT_DIR$/src/containers/App/App.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="12" column="33" selection-start-line="12" selection-start-column="26" selection-end-line="12" selection-end-column="33" />
<state relative-caret-position="620">
<caret line="43" column="34" selection-start-line="43" selection-start-column="34" selection-end-line="43" selection-end-column="34" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/sagas/user.js">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45">
<caret line="3" column="0" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/entries/index.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
<caret line="7" column="35" selection-start-line="7" selection-start-column="35" selection-end-line="7" selection-end-column="35" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Login/Login.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="410">
<caret line="88" column="25" selection-start-line="88" selection-start-column="25" selection-end-line="88" selection-end-column="25" />
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="4" selection-end-column="1" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Login/Login.jsx">
<entry file="file://$PROJECT_DIR$/src/sagas/todos.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" column="46" selection-start-line="2" selection-start-column="39" selection-end-line="2" selection-end-column="46" />
<folding />
<state relative-caret-position="405">
<caret line="30" column="2" selection-start-line="30" selection-start-column="5" selection-end-line="33" selection-end-column="8" />
<folding>
<marker date="1468568582000" expanded="true" signature="624:690" placeholder="..." />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/proxy.config.js">
<entry file="file://$PROJECT_DIR$/src/components/YongjingSuanFaItem/YongjingSuanFaItem.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420">
<caret line="28" column="0" selection-start-line="28" selection-start-column="0" selection-end-line="28" selection-end-column="0" />
<state relative-caret-position="480">
<caret line="38" column="5" selection-start-line="38" selection-start-column="5" selection-end-line="38" selection-end-column="5" />
<folding>
<element signature="n#!!doc" expanded="true" />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Product/AddItem.jsx">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/AddItem.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="6" column="0" selection-start-line="6" selection-start-column="0" selection-end-line="8" selection-end-column="48" />
<state relative-caret-position="240">
<caret line="26" column="10" selection-start-line="23" selection-start-column="8" selection-end-line="26" selection-end-column="10" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/index.js">
<entry file="file://$PROJECT_DIR$/src/components/ProductBaseElement/ProductBaseElement.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="450">
<caret line="30" column="33" selection-start-line="30" selection-start-column="33" selection-end-line="30" selection-end-column="33" />
<state relative-caret-position="162">
<caret line="33" column="1" selection-start-line="33" selection-start-column="1" selection-end-line="33" selection-end-column="1" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/product.js">
<entry file="file://$PROJECT_DIR$/src/components/HuikuanInfoForm/HuikuanInfoForm.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="3" column="31" selection-start-line="3" selection-start-column="22" selection-end-line="3" selection-end-column="31" />
<folding />
<state relative-caret-position="315">
<caret line="21" column="0" selection-start-line="21" selection-start-column="0" selection-end-line="29" selection-end-column="14" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/sagas/product.js">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/List.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="195">
<caret line="13" column="19" selection-start-line="13" selection-start-column="19" selection-end-line="13" selection-end-column="19" />
<state relative-caret-position="210">
<caret line="95" column="4" selection-start-line="95" selection-start-column="4" selection-end-line="97" selection-end-column="5" />
<folding>
<element signature="e#0#38#0" expanded="true" />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/trade.js">
<entry file="file://$PROJECT_DIR$/src/containers/Product/List.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="9" column="0" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
<state relative-caret-position="162">
<caret line="91" column="5" selection-start-line="91" selection-start-column="5" selection-end-line="91" selection-end-column="5" />
<folding>
<element signature="e#0#30#0" expanded="true" />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/sagas/trade.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="570">
<caret line="51" column="5" selection-start-line="48" selection-start-column="4" selection-end-line="51" selection-end-column="5" />
<folding>
<element signature="e#0#38#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/reducers/trade.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
<caret line="16" column="46" selection-start-line="16" selection-start-column="46" selection-end-line="16" selection-end-column="46" />
<state relative-caret-position="285">
<caret line="19" column="45" selection-start-line="19" selection-start-column="45" selection-end-line="19" selection-end-column="45" />
<folding>
<element signature="e#0#44#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/sagas/todos.js">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Commission.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="405">
<caret line="30" column="2" selection-start-line="30" selection-start-column="5" selection-end-line="33" selection-end-column="8" />
<state relative-caret-position="27">
<caret line="21" column="6" selection-start-line="0" selection-start-column="0" selection-end-line="60" selection-end-column="0" />
<folding>
<marker date="1468568582000" expanded="true" signature="624:690" placeholder="..." />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/sagas/trade.js">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Contract.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="32" column="47" selection-start-line="32" selection-start-column="47" selection-end-line="32" selection-end-column="47" />
<state relative-caret-position="222">
<caret line="21" column="6" selection-start-line="18" selection-start-column="4" selection-end-line="21" selection-end-column="6" />
<folding>
<element signature="e#0#38#0" expanded="true" />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/utils.js">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="539">
<caret line="75" column="36" selection-start-line="75" selection-start-column="13" selection-end-line="75" selection-end-column="36" />
<state relative-caret-position="-72">
<caret line="16" column="19" selection-start-line="16" selection-start-column="19" selection-end-line="16" selection-end-column="19" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/App/App.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15">
<caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="63" />
<state relative-caret-position="240">
<caret line="36" column="67" selection-start-line="36" selection-start-column="67" selection-end-line="36" selection-end-column="67" />
<folding>
<element signature="e#0#52#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Product/AddItem.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="4" column="7" selection-start-line="4" selection-start-column="7" selection-end-line="4" selection-end-column="7" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.jsx">
<entry file="file://$PROJECT_DIR$/src/reducers/user.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="12" column="33" selection-start-line="12" selection-start-column="26" selection-end-line="12" selection-end-column="33" />
<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="345">
<caret line="23" column="36" selection-start-line="23" selection-start-column="36" selection-end-line="23" selection-end-column="36" />
<state relative-caret-position="447">
<caret line="33" column="73" selection-start-line="33" selection-start-column="73" selection-end-line="33" selection-end-column="73" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.less">
<entry file="file://$PROJECT_DIR$/src/containers/Product/AddItem.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<caret line="18" column="33" selection-start-line="18" selection-start-column="33" selection-end-line="18" selection-end-column="33" />
<state relative-caret-position="405">
<caret line="177" column="31" selection-start-line="0" selection-start-column="0" selection-end-line="302" selection-end-column="0" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/App/App.less">
<entry file="file://$PROJECT_DIR$/src/sagas/product.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="620">
<caret line="43" column="34" selection-start-line="43" selection-start-column="34" selection-end-line="43" selection-end-column="34" />
<state relative-caret-position="522">
<caret line="94" column="54" selection-start-line="94" selection-start-column="35" selection-end-line="94" selection-end-column="54" />
<folding>
<element signature="e#0#38#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/reducers/product.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="510">
<caret line="36" column="6" selection-start-line="36" selection-start-column="6" selection-end-line="36" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Product/List.jsx">
<entry file="file://$PROJECT_DIR$/src/containers/Product/EditItem.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="224">
<caret line="41" column="14" selection-start-line="41" selection-start-column="14" selection-end-line="41" selection-end-column="51" />
<state relative-caret-position="1768">
<caret line="219" column="94" selection-start-line="219" selection-start-column="86" selection-end-line="219" selection-end-column="94" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/List.jsx">
<entry file="file://$PROJECT_DIR$/src/containers/Login/Login.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="375">
<caret line="68" column="9" selection-start-line="68" selection-start-column="9" selection-end-line="68" selection-end-column="9" />
<state relative-caret-position="282">
<caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/user.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" column="38" selection-start-line="3" selection-start-column="4" selection-end-line="5" selection-end-column="38" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/utils.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" column="25" selection-start-line="5" selection-start-column="16" selection-end-line="5" selection-end-column="25" />
<folding>
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/xFetch.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="494">
<caret line="44" column="75" selection-start-line="44" selection-start-column="75" selection-end-line="44" selection-end-column="75" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/proxy.config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582">
<caret line="76" column="69" selection-start-line="76" selection-start-column="69" selection-end-line="76" selection-end-column="69" />
<folding>
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582">
<caret line="119" column="20" selection-start-line="119" selection-start-column="20" selection-end-line="119" selection-end-column="90" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/containers/Product/Item.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582">
<caret line="88" column="5" selection-start-line="88" selection-start-column="5" selection-end-line="88" selection-end-column="5" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/product.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420">
<caret line="28" column="7" selection-start-line="25" selection-start-column="4" selection-end-line="28" selection-end-column="7" />
<folding>
<element signature="e#0#30#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="177">
<caret line="34" column="6" selection-start-line="29" selection-start-column="4" selection-end-line="34" selection-end-column="6" />
<folding>
<element signature="e#0#50#0" expanded="true" />
<element signature="e#2068#2983#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="447">
<caret line="57" column="13" selection-start-line="57" selection-start-column="13" selection-end-line="57" selection-end-column="13" />
<folding>
<element signature="e#0#50#0" expanded="true" />
</folding>
......
......@@ -24,5 +24,55 @@ module.exports = {
});
}, 500);
},
'/api/*': 'http://react.yanky.cn/', //'http://192.168.1.126:8080/',
'/api/catessddsd': function (req, res) {
setTimeout(()=>{
res.json({
status:1,
result:[
{
value:1,
label:'信托',
children:[
{
value:101,
label:'房产'
},{
value:102,
label:'政府'
},{
value:103,
label:'企业流贷'
}
]
},{
value:2,
label:'资管',
children:[
{
value:201,
label:'房产'
},{
value:202,
label:'政府'
},{
value:203,
label:'企业流贷'
}
]
},{
value:3,
label:'私募',
children:[
{
value:301,
label:'契约型'
}
]
}
]
})
},100);
},
'/api/*':'http://react.yanky.cn/', //'http://192.168.1.126:8080/'
};
import React, {Component, PropTypes} from 'react';
import {
Row,
Col,
Form,
Input,
Button,
Checkbox,
Select,
message,
Tabs,
Cascader,
Radio,
Upload,
Icon,
Modal,
DatePicker,
Table
} from 'antd';
@Form.create()
export default class HuikuanInfoForm extends Component {
constructor(props, context) {
super(props, context);
}
static propsType = {};
render() {
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
const {form:{getFieldProps}} = this.props;
return (
<Form horizontal>
<Form.Item label="名称" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('hkzhnc')} />
</Form.Item>
<Form.Item label="银行帐号" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('yhzh')} />
</Form.Item>
<Form.Item label="开户行" {...formItemLayout}>
<Input placeholder="" {...getFieldProps('khh')} />
</Form.Item>
<Form.Item label="打款须知" {...formItemLayout}>
<Input type="textarea" rows={10} placeholder="" {...getFieldProps('dkxz')} />
</Form.Item>
</Form>
);
}
}
import React, {Component, PropTypes} from 'react';
import {
Row,
Col,
Form,
Input,
Button,
Checkbox,
Select,
message,
Tabs,
Cascader,
Radio,
Upload,
Icon,
Modal,
DatePicker,
Table
} from 'antd';
import {UUID} from '../../utils';
export function BaseElementTransform(objs) {
return Object.keys(objs).map(key=>({
key: UUID(),
title: key,
content: objs[key]
}));
}
export function CreateBaseElement() {
return {key: UUID()};
}
export default class ProductBaseElement extends Component {
constructor(props, context) {
super(props, context);
}
static propsType = {
title: PropTypes.string,
content: PropTypes.string,
remove: PropTypes.func
};
render() {
return (
<Input.Group>
<Col span="6">
<Input placeholder="标题" defaultValue={this.props.title}/>
</Col>
<Col span="10">
<Input type="textarea" style={{height:28}} placeholder="内容" defaultValue={this.props.content}/>
</Col>
<Col span="4">
<Icon type="cross" onClick={this.props.remove}/>
</Col>
</Input.Group>
);
}
}
import React, {Component, PropTypes} from 'react';
import {
Row,
Col,
Form,
Input,
Button,
Checkbox,
Select,
message,
Tabs,
Cascader,
Radio,
Upload,
Icon,
Modal,
DatePicker,
Table
} from 'antd';
import {PRODUCT_STATUS, arrayRemoveIndex, UUID} from '../../utils';
const ProductStatus = Object.keys(PRODUCT_STATUS);
@Form.create()
export default class ProductBaseInfo extends Component {
static propsType = {
cates: PropTypes.array,
product: PropTypes.object,
user: PropTypes.object,
dispatch: PropTypes.func
};
constructor(props, context) {
super(props, context);
this.state = {
priviewVisible: false,
priviewImage: '',
fileList: []
};
const {itemPic} = props;
if (itemPic) {
this.state.fileList.push({
uid: UUID(),
status: 'done',
url: itemPic,
thumbUrl: itemPic
});
}
}
handleCancel() {
this.setState({
priviewVisible: false,
});
};
onChange(value) {
console.log(value);
};
handleSubmit(e) {
e.preventDefault();
const data = this.props.form.getFieldsValue();
if(Array.isArray(data.categoryL1) && data.categoryL1.length===2){
data.categoryL2 = data.categoryL1[1];
data.categoryL1 = data.categoryL1[0];
}else{
delete data.categoryL1;
}
if(this.state.fileList && this.state.fileList[0] && this.state.fileList[0].url){
data['item-pic'] = this.state.fileList[0].url;
}
data.id = this.props.product.id;
console.log('收到表单值:', data);
this.props.dispatch({
type:'UPDATE_PRODUCT_ITEM',
item: data
});
};
normFile(e) {
if (Array.isArray(e)) {
return e;
}
return e && e.fileList;
};
handleUpload(info) {
let fileList = info.fileList;
// 3. 按照服务器返回信息筛选成功上传的文件
fileList = fileList.filter((file) => {
if (file.response) {
return file.response.status === 1;
}
return true;
});
// 1. 上传列表数量的限制
// 只显示最近上传的一个,旧的会被新的顶掉
fileList = fileList.slice(-2);
// 2. 读取远程路径并显示链接
fileList = fileList.map((file) => {
if (file.response) {
// 组件会将 file.url 作为链接进行展示
//file.url = file.response.url;
const {result, status, message} = file.response;
if (status === 1 && result && result.length >= 1 && result[0].url) {
file.url = result[0].url;
file.thumbUrl = result[0].url + '!t';
}
}
return file;
});
this.setState({fileList});
};
render() {
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
const {user, cates, product, form:{getFieldProps}} = this.props;
let productCate = [];
if (product && product.categoryId && product.categoryParentId) {
productCate = [product.categoryParentId, product.categoryId];
}
const styles = require('./ProductBaseInfo.less');
return (
<Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Form.Item label="商品类目" {...formItemLayout} wrapperCol={{span: 6}}>
<Cascader
options={cates}
defaultValue={productCate}
{...getFieldProps('categoryL1', {initialValue: productCate})}
placeholder="请选产品类目"/>
</Form.Item>
{
product &&
<Form.Item label="商品状态" {...formItemLayout}>
<Radio.Group {...getFieldProps('status', {initialValue: product.status + ''})}>
{
ProductStatus.map((status, index)=>
<Radio.Button key={status} data-value={status}
value={status}>{PRODUCT_STATUS[status]}</Radio.Button>
)
}
</Radio.Group>
</Form.Item>
}
<Form.Item label="商品标题" {...formItemLayout}>
<Input placeholder="商品标题" {...getFieldProps('itemTitle', {initialValue: product.itemTitle})} />
</Form.Item>
<Form.Item label="商品短标题" {...formItemLayout} wrapperCol={{span: 6}}>
<Input placeholder="商品短标题"
{...getFieldProps('itemShortTitle', {initialValue: product.itemShortTitle})} />
</Form.Item>
<Form.Item label="商品主图" {...formItemLayout}>
<Upload action="/api/fileUpload/upload" listType="picture-card"
multiple={true}
headers={{
authorization: user && user.token,
}}
onChange={this.handleUpload.bind(this)}
onPreview={(file) => {
this.setState({
priviewImage: file.url,
priviewVisible: true,
});
}}
fileList={this.state.fileList}>
<Icon type="upload"/>
<div className="ant-upload-text">上传照片</div>
</Upload>
<Modal visible={this.state.priviewVisible} footer={null}
width="100vw"
className={styles.imgPriviewDialog}
style={{height:'100vh', background:'transparent'}}
onCancel={this.handleCancel.bind(this)}>
<img src={this.state.priviewImage} style={{maxWidth:'100%'}}/>
</Modal>
</Form.Item>
<Form.Item label="商品简介" {...formItemLayout}>
<Input type="textarea" rows={5}
placeholder="商品简介"
{...getFieldProps('summary', {initialValue: product.summary})} />
</Form.Item>
<Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button>
</Form.Item>
</Form>
);
}
}
.imgPriviewDialog{
:global(.ant-modal-content){
background-color: transparent;
}
}
import React, {Component, PropTypes} from 'react';
import {
Row,
Col,
Form,
Input,
Button,
Checkbox,
Select,
message,
Tabs,
Cascader,
Radio,
Upload,
Icon,
Modal,
DatePicker,
Table
} from 'antd';
import YongjingSuanFaItem, {
YongjingTransform,
CreateYongjing
} from '../YongjingSuanFaItem/YongjingSuanFaItem';
import {arrayRemoveIndex} from '../../utils';
@Form.create()
export default class ShouyiYongjingForm extends Component {
static propsType = {
product: PropTypes.object,
user: PropTypes.object,
dispatch: PropTypes.func
};
constructor(props, context) {
super(props, context);
this.state = {
yongjing: YongjingTransform(props.yongjing)
}
}
/**
* 添加佣金算法
* @param e
*/
handleAddYongjing(e) {
e.preventDefault();
let yongjing = [].concat(this.state.yongjing);
yongjing.push(CreateYongjing());
this.setState({yongjing: yongjing});
}
/**
* 删除佣金算法
* @param index
* @param e
*/
handleRemoveYongjin(index, e) {
e.preventDefault();
const yongjing = arrayRemoveIndex(this.state.yongjing, index);
console.log(yongjing);
this.setState({yongjing: yongjing});
}
render() {
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
const {form:{getFieldProps}} = this.props;
return (
<Form horizontal>
<Form.Item label="产品的预期收益" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="产品的预期收益" {...getFieldProps('yqsy')} />
</Form.Item>
<Form.Item label="佣金算法" {...formItemLayout}>
<Input.Group>
<Col span="5" className="tac">最小投资额</Col>
<Col span="5" className="tac">最大投资额</Col>
<Col span="5" className="tac">收益</Col>
<Col span="5" className="tac">佣金</Col>
</Input.Group>
{
this.state.yongjing.map((item, index)=>
<YongjingSuanFaItem {...item}
remove={this.handleRemoveYongjin.bind(this, index)}/>
)
}
<Row style={{marginTop:15}}>
<Col span="20" className="tac">
<Button style={{marginRight:'.5em'}}
onClick={this.handleAddYongjing.bind(this)}><Icon
type="plus"/>添加</Button>
<Button type="ghost" style={{marginLeft:'.5em'}}><Icon type="code"/>高级</Button>
</Col>
</Row>
</Form.Item>
<Form.Item label="最高佣金" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="最高佣金" readOnly disabled defaultValue={'jsdcjkdsh'} />
</Form.Item>
</Form>
);
}
}
import React, {Component, PropTypes} from 'react';
import {
Row,
Col,
Form,
Input,
Button,
Checkbox,
Select,
message,
Tabs,
Cascader,
Radio,
Upload,
Icon,
Modal,
DatePicker,
Table
} from 'antd';
import {UUID} from '../../utils';
export function YongjingTransform(arr) {
return arr.map(item=>({
...item,
key: UUID()
}));
}
export function CreateYongjing() {
return {key: UUID(), result: {}};
};
export default class YongjingSuanFaItem extends Component {
constructor(props, context) {
super(props, context);
}
static propsType = {
min: PropTypes.string,
max: PropTypes.string,
result: PropTypes.any,
remove: PropTypes.func
}
render() {
const {min, max, result:{sy, yj}} = this.props;
return (
<Input.Group>
<Col span="5">
<Input defaultValue={min}/>
</Col>
<Col span="5">
<Input defaultValue={max}/>
</Col>
<Col span="5">
<Input defaultValue={sy}/>
</Col>
<Col span="5">
<Input defaultValue={yj}/>
</Col>
<Col span="4">
<Icon type="cross" onClick={this.props.remove}/>
</Col>
</Input.Group>
);
}
}
......@@ -31,11 +31,10 @@ export default class App extends Component {
<Collapse accordion>
<Panel header="产品管理">
<Link to="/products">产品列表</Link><br/>
<Link to="/products/add">增加产品</Link>
<Link to="/products/create">增加产品</Link>
</Panel>
<Panel header="订单管理">
<Link to="/trades">订单列表</Link><br/>
<Link to="/trade/add">增加订单</Link>
</Panel>
</Collapse>
</div>
......
......@@ -11,6 +11,7 @@
.login-bg {
width: 50%;
height:100vh;
overflow: hidden;
}
......
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {Form, Input, Button, Checkbox, message, Tabs} from 'antd';
import {
Row,
Col,
Form,
Input,
Button,
Checkbox,
Select,
message,
Tabs,
Cascader,
Radio,
Upload,
Icon,
Modal,
DatePicker,
Table
} from 'antd';
import YongjingSuanFaItem, {
YongjingTransform,
CreateYongjing
} from '../../components/YongjingSuanFaItem/YongjingSuanFaItem';
import ProductBaseElement, {
BaseElementTransform,
CreateBaseElement
} from '../../components/ProductBaseElement/ProductBaseElement';
import HuikuanInfoForm from '../../components/HuikuanInfoForm/HuikuanInfoForm';
import ProductBaseInfo from '../../components/ProductBaseInfo/ProductBaseInfo';
import ShouyiYongjingForm from '../../components/ShouyiYongjingForm/ShouyiYongjingForm';
@connect()
import {PRODUCT_STATUS, arrayRemoveIndex, UUID} from '../../utils';
const ProductStatus = Object.keys(PRODUCT_STATUS);
@connect(state=>({
cates: state.product.cates
}))
@Form.create()
export default class AddItem extends Component {
static propTypes = {
form: PropTypes.object,
dispatch: PropTypes.func
dispatch: PropTypes.func,
caste: PropTypes.array
};
constructor() {
super(...arguments);
this.state = {
priviewVisible: false,
priviewImage: '',
fileList: [{
uid: -1,
name: 'xxx.png',
status: 'done',
url: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
thumbUrl: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
}],
elements: BaseElementTransform({
"总规模": "2亿",
"投资亮点": "投资亮点内容",
"托管方": "托管方的姓名",
"结算方式": "半年付息",
"资金用途": "资金用途",
"融资方": "融资方信息",
"担保主体": "XX政府",
"风控措施": "防控从事",
"还款来源": "还款来源",
"发行方": "发行方",
"认购起点": "100万起",
"大小额配比": "两大一小"
}),
yongjing: YongjingTransform([{
"max": 300000000,
"min": 100000000,
"result": {
"sy": "9%",
"yj": "1.0%"
}
}, {
"min": 300000000,
"result": {
"sy": "9.2%",
"yj": "0.8%"
}
}])
};
}
componentWillMount() {
this.fetchCates();
};
handleSubmit(e){
fetchCates() {
this.props.dispatch({
type: 'FETCH_PRODUCT_CATES'
});
};
handleSubmit(e) {
};
handleCancel() {
this.setState({
priviewVisible: false,
});
}
onChange(value) {
console.log(value);
}
/**
* 删除基本要素
* @param index
* @param e
*/
handleRemoveElement(index, e) {
e.preventDefault();
const elements = arrayRemoveIndex(this.state.elements, index);
this.setState({elements: elements});
}
/**
* 添加基本要素
* @param e
*/
handleAddElement(e) {
e.preventDefault();
let elements = [].concat(this.state.elements);
elements.push(CreateBaseElement());
this.setState({elements: elements});
}
/**
* 添加佣金算法
* @param e
*/
handleAddYongjing(e) {
let yongjing = [].concat(this.state.yongjing);
yongjing.push(CreateYongjing());
this.setState({yongjing: yongjing});
}
/**
* 删除佣金算法
* @param index
* @param e
*/
handleRemoveYongjin(index, e) {
e.preventDefault();
const yongjing = arrayRemoveIndex(this.state.yongjing, index);
console.log(yongjing);
this.setState({yongjing: yongjing});
}
render = ()=> {
const {getFieldProps} = this.props.form;
const styles = require('./AddItem.less');
const {cates, form:{getFieldProps}} = this.props;
const props = {
action: '/upload.do',
listType: 'picture-card',
onChange: (info)=> {
let fileList = info.fileList;
// 1. 上传列表数量的限制
// 只显示最近上传的一个,旧的会被新的顶掉
fileList = fileList.slice(-2);
this.setState({fileList});
},
onPreview: (file) => {
this.setState({
priviewImage: file.url,
priviewVisible: true,
});
},
};
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
return (
<Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Tabs tabPosition="left">
<div className={styles.normal}>
<Tabs tabPosition="top">
<Tabs.TabPane tab="基本信息" key="tab-pane-1">
<Form.Item label="商品类目">
</Form.Item>
<Form.Item label="密码">
<Input type="password" placeholder="请输入密码" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="商品标题">
<Input placeholder="商品标题" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="商品短标题">
<Input placeholder="商品短标题" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="商品主图">
<Input placeholder="商品短标题" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="商品简介">
<Input placeholder="商品简介" {...getFieldProps('password')} />
</Form.Item>
<ProductBaseInfo cates={cates}/>
</Tabs.TabPane>
<Tabs.TabPane tab="基本信息2" key="tab-pane-2">
<Form.Item label="产品的预期收益">
<Input placeholder="产品的预期收益" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="佣金算法">
<Input placeholder="佣金算法" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="最高佣金">
<Input placeholder="最高佣金" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="募集目标/本期额度">
<Input placeholder="募集目标/本期额度" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="预约募集/已预约(实际)">
<Input placeholder="预约募集/已预约(实际)" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="预约募集/已预约(假的)">
<Input placeholder="预约募集/已预约(假的)" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
</Form.Item>
<Tabs.TabPane tab="收益与佣金" key="tab-pane-2">
<ShouyiYongjingForm yongjing={[{
"max": 300000000,
"min": 100000000,
"result": {
"sy": "9%",
"yj": "1.0%"
}
}, {
"min": 300000000,
"result": {
"sy": "9.2%",
"yj": "0.8%"
}
}]}/>
</Tabs.TabPane>
<Tabs.TabPane tab="基本信息3" key="tab-pane-3">
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Tabs.TabPane tab="汇款账号" key="tab-pane-4">
<HuikuanInfoForm />
</Tabs.TabPane>
<Tabs.TabPane tab="基本要素" key="tab-pane-5">
<Row style={{paddingBottom:20}}>
<Col span="20">
<h3>可以设置以下要素,或者自定义其他要素</h3>
<p>总规模、投资亮点、托管方、结算方式、资金用途、融资方、担保主体、风控措施、还款来源、发行方、认购起点、大小额配比</p>
</Col>
</Row>
<Form.Item >
{
this.state.elements.map((item, index)=>
<ProductBaseElement {...item}
remove={this.handleRemoveElement.bind(this, index)}/>
)
}
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Input.Group>
<Col span="4" offset="6">
<Button onClick={this.handleAddElement.bind(this)}><Icon type="plus"/>添加</Button>
</Col>
</Input.Group>
</Tabs.TabPane>
<Tabs.TabPane tab="时间起讫" key="tab-pane-6">
<Form.Item label="募集目标" help="本期额度, 可以输入100万, 2亿等" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('fundRaisedTarget')} />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Form.Item label="起投金额" help="最小购买份额" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('minimumAmount')} />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Form.Item label="已预约" help="此处的已预约只用于显示" {...formItemLayout} wrapperCol={{span:6}}>
<div style={{maxWidth:500}}>
<Input placeholder="" addonAfter={"实际:1000000"}
defaultValue="100" {...getFieldProps('fundReservationOverFake')} />
</div>
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Form.Item label="已募集" help="此处的已募集只用于显示" {...formItemLayout} wrapperCol={{span:6}}>
<div style={{maxWidth:500}}>
<Input placeholder="" addonAfter={"实际:1000"}
defaultValue="100" {...getFieldProps('fundRaisedOverFake')} />
</div>
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Form.Item label="产品期限" help="例如:半年期" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('duration')} />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Form.Item label="预约开始时间" {...formItemLayout}>
<DatePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('fundReservationStartTime')}
placeholder="请选择时间" />
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Form.Item label="募集开始与结束时间" {...formItemLayout}>
<DatePicker.RangePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('fundRaisedStartTime')}
placeholder="请选择时间"/>
</Form.Item>
<Form.Item label="实际募集/已募集(实际)">
<Input placeholder="实际募集/已募集(实际)" {...getFieldProps('password')} />
<Form.Item label="汇款结束时间" {...formItemLayout}>
<DatePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('remittanceEndTime')}
placeholder="请选择时间"/>
</Form.Item>
<Form.Item>
<Checkbox {...getFieldProps('agreement')}>记住我</Checkbox>
<Form.Item label="基金成立与到期时间" {...formItemLayout}>
<DatePicker.RangePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('fundEstablishedTime')}
placeholder="请选择时间"/>
</Form.Item>
</Tabs.TabPane>
<Tabs.TabPane tab="基本要素" key="tab-pane-4">
<Tabs.TabPane tab="相关附件" key="tab-pane-7">
<Upload {...props} fileList={this.state.fileList}>
<Icon type="plus"/>
<div className="ant-upload-text">上传照片</div>
</Upload>
<Modal visible={this.state.priviewVisible} footer={null}
onCancel={this.handleCancel.bind(this)}>
<img alt="example" src={this.state.priviewImage}/>
</Modal>
</Tabs.TabPane>
</Tabs>
<Button type="primary" htmlType="submit">登录</Button>
</Form>
</div>
);
}
}
......
.normal {
display: flex;
flex-direction: column;
height: 100%;
& > :global(.ant-tabs) {
flex: 1;
overflow: auto;
}
}
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {
Row,
Col,
Form,
Input,
Button,
Checkbox,
Select,
message,
Tabs,
Cascader,
Radio,
Upload,
Icon,
Modal,
DatePicker,
Table
} from 'antd';
import YongjingSuanFaItem, {
YongjingTransform,
CreateYongjing
} from '../../components/YongjingSuanFaItem/YongjingSuanFaItem';
import ProductBaseElement, {
BaseElementTransform,
CreateBaseElement
} from '../../components/ProductBaseElement/ProductBaseElement';
import HuikuanInfoForm from '../../components/HuikuanInfoForm/HuikuanInfoForm';
import ProductBaseInfo from '../../components/ProductBaseInfo/ProductBaseInfo';
import ShouyiYongjingForm from '../../components/ShouyiYongjingForm/ShouyiYongjingForm';
import {PRODUCT_STATUS, arrayRemoveIndex, UUID} from '../../utils';
const ProductStatus = Object.keys(PRODUCT_STATUS);
@connect(state=>({
cates: state.product.cates,
item: state.product.item,
loading: state.product.loading,
user: state.user,
}))
@Form.create()
export default class EditItem extends Component {
static propTypes = {
form: PropTypes.object,
dispatch: PropTypes.func,
caste: PropTypes.array
};
constructor() {
super(...arguments);
this.state = {
priviewVisible: false,
priviewImage: '',
fileList: [{
uid: -1,
name: 'xxx.png',
status: 'done',
url: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
thumbUrl: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
}],
elements: BaseElementTransform({
"总规模": "2亿",
"投资亮点": "投资亮点内容",
"托管方": "托管方的姓名",
"结算方式": "半年付息",
"资金用途": "资金用途",
"融资方": "融资方信息",
"担保主体": "XX政府",
"风控措施": "防控从事",
"还款来源": "还款来源",
"发行方": "发行方",
"认购起点": "100万起",
"大小额配比": "两大一小"
}),
yongjing: YongjingTransform([{
"max": 300000000,
"min": 100000000,
"result": {
"sy": "9%",
"yj": "1.0%"
}
}, {
"min": 300000000,
"result": {
"sy": "9.2%",
"yj": "0.8%"
}
}])
};
}
componentWillMount() {
if (!this.props.cates.length) {
this.fetchCates();
}
if (!(this.props.item && this.props.item.id)) {
this.fetchItem(this.props.params.id);
}
};
fetchCates() {
this.props.dispatch({
type: 'FETCH_PRODUCT_CATES'
});
};
fetchItem(id) {
this.props.dispatch({
type: 'FETCH_PRODUCT_ITEM',
id
});
};
handleSubmit(e) {
};
handleCancel() {
this.setState({
priviewVisible: false,
});
}
onChange(value) {
console.log(value);
}
/**
* 删除基本要素
* @param index
* @param e
*/
handleRemoveElement(index, e) {
e.preventDefault();
const elements = arrayRemoveIndex(this.state.elements, index);
this.setState({elements: elements});
}
/**
* 添加基本要素
* @param e
*/
handleAddElement(e) {
e.preventDefault();
let elements = [].concat(this.state.elements);
elements.push(CreateBaseElement());
this.setState({elements: elements});
}
/**
* 添加佣金算法
* @param e
*/
handleAddYongjing(e) {
let yongjing = [].concat(this.state.yongjing);
yongjing.push(CreateYongjing());
this.setState({yongjing: yongjing});
}
/**
* 删除佣金算法
* @param index
* @param e
*/
handleRemoveYongjin(index, e) {
e.preventDefault();
const yongjing = arrayRemoveIndex(this.state.yongjing, index);
console.log(yongjing);
this.setState({yongjing: yongjing});
}
render = ()=> {
const styles = require('./AddItem.less');
const {user, cates, item, form:{getFieldProps}} = this.props;
const props = {
action: '/upload.do',
listType: 'picture-card',
onChange: (info)=> {
let fileList = info.fileList;
// 1. 上传列表数量的限制
// 只显示最近上传的一个,旧的会被新的顶掉
fileList = fileList.slice(-2);
this.setState({fileList});
},
onPreview: (file) => {
this.setState({
priviewImage: file.url,
priviewVisible: true,
});
},
};
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
console.log('item=', item);
return (
<div className={styles.normal}>
<Tabs tabPosition="top">
<Tabs.TabPane tab="基本信息" key="tab-pane-1">
{
item &&
<ProductBaseInfo cates={cates} product={item} user={user} dispatch={this.props.dispatch}/>
}
</Tabs.TabPane>
<Tabs.TabPane tab="收益与佣金" key="tab-pane-2">
<ShouyiYongjingForm yongjing={[{
"max": 300000000,
"min": 100000000,
"result": {
"sy": "9%",
"yj": "1.0%"
}
}, {
"min": 300000000,
"result": {
"sy": "9.2%",
"yj": "0.8%"
}
}]}/>
</Tabs.TabPane>
<Tabs.TabPane tab="汇款账号" key="tab-pane-4">
<HuikuanInfoForm />
</Tabs.TabPane>
<Tabs.TabPane tab="基本要素" key="tab-pane-5">
<Row style={{paddingBottom:20}}>
<Col span="20">
<h3>可以设置以下要素,或者自定义其他要素</h3>
<p>总规模、投资亮点、托管方、结算方式、资金用途、融资方、担保主体、风控措施、还款来源、发行方、认购起点、大小额配比</p>
</Col>
</Row>
<Form.Item >
{
this.state.elements.map((item, index)=>
<ProductBaseElement {...item}
remove={this.handleRemoveElement.bind(this, index)}/>
)
}
</Form.Item>
<Input.Group>
<Col span="4" offset="6">
<Button onClick={this.handleAddElement.bind(this)}><Icon type="plus"/>添加</Button>
</Col>
</Input.Group>
</Tabs.TabPane>
<Tabs.TabPane tab="时间起讫" key="tab-pane-6">
<Form.Item label="募集目标" help="本期额度, 可以输入100万, 2亿等" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('fundRaisedTarget')} />
</Form.Item>
<Form.Item label="起投金额" help="最小购买份额" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('minimumAmount')} />
</Form.Item>
<Form.Item label="已预约" help="此处的已预约只用于显示" {...formItemLayout} wrapperCol={{span:6}}>
<div style={{maxWidth:500}}>
<Input placeholder="" addonAfter={"实际:1000000"}
defaultValue="100" {...getFieldProps('fundReservationOverFake')} />
</div>
</Form.Item>
<Form.Item label="已募集" help="此处的已募集只用于显示" {...formItemLayout} wrapperCol={{span:6}}>
<div style={{maxWidth:500}}>
<Input placeholder="" addonAfter={"实际:1000"}
defaultValue="100" {...getFieldProps('fundRaisedOverFake')} />
</div>
</Form.Item>
<Form.Item label="产品期限" help="例如:半年期" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('duration')} />
</Form.Item>
<Form.Item label="预约开始时间" {...formItemLayout}>
<DatePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('fundReservationStartTime')}
placeholder="请选择时间"/>
</Form.Item>
<Form.Item label="募集开始与结束时间" {...formItemLayout}>
<DatePicker.RangePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('fundRaisedStartTime')}
placeholder="请选择时间"/>
</Form.Item>
<Form.Item label="汇款结束时间" {...formItemLayout}>
<DatePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('remittanceEndTime')}
placeholder="请选择时间"/>
</Form.Item>
<Form.Item label="基金成立与到期时间" {...formItemLayout}>
<DatePicker.RangePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('fundEstablishedTime')}
placeholder="请选择时间"/>
</Form.Item>
</Tabs.TabPane>
<Tabs.TabPane tab="相关附件" key="tab-pane-7">
<Upload {...props} fileList={this.state.fileList}>
<Icon type="plus"/>
<div className="ant-upload-text">上传照片</div>
</Upload>
<Modal visible={this.state.priviewVisible} footer={null}
onCancel={this.handleCancel.bind(this)}>
<img alt="example" src={this.state.priviewImage}/>
</Modal>
</Tabs.TabPane>
</Tabs>
</div>
);
}
}
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {Link} from 'react-router';
import {
Row,
Col,
Form,
Input,
Button,
Checkbox,
Select,
message,
Tabs,
Cascader,
Radio,
Upload,
Icon,
Modal,
DatePicker,
Table,
Spin
} from 'antd';
@connect(state=>({
item: state.product.item,
loading: state.product.loading
}))
export default class Item extends Component {
componentWillMount() {
this.fetchItem(this.props.params.id);
};
fetchItem(id) {
this.props.dispatch({
type: 'FETCH_PRODUCT_ITEM',
id
});
};
handleGoBack(e) {
e.preventDefault();
this.props.history.goBack();
};
render() {
const tw = 6;
const vw = 18;
const styles = require('../Trade/Item.less');
const {item, loading} = this.props;
return (
<Spin spinning={loading}>
{
item &&
<div className={styles.trade}>
<div className={styles.tradeTable}>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>产品标题</Col>
<Col span={vw}>{item.itemTitle}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>产品短标题</Col>
<Col span={vw}>{item.itemShortTitle}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>产品标题</Col>
<Col span={vw}>{item.itemTitle}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>产品标题</Col>
<Col span={vw}>{item.itemTitle}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>产品标题</Col>
<Col span={vw}>{item.itemTitle}</Col>
</Row>
</div>
<p>
<Button onClick={this.handleGoBack.bind(this)}>返回</Button>
<Link to={'/products/'+ item.id+'/edit'}><Button>编辑</Button></Link>
<Link to={'/product/'+ item.id+'/edit'}><Button>公告</Button></Link>
<Link
to={'/trades/create/'+ item.id+'?title='+ item.itemShortTitle}><Button>报单</Button></Link>
</p>
</div>
}
</Spin>
);
}
}
......@@ -2,13 +2,21 @@ import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {Table, Icon} from 'antd';
import {params, formatDateTime, productStatusToString} from '../../utils';
import {Link} from 'react-router';
const columns = [
{
title: 'ID',
dataIndex: 'id',
key: 'id',
width: 60
}, {
title: '类目',
dataIndex: 'cateId',
key: 'cateId',
width: 80,
className:'tac',
render: (cateId, record)=>(<span data-cate-id={cateId}>{record.cateName}</span>)
}, {
title: '标题',
......@@ -18,16 +26,22 @@ const columns = [
}, {
title: '募集比率',
dataIndex: 'rate',
key: 'rate'
key: 'rate',
width:120,
className:'tac',
}, {
title: '状态',
dataIndex: 'status',
key: 'status',
width:120,
className:'tac',
render: (status, record)=>(<span data-status={status}>{productStatusToString(status)}</span>)
}, {
title: '创建时间',
dataIndex: 'dateCreated',
key: 'dateCreated',
width:150,
className:'tac',
render: (dateCreated, record)=>(
<span>
{dateCreated && formatDateTime(dateCreated)}
......@@ -36,11 +50,15 @@ const columns = [
}, {
title: '操作',
key: 'operation',
width:120,
className:'tac',
render: (text, record)=>(
<span>
<a href={'/product/item?id='+ record.id}>详情</a>
<span className="ant-divider"></span>
<a href="#">公告</a>
<span className="ant-divider"></span>
<Link to={'/trades/add/'+record.id+'?title='+record.shortTitle}>报单</Link>
</span>
)
}
......@@ -69,6 +87,10 @@ export default class List extends Component {
});
};
handleRowClick({id}){
this.props.history.push('/products/'+id);
}
render() {
......@@ -101,7 +123,8 @@ export default class List extends Component {
dataSource={Array.isArray(items)?items:[]}
loading={loading}
pagination={pagination}
scroll={{ y: window.innerHeight-280 }}
scroll={{ y: window.innerHeight-290 }}
onRowClick={this.handleRowClick.bind(this)}
/>
</div>;
}
......
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {Form, Input, Button, Checkbox, message, Tabs, DatePicker, Upload, Icon, Modal} from 'antd';
@Form.create()
export default class AddItem extends Component {
constructor() {
super(...arguments);
this.state = {
priviewVisible: false,
priviewImage: '',
};
}
handleCancel() {
this.setState({
priviewVisible: false,
});
}
render() {
const formItemLayout = {
labelCol: {span: 6},
wrapperCol: {span: 14},
};
const props = {
action: '/upload.do',
listType: 'picture-card',
defaultFileList: [{
uid: -1,
name: 'xxx.png',
status: 'done',
url: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
thumbUrl: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
}],
onPreview: (file) => {
this.setState({
priviewImage: file.url,
priviewVisible: true,
});
},
};
return (
<div>
<Form horizontal>
<Form.Item {...formItemLayout} label="产品">
<Input value={this.props.location.query.title} readOnly/>
<Input type="hidden"/>
</Form.Item>
<Form.Item {...formItemLayout} label="理财师手机号">
<Input />
</Form.Item>
<Form.Item {...formItemLayout} label="投资人姓名">
<Input />
</Form.Item>
<Form.Item {...formItemLayout} label="投资人身份证号码">
<Input />
</Form.Item>
<Form.Item {...formItemLayout} label="投资人身份证正反面照片">
<Upload {...props}>
<Icon type="plus"/>
<div className="ant-upload-text">上传照片</div>
</Upload>
<Modal visible={this.state.priviewVisible} footer={null}
onCancel={this.handleCancel.bind(this)}>
<img alt="example" src={this.state.priviewImage}/>
</Modal>
</Form.Item>
<Form.Item {...formItemLayout} label="投资人实际打款金额">
<Input />
</Form.Item>
<Form.Item {...formItemLayout} label="投资人实际打款时间">
<DatePicker showTime format="yyyy-MM-dd HH:mm:ss" placeholder="请选择时间"/>
</Form.Item>
<Form.Item {...formItemLayout} label="投资人银行卡开户行">
<Input />
</Form.Item>
<Form.Item {...formItemLayout} label="投资人银行卡照片">
<Upload {...props}>
<Icon type="plus"/>
<div className="ant-upload-text">上传照片</div>
</Upload>
<Modal visible={this.state.priviewVisible} footer={null}
onCancel={this.handleCancel.bind(this)}>
<img alt="example" src={this.state.priviewImage}/>
</Modal>
</Form.Item>
<Form.Item {...formItemLayout} label="投资人打款凭条照片">
<Upload {...props}>
<Icon type="plus"/>
<div className="ant-upload-text">上传照片</div>
</Upload>
<Modal visible={this.state.priviewVisible} footer={null}
onCancel={this.handleCancel.bind(this)}>
<img alt="example" src={this.state.priviewImage}/>
</Modal>
</Form.Item>
<Form.Item {...formItemLayout} className="clearfix" label="投资人合同签字页照片">
<Upload {...props}>
<Icon type="plus"/>
<div className="ant-upload-text">上传照片</div>
</Upload>
<Modal visible={this.state.priviewVisible} footer={null}
onCancel={this.handleCancel.bind(this)}>
<img alt="example" src={this.state.priviewImage}/>
</Modal>
</Form.Item>
<Form.Item wrapperCol={{ span: 14, offset: 6 }}>
<Button type="primary" style={{marginRight:'1em'}}>提交</Button>
<Button onClick={(e)=>{e.preventDefault(); this.props.history.goBack();}}>返回</Button>
</Form.Item>
</Form>
</div>
);
}
}
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {Form, Input, Button, Checkbox, message, Row, Col} from 'antd';
@connect(state=>({
item: state.trade.item
}))
export default class Commission extends Component {
componentWillMount() {
const {dispatch, params:{id}} = this.props;
dispatch({
type: 'FETCH_TRADE_ITEM',
id
});
};
handleGoBack(e) {
e.preventDefault();
this.props.history.goBack();
};
handleCommission(e){
e.preventDefault();
alert('二次确认后发放');
}
render() {
const {item} = this.props;
const styles = require('./Item.less');
const tw = 8;
const vw = 16;
return (
<div className={styles.trade}>
<h1 className="tac">佣金发放</h1>
<div className={styles.tradeTable}>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>产品</Col>
<Col span={vw}>{item.title}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>确认打款金额</Col>
<Col span={vw}>{item.remittanceAmount}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>实际佣金</Col>
<Col span={vw}>{item.realReturn && item.realReturn.yj}</Col>
</Row>
</div>
<p>
<Button onClick={this.handleGoBack.bind(this)}>返回</Button>
<Button onClick={this.handleCommission.bind(this)}>发放</Button>
</p>
</div>
);
}
}
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {Form, Input, Button, Checkbox, message, Row, Col} from 'antd';
@connect(state=>({
item: state.trade.item
}))
export default class Contract extends Component {
componentWillMount() {
const {dispatch, params:{id}} = this.props;
dispatch({
type: 'FETCH_TRADE_ITEM',
id
});
};
handleGoBack(e) {
e.preventDefault();
this.props.history.goBack();
};
handleSubmit(e){
e.preventDefault();
alert('实现保存物流订单号的流程');
}
render() {
const {item} = this.props;
const styles = require('./Item.less');
const tw = 8;
const vw = 16;
return (
<div className={styles.trade}>
<h1 className="tac">合同物流</h1>
<div className={styles.tradeTable}>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>产品</Col>
<Col span={vw}>{item.title}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>确认打款金额</Col>
<Col span={vw}>{item.remittanceAmount}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw}>实际佣金</Col>
<Col span={vw}>{item.realReturn && item.realReturn.yj}</Col>
</Row>
<Row type="flex" justify="space-around" align="middle">
<Col span={tw} className="isRequire">顺丰运单</Col>
<Col span={vw}><Input placeholder="请填写顺丰运单编号" /></Col>
</Row>
</div>
<p>
<Button onClick={this.handleGoBack.bind(this)}>返回</Button>
<Button onClick={this.handleSubmit.bind(this)}>保存</Button>
</p>
</div>
);
}
}
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {Link} from 'react-router';
import {Form, Input, Button, Checkbox, message, Row, Col} from 'antd';
import {
formatDateTime,
......@@ -19,10 +20,11 @@ export default class Item extends Component {
id
});
};
handleGoBack(e){
e.preventDefault();
this.props.history.goBack();
}
};
render() {
const {item} = this.props;
......@@ -115,6 +117,8 @@ export default class Item extends Component {
</div>
<p>
<Button onClick={this.handleGoBack.bind(this)}>返回</Button>
<Link to={'/trades/commission/'+ item.id}><Button>发放佣金</Button></Link>
<Link to={'/trades/contract/'+ item.id}><Button>邮寄合同</Button></Link>
</p>
</div>
);
......
......@@ -2,7 +2,10 @@
p {
text-align: center;
padding: 20px 0;
max-width: 800px;
//max-width: 800px;
button {
margin: auto 10px;
}
}
}
......@@ -10,7 +13,7 @@
.tradeTable {
border-top: 1px solid #e9e9e9;
border-bottom: 1px solid #e9e9e9;
max-width: 800px;
//max-width: 800px;
//margin: auto;
font-size: 14px;
:global(.ant-row),
......
......@@ -62,9 +62,9 @@ const columns = [
className:'tac',
render: (text, record)=>(
<span>
<Link to={'/trades/'+ record.id}>邮寄合同</Link>
<Link to={'/trades/contract/'+ record.id} onClick={e=>e.stopPropagation()}>合同</Link>
<span className="ant-divider"></span>
<Link to={'/trades/'+ record.id}>发放佣金</Link>
<Link to={'/trades/commission/'+ record.id} onClick={e=>e.stopPropagation()}>佣金</Link>
</span>
)
}
......
......@@ -2,5 +2,9 @@
:global {
html, body, #root {
height: 100%;
font-size: 14px;
}
.ant-table{
font-size: 14px !important;
}
}
import { handleActions } from 'redux-actions';
import { combineReducer } from 'redux';
import {handleActions} from 'redux-actions';
import {combineReducer} from 'redux';
const product = handleActions({
['FETCH_PRODUCT_LIST'](state) {
return { ...state, loading: true, };
return {...state, loading: true,};
},
['FETCH_PRODUCT_LIST_SUCCESS'](state, action) {
return { ...state, loading: false, items: action.items, total:action.total };
return {...state, loading: false, items: action.items, total: action.total};
},
['FETCH_PRODUCT_LIST_FAILED'](state, action) {
return { ...state, err: action.err, loading: false, };
return {...state, err: action.err, loading: false,};
},
['FETCH_PRODUCT_CATES'](state){
return {...state, loading: true};
},
['FETCH_PRODUCT_CATES_SUCCESS'](state, action){
return {...state, loading: false, cates: action.cates};
},
['FETCH_PRODUCT_CATES_FAILED'](state, action){
return {...state, err: action.err, loading: false};
},
['FETCH_PRODUCT_ITEM'](state){
return {...state, loading: true}
},
['FETCH_PRODUCT_ITEM_SUCCESS'](state, action){
return {...state, loading: false, item: action.item}
},
['FETCH_PRODUCT_ITEM_FAILED'](state, action){
return {...state, err: action.err, loading: false}
},
['UPDATE_PRODUCT_ITEM'](state){
return {...state, loading:true};
},
['UPDATE_PRODUCT_ITEM_SUCCESS'](state){
return {...state, loading:false};
},
['UPDATE_PRODUCT_ITEM_FAILED'](state, action){
return {...state, loading:false, err: action.err};
}
}, {
cates:[],
items: [],
loading: false,
});
......
......@@ -17,7 +17,7 @@ const trade = handleActions({
['FETCH_TRADE_ITEM_SUCCESS'](state, action){
return {...state, loading: false, item: action.item}
},
['FETCH_TRADE_ITEM_FAILED'](state){
['FETCH_TRADE_ITEM_FAILED'](state, action){
return {...state, err: action.err, loading: false}
}
}, {
......
......@@ -6,8 +6,13 @@ import Login from '../containers/Login/Login';
import App from '../containers/App/App';
import ProductList from '../containers/Product/List';
import ProductAddItem from '../containers/Product/AddItem';
import ProductEditItem from '../containers/Product/EditItem';
import ProductItem from '../containers/Product/Item';
import TradeList from '../containers/Trade/List';
import TradeItem from '../containers/Trade/Item';
import Commission from '../containers/Trade/Commission';
import Contract from '../containers/Trade/Contract';
import TradeAddItem from '../containers/Trade/AddItem';
export default (store)=> {
......@@ -24,11 +29,16 @@ export default (store)=> {
<IndexRoute component={Home}/>
<Route path="products" >
<IndexRoute component={ProductList} />
<Route path="add" component={ProductAddItem} />
<Route path=":id" component={ProductItem} />
<Route path="create" component={ProductAddItem} />
<Route path=":id/edit" component={ProductEditItem} />
</Route>
<Route path="trades" >
<IndexRoute component={TradeList} />
<Route path=":id" component={TradeItem} />
<Route path="commission/:id" component={Commission} />
<Route path="contract/:id" component={Contract} />
<Route path="create/:pid" component={TradeAddItem} />
</Route>
<Route path="/actived" component={Home}/>
<Route path="/completed" component={Home}/>
......
import {takeLatest} from 'redux-saga';
import {take, call, put, fork, cancel, select} from 'redux-saga/effects';
import {fetchList} from '../services/product';
import {fetchList, fetchCates, fetchItem, updateItem} from '../services/product';
import {message} from 'antd';
function* getList(query) {
......@@ -28,6 +28,79 @@ function* watchProductList() {
}
}
function* getCates() {
try {
const cates = yield call(fetchCates);
yield put({
type: 'FETCH_PRODUCT_CATES_SUCCESS',
cates
});
} catch (err) {
console.log(err);
message.error(err);
yield put({
type: 'FETCH_PRODUCT_CATES_FAILED',
err,
});
}
}
function* watchProductCates() {
yield takeLatest('FETCH_PRODUCT_CATES', getCates);
}
function* getItem(id) {
try {
const item = yield call(fetchItem, id);
yield put({
type: 'FETCH_PRODUCT_ITEM_SUCCESS',
item
});
} catch (err) {
console.log(err);
message.error(err);
yield put({
type: 'FETCH_PRODUCT_ITEM_FAILED',
err
});
}
}
function* watchProductItem() {
while (true) {
const {id} = yield take('FETCH_PRODUCT_ITEM');
yield fork(getItem, id);
}
}
function* editItem(item) {
try{
yield call(updateItem, item);
yield put({
type: 'UPDATE_PRODUCT_ITEM_SUCCESS',
});
}catch(err){
console.log(err);
message.error(err);
yield put({
type:'UPDATE_PRODUCT_ITEM_FAILED',
err
});
}
}
function* watchEditProductItem(){
while(true){
const {item} = yield take('UPDATE_PRODUCT_ITEM');
yield fork(editItem, item);
}
}
export default function*() {
yield fork(watchProductList);
yield fork(watchProductCates);
yield fork(watchProductItem);
yield fork(watchEditProductItem);
}
import xFetch from './xFetch';
import {params} from '../utils';
import {serialize} from '../utils';
export async function fetchList(query) {
return xFetch('/api/products' +'?' + params(query));
return xFetch('/api/products' + '?' + serialize(query));
}
export async function fetchCates() {
return xFetch('/api/cates');
}
export async function fetchItem(id) {
return xFetch('/api/products/' + id, {
method: 'GET'
});
}
export async function updateItem(item){
let form = new FormData();
Object.keys(item).map((key)=>{
form.append(key, item[key]);
});
//return xFetch('/api/products/create');
return xFetch('/api/products/'+ item.id, {
method:'PUT',
body: serialize(item)
});
}
......@@ -5,7 +5,7 @@ const errorMessages = (res) => `${res.status} ${res.statusText}`;
function check401(res) {
if (res.status === 401) {
//location.href = '/401';
location.href = '/login';
}
return res;
}
......@@ -33,7 +33,7 @@ function xFetch(url, options) {
const opts = {...options};
let user;
try{
user = JSON.parse(sessionStorage.getItem('user'));
user = JSON.parse(sessionStorage.getItem('user')) || {};
}catch(ex){
user = {};
}
......@@ -41,6 +41,11 @@ function xFetch(url, options) {
...opts.headers,
authorization: user.token || '',
};
if(opts.method!='GET'){
opts.headers['content-type'] = 'application/x-www-form-urlencoded';
}
return fetch(url, opts)
.then(check401)
......
export const params = query => Object.keys(query).map((key)=> {
return key + '=' + query[key];
}).join('&');
// export const params = query => Object.keys(query).map((key)=> {
// return key + '=' + query[key];
// }).join('&');
export function serialize(obj, prefix) {
var str = [];
for(var p in obj) {
if (obj.hasOwnProperty(p)) {
var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
str.push(typeof v == "object" ?
serialize(v, k) :
encodeURIComponent(k) + "=" + encodeURIComponent(v));
}
}
return str.join("&");
}
export const leftPad = num => {
return num >= 10 ? num : ('0' + num);
......@@ -21,28 +36,19 @@ export const formatDateTime = (time = 0, format = 'YYYY-MM-DD hh:mm:ss') => {
});
};
export const PRODUCT_STATUS = {
'-9':'草稿',
0:'已删除',
1:'未发布',
5:'预热中',
11:'募集中',
17:'已暂停',
21:'已封账',
31:'已成立',
}
export const productStatusToString = status => {
switch (status) {
case 0 :
return '无效, 已删除';
case 1 :
return '未发布';
case 5 :
return '预热中';
case 11:
return '募集中';
case 17:
return '暂停';
case 21:
return '已封账';
case 31:
return '产品成立';
case -9:
return '草稿';
default:
return '未定义';
}
return PRODUCT_STATUS[status] || '未定义';
};
......@@ -82,4 +88,15 @@ export const tradeCreateTypeToString = type => {
default:
return '未知创建者';
}
}
};
export const arrayRemoveIndex = (arr, index) => {
return arr.concat(arr.splice(index).splice(1));
};
export const UUID = (()=> {
let _UUID = 0;
return ()=> {
return _UUID++;
}
})();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment