gui-car-number.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <gui-popup
  3. ref="guipopupforcarnumber"
  4. width="750rpx"
  5. position="bottom"
  6. :canCloseByShade="true">
  7. <view
  8. @tap.stop.prevent="stopfun"
  9. class="gui-bg-white">
  10. <view
  11. class="gui-flex gui-rows gui-space-between gui-align-items-center"
  12. style="padding:20rpx;">
  13. <!-- 类型 -->
  14. <view style="width:320rpx;">
  15. <gui-segmented-control
  16. :items="['普通车牌','新能源牌']"
  17. :current="carType"
  18. @change="changeType"></gui-segmented-control>
  19. </view>
  20. <text class="gui-car-number-submit gui-block-text gui-color-blue"
  21. @tap="confirm">确定</text>
  22. </view>
  23. <!-- 车牌展示 -->
  24. <view
  25. class="gui-flex gui-rows gui-nowrap gui-justify-content-center"
  26. style="padding-top:20rpx; padding-bottom:20rpx;">
  27. <text class="gui-car-number-item gui-block-text"
  28. :class="[
  29. idx == inputIndex ? 'gui-bg-blue' : '',
  30. idx == inputIndex ? 'gui-a-shade' : ''
  31. ]"
  32. v-for="(item, idx) in carNumberArray" :key="idx"
  33. @tap="numberTap(idx)">{{item}}</text>
  34. </view>
  35. <!-- 错误信息 -->
  36. <view
  37. v-if="errorshow"
  38. style="padding:20rpx; margin-bottom:10rpx;">
  39. <text class="gui-text gui-block-text gui-color-red gui-text-center">请输入完整车牌号码</text>
  40. </view>
  41. <view class="gui-bg-gray"
  42. style="padding:15rpx;">
  43. <!-- 省份前缀键盘 -->
  44. <view class="gui-flex gui-rows gui-wrap"
  45. v-if="inputIndex == 0">
  46. <view class="gui-car-number-key"
  47. hover-class="gui-bg-blue"
  48. :hover-stay-time="50"
  49. v-for="(item, idx) in provinces"
  50. :key="idx"
  51. @tap="provinceTap(item)">
  52. <text class="gui-car-number-key-txt gui-block-text">{{item}}</text>
  53. </view>
  54. </view>
  55. <!-- 号码键盘 -->
  56. <view class="gui-flex gui-rows gui-wrap gui-space-between"
  57. v-else>
  58. <view class="gui-car-number-key"
  59. hover-class="gui-kd-tap"
  60. :hover-stay-time="50"
  61. v-for="(item, idx) in keyWords"
  62. :key="idx"
  63. @tap="keyTap(item)">
  64. <text class="gui-car-number-key-txt gui-block-text">{{item}}</text>
  65. </view>
  66. <view class="gui-car-number-key"
  67. hover-class="gui-kd-tap"
  68. @tap="deleteNumber">
  69. <text class="gui-car-number-key-txt gui-block-text gui-icons">&#xe623;</text>
  70. </view>
  71. </view>
  72. </view>
  73. <gui-iphone-bottom></gui-iphone-bottom>
  74. </view>
  75. </gui-popup>
  76. </template>
  77. <script>
  78. export default{
  79. name : "gui-car-number",
  80. props : {},
  81. data() {
  82. return {
  83. carNumber : '',
  84. carNumberArray : [],
  85. carType : 0,
  86. inputIndex : 0,
  87. provinces : ['京','津','沪','渝','冀','豫','云',
  88. '辽','黑','湘','皖','鲁','新','苏',
  89. '浙','赣','鄂','桂','甘','晋','蒙',
  90. '陕','吉','闽','贵','粤','青','藏',
  91. '川','宁','琼','使','领','新'
  92. ],
  93. keyWords : ['1','2','3','4','5','6','7','8','9','0',
  94. 'A','B','C','D','E','F','G','H',
  95. 'J','K','L','M','N','P','Q','R',
  96. 'S','T','U','V','W','X','Y','Z',
  97. '港','澳','学','领','警'],
  98. errorshow : false
  99. }
  100. },
  101. mounted:function(){
  102. this.showNumber();
  103. },
  104. methods:{
  105. showError : function () {
  106. this.errorshow = true;
  107. setTimeout(()=>{this.errorshow = false},2000)
  108. },
  109. confirm : function () {
  110. let carNumberLength = this.carType == 0 ? 7 : 8;
  111. if(this.carNumber.length < carNumberLength){
  112. this.showError();
  113. return ;
  114. }
  115. this.$emit('confirm', this.carNumber);
  116. this.$refs.guipopupforcarnumber.close();
  117. },
  118. numberTap : function (idx) {
  119. this.inputIndex = idx
  120. },
  121. provinceTap : function(key){
  122. this.carNumberArray[0] = key;
  123. this.carNumber = this.carNumberArray.join('');
  124. this.showNumber();
  125. },
  126. keyTap : function(key){
  127. let carNumberLength = this.carType == 0 ? 7 : 8;
  128. if(this.inputIndex >= carNumberLength){return ;}
  129. this.carNumberArray[this.inputIndex] = key;
  130. this.carNumber = this.carNumberArray.join('');
  131. this.showNumber();
  132. },
  133. showNumber : function(){
  134. let carNumberArray = this.carNumber.split('');
  135. let carNumberLength = this.carType == 0 ? 7 : 8;
  136. let carNumberArrLength = carNumberArray.length;
  137. this.carNumberArray = [];
  138. var inputIndex = 0;
  139. for(let i = 0; i < carNumberLength; i++){
  140. if(carNumberArrLength > i){
  141. this.carNumberArray[i] = carNumberArray[i];
  142. inputIndex++;
  143. }else{
  144. this.carNumberArray[i] = '';
  145. }
  146. }
  147. this.carNumber = this.carNumberArray.join('');
  148. this.inputIndex = inputIndex;
  149. },
  150. changeType : function(e){
  151. this.carType = e;
  152. this.showNumber();
  153. },
  154. setType : function(carType){
  155. this.carType = carType;
  156. this.showNumber();
  157. },
  158. setVal : function(carNumber){
  159. this.carNumber = carNumber;
  160. this.showNumber();
  161. },
  162. deleteNumber : function(){
  163. if(this.inputIndex < 0){return ;}
  164. this.carNumberArray.splice((this.inputIndex -1), 1, '');
  165. this.carNumber = this.carNumberArray.join('');
  166. this.showNumber();
  167. },
  168. open : function(){
  169. this.$refs.guipopupforcarnumber.open();
  170. },
  171. stopfun : function(e){
  172. e.stopPropagation();
  173. return ;
  174. }
  175. }
  176. }
  177. </script>
  178. <style scoped>
  179. .gui-car-number-item{width:70rpx; height:70rpx; font-size:30rpx; line-height:70rpx; text-align:center; border:1px solid #CECECE; border-radius:6rpx; margin-right:15rpx; font-weight:700;}
  180. .gui-car-number-key{width:76rpx; height:76rpx; border:1px solid #CECECE; border-radius:6rpx; margin:5rpx;}
  181. .gui-car-number-key-txt{font-size:30rpx; line-height:76rpx; text-align:center;}
  182. .gui-car-number-submit{width:100rpx; line-height:60rpx; text-align:center; font-size:30rpx;}
  183. .gui-bg-blue{color:#FFFFFF; border-color: #008AFF;}
  184. /* #ifndef APP-NVUE */
  185. @keyframes gui-a-shade{0%{opacity:1;} 25%{opacity:0.6;} 50%{opacity:0.6;} 75%{opacity:1;} 100%{opacity:1;}}
  186. .gui-a-shade{animation:gui-a-shade 1.5s ease infinite;}
  187. .gui-kd-tap{color:#FFFFFF; background-color:#008AFF; border-color:#008AFF;}
  188. /* #endif */
  189. /* #ifdef APP-NVUE */
  190. .gui-kd-tap{color:#FFFFFF; background-color:#CECECE; border-color:#CECECE;}
  191. /* #endif */
  192. </style>