<template> <view :style="viewColor"> <view class='my-order'> <view class='header'> <view class="search acea-row row-middle"> <text class="iconfont icon-sousuo"></text> <input v-model="store_name" :focus="focus" confirm-type="search" placeholder="搜索我的订单" class="input" @confirm="handleSearch" /> </view> </view> <view class='list'> <!-- 代付款 --> <view v-if="orderList.length > 0"> <block v-if="orderStatus == 0"> <view class='item' v-for="(item,index) in orderList" :key="index"> <view @click='goOrderDetails(item.group_order_id)'> <view class='title acea-row row-between-wrapper'> <view class="acea-row row-middle left-wrapper"> {{item.group_order_sn}} </view> <view class='t-color'>{{ item.orderList[0].activity_type === 2 && item.orderList[0].orderProduct[0].cart_info.productPresell.presell_type ==2 ? "待付定金" : "待付款" }}</view> </view> <view v-for="(order,j) in item.orderList" :key="order.order_id+j"> <!--预售--> <view v-if="order.activity_type === 2"> <block v-for="(goods,g) in order.orderProduct"> <view class='item-info acea-row row-between row-top'> <view class='pictrue'> <image :src='(goods.cart_info.productAttr && goods.cart_info.productAttr.image) || goods.cart_info.product.image'></image> </view> <view class='text acea-row row-between'> <view class='name line1'> <text class="event_name event_bg">预售</text><text>{{goods.cart_info.product.store_name}}</text> <view class="event_ship event_color">发货时间: <!--全款预售--> <text v-if="goods.cart_info.productPresell.presell_type === 1"> {{ goods.cart_info.productPresell.delivery_type === 1 ? '支付成功后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内 </text> <!--定金预售--> <text v-if="goods.cart_info.productPresell.presell_type === 2">{{ goods.cart_info.productPresell.delivery_type === 1 ? '支付尾款后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内</text> </view> </view> <view class='money'> <view>¥{{goods.cart_info.productPresellAttr.presell_price}}</view> <view>x{{goods.product_num}}</view> </view> </view> <view v-if="goods.cart_info.productPresell.presell_type === 2" class="event_price"> 定金待支付 <text class="t-color">¥{{ order.pay_price }}</text> 尾款待支付 <text class="t-color">¥{{ order.presellOrder.pay_price }}</text> </view> </view> </block> </view> <view v-else> <block v-for="(goods,g) in order.orderProduct"> <view class='item-info acea-row row-between row-top'> <view class='pictrue'> <image :src='(goods.cart_info.productAttr && goods.cart_info.productAttr.image) || goods.cart_info.product.image'></image> </view> <view class='text acea-row row-between'> <view class='name line2'>{{goods.cart_info.product.store_name}}</view> <view class='money' v-if="item.orderList[0].activity_type == 4"> <view v-if="goods.cart_info.activeSku">¥{{goods.cart_info.activeSku.active_price}}</view> <view>x{{goods.product_num}}</view> </view> <view v-else class='money'> <view>¥{{goods.cart_info.productAttr.price}}</view> <view>x{{goods.product_num}}</view> </view> </view> </view> </block> </view> </view> <view class='totalPrice' v-if="item.orderList[0].activity_type !== 2">共{{item.total_num || 0}}件商品,总金额 <text class='money p-color'>¥{{item.pay_price}}</text> </view> <view class='bottom acea-row row-right row-middle'> <!-- <view class='bnt cancelBnt' @click.stop='cancelOrder(index,item.group_order_id)'>取消订单</view> --> <view class='bnt b-color' @click.stop='goPay(item.pay_price,item.group_order_id)'>立即付款</view> </view> </view> </view> </block> <!-- 待发货 待收货 待评价 已完成 --> <block v-else> <view class='item' v-for="(item,index) in orderList" :key="index"> <view @click='goOrderDetails(item.order_id)'> <view class='title acea-row row-between-wrapper'> <view class="acea-row row-middle left-wrapper" @click.stop="goMall(item)"> <text class="iconfont icon-shangjiadingdan"></text> <view class="store-name">{{item.merchant.mer_name}}</view> <text class="iconfont icon-xiangyou"></text> </view> <view v-if="item.status == 0" class='t-color'>待发货</view> <view v-if="item.status == 1" class='t-color'>待收货</view> <view v-if="item.status == 2" class='t-color'>待评价</view> <view v-if="item.status == 3" class='t-color'>已完成</view> <view v-if="item.status == -1" class='t-color'>已退款</view> </view> <view v-if="item.activity_type === 2"> <view class='item-info acea-row row-between row-top' v-for="(goods,index) in item.orderProduct" :key="index"> <view class='pictrue'> <image :src='(goods.cart_info.productAttr && goods.cart_info.productAttr.image) || goods.cart_info.product.image'></image> </view> <view class='text acea-row row-between'> <view class='name '> <view class='name' :class="item.status === 0 ? 'line1' : 'line2'"> <text class="event_name event_bg">预售</text><text>{{goods.cart_info.product.store_name}}</text> <view v-if="item.status == 0" class="event_ship event_color">发货时间: <!--全款预售--> <text v-if="goods.cart_info.productPresell.presell_type === 1">{{ goods.cart_info.productPresell.delivery_type === 1 ? '支付成功后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内</text> <!--定金预售--> <text v-if="goods.cart_info.productPresell.presell_type === 2">{{ goods.cart_info.productPresell.delivery_type === 1 ? '支付尾款后' : '预售结束后' }}{{ goods.cart_info.productPresell.delivery_day }}天内</text> </view> </view> <view style="margin-top: 10rpx;" class="t-color">{{goods.is_refund==1?'退款中':goods.is_refund==2?'部分退款':goods.is_refund==3?'全部退款':''}}</view> </view> <view class='money'> <view>¥{{goods.cart_info.productPresellAttr.presell_price}}</view> <view>x{{goods.product_num}}</view> </view> </view> </view> </view> <view v-else> <view class='item-info acea-row row-between row-top' v-for="(goods,index) in item.orderProduct" :key="index"> <view class='pictrue'> <image :src='(goods.cart_info.productAttr && goods.cart_info.productAttr.image) || goods.cart_info.product.image'></image> </view> <view class='text acea-row row-between'> <view class='name '> <view class='name line2'> <text>{{goods.cart_info.product.store_name}}</text> </view> <view style="margin-top: 10rpx;" class="t-color">{{goods.is_refund==1?'退款中':goods.is_refund==2?'部分退款':goods.is_refund==3?'全部退款':''}}</view> </view> <view class='money' v-if="item.activity_type == 3"> <view v-if="goods.cart_info.productAssistAttr">¥{{goods.cart_info.productAssistAttr.assist_price}}</view> <view>x{{goods.product_num}}</view> </view> <view class='money' v-else-if="item.activity_type == 4"> <view v-if="goods.cart_info.activeSku">¥{{goods.cart_info.activeSku.active_price}}</view> <view>x{{goods.product_num}}</view> </view> <view class='money' v-else> <view>¥{{goods.cart_info.productAttr.price}}</view> <view>x{{goods.product_num}}</view> </view> </view> </view> </view> <view class='totalPrice' v-if="item.activity_type == 2">共{{item.orderNum || 0}}件商品,总金额 <text class='money p-color'>¥{{item.presell_price}}</text> </view> <view class='totalPrice' v-else>共{{item.orderNum || 0}}件商品,总金额 <text class='money p-color'>¥{{item.pay_price}}</text> </view> </view> <view class='bottom acea-row row-right row-middle'> <block v-if="item.status == 0 || item.status == 9 || item.status == -1"> <!-- <view class='bnt cancelBnt' @click='goOrderDetails(item.order_id)'>申请退款</view> --> <view class='bnt b-color' @click='goOrderDetails(item.order_id)'>查看详情</view> </block> <block v-if="item.status == 1"> <view class='bnt cancelBnt' v-if="item.delivery_type == 1 || item.delivery_type == 2" @click='goOrderDetails(item.order_id)'>查看物流</view> <view class='bnt b-color' @tap='confirmOrder(item,index)'>确认收货</view> </block> <block v-if="item.status == 2"> <navigator v-if="community_status == 1 && !item.community_id" :url="'/pages/plantGrass/plant_release/index?order_id='+item.order_id" class='bnt colorBnt' hover-class="none"> <text class="iconfont icon-fabu"></text> 发布种草 </navigator> <view class='bnt b-color' @click='goOrderDetails_Evaluation(item.order_id)'>去评价</view> </block> <block v-if="item.status == 3"> <view class='bnt b-color' @click='goOrderDetails(item.order_id)' v-if="item.activity_type == 2 || item.activity_type == 3 || item.activity_type == 10">查看详情</view> <navigator v-if="community_status == 1 && !item.community_id" :url="'/pages/plantGrass/plant_release/index?order_id='+item.order_id" class='bnt colorBnt' hover-class="none"> <text class="iconfont icon-fabu"></text> 发布种草 </navigator> <view class='bnt b-color' @click='goOrderDetails(item.order_id)' v-else>再次购买</view> </block> </view> </view> </block> </view> </view> <view class='loadingicon acea-row row-center-wrapper' v-if="orderList.length>5"> <text class='loading iconfont icon-jiazai' :hidden='loading==false'></text>{{loadTitle}} </view> <view v-if="orderList.length == 0 && page > 1"> <emptyPage title="暂无订单~"></emptyPage> </view> </view> <home></home> <payment :payMode='payMode' :pay_close="pay_close" @onChangeFun='onChangeFun' :order_id="pay_order_id" :totalPrice='totalPrice'></payment> </view> </template> <script> // +---------------------------------------------------------------------- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ] // +---------------------------------------------------------------------- // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved. // +---------------------------------------------------------------------- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 // +---------------------------------------------------------------------- // | Author: CRMEB Team <admin@crmeb.com> // +---------------------------------------------------------------------- let app = getApp(); import { getOrderList, orderData, unOrderCancel, orderDel, orderPay, groupOrderList, orderTake } from '@/api/order.js'; import { getUserInfo } from '@/api/user.js'; import { openOrderSubscribe } from '@/utils/SubscribeMessage.js'; import payment from '@/components/payment'; import home from '@/components/home/index.vue'; import { mapGetters } from "vuex"; import emptyPage from '@/components/emptyPage.vue' import { configMap } from '@/utils' import { toLogin } from '@/libs/login.js'; export default { components: { payment, emptyPage, home, }, data() { return { loading: false, //是否加载中 loadend: false, //是否加载完毕 loadTitle: '加载更多', //提示语 orderList: [], //订单数组 presellProList: [], //定金预售订单 presellOrderCount: 0, orderData: {}, //订单详细统计 orderStatus: -1, //订单状态 page: 1, limit: 20, focus: true, payMode: [{ name: "微信支付", icon: "icon-weixinzhifu", value: 'wechat', title: '微信快捷支付', payStatus: 1 }, { name: "支付宝支付", icon: "icon-zhifubao", value: 'alipay', title: '支付宝支付', payStatus: this.$store.getters.globalData.alipay_open }, { name: "余额支付", icon: "icon-yuezhifu", value: 'balance', title: '可用余额:', number: 0, payStatus: this.$store.getters.globalData.yue_pay_status } ], pay_close: false, pay_order_id: '', totalPrice: '0', isReady: true, store_name: '' }; }, computed: { ...mapGetters(['isLogin','viewColor']), ...configMap(['hide_mer_status', 'community_status', 'alipay_open', 'yue_pay_status']), }, watch: { alipay_open(n){ this.payMode[1].payStatus = n }, yue_pay_status(n){ this.payMode[2].payStatus = n } }, onShow() { if (this.isLogin) { this.page = 1; this.loadend = false; this.loading = false; } else { toLogin() } }, onReady(){ }, mounted: function() { }, methods: { // 去商铺 goMall(item){ if(this.hide_mer_status == 0){ uni.navigateTo({ url:'/pages/store/home/index?id='+item.mer_id }) } }, /** * 事件回调 * */ onChangeFun: function(e) { let opt = e; let action = opt.action || null; let value = opt.value != undefined ? opt.value : null; (action && this[action]) && this[action](value); }, /** * 获取用户信息 * */ getUserInfo: function() { let that = this; getUserInfo().then(res => { that.payMode[2].number = res.data.now_money; // that.$set(that, 'payMode', that.payMode); }); }, /** * 关闭支付组件 * */ payClose: function() { this.pay_close = false; }, /** * 生命周期函数--监听页面加载 */ onLoad: function(options) { if (options.status) this.orderStatus = options.status; }, /** * 获取订单统计数据 * */ getOrderData: function() { let that = this; orderData().then(res => { that.$set(that, 'orderData', res.data); }) }, /** * 取消订单 * */ cancelOrder: function(index, order_id) { let that = this; if (!order_id) return that.$util.Tips({ title: '缺少订单号无法取消订单' }); unOrderCancel(order_id).then(res => { return that.$util.Tips({ title: res.message, icon: 'success' }, function() { that.orderList.splice(index, 1); that.$set(that, 'orderList', that.orderList); that.$set(that.orderData, 'unpaid_count', that.orderData.unpaid_count - 1); that.getOrderData(); }); }).catch(err => { return that.$util.Tips({ title: err }); }); }, /** * 打开支付组件 * */ goPay: function(pay_price, order_id) { console.log(order_id) this.$set(this, 'pay_close', true); this.order_id = order_id; this.pay_order_id = order_id.toString() // this.$set(this, 'pay_order_id', ); this.$set(this, 'totalPrice', pay_price); }, /** * 支付成功回调 * */ pay_complete: function() { this.loadend = false; this.page = 1; this.$set(this, 'orderList', []); this.pay_close = false; this.pay_order_id = ''; this.getOrderData(); this.getOrderList(); }, /** * 支付失败回调 * */ pay_fail: function() { this.pay_close = false; this.pay_order_id = ''; }, /** * 去订单详情 */ goOrderDetails: function(order_id) { let self = this if (!order_id) return that.$util.Tips({ title: '缺少订单号无法查看订单详情' }); // #ifdef MP uni.showLoading({ title: '正在加载', }) openOrderSubscribe().then(() => { uni.hideLoading(); if (self.orderStatus == 0) { uni.navigateTo({ url: '/pages/order_details/stay?order_id=' + order_id }) } else { uni.navigateTo({ url: '/pages/order_details/index?order_id=' + order_id }) } }).catch(() => { uni.hideLoading(); }) // #endif // #ifndef MP if (self.orderStatus == 0) { uni.navigateTo({ url: '/pages/order_details/stay?order_id=' + order_id }) } else { uni.navigateTo({ url: '/pages/order_details/index?order_id=' + order_id }) } // #endif }, /** * 点击去评价 */ goOrderDetails_Evaluation: function(order_id) { let self = this if (!order_id) return that.$util.Tips({ title: '缺少订单号无法查看订单详情和评价' }); // #ifdef MP if (self.orderStatus == 0) { uni.navigateTo({ url: '/pages/order_details/stay?order_id=' + order_id }) } else { uni.navigateTo({ url: '/pages/order_details/index?order_id=' + order_id }) } // #endif // #ifndef MP if (self.orderStatus == 0) { uni.navigateTo({ url: '/pages/order_details/stay?order_id=' + order_id }) } else { uni.navigateTo({ url: '/pages/order_details/index?order_id=' + order_id }) } // #endif }, /** * 切换类型 */ statusClick: function(status) { if (status == this.orderStatus) return; this.orderStatus = status; this.loadend = false; this.loading = false; this.page = 1; this.$set(this, 'orderList', []); this.getOrderList(); }, /** * 获取订单列表 */ getOrderList: function() { let that = this; if (that.loadend) return; if (that.loading) return; that.loading = true; that.loadTitle = "加载更多"; console.log(that.store_name); getOrderList({ page: that.page, limit: that.limit, store_name: that.store_name }).then(res => { let list = res.data.list || []; let loadend = list.length < that.limit; that.orderList = that.page == 1 ? list : that.$util.SplitArray(list, that.orderList); that.$set(that, 'orderList', that.orderList); that.getProductCount(); that.loadend = loadend; that.loading = false; that.loadTitle = loadend ? "我也是有底线的" : '加载更多'; that.page = that.page + 1; // that.isReady = true; }).catch(err => { that.loading = false; that.loadTitle = "加载更多"; }) }, /** * 获取定金预售订单列表 */ getpreSellOrderList: function() { let that = this; getOrderList({ status: 10, page: 1, limit: 1, }).then(res => { let list = res.data.list || []; that.presellOrderCount = res.data.count; that.$set(that, 'presellProList', list); }) }, /** * 获取单个订单商品数量 */ getProductCount: function(){ if(this.orderStatus !== 0){ this.orderList.forEach((item,i) => { let orderNum = 0 if(item.orderProduct){ item.orderProduct.forEach((val) => { orderNum += val.product_num }) this.orderList[i]['orderNum']=orderNum; } }) } }, /** * 删除订单 */ delOrder: function(order_id, index) { let that = this; orderDel(order_id).then(res => { that.orderList.splice(index, 1); that.$set(that, 'orderList', that.orderList); that.$set(that.orderData, 'unpaid_count', that.orderData.unpaid_count - 1); that.getOrderData(); return that.$util.Tips({ title: '删除成功', icon: 'success' }); }).catch(err => { return that.$util.Tips({ title: err }); }) }, // 确认收货 confirmOrder: function(item, index) { let that = this; uni.showModal({ title: '确认收货', content: '为保障权益,请收到货确认无误后,再确认收货', success: function(res) { if (res.confirm) { orderTake(item.order_id).then(res => { return that.$util.Tips({ title: '操作成功', icon: 'success' }, function() { that.orderList.splice(index, 1); that.getOrderData(); }); }).catch(err => { return that.$util.Tips({ title: err }); }) } } }) }, handleSearch() { this.loadend = false; this.page = 1; this.orderList = []; if (!this.store_name) { return this.$util.Tips({ title: '请输入搜索内容' }); return; } this.getOrderList(); } }, onReachBottom: function() { this.getOrderList(); }, } </script> <style scoped lang="scss"> .my-order .header { padding: 17rpx 30rpx; background-color: var(--view-theme); } .t-color{color: var(--view-theme);} .p-color{color: var(--view-priceColor);} .b-color{background-color:var(--view-theme);} .my-order .header .picTxt { height: 190rpx; } .my-order .header .picTxt .text { color: rgba(255, 255, 255, 0.8); font-size: 26rpx; } .my-order .header .picTxt .text .name { font-size: 34rpx; font-weight: bold; color: #fff; margin-bottom: 20rpx; } .my-order .header .picTxt .pictrue { width: 122rpx; height: 109rpx; } .my-order .header .picTxt .pictrue image { width: 100%; height: 100%; } .my-order .nav { background-color: #fff; width: 690rpx; height: 140rpx; border-radius: 16rpx; margin: -73rpx auto 0 auto; } .my-order .nav .item { text-align: center; font-size: 26rpx; color: #282828; padding: 29rpx 0; } .my-order .nav .item.on { font-weight: bold; border-bottom: 5rpx solid var(--view-theme); } .my-order .nav .item .num { margin-top: 18rpx; } .my-order .list { width: 690rpx; margin: 14rpx auto 0 auto; } .my-order .list .item { background-color: #fff; border-radius: 16rpx; margin-bottom: 14rpx; } .my-order .list .item .title { height: 84rpx; padding: 0 30rpx; border-bottom: 1px solid #eee; font-size: 28rpx; color: #282828; .left-wrapper { .iconfont { margin-top: 5rpx; } .store-name { margin: 0 10rpx; } .icon-xiangyou { font-size: 20rpx; } } } .my-order .list .item .title .sign { font-size: 24rpx; padding: 0 7rpx; height: 36rpx; margin-right: 15rpx; } .my-order .list .item .item-info { padding: 0 30rpx; margin-top: 22rpx; } .my-order .list .item .item-info .pictrue { width: 120rpx; height: 120rpx; } .my-order .list .item .item-info .pictrue image { width: 100%; height: 100%; border-radius: 6rpx; } .my-order .list .item .item-info .text { width: 486rpx; font-size: 28rpx; color: #999; margin-top: 6rpx; } .my-order .list .item .item-info .text .name { width: 320rpx; color: #282828; } .event_bg{ background: #FF7F00; } .event_color{ color: #FF7F00; } .my-order .list .item .event_name{ display: inline-block; margin-right: 9rpx; color: #fff; font-size: 20rpx; padding: 0 8rpx; line-height: 30rpx; text-align: center; border-radius: 6rpx; } .my-order .list .item .event_ship{ font-size: 20rpx; margin-top: 10rpx; } .my-order .list .event_price{ margin: 0 0 50rpx 120rpx; } .my-order .list .item .item-info .text .money { text-align: right; } .my-order .list .item .totalPrice { font-size: 26rpx; color: #282828; text-align: right; margin: 27rpx 0 0 30rpx; padding: 0 30rpx 30rpx 0; } .my-order .list .item .totalPrice .money { font-size: 28rpx; font-weight: bold; } .my-order .list .item .bottom { height: 107rpx; padding: 0 30rpx; border-top: 1px solid #f0f0f0; } .my-order .list .item .bottom .bnt { width: 176rpx; height: 60rpx; text-align: center; line-height: 60rpx; color: #fff; border-radius: 50rpx; font-size: 27rpx; } .my-order .list .item .bottom .bnt.cancelBnt { border: 1px solid #ddd; color: #aaa; } .my-order .list .item .bottom .bnt.colorBnt { border: 1px solid var(--view-theme); color: var(--view-theme); } .my-order .list .item .bottom .bnt .icon-fabu{ font-size: 26rpx; margin-right: 10rpx; } .my-order .list .item .bottom .bnt~.bnt { margin-left: 17rpx; } .search { height: 60rpx; padding: 0 30rpx; border-radius: 30rpx; background-color: #FFFFFF; font-size: 26rpx; .iconfont { margin-right: 10rpx; font-size: 26rpx; color: #999999; } .input-placeholder { font-size: 26rpx; color: #999999; } .input { flex: 1; } } </style>