diff --git a/src/views/wallet/personal-open/PersonalOpenForm.vue b/src/views/wallet/personal-open/PersonalOpenForm.vue index 0eb0097..b06215d 100644 --- a/src/views/wallet/personal-open/PersonalOpenForm.vue +++ b/src/views/wallet/personal-open/PersonalOpenForm.vue @@ -210,6 +210,7 @@ import { ref, reactive, computed, watch, onMounted } from 'vue' import { useRoute, useRouter } from 'vue-router' import { message, Modal } from 'ant-design-vue' import dayjs from 'dayjs' +import QrcodeVue from 'qrcode.vue' import ChannelSelect from '@/components/ChannelSelect.vue' import IdCardUpload from '@/components/IdCardUpload.vue' import FacePhotoUpload from '@/components/FacePhotoUpload.vue' @@ -615,6 +616,29 @@ async function handleModalSave() { } } +// 拼接扫码 H5 地址:域名/路径来自环境变量,域名未配置(生产环境尚未确定)时用占位域名兜底, +// 保证二维码始终可以生成,不阻断柜员操作;域名确定后只需修改 .env.production,无需改代码。 +function buildQrCodeUrl(applicationNo) { + const base = import.meta.env.VITE_H5_QRCODE_BASE_URL || 'https://example.com' + const path = import.meta.env.VITE_H5_QRCODE_PATH || '/mobile/personal-open' + return `${base}${path}?applicationNo=${applicationNo}` +} + +// 弹窗内"邀请扫码办理":与"保存"调用同一个提交接口,成功后不关闭弹窗,切换为二维码展示态 +async function handleModalInvite() { + modalInviting.value = true + try { + const applicationNo = await submitCreateDraft() + if (applicationNo) { + qrApplicationNo.value = applicationNo + qrCodeUrl.value = buildQrCodeUrl(applicationNo) + confirmModalStep.value = 'qrcode' + } + } finally { + modalInviting.value = false + } +} + // 弹窗内"取消"/关闭图标/邀请扫码办理成功后的"关闭"按钮:统一只关闭弹窗,不发请求、不跳转 function handleModalCancel() { confirmModalVisible.value = false