Skip to content

Keyboard 虚拟键盘

用于数字、身份证、车牌号等受控输入场景。适合金额输入、验证码输入、自定义业务输入面板等移动端交互。

基础用法

vue
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('')
const visible = ref(false)
</script>

<template>
  <lk-button @click="visible = true">打开数字键盘</lk-button>

  <lk-keyboard
    v-model:visible="visible"
    v-model="value"
    type="number"
  />
</template>

带小数点与随机排列

vue
<lk-keyboard
  v-model:visible="visible"
  v-model="value"
  type="number"
  :show-dot="true"
  :random="true"
/>

身份证与车牌号键盘

vue
<lk-keyboard v-model:visible="idVisible" v-model="idValue" type="idcard" :max-length="18" />

<lk-keyboard v-model:visible="plateVisible" v-model="plateValue" type="plate" />

plate 模式内置省份简称与字母数字切换逻辑,无需手动处理切面。

标题栏与确认按钮

vue
<lk-keyboard
  v-model:visible="visible"
  v-model="value"
  title="输入金额"
  confirm-text="完成"
  :show-close="true"
  :show-confirm="true"
/>

自定义键盘布局

type="custom" 时,可通过 keys 传入二维按键数组。

vue
<script setup lang="ts">
const keys = [
  [
    { text: 'A', value: 'A' },
    { text: 'B', value: 'B' },
    { text: 'C', value: 'C' },
  ],
  [
    { text: '删除', type: 'delete' },
    { text: '确认', type: 'confirm', flex: 2 },
  ],
]
</script>

<template>
  <lk-keyboard
    v-model:visible="visible"
    v-model="value"
    type="custom"
    :keys="keys"
  />
</template>

遮罩与关闭行为

vue
<lk-keyboard
  v-model:visible="visible"
  v-model="value"
  overlay
  :close-on-overlay="true"
  :blur="true"
/>

键盘入口策略

lk-keyboard 是唯一公开键盘入口,覆盖数字、身份证、车牌和自定义布局。未发布前已移除重复数字键盘入口,避免用户在两个能力重复的组件之间做选择。

推荐示例

1) 直接复用项目 Demo(推荐)

vue
<script setup lang="ts">
import KeyboardDemo from '@/components/demos/keyboard-demo.vue'
</script>

<template>
  <KeyboardDemo />
</template>

2) 在业务页中按需组合

vue
<template>
  <view class="page-demo">
    <lk-keyboard />
  </view>
</template>

API

Props

参数说明类型默认值
customClass组件可视根节点自定义类名string | object | array''
customStyle组件可视根节点自定义样式string | object''
visible是否显示,支持 v-model:visiblebooleanfalse
type键盘类型number | idcard | plate | customnumber
title标题文字string''
confirmText确认按钮文本string'完成'
showConfirm是否显示确认按钮booleantrue
showDelete是否显示删除按钮booleantrue
showDot数字键盘是否显示小数点booleanfalse
extraKey数字键盘左下角额外按键string''
random是否随机排列数字键booleanfalse
maxLength最大输入长度,0 表示不限制number0
modelValue当前输入值,支持 v-modelstring''
overlay是否显示遮罩booleanfalse
closeOnOverlay点击遮罩是否关闭booleantrue
blur是否启用毛玻璃效果booleantrue
showClose是否显示关闭入口booleantrue
zIndex层级number1000
safeAreaInsetBottom是否适配底部安全区booleantrue
keys自定义键盘布局,仅 custom 模式使用KeyboardKey[][][]
sound是否启用按键音效booleanfalse
vibrate是否启用触感反馈booleantrue

KeyboardKey

字段说明类型默认值
text按键显示文本string
value点击后输出的值stringundefined
flex按键宽度比例numberundefined
type按键类型default | delete | confirm | extra | emptydefault
disabled是否禁用booleanundefined

Events

事件名说明回调参数
update:visible键盘显隐变化(visible: boolean)
update:modelValue输入值变化(value: string)
input输入普通字符时触发(key: string)
delete点击删除键时触发()
confirm点击确认时触发(value: string)
close键盘关闭时触发()
key-press任意按键点击时触发(key: KeyboardKey)

Slots

当前版本未提供插槽。

使用建议

WARNING

lk-keyboard 本身只负责键盘输入,不会自动弹出系统输入框。推荐与受控展示区、验证码输入框、金额输入卡片等组件配合使用。

TIP

如果是纯验证码或密码输入,可将 lk-keyboardlk-code-inputlk-input 组合使用,由业务层统一管理输入值。

兼容说明

  • 组件使用 fixed 底部浮层,存在安全区与软键盘遮挡差异;发布前需在 H5、App 与各小程序目标端确认底部间距。
  • blur 毛玻璃效果依赖平台对 CSS filter/backdrop-filter 的支持;性能敏感场景建议关闭 blur
  • 车牌键盘和自定义键盘应由业务层限制输入格式,组件只负责按键输出。

发布验收

lk-keyboard 已纳入 needs-hardening showcase 回归,发布前按下面边界验收:

场景验收方式要点
展示台基线自动回归tests/visual/needs-hardening-showcase.spec.ts 校验组件路由、verified 状态与中风险标记
底部浮层人工验收H5/App/小程序底部安全区、遮罩关闭和锁滚动无明显遮挡
输入链路人工验收数字、身份证、车牌、自定义键盘的 input/delete/confirm 事件顺序一致

基于 MIT 协议开源 · 粤ICP备2022114240号-3

Keyboard 虚拟键盘

正在连接预览服务...

请先运行 pnpm run dev:h5