From c442e14e115b12f35f070ac16e06eda9ae93a5f2 Mon Sep 17 00:00:00 2001 From: DaxPay Dev Date: Mon, 20 Jul 2026 21:24:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(develop-auth):=20=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81=E6=89=AB=E7=A0=81=E6=88=90=E5=8A=9F=E5=90=8E=E8=92=99?= =?UTF-8?q?=E5=B1=82=E7=81=B0=E5=8C=96,=20=E5=BC=95=E5=AF=BC=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E7=94=9F=E6=88=90=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E6=89=AB=E7=A0=81(6=20=E8=AF=AD=E7=A7=8D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../locales/langs/en-US/payment/develop.json | 3 +- .../locales/langs/ja-JP/payment/develop.json | 3 +- .../locales/langs/ko-KR/payment/develop.json | 3 +- .../locales/langs/zh-CN/payment/develop.json | 3 +- .../locales/langs/zh-HK/payment/develop.json | 3 +- .../locales/langs/zh-TW/payment/develop.json | 3 +- .../payment/develop/auth/ChannelAuth.vue | 53 ++++++++++++++++++- 7 files changed, 63 insertions(+), 8 deletions(-) diff --git a/apps/daxpay-admin/src/locales/langs/en-US/payment/develop.json b/apps/daxpay-admin/src/locales/langs/en-US/payment/develop.json index fa840e132..76af4b533 100644 --- a/apps/daxpay-admin/src/locales/langs/en-US/payment/develop.json +++ b/apps/daxpay-admin/src/locales/langs/en-US/payment/develop.json @@ -189,7 +189,8 @@ "tip": "Scan with Alipay to authorize", "tipWechat": "Scan with WeChat to authorize", "tipDouyin": "Scan with Douyin to authorize", - "empty": "No QR code yet" + "empty": "No QR code yet", + "consumed": "QR code has been used. Please regenerate the authorization link." }, "form": { "mchNo": "Merchant", diff --git a/apps/daxpay-admin/src/locales/langs/ja-JP/payment/develop.json b/apps/daxpay-admin/src/locales/langs/ja-JP/payment/develop.json index 5bbb46426..18591fc92 100644 --- a/apps/daxpay-admin/src/locales/langs/ja-JP/payment/develop.json +++ b/apps/daxpay-admin/src/locales/langs/ja-JP/payment/develop.json @@ -189,7 +189,8 @@ "tip": "Alipayでスキャンして認証します", "tipWechat": "WeChatでスキャンして認証します", "tipDouyin": "Douyin でスキャンして認証します", - "empty": "QRコードはまだありません" + "empty": "QRコードはまだありません", + "consumed": "QRコードは使用済みです。認証リンクを再生成してください。" }, "form": { "mchNo": "商人", diff --git a/apps/daxpay-admin/src/locales/langs/ko-KR/payment/develop.json b/apps/daxpay-admin/src/locales/langs/ko-KR/payment/develop.json index a93633415..1bbc4beb6 100644 --- a/apps/daxpay-admin/src/locales/langs/ko-KR/payment/develop.json +++ b/apps/daxpay-admin/src/locales/langs/ko-KR/payment/develop.json @@ -189,7 +189,8 @@ "tip": "Alipay로 스캔하여 승인하세요", "tipWechat": "WeChat으로 스캔하여 승인하세요", "tipDouyin": "승인하려면 Douyin으로 스캔하세요.", - "empty": "아직 QR 코드가 없습니다." + "empty": "아직 QR 코드가 없습니다.", + "consumed": "QR 코드가 사용되었습니다. 인증 링크를 다시 생성해 주세요." }, "form": { "mchNo": "상인", diff --git a/apps/daxpay-admin/src/locales/langs/zh-CN/payment/develop.json b/apps/daxpay-admin/src/locales/langs/zh-CN/payment/develop.json index 333f42fcf..61425cebe 100644 --- a/apps/daxpay-admin/src/locales/langs/zh-CN/payment/develop.json +++ b/apps/daxpay-admin/src/locales/langs/zh-CN/payment/develop.json @@ -189,7 +189,8 @@ "tip": "请使用支付宝扫码授权", "tipWechat": "请使用微信扫码授权", "tipDouyin": "请使用抖音扫码授权", - "empty": "暂未生成二维码" + "empty": "暂未生成二维码", + "consumed": "二维码已使用,请重新生成授权链接" }, "form": { "mchNo": "商户", diff --git a/apps/daxpay-admin/src/locales/langs/zh-HK/payment/develop.json b/apps/daxpay-admin/src/locales/langs/zh-HK/payment/develop.json index e08bda204..845b4bfc2 100644 --- a/apps/daxpay-admin/src/locales/langs/zh-HK/payment/develop.json +++ b/apps/daxpay-admin/src/locales/langs/zh-HK/payment/develop.json @@ -189,7 +189,8 @@ "tip": "請使用支付寶掃碼授權", "tipWechat": "請使用微信掃碼授權", "tipDouyin": "請使用抖音掃碼授權", - "empty": "暫未生成二維碼" + "empty": "暫未生成二維碼", + "consumed": "QR Code 已使用,請重新產生授權鏈接" }, "form": { "mchNo": "商户", diff --git a/apps/daxpay-admin/src/locales/langs/zh-TW/payment/develop.json b/apps/daxpay-admin/src/locales/langs/zh-TW/payment/develop.json index 5123abea1..0fba65fd7 100644 --- a/apps/daxpay-admin/src/locales/langs/zh-TW/payment/develop.json +++ b/apps/daxpay-admin/src/locales/langs/zh-TW/payment/develop.json @@ -189,7 +189,8 @@ "tip": "請使用支付寶掃碼授權", "tipWechat": "請使用微信掃碼授權", "tipDouyin": "請使用抖音掃碼授權", - "empty": "暫未生成二維碼" + "empty": "暫未生成二維碼", + "consumed": "QR Code 已使用,請重新產生授權連結" }, "form": { "mchNo": "商戶", diff --git a/apps/daxpay-admin/src/views/payment/develop/auth/ChannelAuth.vue b/apps/daxpay-admin/src/views/payment/develop/auth/ChannelAuth.vue index 92f38904f..243d4a6f2 100644 --- a/apps/daxpay-admin/src/views/payment/develop/auth/ChannelAuth.vue +++ b/apps/daxpay-admin/src/views/payment/develop/auth/ChannelAuth.vue @@ -87,6 +87,9 @@ : $t('payment.develop.auth.qr.tipWechat'), ); + /** 二维码已被扫码消费(轮询到成功态): 阻止重复扫码, 引导重新生成 */ + const qrConsumed = computed(() => authResult.value.status === AuthStatus.SUCCESS); + /** 当前标签文案 */ const tagLabel = computed(() => { if (authType.value === 'wechatMp') return $t('payment.develop.auth.tag.wechatMp'); @@ -381,8 +384,17 @@
-
- +
+
+ +
+ +
+ +

+ {{ $t('payment.develop.auth.qr.consumed') }} +

+

@@ -547,6 +559,43 @@ box-shadow: 0 1px 2px rgb(0 0 0 / 6%); } + /* 二维码卡片 wrapper(包裹卡片与消费蒙层, 提供相对定位基准) */ + .qr-card-wrap { + position: relative; + display: inline-block; + } + + /* 二维码已扫码消费蒙层: 半透明白底 + 模糊底层二维码, 阻止重复扫码 */ + .qr-consumed-mask { + position: absolute; + inset: 0; + z-index: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 10px; + padding: 16px; + background: rgb(255 255 255 / 92%); + backdrop-filter: blur(2px); + border-radius: 12px; + text-align: center; + } + + .qr-consumed-icon { + font-size: 40px; + color: #16a34a; + } + + .qr-consumed-text { + margin: 0; + font-size: 13px; + font-weight: 500; + line-height: 1.5; + color: #6b7280; + word-break: break-all; + } + .qr-tip { display: flex; align-items: center;