fix: 处理二维码接口过多调用问题

This commit is contained in:
Gsh
2025-09-07 13:30:03 +08:00
parent 73438da666
commit b98285f314
4 changed files with 85 additions and 22 deletions

View File

@@ -189,23 +189,28 @@ function stopPolling() {
}
/** 刷新二维码 */
async function handleRefresh() {
isExpired.value = false;
isQrCodeError.value = false;
isScanned.value = false;
isConfirming.value = false;
stopPolling();
// async function handleRefresh() {
// isExpired.value = false;
// isQrCodeError.value = false;
// isScanned.value = false;
// isConfirming.value = false;
// stopPolling();
//
// const success = await fetchQRCodeInfo();
// if (success) {
// qrStart(shallowRef(600));
// startStatusPolling();
// }
// else {
// isQrCodeError.value = true;
// stopPolling();
// ElMessage.error('刷新二维码失败');
// }
// }
const success = await fetchQRCodeInfo();
if (success) {
qrStart(shallowRef(600));
startStatusPolling();
}
else {
isQrCodeError.value = true;
stopPolling();
ElMessage.error('刷新二维码失败');
}
/** 刷新二维码按钮 */
async function handleRefresh() {
await initQRCode();
}
/** 启动状态轮询 */
@@ -221,17 +226,41 @@ function startStatusPolling() {
/** 组件初始化 */
onMounted(async () => {
await initQRCode();
// const success = await fetchQRCodeInfo();
// if (success) {
// qrStart();
// startStatusPolling();
// }
// else {
// isQrCodeError.value = true;
// stopPolling();
// ElMessage.error('初始化二维码失败');
// }
});
/** 初始化或刷新二维码 */
async function initQRCode() {
// 清理旧的定时器和轮询
qrStop();
confirmStop();
stopPolling();
const success = await fetchQRCodeInfo();
if (success) {
qrStart();
startStatusPolling();
isExpired.value = false;
isQrCodeError.value = false;
isScanned.value = false;
isConfirming.value = false;
qrStart(); // 重新开始倒计时
startStatusPolling(); // 开始轮询
}
else {
isQrCodeError.value = true;
stopPolling();
ElMessage.error('初始化二维码失败');
ElMessage.error('获取二维码失败');
}
});
}
/** 组件卸载清理 */
onBeforeUnmount(() => {

View File

@@ -23,7 +23,7 @@ const loginFormType = computed(() => loginFromStore.LoginFormType);
// 使用 defineModel 定义双向绑定的 visible需 Vue 3.4+
const visible = defineModel<boolean>('visible');
const showMask = ref(false); // 控制遮罩层显示的独立状态
const isQrMode = ref(true);
const isQrMode = ref(false);
const userStore = useUserStore();
const router = useRouter();
const sessionStore = useSessionStore();
@@ -56,6 +56,8 @@ function handleMaskClick() {
// 过渡动画结束回调
function onAfterLeave() {
if (!visible.value) {
isQrMode.value = false;
showMask.value = false; // 动画结束后隐藏遮罩
}
}