初始化

This commit is contained in:
leiking
2026-06-29 10:54:33 +08:00
parent 761cee968e
commit 4983006317
156 changed files with 25687 additions and 0 deletions
+208
View File
@@ -0,0 +1,208 @@
<template>
<view class="container">
<view class="card hero">
<view class="t1">支付成功</view>
<view class="t2 muted">已为你生成订单支持随时预约/到店核销</view>
<view class="code">{{ o.verifyCode }}</view>
<view class="row between info">
<view class="muted">{{ o.projectName }}</view>
<view class="amt">¥{{ o.amount }}</view>
</view>
<view class="muted info2" v-if="o.orderType === 'coupon'">
{{ o.couponPlanLabel || '卡券' }} · {{ o.validText || '有效期以到店确认' }} · 剩余次数{{ o.remainingTimes }}
</view>
<view class="muted info2" v-else>预约{{ o.appointmentDate }} {{ o.appointmentSlot }}</view>
</view>
<view class="card block">
<view class="line row between">
<view class="muted">订单状态</view>
<view class="tag">{{ o.status }}</view>
</view>
<view class="line row between">
<view class="muted">核销方式</view>
<view>门店扫码 / 手动输码</view>
</view>
<view class="line row between" v-if="o.validText && o.orderType === 'coupon'">
<view class="muted">有效期</view>
<view>{{ o.validText }}</view>
</view>
<view class="line row between" v-if="o.orderType === 'booking'">
<view class="muted">技师</view>
<view>{{ o.technicianName }}</view>
</view>
</view>
<view class="btn btn-primary" @tap="goBooking">去预约</view>
<view class="btn btn-ghost" @tap="goOrders">查看订单</view>
<view class="btn btn-ghost" @tap="goMember">返回个人中心</view>
<AiFloat />
</view>
</template>
<script>
import AiFloat from '@/components/AiFloat.vue'
import { demoOrders } from '@/common/demoOrders'
function safeJsonParse(s) {
try {
return JSON.parse(s)
} catch (e) {
return null
}
}
const __DBG_URL = 'http://127.0.0.1:7777/event'
export default {
components: { AiFloat },
data() {
return {
order: null
}
},
onLoad(query) {
//#region debug-point verify-code-load
try {
uni.request({
url: __DBG_URL,
method: 'POST',
timeout: 2000,
data: {
sessionId: 'orders-detail-blank',
runId: 'pre-fix',
hypothesisId: 'H2',
msg: 'verify/code onLoad',
queryKeys: query ? Object.keys(query) : [],
payloadLen: query && query.payload ? String(query.payload).length : 0
}
})
} catch (e) {}
//#endregion debug-point verify-code-load
const raw = query.payload ? safeJsonParse(decodeURIComponent(query.payload)) : null
if (raw) this.order = raw
},
computed: {
o() {
const defaultCoupon = Array.isArray(demoOrders) ? demoOrders.find((x) => x && x.orderType === 'coupon') : null
return (
this.order ||
defaultCoupon ||
demoOrders[0] || {
id: 'ord_demo_fallback',
status: '待核销',
amount: 99,
projectId: 'p1',
projectName: '水氧净透体验',
durationMin: 60,
orderType: 'coupon',
couponPlanLabel: '单次券',
validText: '有效期以到店确认',
remainingTimes: 1,
verifyCode: 'VC20260622000'
}
)
}
},
methods: {
goBooking() {
const o = this.o
//#region debug-point verify-code-goBooking
try {
uni.request({
url: __DBG_URL,
method: 'POST',
timeout: 2000,
data: {
sessionId: 'orders-detail-blank',
runId: 'pre-fix',
hypothesisId: 'H2',
msg: 'verify/code goBooking',
projectId: o && o.projectId ? String(o.projectId) : ''
}
})
} catch (e) {}
//#endregion debug-point verify-code-goBooking
uni.navigateTo({ url: `/pages/booking/create?projectId=${o.projectId}` })
},
goOrders() {
//#region debug-point verify-code-goOrders
try {
uni.request({
url: __DBG_URL,
method: 'POST',
timeout: 2000,
data: {
sessionId: 'orders-detail-blank',
runId: 'pre-fix',
hypothesisId: 'H2',
msg: 'verify/code goOrders',
orderId: this.o && this.o.id ? String(this.o.id) : ''
}
})
} catch (e) {}
//#endregion debug-point verify-code-goOrders
const payload = encodeURIComponent(JSON.stringify(this.o))
uni.navigateTo({ url: `/pages/orders/detail?payload=${payload}` })
},
goMember() {
uni.switchTab({ url: '/pages/member/index' })
}
}
}
</script>
<style lang="scss" scoped>
.hero {
padding: 28rpx;
background: linear-gradient(135deg, rgba(17, 24, 39, 1) 0%, rgba(59, 130, 246, 1) 100%);
border: 0;
color: #fff;
}
.t1 {
font-size: 42rpx;
font-weight: 950;
}
.t2 {
margin-top: 10rpx;
color: rgba(255, 255, 255, 0.82);
font-size: 26rpx;
}
.code {
margin-top: 22rpx;
padding: 22rpx;
border-radius: 22rpx;
background: rgba(255, 255, 255, 0.12);
border: 1rpx dashed rgba(255, 255, 255, 0.42);
font-size: 50rpx;
font-weight: 950;
letter-spacing: 2rpx;
text-align: center;
}
.info {
margin-top: 18rpx;
}
.amt {
font-weight: 950;
}
.info2 {
margin-top: 10rpx;
color: rgba(255, 255, 255, 0.82);
font-size: 26rpx;
}
.block {
margin-top: 18rpx;
padding: 22rpx;
}
.line {
padding: 14rpx 0;
}
.tag {
padding: 10rpx 14rpx;
border-radius: 999rpx;
background: rgba(255, 255, 255, 0.14);
}
</style>