• vue实现日期选择器


    <template>
        <div class="calendar">
            <div class="calendar-box">
                <span class="title-span">预约日期:</span>
                <div class="calendar-body">
                    <div class="calendar-body-text">
                        <div style="cursor: pointer" @click="month--">《 </div>
                        <div class="text-title">{{timeValue}}</div>
                        <div style="cursor: pointer" @click="month++"> 》</div>
                    </div>
                    <table>
                        <thead>
                            <tr>
                                <th v-for="(h, i) in teheadList" :key="i">{{h}}</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr v-for="(b, i) in tbodyList" :key="i">
                                <td v-for="(o, index) in b" :key="index" :class="currentDay == (o.month + '-' + o.name) ? 'activeDay' : ''">
                                    <span :class="o.class" v-if="o.name == 'default'">{{o.name}}</span>
                                    <span :class="o.class + (day == o.name ? ' currentMonth' : '')" @click="currentDay = o.month + '-' + o.name; " v-else>{{o.name}}</span>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </template>
    
    <script>
    export default {
        name: 'calendar',
        data: () => {
            return {
                timeValue: '',
                teheadList: ['日', '一', '二', '三', '四', '五', '六'],
    
                year: '',
                month: 0,
                day: '',
                tbodyList: [],
                currentDay: ''
            }
        },
        mounted() {
            this.getInitTime()
        },
        watch: {
            month() {
                if(this.month < 1) {
                    this.month = 12;
                    this.year --;
                }else if(this.month > 12){
                    this.month = 1;
                    this.year ++;
                }
                this.tbodyList = []
                this.timeValue = this.year + '年' + this.month + '月'
                this.handleAetCalendar()
            }
        },
        methods: {
            getInitTime() {
                let date = new Date();
                this.year = date.getFullYear();  // 获取当年
                this.month = date.getMonth()+1;  // 获取本月
                this.day = date.getDate();       // 获取当天
                this.timeValue = date.getFullYear() + '年' + (date.getMonth()+1) + '月'
                
                this.handleAetCalendar()
            },
            // 生成档期数据
            handleAetCalendar() {
                this.tbodyList = [];
                let days = new Date(this.year, this.month, 0).getDate()  // 当月总天数
                let week = new Date(this.year, this.month-1, 1).getDay() // 当月有几周
                let last_month = new Date(this.year, this.month + 1, 0).getDate()  // 当月的上一个月的最后一天
                this.tbodyList[0] = [];
                for(let i = 0; i < Math.ceil((days + week) / 7) *7; i++) {
                    let nub = Math.floor(i / 7);
                    if(i<week) {
                        this.tbodyList[nub].push({
                            class: 'default', 
                            name: last_month+i-week+1,
                            month: this.month == 0 ? 12 : this.month -1
                        })
                    }else {
                        if(!this.tbodyList[nub]) {
                            this.tbodyList[nub] = [];
                        }
                        let day = i - week +1;
                        let calssName = 'actives'
                        let month = this.month;
                        if(day > days) {
                            day -= days;
                            calssName = 'default';
                            month = this.month +1 > 12 ? 1 : this.month+1
                        }
                        this.tbodyList[nub].push({
                            class: calssName, 
                            name: day,
                            month: month
                        })
                    }
                }
                let arr = this.tbodyList[Math.floor( (week + days) /7)];
                if( arr && arr.length !== 7 ){
                    this.tbodyList[Math.floor( (week+days) / 7)] = arr.concat(new Array(7 - arr.length).fill(""))
                }
            },
        }
    }
    </script>
    
    <style lang="scss" scoped>
        .calendar {
             600px;
            height: 400px;
            background: #DCDCDC;
            padding: 15px;
            margin: 50px auto;
            .calendar-box {
                 100%;
                background: #FFF;
                height: 100%;
                position: relative;
                .title-span {
                    position: absolute;
                    left: 5%;
                    top: 4%;
                }
    
                .calendar-body {
                     80%;
                    margin: 0 auto;
                    padding: 15px;
                    .calendar-body-text {
                         100%;
                        height: 30px;
                        display: flex;
                        flex-direction: row;
                        align-items: center;
                        justify-content: center;
                        .text-title {
                            margin: 0 20px;
                        }
                    }
                }
                table tr th{
                    color: #ccc;
                }
                table tr th, table tr td {
                     66px;
                    height: 50px;
                }
                table td {
                    &.activeDay {
                        border-bottom: 1px solid red;
                        span {
                            color: #fe5578;
                        }
                    }
                    .currentMonth {
                        color: #00BFFF
                    }
                }
                table td span{
                    color: #333;
                    cursor: pointer;
                }
                table td span.default{
                    color: #e9e9e9;
                }
            }
        }
        
    </style>
  • 相关阅读:
    (十)安装YAML
    (十四)日志
    Android自动化测试------monkeyrunner(六)
    Android自动化测试------monkey日志管理(五)
    如何学好一门编程语言
    linux vi hjkl由来
    .net 微服务CICD 好文章
    APPCMD 精心整理 有点赞的吗
    APPCMD 命令合集
    APPCMD 使用手册
  • 原文地址:https://www.cnblogs.com/na-w/p/11912933.html
Copyright © 2020-2023  润新知