|
|
<template> <view class="u-keyboard" @touchmove.stop.prevent="noop" > <view v-for="(group, i) in abc ? engKeyBoardList : areaList" :key="i" class="u-keyboard__button" :index="i" :class="[i + 1 === 4 && 'u-keyboard__button--center']" > <view v-if="i === 3" class="u-keyboard__button__inner-wrapper" > <view class="u-keyboard__button__inner-wrapper__left" hover-class="u-hover-class" :hover-stay-time="200" @tap="changeCarInputMode" > <text class="u-keyboard__button__inner-wrapper__left__lang" :class="[!abc && 'u-keyboard__button__inner-wrapper__left__lang--active']" >中</text> <text class="u-keyboard__button__inner-wrapper__left__line">/</text> <text class="u-keyboard__button__inner-wrapper__left__lang" :class="[abc && 'u-keyboard__button__inner-wrapper__left__lang--active']" >英</text> </view> </view> <view class="u-keyboard__button__inner-wrapper" v-for="(item, j) in group" :key="j" > <view class="u-keyboard__button__inner-wrapper__inner" :hover-stay-time="200" @tap="carInputClick(i, j)" hover-class="u-hover-class" > <text class="u-keyboard__button__inner-wrapper__inner__text">{{ item }}</text> </view> </view> <view v-if="i === 3" @touchstart="backspaceClick" @touchend="clearTimer" class="u-keyboard__button__inner-wrapper" > <view class="u-keyboard__button__inner-wrapper__right" hover-class="u-hover-class" :hover-stay-time="200" > <u-icon size="28" name="backspace" color="#303133" ></u-icon> </view> </view> </view> </view> </template>
<script> import props from './props.js'; /** * keyboard 键盘组件 * @description 此为uView自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。 * @tutorial https://uviewui.com/components/keyboard.html
* @property {Boolean} random 是否打乱键盘的顺序 * @event {Function} change 点击键盘触发 * @event {Function} backspace 点击退格键触发 * @example <u-keyboard ref="uKeyboard" mode="car" v-model="show"></u-keyboard> */ export default { name: "u-keyboard", mixins: [uni.$u.mpMixin, uni.$u.mixin, props], data() { return { // 车牌输入时,abc=true为输入车牌号码,bac=false为输入省份中文简称
abc: false }; }, computed: { areaList() { let data = [ '京', '沪', '粤', '津', '冀', '豫', '云', '辽', '黑', '湘', '皖', '鲁', '苏', '浙', '赣', '鄂', '桂', '甘', '晋', '陕', '蒙', '吉', '闽', '贵', '渝', '川', '青', '琼', '宁', '挂', '藏', '港', '澳', '新', '使', '学' ]; let tmp = []; // 打乱顺序
if (this.random) data = uni.$u.randomArray(data); // 切割成二维数组
tmp[0] = data.slice(0, 10); tmp[1] = data.slice(10, 20); tmp[2] = data.slice(20, 30); tmp[3] = data.slice(30, 36); return tmp; }, engKeyBoardList() { let data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M' ]; let tmp = []; if (this.random) data = uni.$u.randomArray(data); tmp[0] = data.slice(0, 10); tmp[1] = data.slice(10, 20); tmp[2] = data.slice(20, 30); tmp[3] = data.slice(30, 36); return tmp; } }, methods: { // 点击键盘按钮
carInputClick(i, j) { let value = ''; // 不同模式,获取不同数组的值
if (this.abc) value = this.engKeyBoardList[i][j]; else value = this.areaList[i][j]; // 如果允许自动切换,则将中文状态切换为英文
if (!this.abc && this.autoChange) uni.$u.sleep(200).then(() => this.abc = true) this.$emit('change', value); }, // 修改汽车牌键盘的输入模式,中文|英文
changeCarInputMode() { this.abc = !this.abc; }, // 点击退格键
backspaceClick() { this.$emit('backspace'); clearInterval(this.timer); //再次清空定时器,防止重复注册定时器
this.timer = null; this.timer = setInterval(() => { this.$emit('backspace'); }, 250); }, clearTimer() { clearInterval(this.timer); this.timer = null; }, } }; </script>
<style lang="scss" scoped> @import "../../libs/css/components.scss"; $u-car-keyboard-background-color: rgb(224, 228, 230) !default; $u-car-keyboard-padding:6px 0 6px !default; $u-car-keyboard-button-inner-width:64rpx !default; $u-car-keyboard-button-inner-background-color:#FFFFFF !default; $u-car-keyboard-button-height:80rpx !default; $u-car-keyboard-button-inner-box-shadow:0 1px 0px #999992 !default; $u-car-keyboard-button-border-radius:4px !default; $u-car-keyboard-button-inner-margin:8rpx 5rpx !default; $u-car-keyboard-button-text-font-size:16px !default; $u-car-keyboard-button-text-color:$u-main-color !default; $u-car-keyboard-center-inner-margin: 0 4rpx !default; $u-car-keyboard-special-button-width:134rpx !default; $u-car-keyboard-lang-font-size:16px !default; $u-car-keyboard-lang-color:$u-main-color !default; $u-car-keyboard-active-color:$u-primary !default; $u-car-keyboard-line-font-size:15px !default; $u-car-keyboard-line-color:$u-main-color !default; $u-car-keyboard-line-margin:0 1px !default; $u-car-keyboard-u-hover-class-background-color:#BBBCC6 !default;
.u-keyboard { @include flex(column); justify-content: space-around; background-color: $u-car-keyboard-background-color; align-items: stretch; padding: $u-car-keyboard-padding;
&__button { @include flex; justify-content: center; flex: 1; /* #ifndef APP-NVUE */ /* #endif */
&__inner-wrapper { box-shadow: $u-car-keyboard-button-inner-box-shadow; margin: $u-car-keyboard-button-inner-margin; border-radius: $u-car-keyboard-button-border-radius;
&__inner { @include flex; justify-content: center; align-items: center; width: $u-car-keyboard-button-inner-width; background-color: $u-car-keyboard-button-inner-background-color; height: $u-car-keyboard-button-height; border-radius: $u-car-keyboard-button-border-radius;
&__text { font-size: $u-car-keyboard-button-text-font-size; color: $u-car-keyboard-button-text-color; } }
&__left, &__right { border-radius: $u-car-keyboard-button-border-radius; width: $u-car-keyboard-special-button-width; height: $u-car-keyboard-button-height; background-color: $u-car-keyboard-u-hover-class-background-color; @include flex; justify-content: center; align-items: center; box-shadow: $u-car-keyboard-button-inner-box-shadow; }
&__left { &__line { font-size: $u-car-keyboard-line-font-size; color: $u-car-keyboard-line-color; margin: $u-car-keyboard-line-margin; }
&__lang { font-size: $u-car-keyboard-lang-font-size; color: $u-car-keyboard-lang-color;
&--active { color: $u-car-keyboard-active-color; } } } } } }
.u-hover-class { background-color: $u-car-keyboard-u-hover-class-background-color; } </style>
|