Commit 7e217d85 authored by Junling Bu's avatar Junling Bu
Browse files

refactor[litemall-admin, litemall-admin-api]: 订单页面重新设计。

1. 管理员订单页面可以发货;
2. 管理员订单页面可以退款。
parent 1d08bb4d
...@@ -21,6 +21,7 @@ import org.springframework.transaction.TransactionStatus; ...@@ -21,6 +21,7 @@ import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -60,73 +61,6 @@ public class AdminOrderController { ...@@ -60,73 +61,6 @@ public class AdminOrderController {
return ResponseUtil.ok(data); return ResponseUtil.ok(data);
} }
/*
* 目前的逻辑不支持管理员创建
*/
@PostMapping("/create")
public Object create(@LoginAdmin Integer adminId, @RequestBody LitemallOrder order){
if(adminId == null){
return ResponseUtil.unlogin();
}
return ResponseUtil.unsupport();
}
@GetMapping("/read")
public Object read(@LoginAdmin Integer adminId, Integer id){
if(adminId == null){
return ResponseUtil.unlogin();
}
LitemallOrder order = orderService.findById(id);
return ResponseUtil.ok(order);
}
/*
* 目前仅仅支持管理员设置发货相关的信息
*/
@PostMapping("/update")
public Object update(@LoginAdmin Integer adminId, @RequestBody LitemallOrder order){
if(adminId == null){
return ResponseUtil.unlogin();
}
Integer orderId = order.getId();
if(orderId == null){
return ResponseUtil.badArgument();
}
LitemallOrder litemallOrder = orderService.findById(orderId);
if(litemallOrder == null){
return ResponseUtil.badArgumentValue();
}
if(OrderUtil.isPayStatus(litemallOrder) || OrderUtil.isShipStatus(litemallOrder)){
LitemallOrder newOrder = new LitemallOrder();
newOrder.setId(orderId);
newOrder.setShipChannel(order.getShipChannel());
newOrder.setShipSn(order.getOrderSn());
newOrder.setShipStartTime(order.getShipStartTime());
newOrder.setShipEndTime(order.getShipEndTime());
newOrder.setOrderStatus(OrderUtil.STATUS_SHIP);
orderService.update(newOrder);
}
else {
return ResponseUtil.badArgumentValue();
}
litemallOrder = orderService.findById(orderId);
return ResponseUtil.ok(litemallOrder);
}
@PostMapping("/delete")
public Object delete(@LoginAdmin Integer adminId, @RequestBody LitemallOrder order){
if(adminId == null){
return ResponseUtil.unlogin();
}
return ResponseUtil.unsupport();
}
/** /**
* 订单退款确认 * 订单退款确认
* 1. 检测当前订单是否能够退款确认 * 1. 检测当前订单是否能够退款确认
...@@ -139,12 +73,13 @@ public class AdminOrderController { ...@@ -139,12 +73,13 @@ public class AdminOrderController {
* 成功则 { errno: 0, errmsg: '成功' } * 成功则 { errno: 0, errmsg: '成功' }
* 失败则 { errno: XXX, errmsg: XXX } * 失败则 { errno: XXX, errmsg: XXX }
*/ */
@PostMapping("refundConfirm") @PostMapping("refund")
public Object refundConfirm(@LoginAdmin Integer adminId, @RequestBody String body) { public Object refund(@LoginAdmin Integer adminId, @RequestBody String body) {
if (adminId == null) { if (adminId == null) {
return ResponseUtil.unlogin(); return ResponseUtil.unlogin();
} }
Integer orderId = JacksonUtil.parseInteger(body, "orderId"); Integer orderId = JacksonUtil.parseInteger(body, "orderId");
Integer refundMoney = JacksonUtil.parseInteger(body, "refundMoney");
if (orderId == null) { if (orderId == null) {
return ResponseUtil.badArgument(); return ResponseUtil.badArgument();
} }
...@@ -153,13 +88,14 @@ public class AdminOrderController { ...@@ -153,13 +88,14 @@ public class AdminOrderController {
if (order == null) { if (order == null) {
return ResponseUtil.badArgument(); return ResponseUtil.badArgument();
} }
if (!order.getUserId().equals(adminId)) {
if(order.getActualPrice().compareTo(new BigDecimal(refundMoney)) != 0){
return ResponseUtil.badArgumentValue(); return ResponseUtil.badArgumentValue();
} }
OrderHandleOption handleOption = OrderUtil.build(order); // 如果订单不是退款状态,则不能退款
if (!handleOption.isRefund()) { if (!order.getOrderStatus().equals(OrderUtil.STATUS_REFUND)) {
return ResponseUtil.fail(403, "订单不能取消"); return ResponseUtil.fail(403, "订单不能确认收货");
} }
// 开启事务管理 // 开启事务管理
...@@ -217,9 +153,6 @@ public class AdminOrderController { ...@@ -217,9 +153,6 @@ public class AdminOrderController {
if (order == null) { if (order == null) {
return ResponseUtil.badArgument(); return ResponseUtil.badArgument();
} }
if (!order.getUserId().equals(adminId)) {
return ResponseUtil.badArgumentValue();
}
// 如果订单不是已付款状态,则不能发货 // 如果订单不是已付款状态,则不能发货
if (!order.getOrderStatus().equals(OrderUtil.STATUS_PAY)) { if (!order.getOrderStatus().equals(OrderUtil.STATUS_PAY)) {
......
...@@ -8,33 +8,17 @@ export function listOrder(query) { ...@@ -8,33 +8,17 @@ export function listOrder(query) {
}) })
} }
export function createOrder(data) { export function shipOrder(data) {
return request({ return request({
url: '/order/create', url: '/order/ship',
method: 'post', method: 'post',
data data
}) })
} }
export function readOrder(data) { export function refundOrder(data) {
return request({ return request({
url: '/order/read', url: '/order/refund',
method: 'get',
data
})
}
export function updateOrder(data) {
return request({
url: '/order/update',
method: 'post',
data
})
}
export function deleteOrder(data) {
return request({
url: '/order/delete',
method: 'post', method: 'post',
data data
}) })
......
...@@ -49,6 +49,8 @@ service.interceptors.response.use( ...@@ -49,6 +49,8 @@ service.interceptors.response.use(
type: 'error' type: 'error'
}) })
return Promise.reject('error') return Promise.reject('error')
} else if (res.errno !== 0) {
return Promise.reject('error')
} else { } else {
return response return response
} }
......
...@@ -25,17 +25,14 @@ ...@@ -25,17 +25,14 @@
<el-table-column align="center" min-width="100px" label="用户ID" prop="userId"> <el-table-column align="center" min-width="100px" label="用户ID" prop="userId">
</el-table-column> </el-table-column>
<el-table-column align="center" min-width="100px" label="订单编号" prop="orderSn"> <el-table-column align="center" min-width="200px" label="订单编号" prop="orderSn">
</el-table-column> </el-table-column>
<el-table-column align="center" min-width="100px" label="订单状态" prop="orderStatus"> <el-table-column align="center" min-width="100px" label="订单状态" prop="orderStatus">
</el-table-column>
<el-table-column align="center" min-width="100px" label="是否删除" prop="isDelete">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag :type="scope.row.isDelete ? 'success' : 'error' ">{{scope.row.isDelete ? '未删除' : '已删除'}}</el-tag> <el-tag>{{scope.row.orderStatus | orderStatusFilter}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" min-width="100px" label="订单费用" prop="orderPrice"> <el-table-column align="center" min-width="100px" label="订单费用" prop="orderPrice">
</el-table-column> </el-table-column>
...@@ -43,10 +40,10 @@ ...@@ -43,10 +40,10 @@
<el-table-column align="center" min-width="100px" label="实际费用" prop="actualPrice"> <el-table-column align="center" min-width="100px" label="实际费用" prop="actualPrice">
</el-table-column> </el-table-column>
<el-table-column align="center" label="操作" width="250" class-name="small-padding fixed-width"> <el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleSend(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="handleRecv(scope.row)">收货</el-button> <el-button type="primary" size="mini" @click="handleRefund(scope.row)" v-if="scope.row.orderStatus==202">退款</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -59,46 +56,31 @@ ...@@ -59,46 +56,31 @@
</div> </div>
<!-- 发货对话框 --> <!-- 发货对话框 -->
<el-dialog title="发货" :visible.sync="sendDialogFormVisible"> <el-dialog title="发货" :visible.sync="shipDialogVisible">
<el-form ref="dataForm" :model="dataForm" status-icon label-position="left" label-width="100px" style='width: 400px; margin-left:50px;'> <el-form ref="shipForm" :model="shipForm" status-icon label-position="left" label-width="100px" style='width: 400px; margin-left:50px;'>
<el-form-item label="快递公司" prop="shipChannel"> <el-form-item label="快递公司" prop="shipChannel">
<el-input v-model="dataForm.shipChannel"></el-input> <el-input v-model="shipForm.shipChannel"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="快递编号" prop="shipSn"> <el-form-item label="快递编号" prop="shipSn">
<el-input v-model="dataForm.shipSn"></el-input> <el-input v-model="shipForm.shipSn"></el-input>
</el-form-item>
<el-form-item label="快递发货时间" prop="shipStartTime">
<el-date-picker v-model="dataForm.shipStartTime" type="datetime" placeholder="选择日期时间">
</el-date-picker>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="sendDialogFormVisible = false">取消</el-button> <el-button @click="shipDialogVisible = false">取消</el-button>
<el-button type="primary" @click="sendData">确定</el-button> <el-button type="primary" @click="confirmShip">确定</el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 收货对话框 --> <!-- 退款对话框 -->
<el-dialog title="收货" :visible.sync="recvDialogFormVisible"> <el-dialog title="退款" :visible.sync="refundDialogVisible">
<el-form ref="dataForm" :model="dataForm" status-icon label-position="left" label-width="100px" style='width: 400px; margin-left:50px;'> <el-form ref="refundForm" :model="refundForm" status-icon label-position="left" label-width="100px" style='width: 400px; margin-left:50px;'>
<el-form-item label="快递公司" prop="shipChannel"> <el-form-item label="退款金额" prop="refundMoney">
<el-input disabled v-model="dataForm.shipChannel"></el-input> <el-input v-model="refundForm.refundMoney" :disabled="true"></el-input>
</el-form-item>
<el-form-item label="快递编号" prop="shipSn">
<el-input disabled v-model="dataForm.shipSn"></el-input>
</el-form-item>
<el-form-item label="快递发货时间" prop="shipStartTime">
<el-date-picker disabled v-model="dataForm.shipStartTime" type="datetime" placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item label="快递收货时间" prop="shipEndTime">
<el-date-picker v-model="dataForm.shipEndTime" type="datetime" placeholder="选择日期时间">
</el-date-picker>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="recvDialogFormVisible = false">取消</el-button> <el-button @click="refundDialogVisible = false">取消</el-button>
<el-button type="primary" @click="recvData">确定</el-button> <el-button type="primary" @click="confirmRefund">确定</el-button>
</div> </div>
</el-dialog> </el-dialog>
...@@ -120,7 +102,7 @@ ...@@ -120,7 +102,7 @@
</style> </style>
<script> <script>
import { listOrder, updateOrder } from '@/api/order' import { listOrder, shipOrder, refundOrder } from '@/api/order'
import waves from '@/directive/waves' // 水波纹指令 import waves from '@/directive/waves' // 水波纹指令
export default { export default {
...@@ -140,18 +122,36 @@ export default { ...@@ -140,18 +122,36 @@ export default {
name: undefined, name: undefined,
sort: '+id' sort: '+id'
}, },
dataForm: { shipForm: {
id: undefined, orderId: undefined,
shipChannel: undefined, shipChannel: undefined,
shipSn: undefined, shipSn: undefined
shipStartTime: undefined, },
shipEndTime: undefined shipDialogVisible: false,
refundForm: {
orderId: undefined,
refundMoney: undefined
}, },
sendDialogFormVisible: false, refundDialogVisible: false,
recvDialogFormVisible: false,
downloadLoading: false downloadLoading: false
} }
}, },
filters: {
orderStatusFilter(status) {
const statusMap = {
'101': '未付款',
'102': '已取消',
'103': '已取消',
'201': '已付款',
'202': '申请退款',
'203': '已退款',
'301': '已发货',
'401': '确认收货',
'402': '确认收货'
}
return statusMap[status]
}
},
created() { created() {
this.getList() this.getList()
}, },
...@@ -180,69 +180,53 @@ export default { ...@@ -180,69 +180,53 @@ export default {
this.listQuery.page = val this.listQuery.page = val
this.getList() this.getList()
}, },
resetForm(row) { handleShip(row) {
this.dataForm.id = row.id this.shipForm.orderId = row.id
this.dataForm.shipChannel = row.shipChannel this.shipForm.shipChannel = row.shipChannel
this.dataForm.shipSn = row.shipSn this.shipForm.shipSn = row.shipSn
this.dataForm.shipStartTime = row.shipStartTime
this.dataForm.shipEndTime = row.shipEndTime this.shipDialogVisible = true
},
handleSend(row) {
this.resetForm(row)
this.sendDialogFormVisible = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['dataForm'].clearValidate() this.$refs['shipForm'].clearValidate()
}) })
}, },
sendData() { confirmShip() {
this.$refs['dataForm'].validate((valid) => { this.$refs['shipForm'].validate((valid) => {
if (valid) { if (valid) {
updateOrder(this.dataForm).then(response => { shipOrder(this.shipForm).then(response => {
const updatedOrder = response.data.data this.shipDialogVisible = false
for (const v of this.list) {
if (v.id === updatedOrder.id) {
const index = this.list.indexOf(v)
this.list.splice(index, 1, updatedOrder)
break
}
}
this.sendDialogFormVisible = false
this.$notify({ this.$notify({
title: '成功', title: '成功',
message: '更新成功', message: '确认发货成功',
type: 'success', type: 'success',
duration: 2000 duration: 2000
}) })
this.getList()
}) })
} }
}) })
}, },
handleRecv(row) { handleRefund(row) {
this.resetForm(row) this.refundForm.orderId = row.id
this.recvDialogFormVisible = true this.refundForm.refundMoney = row.actualPrice
this.refundDialogVisible = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['dataForm'].clearValidate() this.$refs['refundForm'].clearValidate()
}) })
}, },
recvData() { confirmRefund() {
this.$refs['dataForm'].validate((valid) => { this.$refs['refundForm'].validate((valid) => {
if (valid) { if (valid) {
updateOrder(this.dataForm).then(response => { refundOrder(this.refundForm).then(response => {
const updatedOrder = response.data.data this.refundDialogVisible = false
for (const v of this.list) {
if (v.id === updatedOrder.id) {
const index = this.list.indexOf(v)
this.list.splice(index, 1, updatedOrder)
break
}
}
this.recvDialogFormVisible = false
this.$notify({ this.$notify({
title: '成功', title: '成功',
message: '更新成功', message: '确认退款成功',
type: 'success', type: 'success',
duration: 2000 duration: 2000
}) })
this.getList()
}) })
} }
}) })
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment