From 9e6b0d57c26f98aa70aa1dc1903375b1f556648f Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期一, 24 八月 2026 17:44:53 +0800
Subject: [PATCH] 又又更新

---
 rencaika/pages/talent-code/talent-code.uvue |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/rencaika/pages/talent-code/talent-code.uvue b/rencaika/pages/talent-code/talent-code.uvue
index 5982b8d..7306ed8 100644
--- a/rencaika/pages/talent-code/talent-code.uvue
+++ b/rencaika/pages/talent-code/talent-code.uvue
@@ -132,7 +132,6 @@
 		stopTimers()
 		codeLoading.value = true
 		codeLoadFailed.value = false
-		codeImageUrl.value = ''
 		codeMessage.value = '正在生成动态人才码'
 		issueTalentDynamicCodeForScene(talentId.value, scene.value, merchantId.value, (data: any) => {
 			codeLoading.value = false
@@ -141,8 +140,13 @@
 			codeImageUrl.value = getApiBaseUrl().replace(/\/$/, '') + (data.imagePath as string)
 			expiresAt.value = Number(data.expiresAt)
 			setCountdown()
-			const seconds = data.refreshAfterSeconds != null ? Number(data.refreshAfterSeconds) : 60
-			refreshTimer = setTimeout(() => requestDynamicCode(), Math.max(1, seconds - 2) * 1000)
+			// Refresh only after the displayed code expires so the countdown never jumps back early.
+			const refreshDelay = Math.max(1, expiresAt.value - Date.now())
+			refreshTimer = setTimeout(() => {
+				remainingSeconds.value = 0
+				refreshTip.value = '正在刷新动态人才码'
+				requestDynamicCode()
+			}, refreshDelay)
 		}, (error) => { if (pageVisible) handleCodeFailure(error.message); else codeLoading.value = false })
 	}
 	const handleCodeFailure = (message: string) => { stopTimers(); codeLoading.value = false; codeImageUrl.value = ''; codeLoadFailed.value = true; codeMessage.value = message == '' ? '动态人才码加载失败' : message; refreshTip.value = '动态人才码已失效,请重新获取' }

--
Gitblit v1.7.1