Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
merchant-manage-ui
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ui
merchant-manage-ui
Commits
651d3bf1
Commit
651d3bf1
authored
Dec 17, 2020
by
FE-安焕焕
👣
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'optimize' into 'master'
Optimize See merge request
!1
parents
870a14a2
05c40ec0
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
398 additions
and
221 deletions
+398
-221
.eslintrc.js
.eslintrc.js
+1
-0
config.js
config/config.js
+7
-1
env.config.js
config/env.config.js
+1
-1
package.json
package.json
+2
-0
index.jsx
src/pages/orderManage/deliveryOrder/index.jsx
+6
-0
LogisticsForm.jsx
...rManage/pendingDeliveryOrder/components/LogisticsForm.jsx
+85
-85
OrderDetail.jsx
...derManage/pendingDeliveryOrder/components/OrderDetail.jsx
+0
-59
index.jsx
src/pages/orderManage/pendingDeliveryOrder/index.jsx
+225
-52
service.js
src/pages/orderManage/pendingDeliveryOrder/service.js
+49
-22
styles.less
src/pages/orderManage/pendingDeliveryOrder/styles.less
+16
-0
request.js
src/utils/request.js
+6
-1
No files found.
.eslintrc.js
View file @
651d3bf1
...
...
@@ -7,5 +7,6 @@ module.exports = {
},
rules
:
{
'
max-len
'
:
[
'
error
'
,
{
code
:
200
}],
'
@typescript-eslint/camelcase
'
:
[
'
off
'
],
},
};
config/config.js
View file @
651d3bf1
import
slash
from
'
slash2
'
;
import
defaultSettings
from
'
./defaultSettings
'
;
// https://umijs.org/config/
import
slash
from
'
slash2
'
;
import
webpackPlugin
from
'
./plugin.config
'
;
const
{
pwa
,
primaryColor
}
=
defaultSettings
;
// preview.pro.ant.design only do not use in your production ;
// preview.pro.ant.design 专用环境变量,请不要在你的项目中使用它。
...
...
@@ -91,6 +92,11 @@ export default {
name
:
'
pendingDeliveryOrder
'
,
component
:
'
./orderManage/pendingDeliveryOrder
'
,
},
{
path
:
'
/orderManage/deliveryOrder
'
,
name
:
'
deliveryOrder
'
,
component
:
'
./orderManage/deliveryOrder
'
,
},
{
component
:
'
./404
'
,
},
...
...
config/env.config.js
View file @
651d3bf1
...
...
@@ -4,7 +4,7 @@ let envAPi = {
api
:
'
//backstms-vcc2.liangkebang.net
'
,
// kdspApi: '//yapi.quantgroups.com/mock/351',
// kdspApi: '//192.168.28.66:80',
kdspApi
:
'
https://kdsp-op-vcc2.liangkebang.net
'
kdspApi
:
'
https://kdsp-op-vcc2.liangkebang.net
'
,
};
let
prodApi
=
{
...
...
package.json
View file @
651d3bf1
...
...
@@ -53,7 +53,9 @@
"
@antv/data-set
"
:
"
^0.10.2
"
,
"
antd
"
:
"
^3.23.6
"
,
"
classnames
"
:
"
^2.2.6
"
,
"
date-fns
"
:
"
^2.16.1
"
,
"
dva
"
:
"
^2.4.1
"
,
"
file-saver
"
:
"
^2.0.5
"
,
"
lodash
"
:
"
^4.17.11
"
,
"
moment
"
:
"
^2.24.0
"
,
"
omit.js
"
:
"
^1.0.2
"
,
...
...
src/pages/orderManage/deliveryOrder/index.jsx
0 → 100644
View file @
651d3bf1
import
React
from
'
react
'
;
import
DeliverOrder
from
'
../pendingDeliveryOrder
'
;
// 已发货type:2;待发货type: 1
const
TableList
=
()
=>
<
DeliverOrder
type=
{
2
}
/>;
export
default
TableList
;
src/pages/orderManage/pendingDeliveryOrder/components/LogisticsForm.jsx
View file @
651d3bf1
...
...
@@ -8,77 +8,75 @@ const { Option } = Select;
const
LogisticsForm
=
props
=>
{
const
{
modalVisible
,
onCancel
,
companys
=
[],
skuList
,
onSubmit
}
=
props
;
const
{
getFieldDecorator
,
resetFields
}
=
props
.
form
;
const
[
result
,
setResult
]
=
useState
([{}]);
const
{
getFieldDecorator
}
=
props
.
form
;
const
[
result
,
setResult
]
=
useState
(()
=>
props
.
value
);
const
formData
=
async
(
formDataList
,
fieldsValue
,
suffixes
)
=>
{
// 数据聚合
suffixes
.
forEach
(
suffixe
=>
{
const
formObj
=
{};
for
(
let
key
in
fieldsValue
)
{
// eslint-disable-next-line no-restricted-syntax
for
(
const
key
in
fieldsValue
)
{
if
(
key
.
startsWith
(
suffixe
))
{
formObj
[
key
.
split
(
'
-
'
)[
1
]]
=
fieldsValue
[
key
];
formObj
[
key
.
split
(
'
-
'
)[
1
]]
=
fieldsValue
[
key
];
}
}
formDataList
.
push
(
formObj
);
});
// 参数整合
const
result
=
[];
const
result
Data
=
[];
formDataList
.
forEach
(
data
=>
{
data
.
selectedGoods
.
forEach
(
orderSkuId
=>
{
result
.
push
({
orderSkuId
:
orderSkuId
,
result
Data
.
push
({
orderSkuId
,
expressCompanyCode
:
data
.
selectedCompany
.
split
(
'
-
'
)[
0
],
expressCompanyName
:
data
.
selectedCompany
.
split
(
'
-
'
)[
1
],
deliveryNo
:
data
.
orderNum
,
})
})
})
})
;
})
;
})
;
// 校验重复商品
let
orderSkuIds
=
[];
formDataList
.
forEach
(
data
=>
{
orderSkuIds
=
[...
orderSkuIds
,
...
data
.
selectedGoods
];
});
if
(
orderSkuIds
.
length
!==
Array
.
from
(
new
Set
(
orderSkuIds
)).
length
)
{
notification
.
open
({
message
:
'
商品选择重复!
'
});
notification
.
error
({
message
:
'
商品选择重复!
'
});
return
;
}
if
(
skuList
.
length
!==
orderSkuIds
.
length
)
{
notification
.
open
({
message
:
'
该订单下的所有商品必须设置物流信息!
'
});
notification
.
error
({
message
:
'
该订单下的所有商品必须设置物流信息!
'
});
return
;
}
console
.
log
(
result
);
await
updateExpress
(
result
);
await
updateExpress
(
resultData
);
onSubmit
();
}
}
;
const
handleSubmit
=
()
=>
{
props
.
form
.
validateFields
((
err
,
fieldsValue
)
=>
{
let
suffixes
=
[],
formDataList
=
[];
const
suffixes
=
[];
const
formDataList
=
[];
if
(
err
)
return
;
for
(
const
key
in
fieldsValue
)
{
Object
.
keys
(
fieldsValue
).
forEach
(
key
=>
{
const
suffixe
=
key
.
split
(
'
-
'
)[
0
];
if
(
!
suffixes
.
includes
(
suffixe
))
suffixes
.
push
(
suffixe
);
}
if
(
!
suffixes
.
includes
(
suffixe
))
suffixes
.
push
(
suffixe
);
}
);
formData
(
formDataList
,
fieldsValue
,
suffixes
);
});
}
}
;
const
addForm
=
()
=>
{
setResult
([...
result
,
{}])
}
setResult
([...
result
,
{}])
;
}
;
const
rmForm
=
()
=>
{
if
(
result
.
length
===
1
)
return
;
setResult
(
result
.
slice
(
0
,
result
.
length
-
1
))
}
const
reset
=
()
=>
{
setResult
([{}]);
}
setResult
(
result
.
slice
(
0
,
result
.
length
-
1
));
};
useEffect
(()
=>
{
setResult
(
props
.
value
);
},
props
.
value
);
return
(
<
Modal
...
...
@@ -90,63 +88,65 @@ const LogisticsForm = props => {
afterClose=
{
()
=>
setResult
([{}])
}
>
<
Form
>
{
result
&&
result
.
length
&&
{
result
&&
result
.
length
&&
result
.
map
((
v
,
i
)
=>
(
<
Card
key=
{
i
}
>
<
FormItem
>
{
getFieldDecorator
(
`${i}-selectedGoods`
,
{
rules
:
[
{
required
:
true
,
message
:
'
请选择该订单下的商品!
'
,
},
],
})(
<
Select
mode=
"multiple"
placeholder=
"请选择该订单下的商品"
>
{
skuList
.
map
(
item
=>
(
<
Option
value=
{
item
.
orderSkuId
}
key=
{
item
.
orderSkuId
}
>
{
item
.
skuName
+
(
item
.
skuAttr
||
''
)
}
</
Option
>
))
}
</
Select
>,
)
}
</
FormItem
>
<
FormItem
>
{
getFieldDecorator
(
`${i}-selectedCompany`
,
{
rules
:
[
{
required
:
true
,
message
:
'
请选择物流公司!
'
,
},
],
})(
<
Select
showSearch
placeholder=
"请选择物流公司"
// eslint-disable-next-line react/no-array-index-key
<
Card
key=
{
i
}
>
<
FormItem
>
{
getFieldDecorator
(
`${i}-selectedGoods`
,
{
initialValue
:
v
.
selectedGoods
,
rules
:
[
{
required
:
true
,
message
:
'
请选择该订单下的商品!
'
,
},
],
})(
<
Select
mode=
"multiple"
placeholder=
"请选择该订单下的商品"
>
{
skuList
.
map
(
item
=>
(
<
Option
value=
{
item
.
orderSkuId
}
key=
{
item
.
orderSkuId
}
>
{
item
.
skuName
+
(
item
.
skuAttr
||
''
)
}
</
Option
>
))
}
</
Select
>,
)
}
</
FormItem
>
<
FormItem
>
{
getFieldDecorator
(
`${i}-selectedCompany`
,
{
initialValue
:
v
.
selectedCompany
,
rules
:
[
{
required
:
true
,
message
:
'
请选择物流公司!
'
,
},
],
})(
<
Select
showSearch
placeholder=
"请选择物流公司"
>
{
companys
.
map
(
item
=>
(
<
Option
value=
{
`${item.expressCompanyCode}-${item.expressCompanyName}`
}
key=
{
item
.
expressCompanyCode
}
>
{
companys
.
map
(
item
=>
(
<
Option
value=
{
item
.
expressCompanyCode
+
'
-
'
+
item
.
expressCompanyName
}
key=
{
item
.
expressCompanyCode
}
>
{
item
.
expressCompanyName
}
</
Option
>
))
}
</
Select
>,
)
}
</
FormItem
>
<
FormItem
>
{
getFieldDecorator
(
`${i}-orderNum`
,
{
rules
:
[
{
required
:
true
,
message
:
'
请填写物流单号!
'
,
},
],
})(<
Input
placeholder=
"请填写物流单号"
/>)
}
</
FormItem
>
</
Card
>)
)
}
{
item
.
expressCompanyName
}
</
Option
>
))
}
</
Select
>,
)
}
</
FormItem
>
<
FormItem
>
{
getFieldDecorator
(
`${i}-orderNum`
,
{
initialValue
:
v
.
orderNum
,
rules
:
[
{
required
:
true
,
message
:
'
请填写物流单号!
'
,
},
],
})(<
Input
placeholder=
"请填写物流单号"
/>)
}
</
FormItem
>
</
Card
>
))
}
<
div
className=
{
style
.
logistics
}
>
<
Icon
className=
{
style
.
logisticsIcon
}
onClick=
{
addForm
}
type=
"plus-circle"
/>
<
Icon
className=
{
style
.
logisticsIcon
}
onClick=
{
rmForm
}
type=
"minus-circle"
/>
...
...
src/pages/orderManage/pendingDeliveryOrder/components/OrderDetail.jsx
deleted
100644 → 0
View file @
870a14a2
import
React
from
'
react
'
;
import
{
Modal
,
Form
,
Select
,
Input
,
Table
}
from
'
antd
'
;
const
FormItem
=
Form
.
Item
;
const
{
Option
}
=
Select
;
const
LogisticsForm
=
props
=>
{
const
{
modalVisible
,
onCancel
,
value
}
=
props
;
const
columns
=
[
{
title
:
'
商品名称
'
,
dataIndex
:
'
skuName
'
,
key
:
'
skuName
'
,
width
:
250
,
},
{
title
:
'
商品属性
'
,
dataIndex
:
'
skuAttr
'
,
key
:
'
skuAttr
'
,
width
:
200
,
},
{
title
:
'
商品件数(件)
'
,
dataIndex
:
'
count
'
,
key
:
'
count
'
,
width
:
150
},
{
title
:
'
物流公司
'
,
dataIndex
:
'
expressCompanyName
'
,
key
:
'
expressCompanyName
'
,
width
:
150
},
{
title
:
'
物流单号
'
,
dataIndex
:
'
deliveryNo
'
,
key
:
'
deliveryNo
'
,
width
:
150
}
];
const
style
=
{
width
:
'
900px
'
};
return
(
<
Modal
title=
"订单详情"
visible=
{
modalVisible
}
onCancel=
{
()
=>
onCancel
()
}
onOk=
{
()
=>
onCancel
()
}
bodyStyle=
{
style
}
width=
{
900
}
>
<
Table
columns=
{
columns
}
dataSource=
{
value
}
/>
</
Modal
>
);
};
export
default
Form
.
create
()(
LogisticsForm
);
src/pages/orderManage/pendingDeliveryOrder/index.jsx
View file @
651d3bf1
This diff is collapsed.
Click to expand it.
src/pages/orderManage/pendingDeliveryOrder/service.js
View file @
651d3bf1
import
{
stringify
}
from
'
querystring
'
;
import
_
from
'
lodash
'
;
import
request
from
'
@/utils/request
'
;
import
{
saveAs
}
from
'
file-saver
'
;
import
{
format
}
from
'
date-fns
'
;
import
config
from
'
../../../../config/env.config
'
;
// 待发货订单
export
async
function
queryToSend
(
params
)
{
const
transformedParam
=
{
...
params
,
logisticsStatus
:
params
.
logisticsStatus
?
params
.
logisticsStatus
.
slice
(
1
)
:
''
,
startTime
:
params
.
beginTime
,
pageNo
:
params
.
current
,
pageSize
:
params
.
pageSize
||
20
,
};
const
{
data
:
{
current
,
records
,
total
,
size
}
}
=
await
request
.
post
(
'
/api/kdsp/op/mch-order/list
'
,
{
const
{
data
:
{
current
,
records
,
total
,
size
},
}
=
await
request
.
post
(
'
/api/kdsp/op/mch-order/list-v2
'
,
{
prefix
:
config
.
kdspApi
,
data
:
stringify
(
_
.
omitBy
(
transformedParam
,
v
=>
!
v
)),
data
:
stringify
(
_
.
omitBy
(
params
,
v
=>
!
v
)),
headers
:
{
'
Content-Type
'
:
'
application/x-www-form-urlencoded
'
,
}
}
,
});
return
{
current
:
current
,
data
:
records
.
map
(
v
=>
({
...
v
,
logisticsStatus
:
`_
${
v
.
logisticsStatus
}
`
})),
total
:
total
,
pageSize
:
size
}
current
,
data
:
records
.
map
(
v
=>
({
...
v
,
logisticsStatus
:
`_
${
v
.
logisticsStatus
}
`
})),
total
,
pageSize
:
size
,
}
;
}
// 快递公司
export
async
function
queryExpress
()
{
const
{
data
}
=
await
request
.
get
(
'
/api/kdsp/op/express/list
'
,
{
prefix
:
config
.
kdspApi
,
});
return
data
;
const
{
data
}
=
await
request
.
get
(
'
/api/kdsp/op/express/list
'
,
{
prefix
:
config
.
kdspApi
,
});
return
data
;
}
export
async
function
updateExpress
(
params
)
{
return
request
.
post
(
'
/api/kdsp/op/mch-order/update-express-info
'
,
{
prefix
:
config
.
kdspApi
,
data
:
params
data
:
params
,
});
}
...
...
@@ -48,4 +44,35 @@ export async function getGoods(orderId) {
prefix
:
config
.
kdspApi
,
});
return
data
;
}
\ No newline at end of file
}
export
async
function
getLogistics
(
orderId
)
{
const
{
data
}
=
await
request
.
get
(
`/api/kdsp/op/mch-order/logistics-skus?orderId=
${
orderId
}
`
,
{
prefix
:
config
.
kdspApi
,
});
return
data
;
}
export
async
function
uploadFile
(
file
)
{
const
params
=
new
FormData
();
params
.
append
(
'
file
'
,
file
);
const
data
=
await
request
.
post
(
'
/api/kdsp/op/mch-order/order-logistics-batch-import
'
,
{
data
:
params
,
prefix
:
config
.
kdspApi
,
});
return
data
;
}
export
function
downTemplate
()
{
window
.
location
.
href
=
'
https://kdspstatic.q-gp.com/%E8%AE%A2%E5%8D%95%E7%89%A9%E6%B5%81%E4%BF%A1%E6%81%AF%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF-v1.xlsx
'
;
}
export
async
function
downOrder
(
params
)
{
const
data
=
await
request
.
post
(
'
/api/kdsp/op/mch-order/order-export
'
,
{
data
:
stringify
(
_
.
omitBy
(
params
,
v
=>
!
v
)),
headers
:
{
'
Content-Type
'
:
'
application/x-www-form-urlencoded
'
,
},
prefix
:
config
.
kdspApi
,
responseType
:
'
arrayBuffer
'
,
});
const
blob
=
new
Blob
([
data
]);
saveAs
(
blob
,
`商户订单列表-
${
format
(
new
Date
(),
'
yyyyMMddHHmmss
'
)}
.xlsx`
);
}
src/pages/orderManage/pendingDeliveryOrder/styles.less
0 → 100644
View file @
651d3bf1
.protable {
:global {
.tableContent {
display: flex;
align-items: flex-end;
height: 60px;
padding: 16px;
}
.border {
border-bottom: 1px solid #e8e8e8;
}
tbody .colStyle {
padding: 0;
}
}
}
src/utils/request.js
View file @
651d3bf1
...
...
@@ -84,7 +84,7 @@ request.interceptors.request.use(async (url, options) => {
const
header
=
{
...
headers
,
'
Access-Token
'
:
token
,
'
Content-Type
'
:
headers
[
'
Content-Type
'
]
?
headers
[
'
Content-Type
'
]
:
'
application/json
'
,
//
'Content-Type': headers['Content-Type'] ? headers['Content-Type'] : 'application/json',
};
return
{
url
,
...
...
@@ -116,6 +116,11 @@ request.interceptors.response.use(async (response, options) => {
});
window
.
location
.
href
=
loginPath
;
}
if
(
data
.
businessCode
&&
data
.
businessCode
!==
'
0000
'
)
{
notification
.
warning
({
message
:
data
.
detail
||
data
.
msg
||
'
操作失败
'
,
});
}
return
response
;
});
...
...
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