style: 优化防抖样式

This commit is contained in:
chenchun
2025-08-01 17:58:07 +08:00
parent 3f8e6e48c0
commit 17f9ac6d54
2 changed files with 61 additions and 26 deletions

View File

@@ -27,6 +27,9 @@ const startAnimate=()=>{
window.addEventListener('resize', () => { window.addEventListener('resize', () => {
canvas.width = window.innerWidth; canvas.width = window.innerWidth;
canvas.height = window.innerHeight; canvas.height = window.innerHeight;
centerX = canvas.width / 2;
centerY = canvas.height / 2;
drawStars();
}); });
createStars(props.number??1000); createStars(props.number??1000);
@@ -69,7 +72,7 @@ function drawStars() {
function animate() { function animate() {
drawStars(); drawStars();
// requestAnimationFrame(animate); // requestAnimationFrame(animate); // 注释掉动画循环以节省性能
} }

View File

@@ -12,6 +12,10 @@ const route = useRoute();
const registerFormRef = ref(); const registerFormRef = ref();
//验证码弹窗 //验证码弹窗
const codeDialogVisible=ref(false); const codeDialogVisible=ref(false);
//防止重复点击
const isSending=ref(false);
//防止重复注册
const isRegistering=ref(false);
// 获取图片验证码 // 获取图片验证码
const codeImageURL = computed(() => useUserStore().codeImageURL); const codeImageURL = computed(() => useUserStore().codeImageURL);
@@ -49,14 +53,26 @@ const registerRules = reactive({
}); });
const register = async (formEl) => { const register = async (formEl) => {
if (!formEl) return; if (!formEl) return;
// 防止重复点击
if (isRegistering.value) {
ElMessage({
message: "正在注册中,请稍候...",
type: "warning",
duration: 1000,
});
return;
}
await formEl.validate(async (valid) => { await formEl.validate(async (valid) => {
if (valid) { if (valid) {
try { try {
if (registerForm.password !== passwordConfirm.value) { if (registerForm.password !== passwordConfirm.value) {
ElMessage.error("两次密码输入不一致"); ElMessage.error("两次密码输入不一致");
return; return;
} }
isRegistering.value = true;
await registerFun(registerForm); await registerFun(registerForm);
//注册成功返回登录 //注册成功返回登录
handleSignInNow(); handleSignInNow();
@@ -66,6 +82,8 @@ const register = async (formEl) => {
type: "error", type: "error",
duration: 2000, duration: 2000,
}); });
} finally {
isRegistering.value = false;
} }
} }
}); });
@@ -102,38 +120,52 @@ const handleSignInNow=()=>{
router.push("/login"); router.push("/login");
} }
const captcha = async () => { const captcha = async () => {
// 防止重复点击
if (isSending.value) return;
// 立即关闭弹窗,防止用户连续点击
codeDialogVisible.value = false;
if (registerForm.email!==""&&phoneForm.code!=="") if (registerForm.email!==""&&phoneForm.code!=="")
{ {
phoneForm.email=registerForm.email; isSending.value = true;
const { data } = await getCodeEmail(phoneForm); try {
registerForm.uuid = data.uuid; phoneForm.email=registerForm.email;
codeDialogVisible.value=false; const { data } = await getCodeEmail(phoneForm);
ElMessage({ registerForm.uuid = data.uuid;
message: `已向${registerForm.email}发送验证码,请注意查收`, ElMessage({
type: "success", message: `已向${registerForm.email}发送验证码,请注意查收`,
}); type: "success",
isDisabledCode.value = true; });
let time = 60; //定义剩下的秒数 isDisabledCode.value = true;
let timer = setInterval(function () { let time = 60; //定义剩下的秒数
if (time == 0) { let timer = setInterval(function () {
//清除定时器和复原按钮 if (time == 0) {
clearInterval(timer); //清除定时器和复原按钮
codeInfo.value = "发送验证码"; clearInterval(timer);
time = 60; //这个10是重新开始 codeInfo.value = "发送验证码";
} else { time = 60; //这个10是重新开始
codeInfo.value = "剩余" + time + "秒"; isSending.value = false;
time--; } else {
} codeInfo.value = "剩余" + time + "秒";
}, 1000); time--;
}
}, 1000);
} catch (error) {
isSending.value = false;
ElMessage({
message: "发送失败,请重试",
type: "error",
});
}
} }
else else
{ {
ElMessage({ ElMessage({
message: `请先输入手机号`, message: `请先输入邮箱和图片验证码`,
type: "warning", type: "warning",
}); });
} }
}; };
</script> </script>
@@ -202,7 +234,7 @@ const captcha = async () => {
</div> </div>
</el-form> </el-form>
<div class="left-btn"> <div class="left-btn">
<button type="button" class="btn-login" @click="register(registerFormRef)">注册</button> <button type="button" class="btn-login" :disabled="isRegistering" @click="register(registerFormRef)">{{ isRegistering ? '注册中...' : '注册' }}</button>
<button type="button" class="btn-reg" @click="handleSignInNow">前往登录</button> <button type="button" class="btn-reg" @click="handleSignInNow">前往登录</button>
</div> </div>
</div> </div>