| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <template>
- <div class="date-picker">
- <div class="date-picker-box" >
- <vc-date-picker
- ref="Calendar"
- class="calendar"
- v-model="date"
- :first-day-of-week="1"
- :disabled-dates='disabledDates'
- @transition-start="queryMoth"
- @dayclick="onDayClick">
- </vc-date-picker>
- </div>
- <van-divider @click="foldBox">
- <van-icon v-if="showPicker" name="arrow-up" color="#ccc" size="20"/>
- <van-icon v-else name="arrow-down" color="#ccc" size="20"/>
- </van-divider>
- <!-- <p class="hide-line" @click="foldBox">-->
- <!-- <span>-->
- <!-- <van-icon v-if="showPicker" name="arrow-up" color="#ccc" size="20"/>-->
- <!-- <van-icon v-else name="arrow-down" color="#ccc" size="20"/>-->
- <!-- </span>-->
- <!-- </p>-->
- </div>
- </template>
- <script>
- import dayjs from "dayjs";
- export default {
- data(){
- let date = dayjs().add(1, 'day').format('YYYY-MM-DD');
- return{
- date:new Date(),
- showPicker:true,
- num:0,
- height:null,
- disabledDates:{
- start: date
- }
- }
- },
- mounted() {
- },
- watch:{
- // 监听显示状态
- showPicker (){
- let weeksBox = document.getElementsByClassName('vc-day');
- let pickerBox = document.getElementsByClassName('date-picker-box')[0];
- if( this.showPicker){
- for(let i = 0; i < weeksBox.length;i++){
- weeksBox[i].style.transitionDuration = `.5s`;
- weeksBox[i].style.transform = `translate(0, 0)`;
- }
- pickerBox.style.height = `${this.height}px`;
- console.log('show')
- }else {
- this.height = pickerBox.offsetHeight;
- for(let i = 0; i < weeksBox.length;i++){
- weeksBox[i].style.transitionDuration = `.5s`;
- weeksBox[i].style.transform = `translate(0, -${this.num * 32}px)`;
- }
- pickerBox.style.height = `100px`;
- console.log('hide')
- }
- }
- },
- methods:{
- foldBox(){
- let Calendar = this.$refs.Calendar;
- console.log(Calendar,'Calendar')
- this.num = Calendar.dateParts[0].week - 1;
- this.showPicker = !this.showPicker;
- },
- // 获取年、月份
- queryMoth(){
- let Calendar = this.$refs.Calendar;
- let year = Calendar.$refs.calendar.pages[0].year;
- let month = Calendar.$refs.calendar.pages[0].month;
- this.$emit('Mouth',{year,month});
- if(!this.showPicker) this.showPicker = true;
- },
- //点击日期
- onDayClick(day){
- if(day.isDisabled) return;
- console.log(day,'day')
- // let dayLine = day.classes[7].substring(5);
- // this.num = dayLine -1;
- this.$emit('change',day.id)
- },
- }
- }
- </script>
- <style lang="scss">
- .date-picker {
- width: 100%;
- background-color: #fff;
- box-sizing: border-box;
- .calendar {
- border: none;
- width: 100%;
- }
- .vc-header{
- width: 100%;
- background-color: #fff;
- position: relative;
- z-index:10;
- }
- .vc-arrow{
- position: relative;
- z-index:10;
- }
- .vc-weeks{
- overflow: hidden;
- transition-duration: .8s;
- background-color: #fff;
- padding-top: 0;
- }
- .vc-weekday{
- position: relative;
- padding-top: 10px;
- background-color: #fff;
- z-index:10;
- }
- .vc-day{
- transition-duration: .5s;
- }
- .date-picker-box{
- overflow: hidden;
- transition-duration: .5s;
- }
- .hide-line{
- box-sizing: border-box;
- display: flex;
- height: 1px;
- width: 100%;
- margin: 30px 0;
- background-color: #eaeaea;
- justify-content: center;
- align-items: center;
- >span{
- display: inline-block;
- padding: 6px;
- background-color: #fff;
- }
- }
- .van-divider{
- margin: 10px 20px;
- }
- }
- </style>
|