|
@@ -0,0 +1,275 @@
|
|
|
+import { TZDate } from './tuical/toastui-calendar';
|
|
|
+
|
|
|
+import { addDate, addHours, diffDays, subDate, subtractDate } from './utils';
|
|
|
+
|
|
|
+const today = new TZDate();
|
|
|
+
|
|
|
+/*
|
|
|
+* @property {string} [id] - Event id.
|
|
|
+* @property {string} [calendarId] - Calendar id.
|
|
|
+* @property {string} [title] - Event title.
|
|
|
+* @property {string} [body] - Body content of the event.
|
|
|
+* @property {string} [isAllday] - Whether the event is all day or not.
|
|
|
+* @property {string|number|Date|TZDate} [start] - Start time of the event.
|
|
|
+* @property {string|number|Date|TZDate} [end] - End time of the event.
|
|
|
+* @property {number} [goingDuration] - Travel time which is taken to go in minutes.
|
|
|
+* @property {number} [comingDuration] - Travel time which is taken to come back in minutes.
|
|
|
+* @property {string} [location] - Location of the event.
|
|
|
+* @property {Array.<string>} [attendees] - Attendees of the event.
|
|
|
+* @property {string} [category] - Category of the event. Available categories are 'milestone', 'task', 'time' and 'allday'.
|
|
|
+* @property {string} [dueDateClass] - Classification of work events. (before work, before lunch, before work)
|
|
|
+* @property {string} [recurrenceRule] - Recurrence rule of the event.
|
|
|
+* @property {string} [state] - State of the event. Available states are 'Busy', 'Free'.
|
|
|
+* @property {boolean} [isVisible] - Whether the event is visible or not.
|
|
|
+* @property {boolean} [isPending] - Whether the event is pending or not.
|
|
|
+* @property {boolean} [isFocused] - Whether the event is focused or not.
|
|
|
+* @property {boolean} [isReadOnly] - Whether the event is read only or not.
|
|
|
+* @property {boolean} [isPrivate] - Whether the event is private or not.
|
|
|
+*/
|
|
|
+
|
|
|
+var allevents = [
|
|
|
+ {
|
|
|
+ id: '444',
|
|
|
+ calendarId: 'work',
|
|
|
+ title: '国产化设备投产',
|
|
|
+ category: 'allday',
|
|
|
+ start: addDate(today, 5),
|
|
|
+ end: addDate(today, 15),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '555',
|
|
|
+ calendarId: 'work',
|
|
|
+ title: '网银服务变更',
|
|
|
+ category: 'time',
|
|
|
+ start: addHours(today, 24),
|
|
|
+ end: addHours(today, 27),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '666',
|
|
|
+ calendarId: 'work',
|
|
|
+ title: '本地网络升级',
|
|
|
+ category: 'time',
|
|
|
+ start: addHours(today, 24),
|
|
|
+ end: addHours(today, 27),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '777',
|
|
|
+ calendarId: 'work',
|
|
|
+ title: '离中考还有 ' + diffDays(new TZDate('2023-06-18'), today) + " 天",
|
|
|
+ category: 'milestone',
|
|
|
+ start: today,
|
|
|
+ end: today,
|
|
|
+ isReadOnly: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '991',
|
|
|
+ calendarId: 'work',
|
|
|
+ title: '测试吐司日历',
|
|
|
+ category: 'time',
|
|
|
+ start: addHours(today, 24),
|
|
|
+ end: addHours(today, 27),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '992',
|
|
|
+ calendarId: 'rest',
|
|
|
+ title: '测试完成',
|
|
|
+ category: 'milestone',
|
|
|
+ start: addDate(today, 5),
|
|
|
+ end: addDate(today, 5),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '993',
|
|
|
+ calendarId: 'maintain',
|
|
|
+ title: '全天维护',
|
|
|
+ category: 'allday',
|
|
|
+ start: subtractDate(today, 2),
|
|
|
+ end: subtractDate(today, 1),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '994',
|
|
|
+ calendarId: 'work',
|
|
|
+ title: '报表开发',
|
|
|
+ category: 'task',
|
|
|
+ start: addHours(today, 48),
|
|
|
+ end: addHours(today, 51),
|
|
|
+ },
|
|
|
+];
|
|
|
+
|
|
|
+var calendars = [
|
|
|
+ {
|
|
|
+ id: 'work',
|
|
|
+ name: '工作日',
|
|
|
+ backgroundColor: '#9e5fff',
|
|
|
+ borderColor: '#9e5fff',
|
|
|
+ dragBackgroundColor: '#9e5fff',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'rest',
|
|
|
+ name: '休息日',
|
|
|
+ backgroundColor: '#00a9ff',
|
|
|
+ borderColor: '#00a9ff',
|
|
|
+ dragBackgroundColor: '#00a9ff',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'maintain',
|
|
|
+ name: '维护期',
|
|
|
+ backgroundColor: '#55a9ff',
|
|
|
+ borderColor: '#55a9ff',
|
|
|
+ dragBackgroundColor: '#55a9ff',
|
|
|
+ },
|
|
|
+];
|
|
|
+
|
|
|
+var indexcalendars = {};
|
|
|
+var indexevents = { "ALL": { name: "所有日历", events: allevents } };
|
|
|
+var titleidmap = {};
|
|
|
+var maxtitleid = 1;
|
|
|
+
|
|
|
+function getTitleID(title) {
|
|
|
+ if (titleidmap[title]) {
|
|
|
+ return titleidmap[title];
|
|
|
+ }
|
|
|
+ titleidmap[title] = "T" + maxtitleid;
|
|
|
+ maxtitleid++;
|
|
|
+ return titleidmap[title];
|
|
|
+}
|
|
|
+
|
|
|
+let param = encodeURIComponent(JSON.stringify({ start: '', end: '' }));
|
|
|
+m3.callFS("/matrix/calendar/load.js", param).then((res) => {
|
|
|
+ //console.log(res)
|
|
|
+ for (var i in calendars) {
|
|
|
+ indexcalendars[calendars[i].id] = calendars[i];
|
|
|
+ }
|
|
|
+ if (res.status == "ok" && res.message && res.message.data && res.message.data.length > 0) {
|
|
|
+ for (var i in res.message.data) {
|
|
|
+ var dat = res.message.data[i];
|
|
|
+ dat.id = allevents.length;
|
|
|
+ // console.log(dat);
|
|
|
+ allevents.push(dat);
|
|
|
+ for (var i in res.message.calendars) {
|
|
|
+ if (indexcalendars[res.message.calendars[i].id]) {
|
|
|
+ indexcalendars[res.message.calendars[i].id] = res.message.calendars[i];
|
|
|
+ for (var ni = 0; ni < calendars.length; ni++) {
|
|
|
+ calendars[ni] = res.message.calendars[i];
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ calendars.push(res.message.calendars[i]);
|
|
|
+ indexcalendars[res.message.calendars[i].id] = res.message.calendars[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (var i = 0; i < allevents.length; i++) {
|
|
|
+ var event = allevents[i];
|
|
|
+ if (!indexevents[event.calendarId]) {
|
|
|
+ var cal = indexcalendars[event.calendarId];
|
|
|
+ if (cal && cal.name) {
|
|
|
+ indexevents[event.calendarId] = { name: "所有" + cal.name, events: [] };
|
|
|
+ } else {
|
|
|
+ indexevents[event.calendarId] = { name: "all " + event.calendarId, events: [] };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var tid = getTitleID(event.title);
|
|
|
+ if (!indexevents[tid]) {
|
|
|
+ indexevents[tid] = { name: event.title, events: [] };
|
|
|
+ }
|
|
|
+ indexevents[event.calendarId].events.push(event);
|
|
|
+ indexevents[tid].events.push(event);
|
|
|
+ }
|
|
|
+ indexevents["ALL"].events.push(event);
|
|
|
+ updateproc();
|
|
|
+ }
|
|
|
+}).catch((err) => {
|
|
|
+ console.error(err);
|
|
|
+});
|
|
|
+
|
|
|
+var calendarEventsLoadedProc;
|
|
|
+var onCalendarEventsLoaded = function (fp) {
|
|
|
+ calendarEventsLoadedProc = fp;
|
|
|
+}
|
|
|
+
|
|
|
+var updateproc = function() {
|
|
|
+ var indextitles = [];
|
|
|
+ for(var k in indexevents) {
|
|
|
+ indextitles.push({id: k, name: indexevents[k].name});
|
|
|
+ }
|
|
|
+ if (calendarEventsLoadedProc) {
|
|
|
+ calendarEventsLoadedProc(indexevents, indextitles);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+var updateEvent = function (event) {
|
|
|
+ var newdata = {};
|
|
|
+ var target = {};
|
|
|
+ if (!event.target) {
|
|
|
+ newdata = event.change;
|
|
|
+ target = newdata;
|
|
|
+ } else {
|
|
|
+ for (var k in event.target) {
|
|
|
+ newdata[k] = event.target[k];
|
|
|
+ }
|
|
|
+ for (var k in event.change) {
|
|
|
+ newdata[k] = event.change[k];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var tid = getTitleID(target.title);
|
|
|
+ if (!indexevents[tid]) {
|
|
|
+ indexevents[tid] = { name: target.title, events: [] };
|
|
|
+ }
|
|
|
+ var isnew = true;
|
|
|
+ for (var i = 0; i < indexevents["ALL"].events.length; i++) {
|
|
|
+ if (indexevents["ALL"].events[i].id == target.id) {
|
|
|
+ indexevents["ALL"].events[i] = newdata;
|
|
|
+ isnew = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (isnew) {
|
|
|
+ indexevents["ALL"].events.push(newdata);
|
|
|
+ indexevents[newdata.calendarId].events.push(newdata);
|
|
|
+ indexevents[tid].events.push(newdata);
|
|
|
+ } else {
|
|
|
+ for (var i = 0; i < indexevents[target.calendarId].events.length; i++) {
|
|
|
+ if (indexevents[target.calendarId].events[i].id == target.id) {
|
|
|
+ indexevents[newdata.calendarId].events[i] = newdata;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (var i = 0; i < indexevents[tid].events.length; i++) {
|
|
|
+ if (indexevents[tid].events[i].id == target.id) {
|
|
|
+ indexevents[tid].events[i] = newdata;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ updateproc();
|
|
|
+ return indexevents;
|
|
|
+}
|
|
|
+
|
|
|
+var deleteEvent = function (event) {
|
|
|
+ for (var i = 0; i < indexevents["ALL"].events.length; i++) {
|
|
|
+ if (indexevents["ALL"].events[i].id == event.target.id) {
|
|
|
+ indexevents["ALL"].events.splice(i, 1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (var i = 0; i < indexevents[event.target.calendarId].events.length; i++) {
|
|
|
+ if (indexevents[event.target.calendarId].events[i].id == event.target.id) {
|
|
|
+ indexevents[event.target.calendarId].events.splice(i, 1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var tid = getTitleID(event.target.title);
|
|
|
+ for (var i = 0; i < indexevents[tid].events.length; i++) {
|
|
|
+ if (indexevents[tid].events[i].id == event.target.id) {
|
|
|
+ indexevents[tid].events.splice(i, 1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (indexevents[tid].length == 0) {
|
|
|
+ delete (indexevents, tid);
|
|
|
+ }
|
|
|
+ updateproc();
|
|
|
+ return indexevents;
|
|
|
+}
|
|
|
+
|
|
|
+export var events = indexevents, calendars = calendars, onCalendarEventsLoaded = onCalendarEventsLoaded, updateEvent = updateEvent, deleteEvent = deleteEvent;
|