From d89c495a7da517d653e9ea42b8e6405eef823ef6 Mon Sep 17 00:00:00 2001 From: xuxueyang <xuxy@fengyuntec.com> Date: 星期一, 29 七月 2024 16:23:24 +0800 Subject: [PATCH] update 还有售后需要测试一下 --- pages/order/order.vue | 515 ++++++++++++++++++++++---------------------------------- 1 files changed, 206 insertions(+), 309 deletions(-) diff --git a/pages/order/order.vue b/pages/order/order.vue index 0097fe7..7a3e36d 100644 --- a/pages/order/order.vue +++ b/pages/order/order.vue @@ -1,315 +1,212 @@ +<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 + }) + }, + }, +} +</script> <template> - <view> - <!-- 团购、粗去玩、深夜食堂、挖宝商品 --> - <view style="position: fixed;left: 0;right: 0;top: 0;background-color: #fff;height: 84rpx;z-index: 999;"> - <top-tabs :tabs="tabs" :flg.sync="tabIndex" @change="changeTab"></top-tabs> + <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> - </view> - <view style="height: 100rpx;"></view> - <!-- 根据tab不同显示不同信息 --> + </view> - <!-- 根据不同加载不同的继续的底部 --> - <view style="min-height: calc(100vh - 200rpx);"> - <no-data v-if="!list||list.length==0" style="width: 100%;"></no-data> - <view v-if="type=='shop'" class="order-container"> - <card-list-item source="order" :type="type" :dto="item" v-for="(item,index) in list" @refresh="refresh" - :key="index"></card-list-item> - </view> - <view v-if="type=='travel'" class="order-container"> - <card-list-item source="order" :type="type" :dto="item" v-for="(item,index) in list" @refresh="refresh" - :key="index"></card-list-item> - </view> - <view v-if="type=='canteen'" class="order-container"> - <!-- 时间,状态 --> - <view class="order-item good-item" v-for="(item,index) in list" :key="index"> - <view class="flex "> - <view class="time">下单: {{item.createdDate}}</view> - <view class="status">{{item.statusStr}}</view> - </view> - - <view class="flex"> - <!-- overfi --> - <scroll-view class="flex scroll-view" :scroll-x="true" style="max-width: 500rpx;" - v-if="item.items"> - <view v-for="each of item.items" class="item-each"> - <image :src="each.cover" class="cover"></image> - <!-- 文字缩写 --> - <view class="cover-name word-e">{{each.name}}</view> - </view> - </scroll-view> - <view style="min-width: 100rpx;margin-left: auto;"> - <view class="price"><span class="dot">¥</span>{{item.totalAmount||'0.0'}}</view> - <view class="num-tip">共{{getItemsNum(item.items)||0}}件</view> - </view> - </view> - <!-- <view class="address"> - {{item.customerAddress}} - </view> --> - <view class="infos"> - <view class="flex"> - <view class="info-user-name flex flex1"> - <uni-icons type="person-filled" class="icon"></uni-icons> - {{item.customer}} - </view> - <view class="info-user-tel flex flex1"> - <uni-icons type="phone-filled" class="icon"></uni-icons> - {{item.customerTel}} - </view> - </view> - <view class="info-user-address flex"> - <uni-icons type="location-filled" class="icon"></uni-icons> - {{item.customerAddress}} - </view> - - </view> - <view class="buttons"> - <view class="button-wuliu button" v-if="item.status=='PENDING'||item.status==='PREPAYMENT'" - @click.stop="toPay(item)">支付订单</view> - <view class="button-wuliu button" v-if="item.status=='PENDING'||item.status==='PREPAYMENT'" - @click.stop="cancelPay(item)">取消订单</view> - - <view class="button-shouhuo button" @click.stop="toOrderDetail(item)">订单详情</view> - </view> - </view> - <!-- 货物单 --> - <!-- 地址 --> - </view> - <view v-if="type=='good'" class="order-container"> - <view class="order-item good-item" v-for="(item,index) in list" :key="index"> - <view class="flex "> - <view class="time">下单: {{item.createdDate}}</view> - <view class="status">{{item.statusStr}}</view> - </view> - <view class="flex"> - <image class="cover" :src="item.items[0].cover"></image> - <view> - <view class="name">{{item.items[0].name}}</view> - <!-- <view>介绍尺码</view> --> - <view class="price"><span class="dot">¥</span>{{item.totalAmount||'0.0'}}</view> - </view> - </view> - <view class="infos"> - <view class="info-user-name flex"> - <uni-icons type="person-filled" class="icon"></uni-icons> - {{item.customer}} - </view> - <view class="info-user-tel flex"> - <uni-icons type="phone-filled" class="icon"></uni-icons> - {{item.customerTel}} - </view> - <view class="info-user-address flex"> - <uni-icons type="location-filled" class="icon"></uni-icons> - {{item.customerAddress}} - </view> - - </view> - <view class="buttons"> - <view class="button-wuliu button" v-if="item.status=='PENDING'||item.status==='PREPAYMENT'" - @click.stop="toPay(item)">支付订单</view> - <view class="button-wuliu button" v-if="item.status=='PENDING'||item.status==='PREPAYMENT'" - @click.stop="cancelPay(item)">取消订单</view> - - <!-- <view class="button-shouhuo button" v-if="item.status!=='PENDING'&&item.status!=='PREPAYMENT'||true">查看物流</view> --> - <view class="button-shouhuo button" @click.stop="toOrderDetail(item)">订单详情</view> - - <!-- <view class="button-shouhuo button" v-if="item.status!=='PENDING'&&item.status!=='PREPAYMENT'">确认收货</view> --> - </view> - - </view> - </view> - </view> - - <footer-msg :more="page.total>0&&page.total>page.current*page.size"></footer-msg> - - </view> + </view> </template> -<script> - export default { - data() { - return { - type: '', - tabIndex: 1, - query: { - - }, - tabs: [{ - name: '团购', - id: 'shop', - api: '/api/buy/customer/group/list/mine' - }, - { - name: '粗去玩', - id: 'travel', - api: '/api/trip/customer/list/mine' - }, - { - name: '每日维C', - id: 'canteen', - api: '/api/canteen/customer/order/list' - - }, - { - name: '挖宝商品', - id: 'good', - api: '/api/wabao/customer/order/list' - - }, - ], - } - }, - onLoad(options) { - this.type = options.type || '' - var index = -1 - for (var item of this.tabs) { - index++ - if (item.id == this.type) { - this.tabIndex = index - this.listApi = item.api - break - } - } - this.refresh() - - - }, - onReachBottom() { - this.page.current += 1 - this.getMore() - }, - methods: { - toOrderDetail(row) { - var url = `/pages/order/bussiness-order/bussincess-order-detail?source=user&type=${this.type}` - if (this.type == 'travel') { - url += `&id=${row.id}&userId=${this.currentInfo.id}` - } else { - url += `&id=${row.id}` - } - uni.navigateTo({ - url: url - }) - }, - async cancelPay(item) { - if (!this.currentInfo.id) { - await this.$message.confirm('未登录,前往登录?') - uni.navigateTo({ - url: '/pages/user/user' - }) - return - } - await this.$message.confirm('是否确认取消支付?') - this.$message.showLoading() - const orderInfo = await this.$http.request('post', '/api/order/cancel/' + (item.orderId || - item.id || ''), { - - }) - this.$message.hideLoading() - if (code == 0) { - this.$message.showToast('取消成功') - this.dto.status = 'COMPLETED' - this.dto.statusStr = '已取消' - setTimeout(() => { - that.refresh() - }, 500) - } - - }, - async toPay(item) { - if (!this.currentInfo.id) { - this.$message.showToast('请先登陆') - return - } - if (item.status === 'PENDING' || item.status === 'PREPAYMENT') { - if (this.type == 'canteen') { - const orderInfo = await this.$http.request('get', '/api/canteen/customer/payment/' + item - .id, {}) - //支付准备 - var info = orderInfo.data - let that = this - wx.requestPayment({ - ...info, - success(res) { - console.log('pay success', res) - that.$message.showToast('支付成功') - setTimeout(() => { - that.refresh() - }, 500) - }, - fail(err) { - console.error('pay fail', err) - that.$message.showToast('支付失败') - } - }) - - } else { - // this.$message.showToast('等待接口,请联系开发者') - // return - this.$message.showLoading() - const orderInfo = await this.$http.request('post', '/api/order/pay/again/' + (item.orderId || - item.id || ''), { - - }) - var info = orderInfo.data || {} - this.$message.hideLoading() - if (code == 0) { - let that = this - wx.requestPayment({ - ...info, - success(res) { - console.log('pay success', res) - that.$message.showToast('支付成功') - item.status = 'PAYMENT' - item.statusStr = '已支付' - setTimeout(() => { - that.refresh() - }, 500) - }, - fail(err) { - console.error('pay fail', err) - that.$message.showToast('支付失败') - } - }) - } - } - - } else { - this.$message.showToast('请不要重复支付') - return - } - }, - getItemsNum(arr) { - var a = 0 - if (arr) { - for (var item of arr) { - a += item.num || 0 - } - } - - return a - }, - refresh() { - //获取 - console.log('refresh') - this.page.current = 1 - this.getList() - }, - changeTab(e) { - this.type = this.tabs[e].id - console.log('this.type', this.type, this.tabs, e) - - this.list = [] - for (var item of this.tabs) { - if (item.id == this.type) { - this.listApi = item.api - break - } - } - this.refresh() - }, - } - } -</script> - <style lang="scss" scoped> - @import './order.scss' -</style> \ No newline at end of file +.order-container { + padding: 24rpx 30rpx; + .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; + } + + + } + + .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; + } + + .status-each.cur { + font-weight: 600; + font-size: 32rpx; + color: #20613D; + // line-height: 44rpx; + } + + .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> -- Gitblit v1.9.3