Commit 7043b989 by xiexiaoqin
parents 6a27953c dbb96ef0
......@@ -38,12 +38,12 @@
<view class="dataSchedule">
<view a:for="{{item.value.value}}" a:for-item="item2" data-item="{{item2}}" class="{{ item2.isBeOverdue ? 'overdue' : item2.confirmAttendance === 0 ? 'cancel' : '' }}" onTap="nextDetail">
<view class="dataScheduleName">
<text>{{item2.title}}{{item2.isfirstDayOrEndDay ? `(第${item2.isFewDays}天,共${item2.duration}天)` : '' }}</text>
<text>{{item2.title}}{{item2.isDaySpan ? `(第${item2.isFewDays}天,共${item2.duration}天)` : '' }}</text>
</view>
<view class="dataScheduleTime">
<text a:if="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '0'}}">{{item2.thisDayStartTime}}</text>
<text a:elif="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '1'}}">全天</text>
<text a:elif="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '2'}}">直到{{item2.thisDayEndTime}}</text>
<text a:if="{{item2.isDaySpan && item2.isfirstDayOrEndDay === '0'}}">{{item2.thisDayStartTime}}</text>
<text a:elif="{{item2.isDaySpan && item2.isfirstDayOrEndDay === '1'}}">全天</text>
<text a:elif="{{item2.isDaySpan && item2.isfirstDayOrEndDay === '2'}}">直到{{item2.thisDayEndTime}}</text>
<text a:else>{{item2.thisDayStartTime}} - {{item2.thisDayEndTime}}</text>
</view>
</view>
......@@ -62,12 +62,12 @@
<!--<view class="thisDayLine thisDayHavaMeeting" style="margin-bottom: 7.5rpx"></view> -->
<view a:for="{{item.value.value}}" a:for-item="item2" data-item="{{item2}}" class="{{ item2.isBeOverdue ? 'overdue' : item2.confirmAttendance === 0 ? 'cancel' : '' }}" onTap="nextDetail">
<view class="dataScheduleName">
<text>{{item2.title}}{{item2.isfirstDayOrEndDay ? `(第${item2.isFewDays}天,共${item2.duration}天)` : '' }}</text>
<text>{{item2.title}}{{item2.isDaySpan ? `(第${item2.isFewDays}天,共${item2.duration}天)` : '' }}</text>
</view>
<view class="dataScheduleTime">
<text a:if="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '0'}}">{{item2.thisDayStartTime}}</text>
<text a:elif="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '1'}}">全天</text>
<text a:elif="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '2'}}">直到{{item2.thisDayEndTime}}</text>
<text a:if="{{item2.isDaySpan && item2.isfirstDayOrEndDay === '0'}}">{{item2.thisDayStartTime}}</text>
<text a:elif="{{item2.isDaySpan && item2.isfirstDayOrEndDay === '1'}}">全天</text>
<text a:elif="{{item2.isDaySpan && item2.isfirstDayOrEndDay === '2'}}">直到{{item2.thisDayEndTime}}</text>
<text a:else>{{item2.thisDayStartTime}} - {{item2.thisDayEndTime}}</text>
</view>
</view>
......
......@@ -143,7 +143,6 @@ create.Component({
initialTimeDate.getDate() < 10
? "0" + initialTimeDate.getDate()
: initialTimeDate.getDate();
// >>>>>>> 8548e2b26ad549008cdd8c9e5e2bf83d67124e7d
let startTimeList = item.startTime.split(":");
let DTSTART = `${initialTimeDateyear}${initialTimeDatemonth}${initialTimeDateday}T${startTimeList[0]}${startTimeList[1]}00Z`;
let rule = RRule.fromString(
......@@ -157,7 +156,7 @@ create.Component({
item.excludePlanDates.split(",")
);
rule.all().map(item2 => {
let excludeDate = getFormatDate(item2, "yyyyMMdd");
let excludeDate = getFormatDate(item2, "yyyyMMdd", "-");
let hasExclude =
excludeDateList.scheduleList.indexOf(excludeDate) === -1;
if (
......@@ -246,48 +245,29 @@ create.Component({
let that = this;
let weekList = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
let DateMap = new Map();
let isLeapYear = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
// 闰年
if (isLeapYear) {
let isFirstWeek = false;
for (let i = 1; i <= 366; i++) {
// 判断一月第一周的第一个周一
if (i <= 7 && new Date(year, 0, i).getDay() === 0) {
isFirstWeek = true;
}
// 是第一个月第一个周一
if (isFirstWeek) {
DateMap.set(`${new Date(year, 0, i).toLocaleDateString()}`, {
scheduleList: []
});
}
// 平年或闰年
let isLeapYear =
(year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? 366 : 365;
let isFirstWeek = false;
for (let i = 1; i <= isLeapYear; i++) {
// 判断一月第一周的第一个周日
if (i <= 7 && new Date(year, 0, i).getDay() === 0) {
isFirstWeek = true;
}
// 跨年的那几天不是周一的
let num = 6 - new Date(year, 0, 366).getDay();
for (let i = 0; i <= num; i++) {
DateMap.set(`${new Date(year, 0, 366 + i).toLocaleDateString()}`, {
scheduleList: []
});
}
} else {
let isFirstWeek = false;
for (let i = 1; i <= 365; i++) {
if (i <= 7 && new Date(year, 0, i).getDay() === 0) {
isFirstWeek = true;
}
if (isFirstWeek) {
DateMap.set(`${new Date(year, 0, i).toLocaleDateString()}`, {
scheduleList: []
});
}
}
let num = 6 - new Date(year, 0, 365).getDate();
for (let i = 0; i <= num; i++) {
DateMap.set(`${new Date(year, 0, 366 + i).toLocaleDateString()}`, {
// 是第一个月第一个周一
if (isFirstWeek) {
DateMap.set(`${new Date(year, 0, i).toLocaleDateString()}`, {
scheduleList: []
});
}
}
// 跨年的那几天不是周一的
let num = 6 - new Date(year, 0, 366).getDay();
for (let i = 0; i <= num; i++) {
DateMap.set(`${new Date(year, 0, 366 + i).toLocaleDateString()}`, {
scheduleList: []
});
}
let AllScheduleList = this.getCalendarList();
// 遍历所有日程
for (let y = 0; y < AllScheduleList.length; y++) {
......@@ -296,24 +276,19 @@ create.Component({
.replace(/-/g, "/");
let date2 = AllScheduleList[y].endTime.slice(0, 10).replace(/-/g, "/");
let count = this.count(date1, date2);
// 不跨天
if (count == 0) {
// 每年的第一周和跨天的那几天有日程就push进去
if (
DateMap.get(
`${new Date(
AllScheduleList[y].startTime.replace(/-/g, "/")
).toLocaleDateString()}`
)
) {
DateMap.get(
`${new Date(
AllScheduleList[y].startTime.replace(/-/g, "/")
).toLocaleDateString()}`
).scheduleList.push({
for (let j = 0; j <= count; j++) {
let time = new Date(date1);
time.setDate(time.getDate() + j);
let keyDate = time.toLocaleDateString();
if (DateMap.get(keyDate)) {
DateMap.get(keyDate).scheduleList.push({
...AllScheduleList[y],
isDaySpan: count == 0 ? false : true,
isfirstDayOrEndDay: j === 0 ? "0" : j === count ? "2" : "1", // 0 第一天,1中间的天,2结束的天
thisDayStartTime: AllScheduleList[y].startTime.slice(11, 16),
thisDayEndTime: AllScheduleList[y].endTime.slice(11, 16),
isFewDays: j + 1,
duration: count + 1,
isBeOverdue:
new Date().getTime() >
new Date(
......@@ -324,112 +299,21 @@ create.Component({
});
}
}
// 跨天
else {
for (let j = 0; j <= count; j++) {
let time = new Date(date1);
time.setDate(time.getDate() + j);
if (
DateMap.get(
new Date(
time.getFullYear(),
time.getMonth(),
time.getDate()
).toLocaleDateString()
)
) {
DateMap.get(
new Date(
time.getFullYear(),
time.getMonth(),
time.getDate()
).toLocaleDateString()
).scheduleList.push({
...AllScheduleList[y],
isfirstDayOrEndDay: j === 0 ? "0" : j === count ? "2" : "1", // 0 第一天,1中间的天,2结束的天
thisDayStartTime: AllScheduleList[y].startTime.slice(11, 16),
thisDayEndTime: AllScheduleList[y].endTime.slice(11, 16),
isFewDays: j + 1,
duration: count + 1,
isBeOverdue:
new Date().getTime() >
new Date(
AllScheduleList[y].endTime.replace(/-/g, "/")
).getTime()
? true
: false
});
}
}
}
}
let DateList = [];
let listMonth = "";
// 第一个月的第一天
let listWeek = new Date(year, 0, 1).getDay() === 0 ? 0 : 1;
DateList.push({
type: "year",
value: year
});
let thisDay = new Date().toLocaleDateString();
DateMap.forEach(function(value, key, map) {
const keyDate = new Date(key);
if (
keyDate.getDay() === 0 &&
that.count(
key,
new Date(year, 0, isLeapYear ? 366 : 365).toLocaleDateString()
) > 7
) {
listWeek = listWeek + 1;
// 有此月份
if (keyDate.getMonth() !== listMonth) {
listMonth = keyDate.getMonth();
DateList.push({
type: "month",
value: keyDate.getMonth() + 1
});
let rangeYear1 = keyDate.getFullYear();
let rangeMonth1 = keyDate.getMonth();
let rangeDay1 = keyDate.getDate();
let rangeDate = new Date(rangeYear1, rangeMonth1, rangeDay1 + 6);
let rangeMonth2 = new Date(rangeDate).getMonth();
let rangeDay2 = new Date(rangeDate).getDate();
DateList.push({
type: "week",
value: `第${listWeek}周,${rangeMonth1 + 1}${rangeDay1}日 - ${
rangeMonth2 == rangeMonth1 ? "" : rangeMonth2 + 1 + "月"
}${rangeDay2}日`,
dayStr: key
});
}
// 没有此月份
else {
let rangeYear1 = keyDate.getFullYear();
let rangeMonth1 = keyDate.getMonth();
let rangeDay1 = keyDate.getDate();
let rangeDate = new Date(rangeYear1, rangeMonth1, rangeDay1 + 6);
let rangeMonth2 = new Date(rangeDate).getMonth();
let rangeDay2 = new Date(rangeDate).getDate();
DateList.push({
type: "week",
value: `第${listWeek}周,${rangeMonth1 + 1}${rangeDay1}日 - ${
rangeMonth2 == rangeMonth1 ? "" : rangeMonth2 + 1 + "月"
}${rangeDay2}日`,
dayStr: key
});
}
} else if (
keyDate.getDay() === 0 &&
that.count(keyDate, new Date(year, 0, isLeapYear ? 366 : 365) < 7)
) {
if (keyDate.getDay() === 0) {
let rangeYear1 = keyDate.getFullYear();
let rangeMonth1 = keyDate.getMonth();
let rangeDay1 = keyDate.getDate();
let rangeDate = new Date(rangeYear1, rangeMonth1, rangeDay1 + 6);
let rangeMonth2 = new Date(rangeDate).getMonth();
let rangeDay2 = new Date(rangeDate).getDate();
listWeek = 1;
DateList.push({
type: "week",
value: `第${listWeek}周,${rangeMonth1 + 1}${rangeDay1}日 - ${
......@@ -437,6 +321,19 @@ create.Component({
}${rangeDay2}日`,
dayStr: key
});
listWeek += 1;
}
if (keyDate.getMonth() === 0 && keyDate.getDate() === 1) {
DateList.push({
type: "year",
value: year
});
}
if (keyDate.getDate() === 1) {
DateList.push({
type: "month",
value: keyDate.getMonth() + 1
});
}
// 有日程长度 并且不是今天
if (value.scheduleList.length !== 0 && key !== thisDay) {
......
......@@ -12,4 +12,4 @@
"pages/applicationDetails/applicationDetails",
"pages/attendeeList/attendeeList"
]
}
\ No newline at end of file
}
page {
background: #FFFFFF;
}
.scheduleHeader {
/* position: fixed;
top: 0;
left: 0; */
width: 100%;
height: 88rpx;
background: #FFFFFF;
line-height: 88rpx;
padding: 0 32rpx;
display: flex;
justify-content: space-between;
box-shadow: 0 1rpx 8rpx 0 rgba(0, 0, 0, 0.04);
z-index: 9;
}
.scheduleHeader view:nth-of-type(1) {
flex: 1;
}
.scheduleHeader view:nth-of-type(2) {
width: 40rpx;
height: 40rpx;
}
.sidebar {
position: fixed;
left: -750rpx;
top: 0;
width: 750rpx;
height: 100%;
/* background: rgba(0, 0, 0, 0.19); */
z-index: 99;
}
.headerIcon {
position: relative;
}
.headerIcon>view {
position: absolute;
left: 28rpx;
top: 52rpx;
width: 12rpx;
height: 12rpx;
border: 2rpx solid #FFFFFF;
border-radius: 50%;
background: #EA0C28;
}
.headerIcon .iconicon_app1 {
font-size: 44rpx;
color: rgba(27, 38, 61, 0.4);
}
.siderbarShow {
transform: translateX(750rpx);
transition: all 400ms linear 0s;
}
.siderbarHidden {
transform: translateX(-750rpx);
transition: all 400ms linear 0s;
}
.sidebarContent {
background: #FFFFFF;
width: 640rpx;
height: 100%;
padding: 32rpx 0 32rpx 32rpx;
}
.sidebarLogo {
margin-bottom: 18rpx;
line-height: 64rpx;
font-size: 26rpx;
color: rgba(27, 38, 61, .56);
display: flex;
}
.sidebarLogo view:nth-of-type(1) {
margin-right: 34rpx;
width: 64rpx;
height: 64rpx;
border-radius: 50%;
background: #3070F2;
color: white;
overflow: hidden;
}
.sidebarLogo view:nth-of-type(1) image {
width: 64rpx;
height: 64rpx;
}
.hasAssociated, .unAssociated {
margin-top: 48rpx;
}
.associated {
font-size: 24rpx;
color: rgba(25, 31, 37, .56);
line-height: 34px;
margin-bottom: 16rpx;
}
.applicationList {
height: 104rpx;
display: flex;
align-items: center;
}
.applicationLogo {
width: 72rpx;
height: 72rpx;
margin-right: 24rpx;
}
.applicationMsg {
flex: 1;
display: flex;
border-bottom: 1px solid rgba(241, 243, 249, 1);
height: 104rpx;
align-items: center;
padding-right: 32rpx;
}
.applicationMsg>view:nth-of-type(1) {
flex: 1;
}
.applicationMsg>view:nth-of-type(1)>view:nth-of-type(1) {
font-size: 28rpx;
color: #191F25;
margin-bottom: 8rpx;
}
.applicationMsg>view:nth-of-type(1)>view:nth-of-type(2) {
opacity: 0.56;
font-size: 20rpx;
color: #191F25;
}
.operateIcon {
width: 32rpx;
height: 32rpx;
}
.operateIcon .iconright {
font-size: 22rpx;
color: rgba(27, 38, 61, .5)
}
.scheduleList {
margin-bottom: 48rpx;
}
.month {
padding: 0 32rpx;
height: 48rpx;
line-height: 48rpx;
margin-bottom: 50rpx;
font-weight: bold;
font-family: 'DINAlternate-Bold';
font-size: 48rpx;
}
.manyWeeks {
font-size: 26rpx;
color: rgba(25, 31, 37, 0.56);
height: 37rpx;
padding-left: 120rpx;
line-height: 37rpx;
margin: 48rpx 0;
}
.date {
display: flex;
padding: 0 32rpx;
margin-bottom: 48rpx;
}
.dateTime {
margin-right: 34rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
padding-top: 16rpx;
}
.dateTime>view {
font-size: 22rpx;
line-height: 24rpx;
font-weight: bolder;
color: #191F25;
margin-bottom: 4rpx;
}
.dateTime>text {
margin-left: 3rpx;
font-family: DINAlternate-Bold;
font-size: 42rpx;
color: #191F25;
line-height: 42rpx;
}
.dataSchedule>view {
width: 604rpx;
border-radius: 8rpx;
font-size: 26rpx;
color: rgba(10, 10, 10, 0.72);
height: 90rpx;
overflow: hidden;
background: rgba(10, 10, 10, 0.05);
margin-bottom: 16rpx;
}
.NoSchedule {
width: 604rpx;
border-radius: 8rpx;
font-size: 26rpx;
height: 90rpx;
padding-left: 16rpx;
box-sizing: border-box;
margin-bottom: 16rpx;
line-height: 0.9rem;
}
.NoSchedule>view:nth-of-type(1) text:nth-of-type(1) {
color: rgba(25, 31, 37, 0.56);
}
.NoSchedule>view:nth-of-type(1) text:nth-of-type(2) {
color: #3296FA;
}
.dataSchedule {
position: relative;
}
.dataSchedule .overdue {
background: rgba(10, 10, 10, .034);
color: rgba(10, 10, 10, .353);
}
.thisDay>view {
color: rgb(50, 150, 250);
}
.thisDay>text {
color: rgb(50, 150, 250);
}
.thisDayLine {
position: relative;
height: 2rpx;
background: #F25643;
width: 100%;
overflow: visible;
}
.dataSchedule .thisDayHavaMeeting {
height: 2rpx !important;
background: #F25643 !important;
overflow: visible !important;
position: absolute;
left: 0;
top: -8rpx;
}
.thisDayLine::after {
content: '';
position: absolute;
left: 0;
bottom: -3rpx;
width: 8rpx;
height: 8rpx;
border-radius: 50%;
background: #F25643;
z-index: 99;
box-sizing: border-box;
}
.dataSchedule .cancel {
width: 602rpx;
overflow: hidden;
background: url(../../assests/cancel.png) center /100% 100%;
border: 1rpx solid rgba(25, 31, 37, 0.28);
color: rgba(25, 31, 37, 0.56);
}
.dataSchedule .cancel text {
text-decoration: line-through;
}
.dataSchedule>view>view {
margin-left: 16rpx;
}
.dataScheduleName {
margin-top: 16rpx;
margin-bottom: 8rpx;
font-family: PingFangSC-Medium;
}
.dataSchedule>view:last-child {
margin-bottom: 0;
}
.dataScheduleTime {
font-size: 22rpx;
}
.createSchedule {
vertical-align: top;
font-size: 40rpx;
width: 98rpx;
height: 98rpx;
border-radius: 50%;
position: fixed;
right: 32rpx;
bottom: 98rpx;
color: white;
text-align: center;
line-height: 98rpx;
background: #3296FA;
box-shadow: 0 8px 14px 0 rgba(50, 150, 250, 0.30);
}
.startPage {
position: fixed;
height: 100%;
top: 0;
width: 100%;
background: #fff;
z-index: 99;
}
.startPage>image {
width: 603rpx;
height: 444rpx;
vertical-align: top;
margin-top: 300rpx;
margin-left: 82rpx;
z-index: 9999999;
}
.startText {
margin-top: 80rpx;
text-align: center;
font-size: 46rpx;
}
.text1 {
margin-right: 32rpx;
}
.indexScrollView {
height: calc( 100vh - 88rpx);
}
.position {
position: fixed;
top: 0;
left: 0;
}
.content {
height: 100vh;
}
/* list */
.longListLi {
height: 100rpx;
border-bottom: 1px solid #cccccc;
line-height: 100rpx;
}
.longListUl {
height: 5000rpx
}
\ No newline at end of file
<view class="position">
</view>
<view class="content">
<view class="longListUl">
<view class="longListLi" a:for="{{list}}">
{{item.key}}-{{item.value}}
</view>
</view>
</view>
<!--<block a:for="{{pageScheduleList}}"><view class="month" a:if="{{item.type == 'year'}}">
{{item.value}}年</view><view class="month" a:elif="{{item.type == 'month'}}">
{{item.value}}月</view><view class="week" a:elif="{{item.type == 'week'}}" id="{{item.dayStr}}"><view class="manyWeeks">
{{item.value}}</view></view><view class="date" a:elif="{{item.type == 'day'}}"><view class="dateTime {{item.isThisDay}}"><view>
{{item.value.week}}</view><text>{{item.value.day}}</text></view><view class="dataSchedule"><view a:for="{{item.value.value}}" a:for-item="item2" data-item="{{item2}}" class="{{ item2.isBeOverdue ? 'overdue' : item2.confirmAttendance === 0 ? 'cancel' : '' }}" onTap="nextDetail"><view class="dataScheduleName"><text>{{item2.title}}{{item2.isfirstDayOrEndDay ? `(第${item2.isFewDays}天,共${item2.duration}天)` : '' }}</text></view><view class="dataScheduleTime"><text a:if="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '0'}}">{{item2.thisDayStartTime}}</text><text a:elif="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '1'}}">全天</text><text a:elif="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '2'}}">直到{{item2.thisDayEndTime}}</text><text a:else>{{item2.thisDayStartTime}} - {{item2.thisDayEndTime}}</text></view></view></view></view><view class="date" a:elif="{{item.type == 'today'}}" id="{{item.value.dateStr}}"><view class="dateTime {{item.isThisDay}}"><view>
今天</view><text>{{item.value.day}}</text></view><view class="dataSchedule"><view a:for="{{item.value.value}}" a:for-item="item2" data-item="{{item2}}" class="{{ item2.isBeOverdue ? 'overdue' : item2.confirmAttendance === 0 ? 'cancel' : '' }}" onTap="nextDetail"><view class="dataScheduleName"><text>{{item2.title}}{{item2.isfirstDayOrEndDay ? `(第${item2.isFewDays}天,共${item2.duration}天)` : '' }}</text></view><view class="dataScheduleTime"><text a:if="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '0'}}">{{item2.thisDayStartTime}}</text><text a:elif="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '1'}}">全天</text><text a:elif="{{item2.isfirstDayOrEndDay && item2.isfirstDayOrEndDay === '2'}}">直到{{item2.thisDayEndTime}}</text><text a:else>{{item2.thisDayStartTime}} - {{item2.thisDayEndTime}}</text></view></view></view></view><view class="date" a:elif="{{item.type == 'thisDay'}}" id="{{item.value.dateStr}}"><view class="dateTime thisDay"><view>
{{item.value.week}}</view><text>{{item.value.day}}</text></view><view class="NoSchedule"><view><text>暂无日程安排,</text><text onTap="nextPage">创建日程</text></view></view></view></block> -->
\ No newline at end of file
import { RRule, RRuleSet, rrulestr } from "rrule";
import { getHomeUserSchedule1 } from "../../api/request";
import {
getFormatDate,
getCurrentMonthFirst,
getCurrentMonthLast,
throttle
} from "../../utils/utils";
import create from "dd-store";
create.Page({
mixins: [],
data: {
list: [],
allList: [],
startIndex: 0,
endIndex: 50
},
onLoad() {
let list = [];
for (let i = 0; i < 2000; i++) {
list.push({
key: i,
value: `列表${i}`
});
}
this.setData({
list: list.slice(0, 50),
allList: list
});
},
onPageScroll(e) {
console.log(e);
}
});
{
"usingComponents": {
"popup": "../../components/popup/index"
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment