|
|
@@ -85,7 +85,7 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { getAvailableGuides, getPackagePrice, createPackageOrder } from '../../utils/api.js'
|
|
|
+import { getAvailableGuides, getPackagePrice, createAssessmentOrder, createVirtualPayOrder, requestVirtualPayment, getAssessmentOrderDetail } from '../../utils/api.js'
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
|
@@ -246,43 +246,98 @@ export default {
|
|
|
uni.showToast({ title: '请选择任务模板', icon: 'none' })
|
|
|
return
|
|
|
}
|
|
|
+ if (!this.selectedGuideId) {
|
|
|
+ uni.showToast({ title: '请选择成长规划师', icon: 'none' })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var childId = uni.getStorageSync('currentChildId')
|
|
|
+ if (!childId) {
|
|
|
+ uni.showToast({ title: '请先选择孩子', icon: 'none' })
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
try {
|
|
|
uni.showLoading({ title: '创建订单中...' })
|
|
|
|
|
|
- const userId = uni.getStorageSync('userId')
|
|
|
- const familyId = uni.getStorageSync('familyId')
|
|
|
+ var userId = uni.getStorageSync('userId')
|
|
|
+ var familyId = uni.getStorageSync('familyId')
|
|
|
+ var self = this
|
|
|
|
|
|
- const res = await createPackageOrder({
|
|
|
- userId: userId,
|
|
|
+ var createRes = await createAssessmentOrder({
|
|
|
familyId: familyId,
|
|
|
- packageId: this.selectedPackageId,
|
|
|
+ userId: userId,
|
|
|
+ childId: childId,
|
|
|
guideId: this.selectedGuideId,
|
|
|
- inviteCode: this.inviteCode,
|
|
|
- price: this.totalPrice,
|
|
|
- payMethod: 'wechat'
|
|
|
+ guideName: this.selectedGuideName,
|
|
|
+ packageId: this.selectedPackageId,
|
|
|
+ packageName: this.selectedPackage ? this.selectedPackage.name : '',
|
|
|
+ totalPrice: this.totalPrice,
|
|
|
+ discountAmount: this.discountAmount
|
|
|
})
|
|
|
-
|
|
|
uni.hideLoading()
|
|
|
|
|
|
- if (res.code === 200) {
|
|
|
- // 跳转到支付页面
|
|
|
- uni.navigateTo({
|
|
|
- url: `/pages/assessment/purchase?orderNo=${res.data.orderNo}&totalPrice=${this.totalPrice}`
|
|
|
- })
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.message || '创建订单失败',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
+ if (createRes.code !== 200 || !createRes.data || !createRes.data.orderNo) {
|
|
|
+ uni.showToast({ title: '创建订单失败', icon: 'none' })
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var orderNo = createRes.data.orderNo
|
|
|
+ // 支付(内联返回 VirtualPayParamsDTO;testMode 返回 null 表示 mock 直接支付成功)
|
|
|
+ var payRes = await createVirtualPayOrder(orderNo, 'ASSESSMENT')
|
|
|
+ if (payRes.code !== 200) {
|
|
|
+ uni.showToast({ title: payRes.message || '支付失败', icon: 'none' })
|
|
|
+ return
|
|
|
}
|
|
|
+
|
|
|
+ if (!payRes.data) {
|
|
|
+ // testMode:mock 已直接标记支付成功 → 跳预约页
|
|
|
+ uni.showToast({ title: '支付成功', icon: 'success' })
|
|
|
+ setTimeout(function() {
|
|
|
+ uni.navigateTo({ url: '/pages/assessment/apply' })
|
|
|
+ }, 800)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 真实模式:拉起虚拟支付
|
|
|
+ requestVirtualPayment(payRes.data, {
|
|
|
+ success: function() {
|
|
|
+ uni.showToast({ title: '支付成功,确认中…', icon: 'none' })
|
|
|
+ self.pollOrderStatus(orderNo)
|
|
|
+ },
|
|
|
+ fail: function() {
|
|
|
+ uni.showToast({ title: '支付未完成', icon: 'none' })
|
|
|
+ }
|
|
|
+ })
|
|
|
} catch (e) {
|
|
|
uni.hideLoading()
|
|
|
- uni.showToast({
|
|
|
- title: '创建订单失败',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
+ if (e.code === 46001) {
|
|
|
+ uni.showToast({ title: '该商品暂未开放购买', icon: 'none' })
|
|
|
+ } else {
|
|
|
+ uni.showToast({ title: e.message || '支付失败', icon: 'none' })
|
|
|
+ }
|
|
|
}
|
|
|
+ },
|
|
|
+ pollOrderStatus: function(orderNo) {
|
|
|
+ var self = this
|
|
|
+ var times = 0
|
|
|
+ var timer = setInterval(function() {
|
|
|
+ times++
|
|
|
+ getAssessmentOrderDetail(orderNo).then(function(res) {
|
|
|
+ var order = res.data || {}
|
|
|
+ if (order.status === 'paid') {
|
|
|
+ clearInterval(timer)
|
|
|
+ uni.showToast({ title: '支付成功', icon: 'success' })
|
|
|
+ setTimeout(function() {
|
|
|
+ uni.navigateTo({ url: '/pages/assessment/apply' })
|
|
|
+ }, 800)
|
|
|
+ } else if (times >= 5) {
|
|
|
+ clearInterval(timer)
|
|
|
+ uni.navigateTo({ url: '/pages/assessment/apply' })
|
|
|
+ }
|
|
|
+ }).catch(function() {
|
|
|
+ if (times >= 5) { clearInterval(timer); uni.navigateTo({ url: '/pages/assessment/apply' }) }
|
|
|
+ })
|
|
|
+ }, 2000)
|
|
|
}
|
|
|
}
|
|
|
}
|