Files
ysdH5/pages/order/order.vue
2023-06-21 17:19:58 +08:00

365 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<!-- 活动订单 -->
<view class="order-tab">
<view class="order-tab-item" :class="{active : order.stateType == 'all'}" @click="orderTab('all')">
全部
</view>
<view class="order-tab-item" :class="{active : order.stateType == 'unpay'}" @click="orderTab('unpay')">
待支付
</view>
<view class="order-tab-item" :class="{active : order.stateType == 'paid'}" @click="orderTab('paid')">
{{order.orderType == 'welfare' || order.orderType == 'rights' ? '待发货' : '已支付'}}
</view>
<view class="order-tab-item" :class="{active : order.stateType == 'delivered'}" @click="orderTab('delivered')" v-if="order.orderType == 'welfare' || order.orderType == 'rights'">
已发货
</view>
<view class="order-tab-item" :class="{active : order.stateType == 'completed'}" @click="orderTab('completed')" v-else>
已完成
</view>
</view>
<!-- 列表 -->
<view class="order-content" v-if="order.orderArr.length > 0">
<view class="order-content-li" v-for="(item,index) in order.orderArr" :key="index">
<view class="uni-border-down order-store">
<view class="order-store-title nowrap">{{ item.orderid }}</view>
<view class="order-store-stateText red" v-if="item.state_text == '未支付' || item.status_text == '未支付'">
{{ item.state_text ||item.status_text }}
</view>
<view class="order-store-stateText green" v-else-if="item.state_text == '已支付' || item.status_text == '已支付'">
{{ item.state_text || item.status_text }}
</view>
<view class="order-store-stateText" v-else>{{ item.state_text || item.status_text }}</view>
</view>
<view class="order-goods">
<image class="order-goods-cover" v-if="item.items" :src="item.items.cover" mode="aspectFill"></image>
<image class="order-goods-cover" v-else-if="item.source" :src="item.source.right.cover" mode="aspectFill"></image>
<view class="order-goods-content">
<!-- 名称 -->
<view class="order-goods-content-name nowrap" v-if="item.items">{{ item.items.title }}</view>
<view class="order-goods-content-name nowrap" v-else-if="item.source">{{ item.source.right.title }}</view>
<!-- 权益标签 实物或券 -->
<view class="orderVirtual" v-if="order.orderType == 'welfare'">{{ item.type_text }}</view>
<view class="orderVirtual" v-else-if="order.orderType == 'welfareGoods'">{{ item.type_text }}</view>
<view class="orderVirtual" :class="{active : item.items.type != 'virtual'}" v-else>
<block v-if="item.items.type == 'virtual'">红包电子券</block>
<block v-else>实物券</block>
</view>
<!-- 权益购买数量 -->
<view class="order-goods-content-price nowrap" v-if="item.items">
<text>{{ item.items.price }}</text> × {{ item.items.qty ? item.items.qty : '1' }}
</view>
<view class="order-goods-content-price nowrap" v-else-if="item.source">
<text>{{ item.source.welfare.price }}</text>× 1
</view>
</view>
</view>
<view class="uni-border-top order-btns">
<navigator class="order-btn" :url="'/pages/order/orderData?id=' + item.orderid + '&orderType=' + order.orderType">订单详情</navigator>
<!-- 取消订单 -->
<view class="order-btn" @click="orderDelete(item.orderid)" v-if="item.canCancel == true">取消订单</view>
<block v-if="item.can">
<view class="order-btn" @click="orderDelete(item.orderid)" v-if="item.can.cancel == true">取消订单</view>
</block>
<!-- 立即支付 -->
<view class="order-btn order-btn-back" @click="submitPay(item.orderid)" v-if="item.canPay == true">立即支付</view>
<block v-if="item.can">
<view class="order-btn order-btn-back" @click="submitPay(item.orderid)" v-if="item.can.pay == true">立即支付</view>
</block>
</view>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/img/null_icon.png"></image>
<view>暂无订单</view>
</view>
</view>
</template>
<script>
import { welfare, welfareCoupons, orders, ordersCoupons, cancel, welfaresCancel } from '@/apis/interfaces/user'
import { rightsSingle } from '@/apis/interfaces/rights'
import { welfSingle } from '@/apis/interfaces/welfares'
export default {
data() {
return {
order: {
orderType : '', // 订单来源
stateType : 'all', // 状态
orderArr : [] // 列表
},
load: {
page : 1, // 第一页
allpage : 0, // 总页数
has_more: false, // 是否有分页
show : false // 是否有下一页数据
},
finished : false, // 商品列表没有更多商品是否显示
LoadData : false // 数据加载完渲染
}
},
onLoad(options) {
this.order.orderType = options.orderType
},
onShow() {
// 获取商品活动订单
this.orderInfo();
},
methods:{
// 商品活动订单
orderInfo() {
if (this.load.page == 1) {
this.order.orderArr = [];
}
let url = ''
if(this.order.orderType == 'welfare') url = welfare
if(this.order.orderType == 'welfareGoods') url = welfareCoupons
if(this.order.orderType == 'rights') url = orders
if(this.order.orderType == 'rightsCoupons') url = ordersCoupons
url({
type : this.order.stateType,
page : this.load.page
}).then(res=>{
this.order.orderArr = this.order.orderArr.concat(res.data)
this.load.allpage = res.page.total_page
this.load.has_more = res.page.has_more
})
},
// tabs
orderTab(state){
if(this.order.stateType != state){
this.order.stateType = state
// 获取商品活动订单
this.orderInfo()
}
},
// 取消订单
orderDelete(orderId) {
uni.showModal({
title : '订单取消',
content : '确认取消吗?',
success : res=> {
if (res.confirm) {
let url = ''
if(this.order.orderType == 'welfare' || this.order.orderType == 'welfareGoods') url = welfaresCancel
if(this.order.orderType == 'rights' || this.order.orderType == 'rightsCoupons') url = cancel
url(orderId).then(res=>{
// 获取商品活动订单
this.orderInfo()
})
} else if (res.cancel) {
uni.showToast({
title : '取消',
icon : 'loading',
duration: 1000
})
}
}
})
},
// 支付选择弹出
submitPay(orderid) {
let new_activity_type = '',
new_deliver = ''
// welfareGoods welfare
if(this.order.orderType == 'welfare') {
new_activity_type = 'welfare'
new_deliver = 0
this.welfSingleData(orderid).then(res => {
this.navigateUrl(res.trade_no,res.amount,new_deliver,new_activity_type)
})
}
else if(this.order.orderType == 'welfareGoods') {
new_activity_type = 'welfare'
new_deliver = 1
this.welfSingleData(orderid).then(res => {
this.navigateUrl(res.trade_no,res.amount,new_deliver,new_activity_type)
})
}
else if(this.order.orderType == 'rights') {
new_activity_type = 'right'
new_deliver = 0
this.rightsSingleData(orderid).then(res => {
this.navigateUrl(res.trade_no,res.amount,new_deliver,new_activity_type)
})
}
else {
new_activity_type = 'right'
new_deliver = 1
this.rightsSingleData(orderid).then(res => {
this.navigateUrl(res.trade_no,res.amount,new_deliver,new_activity_type)
})
}
},
// 周五福利单订单
welfSingleData(tradeNo) {
return new Promise((resolve, reject) => {
welfSingle(tradeNo).then(res=>{
resolve(res)
})
})
},
// 权益单订单
rightsSingleData(tradeNo) {
return new Promise((resolve, reject) => {
rightsSingle(tradeNo).then(res=>{
resolve(res)
})
})
},
// 跳转收银台
navigateUrl(orderid,newPrice,new_deliver,new_activity_type) {
uni.navigateTo({
url: "/pages/cashier/index?tradeNo=" + orderid + '&price=' + newPrice + "&deliver=" + new_deliver + "&activity_type=" + new_activity_type + "&type=default"
})
}
}
}
</script>
<style lang="scss" scoped>
// 活动订单
.order-tab {
position: fixed;
left: 0;
top: 0;
width: 100%;
display: flex;
height: 80rpx;
line-height: 80rpx;
z-index: 9;
background: white;
.order-tab-item {
font-size: 28rpx;
width: 25%;
text-align: center;
border-bottom: solid 2rpx #f7f7f7;
color: #464854;
background: white;
position: relative;
&.active {
color: #f57e32;
}
&::after {
content: '';
position: absolute;
width: 30rpx;
height: 4rpx;
background: transparent;
left: calc(50% - 15rpx);
bottom: -2rpx;
}
&.active::after {
background: #f57e32;
}
}
}
/* 订单列表 */
.order-content {
padding: 80rpx 0 20rpx 0;
.order-content-li {
background: white;
margin-top: 20rpx;
position: relative;
.order-store {
padding: 20rpx;
border-bottom: solid 1rpx #f3f3f3;
display: flex;
.order-store-title {
flex: 1;
color: #999;
font-size: 28rpx;
}
.order-store-stateText {
color: #e6b329;
font-size: 26rpx;
&.red {
color: #e92344;
}
&.green {
color: #79b300;
}
}
}
.order-goods {
padding: 20rpx;
box-sizing: border-box;
position: relative;
.order-goods-cover {
width: 150rpx;
height: 150rpx;
vertical-align: top;
border-radius: 4rpx;
}
.order-goods-content {
position: absolute;
left: 190rpx;
top: 20rpx;
right: 20rpx;
width: calc(100% - 210rpx);
.order-goods-content-name {
margin-bottom: 10rpx;
font-size: 30rpx;
font-weight: 600;
}
.orderVirtual {
background: #88be2d;
color: #fff;
border-radius: 4rpx;
display: inline-block;
font-size: 24rpx;
padding: 2rpx 8rpx;
&.active {
background: #f57e32;
}
}
.order-goods-content-price {
color: #747788;
display: flex;
margin-top: 10rpx;
font-size: 28rpx;
text {
color: #f57e32;
display: inline-block;
margin-right: 10rpx;
font-size: 30rpx;
}
}
}
}
.order-btns {
font-size: 25rpx;
display: flex;
padding: 20rpx;
box-sizing: border-box;
flex-wrap: wrap;
flex-direction: row-reverse;
.order-btn {
margin-left: 20rpx;
height: 52rpx;
line-height: 50rpx;
box-sizing: border-box;
border: solid 1rpx #747788;
padding: 0 20rpx;
border-radius: 30rpx;
}
.order-btn-back {
border-color: #f57e32;
color: #f57e32;
}
}
}
}
</style>