From efa9bfe98ba906e4c9b8f49c89f5da162a46bb0f Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期一, 13 一月 2025 10:21:24 +0800 Subject: [PATCH] 1.微信一键登录:新增“同意用户协议”之后才可登录 --- pages/order/order.vue | 601 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 536 insertions(+), 65 deletions(-) diff --git a/pages/order/order.vue b/pages/order/order.vue index 91f51cc..f0a667a 100644 --- a/pages/order/order.vue +++ b/pages/order/order.vue @@ -1,11 +1,13 @@ <script> export default { + data() { return { type: 'customer', query: { status: '', }, + timer: undefined, status: [{ name: '全部', value: '' @@ -37,13 +39,27 @@ ] }; }, - onLoad(options) { + onUnload() { + this.timer && clearTimeout(this.timer) + }, + async onLoad(options) { this.query.status = options.status || '' this.listApi = `/api/customer/order/list` - this.getList() + await this.getList() + + console.log('order-list-query',this.query.status) + if(this.query.status=='PENDING'){ + this.getPendingTimer() + } + + }, + + + + onShow() { + // console.log("onshow") }, onReachBottom() { - this.page.current += 1 this.getMore() }, async onPullDownRefresh() { @@ -52,6 +68,144 @@ uni.stopPullDownRefresh() }, methods: { + + changeStatus(item) { + this.query.status = item.value || ''; + this.refreshList(); + if(item.value=='PENDING'){ + this.getPendingTimer() + }else{ + if(this.timer){ + clearTimeout(this.timer) + this.timer=null + } + } + + }, + + getPendingTimer(){ + + this.timer = setInterval(async () => { + + let res = await this.$http.request('get', `/api/order/time/now`, { + params: {} + }) + let serverTime=res.data; + + //倒计时 + var nowdate = serverTime - 1000 * 60 * 15 + // var nowdate = new Date().getTime() - 1000 * 60 * 5 + var change = false + for (var item of this.list) { + if (item.statusBackend === 'PENDING') { + //计算倒计时 + + var diff = new Date(item.createTime).getTime() - nowdate + // console.log('diff', diff, item) + if (diff <= 2000 && true) { + //超过了5分钟 + item.statusBackend = 'CANCEL' + item.statusBackend = '已取消' + item.status = 'CANCEL' + item.statusStr = '已取消' + + item.bctime = '' + change = true + + } else { + //相差 + var alltime = parseInt(diff / 1000) + var tt = 0 + if (alltime > 60) { + tt = alltime - parseInt(alltime / 60) * 60 + } else { + tt = alltime + } + // item.bctime = `0${parseInt(alltime / 60)}:${tt<10?'0':''}${tt}` + item.bctime = `${parseInt(alltime / 60) < 10 ? '0' : ''}${parseInt(alltime / 60)}:${tt < 10 ? '0' : ''}${tt}` + change = true + + } + } + } + if (change) + this.$forceUpdate() + }, 1000) + }, + + openbrand(item) { + console.log(item) + //也要判断一下是否重复进入 + //判断堆栈,如果是店铺,就直接返回 + //或者是:从商铺到列表再到详情,再到商铺,这种也不行 + const pages = getCurrentPages(); + console.log('toShopping', pages) + if (pages && pages.length >= 2) { + if (pages[pages.length - 2].route === "sub_pages/customer/shop/shop") { + uni.navigateBack() + return + } + } + if (pages && pages.length >= 3) { + if (pages[pages.length - 3].route === "sub_pages/customer/shop/shop" && + pages[pages.length - 2].route === "sub_pages/customer/trade/list" + ) { + uni.navigateBack({ + delta: 2 + }) + return + } + } + + if (pages.length >= 10) { + //直接强制购物车 + uni.reLaunch({ + url: '/sub_pages/customer/shop/shop?id=' + (item.supplierId || '') + }) + } else { + uni.navigateTo({ + url: '/sub_pages/customer/shop/shop?id=' + (item.supplierId || '') + }) + } + + }, + toFlowerDetail(item) { + uni.navigateTo({ + url: `/sub_pages/customer/trade/detail?id=${item.flowerId}` + }) + }, + async getList_after() { + + let res = await this.$http.request('get', `/api/order/time/now`, { + params: {} + }) + let serverTime=res.data; + + //倒计时 + var nowdate = serverTime - 1000 * 60 * 15 + + // var nowdate = new Date().getTime() - 1000 * 60 * 15 + var change = false + for (var item of this.list) { + if (item.statusBackend === 'PENDING') { + //计算倒计时 + var diff = new Date(item.createTime).getTime() - nowdate + if (diff <= 2000 && true) { + //超过了5分钟 + item.statusBackend = 'CANCEL' + item.statusBackend = '已取消' + item.status = 'CANCEL' + item.statusStr = '已取消' + + item.bctime = '' + change = true + + } + } + } + if (change) + this.$forceUpdate() + }, toDetail(item) { // 订单详情页面 // console.log(' toDetail item', item) @@ -59,9 +213,46 @@ url: '/pages/order/order-detail?id=' + item.id }) }, - toDetailSale(item) { + + commentButtonClick(item){ uni.navigateTo({ - url: '/pages/order/order-detail?showsales=1&id=' + item.id + url: '/pages/order/comment/order-comment?id='+item.id + }) + }, + + async copyOrder(item) { + console.log(item) + await this.$message.confirm('是否确定再来一单') + // 发送请求 + this.$message.showLoading() + const { + code, + data, + msg + } = await this.$http.request('get', '/api/customer/order/copyOrder', { + params: { + id: item.id, + } + }) + this.$message.hideLoading() + if (code === 0) { + //微信接口 + if (msg && msg != "") { + this.$message.showToast(msg) + } + + } + }, + + toDetailSaleInfo(dto, flower) { + console.log('flower', dto, flower) + uni.navigateTo({ + url: '/pages/order/order-detail?showsales=1&id=' + dto.id + '&flowerId=' + flower.id + }) + }, + toOrderItemDetail(item, op, opstr) { + uni.navigateTo({ + url: `/sub_pages/supplier/order-manage/order-manage-settlement-op-detail?opStr=${opstr}&op=${op}&orderItemId=${item.id || item.orderItemId}` }) }, async buttonClick(item, buttontype) { @@ -72,33 +263,94 @@ 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.$store.dispatch('sign_add','order') - this.refreshList() - } - } - break - case 'confirm': { - await this.$message.confirm('是否确定收货') - // 发送请求 - this.$message.showLoading() - const { - code - } = await this.$http.request('get', '/api/customer/order/receive/confirm', { + } = await this.$http.request('get', '/api/customer/order/refund', { params: { id: item.id, } }) this.$message.hideLoading() if (code === 0) { + this.$store.dispatch('sign_add', 'order') this.refreshList() + } + } + break + case 'confirm': { + await this.$message.confirm('是否确定收货') + var tryCallWx = false + // #ifdef MP + let tmp = this + if (wx.openBusinessView && item.paymentTrId) { + tryCallWx = true + wx.openBusinessView({ + businessType: 'weappOrderConfirm', + extraData: { + // merchant_id: '1230000109', + // merchant_trade_no: '1234323JKHDFE1243252', + // merchant_id: '1661512517', + // merchant_trade_no: item.orderId || item.id || '', + transaction_id: item.paymentTrId + }, + async success(info) { + console.log('确认收货 info success', info) + //dosomething + if (info.extraData && info.extraData.status === 'fail') { + tmp.$message.showToast('支付和确认收货需要是同一微信号,请联系实际支付人登录确认') + } else if (info.extraData && info.extraData.status === 'cancel') { + + } else { + + + // 发送请求 + tmp.$message.showLoading() + const { + code + } = await tmp.$http.request('get', + '/api/customer/order/receive/confirm', { + params: { + id: item.id, + } + }) + tmp.$message.hideLoading() + if (code === 0) { + tmp.refreshList() + //刷新积分 + tmp.$store.dispatch('getCurrentInfo') + tmp.$message.showToast('收货成功') + } + } + }, + fail(e) { + console.log('确认收货 info error', e) + // console.log('error fail', e) + tmp.$message.showToast('收货失败') + }, + complete(info) { + //dosomething + console.log('确认收货 info complete', info) + } + }); + } + + // #endif + + if (!tryCallWx) { + // 发送请求 + 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() + //刷新积分 + this.$store.dispatch('getCurrentInfo') + this.$message.showToast('收货成功') + } } } @@ -125,7 +377,7 @@ console.log('pay success', res) that.$message.showToast('支付成功') setTimeout(() => { - that.$store.dispatch('sign_add','order') + that.$store.dispatch('sign_add', 'order') that.refreshList() }, 200) }, @@ -178,9 +430,28 @@ } }) this.$message.hideLoading() - if (code === 0) { - this.$store.dispatch('sign_add','order') + if (code === 0) { + this.$store.dispatch('sign_add', 'order') this.refreshList() + } + } + break + case 'delOrder': { + await this.$message.confirm('是否删除此订单') + // 发送请求 + this.$message.showLoading() + const { + code + } = await this.$http.request('get', '/api/customer/order/delete', { + params: { + id: item.id, + } + }) + this.$message.hideLoading() + if (code === 0) { + // this.$store.dispatch('sign_add', 'order') + this.refreshList() + } } break @@ -194,7 +465,7 @@ </script> <template> <view class="order-container"> - <view class="order-top"> + <view class="order-top" v-if="false"> <view class="title">订单信息</view> <view class="flex"> <image class="image img100" @@ -204,76 +475,185 @@ </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 v-for="each of status" :key="each.value" @click.stop="(e)=>{ query.status = each.value || ''; refreshList(); + if(query.status!='PENDING'){ + timer && clearTimeout(this.timer) + timer=null + }else{ + getPendingTimer() + } }" class="status-each" :class="[query.status===each.value?'cur':'']"> + {{ each.name }} + </view> --> + <view v-for="each of status" :key="each.value" @click.stop="changeStatus(each)" 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 v-for="(dto,index) in list" :key="index" class="m-t-12"> <view class="order-item list-item"> <view class="title flex"> <view> - 订单:{{ item.orderNo }} + 订单:{{ dto.orderNo }} </view> - <view class="status t-red m-l-a m-r-0">¥{{ item.paymentAmount || item.totalAmount || '0'}}</view> + <view class="status t-red m-l-a m-r-0">¥{{ dto.paymentAmount || dto.totalAmount || '0'}}</view> </view> - <view class="desc flex" v-if="!query.status"> + <view class=" desc flex" v-if="!query.status"> <view class="label"> 订单状态: </view> - <view class="value">{{ item.statusBackendStr }}</view> + <view class="value" style="color: #000">{{ dto.statusBackendStr || '-' }}</view> </view> - <view class="desc flex"> + <view class="desc flex" v-if="dto.deliveryNo" @click="copyTxt(dto.deliveryNo)"> <view class="label"> - 收货人: + 快递单号: </view> - <view class="value">{{ item.customer }}</view> + <view class="value">{{ dto.deliveryNo }}</view> </view> - <view class="desc flex"> - <view class="label"> - 收货人手机号码: + + <view class="flex"> + <view class="desc flex flex1"> + <view class="label"> + 收货人: + </view> + <view class="value">{{ dto.customer || '-' }}</view> </view> - <view class="value">{{ item.customerTel }}</view> - </view> - <view class="desc flex"> - <view class="label"> - 收货地址: + <view class="desc flex flex1"> + <view class="label"> + 收货人手机号码: + </view> + <view class="value">{{ dto.customerTel || '-' }}</view> </view> - <view class="value">{{ item.customerAddress }}</view> </view> - <view class="desc flex" v-if="item.status!=='PENDING'"> + <view class="flex"> + <view class="desc flex flex1"> + <view class="label"> + 收货地址: + </view> + <view class="value">{{ dto.customerAddress }}</view> + </view> + <view class="desc flex flex1" v-if="dto.deliveryName"> + <view class="label"> + 快递名称: + </view> + <view class="value">{{ dto.deliveryName }}</view> + </view> + </view> + + <view class="desc flex" v-if="dto.statusBackend!=='PENDING'&&dto.statusBackend!=='CANCEL'"> <view class="label"> 支付时间: </view> - <view class="value">{{ item.paymentTime }}</view> + <view class="value">{{ dto.paymentTime || '-' }}</view> + </view> + <view class="flower-info m-b-5 m-t-8 br-4" v-for="(item,j) of dto.items" :key="j"> + <!-- <view class="line-gray"></view> --> + + <view class="supplier-name w-fit m-l-0 m-r-a" @click.stop="openbrand(item)"> + <image class="icon-dp br-4" src="/static/common/icon-dp.png"></image> + {{ item.supplierName|| '' }} > + </view> + <view class="flex m-t-12 flex-wrap-normal"> + <!-- @click="previewImg(item.flowerCover)" --> + <image class="flower-img img100 m-r-6" :src="item.flowerCover" + @click.stop="toDetail(dto)" > + </image> + <!-- <view class="flex1" @click.stop="toFlowerDetail(item)"> --> + <view class="flex1" > + + <view class=" flex"> + <view class="title flex flex1"> + <!-- <span class="level">{{ item.flowerCategory }}</span> --> + <span class="m-r-10" @click.stop="toDetail(dto)">{{ item.flowerName }}</span> + <span class="level" @click.stop="toDetail(dto)">{{ item.flowerLevelStr }}</span> + <view class="m-l-a m-r-10 flex"> + <view class="m-r-10 button-icon" @click="toOrderItemDetail(item,'lack','缺货')" + v-if="item.lackNum"> + 缺货<uni-icons type="right" size="14" color="#ffffff"></uni-icons> + </view> + <view class="m-r-10 button-icon" @click="toOrderItemDetail(item,'reduce','降级')" + v-if="item.reduceNum"> + 降级<uni-icons type="right" size="14" color="#ffffff"></uni-icons> + </view> + </view> + </view> + </view> + <view class="each-list" @click.stop="toDetail(dto)"> + <view class="each-item"> + <view class="label">颜色</view> + <view class="value">{{ item.flowerColor || '-' }}</view> + + </view> + <view class="each-item"> + <view class="label">规格</view> + <view class="value">{{ item.flowerUnit || '-' }}</view> + </view> + + <view class="each-item"> + <view class="label">数量</view> + <view class="value">{{ item.num || 0 }}</view> + + </view> + <view class="each-item"> + <view class="label">售价</view> + <view class="value">¥{{ item.price || 0 }}</view> + + </view> + <view class="each-item"> + <view class="label">商品总金额</view> + <view class="value">¥{{ item.total || 0 }}</view> + + </view> + </view> + </view> + </view> + <view class="line-gray" + v-if="dto.statusBackend!=='COMPLETED'&&dto.statusBackend!=='SEND'&&dto.statusBackend=='RECEIVE'"> + </view> + <!-- dtoId:{{dto.id}} --> + <!-- flowerId:{{item.id}} --> + <view class="flex buttons" + v-if="dto.statusBackend!=='COMPLETED'&&dto.statusBackend!=='SEND'&&dto.statusBackend=='RECEIVE'"> + <view class="button button-1 m-l-a m-r-0" @click="toDetailSaleInfo(dto,item)" + v-if="dto.statusBackend === 'RECEIVE'"> 申请售后 + </view> + </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 class="button button-0 m-l-a m-r-0" @click="buttonClick('refund')" v-if="item.couldRefund"> + <view class="flex buttons"> + <view class="button button-0 m-l-a m-r-15" v-if="dto.statusBackend==='CANCEL'" + @click="buttonClick(dto,'delOrder')">删除订单</view> + <view class="button button-0 m-l-a m-r-15" v-if="dto.statusBackend==='PENDING'" + @click="buttonClick(dto,'cancelOrder')">取消订单</view> + <view class="button button-1 m-l-15 m-r-15" v-if="dto.statusBackend==='PENDING'" + @click="buttonClick(dto,'payAgain')">重新支付<span v-if="dto.bctime">({{dto.bctime}})</span></view> + + <view class="button button-0 m-l-a m-r-15" @click="buttonClick(dto,'refund')" + v-if="dto.couldRefund"> 申请退款 </view> - <view class="button button-0 m-l-a m-r-0" @click="buttonClick('confirm')" - v-if="item.status ==='RECEIVE'"> 确认收货 + <view class="button button-0 m-l-a m-r-15" @click="buttonClick(dto,'confirm')" + v-if="dto.statusBackend ==='RECEIVE'"> 确认收货 </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'"> 评价 + <!-- ||item.statusBackend=='COMPLETED' --> + <!-- <view class="button button-1 m-l-a m-r-15" @click="toDetailSale(dto)" + v-if="dto.statusBackend === 'RECEIVE'"> 申请售后 + </view> --> + <!-- <view class="button button-0 m-l-a m-r-15" @click="buttonClick(dto,'evaluate')" + v-if="dto.statusBackend === 'EVALUATE'"> 评价 + </view> --> + <view class="button button-0 m-l-a m-r-15" @click="commentButtonClick(dto)" + v-if="dto.statusBackend === 'EVALUATE'"> 评价 </view> - - <view class="button button-1 m-l-15 m-r-0" @click="toDetail(item)">查看详情</view> + <!-- <view class="button button-0 m-l-a m-r-15" @click="copyOrder(dto)">再来一单</view> --> + <view class="button button-1 m-l-a m-r-0" @click="toDetail(dto)">查看详情</view> </view> </view> @@ -334,6 +714,7 @@ background: #20613D; text-align: center; border-radius: 30rpx; + min-width: 80rpx; } @@ -350,6 +731,96 @@ } } + .flower-info { + padding: 0rpx; + + background: #FFFFFF; + border-radius: 8rpx; + + .supplier-name { + border-bottom: 2rpx solid #EEEEEE; + font-weight: 600; + font-size: 28rpx; + color: #000000; + padding-bottom: 10rpx; + line-height: 40rpx; + + .icon-dp { + width: 27rpx; + height: 27rpx; + display: inline-block; + vertical-align: middle; + } + } + + .title { + font-weight: 600; + font-size: 28rpx; + color: #000000; + line-height: 40rpx; + flex: 1; + + .level { + font-weight: 400; + font-size: 28rpx; + color: #20613D; + line-height: 40rpx; + margin-right: 20rpx; + } + + .button-icon { + color: #fff; + padding-left: 10rpx; + padding-right: 10rpx; + background-color: darkred; + } + } + + .flower-img { + width: 128rpx; + height: 118rpx; + min-width: 128rpx; + min-height: 118rpx; + + + } + + .each-list { + display: flex; + flex-wrap: wrap; + margin-top: 6rpx; + + .each-item { + min-width: 40%; + max-width: 50%; + text-align: center; + margin-left: 0rpx; + margin-right: auto; + display: flex; + + .label { + font-weight: 400; + font-size: 24rpx; + color: #666666; + text-align: left; + padding-right: 10rpx; + } + + .label::after { + content: ": " + } + + .value { + font-weight: 400; + font-size: 24rpx; + color: #666666; + } + } + } + + } + + } .status-list { -- Gitblit v1.9.3