AvueAvue
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
  • Article 文章
  • Group 分组容器
  • Title 标题文本
  • CountUp 数字动画
  • Comment 评论
  • Chat 客服聊天
  • Captcha 验证码
  • Contextmenu 右键菜单
  • Clipboard 复制文本
  • DialogForm 弹窗表单
  • Draggable 拖拽
  • Export Excel 导入与导出
  • Flow 流程
  • FilterBuilder 高级筛选
  • FileManager 文件管理
  • QRCode 二维码
  • Iframe 嵌入页面
  • ImagePreview 图片预览
  • Login 登录组件
  • License 授权书
  • Print 打印
  • Screenshot 页面截图
  • Search 标签搜索
  • Sign 电子签名
  • TextEllipsis 超出文本省略
  • Tabs 选项卡
  • Tree 树型
  • Video 摄像头
  • Calendar 日历组合示例

Captcha 验证码

avue-captcha 提供本地交互式验证码。它适用于前端体验校验,不能替代服务端的风控、令牌签发与二次校验。

基础用法

通过 v-model 获取验证状态,验证成功、失败和刷新时可分别处理业务逻辑。

效果预览可直接操作下方示例
正在加载示例…
<template>
  <el-space wrap style="margin-bottom: 16px">
    <el-radio-group v-model="type">
      <el-radio-button v-for="item in types" :key="item.value" :label="item.value">
        {{ item.label }}
      </el-radio-button>
    </el-radio-group>
    <el-button @click="captchaRef?.reset()">重置验证码</el-button>
  </el-space>

  <avue-captcha
    ref="captchaRef"
    v-model="passed"
    :type="type"
    :target-text="['诚', '信']"
    :background-image="backgroundImage"
    :code-length="4"
    code-characters="23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
    @success="handleSuccess"
    @fail="handleFail"
  />

  <p>验证状态:{{ passed ? '已通过' : '未通过' }}</p>
</template>

<script setup>
import { ref } from 'vue'
import { ElMessage } from 'element-plus'

const captchaRef = ref()
const passed = ref(false)
const type = ref('slider')
const types = [
  { label: '滑动拼图', value: 'slider' },
  { label: '文字点选', value: 'text' },
  { label: '算术验证', value: 'math' },
  { label: '旋转校正', value: 'rotate' },
  { label: '图标点选', value: 'icon' },
  { label: '顺序点选', value: 'sequence' },
  { label: '拖拽匹配', value: 'drag' },
  { label: '字母数字', value: 'code' },
  { label: '轨迹滑动', value: 'path' }
]
const backgroundImage = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 400"%3E%3Cdefs%3E%3ClinearGradient id="g" x1="0" x2="1" y1="0" y2="1"%3E%3Cstop stop-color="%235b9dff"/%3E%3Cstop offset="1" stop-color="%23c3e7ff"/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width="800" height="400" fill="url(%23g)"/%3E%3Ccircle cx="130" cy="95" r="55" fill="%23fff" fill-opacity=".18"/%3E%3Ccircle cx="650" cy="310" r="90" fill="%23fff" fill-opacity=".15"/%3E%3C/svg%3E'

function handleSuccess() {
  ElMessage.success('验证通过')
}

function handleFail({ message }) {
  ElMessage.warning(message)
}
</script>

验证类型

type 支持 slider、text、math、rotate、icon、sequence、drag、code、path。不同类型会使用对应的配置,例如文字点选使用 targetText,算术题可通过 mathQuestion、mathAnswer 与 mathOptions 指定题目。

Attributes

参数说明类型默认值
modelValue / v-model是否验证通过booleanfalse
type验证类型stringslider
width验证区域宽度,推荐数字或百分比number / string320
height验证场景高度,最小按 96px 处理number160
pieceSize / tolerance拼图尺寸与校验容差number42 / 6
sliderTargetCount拼图目标数量number2
rotateStep旋转验证每次旋转的角度number30
image / backgroundImage背景图片地址string''
backgroundSize / backgroundPosition背景图显示方式stringcover / center
targetText / textPool / textOptionCount文字点选目标、候选池和候选数量;前两项均可传字符串或数组string 或 array / number空目标 / 内置字池 / 8
targetIcon / iconPool / iconOptionCount图标点选目标、候选池和候选数量string / array / number空目标 / 内置图标池 / 6
sequenceLength顺序点选数量number3
dragTolerance拖拽匹配容差number16
mathQuestion / mathAnswer / mathOptions算术题题目、答案和候选项;答案支持数字或字符串string / number 或 string / array空题目 / 未定义 / []
mathOptionCount自动生成的算术候选项数量number4
codeLength / codeCharacters / codeCaseSensitive字母数字验证码配置number / string / boolean4 / 23456789ABCDEFGHJKLMNPQRSTUVWXYZ / false
disabled是否禁用booleanfalse
autoRefresh / refreshDelay失败后是否自动刷新及延迟时间(ms)boolean / numbertrue / 900

Events

事件名说明参数
update:modelValue同步是否通过boolean
change验证状态变化{ value, type }
success验证通过{ type }
fail验证失败{ type, message }
refresh刷新验证内容{ type }

Methods

通过组件 ref 调用。

方法名说明
refresh刷新验证码内容
reset重置验证状态和验证码内容
verify主动校验答案,仅适用于 math 和 code 类型;参数为答案或输入的验证码

安全提示

前端验证码的结果可被篡改。生产环境应由服务端生成挑战、校验用户行为并在校验成功后签发一次性凭证。

backgroundImage 优先于 image。当前验证码在本地生成随机挑战,verify(value) 通过 success / fail / change 反馈结果,不返回校验 Promise 或布尔结果。refresh() 与 reset() 都会重新生成内容并清空通过状态;组件没有插槽。

最后更新:
贡献者: smallwei
Prev
Chat 客服聊天
Next
Contextmenu 右键菜单