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