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