u-keyboard.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <template>
  2. <u-popup
  3. :overlay="overlay"
  4. :closeOnClickOverlay="closeOnClickOverlay"
  5. mode="bottom"
  6. :popup="false"
  7. :show="show"
  8. :safeAreaInsetBottom="safeAreaInsetBottom"
  9. @close="popupClose"
  10. :zIndex="zIndex"
  11. :customStyle="{
  12. backgroundColor: 'rgb(214, 218, 220)'
  13. }"
  14. >
  15. <view class="u-keyboard">
  16. <slot/>
  17. <view
  18. class="u-keyboard__tooltip"
  19. v-if="tooltip"
  20. >
  21. <view
  22. hover-class="u-hover-class"
  23. :hover-stay-time="100"
  24. >
  25. <text
  26. class="u-keyboard__tooltip__item u-keyboard__tooltip__cancel"
  27. v-if="showCancel"
  28. @tap="onCancel"
  29. >{{ showCancel && cancelText }}
  30. </text>
  31. </view>
  32. <view>
  33. <text
  34. v-if="showTips"
  35. class="u-keyboard__tooltip__item u-keyboard__tooltip__tips"
  36. >{{ tips ? tips : mode == 'number' ? '数字键盘' : mode == 'card' ? '身份证键盘' : '车牌号键盘' }}
  37. </text>
  38. </view>
  39. <view
  40. hover-class="u-hover-class"
  41. :hover-stay-time="100"
  42. >
  43. <text
  44. v-if="showConfirm"
  45. @tap="onConfirm"
  46. class="u-keyboard__tooltip__item u-keyboard__tooltip__submit"
  47. hover-class="u-hover-class"
  48. >{{ showConfirm && confirmText }}
  49. </text>
  50. </view>
  51. </view>
  52. <template v-if="mode == 'number' || mode == 'card'">
  53. <u-number-keyboard
  54. :random="random"
  55. @backspace="backspace"
  56. @change="change"
  57. :mode="mode"
  58. :dotDisabled="dotDisabled"
  59. ></u-number-keyboard>
  60. </template>
  61. <template v-else>
  62. <u-car-keyboard
  63. :random="random"
  64. :autoChange="autoChange"
  65. @backspace="backspace"
  66. @change="change"
  67. ></u-car-keyboard>
  68. </template>
  69. </view>
  70. </u-popup>
  71. </template>
  72. <script>
  73. import props from './props.js';
  74. /**
  75. * keyboard 键盘
  76. * @description 此为uViw自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3中模式,都有可以打乱按键顺序的选项。
  77. * @tutorial https://www.uviewui.com/components/keyboard.html
  78. * @property {String} mode 键盘类型,见官网基本使用的说明 (默认 'number' )
  79. * @property {Boolean} dotDisabled 是否显示"."按键,只在mode=number时有效 (默认 false )
  80. * @property {Boolean} tooltip 是否显示键盘顶部工具条 (默认 true )
  81. * @property {Boolean} showTips 是否显示工具条中间的提示 (默认 true )
  82. * @property {String} tips 工具条中间的提示文字,见上方基本使用的说明,如不需要,请传""空字符
  83. * @property {Boolean} showCancel 是否显示工具条左边的"取消"按钮 (默认 true )
  84. * @property {Boolean} showConfirm 是否显示工具条右边的"完成"按钮( 默认 true )
  85. * @property {Boolean} random 是否打乱键盘按键的顺序 (默认 false )
  86. * @property {Boolean} safeAreaInsetBottom 是否开启底部安全区适配 (默认 true )
  87. * @property {Boolean} closeOnClickOverlay 是否允许点击遮罩收起键盘 (默认 true )
  88. * @property {Boolean} show 控制键盘的弹出与收起(默认 false )
  89. * @property {Boolean} overlay 是否显示遮罩 (默认 true )
  90. * @property {String | Number} zIndex 弹出键盘的z-index值 (默认 1075 )
  91. * @property {String} cancelText 取消按钮的文字 (默认 '取消' )
  92. * @property {String} confirmText 确认按钮的文字 (默认 '确认' )
  93. * @property {Object} customStyle 自定义样式,对象形式
  94. * @event {Function} change 按键被点击(不包含退格键被点击)
  95. * @event {Function} cancel 键盘顶部工具条左边的"取消"按钮被点击
  96. * @event {Function} confirm 键盘顶部工具条右边的"完成"按钮被点击
  97. * @event {Function} backspace 键盘退格键被点击
  98. * @example <u-keyboard mode="number" v-model="show"></u-keyboard>
  99. */
  100. export default {
  101. name: "u-keyboard",
  102. data() {
  103. return {}
  104. },
  105. mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
  106. methods: {
  107. change(e) {
  108. this.$emit('change', e);
  109. },
  110. // 键盘关闭
  111. popupClose() {
  112. this.$emit('close');
  113. },
  114. // 输入完成
  115. onConfirm() {
  116. this.$emit('confirm');
  117. },
  118. // 取消输入
  119. onCancel() {
  120. this.$emit('cancel');
  121. },
  122. // 退格键
  123. backspace() {
  124. this.$emit('backspace');
  125. }
  126. }
  127. }
  128. </script>
  129. <style lang="scss" scoped>
  130. @import "../../libs/css/components.scss";
  131. .u-keyboard {
  132. &__tooltip {
  133. @include flex;
  134. justify-content: space-between;
  135. background-color: #FFFFFF;
  136. padding: 14px 12px;
  137. &__item {
  138. color: #333333;
  139. flex: 1;
  140. text-align: center;
  141. font-size: 15px;
  142. }
  143. &__submit {
  144. text-align: right;
  145. color: $u-primary;
  146. }
  147. &__cancel {
  148. text-align: left;
  149. color: #888888;
  150. }
  151. &__tips {
  152. color: $u-tips-color;
  153. }
  154. }
  155. }
  156. </style>