Skip to content

NumberKeyBoard 数字键盘

介绍

数字键盘,一般用于有安全需求下的数字输入,如金额、密码、验证码输入等场景。

导入

js
import NumberKeyBoard from '@/components/keyboard/NumberKeyBoard.vue'

用法

基础用法

通过 v-model:show 控制数字键盘的显示和隐藏。

vue
<template>
  <view>
    <Button @click="show = true">打开键盘</Button>
    <NumberKeyBoard
      v-model:show="show"
      @input="onInput"
      @delete="onDelete"
      @blur="show = false"
    />
  </view>
</template>

<script setup>
import { ref } from 'vue';

const show = ref(false);
const text = ref('');

function onInput(value) {
  text.value += value;
}

function onDelete() {
  text.value = text.value.substring(0, text.value.length - 1);
}
</script>

带右侧栏键盘

通过 showSideButtons 属性显示右侧栏,右侧栏包含完成和删除按钮。

vue
<template>
  <view>
    <Button @click="show = true">打开带右侧栏的键盘</Button>
    <NumberKeyBoard
      v-model:show="show"
      showSideButtons
      @input="onInput"
      @delete="onDelete"
      @blur="show = false"
    />
  </view>
</template>

带标题键盘

通过 title 属性设置键盘标题。

vue
<template>
  <view>
    <Button @click="show = true">打开带标题的键盘</Button>
    <NumberKeyBoard
      v-model:show="show"
      title="请输入号码"
      @input="onInput"
      @delete="onDelete"
    />
  </view>
</template>

身份证号键盘

通过 extraKeys 属性添加身份证号所需的 'X' 按键。

vue
<template>
  <view>
    <Button @click="show = true">打开身份证号键盘</Button>
    <NumberKeyBoard
      v-model:show="show"
      :extraKeys="[ { key: 'X', order: 9, replace: true } ]"
      @input="onInput"
      @delete="onDelete"
    />
  </view>
</template>

自定义按键键盘

通过 extraKeyssideKeys 配置自定义按键和侧边按键。

vue
<template>
  <view>
    <Button @click="show = true">打开自定义按键键盘</Button>
    <NumberKeyBoard
      v-model:show="show"
      :extraKeys="[
        { key: '0', order: 9, replace: true },
        { key: 'X', order: 10, replace: true },
        { key: 'Y', order: 11, replace: true },
        { key: 'A', order: 12, replace: true },
        { key: 'B', order: 13, replace: true },
        { key: 'C', order: 14, replace: true },
        { key: 'D', order: 15, replace: true },
        { key: 'E', order: 16, replace: true },
        { key: 'F', order: 17, replace: true },
      ]"
      :sideKeys="[
        { key: 'delete', span: 2 },
        { key: 'finish', span: 4 },
      ]"
      :keyHeight="80"
      showSideButtons
      @input="onInput"
      @delete="onDelete"
    />
  </view>
</template>

随机数字键盘

通过 keyRandomOrder 属性启用随机数字排序,提高安全性。

vue
<template>
  <view>
    <Button @click="show = true">打开随机数字键盘</Button>
    <NumberKeyBoard
      v-model:show="show"
      keyRandomOrder
      @input="onInput"
      @delete="onDelete"
    />
  </view>
</template>

API 参考

NumberKeyBoard

数字键盘组件。

Props

名称说明类型必填默认值
v-model:show是否显示键盘boolean-
mask是否显示键盘遮罩,显示遮罩时无法操作下方组件booleanfalse
showSideButtons是否显示侧栏booleanfalse
title键盘标题string-
extraKeys键盘额外按键数组NumberKeyBoardExtraKey[][]
sideKeys侧边栏按键数组NumberKeyBoardSideKey[]NumberKeyBoardSideKeys
defaultKeys默认按键数组string[]NumberKeyBoardKeys
keyHeight按键高度number100
keyRandomOrder是否随机排序数字键盘booleanfalse
showCloseButton是否显示关闭按钮booleantrue
finishButtonText完成按钮文字string'完成'

NumberKeyBoardSideKey

侧边栏按键对象,用于自定义键盘侧边栏按键。

名称说明类型必填默认值
key按键文字string-
icon按键是否显示图标,为 true 时 key 同时也是图标的名称booleanfalse
span按键所占格子数number1

NumberKeyBoardExtraKey

额外按键对象,用于自定义键盘额外按键。

名称说明类型必填默认值
key按键文字string-
span按键所占格子数number1
height按键所占高度格子数number1
icon按键是否显示图标,为 true 时 key 同时也是图标的名称booleanfalse
order在默认数字按键数组的哪一位插入,默认在末尾添加number-
replace当order不为空时,是否直接替换指定位置的按键booleanfalse

默认按键

默认按键数组定义,可以从 NumberKeyBoardDefine 中导入。

ts
import { 
  NumberKeyBoardKeys, // 默认按键数组
  NumberKeyBoardSideKeys  // 默认侧边栏按键数组
} from '@/components/keyboard/NumberKeyBoardDefine'

Events

名称说明参数
input点击按键时触发value: string 按键的值
delete点击删除键时触发-
finish点击完成键时触发-
blur点击遮罩层关闭键盘时触发-

Slots

名称说明
top键盘顶部内容插槽

主题变量

名称类型默认值说明
NumberKeyBoardBackgroundColorstringbackground.page键盘背景颜色
NumberKeyBoardKeyBackgroundColorstringwhite按键背景颜色
NumberKeyBoardKeyFinishColorstringprimary完成按键背景颜色
NumberKeyBoardKeyTextColorstringblack按键文字颜色
NumberKeyBoardKeyFinishTextColorstringwhite完成按键文字颜色
NumberKeyBoardKeyPressedColorstringpressed.white按键按下颜色
NumberKeyBoardTitleColorstringblack标题颜色