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