| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 | <template>	<view class="u-keyboard" @touchmove.stop.prevent="() => {}">		<view class="u-keyboard-grids">			<block>				<view class="u-keyboard-grids-item" v-for="(group, i) in abc ? EngKeyBoardList : areaList" :key="i">					<view :hover-stay-time="100" @tap="carInputClick(i, j)" hover-class="u-carinput-hover" class="u-keyboard-grids-btn"					 v-for="(item, j) in group" :key="j">						{{ item }}					</view>				</view>				<view @touchstart="backspaceClick" @touchend="clearTimer" :hover-stay-time="100" class="u-keyboard-back"				 hover-class="u-hover-class">					<u-icon :size="38" name="backspace" :bold="true"></u-icon>				</view>				<view :hover-stay-time="100" class="u-keyboard-change" hover-class="u-carinput-hover" @tap="changeCarInputMode">					<text class="zh" :class="[!abc ? 'active' : 'inactive']">中</text>					/					<text class="en" :class="[abc ? 'active' : 'inactive']">英</text>				</view>			</block>		</view>	</view></template><script>	export default {		name: "u-keyboard",		props: {			// 是否打乱键盘按键的顺序			random: {				type: Boolean,				default: false			}		},		data() {			return {				// 车牌输入时,abc=true为输入车牌号码,bac=false为输入省份中文简称				abc: false			};		},		computed: {			areaList() {				let data = [					'京',					'沪',					'粤',					'津',					'冀',					'豫',					'云',					'辽',					'黑',					'湘',					'皖',					'鲁',					'苏',					'浙',					'赣',					'鄂',					'桂',					'甘',					'晋',					'陕',					'蒙',					'吉',					'闽',					'贵',					'渝',					'川',					'青',					'琼',					'宁',					'挂',					'藏',					'港',					'澳',					'新',					'使',					'学'				];				let tmp = [];				// 打乱顺序				if (this.random) data = this.$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 = this.$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];				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/style.components.scss";	.u-keyboard-grids {		background: rgb(215, 215, 217);		padding: 24rpx 0;		position: relative;	}	.u-keyboard-grids-item {		@include vue-flex;		align-items: center;		justify-content: center;	}	.u-keyboard-grids-btn {		text-decoration: none;		width: 62rpx;		flex: 0 0 64rpx;		height: 80rpx;		/* #ifndef APP-NVUE */		display: inline-flex;				/* #endif */		font-size: 36rpx;		text-align: center;		line-height: 80rpx;		background-color: #fff;		margin: 8rpx 5rpx;		border-radius: 8rpx;		box-shadow: 0 2rpx 0rpx #888992;		font-weight: 500;		justify-content: center;	}	.u-carinput-hover {		background-color: rgb(185, 188, 195) !important;	}	.u-keyboard-back {		position: absolute;		width: 96rpx;		right: 22rpx;		bottom: 32rpx;		height: 80rpx;		background-color: rgb(185, 188, 195);		@include vue-flex;		align-items: center;		border-radius: 8rpx;		justify-content: center;		box-shadow: 0 2rpx 0rpx #888992;	}	.u-keyboard-change {		font-size: 24rpx;		box-shadow: 0 2rpx 0rpx #888992;		position: absolute;		width: 96rpx;		left: 22rpx;		line-height: 1;		bottom: 32rpx;		height: 80rpx;		background-color: #ffffff;		@include vue-flex;		align-items: center;		border-radius: 8rpx;		justify-content: center;	}	.u-keyboard-change .inactive.zh {		transform: scale(0.85) translateY(-10rpx);	}	.u-keyboard-change .inactive.en {		transform: scale(0.85) translateY(10rpx);	}	.u-keyboard-change .active {		color: rgb(237, 112, 64);		font-size: 30rpx;	}	.u-keyboard-change .zh {		transform: translateY(-10rpx);	}	.u-keyboard-change .en {		transform: translateY(10rpx);	}</style>
 |