2 Commits

Author SHA1 Message Date
yuzhiran c2ba810a02 fix: use onShow lifecycle to refresh login state in member center
1. member.vue: added onShow to refresh login state when returning from login page

2. manifest.json: bump to v1.0.15

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-18 21:23:20 +08:00
yuzhiran 3f1239c35e fix: add network error detection and timeout for mini program JSAPI payment
1. member.vue: check for res.statusCode === 0 (network failure) before accessing data, add 30s timeout

2. manifest.json: bump to v1.0.14

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-18 20:54:42 +08:00
2 changed files with 24 additions and 6 deletions
+2 -2
View File
@@ -1,8 +1,8 @@
{
"name": "宇之然AI磁场",
"appid": "__UNI__DEV__",
"versionName": "1.0.13",
"versionCode": "113",
"versionName": "1.0.15",
"versionCode": "115",
"description": "职引 - 宇之然AI磁场旗下AI模拟面试平台,提供AI面试官模拟练习、简历智能优化、大厂面经题库,助你轻松应对校招面试。",
"h5": {
"title": "职引 - AI模拟面试 | 宇之然AI磁场",
+22 -4
View File
@@ -89,6 +89,7 @@
<script setup>
import { ref, onMounted, nextTick } from 'vue'
import { onShow } from '@dcloudio/uni-app'
import { api } from '../../config'
import UQRCode from 'uqrcodejs'
@@ -112,13 +113,16 @@ const sprintFeatures = ref(['成长版全部权益', 'AI 语音分析(语气
const token = () => uni.getStorageSync('token') || ''
onMounted(async () => {
const refreshState = async () => {
// #ifdef MP-WEIXIN
isMp.value = true
// #endif
const t = token()
if (!t) return
if (!t) {
isLoggedIn.value = false
return
}
isLoggedIn.value = true
try {
@@ -146,7 +150,10 @@ onMounted(async () => {
}
}
} catch (e) { /* ignore */ }
})
}
onMounted(() => { refreshState() })
onShow(() => { refreshState() })
const goLogin = () => uni.navigateTo({ url: '/pages/login/login' })
@@ -183,6 +190,7 @@ const startPay = async (selectedPlan) => {
url: api('/payment/jsapi'), method: 'POST',
data: { plan: planLabel },
header: { 'Authorization': `Bearer ${t}`, 'Content-Type': 'application/json' },
timeout: 30000,
})
payLoading.value = false
@@ -203,6 +211,11 @@ const startPay = async (selectedPlan) => {
},
fail: (err) => { payError.value = '支付取消或失败'; uni.showToast({ title: '支付取消', icon: 'none' }) },
})
} else if (!res.statusCode || res.statusCode === 0) {
payLoading.value = false
const errMsg = '网络连接失败,请检查网络后重试'
payError.value = errMsg
uni.showToast({ title: errMsg, icon: 'none' })
} else {
payLoading.value = false
const errMsg = res.data?.message || '创建订单失败'
@@ -242,9 +255,14 @@ const startPay = async (selectedPlan) => {
})
// 轮询支付结果
pollPayResult(res.data.outTradeNo, planLabel)
} else if (!res.statusCode || res.statusCode === 0) {
payLoading.value = false
const errMsg = '网络连接失败,请检查网络后重试'
payError.value = errMsg
uni.showToast({ title: errMsg, icon: 'none' })
} else {
payError.value = res.data?.message || '支付服务暂不可用'
uni.showToast({ title: '支付服务暂不可用', icon: 'none' })
uni.showToast({ title: res.data?.message || '支付服务暂不可用', icon: 'none' })
}
} catch (e) {
payLoading.value = false