<script setup>
import { ref, onMounted } from "vue";
import { SlideCaptcha } from "@reglow/reui";
const captchaRef = ref();
const bgImage = ref("");
const puzzleImg = ref("");
const puzzleY = ref(0);
// 从后端获取验证码
async function fetchCaptcha() {
const res = await fetch("/api/captcha");
const data = await res.json();
bgImage.value = data.background;
puzzleImg.value = data.puzzle;
puzzleY.value = data.y;
}
onMounted(fetchCaptcha);
const onSuccess = async (slideX) => {
const res = await fetch("/api/captcha/verify", {
method: "POST",
body: JSON.stringify({ x: slideX }),
});
const data = await res.json();
if (data.success) {
captchaRef.value.handleVerifiedSuccess();
} else {
captchaRef.value.handleFail();
}
};
</script>
<template>
<SlideCaptcha
ref="captchaRef"
:background-image="bgImage"
:puzzle-image="puzzleImg"
:puzzle-y="puzzleY"
:canvas-width="320"
:canvas-height="160"
@success="onSuccess"
@refresh="fetchCaptcha"
/>
</template>