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