480 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			480 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| // +---------------------------------------------------------------------- // |
 | ||
| likeshop开源商城系统 //
 | ||
| +---------------------------------------------------------------------- // |
 | ||
| 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力 // |
 | ||
| gitee下载:https://gitee.com/likeshop_gitee // |
 | ||
| github下载:https://github.com/likeshop-github // |
 | ||
| 访问官网:https://www.likeshop.cn // | 访问社区:https://home.likeshop.cn // |
 | ||
| 访问手册:http://doc.likeshop.cn // | 微信公众号:likeshop技术社区 // |
 | ||
| likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
 | ||
| // |
 | ||
| likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
 | ||
| // | 禁止对系统程序代码以任何目的,任何形式的再发布 // |
 | ||
| likeshop团队版权所有并拥有最终解释权 //
 | ||
| +---------------------------------------------------------------------- // |
 | ||
| author: likeshop.cn.team //
 | ||
| +----------------------------------------------------------------------
 | ||
| 
 | ||
| <template>
 | ||
|   <view>
 | ||
|     <view class="order-list">
 | ||
|       <navigator
 | ||
|         v-for="(item, index) in orderList"
 | ||
|         :key="index"
 | ||
|         hover-class="none"
 | ||
|         class="order-item bg-white mt20"
 | ||
|         :url="'/pages/order_details/order_details?id=' + item.id"
 | ||
|       >
 | ||
|         <view class="order-header row-between">
 | ||
|           <view class="row">
 | ||
|             <view v-if="item.delivery_type == 2" class="mr10">
 | ||
|               <u-tag
 | ||
|                 text="自提"
 | ||
|                 size="mini"
 | ||
|                 type="primary"
 | ||
|                 mode="dark"
 | ||
|                 bg-color="#0cc21e"
 | ||
|               />
 | ||
|             </view>
 | ||
|             <view v-if="item.order_type == 1" class="mr10">
 | ||
|               <u-tag text="秒杀" size="mini" type="primary" mode="plain" />
 | ||
|             </view>
 | ||
|             <view v-if="item.order_type == 2" class="mr10">
 | ||
|               <u-tag text="拼团" size="mini" type="primary" mode="plain" />
 | ||
|             </view>
 | ||
|             <view v-if="item.order_type == 3" class="mr10">
 | ||
|               <u-tag text="砍价" size="mini" type="primary" mode="plain" />
 | ||
|             </view>
 | ||
|             订单编号:{{ item.order_sn }}
 | ||
|           </view>
 | ||
|           <view :class="item.order_status == 4 ? 'muted' : 'primary'">{{
 | ||
|             item.order_status_desc
 | ||
|           }}</view>
 | ||
|         </view>
 | ||
|         <view class="order-con">
 | ||
|           <order-goods
 | ||
|             :list="item.order_goods"
 | ||
|             :order_type="item.order_type"
 | ||
|           ></order-goods>
 | ||
|           <view class="all-price row-end">
 | ||
|             <text class="muted xs"
 | ||
|               >共{{ goodCount(item.order_goods) }}件商品,总金额:</text
 | ||
|             >
 | ||
|             <price-format
 | ||
|               :subscript-size="30"
 | ||
|               :first-size="30"
 | ||
|               :second-size="30"
 | ||
|               :price="item.order_amount"
 | ||
|             ></price-format>
 | ||
|           </view>
 | ||
|         </view>
 | ||
|         <view
 | ||
|           class="order-footer row"
 | ||
|           v-if="
 | ||
|             item.pickup_btn ||
 | ||
|             item.cancel_btn ||
 | ||
|             item.delivery_btn ||
 | ||
|             item.take_btn ||
 | ||
|             item.del_btn ||
 | ||
|             item.pay_btn ||
 | ||
|             item.comment_btn
 | ||
|           "
 | ||
|         >
 | ||
|           <view style="flex: 1">
 | ||
|             <view
 | ||
|               class="primary sm row"
 | ||
|               style="line-height: 26rpx"
 | ||
|               v-if="getCancelTime(item.order_cancel_time) > 0"
 | ||
|               ><u-count-down
 | ||
|                 separator="zh"
 | ||
|                 :timestamp="getCancelTime(item.order_cancel_time)"
 | ||
|                 separator-color="#FF2C3C"
 | ||
|                 color="#FF2C3C"
 | ||
|                 :separator-size="26"
 | ||
|                 :font-size="26"
 | ||
|                 bg-color="transparent"
 | ||
|                 @end="reflesh"
 | ||
|               ></u-count-down
 | ||
|             ></view>
 | ||
|           </view>
 | ||
|           <view v-if="item.cancel_btn">
 | ||
|             <button
 | ||
|               size="sm"
 | ||
|               class="plain br60 lighter"
 | ||
|               hover-class="none"
 | ||
|               @tap.stop="cancelOrder(item.id)"
 | ||
|             >
 | ||
|               取消订单
 | ||
|             </button>
 | ||
|           </view>
 | ||
|           <view
 | ||
|             v-if="item.delivery_btn"
 | ||
|             @tap.stop="
 | ||
|               goPage(
 | ||
|                 '/bundle/pages/goods_logistics/goods_logistics?id=' + item.id
 | ||
|               )
 | ||
|             "
 | ||
|           >
 | ||
|             <button size="sm" class="btn plain br60 lighter" hover-class="none">
 | ||
|               查看物流
 | ||
|             </button>
 | ||
|           </view>
 | ||
|           <view v-if="item.del_btn">
 | ||
|             <button
 | ||
|               size="sm"
 | ||
|               class="btn plain br60 lighter"
 | ||
|               hover-class="none"
 | ||
|               @tap.stop="delOrder(item.id)"
 | ||
|             >
 | ||
|               删除订单
 | ||
|             </button>
 | ||
|           </view>
 | ||
|           <view v-if="item.pay_btn" class="ml20">
 | ||
|             <button
 | ||
|               size="sm"
 | ||
|               class="btn bg-primary br60 white"
 | ||
|               @tap.stop="payNow(item.id)"
 | ||
|             >
 | ||
|               立即付款
 | ||
|             </button>
 | ||
|           </view>
 | ||
|           <view v-if="item.comment_btn" class="ml20">
 | ||
|             <button
 | ||
|               size="sm"
 | ||
|               hover-class="none"
 | ||
|               class="btn plain btn br60 primary red"
 | ||
|             >
 | ||
|               去评价
 | ||
|             </button>
 | ||
|           </view>
 | ||
|           <view v-if="item.pickup_btn" class="ml20">
 | ||
|             <button
 | ||
|               size="sm"
 | ||
|               hover-class="none"
 | ||
|               class="btn plain btn br60 primary red"
 | ||
|             >
 | ||
|               查看提货码
 | ||
|             </button>
 | ||
|           </view>
 | ||
|           <view v-if="item.take_btn" class="ml20">
 | ||
|             <button
 | ||
|               size="sm"
 | ||
|               class="btn plain br60 primary red"
 | ||
|               hover-class="none"
 | ||
|               @tap.stop="comfirmOrder(item.id, item.pay_way)"
 | ||
|             >
 | ||
|               确认收货
 | ||
|             </button>
 | ||
|           </view>
 | ||
|         </view>
 | ||
|       </navigator>
 | ||
|       <loading-footer :status="status" :slot-empty="true" @refresh="reload">
 | ||
|         <view slot="empty" class="column-center" style="padding-top: 200rpx">
 | ||
|           <image class="img-null" src="/static/images/goods_null.png"></image>
 | ||
|           <text class="lighter">暂无订单</text>
 | ||
|         </view>
 | ||
|       </loading-footer>
 | ||
|     </view>
 | ||
|     <order-dialog
 | ||
|       ref="orderDialog"
 | ||
|       :order-id="orderId"
 | ||
|       :type="type"
 | ||
|       @refresh="reflesh"
 | ||
|     ></order-dialog>
 | ||
|     <loading-view
 | ||
|       v-if="showLoading"
 | ||
|       background-color="transparent"
 | ||
|       :size="50"
 | ||
|     ></loading-view>
 | ||
|   </view>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| import {
 | ||
|   getOrderList,
 | ||
|   cancelOrder,
 | ||
|   delOrder,
 | ||
|   confirmOrder,
 | ||
|   getwxReceiveDetail,
 | ||
|   getwechatSyncCheck,
 | ||
| } from "@/api/order";
 | ||
| import { compareWeChatVersion } from "@/utils/tools";
 | ||
| 
 | ||
| import { prepay } from "@/api/app";
 | ||
| import { loadingType } from "@/utils/type";
 | ||
| 
 | ||
| import { wxpay, alipay } from "@/utils/pay";
 | ||
| import { loadingFun } from "@/utils/tools";
 | ||
| export default {
 | ||
|   data() {
 | ||
|     return {
 | ||
|       page: 1,
 | ||
|       orderList: [],
 | ||
|       status: loadingType.LOADING,
 | ||
|       showCancel: false,
 | ||
|       type: 0,
 | ||
|       orderId: "",
 | ||
|       showLoading: false,
 | ||
|       pay_way: "",
 | ||
|     };
 | ||
|   },
 | ||
| 
 | ||
|   components: {},
 | ||
|   props: {
 | ||
|     orderType: {
 | ||
|       type: String,
 | ||
|     },
 | ||
|   },
 | ||
|   created: function () {
 | ||
|     uni.$on("refreshorder", () => {
 | ||
|       this.reflesh();
 | ||
|     });
 | ||
|     uni.$on("payment", (params) => {
 | ||
|       if (params.result) {
 | ||
|         this.reflesh();
 | ||
|         uni.navigateBack();
 | ||
|         setTimeout(() => this.$toast({ title: "支付成功" }), 0.5 * 1000);
 | ||
|       }
 | ||
|     });
 | ||
|   },
 | ||
|   beforeMount: function () {
 | ||
|     this.getOrderListFun();
 | ||
|   },
 | ||
|   destroyed: function () {
 | ||
|     uni.$off(["payment", "refreshorder"]);
 | ||
|   },
 | ||
|   methods: {
 | ||
|     reflesh() {
 | ||
|       this.page = 1;
 | ||
|       this.orderList = [];
 | ||
|       this.status = loadingType.LOADING;
 | ||
|       this.type = 0;
 | ||
|       this.getOrderListFun();
 | ||
|     },
 | ||
| 
 | ||
|     reload() {
 | ||
|       this.status = loadingType.LOADING;
 | ||
|       this.getOrderListFun();
 | ||
|     },
 | ||
| 
 | ||
|     orderDialog() {
 | ||
|       this.$refs.orderDialog.open();
 | ||
|     },
 | ||
| 
 | ||
|     delOrder(id) {
 | ||
|       this.orderId = id;
 | ||
|       this.type = 1;
 | ||
|       this.$nextTick(() => {
 | ||
|         this.orderDialog();
 | ||
|       });
 | ||
|     },
 | ||
|     // 小程序确认收货
 | ||
|     comfirmReceive(transaction_id) {
 | ||
|       return new Promise((resolve, reject) => {
 | ||
|         wx.openBusinessView({
 | ||
|           businessType: "weappOrderConfirm",
 | ||
|           extraData: {
 | ||
|             transaction_id,
 | ||
|           },
 | ||
|           success({ extraData }) {
 | ||
|             if (extraData.status == "success") {
 | ||
|               resolve("确认收货");
 | ||
|             } else {
 | ||
|               resolve("取消收货");
 | ||
|             }
 | ||
|           },
 | ||
|           fail(err) {
 | ||
|             reject(err);
 | ||
|           },
 | ||
|         });
 | ||
|       });
 | ||
|     },
 | ||
|     //查询是否收货成功
 | ||
|     querycomfirmReceive(id) {
 | ||
|       return new Promise((resolve, reject) => {
 | ||
|         getwechatSyncCheck({ id })
 | ||
|           .then(({ data }) => {
 | ||
|             if (data.order.order_state === 4) {
 | ||
|               resolve("已确认收货");
 | ||
|             } else {
 | ||
|               reject("未确认收货");
 | ||
|             }
 | ||
|           })
 | ||
|           .catch((err) => {
 | ||
|             reject(err);
 | ||
|           });
 | ||
|       });
 | ||
|     },
 | ||
|     comfirmOrder(id, pay_way) {
 | ||
|       this.orderId = id;
 | ||
|       this.pay_way = pay_way;
 | ||
|       this.type = 2;
 | ||
|       this.$nextTick(async () => {
 | ||
|         // #ifdef MP-WEIXIN
 | ||
|         let res = {};
 | ||
|         if (this.pay_way === 1) {
 | ||
|           res = await getwechatSyncCheck({ id: this.orderId });
 | ||
|           console.log(res);
 | ||
|         }
 | ||
|         if (
 | ||
|           compareWeChatVersion("2.6.0") === 1 &&
 | ||
|           wx.openBusinessView &&
 | ||
|           this.pay_way === 1 &&
 | ||
|           res.data.order.order_state !== 1
 | ||
|         ) {
 | ||
|           try {
 | ||
|             const { data } = await getwxReceiveDetail({
 | ||
|               order_id: this.orderId,
 | ||
|             });
 | ||
|             await this.comfirmReceive(data.transaction_id);
 | ||
|             await this.querycomfirmReceive(this.orderId);
 | ||
|             await confirmOrder(this.orderId);
 | ||
|           } catch (error) {
 | ||
|             console.log(error);
 | ||
|           }
 | ||
|           this.reflesh();
 | ||
|         } else {
 | ||
|           this.orderDialog();
 | ||
|         }
 | ||
|         // #endif
 | ||
| 
 | ||
|         // #ifndef MP-WEIXIN
 | ||
|         this.orderDialog();
 | ||
|         // #endif
 | ||
|       });
 | ||
|     },
 | ||
| 
 | ||
|     cancelOrder(id) {
 | ||
|       this.orderId = id;
 | ||
|       this.type = 0;
 | ||
|       this.$nextTick(() => {
 | ||
|         this.orderDialog();
 | ||
|       });
 | ||
|     },
 | ||
| 
 | ||
|     payNow(id) {
 | ||
|       // this.showLoading = true
 | ||
| 
 | ||
|       uni.navigateTo({
 | ||
|         url: `/pages/payment/payment?from=${"order"}&order_id=${id}`,
 | ||
|       });
 | ||
| 
 | ||
|       // prepay({
 | ||
|       // 	from: 'order',
 | ||
|       // 	order_id: id
 | ||
|       // }).then(res => {
 | ||
|       // 	let args = res.data;
 | ||
|       // 	this.showLoading = false
 | ||
|       // 	if (res.code == 1) {
 | ||
|       // 		wxpay(args).then((resPay) => {
 | ||
|       // 			if(resPay == 'success') {
 | ||
|       // 				this.$toast({
 | ||
|       // 					title: "支付成功"
 | ||
|       // 				})
 | ||
|       // 				uni.$emit("refreshorder")
 | ||
|       // 			}
 | ||
|       // 		})
 | ||
|       // 	}else if(res.code == 20001){
 | ||
|       // 		alipay(args).then((resPay) => {
 | ||
|       // 			if(resPay == 'success') {
 | ||
|       // 				this.$toast({
 | ||
|       // 					title: "支付成功"
 | ||
|       // 				})
 | ||
|       // 				uni.$emit("refreshorder")
 | ||
|       // 			}
 | ||
|       // 		})
 | ||
|       // 	}
 | ||
|       // });
 | ||
|     },
 | ||
| 
 | ||
|     async getOrderListFun() {
 | ||
|       let { page, orderType, orderList, status } = this;
 | ||
|       const data = await loadingFun(getOrderList, page, orderList, status, {
 | ||
|         type: orderType,
 | ||
|       });
 | ||
|       if (!data) return;
 | ||
|       this.page = data.page;
 | ||
|       this.orderList = data.dataList;
 | ||
|       this.status = data.status;
 | ||
|     },
 | ||
|     goPage(url) {
 | ||
|       uni.navigateTo({
 | ||
|         url,
 | ||
|       });
 | ||
|     },
 | ||
|     goodCount(goodLists) {
 | ||
|       console.log(goodLists);
 | ||
|       let count = 0;
 | ||
|       goodLists.forEach((item) => {
 | ||
|         count += item.goods_num;
 | ||
|       });
 | ||
|       return count;
 | ||
|     },
 | ||
|   },
 | ||
|   computed: {
 | ||
|     getOrderStatus() {
 | ||
|       return (status) => {
 | ||
|         let text = "";
 | ||
|         switch (status) {
 | ||
|           case 0:
 | ||
|             text = "待支付";
 | ||
|             break;
 | ||
|           case 1:
 | ||
|             text = "待发货";
 | ||
|             break;
 | ||
|           case 2:
 | ||
|             text = "待收货";
 | ||
|             break;
 | ||
|           case 3:
 | ||
|             text = "已完成";
 | ||
|             break;
 | ||
|           case 4:
 | ||
|             text = "订单已关闭";
 | ||
|             break;
 | ||
|         }
 | ||
|         return text;
 | ||
|       };
 | ||
|     },
 | ||
|     getCancelTime() {
 | ||
|       return (time) => time - Date.now() / 1000;
 | ||
|     },
 | ||
|   },
 | ||
| };
 | ||
| </script>
 | ||
| <style lang="scss">
 | ||
| .order-list {
 | ||
|   // min-height: calc(100vh - 80rpx);
 | ||
|   padding: 0 20rpx;
 | ||
|   overflow: hidden;
 | ||
| 
 | ||
|   .order-item {
 | ||
|     border-radius: 10rpx;
 | ||
| 
 | ||
|     .order-header {
 | ||
|       height: 80rpx;
 | ||
|       padding: 0 24rpx;
 | ||
|       border-bottom: 1px dotted #e5e5e5;
 | ||
|     }
 | ||
| 
 | ||
|     .all-price {
 | ||
|       text-align: right;
 | ||
|       padding: 0 24rpx 20rpx;
 | ||
|     }
 | ||
| 
 | ||
|     .order-footer {
 | ||
|       height: 100rpx;
 | ||
|       border-top: $solid-border;
 | ||
|       padding: 0 24rpx;
 | ||
| 
 | ||
|       .plain {
 | ||
|         border: 1px solid #bbbbbb;
 | ||
| 
 | ||
|         &.red {
 | ||
|           border-color: $color-primary;
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| </style>
 |