birthday.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <template>
  2. <view>
  3. <view @click="showSelect" class="flex alcenter">
  4. <text v-if="value.length == 0" class="ft14 ftw500 cl-main">请选择</text>
  5. <text v-else class="ft14 ftw500 cl-main">{{value[0]}}月{{value[1]}}日</text>
  6. <text class="iconfont iconicon_arrow_small ft14 ml10"></text>
  7. </view>
  8. <view v-show="showBirthday" class="birthday-modal">
  9. <view class="modal-bg"></view>
  10. <view class="modal-box animated fast" :class="show ? 'slideInUp' : 'slideOutDown'">
  11. <view class="modal-main">
  12. <view class="closed">
  13. <text @click="closed()" class="iconfont ft20 cl-notice iconbtn_close"></text>
  14. </view>
  15. <view class="lh20 ft16 cl-main ftw600 text-center">请选择生日</view>
  16. <view class="mt30">
  17. <picker-view class="picker-view" indicator-style="height:50px" :value="selectVal" @change="bindChange">
  18. <picker-view-column>
  19. <view class="item text-center" v-for="(item,index) in month" :key="index">{{item}}</view>
  20. </picker-view-column>
  21. <picker-view-column>
  22. <view class="item text-center" v-for="(item,index) in days" :key="index">{{item}}</view>
  23. </picker-view-column>
  24. </picker-view>
  25. </view>
  26. <view class="plr15 mt40">
  27. <button class="btn-big" @click="selectYes" :style="isSelect == false ? getBtnDisStyle :getBtnStyle ">确定选择</button>
  28. </view>
  29. </view>
  30. </view>
  31. </view>
  32. </view>
  33. </template>
  34. <script>
  35. export default{
  36. props:{
  37. value:{
  38. type:Array,
  39. default:function(){
  40. return [];
  41. }
  42. },
  43. },
  44. computed:{
  45. selectVal(){
  46. let value = this.value;
  47. if(value.length == 0){
  48. value = new Array;
  49. value = ['01','01'];
  50. }
  51. let arr = [0,0];
  52. for(var a in this.month){
  53. if(this.month[a] == value[0]){
  54. arr[0] = a;
  55. }
  56. }
  57. for(var b in this.days){
  58. if(this.days[b] == value[1]){
  59. arr[1] = b;
  60. }
  61. }
  62. return arr;
  63. }
  64. },
  65. data(){
  66. let month = new Array;
  67. for(var i= 1;i<=12;i++){
  68. var m = i < 10 ? '0'+i : i;
  69. month.push(m);
  70. }
  71. let days = this.makeDays(this.value[0] ? this.value[0] : '01');
  72. return {
  73. month:month,
  74. days:days,
  75. show:false,
  76. showBirthday:false,
  77. isSelect:false,
  78. selectdate:['01','01'],
  79. }
  80. },
  81. created(){
  82. },
  83. methods:{
  84. showSelect(){
  85. this.showBirthday = true;
  86. this.show = true;
  87. },
  88. makeDays(m){
  89. let dmax = 31;
  90. if(m == '02'){
  91. dmax = 29;
  92. }else{
  93. if(m == '04' || m == '06' || m == '09' || m == '11'){
  94. dmax = 30;
  95. }else{
  96. dmax = 31;
  97. }
  98. }
  99. let days = new Array;
  100. for(var i = 1;i<=dmax;i++){
  101. var d = i< 10 ? '0'+i : i;
  102. days.push(d);
  103. }
  104. return days;
  105. },
  106. bindChange(e){
  107. let values = e.detail.value;
  108. this.days = this.makeDays(this.month[values[0]]);
  109. this.selectdate = [this.month[values[0]],this.days[values[1]]];
  110. this.isSelect = true;
  111. },
  112. selectYes(){
  113. console.log(this.selectdate);
  114. console.log(this.isSelect);
  115. if(this.isSelect ){
  116. this.$emit('input',this.selectdate);
  117. this.closed();
  118. }
  119. },
  120. closed(){
  121. this.show = false;
  122. setTimeout(()=>{
  123. this.showBirthday = false;
  124. },400);
  125. }
  126. }
  127. }
  128. </script>
  129. <style>
  130. .birthday-modal{
  131. position: relative;
  132. z-index: 400;
  133. }
  134. .birthday-modal .modal-bg{
  135. position: fixed;
  136. z-index: 400;
  137. left: 0;
  138. top: 0;
  139. width: 100%;
  140. height: 100vh;
  141. background: rgba(0,0,0,.5);
  142. }
  143. .birthday-modal .modal-box{
  144. position: fixed;
  145. z-index: 401;
  146. background:#FFFFFF;
  147. left: 0;
  148. bottom: 0;
  149. width: 100%;
  150. padding-bottom:0rpx;
  151. padding-bottom:constant(safe-area-inset-bottom);
  152. padding-bottom:env(safe-area-inset-bottom);
  153. border-radius:32rpx 32rpx 0rpx 0rpx;
  154. }
  155. .birthday-modal .modal-main{
  156. position: relative;
  157. height: auto;
  158. overflow: hidden;
  159. padding-top: 64rpx;
  160. padding-bottom: 40rpx;
  161. }
  162. .birthday-modal .modal-main .closed{
  163. position: absolute;
  164. right: 40rpx;
  165. top: 40rpx;
  166. }
  167. </style>