Skip to content

Verify 验证码

用于某些表单操作的验证。

全局配置

在全局配置组件属性。

Verify组件属性配置
ts
app.provide(VERIFY_KEY, {
  mode: 'pop',
  type: 'blockPuzzle',
  imgSize: { width: '620px', height: '310px' },
  get: data => {
    return axios.post('/api/captcha/get', data).then(res => res.data);
  },
  check: data => {
    return axios.post('/api/captcha/check', data).then(res => res.data);
  },
  // others props...
});

提示

该组件基于captcha库封装,后端也需要进行集成并提供相关接口,示例中的获取和校验验证码接口均为Mock静态数据,仅供展示使用。

基础用法

验证码支持滑块拼图和点击文字两种形式,可以通过type属性进行切换。

展示方式

验证码组件默认为弹窗模式,可以通过mode属性设置为固定显示模式。

属性

属性名
说明
类型
默认值
model-value / v-model2.1.2验证成功的结果 string
visible / v-model:visible2.1.2是否显示验证码弹窗 booleanfalse
get获取验证码方法Function
check校验验证码方法Function
type验证码类型 VerifyTypeblock-puzzle
mode验证码的显示方式 VerifyModepop
v-space验证码图片和移动条容器的间隔number5
explain滑动条内的提示 string向右滑动完成验证
img-size验证码图片大小 objectobject

事件

事件名说明类型
ready验证码生成完毕Function
success验证成功Function
类型声明
ts
import Verify from './verify.vue';

/**
 * 验证码类型
 * @remarks blockPuzzle:方块拼图 clickWord:点击文字
 */
export type VerifyType = 'blockPuzzle' | 'clickWord';

/**
 * 验证码模式
 * @remarks pop:弹出式 fixed:固定式
 */
export type VerifyMode = 'pop' | 'fixed';

/**
 * 获取验证码/校验验证码接口请求数据类型
 */
export interface VerifyReqData {
  captchaType: VerifyType;
  pointJson: string;
  token: string;
}

/**
 * 获取验证码/校验验证码接口返回数据类型
 */
export interface VerifyRepData {
  captchaType: VerifyType;
  jigsawImageBase64: string;
  originalImageBase64: string;
  pointJson: string;
  result: boolean;
  secretKey: string;
  token: string;
}

/**
 * 验证码组件属性
 */
export interface VerifyProps {
  /**
   * 获取验证码方法
   * @param data 请求参数
   * @returns 获取验证码的Promise
   */
  get?: (data: VerifyReqData) => Promise<VerifyRepData>;
  /**
   * 校验验证码方法
   * @param data 请求参数
   * @returns 校验验证码的Promise
   */
  check?: (data: VerifyReqData) => Promise<VerifyRepData>;
  /**
   * 验证码类型
   * @remarks blockPuzzle:滑块拼图 clickWord:点击文字
   * @defaultValue 'blockPuzzle'
   */
  type?: VerifyType;
  /**
   * 验证码的显示方式
   * @remarks pop:弹出式 fixed:固定式
   * @defaultValue 'pop'
   */
  mode?: VerifyMode;
  /**
   * 验证码图片和移动条容器的间隔,默认单位是px
   * @defaultValue 5
   */
  vSpace?: number;
  /**
   * 滑动条内的提示,仅当type为blockPuzzle时生效
   * @defaultValue '向右滑动完成验证'
   */
  explain?: string;
  /**
   * 验证码图片大小,其中包含了width、height两个参数,分别代表图片的宽度和高度
   * @defaultValue { width: '310px', height: '155px' }
   */
  imgSize?: { width: string; height: string };
}

/**
 * 验证结果
 */
export interface VerifyResult {
  captchaVerification: string;
}

/**
 * 验证码组件事件
 */
export type VerifyEmits = {
  /**
   * 验证码生成完毕
   */
  ready: [instance: any];
  /**
   * 验证成功
   */
  success: [result: VerifyResult];
};

/**
 * 验证码组件实例
 */
export type VerifyInstance = InstanceType<typeof Verify>;