Commit 55cc492a authored by superman's avatar superman

update

parent 9b2c994c
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="ec208c71-5ff8-4642-a786-fad4f24be9b8" name="Default" comment="" /> <list default="true" id="ec208c71-5ff8-4642-a786-fad4f24be9b8" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/components/NextPrve/NextPrve.jsx" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/components/ProductContactForm/ProductContactForm.jsx" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/components/ProductDateTimeForm/ProductDateTimeForm.jsx" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/components/ProductDocumentsForm/ProductDocumentsForm.jsx" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/components/ProductElementForm/ProductElementForm.jsx" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/containers/Announcement/AddItem.jsx" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/containers/Announcement/EditItem.jsx" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/containers/Announcement/List.jsx" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/containers/Product/Product.less" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/reducers/announcement.js" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/sagas/announcement.js" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/services/announcement.js" />
<change type="DELETED" beforePath="$PROJECT_DIR$/src/components/ProductBaseElement/ProductBaseElement.jsx" afterPath="" />
<change type="DELETED" beforePath="$PROJECT_DIR$/src/components/YongjingSuanFaItem/YongjingSuanFaItem.jsx" afterPath="" />
<change type="DELETED" beforePath="$PROJECT_DIR$/src/containers/Product/AddItem.less" afterPath="" />
<change type="MOVED" beforePath="$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.jsx" afterPath="$PROJECT_DIR$/src/components/ProductBaseInfoForm/ProductBaseInfoForm.jsx" />
<change type="MOVED" beforePath="$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.less" afterPath="$PROJECT_DIR$/src/components/ProductBaseInfoForm/ProductBaseInfoForm.less" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/proxy.config.js" afterPath="$PROJECT_DIR$/proxy.config.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/components/HuikuanInfoForm/HuikuanInfoForm.jsx" afterPath="$PROJECT_DIR$/src/components/HuikuanInfoForm/HuikuanInfoForm.jsx" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx" afterPath="$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/containers/App/App.less" afterPath="$PROJECT_DIR$/src/containers/App/App.less" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/containers/Product/AddItem.jsx" afterPath="$PROJECT_DIR$/src/containers/Product/AddItem.jsx" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/containers/Product/EditItem.jsx" afterPath="$PROJECT_DIR$/src/containers/Product/EditItem.jsx" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/containers/Product/Item.jsx" afterPath="$PROJECT_DIR$/src/containers/Product/Item.jsx" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/containers/Product/List.jsx" afterPath="$PROJECT_DIR$/src/containers/Product/List.jsx" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/containers/Trade/List.jsx" afterPath="$PROJECT_DIR$/src/containers/Trade/List.jsx" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/reducers/product.js" afterPath="$PROJECT_DIR$/src/reducers/product.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/index.js" afterPath="$PROJECT_DIR$/src/routes/index.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/sagas/product.js" afterPath="$PROJECT_DIR$/src/sagas/product.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/services/product.js" afterPath="$PROJECT_DIR$/src/services/product.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/services/user.js" afterPath="$PROJECT_DIR$/src/services/user.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/services/xFetch.js" afterPath="$PROJECT_DIR$/src/services/xFetch.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/utils.js" afterPath="$PROJECT_DIR$/src/utils.js" />
</list>
<ignored path="shuniu-admin.iws" /> <ignored path="shuniu-admin.iws" />
<ignored path=".idea/workspace.xml" /> <ignored path=".idea/workspace.xml" />
<ignored path="$PROJECT_DIR$/out/" /> <ignored path="$PROJECT_DIR$/out/" />
...@@ -26,8 +61,8 @@ ...@@ -26,8 +61,8 @@
<file leaf-file-name="product.js" pinned="false" current-in-tab="false"> <file leaf-file-name="product.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/services/product.js"> <entry file="file://$PROJECT_DIR$/src/services/product.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420"> <state relative-caret-position="255">
<caret line="28" column="7" selection-start-line="25" selection-start-column="4" selection-end-line="28" selection-end-column="7" /> <caret line="17" column="39" selection-start-line="17" selection-start-column="39" selection-end-line="17" selection-end-column="39" />
<folding> <folding>
<element signature="e#0#30#0" expanded="true" /> <element signature="e#0#30#0" expanded="true" />
</folding> </folding>
...@@ -35,11 +70,11 @@ ...@@ -35,11 +70,11 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="ShouyiYongjingForm.jsx" pinned="false" current-in-tab="true"> <file leaf-file-name="EditItem.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/Announcement/EditItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="447"> <state relative-caret-position="750">
<caret line="57" column="13" selection-start-line="57" selection-start-column="13" selection-end-line="57" selection-end-column="13" /> <caret line="64" column="93" selection-start-line="64" selection-start-column="93" selection-end-line="64" selection-end-column="93" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
...@@ -47,94 +82,95 @@ ...@@ -47,94 +82,95 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="utils.js" pinned="false" current-in-tab="false"> <file leaf-file-name="index.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/utils.js"> <entry file="file://$PROJECT_DIR$/src/routes/index.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75"> <state relative-caret-position="477">
<caret line="5" column="25" selection-start-line="5" selection-start-column="16" selection-end-line="5" selection-end-column="25" /> <caret line="48" column="75" selection-start-line="48" selection-start-column="75" selection-end-line="48" selection-end-column="75" />
<folding> <folding>
<element signature="n#!!doc" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="xFetch.js" pinned="false" current-in-tab="false"> <file leaf-file-name="xFetch.js" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/services/xFetch.js"> <entry file="file://$PROJECT_DIR$/src/services/xFetch.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="494"> <state relative-caret-position="225">
<caret line="44" column="75" selection-start-line="44" selection-start-column="75" selection-end-line="44" selection-end-column="75" /> <caret line="15" column="8" selection-start-line="15" selection-start-column="8" selection-end-line="15" selection-end-column="8" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="ProductBaseInfo.jsx" pinned="false" current-in-tab="false"> <file leaf-file-name="AddItem.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/Announcement/AddItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="177"> <state relative-caret-position="525">
<caret line="34" column="6" selection-start-line="29" selection-start-column="4" selection-end-line="34" selection-end-column="6" /> <caret line="53" column="93" selection-start-line="53" selection-start-column="93" selection-end-line="53" selection-end-column="93" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
<element signature="e#2068#2983#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Login.jsx" pinned="false" current-in-tab="false"> <file leaf-file-name="announcement.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Login/Login.jsx"> <entry file="file://$PROJECT_DIR$/src/services/announcement.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="282"> <state relative-caret-position="120">
<caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" /> <caret line="8" column="37" selection-start-line="8" selection-start-column="37" selection-end-line="8" selection-end-column="37" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#30#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="user.js" pinned="false" current-in-tab="false"> <file leaf-file-name="announcement.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/services/user.js"> <entry file="file://$PROJECT_DIR$/src/sagas/announcement.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75"> <state relative-caret-position="469">
<caret line="5" column="38" selection-start-line="3" selection-start-column="4" selection-end-line="5" selection-end-column="38" /> <caret line="74" column="59" selection-start-line="74" selection-start-column="35" selection-end-line="74" selection-end-column="59" />
<folding /> <folding>
<element signature="e#0#38#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="proxy.config.js" pinned="false" current-in-tab="false"> <file leaf-file-name="AddItem.jsx" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/proxy.config.js"> <entry file="file://$PROJECT_DIR$/src/containers/Product/AddItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582"> <state relative-caret-position="15">
<caret line="76" column="69" selection-start-line="76" selection-start-column="69" selection-end-line="76" selection-end-column="69" /> <caret line="105" column="19" selection-start-line="105" selection-start-column="4" selection-end-line="105" selection-end-column="19" />
<folding> <folding>
<element signature="n#!!doc" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Item.jsx" pinned="false" current-in-tab="false"> <file leaf-file-name="announcement.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.jsx"> <entry file="file://$PROJECT_DIR$/src/reducers/announcement.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582"> <state relative-caret-position="420">
<caret line="119" column="20" selection-start-line="119" selection-start-column="20" selection-end-line="119" selection-end-column="90" /> <caret line="28" column="13" selection-start-line="28" selection-start-column="13" selection-end-line="28" selection-end-column="13" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#44#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Item.jsx" pinned="false" current-in-tab="false"> <file leaf-file-name="product.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/containers/Product/Item.jsx"> <entry file="file://$PROJECT_DIR$/src/sagas/product.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582"> <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" /> <caret line="119" column="1" selection-start-line="100" selection-start-column="0" selection-end-line="119" selection-end-column="1" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#38#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
...@@ -142,6 +178,9 @@ ...@@ -142,6 +178,9 @@
</file> </file>
</leaf> </leaf>
</component> </component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="GradleLocalSettings"> <component name="GradleLocalSettings">
<option name="externalProjectsViewState"> <option name="externalProjectsViewState">
<projects_view /> <projects_view />
...@@ -150,57 +189,57 @@ ...@@ -150,57 +189,57 @@
<component name="IdeDocumentHistory"> <component name="IdeDocumentHistory">
<option name="CHANGED_PATHS"> <option name="CHANGED_PATHS">
<list> <list>
<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" />
<option value="$PROJECT_DIR$/src/reducers/authenticate.js" />
<option value="$PROJECT_DIR$/src/components/App/App.less" />
<option value="$PROJECT_DIR$/src/components/App.jsx" />
<option value="$PROJECT_DIR$/src/components/Login/Login.jsx" />
<option value="$PROJECT_DIR$/src/layouts/MainLayout/MainLayout.jsx" />
<option value="$PROJECT_DIR$/src/components/Home.jsx" />
<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/reducers/user.js" />
<option value="$PROJECT_DIR$/src/entries/index.js" />
<option value="$PROJECT_DIR$/src/entries/index.html" />
<option value="$PROJECT_DIR$/src/sagas/user.js" /> <option value="$PROJECT_DIR$/src/sagas/user.js" />
<option value="$PROJECT_DIR$/src/containers/Login/Login.jsx" /> <option value="$PROJECT_DIR$/src/containers/Login/Login.jsx" />
<option value="$PROJECT_DIR$/src/sagas/todos.js" /> <option value="$PROJECT_DIR$/src/sagas/todos.js" />
<option value="$PROJECT_DIR$/src/services/trade.js" /> <option value="$PROJECT_DIR$/src/services/trade.js" />
<option value="$PROJECT_DIR$/src/sagas/trade.js" /> <option value="$PROJECT_DIR$/src/sagas/trade.js" />
<option value="$PROJECT_DIR$/src/containers/App/App.less" />
<option value="$PROJECT_DIR$/.gitignore" /> <option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/src/containers/Trade/Commission.js" /> <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/Item.less" />
<option value="$PROJECT_DIR$/src/containers/Trade/Contract.jsx" /> <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/entries/index.less" />
<option value="$PROJECT_DIR$/src/containers/Login/Login.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/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.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/containers/Trade/Item.jsx" />
<option value="$PROJECT_DIR$/src/reducers/trade.js" /> <option value="$PROJECT_DIR$/src/reducers/trade.js" />
<option value="$PROJECT_DIR$/src/containers/App/App.jsx" /> <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/components/ProductBaseInfo/ProductBaseInfo.less" />
<option value="$PROJECT_DIR$/src/sagas/product.js" /> <option value="$PROJECT_DIR$/src/services/user.js" />
<option value="$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.jsx" />
<option value="$PROJECT_DIR$/src/components/ProductBaseInfoForm/ProductBaseInfo.jsx" />
<option value="$PROJECT_DIR$/src/components/ProductDateTimeFrom/ProductDateTimeFrom.jsx" />
<option value="$PROJECT_DIR$/src/containers/Trade/List.jsx" />
<option value="$PROJECT_DIR$/src/components/ProductDocumentsForm/ProductDocumentsForm.jsx" />
<option value="$PROJECT_DIR$/src/components/YongjingSuanFaItem/YongjingSuanFaItem.jsx" />
<option value="$PROJECT_DIR$/src/utils.js" />
<option value="$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx" />
<option value="$PROJECT_DIR$/src/containers/App/App.less" />
<option value="$PROJECT_DIR$/src/components/ProductContactForm/ProductContactForm.jsx" />
<option value="$PROJECT_DIR$/src/containers/Trade/AddItem.jsx" />
<option value="$PROJECT_DIR$/src/reducers/product.js" /> <option value="$PROJECT_DIR$/src/reducers/product.js" />
<option value="$PROJECT_DIR$/src/components/ProductDateTimeForm/ProductDateTimeForm.jsx" />
<option value="$PROJECT_DIR$/src/containers/Product/Product.less" />
<option value="$PROJECT_DIR$/src/components/HuikuanInfoForm/HuikuanInfoForm.jsx" />
<option value="$PROJECT_DIR$/src/sagas/product.js" />
<option value="$PROJECT_DIR$/src/components/ProductBaseInfoForm/ProductBaseInfoForm.jsx" />
<option value="$PROJECT_DIR$/src/components/NextPrve/NextPrve.jsx" />
<option value="$PROJECT_DIR$/src/components/ProductElementForm/ProductElementForm.jsx" />
<option value="$PROJECT_DIR$/src/containers/Product/AddItem.jsx" />
<option value="$PROJECT_DIR$/src/containers/Product/EditItem.jsx" /> <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$/proxy.config.js" />
<option value="$PROJECT_DIR$/src/containers/Product/List.jsx" />
<option value="$PROJECT_DIR$/src/containers/Product/Item.jsx" /> <option value="$PROJECT_DIR$/src/containers/Product/Item.jsx" />
<option value="$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.jsx" /> <option value="$PROJECT_DIR$/src/routes/index.js" />
<option value="$PROJECT_DIR$/src/containers/Announcement/List.jsx" />
<option value="$PROJECT_DIR$/src/services/product.js" /> <option value="$PROJECT_DIR$/src/services/product.js" />
<option value="$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx" /> <option value="$PROJECT_DIR$/src/sagas/announcement.js" />
<option value="$PROJECT_DIR$/src/reducers/announcement.js" />
<option value="$PROJECT_DIR$/src/containers/Announcement/AddItem.jsx" />
<option value="$PROJECT_DIR$/src/containers/Announcement/EditItem.jsx" />
<option value="$PROJECT_DIR$/src/services/announcement.js" />
<option value="$PROJECT_DIR$/src/services/xFetch.js" />
</list> </list>
</option> </option>
</component> </component>
...@@ -220,7 +259,7 @@ ...@@ -220,7 +259,7 @@
<OptionsSetting value="true" id="Update" /> <OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" /> <OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" /> <OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" /> <ConfirmationsSetting value="2" id="Add" />
<ConfirmationsSetting value="0" id="Remove" /> <ConfirmationsSetting value="0" id="Remove" />
</component> </component>
<component name="ProjectView"> <component name="ProjectView">
...@@ -361,6 +400,24 @@ ...@@ -361,6 +400,24 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </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>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="shuniu-admin" /> <option name="myItemId" value="shuniu-admin" />
...@@ -379,7 +436,7 @@ ...@@ -379,7 +436,7 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="Trade" /> <option name="myItemId" value="Announcement" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
...@@ -397,7 +454,11 @@ ...@@ -397,7 +454,11 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="containers" /> <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" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
...@@ -415,11 +476,11 @@ ...@@ -415,11 +476,11 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="containers" /> <option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="Product" /> <option name="myItemId" value="ProductElementForm" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
...@@ -437,11 +498,11 @@ ...@@ -437,11 +498,11 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="containers" /> <option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="Login" /> <option name="myItemId" value="ProductDocumentsForm" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
...@@ -459,11 +520,33 @@ ...@@ -459,11 +520,33 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="containers" /> <option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ProductDateTimeForm" />
<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" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="App" /> <option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ProductContactForm" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
...@@ -484,6 +567,10 @@ ...@@ -484,6 +567,10 @@
<option name="myItemId" value="components" /> <option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ProductBaseInfoForm" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH> </PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
...@@ -503,7 +590,7 @@ ...@@ -503,7 +590,7 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="ShouyiYongjingForm" /> <option name="myItemId" value="NextPrve" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
...@@ -525,14 +612,14 @@ ...@@ -525,14 +612,14 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="ProductBaseInfo" /> <option name="myItemId" value="HuikuanInfoForm" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
</subPane> </subPane>
</pane> </pane>
<pane id="Scope" />
<pane id="PackagesPane" /> <pane id="PackagesPane" />
<pane id="Scope" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
...@@ -568,6 +655,25 @@ ...@@ -568,6 +655,25 @@
<option name="PROGRAM_PARAMETERS" /> <option name="PROGRAM_PARAMETERS" />
<method /> <method />
</configuration> </configuration>
<configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application">
<module name="" />
<option name="DEPLOY" value="true" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="PREFERRED_AVD" value="" />
<option name="CLEAR_LOGCAT" value="false" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="USE_LAST_SELECTED_DEVICE" value="false" />
<option name="PREFERRED_AVD" value="" />
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<method />
</configuration>
<configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests"> <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests">
<module name="" /> <module name="" />
<option name="TESTING_TYPE" value="0" /> <option name="TESTING_TYPE" value="0" />
...@@ -609,6 +715,157 @@ ...@@ -609,6 +715,157 @@
<envs /> <envs />
<method /> <method />
</configuration> </configuration>
<configuration default="true" type="ArquillianJUnit" factoryName="">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" />
<option name="arquillianRunConfiguration">
<value>
<option name="containerStateName" value="" />
</value>
</option>
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="TEST_OBJECT" value="class" />
<option name="VM_PARAMETERS" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<envs />
<patterns />
<method />
</configuration>
<configuration default="true" type="ArquillianTestNG" factoryName="">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" />
<option name="arquillianRunConfiguration">
<value>
<option name="containerStateName" value="" />
</value>
</option>
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="SUITE_NAME" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="GROUP_NAME" />
<option name="TEST_OBJECT" value="CLASS" />
<option name="VM_PARAMETERS" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" />
<option name="OUTPUT_DIRECTORY" />
<option name="ANNOTATION_TYPE" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<option name="USE_DEFAULT_REPORTERS" value="false" />
<option name="PROPERTIES_FILE" />
<envs />
<properties />
<listeners />
<method />
</configuration>
<configuration default="true" type="CucumberJavaRunConfigurationType" factoryName="Cucumber java">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="myFilePath" />
<option name="GLUE" />
<option name="myNameFilter" />
<option name="myGeneratedName" />
<option name="MAIN_CLASS_NAME" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="ENABLE_SWING_INSPECTOR" value="false" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="" />
<envs />
<method />
</configuration>
<configuration default="true" type="FlashRunConfigurationType" factoryName="Flash App">
<option name="BCName" value="" />
<option name="IOSSimulatorSdkPath" value="" />
<option name="adlOptions" value="" />
<option name="airProgramParameters" value="" />
<option name="appDescriptorForEmulator" value="Android" />
<option name="debugTransport" value="USB" />
<option name="debuggerSdkRaw" value="BC SDK" />
<option name="emulator" value="NexusOne" />
<option name="emulatorAdlOptions" value="" />
<option name="fastPackaging" value="true" />
<option name="fullScreenHeight" value="0" />
<option name="fullScreenWidth" value="0" />
<option name="launchUrl" value="false" />
<option name="launcherParameters">
<LauncherParameters>
<option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" />
<option name="launcherType" value="OSDefault" />
<option name="newPlayerInstance" value="false" />
<option name="playerPath" value="/Applications/Flash Player Debugger.app" />
</LauncherParameters>
</option>
<option name="mobileRunTarget" value="Emulator" />
<option name="moduleName" value="" />
<option name="overriddenMainClass" value="" />
<option name="overriddenOutputFileName" value="" />
<option name="overrideMainClass" value="false" />
<option name="runTrusted" value="true" />
<option name="screenDpi" value="0" />
<option name="screenHeight" value="0" />
<option name="screenWidth" value="0" />
<option name="url" value="http://" />
<option name="usbDebugPort" value="7936" />
<method />
</configuration>
<configuration default="true" type="FlexUnitRunConfigurationType" factoryName="FlexUnit" appDescriptorForEmulator="Android" class_name="" emulatorAdlOptions="" method_name="" package_name="" scope="Class">
<option name="BCName" value="" />
<option name="launcherParameters">
<LauncherParameters>
<option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" />
<option name="launcherType" value="OSDefault" />
<option name="newPlayerInstance" value="false" />
<option name="playerPath" value="/Applications/Flash Player Debugger.app" />
</LauncherParameters>
</option>
<option name="moduleName" value="" />
<option name="trusted" value="true" />
<method />
</configuration>
<configuration default="true" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list />
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<method />
</configuration>
<configuration default="true" type="GrailsRunConfigurationType" factoryName="Grails">
<setting name="vmparams" value="" />
<setting name="cmdLine" value="run-app" />
<setting name="passParentEnv" value="true" />
<setting name="launchBrowser" value="true" />
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<method />
</configuration>
<configuration default="true" type="JUnit" factoryName="JUnit"> <configuration default="true" type="JUnit" factoryName="JUnit">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" /> <module name="" />
...@@ -672,6 +929,34 @@ ...@@ -672,6 +929,34 @@
<envs /> <envs />
<method /> <method />
</configuration> </configuration>
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
<method />
</configuration>
<configuration default="true" type="JetRunConfigurationType" factoryName="Kotlin">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="MAIN_CLASS_NAME" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="shuniu-admin" />
<envs />
<method />
</configuration>
<configuration default="true" type="KotlinStandaloneScriptRunConfigurationType" factoryName="Kotlin script">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="filePath" />
<option name="vmParameters" />
<option name="alternativeJrePath" />
<option name="programParameters" />
<option name="passParentEnvs" value="true" />
<option name="workingDirectory" />
<option name="isAlternativeJrePathEnabled" value="false" />
<envs />
<method />
</configuration>
<configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir=""> <configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="">
<method /> <method />
</configuration> </configuration>
...@@ -690,56 +975,142 @@ ...@@ -690,56 +975,142 @@
<envs /> <envs />
<method /> <method />
</configuration> </configuration>
</component> <configuration default="true" type="TestNG" factoryName="TestNG">
<component name="ShelveChangesManager" show_recycled="false"> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="remove_strategy" value="false" /> <module name="" />
</component> <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<component name="SvnConfiguration"> <option name="ALTERNATIVE_JRE_PATH" />
<configuration /> <option name="SUITE_NAME" />
</component> <option name="PACKAGE_NAME" />
<component name="TaskManager"> <option name="MAIN_CLASS_NAME" />
<task active="true" id="Default" summary="Default task"> <option name="METHOD_NAME" />
<changelist id="ec208c71-5ff8-4642-a786-fad4f24be9b8" name="Default" comment="" /> <option name="GROUP_NAME" />
<created>1468391520559</created> <option name="TEST_OBJECT" value="CLASS" />
<option name="number" value="Default" /> <option name="VM_PARAMETERS" />
<option name="presentableId" value="Default" /> <option name="PARAMETERS" />
<updated>1468391520559</updated> <option name="WORKING_DIRECTORY" />
<workItem from="1468394206076" duration="1879000" /> <option name="OUTPUT_DIRECTORY" />
<workItem from="1468396235889" duration="33823000" /> <option name="ANNOTATION_TYPE" />
<workItem from="1468540294765" duration="94258000" /> <option name="ENV_VARIABLES" />
</task> <option name="PASS_PARENT_ENVS" value="true" />
<servers /> <option name="TEST_SEARCH_SCOPE">
</component> <value defaultName="singleModule" />
<component name="TimeTrackingManager"> </option>
<option name="totallyTimeSpent" value="129960000" /> <option name="USE_DEFAULT_REPORTERS" value="false" />
</component> <option name="PROPERTIES_FILE" />
<component name="TodoView"> <envs />
<todo-panel id="selected-file"> <properties />
<is-autoscroll-to-source value="true" /> <listeners />
</todo-panel> <method />
<todo-panel id="all"> </configuration>
<are-packages-shown value="true" /> <configuration default="true" type="TestNGTestDiscovery" factoryName="TestNG Test Discovery" changeList="All">
<is-autoscroll-to-source value="true" /> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
</todo-panel> <module name="" />
</component> <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<component name="ToolWindowManager"> <option name="ALTERNATIVE_JRE_PATH" />
<frame x="0" y="0" width="1280" height="800" extended-state="0" /> <option name="SUITE_NAME" />
<editor active="true" /> <option name="PACKAGE_NAME" />
<layout> <option name="MAIN_CLASS_NAME" />
<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" /> <option name="METHOD_NAME" />
<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" /> <option name="GROUP_NAME" />
<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" /> <option name="TEST_OBJECT" value="CLASS" />
<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" /> <option name="VM_PARAMETERS" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" />
<option name="OUTPUT_DIRECTORY" />
<option name="ANNOTATION_TYPE" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<option name="USE_DEFAULT_REPORTERS" value="false" />
<option name="PROPERTIES_FILE" />
<envs />
<properties />
<listeners />
<method />
</configuration>
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
<method />
</configuration>
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
<command value="run-script" />
<scripts />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
<node-interpreter>project</node-interpreter>
<node-options />
<working-directory>$PROJECT_DIR$</working-directory>
<pass-parent-env>true</pass-parent-env>
<envs />
<ui>bdd</ui>
<extra-mocha-options />
<test-kind>DIRECTORY</test-kind>
<test-directory />
<recursive>false</recursive>
<method />
</configuration>
<configuration default="true" type="osgi.bnd.run" factoryName="Run Launcher">
<method />
</configuration>
<configuration default="true" type="osgi.bnd.run" factoryName="Test Launcher (JUnit)">
<method />
</configuration>
</component>
<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="" />
<created>1468391520559</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1468391520559</updated>
<workItem from="1468394206076" duration="1879000" />
<workItem from="1468396235889" duration="33823000" />
<workItem from="1468540294765" duration="94258000" />
<workItem from="1468995021353" duration="45019000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="174979000" />
</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="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="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="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="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="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32786885" 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="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="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="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="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="Find" 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="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="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="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="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" />
...@@ -770,474 +1141,468 @@ ...@@ -770,474 +1141,468 @@
<watches-manager /> <watches-manager />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/webpack.config.js"> <entry file="file://$PROJECT_DIR$/src/entries/index.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="492"> <state relative-caret-position="-361">
<caret line="38" column="0" selection-start-line="38" selection-start-column="0" selection-end-line="38" selection-end-column="0" /> <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#22#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Todos/Todo.jsx"> <entry file="file://$PROJECT_DIR$/src/entries/index.html">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240"> <state relative-caret-position="75">
<caret line="18" column="36" selection-start-line="18" selection-start-column="20" selection-end-line="18" selection-end-column="36" /> <caret line="5" column="32" selection-start-line="5" selection-start-column="32" selection-end-line="5" selection-end-column="32" />
</state>
</provider>
</entry>
<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="135">
<caret line="9" column="0" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
<folding> <folding>
<element signature="e#0#52#0" expanded="false" /> <element signature="e#0#30#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/sagas/index.js"> <entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225"> <state relative-caret-position="45">
<caret line="15" column="40" selection-start-line="15" selection-start-column="40" selection-end-line="15" selection-end-column="40" /> <caret line="3" column="0" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/package.json"> <entry file="file://$PROJECT_DIR$/src/entries/index.less">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="570"> <state relative-caret-position="105">
<caret line="38" column="21" selection-start-line="38" selection-start-column="21" selection-end-line="38" selection-end-column="21" /> <caret line="7" column="35" selection-start-line="7" selection-start-column="35" selection-end-line="7" selection-end-column="35" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/sagas/SagaManager.js"> <entry file="file://$PROJECT_DIR$/src/containers/Login/Login.less">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="375"> <state relative-caret-position="0">
<caret line="25" column="28" selection-start-line="25" selection-start-column="28" selection-end-line="25" selection-end-column="28" /> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="4" selection-end-column="1" />
<folding> <folding />
<element signature="e#0#31#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/services/todos.js"> <entry file="file://$PROJECT_DIR$/src/sagas/todos.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75"> <state relative-caret-position="405">
<caret line="5" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="5" selection-end-column="0" /> <caret line="30" column="2" selection-start-line="30" selection-start-column="5" selection-end-line="33" selection-end-column="8" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/reducers/index.js"> <entry file="file://$PROJECT_DIR$/src/sagas/trade.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="570">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="51" column="5" selection-start-line="48" selection-start-column="4" selection-end-line="51" selection-end-column="5" />
<folding> <folding>
<element signature="n#!!doc" expanded="false" /> <element signature="e#0#38#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/reducers/todos.js"> <entry file="file://$PROJECT_DIR$/src/reducers/trade.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="255"> <state relative-caret-position="285">
<caret line="17" column="6" selection-start-line="17" selection-start-column="6" selection-end-line="17" selection-end-column="6" /> <caret line="19" column="45" selection-start-line="19" selection-start-column="45" selection-end-line="19" selection-end-column="45" />
<folding> <folding>
<element signature="e#0#44#0" expanded="false" /> <element signature="e#0#44#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/App/App.less"> <entry file="file://$PROJECT_DIR$/src/containers/Trade/Commission.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="465"> <state relative-caret-position="27">
<caret line="31" column="17" selection-start-line="0" selection-start-column="0" selection-end-line="39" selection-end-column="0" /> <caret line="21" column="6" selection-start-line="0" selection-start-column="0" selection-end-line="60" selection-end-column="0" />
<folding /> <folding>
<element signature="e#0#50#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/App/App.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/Trade/Contract.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="702"> <state relative-caret-position="222">
<caret line="112" column="16" selection-start-line="112" selection-start-column="16" selection-end-line="112" selection-end-column="16" /> <caret line="21" column="6" selection-start-line="18" selection-start-column="4" selection-end-line="21" selection-end-column="6" />
<folding> <folding>
<element signature="e#0#52#0" expanded="true" /> <element signature="e#0#50#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Home/Home.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.less">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270"> <state relative-caret-position="-72">
<caret line="18" column="0" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" /> <caret line="16" column="19" selection-start-line="16" selection-start-column="19" selection-end-line="16" selection-end-column="19" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Todos/Todos.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/App/App.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="495"> <state relative-caret-position="240">
<caret line="37" column="2" selection-start-line="37" selection-start-column="2" selection-end-line="37" selection-end-column="2" /> <caret line="36" column="67" selection-start-line="36" selection-start-column="67" selection-end-line="36" selection-end-column="67" />
<folding> <folding>
<element signature="e#0#50#0" expanded="false" /> <element signature="e#0#52#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/entries/index.js"> <entry file="file://$PROJECT_DIR$/src/reducers/user.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-361"> <state relative-caret-position="165">
<caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" /> <caret line="12" column="33" selection-start-line="12" selection-start-column="26" selection-end-line="12" selection-end-column="33" />
<folding> <folding />
<element signature="e#0#22#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/entries/index.html"> <entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75"> <state relative-caret-position="1665">
<caret line="5" column="32" selection-start-line="5" selection-start-column="32" selection-end-line="5" selection-end-column="32" /> <caret line="119" column="20" selection-start-line="119" selection-start-column="20" selection-end-line="119" selection-end-column="90" />
<folding /> <folding>
<element signature="e#0#50#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/sagas/user.js"> <entry file="file://$PROJECT_DIR$/src/containers/Login/Login.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105"> <state relative-caret-position="282">
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" /> <caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
<folding /> <folding>
<element signature="e#0#50#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/services/trade.js"> <entry file="file://$PROJECT_DIR$/src/services/user.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135"> <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" /> <caret line="9" column="45" selection-start-line="9" selection-start-column="45" selection-end-line="9" selection-end-column="45" />
<folding> <folding>
<element signature="e#0#30#0" expanded="false" /> <element signature="e#0#30#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/App/App.less"> <entry file="file://$PROJECT_DIR$/src/components/ProductBaseElement/ProductBaseElement.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="620"> <state relative-caret-position="374">
<caret line="43" column="34" selection-start-line="43" selection-start-column="34" selection-end-line="43" selection-end-column="34" /> <caret line="42" column="32" selection-start-line="42" selection-start-column="32" selection-end-line="42" selection-end-column="32" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/.gitignore"> <entry file="file://$PROJECT_DIR$/src/containers/Trade/List.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45"> <state relative-caret-position="402">
<caret line="3" column="0" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" /> <caret line="119" column="38" selection-start-line="119" selection-start-column="38" selection-end-line="119" selection-end-column="38" />
<folding /> <folding>
<element signature="e#0#50#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/entries/index.less"> <entry file="file://$PROJECT_DIR$/src/components/YongjingSuanFaItem/YongjingSuanFaItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105"> <state relative-caret-position="554">
<caret line="7" column="35" selection-start-line="7" selection-start-column="35" selection-end-line="7" selection-end-column="35" /> <caret line="67" column="26" selection-start-line="51" selection-start-column="12" selection-end-line="67" selection-end-column="26" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Login/Login.less"> <entry file="file://$PROJECT_DIR$/src/components/ProductDocumentsForm/ProductDocumentsForm.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="420">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="4" selection-end-column="1" /> <caret line="28" column="45" selection-start-line="28" selection-start-column="36" selection-end-line="28" selection-end-column="45" />
<folding /> <folding>
<element signature="e#0#50#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/sagas/todos.js"> <entry file="file://$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="405"> <state relative-caret-position="540">
<caret line="30" column="2" selection-start-line="30" selection-start-column="5" selection-end-line="33" selection-end-column="8" /> <caret line="140" column="103" selection-start-line="140" selection-start-column="103" selection-end-line="140" selection-end-column="103" />
<folding> <folding>
<marker date="1468568582000" expanded="true" signature="624:690" placeholder="..." /> <element signature="e#0#50#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/components/YongjingSuanFaItem/YongjingSuanFaItem.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/Product/AddItem.less">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="480"> <state relative-caret-position="60">
<caret line="38" column="5" selection-start-line="38" selection-start-column="5" selection-end-line="38" selection-end-column="5" /> <caret line="4" column="7" selection-start-line="4" selection-start-column="7" selection-end-line="4" selection-end-column="7" />
<folding> <folding />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/AddItem.jsx"> <entry file="file://$PROJECT_DIR$/src/components/ProductContactForm/ProductContactForm.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240"> <state relative-caret-position="300">
<caret line="26" column="10" selection-start-line="23" selection-start-column="8" selection-end-line="26" selection-end-column="10" /> <caret line="106" column="72" selection-start-line="106" selection-start-column="48" selection-end-line="106" selection-end-column="72" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/components/ProductBaseElement/ProductBaseElement.jsx"> <entry file="file://$PROJECT_DIR$/src/utils.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162"> <state relative-caret-position="249">
<caret line="33" column="1" selection-start-line="33" selection-start-column="1" selection-end-line="33" selection-end-column="1" /> <caret line="25" column="72" selection-start-line="25" selection-start-column="72" selection-end-line="25" selection-end-column="72" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="n#!!doc" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/components/HuikuanInfoForm/HuikuanInfoForm.jsx"> <entry file="file://$PROJECT_DIR$/src/components/ProductDateTimeForm/ProductDateTimeForm.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="315"> <state relative-caret-position="255">
<caret line="21" column="0" selection-start-line="21" selection-start-column="0" selection-end-line="29" selection-end-column="14" /> <caret line="88" column="20" selection-start-line="88" selection-start-column="20" selection-end-line="88" selection-end-column="20" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/List.jsx"> <entry file="file://$PROJECT_DIR$/src/components/ProductBaseInfoForm/ProductBaseInfoForm.less">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210"> <state relative-caret-position="75">
<caret line="95" column="4" selection-start-line="95" selection-start-column="4" selection-end-line="97" selection-end-column="5" /> <caret line="5" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding> <folding />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Product/List.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/App/App.less">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162"> <state relative-caret-position="240">
<caret line="91" column="5" selection-start-line="91" selection-start-column="5" selection-end-line="91" selection-end-column="5" /> <caret line="16" column="12" selection-start-line="16" selection-start-column="4" selection-end-line="16" selection-end-column="12" />
<folding> <folding />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/sagas/trade.js"> <entry file="file://$PROJECT_DIR$/src/containers/Product/Product.less">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="570"> <state relative-caret-position="180">
<caret line="51" column="5" selection-start-line="48" selection-start-column="4" selection-end-line="51" selection-end-column="5" /> <caret line="12" column="24" selection-start-line="12" selection-start-column="24" selection-end-line="12" selection-end-column="24" />
<folding> <folding />
<element signature="e#0#38#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/reducers/trade.js"> <entry file="file://$PROJECT_DIR$/src/containers/Trade/AddItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285"> <state relative-caret-position="60">
<caret line="19" column="45" selection-start-line="19" selection-start-column="45" selection-end-line="19" selection-end-column="45" /> <caret line="4" column="0" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
<folding> <folding>
<element signature="e#0#44#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Commission.jsx"> <entry file="file://$PROJECT_DIR$/src/components/HuikuanInfoForm/HuikuanInfoForm.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="27"> <state relative-caret-position="330">
<caret line="21" column="6" selection-start-line="0" selection-start-column="0" selection-end-line="60" selection-end-column="0" /> <caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="25" selection-end-column="5" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Contract.jsx"> <entry file="file://$PROJECT_DIR$/src/components/NextPrve/NextPrve.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="222"> <state relative-caret-position="252">
<caret line="21" column="6" selection-start-line="18" selection-start-column="4" selection-end-line="21" selection-end-column="6" /> <caret line="25" column="0" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.less"> <entry file="file://$PROJECT_DIR$/proxy.config.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-72"> <state relative-caret-position="672">
<caret line="16" column="19" selection-start-line="16" selection-start-column="19" selection-end-line="16" selection-end-column="19" /> <caret line="78" column="2" selection-start-line="78" selection-start-column="2" selection-end-line="78" selection-end-column="2" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/App/App.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/Product/List.jsx">
<provider selected="true" editor-type-id="text-editor">
<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"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60"> <state relative-caret-position="477">
<caret line="4" column="7" selection-start-line="4" selection-start-column="7" selection-end-line="4" selection-end-column="7" /> <caret line="58" column="48" selection-start-line="58" selection-start-column="27" selection-end-line="58" selection-end-column="48" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/reducers/user.js"> <entry file="file://$PROJECT_DIR$/src/containers/Product/Item.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165"> <state relative-caret-position="327">
<caret line="12" column="33" selection-start-line="12" selection-start-column="26" selection-end-line="12" selection-end-column="33" /> <caret line="65" column="57" selection-start-line="65" selection-start-column="57" selection-end-line="65" selection-end-column="57" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/routes/index.js"> <entry file="file://$PROJECT_DIR$/src/components/ProductBaseInfoForm/ProductBaseInfoForm.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="447"> <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" /> <caret line="249" column="32" selection-start-line="247" selection-start-column="20" selection-end-line="249" selection-end-column="32" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Product/AddItem.jsx"> <entry file="file://$PROJECT_DIR$/src/reducers/product.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="405"> <state relative-caret-position="417">
<caret line="177" column="31" selection-start-line="0" selection-start-column="0" selection-end-line="302" selection-end-column="0" /> <caret line="30" column="6" selection-start-line="22" selection-start-column="4" selection-end-line="30" selection-end-column="6" />
<folding> <folding />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.less"> <entry file="file://$PROJECT_DIR$/src/components/ProductElementForm/ProductElementForm.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75"> <state relative-caret-position="-90">
<caret line="5" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="5" selection-end-column="0" /> <caret line="83" column="22" selection-start-line="83" selection-start-column="22" selection-end-line="83" selection-end-column="22" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/sagas/product.js"> <entry file="file://$PROJECT_DIR$/src/containers/Announcement/List.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="522"> <state relative-caret-position="75">
<caret line="94" column="54" selection-start-line="94" selection-start-column="35" selection-end-line="94" selection-end-column="54" /> <caret line="5" column="0" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding> <folding>
<element signature="e#0#38#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/reducers/product.js"> <entry file="file://$PROJECT_DIR$/src/containers/Product/EditItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="510"> <state relative-caret-position="-870">
<caret line="36" column="6" selection-start-line="36" selection-start-column="6" selection-end-line="36" selection-end-column="6" /> <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="36" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Product/EditItem.jsx"> <entry file="file://$PROJECT_DIR$/src/services/product.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1768"> <state relative-caret-position="255">
<caret line="219" column="94" selection-start-line="219" selection-start-column="86" selection-end-line="219" selection-end-column="94" /> <caret line="17" column="39" selection-start-line="17" selection-start-column="39" selection-end-line="17" selection-end-column="39" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#30#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Login/Login.jsx"> <entry file="file://$PROJECT_DIR$/src/sagas/product.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="282"> <state relative-caret-position="582">
<caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" /> <caret line="119" column="1" selection-start-line="100" selection-start-column="0" selection-end-line="119" selection-end-column="1" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#38#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/services/user.js"> <entry file="file://$PROJECT_DIR$/src/reducers/announcement.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75"> <state relative-caret-position="420">
<caret line="5" column="38" selection-start-line="3" selection-start-column="4" selection-end-line="5" selection-end-column="38" /> <caret line="28" column="13" selection-start-line="28" selection-start-column="13" selection-end-line="28" selection-end-column="13" />
<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> <folding>
<element signature="n#!!doc" expanded="true" /> <element signature="e#0#44#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/services/xFetch.js"> <entry file="file://$PROJECT_DIR$/src/sagas/announcement.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="494"> <state relative-caret-position="469">
<caret line="44" column="75" selection-start-line="44" selection-start-column="75" selection-end-line="44" selection-end-column="75" /> <caret line="74" column="59" selection-start-line="74" selection-start-column="35" selection-end-line="74" selection-end-column="59" />
<folding /> <folding>
<element signature="e#0#38#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/proxy.config.js"> <entry file="file://$PROJECT_DIR$/src/containers/Product/AddItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582"> <state relative-caret-position="15">
<caret line="76" column="69" selection-start-line="76" selection-start-column="69" selection-end-line="76" selection-end-column="69" /> <caret line="105" column="19" selection-start-line="105" selection-start-column="4" selection-end-line="105" selection-end-column="19" />
<folding> <folding>
<element signature="n#!!doc" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Trade/Item.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/Announcement/AddItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582"> <state relative-caret-position="525">
<caret line="119" column="20" selection-start-line="119" selection-start-column="20" selection-end-line="119" selection-end-column="90" /> <caret line="53" column="93" selection-start-line="53" selection-start-column="93" selection-end-line="53" selection-end-column="93" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/containers/Product/Item.jsx"> <entry file="file://$PROJECT_DIR$/src/containers/Announcement/EditItem.jsx">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582"> <state relative-caret-position="750">
<caret line="88" column="5" selection-start-line="88" selection-start-column="5" selection-end-line="88" selection-end-column="5" /> <caret line="64" column="93" selection-start-line="64" selection-start-column="93" selection-end-line="64" selection-end-column="93" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/services/product.js"> <entry file="file://$PROJECT_DIR$/src/routes/index.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420"> <state relative-caret-position="477">
<caret line="28" column="7" selection-start-line="25" selection-start-column="4" selection-end-line="28" selection-end-column="7" /> <caret line="48" column="75" selection-start-line="48" selection-start-column="75" selection-end-line="48" selection-end-column="75" />
<folding> <folding>
<element signature="e#0#30#0" expanded="true" /> <element signature="e#0#50#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/components/ProductBaseInfo/ProductBaseInfo.jsx"> <entry file="file://$PROJECT_DIR$/src/services/announcement.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="177"> <state relative-caret-position="120">
<caret line="34" column="6" selection-start-line="29" selection-start-column="4" selection-end-line="34" selection-end-column="6" /> <caret line="8" column="37" selection-start-line="8" selection-start-column="37" selection-end-line="8" selection-end-column="37" />
<folding> <folding>
<element signature="e#0#50#0" expanded="true" /> <element signature="e#0#30#0" expanded="true" />
<element signature="e#2068#2983#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/components/ShouyiYongjingForm/ShouyiYongjingForm.jsx"> <entry file="file://$PROJECT_DIR$/src/services/xFetch.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="447"> <state relative-caret-position="225">
<caret line="57" column="13" selection-start-line="57" selection-start-column="13" selection-end-line="57" selection-end-column="13" /> <caret line="15" column="8" selection-start-line="15" selection-start-column="8" selection-end-line="15" selection-end-column="8" />
<folding> <folding />
<element signature="e#0#50#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
......
...@@ -74,5 +74,6 @@ module.exports = { ...@@ -74,5 +74,6 @@ module.exports = {
}) })
},100); },100);
}, },
'/api/*':'http://react.yanky.cn/', //'http://192.168.1.126:8080/' // '/api/*': 'http://react.yanky.cn/',
'/api/*': 'http://192.168.1.126:8080/'
}; };
...@@ -25,27 +25,46 @@ export default class HuikuanInfoForm extends Component { ...@@ -25,27 +25,46 @@ export default class HuikuanInfoForm extends Component {
super(props, context); super(props, context);
} }
static propsType = {}; static propsType = {
product: PropTypes.object
};
handleSubmit(e){
e.preventDefault();
const data = this.props.form.getFieldsValue();
const {product} = this.props;
data.id = product.id;
console.log('收到表单值:', data);
this.props.dispatch({
type:'UPDATE_PRODUCT_ITEM',
item: data
});
}
render() { render() {
const formItemLayout = { const formItemLayout = {
labelCol: {span: 4}, labelCol: {span: 4},
wrapperCol: {span: 14}, wrapperCol: {span: 14},
}; };
const {form:{getFieldProps}} = this.props; const {form:{getFieldProps}, product:{fundRaisedAccount}} = this.props;
return ( return (
<Form horizontal> <Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Form.Item label="名称" {...formItemLayout} wrapperCol={{span:6}}> <Form.Item label="名称" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('hkzhnc')} /> <Input placeholder="" {...getFieldProps('fundRaisedAccount.name', {initialValue: fundRaisedAccount.name})} />
</Form.Item> </Form.Item>
<Form.Item label="银行帐号" {...formItemLayout} wrapperCol={{span:6}}> <Form.Item label="银行帐号" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('yhzh')} /> <Input placeholder="" {...getFieldProps('fundRaisedAccount.number',{initialValue:fundRaisedAccount.number})} />
</Form.Item> </Form.Item>
<Form.Item label="开户行" {...formItemLayout}> <Form.Item label="开户行" {...formItemLayout}>
<Input placeholder="" {...getFieldProps('khh')} /> <Input placeholder="" {...getFieldProps('fundRaisedAccount.bank',{initialValue:fundRaisedAccount.bank})} />
</Form.Item> </Form.Item>
<Form.Item label="打款须知" {...formItemLayout}> <Form.Item label="打款须知" {...formItemLayout}>
<Input type="textarea" rows={10} placeholder="" {...getFieldProps('dkxz')} /> <Input type="textarea" rows={10} placeholder="" {...getFieldProps('fundRaisedAccount.memo',{initialValue:fundRaisedAccount.memo})} />
</Form.Item>
<Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button>
</Form.Item> </Form.Item>
</Form> </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';
export default class NextPrve extends Component {
constructor(props, context) {
super(props, context);
}
render(){
function handleStep (s){
this.props.handleStep(s);
}
return (
<div style={{textAlign:'center', borderTop:'1px solid #eee', height:60, paddingTop:20 }}>
{
this.state.step > 1 &&
<Button loading={this.props.loading}
style={{margin:'0 1em'}}
onClick={handleStep.bind(this, -1)}><Icon type="save"/>上一步</Button>
}
{
this.state.step < tabs.length &&
<Button type="primary" loading={this.props.loading}
style={{margin:'0 1em'}}
onClick={handleStep.bind(this, 1)}><Icon type="save"/>下一步</Button>
}
{
this.state.step == tabs.length &&
<Button type="primary" loading={this.props.loading}
><Icon type="solution"/>发布</Button>
}
</div>
);
}
}
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>
);
}
}
...@@ -16,7 +16,7 @@ import { ...@@ -16,7 +16,7 @@ import {
Icon, Icon,
Modal, Modal,
DatePicker, DatePicker,
Table Table,
} from 'antd'; } from 'antd';
import {PRODUCT_STATUS, arrayRemoveIndex, UUID} from '../../utils'; import {PRODUCT_STATUS, arrayRemoveIndex, UUID} from '../../utils';
...@@ -25,7 +25,7 @@ const ProductStatus = Object.keys(PRODUCT_STATUS); ...@@ -25,7 +25,7 @@ const ProductStatus = Object.keys(PRODUCT_STATUS);
@Form.create() @Form.create()
export default class ProductBaseInfo extends Component { export default class ProductBaseInfoForm extends Component {
static propsType = { static propsType = {
cates: PropTypes.array, cates: PropTypes.array,
...@@ -43,21 +43,21 @@ export default class ProductBaseInfo extends Component { ...@@ -43,21 +43,21 @@ export default class ProductBaseInfo extends Component {
fileList: [] fileList: []
}; };
const {itemPic} = props; const {itemPic} = props.product;
if (itemPic) { if (itemPic) {
this.state.fileList.push({ this.state.fileList.push({
uid: UUID(), uid: UUID(),
status: 'done', status: 'done',
url: itemPic, url: itemPic,
thumbUrl: itemPic thumbUrl: itemPic + '!t'
}); });
} else {
console.log('没有找到商品主图', props.product);
} }
} }
handleCancel() { handleCancel() {
this.setState({ this.setState({
priviewVisible: false, priviewVisible: false,
...@@ -72,15 +72,14 @@ export default class ProductBaseInfo extends Component { ...@@ -72,15 +72,14 @@ export default class ProductBaseInfo extends Component {
e.preventDefault(); e.preventDefault();
const data = this.props.form.getFieldsValue(); const data = this.props.form.getFieldsValue();
if(Array.isArray(data.categoryL1) && data.categoryL1.length===2){ if (Array.isArray(data.categoryId) && data.categoryId.length === 2) {
data.categoryL2 = data.categoryL1[1]; data.categoryId = data.categoryId[1];
data.categoryL1 = data.categoryL1[0]; } else {
}else{ delete data.categoryId;
delete data.categoryL1;
} }
if(this.state.fileList && this.state.fileList[0] && this.state.fileList[0].url){ if (this.state.fileList && this.state.fileList[0] && this.state.fileList[0].url) {
data['item-pic'] = this.state.fileList[0].url; data['itemPic'] = this.state.fileList[0].url;
} }
data.id = this.props.product.id; data.id = this.props.product.id;
...@@ -88,20 +87,12 @@ export default class ProductBaseInfo extends Component { ...@@ -88,20 +87,12 @@ export default class ProductBaseInfo extends Component {
console.log('收到表单值:', data); console.log('收到表单值:', data);
this.props.dispatch({ this.props.dispatch({
type:'UPDATE_PRODUCT_ITEM', type: 'UPDATE_PRODUCT_ITEM',
item: data item: data
}); });
}; };
normFile(e) {
if (Array.isArray(e)) {
return e;
}
return e && e.fileList;
};
handleUpload(info) { handleUpload(info) {
let fileList = info.fileList; let fileList = info.fileList;
...@@ -116,7 +107,7 @@ export default class ProductBaseInfo extends Component { ...@@ -116,7 +107,7 @@ export default class ProductBaseInfo extends Component {
// 1. 上传列表数量的限制 // 1. 上传列表数量的限制
// 只显示最近上传的一个,旧的会被新的顶掉 // 只显示最近上传的一个,旧的会被新的顶掉
fileList = fileList.slice(-2); fileList = fileList.slice(-1);
// 2. 读取远程路径并显示链接 // 2. 读取远程路径并显示链接
...@@ -133,7 +124,6 @@ export default class ProductBaseInfo extends Component { ...@@ -133,7 +124,6 @@ export default class ProductBaseInfo extends Component {
return file; return file;
}); });
this.setState({fileList}); this.setState({fileList});
}; };
...@@ -152,30 +142,18 @@ export default class ProductBaseInfo extends Component { ...@@ -152,30 +142,18 @@ export default class ProductBaseInfo extends Component {
productCate = [product.categoryParentId, product.categoryId]; productCate = [product.categoryParentId, product.categoryId];
} }
const styles = require('./ProductBaseInfo.less'); const styles = require('./ProductBaseInfoForm.less');
return ( return (
<div>
<Form horizontal onSubmit={this.handleSubmit.bind(this)}> <Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Form.Item label="商品类目" {...formItemLayout} wrapperCol={{span: 6}}> <Form.Item label="商品类目" {...formItemLayout} wrapperCol={{span: 6}}>
<Cascader <Cascader
options={cates} options={cates}
defaultValue={productCate} defaultValue={productCate}
{...getFieldProps('categoryL1', {initialValue: productCate})} {...getFieldProps('categoryId', {initialValue: productCate})}
placeholder="请选产品类目"/> placeholder="请选产品类目"/>
</Form.Item> </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}> <Form.Item label="商品标题" {...formItemLayout}>
<Input placeholder="商品标题" {...getFieldProps('itemTitle', {initialValue: product.itemTitle})} /> <Input placeholder="商品标题" {...getFieldProps('itemTitle', {initialValue: product.itemTitle})} />
</Form.Item> </Form.Item>
...@@ -213,11 +191,70 @@ export default class ProductBaseInfo extends Component { ...@@ -213,11 +191,70 @@ export default class ProductBaseInfo extends Component {
placeholder="商品简介" placeholder="商品简介"
{...getFieldProps('summary', {initialValue: product.summary})} /> {...getFieldProps('summary', {initialValue: product.summary})} />
</Form.Item> </Form.Item>
<Form.Item label="募集目标" help="本期额度, 可以输入100万, 2亿等" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('fundRaisedTarget', {
initialValue: product.fundRaisedTarget
})} />
</Form.Item>
<Form.Item label="产品期限" help="例如:半年期" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('duration', {
initialValue: product.duration
})} />
</Form.Item>
<Form.Item label="起投金额" help="最小购买份额" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="" {...getFieldProps('minimumAmount', {
initialValue: product.minimumAmount
})} />
</Form.Item>
<Form.Item label="已预约" help="此处的已预约只用于显示" {...formItemLayout} wrapperCol={{span:6}}>
{
((typeof product.fundReservationOver !== 'undefined') && ( product.fundReservationOver !== '')) ?
<div style={{maxWidth:500}}>
<Input addonAfter={"实际:"+ product.fundReservationOver}
{...getFieldProps('fundReservationOverFake', {
initialValue: product.fundReservationOverFake
})} />
</div>
:
<Input {...getFieldProps('fundReservationOverFake', {
initialValue: product.fundReservationOverFake
})} />
}
</Form.Item>
<Form.Item label="已募集" help="此处的已募集只用于显示" {...formItemLayout} wrapperCol={{span:6}}>
{
((typeof product.fundRaisedOver !== 'undefined') && (product.fundRaisedOver !== '')) ?
<div style={{maxWidth:500}}>
<Input addonAfter={"实际:"+ product.fundRaisedOver}
{...getFieldProps('fundRaisedOverFake', {
initialValue: product.fundRaisedOverFake
})} />
</div>
:
<Input {...getFieldProps('fundRaisedOverFake', {
initialValue: product.fundRaisedOverFake
})} />
}
</Form.Item>
<Form.Item label="产品所属公司" {...formItemLayout} wrapperCol={{span: 6}}>
<Input placeholder="产品所属公司"
{...getFieldProps('company', {initialValue: product.company})} />
</Form.Item>
<Form.Item label="所属公司网址" {...formItemLayout} wrapperCol={{span: 6}}>
<Input placeholder="所属公司网址"
{...getFieldProps('website', {initialValue: product.website})} />
</Form.Item>
<Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}> <Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button> <Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button>
</Form.Item> </Form.Item>
</Form> </Form>
</div>
); );
} }
} }
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 {arrayRemoveIndex, UUID} from '../../utils';
export function CreateBaseElement() {
return {key: UUID()};
}
export function BaseElementTransform(arr) {
return Object.keys(objs).map(key=>({
key: UUID(),
name: key,
mobile: objs[key]
}));
}
@Form.create()
export default class ProductContactForm extends Component {
constructor(props, context) {
super(props, context);
this.state = {
staffs: props.product.staffs.map(staffs=> {
staffs.key = UUID();
return staffs;
})
};
}
static propsType = {
product: PropTypes.object,
};
/**
* 删除基本要素
* @param index
* @param e
*/
handleRemove(index, e) {
e.preventDefault();
const staffs = arrayRemoveIndex(this.state.staffs, index);
this.setState({staffs: staffs});
}
/**
* 添加基本要素
* @param e
*/
handleAdd(e) {
e.preventDefault();
let staffs = [].concat(this.state.staffs);
staffs.push({key: UUID()});
this.setState({staffs});
}
handleSubmit(e) {
e.preventDefault();
const formData = this.props.form.getFieldsValue();
const tmp = Object.keys(formData).map(index=> {
return {
...formData[index]
}
}).filter(item=>item.name && item.mobile);
const data = {
id: this.props.product.id,
staffs: JSON.stringify(tmp)
}
console.log('收到表单值:', data);
this.props.dispatch({
type: 'UPDATE_PRODUCT_ITEM',
item: data
});
}
render() {
const {form:{getFieldProps}} = this.props;
return (
<Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Form.Item>
{
this.state.staffs.map((item, index)=>
<div key={item.key} style={{marginBottom:8}}>
<Input.Group>
<Col span="6">
<Input placeholder="姓名"
{...getFieldProps(index + '.name', {
initialValue: item.name
})} />
</Col>
<Col span="10">
<Input placeholder="电话"
{...getFieldProps(index + '.mobile', {
initialValue: item.mobile
})}/>
</Col>
<Col span="4">
<Icon type="cross" onClick={this.handleRemove.bind(this, index)}/>
</Col>
</Input.Group>
</div>
)
}
</Form.Item>
<Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Button onClick={this.handleAdd.bind(this)} style={{marginRight:'1em'}}><Icon
type="plus"/>添加</Button>
<Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button>
</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 {PRODUCT_STATUS, formatDateTime} from '../../utils';
const ProductStatus = Object.keys(PRODUCT_STATUS);
@Form.create()
export default class ProductDateTimeForm extends Component {
constructor(props, context) {
super(props, context);
}
handleSubmit(e) {
e.preventDefault();
const formData = this.props.form.getFieldsValue();
const data = {
id: this.props.product.id
};
if (formData.fundReservationStartTime) {
data.fundReservationStartTime = formatDateTime(formData.fundReservationStartTime);
}
if (formData.fundRaisedStartTime[0]) {
data.fundRaisedStartTime = formatDateTime(formData.fundRaisedStartTime[0]);
}
if (formData.fundRaisedStartTime[1]) {
data.fundRaisedEndTime = formatDateTime(formData.fundRaisedStartTime[0])
}
if (formData.remittanceEndTime) {
data.remittanceEndTime = formatDateTime(formData.remittanceEndTime);
}
if (formData.fundEstablishedTime[0]) {
data.fundEstablishedTime = formatDateTime(formData.fundEstablishedTime[0]);
}
if (formData.fundEstablishedTime[1]) {
data.fundExpireTime = formatDateTime(formData.fundEstablishedTime[1]);
}
data.status = formData.status;
console.log(data);
this.props.dispatch({
type: 'UPDATE_PRODUCT_ITEM',
item: data
});
}
render() {
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
const {cates, product, form:{getFieldProps}, isCreate} = this.props;
const {
fundReservationStartTime,
fundRaisedEndTime,
remittanceEndTime,
fundEstablishedTime,
fundExpireTime
} = product;
return (
<Form horizontal onSubmit={this.handleSubmit.bind(this)}>
{
!isCreate &&
<Form.Item label="商品状态" {...formItemLayout} wrapperCol={{span:20}}>
<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}>
<DatePicker showTime format="yyyy-MM-dd HH:mm:ss" placeholder="请选择预约开始时间"
{...getFieldProps('fundReservationStartTime', {
initialValue: fundReservationStartTime ? formatDateTime(fundReservationStartTime) : ''
})}
/>
</Form.Item>
<Form.Item label="募集开始与结束时间" {...formItemLayout}>
<DatePicker.RangePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('fundRaisedStartTime', {
initialValue: [
fundReservationStartTime ? formatDateTime(fundReservationStartTime) : '',
fundRaisedEndTime ? formatDateTime(fundRaisedEndTime) : ''
]
})}
/>
</Form.Item>
<Form.Item label="汇款结束时间" {...formItemLayout}>
<DatePicker showTime format="yyyy-MM-dd HH:mm:ss" placeholder="请选择汇款结束时间"
{...getFieldProps('remittanceEndTime', {
initialValue: remittanceEndTime ? formatDateTime(remittanceEndTime) : ''
})}
/>
</Form.Item>
<Form.Item label="基金成立与到期时间" {...formItemLayout}>
<DatePicker.RangePicker showTime format="yyyy-MM-dd HH:mm:ss"
{...getFieldProps('fundEstablishedTime', {
initialValue: [
fundEstablishedTime ? formatDateTime(fundEstablishedTime) : '',
fundExpireTime ? formatDateTime(fundExpireTime) : ''
]
})}
/>
</Form.Item>
<Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button>
</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';
@Form.create()
export default class ProductDocumentsForm extends Component {
constructor(props, context) {
super(props, context);
this.state = {
fileList: props.product.documents.map(file=> {
file.uid = UUID();
file.url = file.file;
file.status = 'done';
return file;
})
};
}
static propsType = {
product: PropTypes.object,
};
handleUpload(info) {
let fileList = info.fileList;
// 3. 按照服务器返回信息筛选成功上传的文件
fileList = fileList.filter((file) => {
if (file.response) {
return file.response.status === 1;
}
return true;
});
// 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;
}
}
return file;
});
this.setState({fileList});
}
handleSubmit(e){
e.preventDefault();
const files = [];
this.state.fileList.forEach(file=>{
files.push({
name: file.name,
file: file.url
});
});
const data = {
id: this.props.product.id,
documents: JSON.stringify(files)
};
console.log(data);
this.props.dispatch({
type: 'UPDATE_PRODUCT_ITEM',
item: data
});
}
render() {
const {user, product} = this.props;
return (
<Form horizontal onSubmit={this.handleSubmit.bind(this)} style={{maxWidth:'800px', margin:'auto'}}>
<Form.Item>
<Upload.Dragger action="/api/fileUpload/upload"
multiple={true}
headers={{
authorization: user && user.token,
}}
onChange={this.handleUpload.bind(this)}
fileList={this.state.fileList}>
<p className="ant-upload-drag-icon">
<Icon type="inbox"/>
</p>
<p className="ant-upload-text">点击或将文件拖拽到此区域上传</p>
<p className="ant-upload-hint">支持单个或批量上传,严禁上传公司内部资料及其他违禁文件</p>
</Upload.Dragger>
</Form.Item>
<Form.Item style={{marginTop:30, textAlign:'center'}}>
<Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button>
</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 {arrayRemoveIndex, UUID} from '../../utils';
export function CreateBaseElement() {
return {key: UUID()};
}
export function BaseElementTransform(objs) {
return Object.keys(objs).map(key=>({
key: UUID(),
title: key,
content: objs[key]
}));
}
@Form.create()
export default class HuikuanInfoForm extends Component {
constructor(props, context) {
super(props, context);
this.state = {
elements: BaseElementTransform(props.product.elements)
};
}
static propsType = {
product: PropTypes.object,
};
/**
* 删除基本要素
* @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});
}
handleSubmit(e) {
e.preventDefault();
const formData = this.props.form.getFieldsValue();
const tmp = {};
Object.keys(formData).map(index=> {
if (formData[index].title != 'undefined') {
tmp[formData[index].title] = formData[index].content;
}
});
const data = {
id: this.props.product.id,
elements: JSON.stringify(tmp)
}
console.log('收到表单值:', data);
this.props.dispatch({
type: 'UPDATE_PRODUCT_ITEM',
item: data
});
}
render() {
const {form:{getFieldProps}} = this.props;
return (
<Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Form.Item>
<h3>可以设置以下要素,或者自定义其他要素</h3>
<p>总规模、投资亮点、托管方、结算方式、资金用途、融资方、担保主体、风控措施、还款来源、发行方、认购起点、大小额配比</p>
</Form.Item>
<Form.Item>
{
this.state.elements.map((item, index)=>
<div key={item.key} style={{marginBottom:8}}>
<Input.Group>
<Col span="6">
<Input
placeholder="标题" {...getFieldProps(index + '.title', {initialValue: item.title})} />
</Col>
<Col span="10">
<Input type="textarea" placeholder="内容" autosize
{...getFieldProps(index + '.content', {initialValue: item.content})}/>
</Col>
<Col span="4">
<Icon type="cross" onClick={this.handleRemoveElement.bind(this, index)}/>
</Col>
</Input.Group>
</div>
)
}
</Form.Item>
<Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Button onClick={this.handleAddElement.bind(this)} style={{marginRight:'1em'}}><Icon
type="plus"/>添加</Button>
<Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button>
</Form.Item>
</Form>
);
}
}
...@@ -19,30 +19,40 @@ import { ...@@ -19,30 +19,40 @@ import {
Table Table
} from 'antd'; } from 'antd';
import YongjingSuanFaItem, {
YongjingTransform,
CreateYongjing
} from '../YongjingSuanFaItem/YongjingSuanFaItem';
import {arrayRemoveIndex} from '../../utils'; import {arrayRemoveIndex, formatMoney} from '../../utils';
import {UUID} from '../../utils';
export function YongjingTransform(arr) {
return arr.map(item=>({
...item,
key: UUID()
}));
}
export function CreateYongjing() {
return {key: UUID(), result: {}};
};
@Form.create() @Form.create()
export default class ShouyiYongjingForm extends Component { export default class ShouyiYongjingForm extends Component {
static propsType = {
product: PropTypes.object,
user: PropTypes.object,
dispatch: PropTypes.func
};
constructor(props, context) { constructor(props, context) {
super(props, context); super(props, context);
this.state = { this.state = {
yongjing: YongjingTransform(props.yongjing) yongjing: YongjingTransform(props.product.commissionAlg)
} };
} }
static propsType = {
product: PropTypes.object,
user: PropTypes.object,
dispatch: PropTypes.func
};
/** /**
* 添加佣金算法 * 添加佣金算法
* @param e * @param e
...@@ -66,6 +76,32 @@ export default class ShouyiYongjingForm extends Component { ...@@ -66,6 +76,32 @@ export default class ShouyiYongjingForm extends Component {
this.setState({yongjing: yongjing}); this.setState({yongjing: yongjing});
} }
handleSubmit(e){
e.preventDefault();
const formData = this.props.form.getFieldsValue();
const commissionAlg = [];
const data = {
id: this.props.product.id
};
Object.keys(formData).forEach(key=>{
if(/^[\d]+$/g.test(key)){
commissionAlg.push(formData[key]);
}else{
data[key] = formData[key];
}
});
data.commissionAlg = JSON.stringify(commissionAlg);
console.log(data);
this.props.dispatch({
type:'UPDATE_PRODUCT_ITEM',
item: data
});
}
render() { render() {
const formItemLayout = { const formItemLayout = {
labelCol: {span: 4}, labelCol: {span: 4},
...@@ -73,12 +109,19 @@ export default class ShouyiYongjingForm extends Component { ...@@ -73,12 +109,19 @@ export default class ShouyiYongjingForm extends Component {
}; };
const {form:{getFieldProps}} = this.props; const {form:{getFieldProps}, product} = this.props;
return ( return (
<Form horizontal> <Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Form.Item label="佣金结算方式" help="例如: 打款结佣、成立结佣" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="佣金结算方式" {...getFieldProps('settlement', {
initialValue:product.settlement
})} />
</Form.Item>
<Form.Item label="产品的预期收益" {...formItemLayout} wrapperCol={{span:6}}> <Form.Item label="产品的预期收益" {...formItemLayout} wrapperCol={{span:6}}>
<Input placeholder="产品的预期收益" {...getFieldProps('yqsy')} /> <Input placeholder="产品的预期收益" {...getFieldProps('productProspectiveReturn', {
initialValue:product.productProspectiveReturn
})} />
</Form.Item> </Form.Item>
<Form.Item label="佣金算法" {...formItemLayout}> <Form.Item label="佣金算法" {...formItemLayout}>
<Input.Group> <Input.Group>
...@@ -89,8 +132,25 @@ export default class ShouyiYongjingForm extends Component { ...@@ -89,8 +132,25 @@ export default class ShouyiYongjingForm extends Component {
</Input.Group> </Input.Group>
{ {
this.state.yongjing.map((item, index)=> this.state.yongjing.map((item, index)=>
<YongjingSuanFaItem {...item} <div key={item.key}>
remove={this.handleRemoveYongjin.bind(this, index)}/> <Input.Group>
<Col span="5">
<Input {...getFieldProps(index + '.min', {initialValue: item.min})} />
</Col>
<Col span="5">
<Input {...getFieldProps(index+ '.max', {initialValue: item.max})}/>
</Col>
<Col span="5">
<Input {...getFieldProps(index+'.sy', {initialValue: item.sy})}/>
</Col>
<Col span="5">
<Input {...getFieldProps(index+'.yj', {initialValue: item.yj})}/>
</Col>
<Col span="4">
<Icon type="cross" onClick={this.handleRemoveYongjin.bind(this, index)}/>
</Col>
</Input.Group>
</div>
) )
} }
<Row style={{marginTop:15}}> <Row style={{marginTop:15}}>
...@@ -98,14 +158,16 @@ export default class ShouyiYongjingForm extends Component { ...@@ -98,14 +158,16 @@ export default class ShouyiYongjingForm extends Component {
<Button style={{marginRight:'.5em'}} <Button style={{marginRight:'.5em'}}
onClick={this.handleAddYongjing.bind(this)}><Icon onClick={this.handleAddYongjing.bind(this)}><Icon
type="plus"/>添加</Button> type="plus"/>添加</Button>
<Button type="ghost" style={{marginLeft:'.5em'}}><Icon type="code"/>高级</Button>
</Col> </Col>
</Row> </Row>
</Form.Item> </Form.Item>
<Form.Item label="最高佣金" {...formItemLayout} wrapperCol={{span:6}}> <Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Input placeholder="最高佣金" readOnly disabled defaultValue={'jsdcjkdsh'} /> <Button type="primary" htmlType="submit"><Icon type="save"/>保存</Button>
</Form.Item> </Form.Item>
</Form> </Form>
); );
} }
} }
//<Button type="ghost" style={{marginLeft:'.5em'}}><Icon type="code"/>高级</Button>
//<YongjingSuanFaItem {...item} remove={this.handleRemoveYongjin.bind(this, index)}/>
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>
);
}
}
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';
@connect(state=>({
loading: state.announcement.loading,
}))
@Form.create()
export default class AddItem extends Component{
constructor(props, content) {
super(props, content);
}
handleSubmit(e){
e.preventDefault();
const data = this.props.form.getFieldsValue();
data.itemId = this.props.location.query.itemId;
console.log(data);
this.props.dispatch({
type:'CREATE_ANNOUNCEMENT_ITEM',
data
});
}
render = ()=> {
const {loading, form:{getFieldProps}} = this.props;
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
return(
<Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Form.Item label="标题" {...formItemLayout}>
<Input placeholder="公告标题" {...getFieldProps('title')} />
</Form.Item>
<Form.Item label="内容" {...formItemLayout}>
<Input placeholder="公告内容" type="textarea" {...getFieldProps('announcement')} />
</Form.Item>
<Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Button type="primary" htmlType="submit" loading={loading}><Icon type="save"/>创建</Button>
</Form.Item>
</Form>
);
}
}
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';
@connect(state=>({
loading: state.announcement.loading,
announcement: state.announcement.item,
}))
@Form.create()
export default class EditItem extends Component {
constructor() {
super(...arguments);
}
componentWillMount() {
if (!(this.props.announcement && this.props.announcement.id)) {
this.fetchItem(this.props.params.id);
}
};
fetchItem(id) {
this.props.dispatch({
type: 'FETCH_ANNOUNCEMENT_ITEM',
id
});
};
handleSubmit(e) {
e.preventDefault();
const data = this.props.form.getFieldsValue();
console.log(data);
}
render() {
const {announcement, loading, form:{getFieldProps}} = this.props;
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
return (
<Form horizontal onSubmit={this.handleSubmit.bind(this)}>
<Form.Item label="标题" {...formItemLayout}>
<Input placeholder="公告标题" {...getFieldProps('title', {initialValue: announcement.title})} />
</Form.Item>
<Form.Item label="内容" {...formItemLayout}>
<Input placeholder="公告内容" type="textarea" {...getFieldProps('announcement', {initialValue: announcement.announcement})} />
</Form.Item>
<Form.Item wrapperCol={{offset: 4, span:10}} style={{marginTop:30}}>
<Button type="primary" htmlType="submit" loading={loading}><Icon type="save"/>保存</Button>
</Form.Item>
</Form>
);
}
}
import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux';
import {Table, Icon, Button} from 'antd';
import {serialize, formatDateTime, productStatusToString} from '../../utils';
import {Link} from 'react-router';
const columns = [
{
title: 'ID',
dataIndex: 'id',
key: 'id',
width: 60
}, {
title: '标题',
dataIndex: 'title',
key: 'title',
}, {
title: '创建时间',
dataIndex: 'dateCreated',
key: 'dateCreated',
width: 150,
className: 'tac',
render: (dateCreated, record)=>(
<span>
{dateCreated && formatDateTime(dateCreated)}
</span>
)
}, {
title: '状态',
dataIndex: 'status',
key: 'status',
width: 120,
className: 'tac',
render: (status, record)=>(<span data-status={status}>{status?'有效':'无效'}</span>)
}, {
title: '操作',
key: 'operation',
width: 120,
className: 'tac',
render: (text, record)=>(
<span>
<a href={'/product/item?id='+ record.id}></a>
</span>
)
}
];
@connect(state=>({
items: state.announcement.items,
loading: state.announcement.loading,
total: state.announcement.total,
}))
export default class List extends Component {
constructor(props, context) {
super(props, context);
}
componentWillMount() {
this.fetchList(this.props.location.query);
};
fetchList(query) {
this.props.dispatch({
type: 'FETCH_ANNOUNCEMENT_LIST',
query
});
};
handleRowClick({id}) {
this.props.history.push('/announcement/' + id + '/edit');
}
render() {
const {total, items, loading, history:{replace}, location:{pathname, query}} = this.props;
const pagination = {
total: total,
pageSize: parseInt(query.s, 10) || 10,
current: parseInt(query.p, 10) || 1,
showSizeChanger: true,
onShowSizeChange: (current, pageSize)=> {
console.log('Current: ', current, '; PageSize: ', pageSize);
query.p = current;
query.s = pageSize;
replace(pathname + '?' + serialize(query));
this.fetchList(query);
},
onChange: (current)=> {
console.log('Current: ', current);
query.p = current;
replace(pathname + '?' + serialize(query));
this.fetchList(query);
}
};
return <div>
<h1>公告列表</h1>
<Link to={'/announcement/create?itemId='+ query.itemId}><Button><Icon type="plus"/>添加</Button></Link>
<Table className="ant-table" columns={columns}
dataSource={Array.isArray(items)?items:[]}
loading={loading}
pagination={pagination}
scroll={{ y: window.innerHeight-290 }}
onRowClick={this.handleRowClick.bind(this)}
/>
</div>;
}
}
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
padding: 8px; padding: 8px;
width: 20%; width: 20%;
min-width: 200px; min-width: 200px;
//max-width: 200px; max-width: 250px;
background: #fafafa; background: #fafafa;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
margin-right: 0px; margin-right: 0px;
......
...@@ -16,86 +16,84 @@ import { ...@@ -16,86 +16,84 @@ import {
Icon, Icon,
Modal, Modal,
DatePicker, DatePicker,
Table Table,
} from 'antd'; Spin,
import YongjingSuanFaItem, {
YongjingTransform,
CreateYongjing
} from '../../components/YongjingSuanFaItem/YongjingSuanFaItem';
import ProductBaseElement, {
BaseElementTransform,
CreateBaseElement
} from '../../components/ProductBaseElement/ProductBaseElement';
} from 'antd';
import HuikuanInfoForm from '../../components/HuikuanInfoForm/HuikuanInfoForm'; import HuikuanInfoForm from '../../components/HuikuanInfoForm/HuikuanInfoForm';
import ProductBaseInfo from '../../components/ProductBaseInfo/ProductBaseInfo'; import ProductBaseInfoForm from '../../components/ProductBaseInfoForm/ProductBaseInfoForm';
import ShouyiYongjingForm from '../../components/ShouyiYongjingForm/ShouyiYongjingForm'; import ShouyiYongjingForm from '../../components/ShouyiYongjingForm/ShouyiYongjingForm';
import ProductElementForm from '../../components/ProductElementForm/ProductElementForm';
import ProductDateTimeForm from '../../components/ProductDateTimeForm/ProductDateTimeForm';
import ProductDocumentsForm from '../../components/ProductDocumentsForm/ProductDocumentsForm';
import ProductContactForm from '../../components/ProductContactForm/ProductContactForm';
import {PRODUCT_STATUS, arrayRemoveIndex, UUID} from '../../utils';
const ProductStatus = Object.keys(PRODUCT_STATUS); class PublishForm extends Component {
constructor(props, content) {
super(props, content);
}
handlePublish(e) {
e.preventDefault();
const data = {
id: this.props.product.id,
status: 1
};
this.props.dispatch({
type: 'UPDATE_PRODUCT_ITEM',
item: data
});
}
render() {
return (
<div style={{textAlign:'center'}}>
<h1>请确认产品各项信息已经填写完整!</h1>
<Button type="primary" loading={this.props.loading} onClick={this.handlePublish.bind(this)} >
<Icon type="solution"/>发布
</Button>
</div>
);
}
}
@connect(state=>({ @connect(state=>({
cates: state.product.cates user: state.user,
cates: state.product.cates,
product: state.product.item,
loading: state.product.loading,
isCreate: true,
})) }))
@Form.create()
export default class AddItem extends Component { export default class AddItem extends Component {
static propTypes = {
form: PropTypes.object,
dispatch: PropTypes.func,
caste: PropTypes.array
};
constructor() {
super(...arguments);
constructor(props, content) {
super(props, content);
this.state = { this.state = {
priviewVisible: false, step: parseInt(location.hash.replace('#', ''), 10) || 1
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%"
} }
}])
static propTypes = {
dispatch: PropTypes.func,
caste: PropTypes.array
}; };
}
componentWillMount() { componentWillMount() {
const {product, cates} = this.props;
if (!cates || !cates.length) {
this.fetchCates(); this.fetchCates();
}
if (!product || !product.id) {
this.props.dispatch({
type: 'CREATE_PRODUCT_ITEM'
});
}
}; };
fetchCates() { fetchCates() {
...@@ -104,199 +102,78 @@ export default class AddItem extends Component { ...@@ -104,199 +102,78 @@ export default class AddItem extends Component {
}); });
}; };
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 = ()=> { render = ()=> {
const styles = require('./AddItem.less');
const {cates, form:{getFieldProps}} = this.props;
const props = { const {product} = this.props;
action: '/upload.do',
listType: 'picture-card',
onChange: (info)=> {
let fileList = info.fileList;
// 1. 上传列表数量的限制 const styles = require('./Product.less');
// 只显示最近上传的一个,旧的会被新的顶掉
fileList = fileList.slice(-2);
this.setState({fileList}); const tabs = [{
}, tab: '基本信息',
onPreview: (file) => { children: ProductBaseInfoForm
this.setState({ }, {
priviewImage: file.url, tab: '收益佣金',
priviewVisible: true, children: ShouyiYongjingForm
}, {
tab: '汇款账号',
children: HuikuanInfoForm
}, {
tab: '基本要素',
children: ProductElementForm
}, {
tab: '时间',
children: ProductDateTimeForm
}, {
tab: '相关附件',
children: ProductDocumentsForm
}, {
tab: '服务经理',
children: ProductContactForm
}, {
tab: '发布',
children: PublishForm
}].map((tabPane, index)=> {
tabPane.key = 'tabs-pane-' + (index + 1);
tabPane.disabled = index != this.state.step - 1;
return tabPane;
}); });
},
};
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
return ( return (
<div className={styles.normal}> <div className={styles.normal}>
<Tabs tabPosition="top"> <Tabs ref="tabs" className={styles.tabs} tabPosition="left" >
<Tabs.TabPane tab="基本信息" key="tab-pane-1"> { tabs.map(tp=>
<ProductBaseInfo cates={cates}/> <Tabs.TabPane tab={tp.tab} key={tp.key} >
</Tabs.TabPane> {product && <tp.children {...this.props} /> }
<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.TabPane>
)}
</Tabs> </Tabs>
</div> </div>
); );
} }
} }
// <div style={{textAlign:'center', borderTop:'1px solid #eee', height:60, paddingTop:20 }}>
// {
// this.state.step > 1 &&
// <Button loading={this.props.loading}
// style={{margin:'0 1em'}}
// onClick={handleStep.bind(this, -1)}><Icon type="save"/>上一步</Button>
// }
//
// {
// this.state.step < tabs.length &&
// <Button type="primary" loading={this.props.loading}
// style={{margin:'0 1em'}}
// onClick={handleStep.bind(this, 1)}><Icon type="save"/>下一步</Button>
// }
//
// {
// this.state.step == tabs.length &&
// <Button type="primary" loading={this.props.loading}
// ><Icon type="solution"/>发布</Button>
// }
// </div>
...@@ -16,84 +16,36 @@ import { ...@@ -16,84 +16,36 @@ import {
Icon, Icon,
Modal, Modal,
DatePicker, DatePicker,
Table Table,
Spin
} from 'antd'; } 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 HuikuanInfoForm from '../../components/HuikuanInfoForm/HuikuanInfoForm';
import ProductBaseInfo from '../../components/ProductBaseInfo/ProductBaseInfo'; import ProductBaseInfoForm from '../../components/ProductBaseInfoForm/ProductBaseInfoForm';
import ShouyiYongjingForm from '../../components/ShouyiYongjingForm/ShouyiYongjingForm'; import ShouyiYongjingForm from '../../components/ShouyiYongjingForm/ShouyiYongjingForm';
import ProductElementForm from '../../components/ProductElementForm/ProductElementForm';
import {PRODUCT_STATUS, arrayRemoveIndex, UUID} from '../../utils'; import ProductDateTimeForm from '../../components/ProductDateTimeForm/ProductDateTimeForm';
import ProductDocumentsForm from '../../components/ProductDocumentsForm/ProductDocumentsForm';
const ProductStatus = Object.keys(PRODUCT_STATUS); import ProductContactForm from '../../components/ProductContactForm/ProductContactForm';
@connect(state=>({ @connect(state=>({
cates: state.product.cates, cates: state.product.cates,
item: state.product.item, product: state.product.item,
loading: state.product.loading, loading: state.product.loading,
user: state.user, user: state.user,
})) }))
@Form.create()
export default class EditItem extends Component { export default class EditItem extends Component {
static propTypes = { static propTypes = {
form: PropTypes.object, form: PropTypes.object,
dispatch: PropTypes.func, dispatch: PropTypes.func,
caste: PropTypes.array caste: PropTypes.array,
product: PropTypes.object
}; };
constructor() { constructor() {
super(...arguments); 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%"
}
}])
};
} }
...@@ -101,7 +53,7 @@ export default class EditItem extends Component { ...@@ -101,7 +53,7 @@ export default class EditItem extends Component {
if (!this.props.cates.length) { if (!this.props.cates.length) {
this.fetchCates(); this.fetchCates();
} }
if (!(this.props.item && this.props.item.id)) { if (!(this.props.product && this.props.product.id)) {
this.fetchItem(this.props.params.id); this.fetchItem(this.props.params.id);
} }
}; };
...@@ -119,203 +71,37 @@ export default class EditItem extends Component { ...@@ -119,203 +71,37 @@ export default class EditItem extends Component {
}); });
}; };
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 = ()=> { 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}); const {product} = this.props;
},
onPreview: (file) => {
this.setState({
priviewImage: file.url,
priviewVisible: true,
});
},
};
const formItemLayout = {
labelCol: {span: 4},
wrapperCol: {span: 14},
};
console.log('item=', item);
return ( return (
<div className={styles.normal}> <Spin spinning={this.props.loading}>
<Tabs tabPosition="top"> <Tabs tabPosition="top">
<Tabs.TabPane tab="基本信息" key="tab-pane-1"> <Tabs.TabPane tab="基本信息" key="tab-pane-1">
{ { product && <ProductBaseInfoForm {...this.props}/> }
item &&
<ProductBaseInfo cates={cates} product={item} user={user} dispatch={this.props.dispatch}/>
}
</Tabs.TabPane> </Tabs.TabPane>
<Tabs.TabPane tab="收益与佣金" key="tab-pane-2"> <Tabs.TabPane tab="收益与佣金" key="tab-pane-2">
<ShouyiYongjingForm yongjing={[{ { product && <ShouyiYongjingForm {...this.props}/> }
"max": 300000000,
"min": 100000000,
"result": {
"sy": "9%",
"yj": "1.0%"
}
}, {
"min": 300000000,
"result": {
"sy": "9.2%",
"yj": "0.8%"
}
}]}/>
</Tabs.TabPane> </Tabs.TabPane>
<Tabs.TabPane tab="汇款账号" key="tab-pane-4"> <Tabs.TabPane tab="汇款账号" key="tab-pane-4">
<HuikuanInfoForm /> { product && <HuikuanInfoForm {...this.props}/> }
</Tabs.TabPane> </Tabs.TabPane>
<Tabs.TabPane tab="基本要素" key="tab-pane-5"> <Tabs.TabPane tab="基本要素" key="tab-pane-5">
<Row style={{paddingBottom:20}}> { product && <ProductElementForm {...this.props} /> }
<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>
<Tabs.TabPane tab="时间起讫" key="tab-pane-6"> <Tabs.TabPane tab="时间状态" key="tab-pane-6">
<Form.Item label="募集目标" help="本期额度, 可以输入100万, 2亿等" {...formItemLayout} wrapperCol={{span:6}}> { product && <ProductDateTimeForm {...this.props} /> }
<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>
<Tabs.TabPane tab="相关附件" key="tab-pane-7"> <Tabs.TabPane tab="相关附件" key="tab-pane-7">
<Upload {...props} fileList={this.state.fileList}> { product && <ProductDocumentsForm {...this.props} /> }
<Icon type="plus"/> </Tabs.TabPane>
<div className="ant-upload-text">上传照片</div> <Tabs.TabPane tab="服务经理" key="tab-pane-8">
</Upload> { product && <ProductContactForm {...this.props} /> }
<Modal visible={this.state.priviewVisible} footer={null}
onCancel={this.handleCancel.bind(this)}>
<img alt="example" src={this.state.priviewImage}/>
</Modal>
</Tabs.TabPane> </Tabs.TabPane>
</Tabs> </Tabs>
</div> </Spin>
); );
} }
} }
...@@ -78,7 +78,7 @@ export default class Item extends Component { ...@@ -78,7 +78,7 @@ export default class Item extends Component {
<p> <p>
<Button onClick={this.handleGoBack.bind(this)}>返回</Button> <Button onClick={this.handleGoBack.bind(this)}>返回</Button>
<Link to={'/products/'+ item.id+'/edit'}><Button>编辑</Button></Link> <Link to={'/products/'+ item.id+'/edit'}><Button>编辑</Button></Link>
<Link to={'/product/'+ item.id+'/edit'}><Button>公告</Button></Link> <Link to={'/announcement?itemId='+item.id}><Button>公告</Button></Link>
<Link <Link
to={'/trades/create/'+ item.id+'?title='+ item.itemShortTitle}><Button>报单</Button></Link> to={'/trades/create/'+ item.id+'?title='+ item.itemShortTitle}><Button>报单</Button></Link>
</p> </p>
......
import React, {Component, PropTypes} from 'react'; import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import {Table, Icon} from 'antd'; import {Table, Icon} from 'antd';
import {params, formatDateTime, productStatusToString} from '../../utils'; import {serialize, formatDateTime, productStatusToString} from '../../utils';
import {Link} from 'react-router'; import {Link} from 'react-router';
...@@ -56,7 +56,7 @@ const columns = [ ...@@ -56,7 +56,7 @@ const columns = [
<span> <span>
<a href={'/product/item?id='+ record.id}>详情</a> <a href={'/product/item?id='+ record.id}>详情</a>
<span className="ant-divider"></span> <span className="ant-divider"></span>
<a href="#">公告</a> <Link to={'/announcement?itemId='+record.id} onClick={e=>e.stopPropagation()}>公告</Link>
<span className="ant-divider"></span> <span className="ant-divider"></span>
<Link to={'/trades/add/'+record.id+'?title='+record.shortTitle}>报单</Link> <Link to={'/trades/add/'+record.id+'?title='+record.shortTitle}>报单</Link>
</span> </span>
...@@ -88,7 +88,7 @@ export default class List extends Component { ...@@ -88,7 +88,7 @@ export default class List extends Component {
}; };
handleRowClick({id}){ handleRowClick({id}){
this.props.history.push('/products/'+id); this.props.history.push('/products/'+id+'/edit');
} }
...@@ -106,13 +106,13 @@ export default class List extends Component { ...@@ -106,13 +106,13 @@ export default class List extends Component {
console.log('Current: ', current, '; PageSize: ', pageSize); console.log('Current: ', current, '; PageSize: ', pageSize);
query.p = current; query.p = current;
query.s = pageSize; query.s = pageSize;
replace(pathname + '?' + params(query)); replace(pathname + '?' + serialize(query));
this.fetchList(query); this.fetchList(query);
}, },
onChange: (current)=> { onChange: (current)=> {
console.log('Current: ', current); console.log('Current: ', current);
query.p = current; query.p = current;
replace(pathname + '?' + params(query)); replace(pathname + '?' + serialize(query));
this.fetchList(query); this.fetchList(query);
} }
}; };
......
...@@ -2,8 +2,16 @@ ...@@ -2,8 +2,16 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
& > :global(.ant-tabs) { .tabs {
flex: 1; flex: 1;
overflow: auto; display: flex;
:global {
.tablist {
}
.ant-tabs-content{
flex: 1;
}
}
} }
} }
...@@ -2,7 +2,7 @@ import React, {Component, PropTypes} from 'react'; ...@@ -2,7 +2,7 @@ import React, {Component, PropTypes} from 'react';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import {Table, Icon} from 'antd'; import {Table, Icon} from 'antd';
import { Link } from 'react-router'; import { Link } from 'react-router';
import {params, formatDateTime, tradeStatusToString} from '../../utils'; import {serialize, formatDateTime, tradeStatusToString} from '../../utils';
const columns = [ const columns = [
...@@ -110,13 +110,13 @@ export default class List extends Component { ...@@ -110,13 +110,13 @@ export default class List extends Component {
console.log('Current: ', current, '; PageSize: ', pageSize); console.log('Current: ', current, '; PageSize: ', pageSize);
query.p = current; query.p = current;
query.s = pageSize; query.s = pageSize;
replace(pathname + '?' + params(query)); replace(pathname + '?' + serialize(query));
this.fetchList(query); this.fetchList(query);
}, },
onChange: (current) => { onChange: (current) => {
console.log('Current: ', current); console.log('Current: ', current);
query.p = current; query.p = current;
replace(pathname + '?' + params(query)); replace(pathname + '?' + serialize(query));
this.fetchList(query); this.fetchList(query);
} }
}; };
......
import {handleActions} from 'redux-actions';
import {combineReducer} from 'redux';
const announcement = handleActions({
['FETCH_ANNOUNCEMENT_LIST'](state) {
return {...state, loading: true,};
},
['FETCH_ANNOUNCEMENT_LIST_SUCCESS'](state, action) {
return {...state, loading: false, items: action.items, total: action.total};
},
['FETCH_ANNOUNCEMENT_LIST_FAILED'](state, action) {
return {...state, err: action.err, loading: false};
},
['FETCH_ANNOUNCEMENT_ITEM'](state){
return {...state, loading: true}
},
['FETCH_ANNOUNCEMENT_ITEM_SUCCESS'](state, action){
return {...state, loading: false, item: action.item}
},
['FETCH_ANNOUNCEMENT_ITEM_FAILED'](state, action){
return {...state, err: action.err, loading: false}
},
['CREATE_ANNOUNCEMENT_ITEM'](state){
return {...state, loading: true}
},
['CREATE_ANNOUNCEMENT_ITEM_SUCCESS'](state, action){
return {...state, loading: false, item: action.item}
},
['CREATE_ANNOUNCEMENT_ITEM_FAILED'](state, action){
return {...state, err: action.err, loading: false}
},
}, {
items: [],
loading: false,
});
export default announcement;
...@@ -30,16 +30,25 @@ const product = handleActions({ ...@@ -30,16 +30,25 @@ const product = handleActions({
return {...state, err: action.err, loading: false} return {...state, err: action.err, loading: false}
}, },
['UPDATE_PRODUCT_ITEM'](state){ ['UPDATE_PRODUCT_ITEM'](state){
return {...state, loading:true}; return {...state, loading: true};
}, },
['UPDATE_PRODUCT_ITEM_SUCCESS'](state){ ['UPDATE_PRODUCT_ITEM_SUCCESS'](state){
return {...state, loading:false}; return {...state, loading: false};
}, },
['UPDATE_PRODUCT_ITEM_FAILED'](state, action){ ['UPDATE_PRODUCT_ITEM_FAILED'](state, action){
return {...state, loading:false, err: action.err}; return {...state, loading: false, err: action.err};
},
['CREATE_PRODUCT_ITEM'](state){
return {...state, loading: true};
},
['CREATE_PRODUCT_ITEM_SUCCESS'](state, action){
return {...state, item: action.item, loading: false};
},
['CREATE_PRODUCT_FAILED'](state, action){
return {...state, loading: false, err: action.err};
} }
}, { }, {
cates:[], cates: [],
items: [], items: [],
loading: false, loading: false,
}); });
......
...@@ -13,6 +13,9 @@ import TradeItem from '../containers/Trade/Item'; ...@@ -13,6 +13,9 @@ import TradeItem from '../containers/Trade/Item';
import Commission from '../containers/Trade/Commission'; import Commission from '../containers/Trade/Commission';
import Contract from '../containers/Trade/Contract'; import Contract from '../containers/Trade/Contract';
import TradeAddItem from '../containers/Trade/AddItem'; import TradeAddItem from '../containers/Trade/AddItem';
import AnnouncementList from '../containers/Announcement/List';
import AnnouncementEditItem from '../containers/Announcement/EditItem';
import AnnouncementAddItem from '../containers/Announcement/AddItem';
export default (store)=> { export default (store)=> {
...@@ -29,8 +32,8 @@ export default (store)=> { ...@@ -29,8 +32,8 @@ export default (store)=> {
<IndexRoute component={Home}/> <IndexRoute component={Home}/>
<Route path="products" > <Route path="products" >
<IndexRoute component={ProductList} /> <IndexRoute component={ProductList} />
<Route path=":id" component={ProductItem} />
<Route path="create" component={ProductAddItem} /> <Route path="create" component={ProductAddItem} />
<Route path=":id" component={ProductItem} />
<Route path=":id/edit" component={ProductEditItem} /> <Route path=":id/edit" component={ProductEditItem} />
</Route> </Route>
<Route path="trades" > <Route path="trades" >
...@@ -40,6 +43,11 @@ export default (store)=> { ...@@ -40,6 +43,11 @@ export default (store)=> {
<Route path="contract/:id" component={Contract} /> <Route path="contract/:id" component={Contract} />
<Route path="create/:pid" component={TradeAddItem} /> <Route path="create/:pid" component={TradeAddItem} />
</Route> </Route>
<Route path="announcement">
<IndexRoute component={AnnouncementList} />
<Route path="create" component={AnnouncementAddItem} />
<Route path=":id/edit" component={AnnouncementEditItem} />
</Route>
<Route path="/actived" component={Home}/> <Route path="/actived" component={Home}/>
<Route path="/completed" component={Home}/> <Route path="/completed" component={Home}/>
</Route> </Route>
...@@ -48,3 +56,5 @@ export default (store)=> { ...@@ -48,3 +56,5 @@ export default (store)=> {
</Route> </Route>
); );
}; };
//
import {takeLatest} from 'redux-saga';
import {take, call, put, fork, cancel, select} from 'redux-saga/effects';
import {fetchList, fetchItem, createItem} from '../services/announcement';
import {message} from 'antd';
function* getList(query) {
try {
const {total, announcements} = yield call(fetchList, query);
yield put({
type: 'FETCH_ANNOUNCEMENT_LIST_SUCCESS',
total,
items: announcements
});
} catch (err) {
console.log(err);
message.error(err);
yield put({
type: 'FETCH_ANNOUNCEMENT_LIST_FAILED',
err,
});
}
}
function* watchList() {
while (true) {
const {query} = yield take('FETCH_ANNOUNCEMENT_LIST');
yield fork(getList, query);
}
}
function* getItem(id) {
try {
const item = yield call(fetchItem, id);
yield put({
type: 'FETCH_ANNOUNCEMENT_ITEM_SUCCESS',
item
});
} catch (err) {
console.log(err);
message.error(err);
yield put({
type: 'FETCH_ANNOUNCEMENT_ITEM_FAILED',
err
});
}
}
function* watchItem() {
while (true) {
const {id} = yield take('FETCH_ANNOUNCEMENT_ITEM');
yield fork(getItem, id);
}
}
function* addItem(data) {
try{
const item = yield call(createItem, data);
yield put({
type: 'CREATE_ANNOUNCEMENT_ITEM_SUCCESS',
item
});
}catch(err){
console.log(err);
message.error(err);
yield put({
type:'CREATE_ANNOUNCEMENT_ITEM_FAILED',
err
});
}
}
function* watchAdd() {
while (true) {
const {data} = yield take('CREATE_ANNOUNCEMENT_ITEM');
yield fork(addItem, data);
}
}
export default function*() {
yield fork(watchList);
yield fork(watchItem);
yield fork(watchAdd);
}
import {takeLatest} from 'redux-saga'; import {takeLatest} from 'redux-saga';
import {take, call, put, fork, cancel, select} from 'redux-saga/effects'; import {take, call, put, fork, cancel, select} from 'redux-saga/effects';
import {fetchList, fetchCates, fetchItem, updateItem} from '../services/product'; import {fetchList, fetchCates, fetchItem, updateItem, createItem} from '../services/product';
import {message} from 'antd'; import {message} from 'antd';
function* getList(query) { function* getList(query) {
...@@ -77,6 +77,7 @@ function* watchProductItem() { ...@@ -77,6 +77,7 @@ function* watchProductItem() {
function* editItem(item) { function* editItem(item) {
try{ try{
yield call(updateItem, item); yield call(updateItem, item);
message.success('保存成功!');
yield put({ yield put({
type: 'UPDATE_PRODUCT_ITEM_SUCCESS', type: 'UPDATE_PRODUCT_ITEM_SUCCESS',
}); });
...@@ -97,10 +98,32 @@ function* watchEditProductItem(){ ...@@ -97,10 +98,32 @@ function* watchEditProductItem(){
} }
} }
function* addItem() {
try{
const item = yield call(createItem);
yield put({
type: 'CREATE_PRODUCT_ITEM_SUCCESS',
item
});
}catch(err){
console.log(err);
message.error(err);
yield put({
type:'CREATE_PRODUCT_ITEM_FAILED',
err
});
}
}
function* watchAddItem() {
yield takeLatest('CREATE_PRODUCT_ITEM', addItem);
}
export default function*() { export default function*() {
yield fork(watchProductList); yield fork(watchProductList);
yield fork(watchProductCates); yield fork(watchProductCates);
yield fork(watchProductItem); yield fork(watchProductItem);
yield fork(watchEditProductItem); yield fork(watchEditProductItem);
yield fork(watchAddItem);
} }
import xFetch from './xFetch';
import {serialize} from '../utils';
export async function fetchList(query) {
return xFetch('/api/announcement' + '?' + serialize(query));
}
export async function fetchItem(id) {
return xFetch('/api/announcements/' + id);
}
export async function createItem(item) {
return xFetch('/api/announcement/save', {
method: 'POST',
body: serialize(item)
});
}
...@@ -16,15 +16,13 @@ export async function fetchItem(id) { ...@@ -16,15 +16,13 @@ export async function fetchItem(id) {
} }
export async function updateItem(item){ 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, { return xFetch('/api/products/'+ item.id, {
method:'PUT', method:'PUT',
body: serialize(item) body: serialize(item)
}); });
} }
export async function createItem() {
return xFetch('/api/products/create');
}
import xFetch from './xFetch'; import xFetch from './xFetch';
import {serialize} from '../utils';
export async function fetch(username, password) { export async function fetch(username, password) {
let form = new FormData(); // let form = new FormData();
form.append('username', username); // form.append('username', username);
form.append('password', password); // form.append('password', password);
return xFetch('/api/authenticate', { return xFetch('/api/authenticate', {
method: 'POST', method: 'POST',
body: form body: serialize({username, password})
}); });
} }
......
...@@ -12,6 +12,7 @@ function check401(res) { ...@@ -12,6 +12,7 @@ function check401(res) {
function check404(res) { function check404(res) {
if (res.status === 404) { if (res.status === 404) {
// location.href='/404';
return Promise.reject(errorMessages(res)); return Promise.reject(errorMessages(res));
} }
return res; return res;
......
...@@ -5,14 +5,16 @@ ...@@ -5,14 +5,16 @@
export function serialize(obj, prefix) { export function serialize(obj, prefix) {
var str = []; var str = [];
for(var p in obj) { for (var p in obj) {
if (obj.hasOwnProperty(p)) { if (obj.hasOwnProperty(p)) {
var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p]; var k = prefix ? prefix + "." + p : p, v = obj[p];
if (typeof v !== 'undefined') {
str.push(typeof v == "object" ? str.push(typeof v == "object" ?
serialize(v, k) : serialize(v, k) :
encodeURIComponent(k) + "=" + encodeURIComponent(v)); encodeURIComponent(k) + "=" + encodeURIComponent(v));
} }
} }
}
return str.join("&"); return str.join("&");
} }
...@@ -37,14 +39,14 @@ export const formatDateTime = (time = 0, format = 'YYYY-MM-DD hh:mm:ss') => { ...@@ -37,14 +39,14 @@ export const formatDateTime = (time = 0, format = 'YYYY-MM-DD hh:mm:ss') => {
}; };
export const PRODUCT_STATUS = { export const PRODUCT_STATUS = {
'-9':'草稿', '-9': '草稿',
0:'已删除', 0: '已删除',
1:'未发布', 1: '未发布',
5:'预热中', 5: '预热中',
11:'募集中', 11: '募集中',
17:'已暂停', 17: '已暂停',
21:'已封账', 21: '已封账',
31:'已成立', 31: '已成立',
} }
export const productStatusToString = status => { export const productStatusToString = status => {
...@@ -53,7 +55,7 @@ export const productStatusToString = status => { ...@@ -53,7 +55,7 @@ export const productStatusToString = status => {
export const tradeStatusToString = status => { export const tradeStatusToString = status => {
switch (status){ switch (status) {
case 1 : case 1 :
return '未报单,等待客户打款'; return '未报单,等待客户打款';
case 10: case 10:
...@@ -80,7 +82,7 @@ export const tradeStatusToString = status => { ...@@ -80,7 +82,7 @@ export const tradeStatusToString = status => {
}; };
export const tradeCreateTypeToString = type => { export const tradeCreateTypeToString = type => {
switch (type){ switch (type) {
case 1: case 1:
return '后台创建'; return '后台创建';
case 5: case 5:
...@@ -100,3 +102,17 @@ export const UUID = (()=> { ...@@ -100,3 +102,17 @@ export const UUID = (()=> {
return _UUID++; return _UUID++;
} }
})(); })();
export function formatMoney(money = 0) {
let ret;
if (isNaN(money)) {
ret = '0';
} else if (money >= 1E10) {
ret = (money / 1E10) + '亿';
} else if (money >= 1E6) {
ret = (money / 1E6) + '万';
} else {
ret = (money / 1E2);
}
return ret;
}
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