Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Litemall
Commits
ac54c1f4
Commit
ac54c1f4
authored
Jul 16, 2018
by
Junling Bu
Browse files
feat[litemall-admin, litemall-admin-api]:支持订单详情显示
parent
d7702f49
Changes
6
Hide whitespace changes
Inline
Side-by-side
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminOrderController.java
View file @
ac54c1f4
...
...
@@ -4,12 +4,11 @@ import org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory
;
import
org.linlinjava.litemall.admin.annotation.LoginAdmin
;
import
org.linlinjava.litemall.core.util.JacksonUtil
;
import
org.linlinjava.litemall.db.domain.LitemallOrder
;
import
org.linlinjava.litemall.db.domain.LitemallOrderGoods
;
import
org.linlinjava.litemall.db.domain.LitemallProduct
;
import
org.linlinjava.litemall.db.domain.*
;
import
org.linlinjava.litemall.db.service.LitemallOrderGoodsService
;
import
org.linlinjava.litemall.db.service.LitemallOrderService
;
import
org.linlinjava.litemall.db.service.LitemallProductService
;
import
org.linlinjava.litemall.db.service.LitemallUserService
;
import
org.linlinjava.litemall.db.util.OrderHandleOption
;
import
org.linlinjava.litemall.db.util.OrderUtil
;
import
org.linlinjava.litemall.core.util.ResponseUtil
;
...
...
@@ -41,18 +40,20 @@ public class AdminOrderController {
private
LitemallOrderService
orderService
;
@Autowired
private
LitemallProductService
productService
;
@Autowired
private
LitemallUserService
userService
;
@GetMapping
(
"/list"
)
public
Object
list
(
@LoginAdmin
Integer
adminId
,
Integer
userId
,
String
orderSn
,
Integer
userId
,
String
orderSn
,
@RequestParam
(
required
=
false
,
value
=
"orderStatusArray[]"
)
List
<
Short
>
orderStatusArray
,
@RequestParam
(
value
=
"page"
,
defaultValue
=
"1"
)
Integer
page
,
@RequestParam
(
value
=
"limit"
,
defaultValue
=
"10"
)
Integer
limit
,
String
sort
,
String
order
){
if
(
adminId
==
null
){
return
ResponseUtil
.
unlogin
();
}
List
<
LitemallOrder
>
orderList
=
orderService
.
querySelective
(
userId
,
orderSn
,
page
,
limit
,
sort
,
order
);
int
total
=
orderService
.
countSelective
(
userId
,
orderSn
,
page
,
limit
,
sort
,
order
);
List
<
LitemallOrder
>
orderList
=
orderService
.
querySelective
(
userId
,
orderSn
,
orderStatusArray
,
page
,
limit
,
sort
,
order
);
int
total
=
orderService
.
countSelective
(
userId
,
orderSn
,
orderStatusArray
,
page
,
limit
,
sort
,
order
);
Map
<
String
,
Object
>
data
=
new
HashMap
<>();
data
.
put
(
"total"
,
total
);
...
...
@@ -61,6 +62,23 @@ public class AdminOrderController {
return
ResponseUtil
.
ok
(
data
);
}
@GetMapping
(
"/detail"
)
public
Object
detail
(
@LoginAdmin
Integer
adminId
,
Integer
id
)
{
if
(
adminId
==
null
){
return
ResponseUtil
.
unlogin
();
}
LitemallOrder
order
=
orderService
.
findById
(
id
);
List
<
LitemallOrderGoods
>
orderGoods
=
orderGoodsService
.
queryByOid
(
id
);
UserVo
user
=
userService
.
findUserVoById
(
order
.
getUserId
());
Map
<
String
,
Object
>
data
=
new
HashMap
<>();
data
.
put
(
"order"
,
order
);
data
.
put
(
"orderGoods"
,
orderGoods
);
data
.
put
(
"user"
,
user
);
return
ResponseUtil
.
ok
(
data
);
}
/**
* 订单退款确认
* 1. 检测当前订单是否能够退款确认
...
...
litemall-admin/src/api/order.js
View file @
ac54c1f4
...
...
@@ -8,6 +8,14 @@ export function listOrder(query) {
})
}
export
function
detailOrder
(
id
)
{
return
request
({
url
:
'
/order/detail
'
,
method
:
'
get
'
,
params
:
{
id
}
})
}
export
function
shipOrder
(
data
)
{
return
request
({
url
:
'
/order/ship
'
,
...
...
litemall-admin/src/views/mall/order.vue
View file @
ac54c1f4
...
...
@@ -7,6 +7,10 @@
</el-input>
<el-input
clearable
class=
"filter-item"
style=
"width: 200px;"
placeholder=
"请输入订单编号"
v-model=
"listQuery.orderSn"
>
</el-input>
<el-select
multiple
style=
"width: 200px"
class=
"filter-item"
placeholder=
"请选择订单状态"
v-model=
"listQuery.orderStatusArray"
>
<el-option
v-for=
"(key, value) in statusMap"
:key=
"key"
:label=
"key"
:value=
"value"
>
</el-option>
</el-select>
<el-button
class=
"filter-item"
type=
"primary"
icon=
"el-icon-search"
@
click=
"handleFilter"
>
查找
</el-button>
<el-button
class=
"filter-item"
type=
"primary"
icon=
"el-icon-download"
@
click=
"handleDownload"
:loading=
"downloadLoading"
>
导出
</el-button>
</div>
...
...
@@ -14,34 +18,36 @@
<!-- 查询结果 -->
<el-table
size=
"small"
:data=
"list"
v-loading=
"listLoading"
element-loading-text=
"正在查询中。。。"
border
fit
highlight-current-row
>
<el-table-column
type=
"expand"
>
<template
slot-scope=
"props"
>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
width=
"100px"
label=
"订单ID"
prop=
"id"
sortable
>
<el-table-column
align=
"center"
min-width=
"100"
label=
"订单编号"
prop=
"orderSn"
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"100px"
label=
"用户ID"
prop=
"userId"
>
<el-table-column
align=
"center"
label=
"用户ID"
prop=
"userId"
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"200px"
label=
"订单编号"
prop=
"orderSn"
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"100px"
label=
"订单状态"
prop=
"orderStatus"
>
<el-table-column
align=
"center"
label=
"订单状态"
prop=
"orderStatus"
>
<template
slot-scope=
"scope"
>
<el-tag>
{{
scope
.
row
.
orderStatus
|
orderStatusFilter
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"100px"
label=
"订单费用"
prop=
"orderPrice"
>
<el-table-column
align=
"center"
label=
"订单金额"
prop=
"orderPrice"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"支付金额"
prop=
"actualPrice"
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"100px"
label=
"实际费用"
prop=
"actualPrice"
>
<el-table-column
align=
"center"
label=
"支付时间"
prop=
"payTime"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"物流单号"
prop=
"shipSn"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"物流渠道"
prop=
"shipChannel"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"操作"
width=
"200"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleDetail(scope.row)"
>
详情
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleShip(scope.row)"
v-if=
"scope.row.orderStatus==201"
>
发货
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleRefund(scope.row)"
v-if=
"scope.row.orderStatus==202"
>
退款
</el-button>
</
template
>
...
...
@@ -55,6 +61,65 @@
</el-pagination>
</div>
<!-- 订单详情对话框 -->
<el-dialog
title=
"订单详情"
width=
"800"
:visible.sync=
"orderDialogVisible"
>
<el-form
:data=
"orderDetail"
label-position=
"left"
>
<el-form-item
label=
"订单编号"
>
<span>
{{ orderDetail.order.orderSn }}
</span>
</el-form-item>
<el-form-item
label=
"订单状态"
>
<
template
slot-scope=
"scope"
>
<el-tag>
{{
orderDetail
.
order
.
orderStatus
|
orderStatusFilter
}}
</el-tag>
</
template
>
</el-form-item>
<el-form-item
label=
"订单用户"
>
<span>
{{ orderDetail.user.nickname }}
</span>
</el-form-item>
<el-form-item
label=
"收货信息"
>
<span>
(收货人){{ orderDetail.order.consignee }}
</span>
<span>
(手机号){{ orderDetail.order.mobile }}
</span>
<span>
(地址){{ orderDetail.order.address }}
</span>
</el-form-item>
<el-form-item
label=
"商品信息"
>
<el-table
size=
"small"
:data=
"orderDetail.orderGoods"
border
fit
highlight-current-row
>
<el-table-column
align=
"center"
label=
"商品名称"
prop=
"goodsName"
/>
<el-table-column
align=
"center"
label=
"商品编号"
prop=
"goodsSn"
/>
<el-table-column
align=
"center"
label=
"货品规格"
prop=
"specifications"
/>
<el-table-column
align=
"center"
label=
"货品价格"
prop=
"price"
/>
<el-table-column
align=
"center"
label=
"货品数量"
prop=
"number"
/>
<el-table-column
align=
"center"
label=
"货品图片"
prop=
"picUrl"
>
<
template
slot-scope=
"scope"
>
<img
:src=
"scope.row.picUrl"
width=
"40"
/>
</
template
>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item
label=
"费用信息"
>
<span>
(实际费用){{ orderDetail.order.actualPrice }}元 =
(商品总价){{ orderDetail.order.goodsPrice }}元 +
(快递费用){{ orderDetail.order.freightPrice }}元 -
(优惠减免){{ orderDetail.order.couponPrice }}元 -
(积分减免){{ orderDetail.order.integralPrice }}元
</span>
</el-form-item>
<el-form-item
label=
"支付信息"
>
<span>
(支付渠道)微信支付
</span>
<span>
(支付时间){{ orderDetail.order.payTime }}
</span>
</el-form-item>
<el-form-item
label=
"快递信息"
>
<span>
(快递公司){{ orderDetail.order.shipChannel }}
</span>
<span>
(快递单号){{ orderDetail.order.shipSn }}
</span>
<span>
(发货时间){{ orderDetail.order.shipTime }}
</span>
</el-form-item>
<el-form-item
label=
"收货信息"
>
<span>
(确认收货时间){{ orderDetail.order.confirmTime }}
</span>
</el-form-item>
</el-form>
</el-dialog>
<!-- 发货对话框 -->
<el-dialog
title=
"发货"
:visible.sync=
"shipDialogVisible"
>
<el-form
ref=
"shipForm"
:model=
"shipForm"
status-icon
label-position=
"left"
label-width=
"100px"
style=
'width: 400px; margin-left:50px;'
>
...
...
@@ -88,21 +153,23 @@
</template>
<
style
>
.demo-table-expand
{
font-size
:
0
;
}
.demo-table-expand
label
{
width
:
200px
;
color
:
#99a9bf
;
}
.demo-table-expand
.el-form-item
{
margin-right
:
0
;
margin-bottom
:
0
;
}
</
style
>
<
script
>
import
{
listOrder
,
shipOrder
,
refundOrder
}
from
'
@/api/order
'
import
{
listOrder
,
shipOrder
,
refundOrder
,
detailOrder
}
from
'
@/api/order
'
const
statusMap
=
{
101
:
'
未付款
'
,
102
:
'
用户取消
'
,
103
:
'
系统取消
'
,
201
:
'
已付款
'
,
202
:
'
申请退款
'
,
203
:
'
已退款
'
,
301
:
'
已发货
'
,
401
:
'
用户收货
'
,
402
:
'
系统收货
'
}
export
default
{
name
:
'
Order
'
,
...
...
@@ -116,9 +183,17 @@ export default {
limit
:
20
,
id
:
undefined
,
name
:
undefined
,
orderStatusArray
:
[],
sort
:
'
add_time
'
,
order
:
'
desc
'
},
statusMap
,
orderDialogVisible
:
false
,
orderDetail
:
{
order
:
{},
user
:
{},
orderGoods
:
[]
},
shipForm
:
{
orderId
:
undefined
,
shipChannel
:
undefined
,
...
...
@@ -135,17 +210,6 @@ export default {
},
filters
:
{
orderStatusFilter
(
status
)
{
const
statusMap
=
{
'
101
'
:
'
未付款
'
,
'
102
'
:
'
已取消
'
,
'
103
'
:
'
已取消
'
,
'
201
'
:
'
已付款
'
,
'
202
'
:
'
申请退款
'
,
'
203
'
:
'
已退款
'
,
'
301
'
:
'
已发货
'
,
'
401
'
:
'
确认收货
'
,
'
402
'
:
'
确认收货
'
}
return
statusMap
[
status
]
}
},
...
...
@@ -177,6 +241,12 @@ export default {
this
.
listQuery
.
page
=
val
this
.
getList
()
},
handleDetail
(
row
)
{
detailOrder
(
row
.
id
).
then
(
response
=>
{
this
.
orderDetail
=
response
.
data
.
data
})
this
.
orderDialogVisible
=
true
},
handleShip
(
row
)
{
this
.
shipForm
.
orderId
=
row
.
id
this
.
shipForm
.
shipChannel
=
row
.
shipChannel
...
...
@@ -232,7 +302,7 @@ export default {
this
.
downloadLoading
=
true
import
(
'
@/vendor/Export2Excel
'
).
then
(
excel
=>
{
const
tHeader
=
[
'
订单ID
'
,
'
订单编号
'
,
'
用户ID
'
,
'
订单状态
'
,
'
是否删除
'
,
'
收货人
'
,
'
收货联系电话
'
,
'
收货地址
'
]
const
filterVal
=
[
'
id
'
,
'
orderSn
'
,
'
userId
'
,
'
orderStat
i
s
'
,
'
isDelete
'
,
'
consignee
'
,
'
mobile
'
,
'
address
'
]
const
filterVal
=
[
'
id
'
,
'
orderSn
'
,
'
userId
'
,
'
orderStat
u
s
'
,
'
isDelete
'
,
'
consignee
'
,
'
mobile
'
,
'
address
'
]
excel
.
export_json_to_excel2
(
tHeader
,
this
.
list
,
filterVal
,
'
订单信息
'
)
this
.
downloadLoading
=
false
})
...
...
litemall-db/src/main/java/org/linlinjava/litemall/db/domain/UserVo.java
0 → 100644
View file @
ac54c1f4
package
org.linlinjava.litemall.db.domain
;
public
class
UserVo
{
private
String
nickname
;
private
String
avatar
;
public
String
getNickname
()
{
return
nickname
;
}
public
void
setNickname
(
String
nickname
)
{
this
.
nickname
=
nickname
;
}
public
String
getAvatar
()
{
return
avatar
;
}
public
void
setAvatar
(
String
avatar
)
{
this
.
avatar
=
avatar
;
}
}
litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java
View file @
ac54c1f4
...
...
@@ -100,7 +100,7 @@ public class LitemallOrderService {
return
orderMapper
.
updateByPrimaryKeySelective
(
order
);
}
public
List
<
LitemallOrder
>
querySelective
(
Integer
userId
,
String
orderSn
,
Integer
page
,
Integer
size
,
String
sort
,
String
order
)
{
public
List
<
LitemallOrder
>
querySelective
(
Integer
userId
,
String
orderSn
,
List
<
Short
>
orderStatusArray
,
Integer
page
,
Integer
size
,
String
sort
,
String
order
)
{
LitemallOrderExample
example
=
new
LitemallOrderExample
();
LitemallOrderExample
.
Criteria
criteria
=
example
.
createCriteria
();
...
...
@@ -110,6 +110,9 @@ public class LitemallOrderService {
if
(!
StringUtils
.
isEmpty
(
orderSn
)){
criteria
.
andOrderSnEqualTo
(
orderSn
);
}
if
(
orderStatusArray
!=
null
&&
orderStatusArray
.
size
()
!=
0
){
criteria
.
andOrderStatusIn
(
orderStatusArray
);
}
criteria
.
andDeletedEqualTo
(
false
);
if
(!
StringUtils
.
isEmpty
(
sort
)
&&
!
StringUtils
.
isEmpty
(
order
))
{
...
...
@@ -120,7 +123,7 @@ public class LitemallOrderService {
return
orderMapper
.
selectByExample
(
example
);
}
public
int
countSelective
(
Integer
userId
,
String
orderSn
,
Integer
page
,
Integer
size
,
String
sort
,
String
order
)
{
public
int
countSelective
(
Integer
userId
,
String
orderSn
,
List
<
Short
>
orderStatusArray
,
Integer
page
,
Integer
size
,
String
sort
,
String
order
)
{
LitemallOrderExample
example
=
new
LitemallOrderExample
();
LitemallOrderExample
.
Criteria
criteria
=
example
.
createCriteria
();
...
...
litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallUserService.java
View file @
ac54c1f4
...
...
@@ -4,10 +4,13 @@ import com.github.pagehelper.PageHelper;
import
org.linlinjava.litemall.db.dao.LitemallUserMapper
;
import
org.linlinjava.litemall.db.domain.LitemallUser
;
import
org.linlinjava.litemall.db.domain.LitemallUserExample
;
import
org.linlinjava.litemall.db.domain.UserVo
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
import
javax.annotation.Resource
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Service
public
class
LitemallUserService
{
...
...
@@ -18,6 +21,14 @@ public class LitemallUserService {
return
userMapper
.
selectByPrimaryKey
(
userId
);
}
public
UserVo
findUserVoById
(
Integer
userId
)
{
LitemallUser
user
=
findById
(
userId
);
UserVo
userVo
=
new
UserVo
();
userVo
.
setNickname
(
user
.
getNickname
());
userVo
.
setAvatar
(
user
.
getAvatar
());
return
userVo
;
}
public
LitemallUser
queryByOid
(
String
openId
)
{
LitemallUserExample
example
=
new
LitemallUserExample
();
example
.
or
().
andWeixinOpenidEqualTo
(
openId
).
andDeletedEqualTo
(
false
);
...
...
Write
Preview
Supports
Markdown
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