| | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | type: 'customer', |
| | | query: { |
| | | status: '', |
| | | }, |
| | | status: [ |
| | | {name: '全部', value: ''}, |
| | | {name: '待付款', value: 'PENDING'}, |
| | | {name: '待发货', value: 'SEND'}, |
| | | {name: '待收货', value: 'RECEIVE'}, |
| | | {name: '待评价', value: 'EVALUATE'}, |
| | | {name: '已完成', value: 'COMPLETED'}, |
| | | {name: '已退款', value: 'REFUND'}, |
| | | ] |
| | | }; |
| | | }, |
| | | onLoad(options) { |
| | | this.query.status = options.status || '' |
| | | this.listApi = `/api/customer/order/list` |
| | | this.getList() |
| | | }, |
| | | onReachBottom() { |
| | | this.page.current += 1 |
| | | this.getMore() |
| | | }, |
| | | async onPullDownRefresh() { |
| | | this.page.current = 1 |
| | | await this.getList() |
| | | uni.stopPullDownRefresh() |
| | | }, |
| | | methods: { |
| | | toDetail(item) { |
| | | // 订单详情页面 |
| | | console.log(' toDetail item',item) |
| | | uni.navigateTo({ |
| | | url: '/pages/order/order-detail?id=' + item.id |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | export default { |
| | | data() { |
| | | return { |
| | | type: 'customer', |
| | | query: { |
| | | status: '', |
| | | }, |
| | | status: [{ |
| | | name: '全部', |
| | | value: '' |
| | | }, |
| | | { |
| | | name: '待付款', |
| | | value: 'PENDING' |
| | | }, |
| | | { |
| | | name: '待发货', |
| | | value: 'SEND' |
| | | }, |
| | | { |
| | | name: '待收货', |
| | | value: 'RECEIVE' |
| | | }, |
| | | { |
| | | name: '待评价', |
| | | value: 'EVALUATE' |
| | | }, |
| | | { |
| | | name: '已完成', |
| | | value: 'COMPLETED' |
| | | }, |
| | | { |
| | | name: '已退款', |
| | | value: 'REFUND' |
| | | }, |
| | | ] |
| | | }; |
| | | }, |
| | | onLoad(options) { |
| | | this.query.status = options.status || '' |
| | | this.listApi = `/api/customer/order/list` |
| | | this.getList() |
| | | }, |
| | | onReachBottom() { |
| | | this.page.current += 1 |
| | | this.getMore() |
| | | }, |
| | | async onPullDownRefresh() { |
| | | this.page.current = 1 |
| | | await this.getList() |
| | | uni.stopPullDownRefresh() |
| | | }, |
| | | methods: { |
| | | toDetail(item) { |
| | | // 订单详情页面 |
| | | // console.log(' toDetail item', item) |
| | | uni.navigateTo({ |
| | | url: '/pages/order/order-detail?id=' + item.id |
| | | }) |
| | | }, |
| | | toDetailSale(item) { |
| | | uni.navigateTo({ |
| | | url: '/pages/order/order-detail?showsales=1&id=' + item.id |
| | | }) |
| | | }, |
| | | async buttonClick(item, buttontype) { |
| | | switch (buttontype) { |
| | | case 'refund': { |
| | | await this.$message.confirm('是否确定申请退款') |
| | | // 发送请求 |
| | | this.$message.showLoading() |
| | | const { |
| | | code |
| | | } = await this.$http.request('post', '/api/customer/order/refund', { |
| | | data: { |
| | | id: item.id, |
| | | evaluate: res.content |
| | | } |
| | | }) |
| | | this.$message.hideLoading() |
| | | if (code === 0) { |
| | | this.refreshList() |
| | | } |
| | | } |
| | | break |
| | | case 'confirm': { |
| | | await this.$message.confirm('是否确定收货') |
| | | // 发送请求 |
| | | this.$message.showLoading() |
| | | const { |
| | | code |
| | | } = await this.$http.request('get', '/api/customer/order/receive/confirm', { |
| | | params: { |
| | | id: item.id, |
| | | } |
| | | }) |
| | | this.$message.hideLoading() |
| | | if (code === 0) { |
| | | this.refreshList() |
| | | } |
| | | |
| | | } |
| | | break |
| | | case 'payAgain': { |
| | | await this.$message.confirm('是否确定重新支付') |
| | | // 发送请求 |
| | | this.$message.showLoading() |
| | | const { |
| | | code, |
| | | data |
| | | } = await this.$http.request('get', '/api/customer/order/payAgain', { |
| | | params: { |
| | | id: item.id, |
| | | } |
| | | }) |
| | | this.$message.hideLoading() |
| | | if (code === 0) { |
| | | //微信接口 |
| | | let that = this |
| | | wx.requestPayment({ |
| | | ...data, |
| | | async success(res) { |
| | | console.log('pay success', res) |
| | | that.$message.showToast('支付成功') |
| | | setTimeout(() => { |
| | | that.refreshList() |
| | | }, 200) |
| | | }, |
| | | fail(err) { |
| | | console.error('pay fail', err) |
| | | that.$message.showToast('支付失败') |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | } |
| | | break |
| | | case 'evaluate': { |
| | | const res = await this.$message.confirm('', { |
| | | editable: true, |
| | | title: '请输入评价信息' |
| | | }) |
| | | if (res.content && res.confirm) { |
| | | // 发送请求 |
| | | this.$message.showLoading() |
| | | const { |
| | | code |
| | | } = await this.$http.request('post', '/api/customer/order/evaluate', { |
| | | data: { |
| | | id: item.id, |
| | | evaluate: res.content |
| | | } |
| | | }) |
| | | this.$message.hideLoading() |
| | | if (code === 0) { |
| | | this.refreshList() |
| | | } |
| | | } |
| | | } |
| | | break |
| | | // case 'sales': { |
| | | |
| | | |
| | | // }, |
| | | case 'cancelOrder': { |
| | | this.$message.showToast('敬请期待') |
| | | }, |
| | | default: |
| | | break |
| | | } |
| | | }, |
| | | |
| | | }, |
| | | } |
| | | </script> |
| | | <template> |
| | | <view class="order-container"> |
| | | <view class="order-top"> |
| | | <view class="title">订单信息</view> |
| | | <view class="flex"> |
| | | <image class="image img100" |
| | | src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/67/67acf980f310460a97d305c6ffc7e811位图@2x (1).png"></image> |
| | | <view>消费订单:¥<span class="m-r-10">{{ '0' }}</span> 总消费:¥<span>{{ '0' }}</span></view> |
| | | </view> |
| | | </view> |
| | | <view class="status-list m-t-12 flex flex-wrap-normal"> |
| | | <view v-for="each of status" :key="each.value" |
| | | @click.stop="(e)=>{ |
| | | <view class="order-container"> |
| | | <view class="order-top"> |
| | | <view class="title">订单信息</view> |
| | | <view class="flex"> |
| | | <image class="image img100" |
| | | src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/67/67acf980f310460a97d305c6ffc7e811位图@2x (1).png"> |
| | | </image> |
| | | <view>消费订单:¥<span class="m-r-10">{{ '0' }}</span> 总消费:¥<span>{{ '0' }}</span></view> |
| | | </view> |
| | | </view> |
| | | <view class="status-list m-t-12 flex flex-wrap-normal"> |
| | | <view v-for="each of status" :key="each.value" @click.stop="(e)=>{ |
| | | query.status = each.value || ''; |
| | | refreshList(); |
| | | }" |
| | | class="status-each" :class="[query.status===each.value?'cur':'']"> |
| | | {{ each.name }} |
| | | </view> |
| | | </view> |
| | | <no-data v-if="!list||list.length===0" style="width: 100%;" class="m-t-12"></no-data> |
| | | <view v-for="(item,index) in list" :key="index" class="m-t-12"> |
| | | <view @click.stop="toDetail(item)" class="order-item list-item"> |
| | | <view class="title flex"> |
| | | <view> |
| | | 订单:{{ item.orderNo }} |
| | | </view> |
| | | <view class="status t-red m-l-a m-r-0">¥{{ item.paymentAmount || item.totalAmount || '0'}}</view> |
| | | </view> |
| | | <view class="desc flex" v-if="!query.status"> |
| | | <view class="label"> |
| | | 订单状态: |
| | | </view> |
| | | <view class="value">{{ item.statusBackendStr }}</view> |
| | | </view> |
| | | <view class="desc flex"> |
| | | <view class="label"> |
| | | 收货人: |
| | | </view> |
| | | <view class="value">{{ item.customer }}</view> |
| | | </view> |
| | | <view class="desc flex"> |
| | | <view class="label"> |
| | | 收货人手机号码: |
| | | </view> |
| | | <view class="value">{{ item.customerTel }}</view> |
| | | </view> |
| | | <view class="desc flex"> |
| | | <view class="label"> |
| | | 收货地址: |
| | | </view> |
| | | <view class="value">{{ item.customerAddress }}</view> |
| | | </view> |
| | | <view class="desc flex"> |
| | | <view class="label"> |
| | | 支付时间: |
| | | </view> |
| | | <view class="value">{{ item.paymentTime }}</view> |
| | | </view> |
| | | </view> |
| | | }" class="status-each" :class="[query.status===each.value?'cur':'']"> |
| | | {{ each.name }} |
| | | </view> |
| | | </view> |
| | | <no-data v-if="!list||list.length===0" style="width: 100%;" class="m-t-12"></no-data> |
| | | <view v-for="(item,index) in list" :key="index" class="m-t-12"> |
| | | <view class="order-item list-item"> |
| | | <view class="title flex"> |
| | | <view> |
| | | 订单:{{ item.orderNo }} |
| | | </view> |
| | | <view class="status t-red m-l-a m-r-0">¥{{ item.paymentAmount || item.totalAmount || '0'}}</view> |
| | | </view> |
| | | <view class="desc flex" v-if="!query.status"> |
| | | <view class="label"> |
| | | 订单状态: |
| | | </view> |
| | | <view class="value">{{ item.statusBackendStr }}</view> |
| | | </view> |
| | | <view class="desc flex"> |
| | | <view class="label"> |
| | | 收货人: |
| | | </view> |
| | | <view class="value">{{ item.customer }}</view> |
| | | </view> |
| | | <view class="desc flex"> |
| | | <view class="label"> |
| | | 收货人手机号码: |
| | | </view> |
| | | <view class="value">{{ item.customerTel }}</view> |
| | | </view> |
| | | <view class="desc flex"> |
| | | <view class="label"> |
| | | 收货地址: |
| | | </view> |
| | | <view class="value">{{ item.customerAddress }}</view> |
| | | </view> |
| | | <view class="desc flex" v-if="item.status!=='PENDING'"> |
| | | <view class="label"> |
| | | 支付时间: |
| | | </view> |
| | | <view class="value">{{ item.paymentTime }}</view> |
| | | </view> |
| | | <view class="line-gray"></view> |
| | | <view class="flex buttons"> |
| | | <view class="button button-0 m-l-a m-r-0" v-if="item.status==='PENDING'" |
| | | @click="buttonClick(item,'cancelOrder')">取消订单</view> |
| | | <view class="button button-1 m-l-15 m-r-0" v-if="item.status==='PENDING'" |
| | | @click="buttonClick(item,'payAgain')">重新支付</view> |
| | | |
| | | </view> |
| | | <view class="button button-0 m-l-a m-r-0" @click="buttonClick('refund')" v-if="item.couldRefund"> |
| | | 申请退款 |
| | | </view> |
| | | <view class="button button-0 m-l-a m-r-0" @click="buttonClick('confirm')" |
| | | v-if="item.status ==='RECEIVE'"> 确认收货 |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="button button-1 m-l-a m-r-0" @click="toDetailSale(item)" |
| | | v-if=" item.status === 'EVALUATE'||item.status=='COMPLETED'"> 申请售后 |
| | | </view> |
| | | <view class="button button-0 m-l-a m-r-0" @click="buttonClick(item,'evaluate')" |
| | | v-if=" item.status === 'EVALUATE'"> 评价 |
| | | </view> |
| | | |
| | | |
| | | |
| | | <view class="button button-1 m-l-15 m-r-0" @click="toDetail(item)">查看详情</view> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .order-container { |
| | | padding: 24rpx 30rpx; |
| | | .order-item { |
| | | margin-bottom: 20rpx; |
| | | padding: 28rpx; |
| | | background-color: #fff; |
| | | border-radius: 8rpx; |
| | | .order-container { |
| | | padding: 24rpx 30rpx; |
| | | |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 28rpx; |
| | | color: #000000; |
| | | line-height: 40rpx; |
| | | .status { |
| | | font-weight: 400; |
| | | font-size: 28rpx; |
| | | color: #20613D; |
| | | line-height: 40rpx; |
| | | } |
| | | } |
| | | .desc{ |
| | | font-weight: 400; |
| | | font-size: 24rpx; |
| | | color: #666666; |
| | | line-height: 34rpx; |
| | | } |
| | | .order-item { |
| | | margin-bottom: 20rpx; |
| | | padding: 28rpx; |
| | | background-color: #fff; |
| | | border-radius: 8rpx; |
| | | |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 28rpx; |
| | | color: #000000; |
| | | line-height: 40rpx; |
| | | |
| | | .status { |
| | | font-weight: 400; |
| | | font-size: 28rpx; |
| | | color: #20613D; |
| | | line-height: 40rpx; |
| | | } |
| | | } |
| | | |
| | | .desc { |
| | | font-weight: 400; |
| | | font-size: 24rpx; |
| | | color: #666666; |
| | | line-height: 34rpx; |
| | | } |
| | | |
| | | |
| | | .line { |
| | | height: 2rpx solid #EEEEEE; |
| | | margin-top: 16rpx; |
| | | margin-bottom: 16rpx; |
| | | } |
| | | .line { |
| | | height: 2rpx solid #EEEEEE; |
| | | margin-top: 16rpx; |
| | | margin-bottom: 16rpx; |
| | | } |
| | | |
| | | .buttons { |
| | | display: flex; |
| | | margin-left: auto; |
| | | width: fit-content; |
| | | |
| | | } |
| | | .button { |
| | | // width: 216rpx; |
| | | padding: 10rpx 20rpx; |
| | | line-height: 34rpx; |
| | | font-size: 24rpx; |
| | | height: 34rpx; |
| | | background: #20613D; |
| | | text-align: center; |
| | | border-radius: 30rpx; |
| | | |
| | | .status-list { |
| | | overflow-x: scroll; |
| | | } |
| | | |
| | | .status-each { |
| | | font-weight: 400; |
| | | font-size: 28rpx; |
| | | color: #666666; |
| | | line-height: 40rpx; |
| | | margin: 0 auto; |
| | | //min-width: ; |
| | | // padding-left: 10rpx; |
| | | // padding-right: 10rpx; |
| | | width: fit-content; |
| | | min-width: 120rpx; |
| | | text-align: center; |
| | | } |
| | | .button-1 { |
| | | background: #fff; |
| | | color: #333; |
| | | border: 2rpx solid #333; |
| | | |
| | | .status-each.cur { |
| | | font-weight: 600; |
| | | font-size: 32rpx; |
| | | color: #20613D; |
| | | // line-height: 44rpx; |
| | | } |
| | | } |
| | | |
| | | .status-each:first-child { |
| | | margin-left: 0 |
| | | } |
| | | .button-0 { |
| | | color: #fff; |
| | | border: 2rpx solid #20613D; |
| | | } |
| | | } |
| | | |
| | | .status-each:last-child { |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .order-top { |
| | | position: relative; |
| | | min-height: 182rpx; |
| | | background: #E1F0E7; |
| | | border-radius: 8rpx; |
| | | padding: 45rpx 35rpx; |
| | | .status-list { |
| | | overflow-x: scroll; |
| | | |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 30rpx; |
| | | color: #000000; |
| | | line-height: 42rpx; |
| | | } |
| | | .status-each { |
| | | font-weight: 400; |
| | | font-size: 28rpx; |
| | | color: #666666; |
| | | line-height: 40rpx; |
| | | margin: 0 auto; |
| | | //min-width: ; |
| | | // padding-left: 10rpx; |
| | | // padding-right: 10rpx; |
| | | width: fit-content; |
| | | min-width: 120rpx; |
| | | text-align: center; |
| | | } |
| | | |
| | | .desc { |
| | | font-weight: 400; |
| | | font-size: 24rpx; |
| | | color: #666666; |
| | | line-height: 34rpx; |
| | | } |
| | | .status-each.cur { |
| | | font-weight: 600; |
| | | font-size: 32rpx; |
| | | color: #20613D; |
| | | // line-height: 44rpx; |
| | | } |
| | | |
| | | .image { |
| | | position: absolute; |
| | | right: 0rpx; |
| | | width: 288rpx; |
| | | height: 148rpx; |
| | | bottom: 0rpx; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | .status-each:first-child { |
| | | margin-left: 0 |
| | | } |
| | | |
| | | .status-each:last-child { |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | |
| | | .order-top { |
| | | position: relative; |
| | | min-height: 182rpx; |
| | | background: #E1F0E7; |
| | | border-radius: 8rpx; |
| | | padding: 45rpx 35rpx; |
| | | |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 30rpx; |
| | | color: #000000; |
| | | line-height: 42rpx; |
| | | } |
| | | |
| | | .desc { |
| | | font-weight: 400; |
| | | font-size: 24rpx; |
| | | color: #666666; |
| | | line-height: 34rpx; |
| | | } |
| | | |
| | | .image { |
| | | position: absolute; |
| | | right: 0rpx; |
| | | width: 288rpx; |
| | | height: 148rpx; |
| | | bottom: 0rpx; |
| | | } |
| | | } |
| | | } |
| | | </style> |