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.
		
		
		
		
		
			
		
			
				
					
					
						
							303 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							303 lines
						
					
					
						
							11 KiB
						
					
					
				| <template> | |
|   <view class="my-order" ref="container"> | |
|     <view class="header bg-color-red"> | |
|       <view class="picTxt acea-row row-between-wrapper"> | |
|         <view class="text"> | |
|           <view class="name">订单信息</view> | |
|           <view>累计订单:{{ orderData.orderCount || 0 }} 总消费:¥{{ orderData.sumPrice || 0 }}</view> | |
|         </view> | |
|       </view> | |
|     </view> | |
|     <view class="nav acea-row row-around"> | |
|       <view class="item" :class="{ on: type === 0 }" @click="changeType(0)"> | |
|         <view>待付款</view> | |
|         <view class="num">{{ orderData.unpaidCount || 0 }}</view> | |
|       </view> | |
|       <view class="item" :class="{ on: type === 1 }" @click="changeType(1)"> | |
|         <view>待发货</view> | |
|         <view class="num">{{ orderData.unshippedCount || 0 }}</view> | |
|       </view> | |
|       <view class="item" :class="{ on: type === 2 }" @click="changeType(2)"> | |
|         <view>待收货</view> | |
|         <view class="num">{{ orderData.receivedCount || 0 }}</view> | |
|       </view> | |
|       <view class="item" :class="{ on: type === 3 }" @click="changeType(3)"> | |
|         <view>待评价</view> | |
|         <view class="num">{{ orderData.evaluatedCount || 0 }}</view> | |
|       </view> | |
|       <view class="item" :class="{ on: type === 4 }" @click="changeType(4)"> | |
|         <view>已完成</view> | |
|         <view class="num">{{ orderData.completeCount || 0 }}</view> | |
|       </view> | |
|     </view> | |
|     <view class="list"> | |
|       <view class="item" v-for="(order, orderListIndex) in orderList" :key="orderListIndex"> | |
|         <view class="title acea-row row-between-wrapper"> | |
|           <view class="acea-row row-middle"> | |
|             <span class="sign cart-color acea-row row-center-wrapper" v-if="order.combinationId > 0">拼团</span> | |
|             <span class="sign cart-color acea-row row-center-wrapper" v-if="order.seckillId > 0">秒杀</span> | |
|             <span class="sign cart-color acea-row row-center-wrapper" v-if="order.bargainId > 0">砍价</span> | |
|             <span class="sign cart-color acea-row row-center-wrapper" v-if="order.storeId > 0">门店</span> | |
|             {{ order.createTime }} | |
|           </view> | |
|           <view class="font-color-red">{{ getStatus(order) }}</view> | |
|         </view> | |
|         <view @click="goOrderDetails(order)"> | |
|           <view class="item-info acea-row row-between row-top" v-for="(cart, cartInfoIndex) in order.cartInfo" :key="cartInfoIndex"> | |
|             <view class="pictrue"> | |
|               <image :src="cart.productInfo.image" @click.stop="$yrouter.push({ path: '/pages/shop/GoodsCon/index', query: { id: cart.productInfo.id } })" v-if="cart.combinationId === 0 && cart.bargainId === 0 && cart.seckillId === 0" /> | |
|               <image | |
|                 :src="cart.productInfo.image" | |
|                 @click.stop=" | |
|                   $yrouter.push({ | |
|                     path: '/pages/activity/GroupDetails/index', | |
|                     query: { id: cart.combinationId }, | |
|                   }) | |
|                 " | |
|                 v-else-if="cart.combinationId > 0" | |
|               /> | |
|               <image | |
|                 :src="cart.productInfo.image" | |
|                 @click.stop=" | |
|                   $yrouter.push({ | |
|                     path: '/pages/activity/DargainDetails/index', | |
|                     query: { id: cart.bargainId }, | |
|                   }) | |
|                 " | |
|                 v-else-if="cart.bargainId > 0" | |
|               /> | |
|               <image | |
|                 :src="cart.productInfo.image" | |
|                 @click.stop=" | |
|                   $yrouter.push({ | |
|                     path: '/pages/activity/SeckillDetails/index', | |
|                     query: { id: cart.seckillId }, | |
|                   }) | |
|                 " | |
|                 v-else-if="cart.seckillId > 0" | |
|               /> | |
|             </view> | |
|             <view class="text acea-row row-between"> | |
|               <view class="name line2">{{ cart.productInfo.storeName }}</view> | |
|               <view class="money"> | |
|                 <view v-if="order.payType != 'integral'"> ¥{{ cart.productInfo.attrInfo ? cart.productInfo.attrInfo.price : cart.productInfo.price }} </view> | |
|                 <view v-if="order.payType == 'integral'"> {{ order.payIntegral }}积分 </view> | |
|                 <view>x{{ cart.cartNum }}</view> | |
|               </view> | |
|             </view> | |
|           </view> | |
|         </view> | |
|         <view class="totalPrice"> | |
|           共{{ order.cartInfo.length || 0 }}件商品,总金额 | |
|           <text class="money font-color-red" v-if="order.payType != 'integral'">¥{{ order.payPrice }}</text> | |
|           <text class="money font-color-red" v-if="order.payType == 'integral'">{{ order.payIntegral }}积分</text> | |
|         </view> | |
|         <view class="bottom acea-row row-right row-middle"> | |
|           <template v-if="order._status._type == 0"> | |
|             <view class="bnt cancelBnt" @click="cancelOrder(order)">取消订单</view> | |
|             <view class="bnt bg-color-red" @click="goOrderDetails(order)">立即付款</view> | |
|           </template> | |
|           <template v-if="order._status._type == 1 || order._status._type == 9"> | |
|             <view class="bnt bg-color-red" @click="goOrderDetails(order)">查看详情</view> | |
|           </template> | |
|           <template v-if="order._status._type == 2"> | |
|             <view class="bnt default" @click="goLogistics(order)">查看物流</view> | |
|             <view class="bnt bg-color-red" @click="takeOrder(order)">确认收货</view> | |
|           </template> | |
|           <template v-if="order._status._type == 3"> | |
|             <!--<view--> | |
|             <!--class="bnt default"--> | |
|             <!--@click="--> | |
|             <!--$yrouter.push({ path: '/pages/order/Logistics/index',query:{id:order.orderId}})--> | |
|             <!--"--> | |
|             <!--v-if="order.deliveryType == 'express'"--> | |
|             <!-->--> | |
|             <!--查看物流--> | |
|             <!--</view>--> | |
|             <view class="bnt bg-color-red" @click="goOrderDetails(order)">去评价</view> | |
|           </template> | |
|           <template v-if="order._status._type === 4"> | |
|             <view class="bnt bg-color-red" @click="goOrderDetails(order)">查看订单</view> | |
|           </template> | |
|         </view> | |
|       </view> | |
|     </view> | |
|     <view class="noCart" v-if="orderList.length === 0 && page > 1"> | |
|       <view class="pictrue"> | |
|         <image :src="`${$VUE_APP_RESOURCES_URL}/images/noOrder.png`" /> | |
|       </view> | |
|     </view> | |
|     <Loading :loaded="loaded" :loading="loading"></Loading> | |
|     <Payment v-model="pay" :types="payType" @checked="toPay" :balance="userInfo.nowMoney"></Payment> | |
|   </view> | |
| </template> | |
| <script> | |
| import { getOrderData, getOrderList } from '@/api/order' | |
| import { cancelOrderHandle, payOrderHandle, takeOrderHandle } from '@/libs/order' | |
| import Loading from '@/components/Loading' | |
| import Payment from '@/components/Payment' | |
| import DataFormat from '@/components/DataFormat' | |
| import { mapGetters } from 'vuex' | |
| import { isWeixin, dataFormat } from '@/utils' | |
|  | |
| const STATUS = ['待付款', '待发货', '待收货', '待评价', '已完成', '', '', '', '', '待付款'] | |
|  | |
| const NAME = 'MyOrder' | |
|  | |
| export default { | |
|   name: NAME, | |
|   data() { | |
|     return { | |
|       offlinePayStatus: 2, | |
|       orderData: {}, | |
|       type: '', | |
|       page: 1, | |
|       limit: 20, | |
|       loaded: false, | |
|       loading: false, | |
|       orderList: [], | |
|       pay: false, | |
|       payType: ['yue', 'weixin'], | |
|       from: this.$deviceType, | |
|     } | |
|   }, | |
|   components: { | |
|     Loading, | |
|     Payment, | |
|     DataFormat, | |
|   }, | |
|   computed: mapGetters(['userInfo']), | |
|   onShow: function() { | |
|     console.log(this) | |
|     this.type = parseInt(this.$yroute.query.type) || 0 | |
|     this.changeType(this.type) | |
|     this.getOrderData() | |
|     this.getOrderList() | |
|   }, | |
|   onHide: function() { | |
|     this.orderList = [] | |
|     this.page = 1 | |
|     this.limit = 20 | |
|     this.loaded = false | |
|     this.loading = false | |
|   }, | |
|   methods: { | |
|     goLogistics(order) { | |
|       this.$yrouter.push({ | |
|         path: '/pages/order/Logistics/index', | |
|         query: { id: order.orderId }, | |
|       }) | |
|     }, | |
|     goOrderDetails(order) { | |
|       this.$yrouter.push({ | |
|         path: '/pages/order/OrderDetails/index', | |
|         query: { id: order.orderId }, | |
|       }) | |
|     }, | |
|     dataFormat, | |
|     setOfflinePayStatus: function(status) { | |
|       var that = this | |
|       that.offlinePayStatus = status | |
|       if (status === 1) { | |
|         if (that.payType.indexOf('offline') < 0) { | |
|           that.payType.push('offline') | |
|         } | |
|       } | |
|     }, | |
|     getOrderData() { | |
|       getOrderData().then(res => { | |
|         this.orderData = res.data | |
|       }) | |
|     }, | |
|     takeOrder(order) { | |
|       takeOrderHandle(order.orderId).finally(() => { | |
|         this.reload() | |
|         this.getOrderData() | |
|       }) | |
|     }, | |
|     reload() { | |
|       this.changeType(this.type) | |
|     }, | |
|     changeType(type) { | |
|       this.type = type | |
|       this.orderList = [] | |
|       this.page = 1 | |
|       this.loaded = false | |
|       this.loading = false | |
|       this.getOrderList() | |
|     }, | |
|     getOrderList() { | |
|       if (this.loading || this.loaded) return | |
|       this.loading = true | |
|       const { page, limit, type } = this | |
|       getOrderList({ | |
|         page, | |
|         limit, | |
|         type, | |
|       }).then(res => { | |
|         this.orderList = this.orderList.concat(res.data) | |
|         this.page++ | |
|         this.loaded = res.data.length < this.limit | |
|         this.loading = false | |
|       }) | |
|     }, | |
|     getStatus(order) { | |
|       return STATUS[order._status._type] | |
|     }, | |
|     cancelOrder(order) { | |
|       cancelOrderHandle(order.orderId) | |
|         .then(() => { | |
|           this.getOrderData() | |
|           this.orderList.splice(this.orderList.indexOf(order), 1) | |
|         }) | |
|         .catch(() => { | |
|           this.reload() | |
|         }) | |
|     }, | |
|     paymentTap: function(order) { | |
|       var that = this | |
|       if (!(order.combinationId > 0 || order.bargainId > 0 || order.seckillId > 0)) { | |
|         that.setOfflinePayStatus(order.offlinePayStatus) | |
|       } | |
|       this.pay = true | |
|       this.toPay = type => { | |
|         payOrderHandle(order.orderId, type, that.from) | |
|           .then(() => { | |
|             const type = parseInt(this.$yroute.query.type) || 0 | |
|             that.changeType(type) | |
|             that.getOrderData() | |
|           }) | |
|           .catch(() => { | |
|             const type = parseInt(that.$yroute.query.type) || 0 | |
|             that.changeType(type) | |
|             that.getOrderData() | |
|           }) | |
|       } | |
|     }, | |
|     toPay() {}, | |
|   }, | |
|   mounted() {}, | |
|   onReachBottom() { | |
|     !this.loading && this.getOrderList() | |
|   }, | |
| } | |
| </script> | |
|  | |
| <style scoped lang="less"> | |
| .noCart { | |
|   margin-top: 0.17 * 100rpx; | |
|   padding-top: 0.1 * 100rpx; | |
| } | |
|  | |
| .noCart .pictrue { | |
|   width: 4 * 100rpx; | |
|   height: 3 * 100rpx; | |
|   overflow: hidden; | |
|   margin: 0.7 * 100rpx auto 0.5 * 100rpx auto; | |
| } | |
|  | |
| .noCart .pictrue image { | |
|   width: 4 * 100rpx; | |
|   height: 3 * 100rpx; | |
| } | |
| </style>
 | |
| 
 |