123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490 |
- <template>
- <view>
- <!-- -->
- <view class="riliWrapper">
- <view class="riliWrapperBox">
- <!-- 日历 -->
- <view class="signWrapperCalendar" v-if="true">
- <view class="signWrapperCalendarBox">
- <!-- -->
- <swiper @change="_onClickSlideApi" duration="200" :current="slideDataListIndex" circular style="height:550rpx">
- <swiper-item class="swiper-item" v-for="(calendar,indexa) in 3" :key="indexa" >
- <view class="signWrapperCalendarBoxTop" >
- {{year}}年{{month<10?'0'+month:month}}月
- </view>
- <view class="signWrapperCalendarBoxCenter">
- <view class="signWrapperCalendarBoxCenterBox">
- <view class="signWrapperCalendarBoxCenterBoxTop">
- <div class="week-number">
- <span v-for="(item,index) in weekList" :style="{color:(index==0||index==weekList.length-1)&&themeColor}" :key="index">{{item}}</span>
- </div>
- </view>
- <view class="signWrapperCalendarBoxCenterBoxFooter">
- <view class="each-day" v-for="(dayTime,idx) in dayList" :key="idx" >
- <view :class="dayTime!=day+2 ?'eachDayBox':'eachDayBoxCheck'" v-if="day">
- <view class="eachDayBoxBox" :style="dayTime==day?'border-bottom: 1rpx solid #4E6EF2;':''">
- {{dayTime?dayTime:''}}
- </view>
-
- </view>
- </view>
- </view>
- </view>
- </view>
-
-
- </swiper-item>
- </swiper>
- <!-- -->
- </view>
-
-
- </view>
- </view>
-
-
-
- </view>
- <!-- -->
- </view>
- </template>
- <script>
- export default {
- data() {
- return {
- weekList: ['日', '一', '二', '三', '四', '五', '六'],
- // 月份数组【2020-08-01 2020-09-01 2020-10-01】
- slideDataList:[],
- // 月份数组的索引
- slideDataListIndex:1,
- year:2020,
- month:10,
- day:10,
- dayList:[],
- start_time:'', // 月初的时间戳
- end_time:'', // 月末的时间戳
- };
- },
- created() {
- console.log('created')
-
- this._onLoad()
- },
- methods:{
- async _onLoad() {
- // 获取当前时间 赋值年,月
- await this.initTime()
-
- // 更新日历
- await this._runMonth()
- },
- // 初始化时间
- initTime() {
- var nowTimeData = this._getTimeNowApi()
-
- this.year = nowTimeData.year
- this.month = nowTimeData.month
- this.day = nowTimeData.day
-
- // 今日时间为:2020-9-16
- console.log('今日时间为:'+this.year+'-'+this.month+'-'+this.day)
- },
-
- async _runMonth() {
- console.log('==============================================================')
-
- // 获取当前月的每一天的数据 1~31
- await this.initApi()
-
- // 根据当前选择的年月,更新start_time end_time
- await this._timeApi()
-
- console.log(this.start_time)
- console.log(this.end_time)
- // 更新记录
- // await this.onClickSignLog()
-
- let dataWeek = await this.getweek(this._getNowApi());
-
- // console.log(this._getNowApi())
- this.slideDataList[0] = []
- this.slideDataList[1] = dataWeek
- this.slideDataList[2] = []
-
- console.log(this.slideDataList)
-
-
- console.log('==============================================================')
- },
-
- _getTimeNowApi() {
- // 初始化时间
- var date = new Date();
-
- var year = date.getFullYear();
- var month = parseInt(date.getMonth()+1);
- var day = date.getDate();
-
- if (month < 10) {
- month = '0' + month
- }
- if (day < 10) {
- day = '0' + day
- }
-
- let returnData = {
- year: year,
- month:parseInt(month),
- day:day,
- }
-
- return returnData
- },
-
- // 滑动日历触发(左右滑动)
- _onClickSlideApi(e) {
-
- let current = e.detail.current
-
- let oldIndex = this.slideDataListIndex
-
- this.slideDataListIndex = current
-
- if(oldIndex - current == -1 || oldIndex - current == 2){
- console.log('向右滑动前一个月')
- if (this.month == 12) {
- this.year = this.year + 1
- this.month = 1
- } else {
- this.month = this.month+1
- }
-
- } else {
- console.log('向左滑动后退一个月')
- if (this.month == 1) {
- this.year = this.year - 1
- this.month = 12
- } else {
- this.month = this.month - 1
- }
- }
-
- this._runMonth()
- },
-
- _getNowApi() {
- console.log('当前日期:'+this.year+'-'+this.month+'-'+this.day)
-
- let data = {
- Day: 1,
- Month: this.month,
- Year: this.year
- }
-
- console.log(data)
- return data
- },
- // 获取当前月的每一天的数据
- initApi() {
- this.dayList = this.createDayList(this.month, this.year);
- },
-
- //创建每个月日历数据,传入月份1号前面用null填充
- createDayList(month, year) {
- const count = this.getDayNum(month, year),
- _week = new Date(year + '/' + month + '/1').getDay();
- let list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]
-
- for (let i = 29; i <= count; i++) {
- list.push(i)
- }
- for (let i = 0; i < _week; i++) {
- list.unshift(null)
- }
-
- return list;
- },
- //计算传入月份有多少天
- getDayNum(month, year) {
- let dayNum = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
-
- if ((year % 4 === 0) && (year % 100 !== 0) || (year % 400 === 0)) {
- dayNum[1] = 29;
- }
- return dayNum[month - 1]
- },
- // 传时间获取月初月末时间
- _timeApi() {
-
- let startDate = this.year+'-'+this.month+'-'+this.day
-
- let startData = this._timeMonthStartApi(startDate+' 00:00:00')
-
- this.start_time = startData.time_int
-
- let endData = this._timeMonthEndApi(startDate+' 00:00:00')
-
- this.end_time = endData.time_int
- },
- _timeMonthStartApi(timeDate) {
- var date = new Date(timeDate);
-
- date.setDate(1);
-
- var month = parseInt(date.getMonth()+1);
-
- var day = date.getDate();
- if (month < 10) {
- month = '0' + month
- }
- if (day < 10) {
- day = '0' + day
- }
-
- let timeDateStart = date.getFullYear() + '-' + month + '-' + day;
-
- let returnData = {
- time_type:'start_time',
- time_int: Date.parse(timeDateStart+' 00:00:00')/1000,
- time_date: timeDateStart,
- year:date.getFullYear(),
- month:month,
- day:day,
- }
-
- return returnData
- },
- _timeMonthEndApi(timeDate) {
- var endDate=new Date(timeDate);
- var currentMonth=endDate.getMonth();
-
- var nextMonth=++currentMonth;
- var nextMonthFirstDay=new Date(endDate.getFullYear(),nextMonth,1);
- var oneDay=1000*60*60*24;
- var lastTime = new Date(nextMonthFirstDay-oneDay);
- var endMonth = parseInt(lastTime.getMonth()+1);
- var endDay = lastTime.getDate();
- if (endMonth < 10) {
- endMonth = '0' + endMonth
- }
- if (endDay < 10) {
- endDay = '0' + endDay
- }
-
- let timeDateEnd = endDate.getFullYear() + '-' + endMonth + '-' + endDay
-
- let returnData = {
- time_type:'end_time',
- time_int: Date.parse(timeDateEnd+' 00:00:00')/1000,
- time_date: timeDateEnd,
- year:endDate.getFullYear(),
- month:endMonth,
- day:endDay,
- }
-
- return returnData
- },
- // 2020-08-01
- getweek(date) {
- let weeks = [];
- let dates = this.getDates(date);
- // let len = Math.ceil(dates.weeks.length / 7);
- // for (let i = 0; i < len; i++) {
- // weeks.push(dates.weeks.slice(i * 7, 7 + (i * 7)));
- // }
- // dates.weeks = weeks
- return dates;
- },
- getDates(date) {
- let dates = {
- year: date.Year,
- month: date.Month,
- firstDay: new Date(date.Year, date.Month, 1).getDay(),
- lastDay: new Date(date.Year, date.Month + 1, 0).getDay(),
- endDate: new Date(date.Year, date.Month + 1, 0).getDate(),
- weeks: []
- }
-
- //计算上月日期
- for (let i = dates.firstDay; i > 0; i--) {
- let dateinfo = {};
- dateinfo.date = new Date(date.Year, date.Month, -i + 1).getDate();
- dateinfo.isClick = false;
- dates.weeks.push(dateinfo);
- }
- //计算本月日期
- for (let i = 1; i <= new Date(date.Year, date.Month + 1, 0).getDate(); i++) {
- let nowisClick = true;
- let dateinfo = {};
- dateinfo.date = i;
- if (this.dateType == 'dateCustom') {
- nowisClick = false;
- if (this.dateCustom[dates.year] && this.dateCustom[dates.year][dates.month]) {
- for (let j = 0; j < this.dateCustom[dates.year][dates.month].length; j++) {
- if (this.dateCustom[dates.year][dates.month][j] == i) {
- nowisClick = true;
- }
- }
- }
- }
- dateinfo.isClick = nowisClick;
- dates.weeks.push(dateinfo);
- }
- //计算下月日期
- let len = 7 - dates.lastDay;
- if ((42 - dates.weeks.length) >= 7) {
- len += 7;
- }
- for (let i = 1; i < len; i++) {
- let dateinfo = {};
- dateinfo.date = i;
- dateinfo.isClick = false;
- dates.weeks.push(dateinfo);
- }
- return dates;
-
- },
-
- }
-
- }
- </script>
- <style lang="scss">
- .riliWrapper {
- width: 100%;
- // height: 499rpx;
- // background-color: #9bf;
- // padding: 0 5%;
- display: flex;
- justify-content: center;
- .riliWrapperBox {
- width: 90%;
- // height: 499rpx;
- // background-color: #9bf;
- }
- // 日历
- .signWrapperCalendar {
- margin-top: 30rpx;
-
- width: 100%;
- border: 3rpx solid #9bf;
- .signWrapperCalendarBox {
- width: 100%;
- // height: 499rpx;
- background: #FFFFFF;
- border-radius: 10rpx;
- // background-color: #9bf;
- .signWrapperCalendarBoxTop {
- width: 100%;
- height: 72rpx;
- // background-color: red;
- display: flex;
- align-items: center;
- justify-content: center;
- border-bottom: 2rpx solid #EFEFEF;
- }
-
- .signWrapperCalendarBoxBit {
- width: 100%;
- height: 2rpx;
- border: 2rpx solid #EFEFEF;
-
- }
-
- .signWrapperCalendarBoxCenter {
- width: 100%;
- height: 425rpx;
- // background-color: #fff;
- // padding: 30rpx 30rpx;
- padding: 30rpx 0rpx;
- display: flex;
- justify-content: center;
- .signWrapperCalendarBoxCenterBox {
- width: 90%;
- height: 100%;
- // background-color: #9000FF;
-
- .signWrapperCalendarBoxCenterBoxTop {
- .week-number {
- background: #fff;
- padding: 0 1%;
- span {
- display: inline-block;
- text-align: center;
- height: 40px;
- line-height: 40px;
- width: 14.2857143%;
- color: #333333;
- }
- }
- }
-
- .signWrapperCalendarBoxCenterBoxFooter {
- width: 100%;
- // hei
- // background-color: red;
- .each-day {
- position: relative;
- display: inline-block;
- // display: flex;
- // justify-content: flex-start;
- text-align: center;
- vertical-align: middle;
- width: 14.28%;
- font-size: 25rpx;
- height: 50rpx;
- margin-top:4rpx;
- padding-top:4rpx;
- .eachDayBox {
- width: 100%;
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
-
- .eachDayBoxBox {
- width: 36rpx;
- height: 36rpx;
- // background: #FCEEE0;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- }
-
- }
- //
- .eachDayBoxCheck {
- width: 100%;
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
-
- .eachDayBoxBox {
- width: 36rpx;
- height: 36rpx;
- background: #FCEEE0;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- color: red;
- }
-
- }
- //
- }
- }
- }
- }
-
-
-
- }
-
- }
- }
- </style>
|