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