<template> 
 | 
    <view class="uni-calendar" @mouseleave="leaveCale"> 
 | 
        <view v-if="!insert&&show" class="uni-calendar__mask" :class="{'uni-calendar--mask-show':aniMaskShow}" 
 | 
            @click="clean"></view> 
 | 
        <view v-if="insert || show" class="uni-calendar__content" 
 | 
            :class="{'uni-calendar--fixed':!insert,'uni-calendar--ani-show':aniMaskShow, 'uni-calendar__content-mobile': aniMaskShow}"> 
 | 
            <view class="uni-calendar__header" :class="{'uni-calendar__header-mobile' :!insert}"> 
 | 
                <view v-if="left" class="uni-calendar__header-btn-box" @click.stop="pre"> 
 | 
                    <view class="uni-calendar__header-btn uni-calendar--left"></view> 
 | 
                </view> 
 | 
                <picker mode="date" :value="date" fields="month" @change="bindDateChange"> 
 | 
                    <text 
 | 
                        class="uni-calendar__header-text">{{ (nowDate.year||'') + ' 年 ' + ( nowDate.month||'') +' 月'}}</text> 
 | 
                </picker> 
 | 
                <view v-if="right" class="uni-calendar__header-btn-box" @click.stop="next"> 
 | 
                    <view class="uni-calendar__header-btn uni-calendar--right"></view> 
 | 
                </view> 
 | 
                <view v-if="!insert" class="dialog-close" @click="clean"> 
 | 
                    <view class="dialog-close-plus" data-id="close"></view> 
 | 
                    <view class="dialog-close-plus dialog-close-rotate" data-id="close"></view> 
 | 
                </view> 
 | 
  
 | 
                <!-- <text class="uni-calendar__backtoday" @click="backtoday">回到今天</text> --> 
 | 
            </view> 
 | 
            <view class="uni-calendar__box"> 
 | 
                <view v-if="showMonth" class="uni-calendar__box-bg"> 
 | 
                    <text class="uni-calendar__box-bg-text">{{nowDate.month}}</text> 
 | 
                </view> 
 | 
                <view class="uni-calendar__weeks" style="padding-bottom: 7px;"> 
 | 
                    <view class="uni-calendar__weeks-day"> 
 | 
                        <text class="uni-calendar__weeks-day-text">{{SUNText}}</text> 
 | 
                    </view> 
 | 
                    <view class="uni-calendar__weeks-day"> 
 | 
                        <text class="uni-calendar__weeks-day-text">{{monText}}</text> 
 | 
                    </view> 
 | 
                    <view class="uni-calendar__weeks-day"> 
 | 
                        <text class="uni-calendar__weeks-day-text">{{TUEText}}</text> 
 | 
                    </view> 
 | 
                    <view class="uni-calendar__weeks-day"> 
 | 
                        <text class="uni-calendar__weeks-day-text">{{WEDText}}</text> 
 | 
                    </view> 
 | 
                    <view class="uni-calendar__weeks-day"> 
 | 
                        <text class="uni-calendar__weeks-day-text">{{THUText}}</text> 
 | 
                    </view> 
 | 
                    <view class="uni-calendar__weeks-day"> 
 | 
                        <text class="uni-calendar__weeks-day-text">{{FRIText}}</text> 
 | 
                    </view> 
 | 
                    <view class="uni-calendar__weeks-day"> 
 | 
                        <text class="uni-calendar__weeks-day-text">{{SATText}}</text> 
 | 
                    </view> 
 | 
                </view> 
 | 
                <view class="uni-calendar__weeks" v-for="(item,weekIndex) in weeks" :key="weekIndex"> 
 | 
                    <view class="uni-calendar__weeks-item" v-for="(weeks,weeksIndex) in item" :key="weeksIndex"> 
 | 
                        <calendar-item class="uni-calendar-item--hook" :weeks="weeks" :calendar="calendar" 
 | 
                            :selected="selected" :lunar="lunar" :checkHover="range" @change="choiceDate" 
 | 
                            @handleMouse="handleMouse"> 
 | 
                        </calendar-item> 
 | 
                    </view> 
 | 
                </view> 
 | 
            </view> 
 | 
            <view v-if="!insert && !range && typeHasTime" class="uni-date-changed uni-calendar--fixed-top" 
 | 
                style="padding: 0 80px;"> 
 | 
                <view class="uni-date-changed--time-date">{{tempSingleDate ? tempSingleDate : selectDateText}}</view> 
 | 
                <time-picker type="time" :start="reactStartTime" :end="reactEndTime" v-model="time" 
 | 
                    :disabled="!tempSingleDate" :border="false" :hide-second="hideSecond" class="time-picker-style"> 
 | 
                </time-picker> 
 | 
            </view> 
 | 
  
 | 
            <view v-if="!insert && range && typeHasTime" class="uni-date-changed uni-calendar--fixed-top"> 
 | 
                <view class="uni-date-changed--time-start"> 
 | 
                    <view class="uni-date-changed--time-date">{{tempRange.before ? tempRange.before : startDateText}} 
 | 
                    </view> 
 | 
                    <time-picker type="time" :start="reactStartTime" v-model="timeRange.startTime" :border="false" 
 | 
                        :hide-second="hideSecond" :disabled="!tempRange.before" class="time-picker-style"> 
 | 
                    </time-picker> 
 | 
                </view> 
 | 
                <uni-icons type="arrowthinright" color="#999" style="line-height: 50px;"></uni-icons> 
 | 
                <view class="uni-date-changed--time-end"> 
 | 
                    <view class="uni-date-changed--time-date">{{tempRange.after ? tempRange.after : endDateText}}</view> 
 | 
                    <time-picker type="time" :end="reactEndTime" v-model="timeRange.endTime" :border="false" 
 | 
                        :hide-second="hideSecond" :disabled="!tempRange.after" class="time-picker-style"> 
 | 
                    </time-picker> 
 | 
                </view> 
 | 
            </view> 
 | 
            <view v-if="!insert" class="uni-date-changed uni-date-btn--ok"> 
 | 
                <!-- <view class="uni-calendar__header-btn-box"> 
 | 
                    <text class="uni-calendar__button-text uni-calendar--fixed-width">{{okText}}</text> 
 | 
                </view> --> 
 | 
                <view class="uni-datetime-picker--btn" @click="confirm">确认</view> 
 | 
            </view> 
 | 
        </view> 
 | 
    </view> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
    import Calendar from './util.js'; 
 | 
    import calendarItem from './calendar-item.vue' 
 | 
    import timePicker from './time-picker.vue' 
 | 
    import { 
 | 
        initVueI18n 
 | 
    } from '@dcloudio/uni-i18n' 
 | 
    import messages from './i18n/index.js' 
 | 
    const { 
 | 
        t 
 | 
    } = initVueI18n(messages) 
 | 
    /** 
 | 
     * Calendar 日历 
 | 
     * @description 日历组件可以查看日期,选择任意范围内的日期,打点操作。常用场景如:酒店日期预订、火车机票选择购买日期、上下班打卡等 
 | 
     * @tutorial https://ext.dcloud.net.cn/plugin?id=56 
 | 
     * @property {String} date 自定义当前时间,默认为今天 
 | 
     * @property {Boolean} lunar 显示农历 
 | 
     * @property {String} startDate 日期选择范围-开始日期 
 | 
     * @property {String} endDate 日期选择范围-结束日期 
 | 
     * @property {Boolean} range 范围选择 
 | 
     * @property {Boolean} insert = [true|false] 插入模式,默认为false 
 | 
     *     @value true 弹窗模式 
 | 
     *     @value false 插入模式 
 | 
     * @property {Boolean} clearDate = [true|false] 弹窗模式是否清空上次选择内容 
 | 
     * @property {Array} selected 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] 
 | 
     * @property {Boolean} showMonth 是否选择月份为背景 
 | 
     * @event {Function} change 日期改变,`insert :ture` 时生效 
 | 
     * @event {Function} confirm 确认选择`insert :false` 时生效 
 | 
     * @event {Function} monthSwitch 切换月份时触发 
 | 
     * @example <uni-calendar :insert="true":lunar="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" /> 
 | 
     */ 
 | 
    export default { 
 | 
        components: { 
 | 
            calendarItem, 
 | 
            timePicker 
 | 
        }, 
 | 
        props: { 
 | 
            date: { 
 | 
                type: String, 
 | 
                default: '' 
 | 
            }, 
 | 
            defTime: { 
 | 
                type: [String, Object], 
 | 
                default: '' 
 | 
            }, 
 | 
            selectableTimes: { 
 | 
                type: [Object], 
 | 
                default () { 
 | 
                    return {} 
 | 
                } 
 | 
            }, 
 | 
            selected: { 
 | 
                type: Array, 
 | 
                default () { 
 | 
                    return [] 
 | 
                } 
 | 
            }, 
 | 
            lunar: { 
 | 
                type: Boolean, 
 | 
                default: false 
 | 
            }, 
 | 
            startDate: { 
 | 
                type: String, 
 | 
                default: '' 
 | 
            }, 
 | 
            endDate: { 
 | 
                type: String, 
 | 
                default: '' 
 | 
            }, 
 | 
            range: { 
 | 
                type: Boolean, 
 | 
                default: false 
 | 
            }, 
 | 
            typeHasTime: { 
 | 
                type: Boolean, 
 | 
                default: false 
 | 
            }, 
 | 
            insert: { 
 | 
                type: Boolean, 
 | 
                default: true 
 | 
            }, 
 | 
            showMonth: { 
 | 
                type: Boolean, 
 | 
                default: true 
 | 
            }, 
 | 
            clearDate: { 
 | 
                type: Boolean, 
 | 
                default: true 
 | 
            }, 
 | 
            left: { 
 | 
                type: Boolean, 
 | 
                default: true 
 | 
            }, 
 | 
            right: { 
 | 
                type: Boolean, 
 | 
                default: true 
 | 
            }, 
 | 
            checkHover: { 
 | 
                type: Boolean, 
 | 
                default: true 
 | 
            }, 
 | 
            hideSecond: { 
 | 
                type: [Boolean], 
 | 
                default: false 
 | 
            }, 
 | 
            pleStatus: { 
 | 
                type: Object, 
 | 
                default () { 
 | 
                    return { 
 | 
                        before: '', 
 | 
                        after: '', 
 | 
                        data: [], 
 | 
                        fulldate: '' 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        }, 
 | 
        data() { 
 | 
            return { 
 | 
                show: false, 
 | 
                weeks: [], 
 | 
                calendar: {}, 
 | 
                nowDate: '', 
 | 
                aniMaskShow: false, 
 | 
                firstEnter: true, 
 | 
                time: '', 
 | 
                timeRange: { 
 | 
                    startTime: '', 
 | 
                    endTime: '' 
 | 
                }, 
 | 
                tempSingleDate: '', 
 | 
                tempRange: { 
 | 
                    before: '', 
 | 
                    after: '' 
 | 
                } 
 | 
            } 
 | 
        }, 
 | 
        watch: { 
 | 
            date: { 
 | 
                immediate: true, 
 | 
                handler(newVal, oldVal) { 
 | 
                    if (!this.range) { 
 | 
                        this.tempSingleDate = newVal 
 | 
                        setTimeout(() => { 
 | 
                            this.init(newVal) 
 | 
                        }, 100) 
 | 
                    } 
 | 
                } 
 | 
            }, 
 | 
            defTime: { 
 | 
                immediate: true, 
 | 
                handler(newVal, oldVal) { 
 | 
                    if (!this.range) { 
 | 
                        this.time = newVal 
 | 
                    } else { 
 | 
                        // console.log('-----', newVal); 
 | 
                        this.timeRange.startTime = newVal.start 
 | 
                        this.timeRange.endTime = newVal.end 
 | 
                    } 
 | 
                } 
 | 
            }, 
 | 
            startDate(val) { 
 | 
                this.cale.resetSatrtDate(val) 
 | 
                this.cale.setDate(this.nowDate.fullDate) 
 | 
                this.weeks = this.cale.weeks 
 | 
            }, 
 | 
            endDate(val) { 
 | 
                this.cale.resetEndDate(val) 
 | 
                this.cale.setDate(this.nowDate.fullDate) 
 | 
                this.weeks = this.cale.weeks 
 | 
            }, 
 | 
            selected(newVal) { 
 | 
                this.cale.setSelectInfo(this.nowDate.fullDate, newVal) 
 | 
                this.weeks = this.cale.weeks 
 | 
            }, 
 | 
            pleStatus: { 
 | 
                immediate: true, 
 | 
                handler(newVal, oldVal) { 
 | 
                    const { 
 | 
                        before, 
 | 
                        after, 
 | 
                        fulldate, 
 | 
                        which 
 | 
                    } = newVal 
 | 
                    this.tempRange.before = before 
 | 
                    this.tempRange.after = after 
 | 
                    setTimeout(() => { 
 | 
                        if (fulldate) { 
 | 
                            this.cale.setHoverMultiple(fulldate) 
 | 
                            if (before && after) { 
 | 
                                this.cale.lastHover = true 
 | 
                                if (this.rangeWithinMonth(after, before)) return 
 | 
                                this.setDate(before) 
 | 
                            } else { 
 | 
                                this.cale.setMultiple(fulldate) 
 | 
                                this.setDate(this.nowDate.fullDate) 
 | 
                                this.calendar.fullDate = '' 
 | 
                                this.cale.lastHover = false 
 | 
                            } 
 | 
                        } else { 
 | 
                            this.cale.setDefaultMultiple(before, after) 
 | 
                            if (which === 'left') { 
 | 
                                this.setDate(before) 
 | 
                                this.weeks = this.cale.weeks 
 | 
                            } else { 
 | 
                                this.setDate(after) 
 | 
                                this.weeks = this.cale.weeks 
 | 
                            } 
 | 
                            this.cale.lastHover = true 
 | 
                        } 
 | 
                    }, 16) 
 | 
                } 
 | 
            } 
 | 
        }, 
 | 
        computed: { 
 | 
            reactStartTime() { 
 | 
                const activeDate = this.range ? this.tempRange.before : this.calendar.fullDate 
 | 
                const res = activeDate === this.startDate ? this.selectableTimes.start : '' 
 | 
                return res 
 | 
            }, 
 | 
            reactEndTime() { 
 | 
                const activeDate = this.range ? this.tempRange.after : this.calendar.fullDate 
 | 
                const res = activeDate === this.endDate ? this.selectableTimes.end : '' 
 | 
                return res 
 | 
            }, 
 | 
            /** 
 | 
             * for i18n 
 | 
             */ 
 | 
            selectDateText() { 
 | 
                return t("uni-datetime-picker.selectDate") 
 | 
            }, 
 | 
            startDateText() { 
 | 
                return this.startPlaceholder || t("uni-datetime-picker.startDate") 
 | 
            }, 
 | 
            endDateText() { 
 | 
                return this.endPlaceholder || t("uni-datetime-picker.endDate") 
 | 
            }, 
 | 
            okText() { 
 | 
                return t("uni-datetime-picker.ok") 
 | 
            }, 
 | 
            monText() { 
 | 
                return t("uni-calender.MON") 
 | 
            }, 
 | 
            TUEText() { 
 | 
                return t("uni-calender.TUE") 
 | 
            }, 
 | 
            WEDText() { 
 | 
                return t("uni-calender.WED") 
 | 
            }, 
 | 
            THUText() { 
 | 
                return t("uni-calender.THU") 
 | 
            }, 
 | 
            FRIText() { 
 | 
                return t("uni-calender.FRI") 
 | 
            }, 
 | 
            SATText() { 
 | 
                return t("uni-calender.SAT") 
 | 
            }, 
 | 
            SUNText() { 
 | 
                return t("uni-calender.SUN") 
 | 
            }, 
 | 
        }, 
 | 
        created() { 
 | 
            // 获取日历方法实例 
 | 
            this.cale = new Calendar({ 
 | 
                // date: new Date(), 
 | 
                selected: this.selected, 
 | 
                startDate: this.startDate, 
 | 
                endDate: this.endDate, 
 | 
                range: this.range, 
 | 
                // multipleStatus: this.pleStatus 
 | 
            }) 
 | 
            // 选中某一天 
 | 
            // this.cale.setDate(this.date) 
 | 
            this.init(this.date) 
 | 
            // this.setDay 
 | 
        }, 
 | 
        methods: { 
 | 
            leaveCale() { 
 | 
                this.firstEnter = true 
 | 
            }, 
 | 
            handleMouse(weeks) { 
 | 
                if (weeks.disable) return 
 | 
                if (this.cale.lastHover) return 
 | 
                let { 
 | 
                    before, 
 | 
                    after 
 | 
                } = this.cale.multipleStatus 
 | 
                if (!before) return 
 | 
                this.calendar = weeks 
 | 
                // 设置范围选 
 | 
                this.cale.setHoverMultiple(this.calendar.fullDate) 
 | 
                this.weeks = this.cale.weeks 
 | 
                // hover时,进入一个日历,更新另一个 
 | 
                if (this.firstEnter) { 
 | 
                    this.$emit('firstEnterCale', this.cale.multipleStatus) 
 | 
                    this.firstEnter = false 
 | 
                } 
 | 
            }, 
 | 
            rangeWithinMonth(A, B) { 
 | 
                const [yearA, monthA] = A.split('-') 
 | 
                const [yearB, monthB] = B.split('-') 
 | 
                return yearA === yearB && monthA === monthB 
 | 
            }, 
 | 
  
 | 
            // 取消穿透 
 | 
            clean() { 
 | 
                this.close() 
 | 
            }, 
 | 
  
 | 
            clearCalender() { 
 | 
                if (this.range) { 
 | 
                    this.timeRange.startTime = '' 
 | 
                    this.timeRange.endTime = '' 
 | 
                    this.tempRange.before = '' 
 | 
                    this.tempRange.after = '' 
 | 
                    this.cale.multipleStatus.before = '' 
 | 
                    this.cale.multipleStatus.after = '' 
 | 
                    this.cale.multipleStatus.data = [] 
 | 
                    this.cale.lastHover = false 
 | 
                } else { 
 | 
                    this.time = '' 
 | 
                    this.tempSingleDate = '' 
 | 
                } 
 | 
                this.calendar.fullDate = '' 
 | 
                this.setDate() 
 | 
            }, 
 | 
  
 | 
            bindDateChange(e) { 
 | 
                const value = e.detail.value + '-1' 
 | 
                this.init(value) 
 | 
            }, 
 | 
            /** 
 | 
             * 初始化日期显示 
 | 
             * @param {Object} date 
 | 
             */ 
 | 
            init(date) { 
 | 
                this.cale.setDate(date) 
 | 
                this.weeks = this.cale.weeks 
 | 
                this.nowDate = this.calendar = this.cale.getInfo(date) 
 | 
            }, 
 | 
            // choiceDate(weeks) { 
 | 
            //     if (weeks.disable) return 
 | 
            //     this.calendar = weeks 
 | 
            //     // 设置多选 
 | 
            //     this.cale.setMultiple(this.calendar.fullDate, true) 
 | 
            //     this.weeks = this.cale.weeks 
 | 
            //     this.tempSingleDate = this.calendar.fullDate 
 | 
            //     this.tempRange.before = this.cale.multipleStatus.before 
 | 
            //     this.tempRange.after = this.cale.multipleStatus.after 
 | 
            //     this.change() 
 | 
            // }, 
 | 
            /** 
 | 
             * 打开日历弹窗 
 | 
             */ 
 | 
            open() { 
 | 
                // 弹窗模式并且清理数据 
 | 
                if (this.clearDate && !this.insert) { 
 | 
                    this.cale.cleanMultipleStatus() 
 | 
                    // this.cale.setDate(this.date) 
 | 
                    this.init(this.date) 
 | 
                } 
 | 
                this.show = true 
 | 
                this.$nextTick(() => { 
 | 
                    setTimeout(() => { 
 | 
                        this.aniMaskShow = true 
 | 
                    }, 50) 
 | 
                }) 
 | 
            }, 
 | 
            /** 
 | 
             * 关闭日历弹窗 
 | 
             */ 
 | 
            close() { 
 | 
                this.aniMaskShow = false 
 | 
                this.$nextTick(() => { 
 | 
                    setTimeout(() => { 
 | 
                        this.show = false 
 | 
                        this.$emit('close') 
 | 
                    }, 300) 
 | 
                }) 
 | 
            }, 
 | 
            /** 
 | 
             * 确认按钮 
 | 
             */ 
 | 
            confirm() { 
 | 
                this.setEmit('confirm') 
 | 
                this.close() 
 | 
            }, 
 | 
            /** 
 | 
             * 变化触发 
 | 
             */ 
 | 
            change() { 
 | 
                if (!this.insert) return 
 | 
                this.setEmit('change') 
 | 
            }, 
 | 
            /** 
 | 
             * 选择月份触发 
 | 
             */ 
 | 
            monthSwitch() { 
 | 
                let { 
 | 
                    year, 
 | 
                    month 
 | 
                } = this.nowDate 
 | 
                this.$emit('monthSwitch', { 
 | 
                    year, 
 | 
                    month: Number(month) 
 | 
                }) 
 | 
            }, 
 | 
            /** 
 | 
             * 派发事件 
 | 
             * @param {Object} name 
 | 
             */ 
 | 
            setEmit(name) { 
 | 
                let { 
 | 
                    year, 
 | 
                    month, 
 | 
                    date, 
 | 
                    fullDate, 
 | 
                    lunar, 
 | 
                    extraInfo 
 | 
                } = this.calendar 
 | 
                this.$emit(name, { 
 | 
                    range: this.cale.multipleStatus, 
 | 
                    year, 
 | 
                    month, 
 | 
                    date, 
 | 
                    time: this.time, 
 | 
                    timeRange: this.timeRange, 
 | 
                    fulldate: fullDate, 
 | 
                    lunar, 
 | 
                    extraInfo: extraInfo || {} 
 | 
                }) 
 | 
            }, 
 | 
            /** 
 | 
             * 选择天触发 
 | 
             * @param {Object} weeks 
 | 
             */ 
 | 
            choiceDate(weeks) { 
 | 
                if (weeks.disable) return 
 | 
                this.calendar = weeks 
 | 
                this.calendar.userChecked = true 
 | 
                // 设置多选 
 | 
                this.cale.setMultiple(this.calendar.fullDate, true) 
 | 
                this.weeks = this.cale.weeks 
 | 
                this.tempSingleDate = this.calendar.fullDate 
 | 
                this.tempRange.before = this.cale.multipleStatus.before 
 | 
                this.tempRange.after = this.cale.multipleStatus.after 
 | 
                this.change() 
 | 
            }, 
 | 
            /** 
 | 
             * 回到今天 
 | 
             */ 
 | 
            backtoday() { 
 | 
                let date = this.cale.getDate(new Date()).fullDate 
 | 
                // this.cale.setDate(date) 
 | 
                this.init(date) 
 | 
                this.change() 
 | 
            }, 
 | 
            /** 
 | 
             * 比较时间大小 
 | 
             */ 
 | 
            dateCompare(startDate, endDate) { 
 | 
                // 计算截止时间 
 | 
                startDate = new Date(startDate.replace('-', '/').replace('-', '/')) 
 | 
                // 计算详细项的截止时间 
 | 
                endDate = new Date(endDate.replace('-', '/').replace('-', '/')) 
 | 
                if (startDate <= endDate) { 
 | 
                    return true 
 | 
                } else { 
 | 
                    return false 
 | 
                } 
 | 
            }, 
 | 
            /** 
 | 
             * 上个月 
 | 
             */ 
 | 
            pre() { 
 | 
                const preDate = this.cale.getDate(this.nowDate.fullDate, -1, 'month').fullDate 
 | 
                this.setDate(preDate) 
 | 
                this.monthSwitch() 
 | 
  
 | 
            }, 
 | 
            /** 
 | 
             * 下个月 
 | 
             */ 
 | 
            next() { 
 | 
                const nextDate = this.cale.getDate(this.nowDate.fullDate, +1, 'month').fullDate 
 | 
                this.setDate(nextDate) 
 | 
                this.monthSwitch() 
 | 
            }, 
 | 
            /** 
 | 
             * 设置日期 
 | 
             * @param {Object} date 
 | 
             */ 
 | 
            setDate(date) { 
 | 
                this.cale.setDate(date) 
 | 
                this.weeks = this.cale.weeks 
 | 
                this.nowDate = this.cale.getInfo(date) 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
    .uni-calendar { 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        flex-direction: column; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__mask { 
 | 
        position: fixed; 
 | 
        bottom: 0; 
 | 
        top: 0; 
 | 
        left: 0; 
 | 
        right: 0; 
 | 
        background-color: rgba(0, 0, 0, 0.4); 
 | 
        transition-property: opacity; 
 | 
        transition-duration: 0.3s; 
 | 
        opacity: 0; 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        z-index: 99; 
 | 
        /* #endif */ 
 | 
    } 
 | 
  
 | 
    .uni-calendar--mask-show { 
 | 
        opacity: 1 
 | 
    } 
 | 
  
 | 
    .uni-calendar--fixed { 
 | 
        position: fixed; 
 | 
        bottom: calc(var(--window-bottom)); 
 | 
        left: 0; 
 | 
        right: 0; 
 | 
        transition-property: transform; 
 | 
        transition-duration: 0.3s; 
 | 
        transform: translateY(460px); 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        z-index: 99; 
 | 
        /* #endif */ 
 | 
    } 
 | 
  
 | 
    .uni-calendar--ani-show { 
 | 
        transform: translateY(0); 
 | 
    } 
 | 
  
 | 
    .uni-calendar__content { 
 | 
        background-color: #fff; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__content-mobile { 
 | 
        border-top-left-radius: 10px; 
 | 
        border-top-right-radius: 10px; 
 | 
        box-shadow: 0px 0px 5px 3px rgba(0, 0, 0, 0.1); 
 | 
    } 
 | 
  
 | 
    .uni-calendar__header { 
 | 
        position: relative; 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        flex-direction: row; 
 | 
        justify-content: center; 
 | 
        align-items: center; 
 | 
        height: 50px; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__header-mobile { 
 | 
        padding: 10px; 
 | 
        padding-bottom: 0; 
 | 
    } 
 | 
  
 | 
    .uni-calendar--fixed-top { 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        flex-direction: row; 
 | 
        justify-content: space-between; 
 | 
        border-top-color: rgba(0, 0, 0, 0.4); 
 | 
        border-top-style: solid; 
 | 
        border-top-width: 1px; 
 | 
    } 
 | 
  
 | 
    .uni-calendar--fixed-width { 
 | 
        width: 50px; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__backtoday { 
 | 
        position: absolute; 
 | 
        right: 0; 
 | 
        top: 25rpx; 
 | 
        padding: 0 5px; 
 | 
        padding-left: 10px; 
 | 
        height: 25px; 
 | 
        line-height: 25px; 
 | 
        font-size: 12px; 
 | 
        border-top-left-radius: 25px; 
 | 
        border-bottom-left-radius: 25px; 
 | 
        color: #fff; 
 | 
        background-color: #f1f1f1; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__header-text { 
 | 
        text-align: center; 
 | 
        width: 100px; 
 | 
        font-size: 15px; 
 | 
        color: #666; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__button-text { 
 | 
        text-align: center; 
 | 
        width: 100px; 
 | 
        font-size: 14px; 
 | 
        color: #007aff; 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        letter-spacing: 3px; 
 | 
        /* #endif */ 
 | 
    } 
 | 
  
 | 
    .uni-calendar__header-btn-box { 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        flex-direction: row; 
 | 
        align-items: center; 
 | 
        justify-content: center; 
 | 
        width: 50px; 
 | 
        height: 50px; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__header-btn { 
 | 
        width: 9px; 
 | 
        height: 9px; 
 | 
        border-left-color: #808080; 
 | 
        border-left-style: solid; 
 | 
        border-left-width: 1px; 
 | 
        border-top-color: #555555; 
 | 
        border-top-style: solid; 
 | 
        border-top-width: 1px; 
 | 
    } 
 | 
  
 | 
    .uni-calendar--left { 
 | 
        transform: rotate(-45deg); 
 | 
    } 
 | 
  
 | 
    .uni-calendar--right { 
 | 
        transform: rotate(135deg); 
 | 
    } 
 | 
  
 | 
  
 | 
    .uni-calendar__weeks { 
 | 
        position: relative; 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        flex-direction: row; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__weeks-item { 
 | 
        flex: 1; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__weeks-day { 
 | 
        flex: 1; 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        flex-direction: column; 
 | 
        justify-content: center; 
 | 
        align-items: center; 
 | 
        height: 40px; 
 | 
        border-bottom-color: #F5F5F5; 
 | 
        border-bottom-style: solid; 
 | 
        border-bottom-width: 1px; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__weeks-day-text { 
 | 
        font-size: 12px; 
 | 
        color: #B2B2B2; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__box { 
 | 
        position: relative; 
 | 
        // padding: 0 10px; 
 | 
        padding-bottom: 7px; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__box-bg { 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        justify-content: center; 
 | 
        align-items: center; 
 | 
        position: absolute; 
 | 
        top: 0; 
 | 
        left: 0; 
 | 
        right: 0; 
 | 
        bottom: 0; 
 | 
    } 
 | 
  
 | 
    .uni-calendar__box-bg-text { 
 | 
        font-size: 200px; 
 | 
        font-weight: bold; 
 | 
        color: #999; 
 | 
        opacity: 0.1; 
 | 
        text-align: center; 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        line-height: 1; 
 | 
        /* #endif */ 
 | 
    } 
 | 
  
 | 
    .uni-date-changed { 
 | 
        padding: 0 10px; 
 | 
        // line-height: 50px; 
 | 
        text-align: center; 
 | 
        color: #333; 
 | 
        border-top-color: #DCDCDC; 
 | 
        ; 
 | 
        border-top-style: solid; 
 | 
        border-top-width: 1px; 
 | 
        flex: 1; 
 | 
    } 
 | 
  
 | 
    .uni-date-btn--ok { 
 | 
        padding: 20px 15px; 
 | 
    } 
 | 
  
 | 
    .uni-date-changed--time-start { 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        align-items: center; 
 | 
    } 
 | 
  
 | 
    .uni-date-changed--time-end { 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        align-items: center; 
 | 
    } 
 | 
  
 | 
    .uni-date-changed--time-date { 
 | 
        color: #999; 
 | 
        line-height: 50px; 
 | 
        margin-right: 5px; 
 | 
        // opacity: 0.6; 
 | 
    } 
 | 
  
 | 
    .time-picker-style { 
 | 
        // width: 62px; 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        justify-content: center; 
 | 
        align-items: center 
 | 
    } 
 | 
  
 | 
    .mr-10 { 
 | 
        margin-right: 10px; 
 | 
    } 
 | 
  
 | 
    .dialog-close { 
 | 
        position: absolute; 
 | 
        top: 0; 
 | 
        right: 0; 
 | 
        bottom: 0; 
 | 
        /* #ifndef APP-NVUE */ 
 | 
        display: flex; 
 | 
        /* #endif */ 
 | 
        flex-direction: row; 
 | 
        align-items: center; 
 | 
        padding: 0 25px; 
 | 
        margin-top: 10px; 
 | 
    } 
 | 
  
 | 
    .dialog-close-plus { 
 | 
        width: 16px; 
 | 
        height: 2px; 
 | 
        background-color: #737987; 
 | 
        border-radius: 2px; 
 | 
        transform: rotate(45deg); 
 | 
    } 
 | 
  
 | 
    .dialog-close-rotate { 
 | 
        position: absolute; 
 | 
        transform: rotate(-45deg); 
 | 
    } 
 | 
  
 | 
    .uni-datetime-picker--btn { 
 | 
        border-radius: 100px; 
 | 
        height: 40px; 
 | 
        line-height: 40px; 
 | 
        background-color: #007aff; 
 | 
        color: #fff; 
 | 
        font-size: 16px; 
 | 
        letter-spacing: 5px; 
 | 
    } 
 | 
  
 | 
    /* #ifndef APP-NVUE */ 
 | 
    .uni-datetime-picker--btn:active { 
 | 
        opacity: 0.7; 
 | 
    } 
 | 
    /* #endif */ 
 | 
</style> 
 |