| | |
| | | <template>
|
| | | <view>
|
| | | <view class='calendar-Time-header under_line'>
|
| | | <view class="header-left">
|
| | | <!-- <image :src="lastDisabled ? disable : nodisable" mode="widthFix" @tap="subMonth"></image> -->
|
| | | <image :src="nodisable" mode="widthFix" @tap="subMonth"></image>
|
| | | <text>{{title_time}}</text>
|
| | | <image src="@/static/meeting/icon/ar_right@2x.png" mode="widthFix" @tap="addMonth"></image>
|
| | | </view>
|
| | | <view class="header-right" @tap="backToToday">回到今天</view>
|
| | | <!-- <text class='calendar-lastMonth' @tap="subMonth" v-bind:class="{'calendar-btn-disabled' : lastDisabled }">{{lastText}}</text>
|
| | | <view>
|
| | | <view class="calendar-Time-header under_line">
|
| | | <view class="header-left">
|
| | | <!-- <image :src="lastDisabled ? disable : nodisable" mode="widthFix" @tap="subMonth"></image> -->
|
| | | <image :src="nodisable" mode="widthFix" @tap="subMonth"></image>
|
| | | <text>{{ title_time }}</text>
|
| | | <image
|
| | | src="@/static/meeting/icon/ar_right@2x.png"
|
| | | mode="widthFix"
|
| | | @tap="addMonth"
|
| | | ></image>
|
| | | </view>
|
| | | <view class="header-right" @tap="backToToday">回到今天</view>
|
| | | <!-- <text class='calendar-lastMonth' @tap="subMonth" v-bind:class="{'calendar-btn-disabled' : lastDisabled }">{{lastText}}</text>
|
| | | <text class='calendar-TimeH'>{{title_time}}</text>
|
| | | <text class='calendar-nextMonth' @tap="addMonth" v-bind:class="{'calendar-btn-disabled' : nextDisabled }">{{nextText}}</text>
|
| | | <text class='calendar-backToToday' @tap="backToToday">回到今天</text> -->
|
| | | </view>
|
| | | <view class='ClearBoth'></view>
|
| | | <view class="calendar-content">
|
| | | <view class="calendar-row calendar-header">
|
| | | <view class="calendar-col aligncanter">周日</view>
|
| | | <view class="calendar-col aligncanter">周一</view>
|
| | | <view class="calendar-col aligncanter">周二</view>
|
| | | <view class="calendar-col aligncanter">周三</view>
|
| | | <view class="calendar-col aligncanter">周四</view>
|
| | | <view class="calendar-col aligncanter">周五</view>
|
| | | <view class="calendar-col aligncanter">周六</view>
|
| | | </view>
|
| | | <view class="calendar-row calendar-day" v-bind:style="{'transform':transformObj, 'transition-duration':transformTimeObj}" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend">
|
| | | <view class="calendar-col aligncanter calendar-col-lastMonth" v-for='item in beforeDateList' v-bind:key='item.key'
|
| | | @tap="subMonth" v-bind:class="{'calendar-out-of-Date' : item.outOfDate }">{{item.dateIndex}}
|
| | | <text class='calendar-text'>{{item.markText}}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="ClearBoth"></view>
|
| | | <view class="calendar-content">
|
| | | <view class="calendar-row calendar-header">
|
| | | <view class="calendar-col aligncanter">周日</view>
|
| | | <view class="calendar-col aligncanter">周一</view>
|
| | | <view class="calendar-col aligncanter">周二</view>
|
| | | <view class="calendar-col aligncanter">周三</view>
|
| | | <view class="calendar-col aligncanter">周四</view>
|
| | | <view class="calendar-col aligncanter">周五</view>
|
| | | <view class="calendar-col aligncanter">周六</view>
|
| | | </view>
|
| | | <view
|
| | | class="calendar-row calendar-day"
|
| | | v-bind:style="{
|
| | | transform: transformObj,
|
| | | 'transition-duration': transformTimeObj,
|
| | | }"
|
| | | @touchstart="touchstart"
|
| | | @touchmove="touchmove"
|
| | | @touchend="touchend"
|
| | | >
|
| | | <view
|
| | | class="calendar-col aligncanter calendar-col-lastMonth"
|
| | | v-for="item in beforeDateList"
|
| | | v-bind:key="item.key"
|
| | | @tap="subMonth"
|
| | | v-bind:class="{ 'calendar-out-of-Date': item.outOfDate }"
|
| | | >{{ item.dateIndex }}
|
| | | <text class="calendar-text">{{ item.markText }}</text>
|
| | | </view>
|
| | |
|
| | | <view class="calendar-col aligncanter currentDays" v-bind:class="{'calendar-active' : item.dateIndex == currentSelectTime
|
| | | , 'calendar-today' : item.isToday |
| | | , 'calendar-range' : item.isRanges
|
| | | , 'calendar-out-of-Date' : item.outOfDate }"
|
| | | v-for='item in dateList' v-bind:key='item.key' @tap="selectedDateFun(item.dateIndex)">
|
| | | <view class='dayValue'>
|
| | | <text class='calendar-date calendar-day-6-7' v-if="item.isDaySunOrSat">{{item.dateIndex}}</text>
|
| | | <text v-else class='calendar-date'>{{item.dateIndex}}</text>
|
| | | <text class='calendar-point' v-if="item.pointText" v-bind:style="{'color':item.pointTextColor?item.pointTextColor:maskColor}">{{item.pointText}}</text>
|
| | | <text class='calendar-text' v-bind:style="{'color':item.markTextColor?item.markTextColor:maskColor}">{{item.markText}}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view
|
| | | class="calendar-col aligncanter currentDays"
|
| | | v-bind:class="{
|
| | | 'calendar-active': item.dateIndex == currentSelectTime,
|
| | | 'calendar-today': item.isToday,
|
| | | 'calendar-range': item.isRanges,
|
| | | 'calendar-out-of-Date': item.outOfDate,
|
| | | }"
|
| | | v-for="item in dateList"
|
| | | v-bind:key="item.key"
|
| | | @tap="selectedDateFun(item.dateIndex)"
|
| | | >
|
| | | <view class="dayValue">
|
| | | <text
|
| | | class="calendar-date calendar-day-6-7"
|
| | | v-if="item.isDaySunOrSat"
|
| | | >{{ item.dateIndex }}</text
|
| | | >
|
| | | <text v-else class="calendar-date">{{ item.dateIndex }}</text>
|
| | | <text
|
| | | class="calendar-point"
|
| | | v-if="item.pointText"
|
| | | v-bind:style="{
|
| | | color: item.pointTextColor ? item.pointTextColor : maskColor,
|
| | | }"
|
| | | >{{ item.pointText }}</text
|
| | | >
|
| | | <text
|
| | | class="calendar-text"
|
| | | v-bind:style="{
|
| | | color: item.markTextColor ? item.markTextColor : maskColor,
|
| | | }"
|
| | | >{{ item.markText }}</text
|
| | | >
|
| | | </view>
|
| | | </view>
|
| | |
|
| | | <view class="calendar-col aligncanter calendar-col-nextMonth" v-for='item in afterDateList' v-bind:key='item.key'
|
| | | @tap="addMonth" v-bind:class="{'calendar-out-of-Date' : item.outOfDate }">{{item.dateIndex}}
|
| | | <text class='calendar-text'>{{item.markText}}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="ClearBoth"></view>
|
| | | </view>
|
| | | </view>
|
| | | <view
|
| | | class="calendar-col aligncanter calendar-col-nextMonth"
|
| | | v-for="item in afterDateList"
|
| | | v-bind:key="item.key"
|
| | | @tap="addMonth"
|
| | | v-bind:class="{ 'calendar-out-of-Date': item.outOfDate }"
|
| | | >{{ item.dateIndex }}
|
| | | <text class="calendar-text">{{ item.markText }}</text>
|
| | | </view>
|
| | | </view>
|
| | | <view class="ClearBoth"></view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | import lunarYearTool from './sloarToLunar.js'
|
| | | import { getDay } from '@/utils/utils.js'
|
| | | export default {
|
| | | name: 'Li-Calendar',
|
| | | props: {
|
| | | /**
|
| | | * @description 当前时间 yyyy-MM-dd
|
| | | */
|
| | | currentTime: {
|
| | | type: String,
|
| | | default: function() {
|
| | | let timeObj = new Date();
|
| | | return timeObj.getFullYear() + "-" + (timeObj.getMonth() + 1) + "-" + timeObj.getDate();
|
| | | }
|
| | | },
|
| | | /**
|
| | | * @description 标记点列表
|
| | | * time 标记时间 yyyy-MM-dd
|
| | | * text 标记内容 |
| | | * markPoint 是否显示标记点 默认false
|
| | | * markTextColor 标记内容颜色
|
| | | * pointText 左上角标记点内容
|
| | | * pointTextColor 标记点颜色
|
| | | */
|
| | | mark: {
|
| | | type: Array,
|
| | | default: function() {
|
| | | return undefined;
|
| | | }
|
| | | },
|
| | | /**
|
| | | * @description 上月文字
|
| | | */
|
| | | lastText: {
|
| | | type: String,
|
| | | default: '〈'
|
| | | },
|
| | | /**
|
| | | * @description 下月文字
|
| | | */
|
| | | nextText: {
|
| | | type: String,
|
| | | default: '〉'
|
| | | },
|
| | | /**
|
| | | * @description 全局标记点颜色,包括点和文字
|
| | | */
|
| | | maskColor: {
|
| | | type: String,
|
| | | default: '#01AAED'
|
| | | },
|
| | | /**
|
| | | * @description 是否显示农历,mask优先级高
|
| | | */
|
| | | showLunar: {
|
| | | type: Boolean,
|
| | | default: true
|
| | | },
|
| | | /**
|
| | | * @description 设置标记范围
|
| | | */
|
| | | range: {
|
| | | type: Object,
|
| | | default: function() {
|
| | | return {
|
| | | rangeStart: undefined, //设置标记范围开始,yyyy-MM-dd
|
| | | rangeEnd: undefined //设置标记范围结束,yyyy-MM-dd
|
| | | }
|
| | | }
|
| | | },
|
| | | /**
|
| | | * @description 是否开启范围选择模式
|
| | | */
|
| | | rangeMode: {
|
| | | type: Boolean,
|
| | | default: false
|
| | | },
|
| | | /**
|
| | | * @description 日历起始时间 yyyy-MM-dd
|
| | | */
|
| | | dateStart: {
|
| | | type: String,
|
| | | default: '1970-01-01'
|
| | | },
|
| | | /**
|
| | | * @description 日历结束时间 yyyy-MM-dd
|
| | | */
|
| | | dateEnd: {
|
| | | type: String,
|
| | | default: '2100-12-31'
|
| | | },
|
| | | /**
|
| | | * @description 是否可以滚动
|
| | | */
|
| | | canDrag:{
|
| | | type: Boolean,
|
| | | default: true
|
| | | },
|
| | | },
|
| | | created() {
|
| | | this.render();
|
| | | },
|
| | | data() {
|
| | | return {
|
| | | nodisable: require('@/static/meeting/icon/ar_left@2x.png'),
|
| | | disable: require('@/static/meeting/icon/ar_left_disable.png'),
|
| | | |
| | | nextDisabled: false,
|
| | | lastDisabled: true,
|
| | | currentSelectTime: undefined, //点击时保存的dateIndex
|
| | | title_time: '', //顶头文本
|
| | | year: undefined, //当前年
|
| | | month: undefined, //当前月
|
| | | beforeDateList: [], //上个月的日期列表
|
| | | dateList: [], //本月的日期列表
|
| | | afterDateList: [], //下个月的日期列表
|
| | | firstRangeSelected: false, // 范围开始时间是否已经选择
|
| | | rangeStart_: undefined, //标记范围开始,yyyyMM-dd
|
| | | rangeEnd_: undefined, //标记范围结束,yyyyMM-dd
|
| | | transform_x:0,
|
| | | transform_time:0,
|
| | | };
|
| | | },
|
| | | methods: {
|
| | | render(setTimeStr) { //初始化
|
| | | let that = this;
|
| | | let currentTimeStr = setTimeStr ? setTimeStr : that.currentTime;
|
| | | let timeObj = this.toDateByStr(currentTimeStr); //当前选定的时间
|
| | | //计算头部显示的年月
|
| | | let _tempTileMonth = (timeObj.getMonth() + 1);
|
| | | if (_tempTileMonth < 10)
|
| | | _tempTileMonth = '0' + _tempTileMonth;
|
| | | this.title_time = timeObj.getFullYear() + "年" + _tempTileMonth + "月";
|
| | | import lunarYearTool from './sloarToLunar.js'
|
| | | import { getDay } from '@/utils/utils.js'
|
| | | export default {
|
| | | name: 'Li-Calendar',
|
| | | props: {
|
| | | /**
|
| | | * @description 当前时间 yyyy-MM-dd
|
| | | */
|
| | | currentTime: {
|
| | | type: String,
|
| | | default: function () {
|
| | | let timeObj = new Date()
|
| | | return timeObj.getFullYear() + "-" + (timeObj.getMonth() + 1) + "-" + timeObj.getDate()
|
| | | }
|
| | | },
|
| | | /**
|
| | | * @description 标记点列表
|
| | | * time 标记时间 yyyy-MM-dd
|
| | | * text 标记内容 |
| | | * markPoint 是否显示标记点 默认false
|
| | | * markTextColor 标记内容颜色
|
| | | * pointText 左上角标记点内容
|
| | | * pointTextColor 标记点颜色
|
| | | */
|
| | | mark: {
|
| | | type: Array,
|
| | | default: function () {
|
| | | return undefined
|
| | | }
|
| | | },
|
| | | /**
|
| | | * @description 上月文字
|
| | | */
|
| | | lastText: {
|
| | | type: String,
|
| | | default: '〈'
|
| | | },
|
| | | /**
|
| | | * @description 下月文字
|
| | | */
|
| | | nextText: {
|
| | | type: String,
|
| | | default: '〉'
|
| | | },
|
| | | /**
|
| | | * @description 全局标记点颜色,包括点和文字
|
| | | */
|
| | | maskColor: {
|
| | | type: String,
|
| | | default: '#01AAED'
|
| | | },
|
| | | /**
|
| | | * @description 是否显示农历,mask优先级高
|
| | | */
|
| | | showLunar: {
|
| | | type: Boolean,
|
| | | default: true
|
| | | },
|
| | | /**
|
| | | * @description 设置标记范围
|
| | | */
|
| | | range: {
|
| | | type: Object,
|
| | | default: function () {
|
| | | return {
|
| | | rangeStart: undefined, //设置标记范围开始,yyyy-MM-dd
|
| | | rangeEnd: undefined //设置标记范围结束,yyyy-MM-dd
|
| | | }
|
| | | }
|
| | | },
|
| | | /**
|
| | | * @description 是否开启范围选择模式
|
| | | */
|
| | | rangeMode: {
|
| | | type: Boolean,
|
| | | default: false
|
| | | },
|
| | | /**
|
| | | * @description 日历起始时间 yyyy-MM-dd
|
| | | */
|
| | | dateStart: {
|
| | | type: String,
|
| | | default: '1970-01-01'
|
| | | },
|
| | | /**
|
| | | * @description 日历结束时间 yyyy-MM-dd
|
| | | */
|
| | | dateEnd: {
|
| | | type: String,
|
| | | default: '2100-12-31'
|
| | | },
|
| | | /**
|
| | | * @description 是否可以滚动
|
| | | */
|
| | | canDrag: {
|
| | | type: Boolean,
|
| | | default: true
|
| | | },
|
| | | },
|
| | | created() {
|
| | | this.render()
|
| | | },
|
| | | data() {
|
| | | return {
|
| | | nodisable: require('@/static/meeting/icon/ar_left@2x.png'),
|
| | | disable: require('@/static/meeting/icon/ar_left_disable.png'),
|
| | |
|
| | | //获取当前时间月份1号
|
| | | let firstDayStr = timeObj.getFullYear() + "/" + (timeObj.getMonth() + 1) + "/01";
|
| | | let date = that.toDateByStr(firstDayStr);
|
| | | that.year = date.getFullYear();
|
| | | that.month = date.getMonth() + 1;
|
| | | let firstDayWeek = date.getDay(); //第一天是星期几
|
| | | let grid_sum = 0; //总格子数 ,用于后面填满格子
|
| | | //获取上一个月的天数
|
| | | let TempMonth;
|
| | | let TempYear;
|
| | | if (that.month == 1) { //跨年
|
| | | TempMonth = 12;
|
| | | TempYear = that.year - 1;
|
| | | } else {
|
| | | TempYear = that.year;
|
| | | TempMonth = that.month - 1;
|
| | | }
|
| | | let TempLastMonthStr = TempYear + "/" + TempMonth + "/01";
|
| | | let lastMonthTotalDay = that.getTotalDay(TempLastMonthStr);
|
| | | let lastMonthStartDay = lastMonthTotalDay - firstDayWeek;
|
| | | nextDisabled: false,
|
| | | lastDisabled: true,
|
| | | currentSelectTime: undefined, //点击时保存的dateIndex
|
| | | title_time: '', //顶头文本
|
| | | year: undefined, //当前年
|
| | | month: undefined, //当前月
|
| | | beforeDateList: [], //上个月的日期列表
|
| | | dateList: [], //本月的日期列表
|
| | | afterDateList: [], //下个月的日期列表
|
| | | firstRangeSelected: false, // 范围开始时间是否已经选择
|
| | | rangeStart_: undefined, //标记范围开始,yyyyMM-dd
|
| | | rangeEnd_: undefined, //标记范围结束,yyyyMM-dd
|
| | | transform_x: 0,
|
| | | transform_time: 0,
|
| | | }
|
| | | },
|
| | | methods: {
|
| | | render(setTimeStr) { //初始化
|
| | | let that = this
|
| | | let currentTimeStr = setTimeStr ? setTimeStr : that.currentTime
|
| | | let timeObj = this.toDateByStr(currentTimeStr) //当前选定的时间
|
| | | //计算头部显示的年月
|
| | | let _tempTileMonth = (timeObj.getMonth() + 1)
|
| | | if (_tempTileMonth < 10)
|
| | | _tempTileMonth = '0' + _tempTileMonth
|
| | | this.title_time = timeObj.getFullYear() + "年" + _tempTileMonth + "月"
|
| | |
|
| | | let _dateStart = that.toDateByStr1(that.dateStart);
|
| | | let _dateEnd = that.toDateByStr1(that.dateEnd);
|
| | | // 创建前面的日期
|
| | | that.beforeDateList = [];
|
| | | for (let i = 0; i < firstDayWeek; i++) {
|
| | | grid_sum++;
|
| | | lastMonthStartDay++;
|
| | | let tempObj = {
|
| | | dateIndex: lastMonthStartDay,
|
| | | key: 'before_' + i
|
| | | };
|
| | | //获取当前时间月份1号
|
| | | let firstDayStr = timeObj.getFullYear() + "/" + (timeObj.getMonth() + 1) + "/01"
|
| | | let date = that.toDateByStr(firstDayStr)
|
| | | that.year = date.getFullYear()
|
| | | that.month = date.getMonth() + 1
|
| | | let firstDayWeek = date.getDay() //第一天是星期几
|
| | | let grid_sum = 0 //总格子数 ,用于后面填满格子
|
| | | //获取上一个月的天数
|
| | | let TempMonth
|
| | | let TempYear
|
| | | if (that.month == 1) { //跨年
|
| | | TempMonth = 12
|
| | | TempYear = that.year - 1
|
| | | } else {
|
| | | TempYear = that.year
|
| | | TempMonth = that.month - 1
|
| | | }
|
| | | let TempLastMonthStr = TempYear + "/" + TempMonth + "/01"
|
| | | let lastMonthTotalDay = that.getTotalDay(TempLastMonthStr)
|
| | | let lastMonthStartDay = lastMonthTotalDay - firstDayWeek
|
| | |
|
| | | //判断是否超出日期范围
|
| | | let _tempBeforeDate = new Date(TempYear + "/" + TempMonth + "/" + lastMonthStartDay);
|
| | | if (_dateStart > _tempBeforeDate || _tempBeforeDate > _dateEnd) {
|
| | | tempObj.outOfDate = true;
|
| | | }
|
| | | let _dateStart = that.toDateByStr1(that.dateStart)
|
| | | let _dateEnd = that.toDateByStr1(that.dateEnd)
|
| | | // 创建前面的日期
|
| | | that.beforeDateList = []
|
| | | for (let i = 0; i < firstDayWeek; i++) {
|
| | | grid_sum++
|
| | | lastMonthStartDay++
|
| | | let tempObj = {
|
| | | dateIndex: lastMonthStartDay,
|
| | | key: 'before_' + i
|
| | | }
|
| | |
|
| | | //获取农历
|
| | | if (that.showLunar) {
|
| | | let LunarDate = that.sloarToLunar(TempYear, TempMonth, lastMonthStartDay);
|
| | | let tempLunarDay = LunarDate.lunarDay == '初一' ? LunarDate.lunarMonth + '月' : LunarDate.lunarDay;
|
| | | tempObj.markText = tempLunarDay;
|
| | | }
|
| | | //判断是否超出日期范围
|
| | | let _tempBeforeDate = new Date(TempYear + "/" + TempMonth + "/" + lastMonthStartDay)
|
| | | if (_dateStart > _tempBeforeDate || _tempBeforeDate > _dateEnd) {
|
| | | tempObj.outOfDate = true
|
| | | }
|
| | |
|
| | | that.beforeDateList.push(tempObj);
|
| | | }
|
| | | //获取农历
|
| | | if (that.showLunar) {
|
| | | let LunarDate = that.sloarToLunar(TempYear, TempMonth, lastMonthStartDay)
|
| | | let tempLunarDay = LunarDate.lunarDay == '初一' ? LunarDate.lunarMonth + '月' : LunarDate.lunarDay
|
| | | tempObj.markText = tempLunarDay
|
| | | }
|
| | |
|
| | | //获取一个月的天数
|
| | | let totalDay = that.getTotalDay(currentTimeStr);
|
| | | |
| | | //生成本月日历
|
| | | let today = new Date();
|
| | | let today_year = today.getFullYear();
|
| | | let today_month = today.getMonth() + 1;
|
| | | let today_day = today.getDate();
|
| | | that.dateList = [];
|
| | | for (let i = 1; i <= totalDay; i++) { //循环日
|
| | | grid_sum++;
|
| | | that.beforeDateList.push(tempObj)
|
| | | }
|
| | |
|
| | | let tempObj = {
|
| | | dateIndex: i,
|
| | | key: 'date_' + i,
|
| | | isRanges: false,
|
| | | isToday: false
|
| | | };
|
| | | //当前日期变量
|
| | | let tempDay = that.toDateByStr(that.year + "/" + that.month + "/" + i);
|
| | | //获取一个月的天数
|
| | | let totalDay = that.getTotalDay(currentTimeStr)
|
| | |
|
| | | //判断是否为当天
|
| | | if (today_year == that.year && today_month == that.month && today_day == i)
|
| | | tempObj.isToday = true;
|
| | | //生成本月日历
|
| | | let today = new Date()
|
| | | let today_year = today.getFullYear()
|
| | | let today_month = today.getMonth() + 1
|
| | | let today_day = today.getDate()
|
| | | that.dateList = []
|
| | | for (let i = 1; i <= totalDay; i++) { //循环日
|
| | | grid_sum++
|
| | |
|
| | | //周六和周日,特殊处理
|
| | | let tempCurrWeek = tempDay.getDay();
|
| | | if (tempCurrWeek == 0 || tempCurrWeek == 6)
|
| | | tempObj.isDaySunOrSat = true;
|
| | | let tempObj = {
|
| | | dateIndex: i,
|
| | | key: 'date_' + i,
|
| | | isRanges: false,
|
| | | isToday: false
|
| | | }
|
| | | //当前日期变量
|
| | | let tempDay = that.toDateByStr(that.year + "/" + that.month + "/" + i)
|
| | |
|
| | | //判断是否超出日期范围
|
| | | if (_dateStart > tempDay || tempDay > _dateEnd) {
|
| | | tempObj.outOfDate = true;
|
| | | }
|
| | | //判断是否为当天
|
| | | if (today_year == that.year && today_month == that.month && today_day == i)
|
| | | tempObj.isToday = true
|
| | |
|
| | | //获取农历
|
| | | if (that.showLunar) {
|
| | | let LunarDate = that.sloarToLunar(that.year, that.month, i);
|
| | | that.lunarMonth = LunarDate.lunarMonth;
|
| | | that.lunarYear = LunarDate.lunarYear;
|
| | | let tempLunarDay = LunarDate.lunarDay == '初一' ? LunarDate.lunarMonth + '月' : LunarDate.lunarDay;
|
| | | tempObj.lunarMonth = LunarDate.lunarMonth;
|
| | | tempObj.lunarYear = LunarDate.lunarYear;
|
| | | tempObj.lunarDay = LunarDate.lunarDay;
|
| | | tempObj.markText = tempLunarDay;
|
| | | tempObj.markTextColor = '#454545';
|
| | | }
|
| | | //周六和周日,特殊处理
|
| | | let tempCurrWeek = tempDay.getDay()
|
| | | if (tempCurrWeek == 0 || tempCurrWeek == 6)
|
| | | tempObj.isDaySunOrSat = true
|
| | |
|
| | | //设置了标记点
|
| | | if (that.mark) {
|
| | | for (let z = 0; z < that.mark.length; z++) { //判断是否为标记点
|
| | | let tempDayMark = that.toDateByStr1(that.mark[z].time.trim())
|
| | | if (tempDay.getTime() == tempDayMark.getTime()) {
|
| | | let tempTextStr = that.mark[z].text
|
| | | if (that.mark[z].markPoint != false) { // 是否显示点
|
| | | tempObj.pointText = that.mark[z].pointText ? that.mark[z].pointText : '●';
|
| | | tempObj.pointTextColor = that.mark[z].pointTextColor ? that.mark[z].pointTextColor : undefined;
|
| | | }
|
| | | if (tempTextStr != undefined && tempTextStr != "") { // 是否显示文字
|
| | | tempObj.markText = tempTextStr;
|
| | | tempObj.markTextColor = that.mark[z].markTextColor ? that.mark[z].markTextColor : undefined;
|
| | | }
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | | //判断是否超出日期范围
|
| | | if (_dateStart > tempDay || tempDay > _dateEnd) {
|
| | | tempObj.outOfDate = true
|
| | | }
|
| | |
|
| | | that.dateList.push(tempObj);
|
| | | }
|
| | | //获取农历
|
| | | if (that.showLunar) {
|
| | | let LunarDate = that.sloarToLunar(that.year, that.month, i)
|
| | | that.lunarMonth = LunarDate.lunarMonth
|
| | | that.lunarYear = LunarDate.lunarYear
|
| | | let tempLunarDay = LunarDate.lunarDay == '初一' ? LunarDate.lunarMonth + '月' : LunarDate.lunarDay
|
| | | tempObj.lunarMonth = LunarDate.lunarMonth
|
| | | tempObj.lunarYear = LunarDate.lunarYear
|
| | | tempObj.lunarDay = LunarDate.lunarDay
|
| | | tempObj.markText = tempLunarDay
|
| | | tempObj.markTextColor = '#454545'
|
| | | }
|
| | |
|
| | | that.setRange();
|
| | | //设置了标记点
|
| | | if (that.mark) {
|
| | | for (let z = 0; z < that.mark.length; z++) { //判断是否为标记点
|
| | | let tempDayMark = that.toDateByStr1(that.mark[z].time.trim())
|
| | | if (tempDay.getTime() == tempDayMark.getTime()) {
|
| | | let tempTextStr = that.mark[z].text
|
| | | if (that.mark[z].markPoint != false) { // 是否显示点
|
| | | tempObj.pointText = that.mark[z].pointText ? that.mark[z].pointText : '●'
|
| | | tempObj.pointTextColor = that.mark[z].pointTextColor ? that.mark[z].pointTextColor : undefined
|
| | | }
|
| | | if (tempTextStr != undefined && tempTextStr != "") { // 是否显示文字
|
| | | tempObj.markText = tempTextStr
|
| | | tempObj.markTextColor = that.mark[z].markTextColor ? that.mark[z].markTextColor : undefined
|
| | | }
|
| | | break
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | // 创建后面的空白,补够五行
|
| | | that.afterDateList = [];
|
| | | if (grid_sum < 42) { // 创建后面的空白,补够五行
|
| | | let j = 0;
|
| | | that.dateList.push(tempObj)
|
| | | }
|
| | |
|
| | | //获取下一月
|
| | | let TempMonthNext;
|
| | | let TempYearNext;
|
| | | if (that.month == 12) { //跨年
|
| | | TempMonthNext = 1;
|
| | | TempYearNext = that.year + 1;
|
| | | } else {
|
| | | TempYearNext = that.year;
|
| | | TempMonthNext = that.month + 1;
|
| | | }
|
| | | that.setRange()
|
| | |
|
| | | for (let i = grid_sum; i < 42; i++) {
|
| | | j++;
|
| | | // 创建后面的空白,补够五行
|
| | | that.afterDateList = []
|
| | | if (grid_sum < 42) { // 创建后面的空白,补够五行
|
| | | let j = 0
|
| | |
|
| | | let tempObj = {
|
| | | dateIndex: j,
|
| | | key: 'after_' + j
|
| | | };
|
| | | //获取农历
|
| | | if (that.showLunar) {
|
| | | let LunarDate = that.sloarToLunar(TempYearNext, TempMonthNext, j);
|
| | | let tempLunarDay = LunarDate.lunarDay == '初一' ? LunarDate.lunarMonth + '月' : LunarDate.lunarDay;
|
| | | tempObj.markText = tempLunarDay;
|
| | | }
|
| | | //获取下一月
|
| | | let TempMonthNext
|
| | | let TempYearNext
|
| | | if (that.month == 12) { //跨年
|
| | | TempMonthNext = 1
|
| | | TempYearNext = that.year + 1
|
| | | } else {
|
| | | TempYearNext = that.year
|
| | | TempMonthNext = that.month + 1
|
| | | }
|
| | |
|
| | | //判断是否超出日期范围
|
| | | let _tempAfterDate = new Date(TempYearNext + "/" + TempMonthNext + "/" + j);
|
| | | if (_dateStart > _tempAfterDate || _tempAfterDate > _dateEnd) {
|
| | | tempObj.outOfDate = true;
|
| | | }
|
| | | for (let i = grid_sum; i < 42; i++) {
|
| | | j++
|
| | |
|
| | | that.afterDateList.push(tempObj);
|
| | | }
|
| | | }
|
| | | },
|
| | | sloarToLunar(year,month,day){
|
| | | // console.log('----')
|
| | | // console.log(year + "--" +month+ "--" + day)
|
| | | let result = lunarYearTool.sloarToLunar(year,month,day);
|
| | | //console.log(result)
|
| | | return result;
|
| | | },
|
| | | getTotalDay(time) { //获取月 日期总数
|
| | | time = time.replace(/-/g, "/");
|
| | | let selectedDate = new Date(time);
|
| | | if (selectedDate == "Invalid Date") {
|
| | | selectedDate = new Date(time + "/01");
|
| | | }
|
| | | |
| | | let dayMany = new Date(selectedDate.getFullYear(),(selectedDate.getMonth() + 1), 0).getDate()
|
| | | return dayMany;
|
| | | },
|
| | | toDateByStr(timeStr) { //字符串转换时间,转换失败或者不传字符串则返回当前
|
| | | let timeObj;
|
| | | if (timeStr) {
|
| | | timeObj = new Date(timeStr.replace(/-/g, "/"));
|
| | | }
|
| | | if (!timeStr || timeObj == "Invalid Date")
|
| | | timeObj = new Date();
|
| | | return timeObj;
|
| | | },
|
| | | toDateByStr1(timeStr) { //字符串转换时间,转换失败或者不传字符串则null
|
| | | try {
|
| | | let timeObj;
|
| | | if (timeStr) {
|
| | | timeObj = new Date(timeStr.replace(/-/g, "/"));
|
| | | }
|
| | | if (!timeStr || timeObj == "Invalid Date")
|
| | | return null;
|
| | | return timeObj;
|
| | | } catch (e) {
|
| | | return null;
|
| | | }
|
| | | },
|
| | | getTimeStrFormat(timeStr) { //获取格式化的时间 yyyy-MM-dd
|
| | | let timeObj;
|
| | | if (timeStr) {
|
| | | timeObj = new Date(timeStr.replace(/-/g, "/"));
|
| | | }
|
| | | if (!timeStr || timeObj == "Invalid Date")
|
| | | timeObj = new Date();
|
| | | return timeObj.getFullYear() + "-" + (timeObj.getMonth() + 1) + "-" + timeObj.getDate();
|
| | | },
|
| | | selectedDateFun(index) { //点击日期
|
| | | let that = this;
|
| | | let selectObj = that.dateList[index - 1];
|
| | | selectObj.year = that.year;
|
| | | selectObj.month = that.month;
|
| | | selectObj.day = index;
|
| | | selectObj.time = that.year + "-" + that.month + "-" + index;
|
| | | that.$emit('dayChange', selectObj);
|
| | | let tempObj = {
|
| | | dateIndex: j,
|
| | | key: 'after_' + j
|
| | | }
|
| | | //获取农历
|
| | | if (that.showLunar) {
|
| | | let LunarDate = that.sloarToLunar(TempYearNext, TempMonthNext, j)
|
| | | let tempLunarDay = LunarDate.lunarDay == '初一' ? LunarDate.lunarMonth + '月' : LunarDate.lunarDay
|
| | | tempObj.markText = tempLunarDay
|
| | | }
|
| | |
|
| | | //判断是否超出日期范围
|
| | | if (that.checkOutOfDate(selectObj.time)) {
|
| | | return;
|
| | | }
|
| | | //判断是否超出日期范围
|
| | | let _tempAfterDate = new Date(TempYearNext + "/" + TempMonthNext + "/" + j)
|
| | | if (_dateStart > _tempAfterDate || _tempAfterDate > _dateEnd) {
|
| | | tempObj.outOfDate = true
|
| | | }
|
| | |
|
| | | that.currentSelectTime = index;
|
| | | |
| | | console.log(index)
|
| | | that.afterDateList.push(tempObj)
|
| | | }
|
| | | }
|
| | | },
|
| | | sloarToLunar(year, month, day) {
|
| | | // console.log('----')
|
| | | // console.log(year + "--" +month+ "--" + day)
|
| | | let result = lunarYearTool.sloarToLunar(year, month, day)
|
| | | //console.log(result)
|
| | | return result
|
| | | },
|
| | | getTotalDay(time) { //获取月 日期总数
|
| | | time = time.replace(/-/g, "/")
|
| | | let selectedDate = new Date(time)
|
| | | if (selectedDate == "Invalid Date") {
|
| | | selectedDate = new Date(time + "/01")
|
| | | }
|
| | |
|
| | | //开启了范围选择模式
|
| | | if (that.rangeMode) {
|
| | | if (!that.firstRangeSelected) { //选择开始时间
|
| | | that.firstRangeSelected = !that.firstRangeSelected
|
| | | that.rangeStart_ = selectObj.time;
|
| | | that.rangeEnd_ = undefined;
|
| | | that.clearRange();
|
| | | } else { //选择了结束时间
|
| | | that.rangeEnd_ = selectObj.time;
|
| | | that.firstRangeSelected = !that.firstRangeSelected
|
| | | that.$emit('rangeChange', {
|
| | | start: that.rangeStart_,
|
| | | end: that.rangeEnd_,
|
| | | });
|
| | | that.setRange();
|
| | | }
|
| | | }
|
| | | },
|
| | | addMonth() { //加一个月
|
| | | let that = this;
|
| | | that.currentSelectTime = ''
|
| | | let _Month = that.month;
|
| | | let _Year = that.year;
|
| | | if (that.month == 12) { //跨年
|
| | | _Month = 1;
|
| | | _Year += 1;
|
| | | } else {
|
| | | _Month += 1;
|
| | | }
|
| | | let dayMany = new Date(selectedDate.getFullYear(), (selectedDate.getMonth() + 1), 0).getDate()
|
| | | return dayMany
|
| | | },
|
| | | toDateByStr(timeStr) { //字符串转换时间,转换失败或者不传字符串则返回当前
|
| | | let timeObj
|
| | | if (timeStr) {
|
| | | timeObj = new Date(timeStr.replace(/-/g, "/"))
|
| | | }
|
| | | if (!timeStr || timeObj == "Invalid Date")
|
| | | timeObj = new Date()
|
| | | return timeObj
|
| | | },
|
| | | toDateByStr1(timeStr) { //字符串转换时间,转换失败或者不传字符串则null
|
| | | try {
|
| | | let timeObj
|
| | | if (timeStr) {
|
| | | timeObj = new Date(timeStr.replace(/-/g, "/"))
|
| | | }
|
| | | if (!timeStr || timeObj == "Invalid Date")
|
| | | return null
|
| | | return timeObj
|
| | | } catch (e) {
|
| | | return null
|
| | | }
|
| | | },
|
| | | getTimeStrFormat(timeStr) { //获取格式化的时间 yyyy-MM-dd
|
| | | let timeObj
|
| | | if (timeStr) {
|
| | | timeObj = new Date(timeStr.replace(/-/g, "/"))
|
| | | }
|
| | | if (!timeStr || timeObj == "Invalid Date")
|
| | | timeObj = new Date()
|
| | | return timeObj.getFullYear() + "-" + (timeObj.getMonth() + 1) + "-" + timeObj.getDate()
|
| | | },
|
| | | selectedDateFun(index) { //点击日期
|
| | | let that = this
|
| | | let selectObj = that.dateList[index - 1]
|
| | | selectObj.year = that.year
|
| | | selectObj.month = that.month
|
| | | selectObj.day = index
|
| | | selectObj.time = that.year + "-" + that.month + "-" + index
|
| | | that.$emit('dayChange', selectObj)
|
| | |
|
| | | let str = _Year + "/" + _Month + "/01";
|
| | | //判断是否超出日期范围
|
| | | if (that.checkOutOfDate(selectObj.time)) {
|
| | | return
|
| | | }
|
| | |
|
| | | //判断是否超出日期范围
|
| | | if (that.checkOutOfDate(str)) {
|
| | | that.nextDisabled = true;
|
| | | return;
|
| | | }
|
| | | that.currentSelectTime = index
|
| | |
|
| | | that.month = _Month;
|
| | | that.year = _Year;
|
| | | that.lastDisabled = false;
|
| | | console.log(index)
|
| | |
|
| | | //检查日期上限值是否在当月内,如果在则不能再切换下个月
|
| | | if (that.checkDateRange(that.year, that.month, 1)) {
|
| | | that.nextDisabled = true;
|
| | | }
|
| | | //开启了范围选择模式
|
| | | if (that.rangeMode) {
|
| | | if (!that.firstRangeSelected) { //选择开始时间
|
| | | that.firstRangeSelected = !that.firstRangeSelected
|
| | | that.rangeStart_ = selectObj.time
|
| | | that.rangeEnd_ = undefined
|
| | | that.clearRange()
|
| | | } else { //选择了结束时间
|
| | | that.rangeEnd_ = selectObj.time
|
| | | that.firstRangeSelected = !that.firstRangeSelected
|
| | | that.$emit('rangeChange', {
|
| | | start: that.rangeStart_,
|
| | | end: that.rangeEnd_,
|
| | | })
|
| | | that.setRange()
|
| | | }
|
| | | }
|
| | | },
|
| | | addMonth() { //加一个月
|
| | | let that = this
|
| | | that.currentSelectTime = ''
|
| | | let _Month = that.month
|
| | | let _Year = that.year
|
| | | if (that.month == 12) { //跨年
|
| | | _Month = 1
|
| | | _Year += 1
|
| | | } else {
|
| | | _Month += 1
|
| | | }
|
| | |
|
| | | if (that.rangeMode) { //开启了范围模式
|
| | | that.currentSelectTime = undefined;
|
| | | }
|
| | | let str = _Year + "/" + _Month + "/01"
|
| | |
|
| | | that.$emit('monthChange', {
|
| | | date: str
|
| | | });
|
| | | that.render(str);
|
| | | },
|
| | | subMonth() { //减一个月
|
| | | let that = this;
|
| | | |
| | | that.currentSelectTime = ''
|
| | | //判断是否超出日期范围
|
| | | if (that.checkOutOfDate(str)) {
|
| | | that.nextDisabled = true
|
| | | return
|
| | | }
|
| | |
|
| | | let _Month = that.month;
|
| | | let _Year = that.year;
|
| | | if (that.month == 1) { //跨年
|
| | | _Month = 12;
|
| | | _Year -= 1;
|
| | | } else {
|
| | | _Month -= 1;
|
| | | }
|
| | | that.month = _Month
|
| | | that.year = _Year
|
| | | that.lastDisabled = false
|
| | |
|
| | | let str = _Year + "/" + _Month + "/01";
|
| | | //检查日期上限值是否在当月内,如果在则不能再切换下个月
|
| | | if (that.checkDateRange(that.year, that.month, 1)) {
|
| | | that.nextDisabled = true
|
| | | }
|
| | |
|
| | | //判断是否超出日期范围
|
| | | let _totalDay = that.getTotalDay(str);
|
| | | if (that.checkOutOfDate(_Year + "/" + _Month + "/" + _totalDay)) {
|
| | | that.lastDisabled = true;
|
| | | return;
|
| | | }
|
| | | if (that.rangeMode) { //开启了范围模式
|
| | | that.currentSelectTime = undefined
|
| | | }
|
| | |
|
| | | that.month = _Month;
|
| | | that.year = _Year;
|
| | | that.nextDisabled = false;
|
| | | that.$emit('monthChange', {
|
| | | date: str
|
| | | })
|
| | | that.render(str)
|
| | | },
|
| | | subMonth() { //减一个月
|
| | | let that = this
|
| | |
|
| | | //检查日期下限值是否在当月内,如果在则不能再切换上个月
|
| | | if (that.checkDateRange(that.year, that.month)) {
|
| | | that.lastDisabled = true;
|
| | | }
|
| | | that.currentSelectTime = ''
|
| | |
|
| | | if (that.rangeMode) { //开启了范围模式
|
| | | that.currentSelectTime = undefined;
|
| | | }
|
| | | let _Month = that.month
|
| | | let _Year = that.year
|
| | | if (that.month == 1) { //跨年
|
| | | _Month = 12
|
| | | _Year -= 1
|
| | | } else {
|
| | | _Month -= 1
|
| | | }
|
| | |
|
| | | that.$emit('monthChange', {
|
| | | date: str
|
| | | });
|
| | | that.render(str);
|
| | | },
|
| | | backToToday() { //回到今天
|
| | | let currDate = new Date();
|
| | | let _year = currDate.getFullYear();
|
| | | let _month = currDate.getMonth() + 1;
|
| | | let str = _Year + "/" + _Month + "/01"
|
| | |
|
| | | this.currentSelectTime = getDay().day
|
| | | |
| | | this.$emit('dayChange', { time: getDay().date });
|
| | | //判断是否超出日期范围
|
| | | let _totalDay = that.getTotalDay(str)
|
| | | if (that.checkOutOfDate(_Year + "/" + _Month + "/" + _totalDay)) {
|
| | | that.lastDisabled = true
|
| | | return
|
| | | }
|
| | |
|
| | | //如果已经是当月
|
| | | if (_year == this.year && _month == this.month) {
|
| | | return;
|
| | | }
|
| | | |
| | | let value = _year + "/" + _month + "/" + currDate.getDate();
|
| | | this.$emit('monthChange', {
|
| | | date: value
|
| | | });
|
| | | this.lastDisabled = true
|
| | | |
| | | this.render(value);
|
| | | },
|
| | | setRange() { //设置范围
|
| | | let that = this;
|
| | | let rangeStartDate = that.toDateByStr1(that.rangeStart_);
|
| | | let rangeEndDate = that.toDateByStr1(that.rangeEnd_);
|
| | | if (!rangeStartDate || !rangeEndDate)
|
| | | return;
|
| | | if (rangeStartDate > rangeEndDate) { //防止范围出错
|
| | | let tempD = rangeEndDate;
|
| | | rangeEndDate = rangeStartDate;
|
| | | rangeStartDate = tempD;
|
| | | }
|
| | | that.month = _Month
|
| | | that.year = _Year
|
| | | that.nextDisabled = false
|
| | |
|
| | | //循环判断范围
|
| | | for (let i = 0; i < that.dateList.length; i++) {
|
| | | let _TempDtStr = that.year + "/" + that.month + "/" + that.dateList[i].dateIndex;
|
| | | let _TempDt = that.toDateByStr1(_TempDtStr);
|
| | | that.dateList[i].isRanges = false;
|
| | | if (rangeStartDate <= _TempDt && _TempDt <= rangeEndDate) //时间在范围内
|
| | | that.dateList[i].isRanges = true;
|
| | | }
|
| | | },
|
| | | clearRange() { //关闭范围模式范围
|
| | | let that = this;
|
| | | //循环判断范围
|
| | | for (let i = 0; i < that.dateList.length; i++) {
|
| | | that.dateList[i].isRanges = false;
|
| | | }
|
| | | },
|
| | | checkOutOfDate(time) { //判断是否超出日期范围,yyyy-MM-dd
|
| | | let that = this;
|
| | | let _dateStart = that.toDateByStr1(that.dateStart);
|
| | | let _dateEnd = that.toDateByStr1(that.dateEnd);
|
| | | let _tempDate = that.toDateByStr1(time);
|
| | | if (_dateStart > _tempDate || _tempDate > _dateEnd) {
|
| | | return true;
|
| | | } else
|
| | | return false;
|
| | | },
|
| | | checkDateRange(year, month, type) { //判断范围界限值是否在当月内,yyyy-MM-dd,type;1 上限值,其他:下限值
|
| | | let that = this;
|
| | | //检查日期下限值是否在当月内,如果在则不能再切换上个月
|
| | | if (that.checkDateRange(that.year, that.month)) {
|
| | | that.lastDisabled = true
|
| | | }
|
| | |
|
| | | let totalDay = that.getTotalDay(year + '/' + month + '/01');
|
| | | let firstD = that.toDateByStr1(year + '/' + month + '/01');
|
| | | let lastD = that.toDateByStr1(year + '/' + month + '/' + totalDay);
|
| | | if (that.rangeMode) { //开启了范围模式
|
| | | that.currentSelectTime = undefined
|
| | | }
|
| | |
|
| | | if (type == 1) { //上限值
|
| | | let _dateEnd = that.toDateByStr1(that.dateEnd);
|
| | | if (firstD <= _dateEnd && _dateEnd <= lastD) {
|
| | | return true;
|
| | | } else
|
| | | return false;
|
| | | } else { //下限值
|
| | | let _dateStart = that.toDateByStr1(that.dateStart);
|
| | | if (firstD <= _dateStart && _dateStart <= lastD) {
|
| | | return true;
|
| | | } else
|
| | | return false;
|
| | | }
|
| | | },
|
| | | calendarTransform(x,time){ //日历滑动动画
|
| | | this.transform_x = x;
|
| | | this.transform_time = time;
|
| | | },
|
| | | touchstart(event) {
|
| | | if(!this.canDrag)
|
| | | return;
|
| | | this.startPageX = event.touches[0].pageX;
|
| | | this.startPageY = event.touches[0].pageY;
|
| | | },
|
| | | touchmove(event) {
|
| | | if(!this.canDrag)
|
| | | return;
|
| | | let touchmovePageX = event.touches[0].pageX;
|
| | | let result = touchmovePageX - this.startPageX;
|
| | | this.calendarTransform(result,0);
|
| | | },
|
| | | touchend(event) {
|
| | | if(!this.canDrag)
|
| | | return;
|
| | | let that = this;
|
| | | let endPageX = event.changedTouches[0].pageX;
|
| | | let endPageY = event.changedTouches[0].pageY;
|
| | | let x = Math.abs(that.startPageX - endPageX); //横坐标之差
|
| | | let y = Math.abs(that.startPageY - endPageY); //纵坐标之差
|
| | | |
| | | let screenX = 0;
|
| | | try {
|
| | | const res = uni.getSystemInfoSync();
|
| | | screenX = res.windowWidth;
|
| | | } catch (e) {
|
| | | console.error(e)
|
| | | return;
|
| | | }
|
| | | if (that.startPageX > endPageX) { //左滑
|
| | | let a = Math.atan(y / x);
|
| | | let Rate = x / screenX;
|
| | | if (a < Math.PI / 6 && Rate > 0.3) {
|
| | | screenX = -screenX;
|
| | | that.calendarTransform(screenX,300);
|
| | | setTimeout(function(){
|
| | | that.addMonth();
|
| | | that.calendarTransform(0,0);
|
| | | },300);
|
| | | }
|
| | | else{
|
| | | that.calendarTransform(0,300);
|
| | | }
|
| | | } else {
|
| | | let a = Math.atan(y / x);
|
| | | let Rate = x / screenX;
|
| | | if (a < Math.PI / 6 && Rate > 0.3) {
|
| | | that.calendarTransform(screenX,300);
|
| | | setTimeout(function(){
|
| | | that.subMonth();
|
| | | that.calendarTransform(0,0);
|
| | | },300);
|
| | | }
|
| | | else{
|
| | | that.calendarTransform(0,300);
|
| | | }
|
| | | }
|
| | | }
|
| | | },
|
| | | watch: {
|
| | | currentTime: function(val, oldVal) { //时间改变
|
| | | let dateNew = this.toDateByStr1(val);
|
| | | if (dateNew.getFullYear() == this.year && (dateNew.getMonth() + 1) == this.month) {
|
| | | console.log('time is not change')
|
| | | } else {
|
| | | this.currentSelectTime = dateNew.getDate();
|
| | | this.render();
|
| | | }
|
| | | },
|
| | | range: function(val, oldVal) { //范围改变
|
| | | if (val.rangeStart != oldVal.rangeStart || val.rangeEnd != oldVal.rangeEnd) {
|
| | | this.rangeStart_ = val.rangeStart;
|
| | | this.rangeEnd_ = val.rangeEnd;
|
| | | this.setRange();
|
| | | }
|
| | | },
|
| | | mark: function(val, oldVal) { //标记改变
|
| | | this.render();
|
| | | },
|
| | | rangeMode: function(val, oldVal) { //范围改变
|
| | | if (!val) { //如果是关闭范围模式
|
| | | this.rangeStart_ = undefined; //标记范围开始,yyyyMM-dd
|
| | | this.rangeEnd_ = undefined; //标记范围结束,yyyyMM-dd
|
| | | this.firstRangeSelected = false;
|
| | | this.clearRange()
|
| | | }
|
| | | },
|
| | | },
|
| | | computed: {
|
| | | transformObj:function () { |
| | | return 'translate3d(' + this.transform_x + 'px, 0px, 0px) translateZ(0px)';
|
| | | },
|
| | | transformTimeObj:function () {
|
| | | return this.transform_time + 'ms';
|
| | | }
|
| | | },
|
| | | }
|
| | | that.$emit('monthChange', {
|
| | | date: str
|
| | | })
|
| | | that.render(str)
|
| | | },
|
| | | backToToday() { //回到今天
|
| | | let currDate = new Date()
|
| | | let _year = currDate.getFullYear()
|
| | | let _month = currDate.getMonth() + 1
|
| | |
|
| | | this.currentSelectTime = getDay().day
|
| | |
|
| | | this.$emit('dayChange', { time: getDay().date })
|
| | |
|
| | | //如果已经是当月
|
| | | if (_year == this.year && _month == this.month) {
|
| | | return
|
| | | }
|
| | |
|
| | | let value = _year + "/" + _month + "/" + currDate.getDate()
|
| | | this.$emit('monthChange', {
|
| | | date: value
|
| | | })
|
| | | this.lastDisabled = true
|
| | |
|
| | | this.render(value)
|
| | | },
|
| | | setRange() { //设置范围
|
| | | let that = this
|
| | | let rangeStartDate = that.toDateByStr1(that.rangeStart_)
|
| | | let rangeEndDate = that.toDateByStr1(that.rangeEnd_)
|
| | | if (!rangeStartDate || !rangeEndDate)
|
| | | return
|
| | | if (rangeStartDate > rangeEndDate) { //防止范围出错
|
| | | let tempD = rangeEndDate
|
| | | rangeEndDate = rangeStartDate
|
| | | rangeStartDate = tempD
|
| | | }
|
| | |
|
| | | //循环判断范围
|
| | | for (let i = 0; i < that.dateList.length; i++) {
|
| | | let _TempDtStr = that.year + "/" + that.month + "/" + that.dateList[i].dateIndex
|
| | | let _TempDt = that.toDateByStr1(_TempDtStr)
|
| | | that.dateList[i].isRanges = false
|
| | | if (rangeStartDate <= _TempDt && _TempDt <= rangeEndDate) //时间在范围内
|
| | | that.dateList[i].isRanges = true
|
| | | }
|
| | | },
|
| | | clearRange() { //关闭范围模式范围
|
| | | let that = this
|
| | | //循环判断范围
|
| | | for (let i = 0; i < that.dateList.length; i++) {
|
| | | that.dateList[i].isRanges = false
|
| | | }
|
| | | },
|
| | | checkOutOfDate(time) { //判断是否超出日期范围,yyyy-MM-dd
|
| | | let that = this
|
| | | let _dateStart = that.toDateByStr1(that.dateStart)
|
| | | let _dateEnd = that.toDateByStr1(that.dateEnd)
|
| | | let _tempDate = that.toDateByStr1(time)
|
| | | if (_dateStart > _tempDate || _tempDate > _dateEnd) {
|
| | | return true
|
| | | } else
|
| | | return false
|
| | | },
|
| | | checkDateRange(year, month, type) { //判断范围界限值是否在当月内,yyyy-MM-dd,type;1 上限值,其他:下限值
|
| | | let that = this
|
| | |
|
| | | let totalDay = that.getTotalDay(year + '/' + month + '/01')
|
| | | let firstD = that.toDateByStr1(year + '/' + month + '/01')
|
| | | let lastD = that.toDateByStr1(year + '/' + month + '/' + totalDay)
|
| | |
|
| | | if (type == 1) { //上限值
|
| | | let _dateEnd = that.toDateByStr1(that.dateEnd)
|
| | | if (firstD <= _dateEnd && _dateEnd <= lastD) {
|
| | | return true
|
| | | } else
|
| | | return false
|
| | | } else { //下限值
|
| | | let _dateStart = that.toDateByStr1(that.dateStart)
|
| | | if (firstD <= _dateStart && _dateStart <= lastD) {
|
| | | return true
|
| | | } else
|
| | | return false
|
| | | }
|
| | | },
|
| | | calendarTransform(x, time) { //日历滑动动画
|
| | | this.transform_x = x
|
| | | this.transform_time = time
|
| | | },
|
| | | touchstart(event) {
|
| | | if (!this.canDrag)
|
| | | return
|
| | | this.startPageX = event.touches[0].pageX
|
| | | this.startPageY = event.touches[0].pageY
|
| | | },
|
| | | touchmove(event) {
|
| | | if (!this.canDrag)
|
| | | return
|
| | | let touchmovePageX = event.touches[0].pageX
|
| | | let result = touchmovePageX - this.startPageX
|
| | | this.calendarTransform(result, 0)
|
| | | },
|
| | | touchend(event) {
|
| | | if (!this.canDrag)
|
| | | return
|
| | | let that = this
|
| | | let endPageX = event.changedTouches[0].pageX
|
| | | let endPageY = event.changedTouches[0].pageY
|
| | | let x = Math.abs(that.startPageX - endPageX) //横坐标之差
|
| | | let y = Math.abs(that.startPageY - endPageY) //纵坐标之差
|
| | |
|
| | | let screenX = 0
|
| | | try {
|
| | | const res = uni.getSystemInfoSync()
|
| | | screenX = res.windowWidth
|
| | | } catch (e) {
|
| | | console.error(e)
|
| | | return
|
| | | }
|
| | | if (that.startPageX > endPageX) { //左滑
|
| | | let a = Math.atan(y / x)
|
| | | let Rate = x / screenX
|
| | | if (a < Math.PI / 6 && Rate > 0.3) {
|
| | | screenX = -screenX
|
| | | that.calendarTransform(screenX, 300)
|
| | | setTimeout(function () {
|
| | | that.addMonth()
|
| | | that.calendarTransform(0, 0)
|
| | | }, 300)
|
| | | }
|
| | | else {
|
| | | that.calendarTransform(0, 300)
|
| | | }
|
| | | } else {
|
| | | let a = Math.atan(y / x)
|
| | | let Rate = x / screenX
|
| | | if (a < Math.PI / 6 && Rate > 0.3) {
|
| | | that.calendarTransform(screenX, 300)
|
| | | setTimeout(function () {
|
| | | that.subMonth()
|
| | | that.calendarTransform(0, 0)
|
| | | }, 300)
|
| | | }
|
| | | else {
|
| | | that.calendarTransform(0, 300)
|
| | | }
|
| | | }
|
| | | }
|
| | | },
|
| | | watch: {
|
| | | currentTime: function (val, oldVal) { //时间改变
|
| | | let dateNew = this.toDateByStr1(val)
|
| | | if (dateNew.getFullYear() == this.year && (dateNew.getMonth() + 1) == this.month) {
|
| | | console.log('time is not change')
|
| | | } else {
|
| | | this.currentSelectTime = dateNew.getDate()
|
| | | this.render()
|
| | | }
|
| | | },
|
| | | range: function (val, oldVal) { //范围改变
|
| | | if (val.rangeStart != oldVal.rangeStart || val.rangeEnd != oldVal.rangeEnd) {
|
| | | this.rangeStart_ = val.rangeStart
|
| | | this.rangeEnd_ = val.rangeEnd
|
| | | this.setRange()
|
| | | }
|
| | | },
|
| | | mark: function (val, oldVal) { //标记改变
|
| | | this.render()
|
| | | },
|
| | | rangeMode: function (val, oldVal) { //范围改变
|
| | | if (!val) { //如果是关闭范围模式
|
| | | this.rangeStart_ = undefined //标记范围开始,yyyyMM-dd
|
| | | this.rangeEnd_ = undefined //标记范围结束,yyyyMM-dd
|
| | | this.firstRangeSelected = false
|
| | | this.clearRange()
|
| | | }
|
| | | },
|
| | | },
|
| | | computed: {
|
| | | transformObj: function () {
|
| | | return 'translate3d(' + this.transform_x + 'px, 0px, 0px) translateZ(0px)'
|
| | | },
|
| | | transformTimeObj: function () {
|
| | | return this.transform_time + 'ms'
|
| | | }
|
| | | },
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss">
|
| | | .calendar-Time-header{
|
| | | /* text-align: center;
|
| | | .calendar-Time-header {
|
| | | /* text-align: center;
|
| | | height: 50upx;
|
| | | line-height: 50upx;
|
| | | vertical-align: middle;
|
| | | padding: 20upx; */
|
| | | width: 100%;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | margin-bottom: 20rpx;
|
| | | width: 100%;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | margin-bottom: 20rpx;
|
| | | }
|
| | | .header-left {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | }
|
| | | .header-left image {
|
| | | width: 30rpx;
|
| | | height: 30rpx;
|
| | | width: 30rpx;
|
| | | height: 30rpx;
|
| | | }
|
| | | .header-left text {
|
| | | font-size: 32rpx;
|
| | | font-family: PingFangSC-Semibold, PingFang SC;
|
| | | font-weight: 600;
|
| | | color: #222222;
|
| | | margin: 0 40rpx
|
| | | font-size: 32rpx;
|
| | | font-family: PingFangSC-Semibold, PingFang SC;
|
| | | font-weight: 600;
|
| | | color: #222222;
|
| | | margin: 0 40rpx;
|
| | | }
|
| | | .header-right {
|
| | | font-size: 28rpx;
|
| | | font-family: PingFangSC-Regular, PingFang SC;
|
| | | font-weight: 400;
|
| | | color: $uni-color-primary;
|
| | | font-size: 28rpx;
|
| | | font-family: PingFangSC-Regular, PingFang SC;
|
| | | font-weight: 400;
|
| | | color: $uni-color-primary;
|
| | | }
|
| | | .calendar-TimeH{
|
| | | .calendar-TimeH {
|
| | | }
|
| | | .calendar-lastMonth{
|
| | | width: 100upx;
|
| | | font-size: 35upx;
|
| | | margin-right: 10%;
|
| | | padding: 0 5px;
|
| | | text-align: center;
|
| | | .calendar-lastMonth {
|
| | | width: 100upx;
|
| | | font-size: 35upx;
|
| | | margin-right: 10%;
|
| | | padding: 0 5px;
|
| | | text-align: center;
|
| | | }
|
| | | .calendar-nextMonth{
|
| | | width: 100upx;
|
| | | text-align: center;
|
| | | margin-left: 10%;
|
| | | font-size: 35upx;
|
| | | padding: 0 5px;
|
| | | .calendar-nextMonth {
|
| | | width: 100upx;
|
| | | text-align: center;
|
| | | margin-left: 10%;
|
| | | font-size: 35upx;
|
| | | padding: 0 5px;
|
| | | }
|
| | | .calendar-backToToday{
|
| | | text-align: center;
|
| | | font-size: 24upx;
|
| | | position: absolute; |
| | | right: 5px;
|
| | | .calendar-backToToday {
|
| | | text-align: center;
|
| | | font-size: 24upx;
|
| | | position: absolute;
|
| | | right: 5px;
|
| | | }
|
| | |
|
| | | .calendar-row:before,
|
| | | .calendar-row:after {
|
| | | display: table;
|
| | | content: ' ';
|
| | | display: table;
|
| | | content: " ";
|
| | | }
|
| | |
|
| | | .calendar-row:after {
|
| | | clear: both;
|
| | | clear: both;
|
| | | }
|
| | |
|
| | | .calendar-col {
|
| | | width: 14.285714%;
|
| | | max-width: 14.285714%;
|
| | | position: relative;
|
| | | float: left;
|
| | | font-weight: 500;
|
| | | min-height: 80upx;
|
| | | font-size: 28rpx;
|
| | | /* color: #999999; */
|
| | | color: #222222;
|
| | | white-space: nowrap;
|
| | | text-overflow: ellipsis;
|
| | | -o-text-overflow: ellipsis;
|
| | | overflow: hidden;
|
| | | |
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | width: 14.285714%;
|
| | | max-width: 14.285714%;
|
| | | position: relative;
|
| | | float: left;
|
| | | font-weight: 600;
|
| | | min-height: 80upx;
|
| | | font-size: 28rpx;
|
| | | /* color: #999999; */
|
| | | color: #222222;
|
| | | white-space: nowrap;
|
| | | text-overflow: ellipsis;
|
| | | -o-text-overflow: ellipsis;
|
| | | overflow: hidden;
|
| | |
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | }
|
| | |
|
| | | .aligncanter {
|
| | | text-align: center;
|
| | | /* border-bottom: 1rpx solid #E5E5E5; */
|
| | | text-align: center;
|
| | | /* border-bottom: 1rpx solid #E5E5E5; */
|
| | | }
|
| | |
|
| | | .calendar-header {
|
| | | color: gray;
|
| | | height: 40upx;
|
| | | line-height: 40upx;
|
| | | vertical-align: middle;
|
| | | font-size: 24upx;
|
| | | color: gray;
|
| | | height: 40upx;
|
| | | line-height: 40upx;
|
| | | vertical-align: middle;
|
| | | font-size: 24upx;
|
| | | }
|
| | |
|
| | | .calendar-day {
|
| | | height: 80upx;
|
| | | transform: translate3d(0px, 0px, 0px) translateZ(0px); transition-duration: 0ms; transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
|
| | | height: 80upx;
|
| | | transform: translate3d(0px, 0px, 0px) translateZ(0px);
|
| | | transition-duration: 0ms;
|
| | | transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
|
| | | }
|
| | |
|
| | |
|
| | | .calendar-content {
|
| | | }
|
| | |
|
| | | .calendar-date{
|
| | | /* color: #000; */
|
| | | .calendar-date {
|
| | | /* color: #000; */
|
| | | }
|
| | | .calendar-today {
|
| | | /* border-radius: 6upx;
|
| | | /* border-radius: 6upx;
|
| | | background-color: $uni-color-primary; */
|
| | | color: $uni-color-primary;
|
| | | /* -moz-box-shadow: 0px 2upx 10upx #ABABAB;
|
| | | color: $uni-color-primary;
|
| | | /* -moz-box-shadow: 0px 2upx 10upx #ABABAB;
|
| | | -webkit-box-shadow: 0px 2upx 10upx #ABABAB;
|
| | | box-shadow: 0px 2upx 10upx #ABABAB; */
|
| | | }
|
| | | .calendar-today .calendar-point{
|
| | | color: white !important;
|
| | | .calendar-today .calendar-point {
|
| | | color: white !important;
|
| | | }
|
| | |
|
| | | .calendar-today .calendar-text{
|
| | | color: white !important;
|
| | | .calendar-today .calendar-text {
|
| | | color: white !important;
|
| | | }
|
| | |
|
| | | .calendar-col-lastMonth .calendar-text{
|
| | | color: gray;
|
| | | .calendar-col-lastMonth .calendar-text {
|
| | | color: gray;
|
| | | }
|
| | |
|
| | | .calendar-col-nextMonth .calendar-text{
|
| | | color: gray;
|
| | | .calendar-col-nextMonth .calendar-text {
|
| | | color: gray;
|
| | | }
|
| | |
|
| | | /* .calendar-today .calendar-date{
|
| | |
| | | } */
|
| | |
|
| | | .calendar-active {
|
| | | color:#FFFFFF !important;
|
| | | background-color: $uni-color-primary;
|
| | | /* -moz-box-shadow: 0px 2upx 10upx #ABABAB;
|
| | | color: #ffffff !important;
|
| | | background-color: $uni-color-primary;
|
| | | /* -moz-box-shadow: 0px 2upx 10upx #ABABAB;
|
| | | -webkit-box-shadow: 0px 2upx 10upx #ABABAB;
|
| | | box-shadow: 0px 2upx 10upx #ABABAB; */
|
| | | }
|
| | | /* 范围标记 */
|
| | | .calendar-range {
|
| | | /* color:#01AAED; */
|
| | | border-radius: 0px;
|
| | | background-color: #D9D9D9;
|
| | | -moz-box-shadow: none;
|
| | | -webkit-box-shadow: none;
|
| | | box-shadow: none;
|
| | | /* color:#01AAED; */
|
| | | border-radius: 0px;
|
| | | background-color: #d9d9d9;
|
| | | -moz-box-shadow: none;
|
| | | -webkit-box-shadow: none;
|
| | | box-shadow: none;
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | .ClearBoth {
|
| | | clear: both;
|
| | | clear: both;
|
| | | }
|
| | | .calendar-col-nextMonth{
|
| | | color:gray;
|
| | | .calendar-col-nextMonth {
|
| | | color: gray;
|
| | | }
|
| | | .calendar-col-lastMonth{
|
| | | color:gray;
|
| | | .calendar-col-lastMonth {
|
| | | color: gray;
|
| | | }
|
| | | .calendar-btn-disabled{
|
| | | color:gainsboro;
|
| | | .calendar-btn-disabled {
|
| | | color: gainsboro;
|
| | | }
|
| | | .calendar-point{
|
| | | width: 28rpx;
|
| | | height: 28rpx;
|
| | | box-sizing: border-box;
|
| | | background-color: #F62710;
|
| | | border-radius: 50%;
|
| | | font-size: 16upx;
|
| | | color: #FFFFFF;
|
| | | top:2upx;
|
| | | right: 2upx;
|
| | | position: absolute;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | .calendar-point {
|
| | | width: 28rpx;
|
| | | height: 28rpx;
|
| | | box-sizing: border-box;
|
| | | background-color: #f62710;
|
| | | border-radius: 50%;
|
| | | font-size: 16upx;
|
| | | color: #ffffff;
|
| | | top: 2upx;
|
| | | right: 2upx;
|
| | | position: absolute;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | }
|
| | | .calendar-text{
|
| | | padding: 4rpx 0;
|
| | | width:100%;font-size: 20upx;color: #F62710;top:40upx;left: 0px;position: absolute;overflow:hidden;
|
| | | .calendar-text {
|
| | | padding: 4rpx 0;
|
| | | width: 100%;
|
| | | font-size: 20upx;
|
| | | color: #f62710;
|
| | | top: 40upx;
|
| | | left: 0px;
|
| | | position: absolute;
|
| | | overflow: hidden;
|
| | | }
|
| | | .dayValue{
|
| | | text-align: center;
|
| | | /* color: #000000; */
|
| | | .dayValue {
|
| | | text-align: center;
|
| | | /* color: #000000; */
|
| | | }
|
| | |
|
| | | .calendar-day-6-7{
|
| | | /* color: orangered; */
|
| | | .calendar-day-6-7 {
|
| | | /* color: orangered; */
|
| | | }
|
| | |
|
| | | /* 超出日期范围 */
|
| | | .calendar-out-of-Date{
|
| | | background-color: #EAEAEA;
|
| | | .calendar-out-of-Date {
|
| | | background-color: #eaeaea;
|
| | | }
|
| | | .calendar-out-of-Date .calendar-date{
|
| | | color: gray;
|
| | | .calendar-out-of-Date .calendar-date {
|
| | | color: gray;
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | /* 以下为实现0.5px底部边界 */
|
| | | .under_line{position: relative;}
|
| | | .under_line {
|
| | | position: relative;
|
| | | }
|
| | | .under_line:before,
|
| | | .under_line:after{position: absolute;content: " ";height: 1px;width: 100%;left: 0;transform-origin: 0 0;-webkit-transform-origin: 0 0;}
|
| | | .under_line:after {
|
| | | position: absolute;
|
| | | content: " ";
|
| | | height: 1px;
|
| | | width: 100%;
|
| | | left: 0;
|
| | | transform-origin: 0 0;
|
| | | -webkit-transform-origin: 0 0;
|
| | | }
|
| | | /* .fineLine:before{顶部top: 0;background: #000;} */
|
| | | .under_line:after{bottom: 0;}
|
| | | @media only screen and (-webkit-min-device-pixel-ratio: 1.5){.under_line:after,.under_line:before{-webkit-transform: scaleY(.667);}}
|
| | | @media only screen and (-webkit-min-device-pixel-ratio: 2){.under_line:after,.under_line:before{-webkit-transform: scaleY(.5);}}
|
| | | .under_line:after {
|
| | | bottom: 0;
|
| | | }
|
| | | @media only screen and (-webkit-min-device-pixel-ratio: 1.5) {
|
| | | .under_line:after,
|
| | | .under_line:before {
|
| | | -webkit-transform: scaleY(0.667);
|
| | | }
|
| | | }
|
| | | @media only screen and (-webkit-min-device-pixel-ratio: 2) {
|
| | | .under_line:after,
|
| | | .under_line:before {
|
| | | -webkit-transform: scaleY(0.5);
|
| | | }
|
| | | }
|
| | | /* 以上为实现0.5px底部边界 */
|
| | | </style>
|