| <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> |