hookehuyr

feat(pay-confirm): 为支付确认页添加环境适配的状态文本处理

新增小程序环境版本检测逻辑,区分生产与非生产环境。新增状态文本格式化函数,生产环境下展示更友好的用户提示。重构状态文本赋值流程统一使用格式化函数,补充缺失的Taro导入语句。
......@@ -33,7 +33,7 @@
<script setup>
import { computed, ref, watch } from 'vue'
import { useLoad } from '@tarojs/taro'
import Taro, { useLoad } from '@tarojs/taro'
import { useWechatMiniPay } from '@/composables/useWechatMiniPay'
import { getVersionedImageAssetByName, preloadImageAssetVersion } from '@/utils/assetUrl'
import { redirectAfterPaySuccess } from '@/utils/paySuccessRedirect'
......@@ -42,6 +42,7 @@ const order_id = ref('')
const amount = ref('')
const status_text = ref('')
const navigating_after_pay_success = ref(false)
const mini_program_env_version = ref('')
const {
pay_loading,
......@@ -65,9 +66,75 @@ const pay_button_style = computed(() => ({
background: `url('${getVersionedImageAssetByName('btnn@2x.png')}') center / 100% 100% no-repeat`,
}))
const is_release_env = computed(() => mini_program_env_version.value === 'release')
const getMiniProgramEnvVersion = () => {
try {
const account_info = Taro.getAccountInfoSync?.()
return String(account_info?.miniProgram?.envVersion || account_info?.envVersion || '').trim().toLowerCase()
} catch (error) {
console.warn('获取小程序环境版本失败:', error)
return ''
}
}
const formatReleaseStatusText = (raw_text) => {
const normalized_text = String(raw_text || '').trim()
if (!normalized_text) return ''
const lower_text = normalized_text.toLowerCase()
if (normalized_text === '正在请求支付参数...') return normalized_text
if (normalized_text === '已获取支付参数,准备拉起微信支付弹框...') return normalized_text
if (normalized_text === '支付成功,正在跳转...') return normalized_text
if (normalized_text.includes('支付成功')) return normalized_text
if (lower_text.includes('cancel') || normalized_text.includes('取消支付')) {
return '您已取消本次支付,如需继续,可重新点击支付。'
}
if (
normalized_text.includes('未授权')
|| normalized_text.includes('授权失败')
|| normalized_text.includes('静默授权失败')
|| normalized_text.includes('登录')
) {
return '当前登录状态需要更新,请重新进入后再试。'
}
if (normalized_text.includes('缺少订单编号') || normalized_text.includes('订单 ID')) {
return '支付信息不完整,请返回上一页后重新发起。'
}
if (
normalized_text.includes('获取支付参数失败')
|| normalized_text.includes('拉起支付失败')
|| normalized_text.includes('支付未完成')
|| normalized_text.includes('失败')
|| normalized_text.includes('错误')
|| normalized_text.includes('异常')
) {
return '支付暂时没有完成,请稍后重试;如多次失败,请联系寺院工作人员协助处理。'
}
return '当前操作暂时没有完成,请稍后再试。'
}
const setStatusText = (raw_text) => {
const normalized_text = String(raw_text || '').trim()
if (!normalized_text) {
status_text.value = ''
return
}
status_text.value = is_release_env.value
? formatReleaseStatusText(normalized_text)
: normalized_text
}
watch(last_result_text, (value) => {
if (!pay_loading.value) {
status_text.value = value
setStatusText(value)
}
})
......@@ -77,24 +144,24 @@ const goUserWebviewAfterPaySuccess = async () => {
navigating_after_pay_success.value = true
try {
status_text.value = '支付成功,正在跳转...'
setStatusText('支付成功,正在跳转...')
const redirect_result = await redirectAfterPaySuccess()
if (redirect_result?.reason === 'missing-user-menu') {
status_text.value = '支付成功,未找到“我的”菜单,正在返回首页...'
setStatusText('支付成功,未找到“我的”菜单,正在返回首页...')
return
}
if (redirect_result?.reason === 'empty-user-link') {
status_text.value = '支付成功,但“我的”菜单地址为空,正在返回首页...'
setStatusText('支付成功,但“我的”菜单地址为空,正在返回首页...')
return
}
if (redirect_result?.target === 'home') {
status_text.value = '支付成功,但菜单获取失败,正在返回首页...'
setStatusText('支付成功,但菜单获取失败,正在返回首页...')
}
} catch (error) {
status_text.value = '支付成功,但菜单获取失败,正在返回首页...'
setStatusText('支付成功,但菜单获取失败,正在返回首页...')
} finally {
navigating_after_pay_success.value = false
}
......@@ -108,7 +175,7 @@ const handlePay = async () => {
const pay_res = await pay_by_order_id(order_id.value, {
auto_auth: true,
on_status: (text) => {
status_text.value = text
setStatusText(text)
},
})
......@@ -118,6 +185,8 @@ const handlePay = async () => {
}
useLoad((options) => {
mini_program_env_version.value = getMiniProgramEnvVersion()
preloadImageAssetVersion().catch((error) => {
console.error('支付确认页预加载图片版本配置失败:', error)
})
......@@ -132,7 +201,7 @@ useLoad((options) => {
amount.value = String(options?.amount || options?.money || '').trim()
if (!order_id.value) {
status_text.value = '缺少订单编号,暂时无法发起支付。'
setStatusText('缺少订单编号,暂时无法发起支付。')
}
})
</script>
......