You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
727 lines
20 KiB
727 lines
20 KiB
<template>
|
|
<div class="orderList">
|
|
<div class="head">
|
|
<div style="flex: 9; padding-left: 20px">
|
|
<span style="flex: 5">宝贝</span>
|
|
<span style="flex: 2">单价</span>
|
|
<span style="flex: 2">数量</span>
|
|
</div>
|
|
<div style="flex: 8; padding-right: 20px">
|
|
<span style="flex: 1">实付款</span>
|
|
<span style="flex: 1">收货人</span>
|
|
<span style="flex: 1">状态</span>
|
|
<span style="flex: 1">操作</span>
|
|
</div>
|
|
</div>
|
|
<div v-if="flag">
|
|
<div class="content" v-for="(item, index) in orderList" :key="index">
|
|
<div class="top">
|
|
<div class="left">
|
|
<span class="shopName" @click="toStore(item.shopId)"
|
|
><img :src="item.shopLogo" alt="" />{{ item.shopName }}</span
|
|
>
|
|
<span class="time">{{ item.createTime }}</span>
|
|
<span class="orderCode">订单号:{{ item.orderFormid }}</span>
|
|
</div>
|
|
<div class="right">
|
|
<div @click="$emit('isDelete', item.orderId)">
|
|
<icon-svg
|
|
v-if="item.state == 5"
|
|
style="font-size: 24px; cursor: pointer;" icon-class="del"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="productBox">
|
|
<div class="product">
|
|
<div class="left fs13">
|
|
<div
|
|
class="box"
|
|
v-for="(items, indexs) in item.skus"
|
|
:key="indexs"
|
|
>
|
|
<div
|
|
class="desc cur-poi"
|
|
@click="toProductDetail(item.shopId, items)"
|
|
>
|
|
<img :src="items.image" alt="" />
|
|
<div>
|
|
<p class="name">{{ items.productName }}</p>
|
|
<p class="size font-color-999">
|
|
<span v-for="(val, idx) in items.values" :key="idx">{{
|
|
val
|
|
}}</span>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div class="price">¥{{ items.price }}</div>
|
|
<div class="num">
|
|
<p class="fs14">{{ items.number }}</p>
|
|
<!-- <p v-if="items.afterState === 1" class="fs14" style="color: #c83732;">
|
|
(售后审核中)
|
|
</p>
|
|
<p v-if="items.afterState === 2" class="fs14" style="color: #c83732;">
|
|
(退款中)
|
|
</p>
|
|
<p v-if="items.afterState === 3" class="fs14" style="color: #c83732;">
|
|
(退货中)
|
|
</p>
|
|
<p v-if="items.afterState === 4" class="fs14" style="color: #c83732;">
|
|
(退款成功)
|
|
</p>
|
|
<p v-if="items.afterState === 5" class="fs14" style="color: #c83732;">
|
|
(退款失败)
|
|
</p>
|
|
<p v-if="items.afterState === 6" class="fs14" style="color: #c83732;">
|
|
(审核不通过)
|
|
</p>
|
|
<p v-if="items.afterState === 7" class="fs14" style="color: #c83732;">
|
|
(售后评审中)
|
|
</p>
|
|
<p v-if="items.afterState === 8" class="fs14" style="color: #c83732;">
|
|
(退货完成,拒绝退款)
|
|
</p>
|
|
<p v-if="items.afterState === 10" class="fs14" style="color: #c83732;">
|
|
(售后审核通过)
|
|
</p> -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="right"
|
|
:class="item.skus.length > 1 ? 'right_line' : ''"
|
|
>
|
|
<div class="actualPay">
|
|
<div>
|
|
<p class="fs13 mar-bot-5">
|
|
¥{{ (item.orderPrice - item.discountPrice).toFixed(2) }}
|
|
</p>
|
|
<p class="fs13 colorRed">(含运费:¥{{ item.logisticsPrice }})</p>
|
|
</div>
|
|
</div>
|
|
<div class="consignee">{{ item.receiveName }}</div>
|
|
<div class="status">
|
|
<div>
|
|
<p
|
|
class="fs13 mar-bot-5 colorRed"
|
|
v-if="item.state == 1"
|
|
>
|
|
待付款
|
|
</p>
|
|
<div v-if="item.state == 1">
|
|
<p class="time fs12 mar-bot-10 font-color-999 flex-items">
|
|
<img
|
|
style="width: 13px; height: 13px; margin-right: 5px"
|
|
src="../../../static/image/alarm_clock@2x.png"
|
|
alt=""
|
|
/>
|
|
剩余时间{{ item.time | formatMinutes }}分
|
|
</p>
|
|
</div>
|
|
<p
|
|
class="fs13 mar-bot-5 colorGlod"
|
|
v-if="item.state == 2"
|
|
>
|
|
待发货
|
|
</p>
|
|
<p
|
|
class="fs13 mar-bot-5 colorGlod"
|
|
v-if="item.state == 3"
|
|
>
|
|
待收货
|
|
</p>
|
|
<p
|
|
class="fs13 mar-bot-5 font-color-999"
|
|
v-if="item.state == 4"
|
|
>
|
|
已完成
|
|
</p>
|
|
<p
|
|
class="fs13 mar-bot-5 font-color-999"
|
|
v-if="item.state == 5"
|
|
>
|
|
已关闭
|
|
</p>
|
|
<p
|
|
class="fs13 mar-bot-5 colorRed"
|
|
v-if="item.state == 6"
|
|
>
|
|
待成团
|
|
</p>
|
|
<p class="fs13 cur-poi" @click="toOrderDetail(item.orderId)">
|
|
订单详情
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div class="operate">
|
|
<div class="btnContainer">
|
|
<el-button
|
|
class="btn btnBlack"
|
|
size="small"
|
|
v-if="
|
|
item.state == 1 ||
|
|
(item.paymentState == 0 && item.state == 6)
|
|
"
|
|
@click="getUrl(item.orderId)"
|
|
v-throttle
|
|
>去付款</el-button>
|
|
<el-button
|
|
class="btn btnBlack"
|
|
size="small"
|
|
v-if="item.state == 2"
|
|
@click="remind(item.orderId)"
|
|
v-throttle
|
|
>提醒发货</el-button>
|
|
<el-button
|
|
class="btn btnBlack"
|
|
size="small"
|
|
v-if="item.state == 3 && item.ifAfter == 1"
|
|
@click="$emit('isConfirm', item.orderId)"
|
|
v-throttle
|
|
>确认收货</el-button>
|
|
<el-button
|
|
class="btn btnBlack"
|
|
size="small"
|
|
v-if="item.state == 4 || item.state == 5"
|
|
@click="buyAgain(item)"
|
|
v-throttle
|
|
>再次购买</el-button>
|
|
<p
|
|
class="btn"
|
|
@click="$emit('isCancel', item.orderId)"
|
|
v-if="item.state == 1 || item.state == 6"
|
|
v-throttle
|
|
>
|
|
取消订单
|
|
</p>
|
|
<p
|
|
class="btn"
|
|
@click="toAfterSale(item)"
|
|
v-if="item.state == 2 && !item.afterState"
|
|
v-throttle
|
|
>
|
|
退货/退款
|
|
</p>
|
|
<p
|
|
class="btn"
|
|
@click="$emit('isRefund', item)"
|
|
v-if="
|
|
((item.state == 3 && item.ifAfter)
|
|
|| (item.state == 4 && item.ifAfter))
|
|
&& !item.afterState
|
|
"
|
|
v-throttle
|
|
>
|
|
退货/退款
|
|
</p>
|
|
<p
|
|
class="btn"
|
|
v-if="item.state == 4 && item.ifNotComment === 1"
|
|
@click="toEvaluate(item)"
|
|
v-throttle
|
|
>
|
|
评价
|
|
</p>
|
|
<p
|
|
class="btn"
|
|
v-if="item.state == 3"
|
|
@click="toOrderDetail(item.orderId)"
|
|
v-throttle
|
|
>
|
|
查看物流
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<el-pagination
|
|
:current-page="page"
|
|
:page-size="5"
|
|
@current-change="handleCurrentChange"
|
|
background
|
|
layout="prev, pager, next"
|
|
:total="total"
|
|
></el-pagination>
|
|
</div>
|
|
<div class="noorder" v-else>
|
|
<icon-svg
|
|
style="width: 240px; height: 240px; margin-bottom: 20px"
|
|
icon-class="user-order-nodata"
|
|
/>
|
|
<p class="fs20 font-color-999">你还没有订单哦~</p>
|
|
<router-link to="/">
|
|
<el-button>去首页看看</el-button>
|
|
</router-link>
|
|
</div>
|
|
<el-dialog
|
|
class="weChat"
|
|
title="微信支付"
|
|
:visible.sync="weChatDialog"
|
|
:before-close="handleClose"
|
|
width="300px"
|
|
>
|
|
<div class="qCode">
|
|
<div class="wechatTitle">
|
|
<div class="tips">
|
|
<p>请使用微信扫一扫</p>
|
|
<p>扫描二维码支付</p>
|
|
</div>
|
|
<div>¥{{ payInfo.money }}</div>
|
|
</div>
|
|
<img class="code" :src="payInfo.url" alt="">
|
|
</div>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapMutations } from 'vuex'
|
|
|
|
import {
|
|
buyItAgain,
|
|
checkOrderResult,
|
|
orderPayCode
|
|
} from '@/api/user/order.js'
|
|
import {
|
|
getCartList
|
|
} from '@/api/user/cart.js'
|
|
|
|
export default {
|
|
props: ['orderList', 'total', 'page', 'flag'],
|
|
data () {
|
|
return {
|
|
payInfo: {},
|
|
weChatDialog: false,
|
|
chatTimer: '',
|
|
endTime: '',
|
|
endTime1: ''
|
|
}
|
|
},
|
|
filters: {
|
|
formatMinutes: function (value) {
|
|
let minutes = Math.floor((value % (1000 * 60 * 60)) / (1000 * 60))
|
|
if (minutes < 10) {
|
|
return '0' + minutes
|
|
} else {
|
|
return minutes
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
...mapMutations({
|
|
setCartNumber: 'SET_CARTNUMBER',
|
|
setShoppingCart: 'SET_SHOPPINGCART'
|
|
}),
|
|
// 跳转到商品详情
|
|
toProductDetail (id, item) {
|
|
let data = {
|
|
shopId: id,
|
|
productId: item.productId,
|
|
skuId: item.skuId
|
|
}
|
|
this.$router.push({
|
|
path: '/productDetail',
|
|
query: {
|
|
proData: JSON.stringify(data)
|
|
}
|
|
})
|
|
},
|
|
// 分页器跳转
|
|
handleCurrentChange (val) {
|
|
this.$emit('handleCurrentChange', val)
|
|
},
|
|
// 提醒发货
|
|
remind (id) {
|
|
this.$message({
|
|
message: '已提醒卖家发货',
|
|
type: 'success'
|
|
})
|
|
},
|
|
// 跳转到店铺
|
|
toStore (id) {
|
|
this.$router.push({
|
|
path: '/store',
|
|
query: {
|
|
shopId: id
|
|
}
|
|
})
|
|
},
|
|
// 跳转到订单详情
|
|
toOrderDetail (id) {
|
|
this.$router.push({
|
|
path: '/orderDetail',
|
|
query: {
|
|
orderId: id
|
|
}
|
|
})
|
|
},
|
|
// 再次购买
|
|
async buyAgain (item) {
|
|
if (item.shopDiscountId !== 0 || item.shopGroupWorkId !== 0 || item.shopSeckillId !== 0) {
|
|
this.$message.warning('活动商品无法再次购买')
|
|
return
|
|
}
|
|
const response = await buyItAgain({ orderId: item.orderId })
|
|
const res = response.data
|
|
if (res.code === '200') {
|
|
this.$router.push('/shopping-trolley')
|
|
} else {
|
|
this.$message({
|
|
message: res.message,
|
|
type: 'warning'
|
|
})
|
|
}
|
|
},
|
|
// 跳转到评价
|
|
toEvaluate (data) {
|
|
console.log(data)
|
|
this.$router.push({
|
|
path: '/evaluate',
|
|
query: {
|
|
product: JSON.stringify(data)
|
|
}
|
|
})
|
|
},
|
|
// 申请售后
|
|
toAfterSale (item) {
|
|
this.$router.push({
|
|
path: '/afterSale',
|
|
query: {
|
|
orderData: JSON.stringify(item),
|
|
state: 1
|
|
}
|
|
})
|
|
},
|
|
// 去支付
|
|
checkPay (data) {
|
|
setTimeout(() => {
|
|
checkOrderResult({
|
|
collageId: data.collageId,
|
|
money: data.money,
|
|
orderId: data.orderId,
|
|
type: 2
|
|
}).then(response => {
|
|
const res = response.data
|
|
if (res.code === '200') {
|
|
if (res.data.code === 'SUCCESS') {
|
|
this.$message.success('支付成功!')
|
|
clearInterval(this.chatTimer)
|
|
this.getTrolleyList()
|
|
this.weChatDialog = false
|
|
this.toOrderDetail(data.orderId)
|
|
}
|
|
} else {
|
|
clearInterval(this.chatTimer)
|
|
this.$message.error(res.message)
|
|
this.weChatDialog = false
|
|
}
|
|
})
|
|
}, 0)
|
|
},
|
|
// 购物车列表
|
|
async getTrolleyList () {
|
|
const response = await getCartList()
|
|
const res = response.data
|
|
let cartNumber = 0
|
|
if (res.data.length) {
|
|
res.data.forEach((j) => {
|
|
cartNumber = cartNumber + j.skus.length
|
|
})
|
|
}
|
|
this.setShoppingCart(res.data)
|
|
this.setCartNumber(cartNumber)
|
|
},
|
|
// 去支付
|
|
async getUrl (id) {
|
|
const response = await orderPayCode({ orderId: id })
|
|
const res = response.data
|
|
if (res.code === '200') {
|
|
this.payInfo = res.data
|
|
this.weChatDialog = true
|
|
this.chatTimer = setInterval(() => {
|
|
this.checkPay(res.data)
|
|
}, 3000)
|
|
} else {
|
|
this.$message.error(res.message)
|
|
}
|
|
},
|
|
handleClose () {
|
|
this.$confirm('确认取消支付?')
|
|
.then((_) => {
|
|
clearInterval(this.chatTimer)
|
|
this.weChatDialog = false
|
|
})
|
|
.catch((_) => {})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.orderList {
|
|
width: 100%;
|
|
.colorRed{
|
|
color: #C83732;
|
|
}
|
|
.colorGlod{
|
|
color: #C5AA7B;
|
|
}
|
|
.noorder {
|
|
width: 100%;
|
|
text-align: center;
|
|
padding: 100px 0;
|
|
p {
|
|
margin-bottom: 20px;
|
|
}
|
|
.el-button {
|
|
width: 200px;
|
|
height: 50px;
|
|
padding: 0;
|
|
background-color: $mainColor;
|
|
color: $mainBtnFontColor;
|
|
font-size: 14px;
|
|
font-family: Microsoft YaHei;
|
|
border-radius: 0;
|
|
}
|
|
}
|
|
.head {
|
|
box-sizing: border-box;
|
|
width: 100%;
|
|
height: 50px;
|
|
// background-color: #F1F2F7;
|
|
background: #ffffff;
|
|
border: 2px solid #f3f4f5;
|
|
display: flex;
|
|
align-items: center;
|
|
text-align: center;
|
|
margin-bottom: 10px;
|
|
div {
|
|
display: flex;
|
|
}
|
|
}
|
|
.content {
|
|
width: 100%;
|
|
margin-bottom: 20px;
|
|
border: 1px solid #e5e5e5;
|
|
// border-bottom: 0;
|
|
box-sizing: border-box;
|
|
&:hover{
|
|
border-color: $mainColor;
|
|
.top{
|
|
background-color: $mainColor;
|
|
}
|
|
}
|
|
.top {
|
|
width: 100%;
|
|
font-size: 13px;
|
|
height: 40px;
|
|
color: #fff;
|
|
background-color: #333333;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
.left {
|
|
flex: 15;
|
|
height: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
.shopName {
|
|
display: inline-block;
|
|
margin-left: 20px;
|
|
min-width: 150px;
|
|
cursor: pointer;
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
img {
|
|
width: 16px;
|
|
height: 16px;
|
|
vertical-align: middle;
|
|
margin-right: 5px;
|
|
}
|
|
}
|
|
.time {
|
|
margin-right: 60px;
|
|
}
|
|
}
|
|
.right {
|
|
flex: 2;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
// padding-right: 20px;
|
|
}
|
|
}
|
|
.productBox {
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
.product {
|
|
width: 100%;
|
|
display: flex;
|
|
.left {
|
|
flex: 9;
|
|
.box {
|
|
padding: 20px 0 20px 20px;
|
|
display: flex;
|
|
border-bottom: 1px solid #e5e5e5;
|
|
.desc {
|
|
flex: 5;
|
|
display: flex;
|
|
img {
|
|
width: 100px;
|
|
height: 100px;
|
|
margin-right: 10px;
|
|
}
|
|
div {
|
|
width: 100%;
|
|
margin-bottom: 10px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
.name {
|
|
font-size: 14px;
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
}
|
|
.size {
|
|
font-size: 13px;
|
|
span {
|
|
margin-right: 10px;
|
|
}
|
|
span:last-child {
|
|
margin-right: 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.price,
|
|
.num {
|
|
flex: 2;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
}
|
|
}
|
|
.right {
|
|
flex: 8;
|
|
display: flex;
|
|
border-bottom: 1px solid #e5e5e5;
|
|
.actualPay,
|
|
.consignee,
|
|
.status{
|
|
flex: 1;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
div {
|
|
text-align: center;
|
|
.el-button {
|
|
border: 1px solid $mainColor;
|
|
color: $mainColor;
|
|
border-radius: 0;
|
|
}
|
|
}
|
|
}
|
|
.operate{
|
|
flex: 1;
|
|
.btnContainer{
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
.btn{
|
|
width: 70px;
|
|
height: 30px;
|
|
margin: 2px;
|
|
padding: 0;
|
|
line-height: 30px;
|
|
text-align: center;
|
|
color: $mainColor;
|
|
border: 1px solid #F3F4F5;
|
|
font-size: 12px;
|
|
font-family: Microsoft YaHei;
|
|
cursor: pointer;
|
|
}
|
|
.btnBlack{
|
|
color: #FFEBC4 !important;
|
|
background: #333333;
|
|
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.16);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.right_line {
|
|
border-left: 1px solid #e5e5e5;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
>>> .el-pagination {
|
|
margin-top: 40px;
|
|
text-align: right;
|
|
.el-pager {
|
|
li:not(.disabled):hover {
|
|
color: $mainColor;
|
|
}
|
|
li:not(.disabled).active {
|
|
background-color: $mainColor;
|
|
}
|
|
li:not(.disabled).active:hover {
|
|
color: #f4f4f5;
|
|
}
|
|
}
|
|
}
|
|
.qCode {
|
|
.wechatTitle{
|
|
width: 280px;
|
|
margin: auto;
|
|
padding: 10px 15px;
|
|
color: #333;
|
|
border: 2px solid #F3F4F5;
|
|
display: flex;
|
|
justify-content: space-around;
|
|
align-items: center;
|
|
.tips{
|
|
flex: 1;
|
|
}
|
|
}
|
|
.code{
|
|
width: 280px;
|
|
height: 280px;
|
|
display: block;
|
|
margin: 10px auto;
|
|
border: 2px solid #F3F4F5;
|
|
}
|
|
}
|
|
.weChat {
|
|
>>> .el-dialog__body {
|
|
background: #ffffff;
|
|
}
|
|
}
|
|
>>> .el-dialog {
|
|
width: 33% !important;
|
|
.el-dialog__body {
|
|
background: #f8f8f8;
|
|
}
|
|
.el-dialog__header {
|
|
text-align: center;
|
|
}
|
|
.el-dialog__footer {
|
|
text-align: center;
|
|
.dialog-footer {
|
|
text-align: center;
|
|
button {
|
|
height: 45px;
|
|
width: 160px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|