Picker.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <!-- 时间选择弹窗 -->
  2. <template>
  3. <portal to="notification-outlet">
  4. <div class="toast-wrap" v-if="show">
  5. <div class="content">
  6. <van-picker
  7. :columns="columns"
  8. :visible-item-count='3'
  9. :swipe-duration="100"
  10. @change="handlechange"
  11. />
  12. <div class="confBtn">
  13. <p class="tip" v-show="showTip">请选择正确的时间</p>
  14. <div @click="getVal">确认</div>
  15. </div>
  16. </div>
  17. <div class="mask" @click="onCancel"></div>
  18. </div>
  19. </portal>
  20. </template>
  21. <script type="text/javascript">
  22. import $ from 'jquery';
  23. const num = [0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9];
  24. const unit = ['分钟', '小时', '天', '周', '月','年','分钟', '小时', '天', '周', '月','年'];
  25. export default {
  26. name:'Picker',
  27. data() {
  28. return {
  29. columns: [
  30. {
  31. values:num,
  32. className:'column1',
  33. defaultIndex: 10
  34. },
  35. {
  36. values:num,
  37. className:'column2',
  38. defaultIndex: 11
  39. },
  40. {
  41. values:unit,
  42. className:'column3',
  43. defaultIndex: 6
  44. },
  45. ],
  46. showTip:false,
  47. columIndx:[]
  48. }
  49. },
  50. props:['show','picIndex'],
  51. created(){//记录位置
  52. this.columns[0].defaultIndex = this.columIndx[0] = this.picIndex[0] || 10;
  53. this.columns[1].defaultIndex = this.columIndx[1] = this.picIndex[1] || 11;
  54. this.columns[2].defaultIndex = this.columIndx[2] = this.picIndex[2] || 6;
  55. },
  56. methods: {
  57. getVal() {
  58. const val1 = $(".column1 ul .van-picker-column__item--selected")[0].innerText;
  59. const val2 = $(".column2 ul .van-picker-column__item--selected")[0].innerText;
  60. const val3 = $(".column3 ul .van-picker-column__item--selected")[0].innerText;
  61. // 如果选两个0,则提示
  62. if(val1 == 0 && val2 == 0){
  63. this.showTip = true;
  64. return
  65. }
  66. const value = val1 + val2 + val3;
  67. this.$emit("comfirn",value,this.columIndx)
  68. this.columns[0].defaultIndex = this.columIndx[0] || 10;
  69. this.columns[1].defaultIndex = this.columIndx[1] || 11;
  70. this.columns[2].defaultIndex = this.columIndx[2] || 6;
  71. },
  72. onCancel() {
  73. this.$emit("cancel")
  74. this.showTip = false;
  75. },
  76. handlechange(picker, value, colum){//关掉提示
  77. this.showTip = false;
  78. for(let i=0;i<3;i++){
  79. if(i == 2){
  80. this.columIndx[i] = unit.lastIndexOf(value[i]);
  81. }else{
  82. this.columIndx[i] = num.lastIndexOf(value[i]);
  83. }
  84. }
  85. },
  86. resetIndex(){//清除时复原默认index
  87. this.columns[0].defaultIndex = 10;
  88. this.columns[1].defaultIndex = 11;
  89. this.columns[2].defaultIndex = 6;
  90. }
  91. }
  92. };
  93. </script>
  94. <style lang="less" scoped>
  95. @import '../less/base.less';
  96. .toast-wrap{
  97. .content{
  98. padding-top: 25px;
  99. width: 6.3rem;
  100. // height: 4.8rem;
  101. height: 227px;
  102. background: #fff;
  103. z-index: 999;
  104. position: fixed;
  105. top:50%;
  106. left: 50%;
  107. transform: translate(-50%,-50%);
  108. box-sizing: border-box;
  109. border-radius: .2rem;
  110. z-index: 1000;
  111. font-size: .3rem;
  112. overflow-y: hidden;
  113. .confBtn{
  114. height: 44px;
  115. line-height: 44px;
  116. text-align: center;
  117. border-top: 1px solid #ebedf0;
  118. margin-top: 25px;
  119. position: relative;
  120. .tip{
  121. position: absolute;
  122. top:-22px;
  123. font-size: .24rem;
  124. color: red;
  125. line-height: 20px;
  126. width:100%;
  127. text-align: center;
  128. }
  129. div{
  130. color: #colors[theme];
  131. }
  132. }
  133. }
  134. .mask{
  135. .mask;
  136. z-index: 999;
  137. }
  138. }
  139. </style>