Browse Source

fix bug

dev
刘嘉炜 2 weeks ago
parent
commit
9047e60621
  1. 2
      src/api/server.js
  2. 2
      src/subpackage/groupon/api/index.js
  3. 5
      src/subpackage/groupon/components/ticket_item.vue
  4. 10
      src/subpackage/groupon/pages/confirm_order/ticket.vue
  5. 7
      src/subpackage/groupon/pages/confirm_order/venue.vue
  6. 82
      src/subpackage/groupon/pages/exchange_success.vue
  7. 56
      src/subpackage/order/pages/detail.vue
  8. 9
      src/utils/index.js

2
src/api/server.js

@ -48,7 +48,7 @@ server.interceptors.response.use(
// 用户异常
(response?.data?.code === 401&&response?.data?.message?.indexOf('用户') !== -1)
// 参数错误,[token]不允许为空
|| (response?.data?.code === 404&&response?.data?.message?.indexOf('token') !== -1)
|| (response?.data?.code === 404&&response?.data?.message?.indexOf('[token]') !== -1)
)loginHandle();
// if(response?.data?.error === '704'&&response?.data?.smsg === 'ustoken不能为空')loginHandle();
}

2
src/subpackage/groupon/api/index.js

@ -10,6 +10,8 @@ export const stadiumFind = params => server.post({ url: '/stadium/find', ...para
export const jsapiPreVerifyCertificates = params => server.post({ url: '/douyinMiniapp/202506/jsapiPreVerifyCertificates', ...params }); // 票券核销
export const orderAdd = params => server.post({ url: '/stadium/order/add', ...params }); // 生成场馆预约订单
export const orderPayMini = params => server.post({ url: '/stadium/order/pay/mini', ...params }); // A预约场馆-预约场馆-微信支付[小程序]
export const getOrder = params => server.post({ url: '/douyinMiniapp/202506/getOrder', ...params }); // 轮询获取订单号, 轮询了多久以后就直接放弃了
export const orderGet = params => server.post({ url: '/stadium/order/get', ...params }); // 预约订单详情

5
src/subpackage/groupon/components/ticket_item.vue

@ -1,5 +1,6 @@
<script setup>
import { reactive, ref, computed } from "vue";
import { formatDate } from "@/utils";
const emits = defineEmits([ 'click:use' ]);
const props = defineProps({
ticketName: {
@ -25,11 +26,11 @@ const props = defineProps({
});
const startTime = computed(() => {
return props.startTimeStamp ? new Date(props.startTimeStamp * 1000).toLocaleDateString() : '';
return props.startTimeStamp ? formatDate(props.startTimeStamp * 1000) : '';
});
const endTime = computed(() => {
return props.endTimeStamp ? new Date(props.endTimeStamp * 1000).toLocaleDateString() : '';
return props.endTimeStamp ? formatDate(props.endTimeStamp * 1000) : '';
});
</script>

10
src/subpackage/groupon/pages/confirm_order/ticket.vue

@ -5,6 +5,7 @@ import confirmTemplate from "../../components/confirm_template.vue";
import ticketItem from "../../components/ticket_item.vue";
import { jsapiPreVerifyCertificates } from "../../api";
import { routeTo, showModal, showLoad, hideLoad } from '@/utils/polish';
import { formatDate } from "@/utils";
const stadiumInfo = ref({}); //
const ticketInfo = ref({}); //
const verify_token = ref('');
@ -12,7 +13,7 @@ onLoad(() => {
});
const expireTimeStr = computed(() => {
return ticketInfo.expire_time ? new Date(ticketInfo.expire_time * 1000).toLocaleDateString() : '';
return ticketInfo.value?.expire_time ? formatDate(ticketInfo.value.expire_time * 1000) : '';
});
onMounted(() =>{
@ -53,7 +54,7 @@ function pvc_func({
}
function confirmBtn(){
let _tVal = ticketInfo.value;
let _sVal = stadiumInfo.value;
const _query = {
verifyToken: verify_token.value ?? '',
poiId: _tVal?.poi_id ?? '',
@ -69,8 +70,9 @@ function confirmBtn(){
},
success(res){
hideLoad();
console.warn('verifyCertificates success', res);
showModal({ content: '核销成功!' })
// console.warn('verifyCertificates success', res);
// showModal({ content: '' })
routeTo(`/subpackage/groupon/pages/exchange_success?brand_id=${_sVal?.brand_id ?? ''}&verify_token=${verify_token.value ?? ''}`);
},
fail(err){
hideLoad();

7
src/subpackage/groupon/pages/confirm_order/venue.vue

@ -64,8 +64,8 @@ function confirmBtn(){
},
success(res){
hideLoad();
console.warn('verifyCertificates success', res);
showModal({ content: '核销成功!' });
// console.warn('verifyCertificates success', res);
// showModal({ content: '' });
return createServerOrder();
},
fail(err){
@ -115,6 +115,9 @@ function createServerOrder(){
})
.then(oRes=>{
console.warn('orderPayMini', oRes);
if(oRes?.code === 0){
routeTo(`/subpackage/groupon/pages/exchange_success?brand_id=${_sVal?.brand_id ?? ''}&verify_token=${verify_token.value ?? ''}`);
}
})
})
}

82
src/subpackage/groupon/pages/exchange_success.vue

@ -2,34 +2,91 @@
import { onLoad } from '@dcloudio/uni-app';
import { reactive, ref } from "vue";
import textLine from "../components/text_line.vue";
onLoad(() => {
import { getOrder, orderGet } from "../api";
import { routeTo, showModal } from "@/utils/polish";
const orderInfo = ref({});
onLoad(oprions => {
getOrderNoFn({ verify_token: oprions?.verify_token ?? '' })
.then(orderNo =>{
orderGet({ data: { order_no: orderNo, brand_id: oprions?.brand_id ?? '' } })
.then(oRes=>{
orderInfo.value = oRes?.data ?? {};
})
})
});
// ef5bc53a8711d876adbfac7710a03f3f
function getOrderNoFn({ verify_token, times = 1, max = 5, interval = 300 }){
if(times > max){
console.warn('轮询了' + (times - 1) + '次');
showModal({ content: '查询超时!' });
return Promise.reject('超时')
}
times++
return getOrder({ data: { verify_token } })
.then(res=>{
let _orderNo = res?.data?.order_no ?? '';
if(_orderNo){
return Promise.resolve(_orderNo);
}else if(res?.code === 0 && res?.data?.order_no === ''){
return new Promise(rs=>{
setTimeout(_=>{
rs(getOrderNoFn({ verify_token, times, max, interval }))
}, interval)
})
}else {
return Promise.reject(res);
}
})
}
function copyBtn(){
uni.setClipboardData({
data: `${orderInfo.value?.verify_code}`
})
}
//
function previewCode(){
uni.previewImage({ urls: [orderInfo.value?.verify_qrcode] })
}
function toOrderDetail(){
let _oVal = orderInfo.value;
routeTo(`/subpackage/order/pages/detail?brand_id=${_oVal?.brand_id ?? ''}&order_no=${_oVal?.order_no ?? ''}`)
}
</script>
<template>
<view class="exchange-success">
<view class="exchange-success" v-if="orderInfo?.order_no">
<view class="es-icon">&#xe655;</view>
<view class="es-order-btn">查看订单</view>
<view class="es-order-btn" @click="toOrderDetail">查看订单</view>
<view class="es-txt">兑换成功</view>
<view class="es-container">
<view class="ec-stadium">
<view class="es-logo"></view>
<view class="es-name">MJ体育(天空篮球从云店)</view>
<image v-if="orderInfo?.stadium_logo" class="es-logo" mode="aspectFit" :src="orderInfo?.stadium_logo ?? ''"></image>
<view class="es-name">{{ orderInfo?.stadium_name ?? '' }}</view>
</view>
<view class="ec-info">
<text-line label="预订项目:">单次卡</text-line>
<text-line label="预订项目:">{{ orderInfo?.project ?? '-' }}</text-line>
<text-line label="可用票数:">1</text-line>
<text-line label="到期时间:">2020-10-16 17:45:20</text-line>
<text-line label="到期时间:">{{ orderInfo?.EndTime ?? '' }}</text-line>
</view>
<view class="ec-line"></view>
<view class="ec-code">
<view class="ec-tip">点击二维码可放大查看</view>
<image class="ec-img"></image>
<image
v-if="orderInfo?.verify_qrcode"
class="ec-img"
mode="aspectFit"
:src="orderInfo?.verify_qrcode"
@click="previewCode"
></image>
<view class="ec-txt">
<view class="et-num">验证码12253 51234</view>
<view class="et-copy">复制</view>
<view class="et-num">验证码{{ orderInfo?.verify_code ?? '' }}</view>
<view class="et-copy" @click="copyBtn">复制</view>
</view>
</view>
<view class="ec-desc">
@ -43,7 +100,7 @@ onLoad(() => {
</view>
</view>
</view>
<view class="es-share">分享给朋友 &#xe6cc;</view>
<view class="es-share" v-if="false">分享给朋友 &#xe6cc;</view>
</view>
</template>
@ -85,7 +142,6 @@ onLoad(() => {
margin-right: 20upx;
width: 36upx;
height: 36upx;
background: skyblue;
}
.es-name{
flex-grow: 1;

56
src/subpackage/order/pages/detail.vue

@ -214,6 +214,17 @@ function imError(e){
></detail-verify>
</view>
<view class="od-box od-code" v-if="orderInfo?.order_type === 0&&(orderInfo.pay_status==1 || orderInfo.pay_status==8)">
<!-- 二维码 -->
<image
mode="aspectFit"
class="oc-code-img"
:src="orderInfo.verify_qrcode"
@click="previewImg(orderInfo.verify_qrcode)"
></image>
<view class="oc-tip">点击二维码可放大查看</view>
</view>
<view class="od-box od-product" v-if="[1,2].includes(orderInfo?.order_type)">
<view class="od-title">产品信息</view>
<text-line label="预定项目:">{{ orderInfo?.project ?? '-' }}</text-line>
@ -239,24 +250,7 @@ function imError(e){
</template>
</venue-info-async>
</view>
<view class="od-box od-code" v-if="orderInfo.order_type === 0 && (orderInfo.pay_status==1 || orderInfo.pay_status==8)">
<!-- 二维码 -->
<image
mode="aspectFit"
class="oc-code-img"
:src="orderInfo.verify_qrcode"
@click="previewImg(orderInfo.verify_qrcode)"
></image>
<view class="oc-tip">点击二维码可放大查看</view>
</view>
<view class="od-box">
<!-- 联系方式/地址 -->
<detail-contact
:address="orderInfo?.venue_addr ?? ''"
@click:phone="phoneClick"
@click:nav="navClick"
></detail-contact>
</view>
<view class="od-box od-total">
<view class="ot-line">
<view class="ol-val">金额小计</view>
@ -269,14 +263,15 @@ function imError(e){
<view class="ot-amount"><text class="oa-txt">合计支付</text>{{ orderInfo?.pay_amount || '0' }}</view>
</view>
<view class="od-box od-payment">
<!-- 支付信息 -->
<view class="od-title">支付信息</view>
<text-line label="支付方式:">{{ orderInfo?.pay_type_text ?? '-' }}</text-line>
<text-line label="支付时间:">{{ orderInfo?.pay_time ?? '-' }}</text-line>
<text-line label="交易号:">{{ orderInfo?.trace_no ?? '-' }}</text-line>
<view class="od-box">
<!-- 联系方式/地址 -->
<detail-contact
:address="orderInfo?.venue_addr ?? ''"
@click:phone="phoneClick"
@click:nav="navClick"
></detail-contact>
</view>
<view class="od-box">
<!-- 抖音商品信息 -->
<detail-goods
@ -284,6 +279,15 @@ function imError(e){
:imgUrl="orderInfo?.image"
></detail-goods>
</view>
<view class="od-box od-payment">
<!-- 支付信息 -->
<view class="od-title">支付信息</view>
<text-line label="支付方式:">{{ orderInfo?.pay_type_text ?? '-' }}</text-line>
<text-line label="支付时间:">{{ orderInfo?.pay_time ?? '-' }}</text-line>
<text-line label="交易号:">{{ orderInfo?.trace_no ?? '-' }}</text-line>
</view>
<view class="od-fixed">
<!-- <view class="od-fixed"> -->
<button class="of-im-btn" open-type="lifeIm" @error="imError">
@ -439,9 +443,9 @@ function imError(e){
.of-im-btn{
@include clearBtn;
padding: 0 10upx;
text-align: center;
@include flcw(28upx, 40upx, #333);
@include customerService;
text-align: center;
.oib-icon{
font-family: 'customerService';
}

9
src/utils/index.js

@ -94,3 +94,12 @@ export function isSameDay(timeStampA, timeStampB) {
let dateB = new Date(timeStampB);
return (dateA.setHours(0, 0, 0, 0) == dateB.setHours(0, 0, 0, 0));
}
export function formatDate(timestamp) {
const date = new Date(timestamp);
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0'); // 月份从0开始
const day = date.getDate().toString().padStart(2, '0');
return `${year}-${month}-${day}`;
}
Loading…
Cancel
Save