index.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <template>
  2. <view>
  3. <view class="time1" :class='isShow==true?"on":""'>
  4. <view class="top acea-row row-between-wrapper">
  5. <text @tap="cancel">取消</text>
  6. <text @tap="confirm">确定</text>
  7. </view>
  8. <picker-view class="picker" :value="value" @change="getime" indicator-style="height:34px;">
  9. <picker-view-column>
  10. <view class="hours" v-for="(item,index) in hoursList" :key="index">{{item}}</view>
  11. </picker-view-column>
  12. <picker-view-column>
  13. <view class="minutes" v-for="(item,index) in minutes" :key="index">{{item}}</view>
  14. </picker-view-column>
  15. <picker-view-column>
  16. <view class="center">-</view>
  17. </picker-view-column>
  18. <picker-view-column>
  19. <view class="hours" v-for="(item,index) in hoursList" :key="index">{{item}}</view>
  20. </picker-view-column>
  21. <picker-view-column>
  22. <view class="minutes" v-for="(item,index) in minutes" :key="index">{{item}}</view>
  23. </picker-view-column>
  24. </picker-view>
  25. </view>
  26. <view class="mask" @tap="cancel" catchtouchmove="true" :hidden="isShow==false"></view>
  27. </view>
  28. </template>
  29. <script>
  30. // +----------------------------------------------------------------------
  31. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  32. // +----------------------------------------------------------------------
  33. // | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
  34. // +----------------------------------------------------------------------
  35. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  36. // +----------------------------------------------------------------------
  37. // | Author: CRMEB Team <admin@crmeb.com>
  38. // +----------------------------------------------------------------------
  39. let minutes=[]
  40. for (let i = 0; i <= 59; i++) {
  41. if(i<10){
  42. i="0"+i
  43. }
  44. minutes.push(i)
  45. }
  46. let hoursList = []
  47. for (let i = 0; i <= 23; i++) {
  48. if(i<10){
  49. i="0"+i
  50. }
  51. hoursList.push(i)
  52. }
  53. export default{
  54. props:{
  55. isShow:{
  56. type: Boolean,
  57. default: false
  58. },
  59. time:{
  60. type: Array,
  61. default() {
  62. return [];
  63. }
  64. }
  65. },
  66. watch:{
  67. time:function(){
  68. this.value=this.time
  69. }
  70. },
  71. created(){
  72. },
  73. data(){
  74. return{
  75. value:this.time,//默认结束开始时间
  76. hoursList,
  77. minutes,
  78. }
  79. },
  80. methods:{
  81. confirm(){
  82. let num0 = this.value[0]?this.value[0]:'00'
  83. let num1 = this.value[1]?this.value[1]:'00'
  84. let num3 = this.value[3]?this.value[3]:'00'
  85. let num4 = this.value[4]?this.value[4]:'00'
  86. let time = num0 +":"+ num1 +" - "+ num3+":"+ num4
  87. if(num3>num0 || (num3 == num0 && num4 >= num1)){
  88. this.$emit("confrim",{time:time,val:this.value})
  89. }else{
  90. return this.$util.Tips({
  91. title: '开始时间必须小于结束时间'
  92. });
  93. }
  94. },
  95. cancel(){
  96. let time = this.value[0]+":"+this.value[1]+" - "+this.value[3]+":"+this.value[4]
  97. this.$emit("cancel",{time:time})
  98. },
  99. getime(e){
  100. let val = e.detail.value
  101. this.value[0] = this.hoursList[val[0]]
  102. this.value[1] = this.minutes[val[1]]
  103. this.value[2] = val[2]
  104. this.value[3] = this.hoursList[val[3]]
  105. this.value[4] = this.minutes[val[4]]
  106. },
  107. }
  108. }
  109. </script>
  110. <style lang="scss" scoped>
  111. .time1{
  112. width:100%;
  113. margin: 0 auto;
  114. background-color:#FFFFFF;
  115. color: #000;
  116. height: 568rpx;
  117. position: fixed;
  118. bottom: 0;
  119. left: 0;
  120. z-index: 99;
  121. transform: translate3d(0, 200%, 0);
  122. transition: all .3s cubic-bezier(.25, .5, .5, .9);
  123. &.on{
  124. transform: translate3d(0, 0, 0);
  125. }
  126. .top{
  127. height: 90rpx;
  128. border-bottom: 1px solid #eee;
  129. padding: 0 30rpx;
  130. text{
  131. font-size: 32rpx;
  132. &:nth-child(1){
  133. color: #888;
  134. }
  135. &:nth-child(2){
  136. color: #007aff;
  137. }
  138. }
  139. }
  140. .tip12{
  141. width: 100%;
  142. height: 100rpx;
  143. view{
  144. width: 50%;
  145. text-align: center;
  146. line-height: 100rpx;
  147. font-size: 40rpx;
  148. color: #000000;
  149. }
  150. }
  151. .hours{
  152. font-size: 32rpx;
  153. color: #000;
  154. line-height:34px;
  155. text-align: center;
  156. }
  157. .minutes{
  158. font-size: 32rpx;
  159. color: #000;
  160. line-height:34px;
  161. text-align: center;
  162. }
  163. .center{
  164. line-height:34px;
  165. text-align: center;
  166. }
  167. }
  168. .picker{
  169. width: 100%;
  170. height: 476rpx;
  171. }
  172. </style>