Vben-Admin 框架中验证码倒计时动态更新解决方案
Vben-Admin 框架中验证码倒计时动态更新解决方案一、Vben-Admin 是什么Vben-Admin是一个基于Vue 3 TypeScript Vite的现代化企业级中后台管理系统框架。它提供了开箱即用的权限管理、路由配置丰富的 UI 组件库基于 Ant Design Vue 封装强大的表单、表格组件系统统一的登录/认证模块vben/common-ui其中的AuthenticationCodeLogin和VbenPinInput组件就是框架内置的验证码登录解决方案。二、为什么会出现这个需求业务场景用户登录时通过手机号 短信验证码的方式。后端接口有以下逻辑验证码未过期时→ 不重复发送短信直接返回已存在的验证码的expire_at验证码已过期或不存在时→ 生成新验证码并发送短信核心需求前端倒计时必须与后端验证码的有效期实时同步场景后端返回expire_at期望倒计时首次请求2026-08-08 14:05:005分钟后300 秒30 秒后再次请求验证码未过期2026-08-08 14:05:00不变270 秒4 分 50 秒后再次请求快过期了2026-08-08 14:05:00不变10 秒5 分钟后再次请求已过期2026-08-08 14:10:00新时间300 秒一句话用户看到的倒计时 当前验证码的真实剩余有效时间每次点击获取验证码按钮都与后端同步校验无缝续期。三、遇到的问题3.1 一开始以为handleSendCode返回值控制倒计时根据VbenPinInput的 props 定义我们以为handleSendCode的返回值会控制倒计时秒数// ❌ 直觉上以为这样就能控制倒计时handleSendCode:async(){// ... 发送验证码 ...return300;// 以为返回 300 就能倒计时 300 秒}3.2 实际测试发现返回无效当我们测试handleSendCode: async () { return 20; }时倒计时仍然显示 60 秒。3.3 查看组件源码发现真相通过查看VbenPinInput组件源码发现其内部逻辑是// VbenPinInput 组件内部简化const{maxTime60,// ← 倒计时秒数来自这里handleSendCodeasync(){},}definePropsPinInputProps();constcountdownref(0);asyncfunctionhandleSend(e:Event){awaithandleSendCode();// ← 只是执行忽略返回值countdown.valuemaxTime;// ← 直接用 maxTime 作为倒计时startCountdown();// ← 每秒减 1}结论handleSendCode的返回值完全被忽略倒计时秒数由maxTimeprops 决定。四、解决方案4.1 核心思路利用 Vue 的响应式数据特性用ref动态绑定maxTime// 1. 定义响应式变量初始 60 秒constmaxTimeref(60);// 2. 在 handleSendCode 中更新它consthandleSendCodeasync(){constresawaitsendCodeApi({phone});if(res.data.expire_at){constsecondsgetSecondsRemaining(res.data.expire_at);maxTime.valueseconds0?seconds:60;// ✅ 更新倒计时}};// 3. 传给 VbenPinInputcomponentProps:{maxTime:maxTime,// ← 响应式绑定值变了组件自动更新}4.2 完整代码script langts setup import { computed, ref } from vue; import { AuthenticationCodeLogin, z } from vben/common-ui; import { $t } from vben/locales; import { message } from ant-design-vue; import { sendCodeApi } from #/api; // 1. 响应式倒计时秒数 const maxTime ref(60); // 2. 计算剩余秒数 const getSecondsRemaining (dateString: string) { const diffMs new Date(dateString).getTime() - new Date().getTime(); return Math.floor(diffMs / 1000); }; // 3. 发送验证码 const handleSendCode async () { try { const res await sendCodeApi({ phone: currentPhone }); if (res.code 0) { if (res.data.expire_at) { const seconds getSecondsRemaining(res.data.expire_at); // ✅ 关键更新响应式变量 maxTime.value seconds 0 ? seconds : 60; } } } catch (error) { // 错误处理... } }; // 4. 表单配置 const formSchema computed((): VbenFormSchema[] [ { component: VbenInput, fieldName: phone, // ... }, { component: VbenPinInput, fieldName: code, componentProps: { codeLength: 6, maxTime: maxTime, // ✅ 响应式绑定 createText: (countdown: number) { return countdown 0 ? ${countdown} 秒后重发 : 获取验证码; }, handleSendCode: handleSendCode, }, // ... }, ]); /script4.3 数据流图用户点击按钮 │ ▼ handleSendCode() │ ▼ sendCodeApi() → 后端返回 { expire_at } │ ▼ getSecondsRemaining(expire_at) → 计算剩余秒数 │ ▼ maxTime.value 剩余秒数 ← 响应式更新 │ ▼ VbenPinInput 内部 countdown.value maxTime ← 组件收到新值 │ ▼ 倒计时按新的秒数开始运行五、总结项目内容框架Vben-Admin 的vben/common-ui认证模块组件VbenPinInput验证码输入倒计时误区误以为handleSendCode返回值控制倒计时真相maxTimeprops 才是倒计时秒数的唯一来源解法用ref响应式绑定maxTime在handleSendCode中动态更新效果倒计时始终与后端expire_at保持同步

相关新闻

免费降AI率工具为什么越改越高?怎么免费把AIGC疑似度降下来?

免费降AI率工具为什么越改越高?怎么免费把AIGC疑似度降下来?

免费降AI率工具为什么越改越高?怎么免费把AIGC疑似度降下来? 你是不是轮流用了DeepSeek、豆包和几个免费小程序,每个都把文字改得更顺,AI率却一次比一次高?更麻烦的是,原稿还能看出自己的写作习惯&#xff…

2026/8/10 4:27:12 阅读更多 →
西门子200 SMART PLC在自动化产线中的集成应用与优化

西门子200 SMART PLC在自动化产线中的集成应用与优化

1. 项目概述:西门子200smart在自动化产线中的集成应用这个案例展示了西门子S7-200 SMART PLC在工业自动化领域的典型应用场景——通过脉冲定位控制伺服系统,实现自动输送抓料与自动移印机的协同作业。作为一款经济型PLC,200 SMART系列凭借其稳…

2026/8/10 4:49:30 阅读更多 →
UE4 3DUI穿模解决方案:基于深度检测的智能透视材质实现

UE4 3DUI穿模解决方案:基于深度检测的智能透视材质实现

1. 项目概述:从“穿模”到“透视”的UI视觉革命在虚幻引擎4(UE4)里做3DUI,最让人头疼的莫过于“穿模”问题。你精心设计了一个悬浮在角色面前的3D血条、一个漂浮在空中的任务指示器,或者一个附着在武器上的弹药计数器&…

2026/8/11 4:14:25 阅读更多 →

最新新闻

深入解析大语言模型推理内核:从Transformer原理到KV Cache优化实践

深入解析大语言模型推理内核:从Transformer原理到KV Cache优化实践

1. 从“黑箱”到“白盒”:为什么我们需要拆解LLM的运行内核如果你和我一样,在过去一年里频繁地与各种大语言模型打交道,无论是用它们写代码、分析文档,还是进行创意对话,一个挥之不去的疑问可能会时常浮现:…

2026/8/11 4:23:51 阅读更多 →
王者荣耀百姓杯战术复盘:从BP到风暴龙王的团队决策博弈

王者荣耀百姓杯战术复盘:从BP到风暴龙王的团队决策博弈

这次我们来看一场《王者荣耀》全民赛事“百姓杯”的精彩对决,分析AAA战队与LOST星战队的战术博弈。对于想提升游戏理解、学习团队配合的玩家来说,职业或半职业比赛的复盘是最高效的教材。本文将深度解析这场对局,从BP(禁选英雄&am…

2026/8/11 4:23:51 阅读更多 →
OpenClaw智能体架构解析:从大模型驱动到自动化流程引擎的实践

OpenClaw智能体架构解析:从大模型驱动到自动化流程引擎的实践

1. 从“智能体”热潮到OpenClaw:我们到底在交互什么?最近几个月,AI圈子里“Agent”这个词的热度,几乎要盖过大模型本身了。从各种“AutoGPT”的变种,到宣称能自动完成复杂任务的智能体框架,再到像OpenClaw这…

2026/8/11 4:23:51 阅读更多 →
自然语言处理基础

自然语言处理基础

一、介绍自然语言处理(Natural Language Processing, NLP)是人工智能领域的重要分支,旨在让计算机理解、生成和操作人类语言。中文因其无空格分隔、词义灵活、歧义丰富等特点,给NLP任务带来了独特挑战。本文将基于《红楼梦》文本的…

2026/8/11 4:23:51 阅读更多 →
SpringBoot在线教育系统开发:作业签到管理实践

SpringBoot在线教育系统开发:作业签到管理实践

1. 项目背景与核心需求在线教育行业近年来呈现爆发式增长,特别是在后疫情时代,混合式教学模式已成为高校教学的常态。作为计算机专业出身的开发者,我在参与某高校智慧教学系统升级时,深刻感受到传统纸质签到和作业提交方式的痛点&…

2026/8/11 4:23:51 阅读更多 →
从Codex源码到生产级AI Agent Runtime:工程化架构与核心模式解析

从Codex源码到生产级AI Agent Runtime:工程化架构与核心模式解析

1. 从开源项目到生产系统:一次工程思维的跃迁最近在社区里看到不少朋友在讨论如何基于 OpenAI 的 Codex 模型或者类似的大型语言模型(LLM)来构建自己的 AI Agent(智能体)。大家兴致勃勃地跑通了几个 Demo,用…

2026/8/11 4:22:50 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →