意向字段全部改成使用招聘分类

This commit is contained in:
2026-06-05 17:27:07 +08:00
parent 8d6282c3e6
commit c17f75c707
10 changed files with 85 additions and 95 deletions
+29 -47
View File
@@ -109,17 +109,25 @@
<span v-else-if="idx === otpValue.length && !isLoggingIn" class="login-view__otp-cursor"></span>
</div>
</div>
<!-- 状态按钮非触发登录 -->
<button class="login-view__status-btn" disabled>
<!-- 状态按钮 三种状态登录中 / 倒计时 / 再次发送 -->
<button
class="login-view__status-btn"
:disabled="isLoggingIn || countdown > 0"
@click="handleResendCode"
>
<!-- 登录中状态 -->
<template v-if="isLoggingIn">
<span class="login-view__spinner"></span>
<span>登录中</span>
</template>
<!-- 倒计时状态 -->
<template v-else>
<template v-else-if="countdown > 0">
{{ countdown }} 秒后可继续发送
</template>
<!-- 可再次发送 -->
<template v-else>
再次发送验证码
</template>
</button>
</template>
@@ -170,14 +178,6 @@ const countdown = ref(0)
let countdownTimer: ReturnType<typeof setInterval> | null = null
/** 是否正在调用登录接口 */
const isLoggingIn = ref(false)
/** 用户最后一次输入验证码的时间戳 */
let lastOtpInputTime = 0
/** 倒计时结束后等待用户输入冷却的定时器 */
let returnWaitTimer: ReturnType<typeof setTimeout> | null = null
/** 延长倒计时的定时器(每秒递减) */
let extendTimer: ReturnType<typeof setInterval> | null = null
/** 标记60秒倒计时已结束,等待返回中 */
let countdownFinished = false
/** OTP 输入框引用 */
const otpInputRef = ref<HTMLInputElement | null>(null)
@@ -207,33 +207,6 @@ function startCountdown() {
if (countdown.value <= 0 && countdownTimer) {
clearInterval(countdownTimer)
countdownTimer = null
// 倒计时结束,进入"即将返回"提示阶段
triggerReturn()
}
}, 1000)
}
/** 倒计时结束后的返回逻辑 — 考虑用户最近操作 */
function triggerReturn() {
countdownFinished = true
scheduleReturn()
}
/** 安排返回:用户停止输入5秒后回步骤一,每次输入都重置5秒 */
function scheduleReturn() {
// 清除之前所有定时器,重新开始5秒倒计时
if (returnWaitTimer) { clearTimeout(returnWaitTimer); returnWaitTimer = null }
if (extendTimer) { clearInterval(extendTimer); extendTimer = null }
// 直接重置为5秒倒计时
countdown.value = 5
extendTimer = setInterval(() => {
countdown.value--
if (countdown.value <= 0) {
if (extendTimer) { clearInterval(extendTimer); extendTimer = null }
countdownFinished = false
step.value = 1
otpValue.value = ''
}
}, 1000)
}
@@ -276,21 +249,30 @@ async function handleSendCode() {
function handleOtpInput() {
// 过滤非数字字符
otpValue.value = otpValue.value.replace(/\D/g, '').slice(0, 6)
// 记录用户最后输入时间
lastOtpInputTime = Date.now()
// 如果倒计时已结束且用户还在输入(未满6位),重新安排返回计时
if (countdownFinished && otpValue.value.length < 6) {
scheduleReturn()
}
// 满6位自动触发登录
if (otpValue.value.length === 6) {
// 取消返回流程
if (returnWaitTimer) { clearTimeout(returnWaitTimer); returnWaitTimer = null }
if (extendTimer) { clearInterval(extendTimer); extendTimer = null }
handleLogin()
}
}
/** 步骤二:再次发送验证码 */
async function handleResendCode() {
if (isLoggingIn.value || countdown.value > 0) return
try {
const res = await sendSmsCode(phone.value)
if (res.code === '0') {
ElMessage.success('验证码已发送')
otpValue.value = ''
startCountdown()
nextTick(() => focusOtpInput())
} else {
ElMessage.error(res.msg || '验证码发送失败')
}
} catch {
// 错误已在 request 拦截器中统一处理
}
}
/** 调用登录接口 */
async function handleLogin() {
isLoggingIn.value = true