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