fullcalendar使用留念(typescript、Angular)

懒得择(zhai)了,直接把项目里的copy过来了,详细api可参考最下方链接或官方文档。

import {Component, OnInit, ViewEncapsulation} from "@angular/core";
import {TrainPlanBirthService} from "./train-plan-birth.service";
import {TimeUtil} from "../../common/time-util";
import {CSSUtil} from "../../common/css-util";
import {CheckBoxUtil} from "../../common/checkBox-util";
import {ActivatedRoute, Router} from "@angular/router";
import {APPLY_STATUS} from "../../config";

declare let $: any;

@Component({
    selector: 'calendar',
    templateUrl: './train-plan-birth.component.html',
    styleUrls: ['./train-plan-birth.css'],
    encapsulation: ViewEncapsulation.None
})

export class TrainPlanBirthPage implements OnInit {

    dateParam: string;      //选择的日期
    selectedEvents: any[] = [];     //选择的事件
    applyStatus: any;   //培训需求状态
    selectedId: any[] = []; //选择的需求id
   
    ngOnInit() {
        window.dispatchEvent(new CustomEvent('calendar-ready'));

        let this_ = this;
        $.getScript('assets/plugins/fullcalendar/lib/moment.min.js').done(function () {
            $.getScript('assets/plugins/fullcalendar/fullcalendar.min.js').done(function () {
                this_.handleCalendarDemo();
            });
        });
        this.applyStatus = APPLY_STATUS;
    }

    constructor(private trainPlanBirthService: TrainPlanBirthService, private router: Router, private route: ActivatedRoute) {
    }

    /**
     * 日期变更
     */
    private changeDate() {
        $('#calendarTest').fullCalendar('gotoDate', this.dateParam);
    }

    /**
     * 合并事件
     */
    private mergeEvents() {
        if (this.selectedEvents.length != 0) {
            this.selectedEvents.forEach((item: any) => {
                this.selectedId.push(item.id);
            });
            this.router.navigate(['./merge', JSON.stringify(this.selectedId)], {relativeTo: this.route});
        } else {
            alert("请选择需要合并的需求.");
        }
    }

    /**
     * 生成日历
     */
    private handleCalendarDemo() {
        let this_ = this;

        $('#calendarTest').fullCalendar({
            header: {
                left: '',
                center: 'title',
                right: 'prev,today,next '
            },
            buttonText: {
                today: "今天",
                month: "月",
                week: "周",
                day: "天"
            },
            monthNames: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
            monthNamesShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
            dayNames: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
            dayNamesShort: ["日", "一", "二", "三", "四", "五", "六"],
            slotLabelFormat: "HH:mm",
            allDayText: "全天",
            timeFormat: "HH:mm",
            views: {
                month: {
                    titleFormat: "YYYY年M月"
                },
                week: {
                    titleFormat: "YYYY年M月D日",
                    columnFormat: "M.D dddd"
                },
                day: {
                    titleFormat: "YYYY年M月D日 dddd",
                    columnFormat: "M/D dddd"
                }
            },
            titleFormat: {month: this.dateParam},
            droppable: true, // this allows things to be dropped onto the calendar
            drop: function () {
                $(this).remove();
            },
            selectable: false, // this allows the calendar can be clicked
            selectHelper: false,
            //this is useless for now.
            select: function (start: any, end: any) {
                let title = prompt('Event Title:');
                let eventData;
                if (title) {
                    eventData = {
                        title: title,
                        start: start,
                        end: end
                    };
                    $('#calendarTest').fullCalendar('renderEvent', eventData, true); // stick? = true
                }
                $('#calendarTest').fullCalendar('unselect');
            },
            //click event
            eventClick: function (calEvent: any, jsEvent: any, view: any) {
                /*console.info("jsEvent ", jsEvent);
                 $(jsEvent.srcElement).css({
                 color: 'red'
                 });*/
                calEvent.color = null;
                CheckBoxUtil.updateSelected(jsEvent, calEvent, this_.selectedEvents);
            },
            //drop the event
            eventDrop: function (event: any, delta: any, revertFunc: any) {
                /*console.info(event.title + " was dropped on " + event.start.format() + " ,end " + event.end);*/
                if (!confirm("确定改变日程安排嘛 ?")) {
                    revertFunc();
                } else {
                    let endParam;
                    if (event.end == null) {
                        endParam = event.end;
                    } else {
                        endParam = TimeUtil.timestampToTime(event.end - 24 * 60 * 60 * 1000)
                    }
                    this_.trainPlanBirthService.trainPlanUpdateNeeds({
                        id: event.id,
                        start: event.start.format(),
                        end: endParam
                    }).subscribe((data: any) => {
                        if (data.code != 0) {
                            alert(data.message);
                            revertFunc();
                        }
                    });
                }
            },
            //resize the event
            eventResize: function (event: any, delta: any, revertFunc: any) {
                /*console.info(event.title + " was resize on " + event.start.format() + "," + event.end);*/
                if (!confirm("确定改变日程安排嘛 ?")) {
                    revertFunc();
                } else {
                    //请求后台
                    this_.trainPlanBirthService.trainPlanUpdateNeeds({
                        id: event.id,
                        start: event.start.format(),
                        end: TimeUtil.timestampToTime(event.end - 24 * 60 * 60 * 1000)
                    }).subscribe((data: any) => {
                        if (data.code != 0) {
                            alert(data.message);
                            revertFunc();
                        }
                    });
                }
            },
            editable: true, // this allows events can be moved on the calendar
            eventLimit: true, // allow "more" link when too many events
            //events(as a function)
            events: function (start: any, end: any, timezone: any, callback: any) {
                /*console.info("start: " + start + ",end: " + end);*/
                let events: any[] = [];
                //请求后台
                this_.trainPlanBirthService.trainPlanQueryNeeds({
                    startDate: this.moment(start).format("YYYY-MM-DD"),
                    endDate: this.moment(end).format("YYYY-MM-DD"),
                    applyStatus: this_.applyStatus
                }).subscribe((data: any) => {
                    if (data.code != 0) {
                        alert(data.message);
                    }
                    let tempList = data.result;
                    tempList.forEach((item: any) => {
                        //this calendar shows days less one day than the response,so I add one day to the end;
                        events.push({
                            id: item.apply_id,
                            title: item.apply_name,
                            start: TimeUtil.timestampToTime(item.begin_ts_date),
                            end: TimeUtil.timestampToTime(item.end_ts_date + 24 * 60 * 60 * 1000),
                            allDay: true,
                            color: CSSUtil.getRandomColor()
                        });
                    });
                    callback(events);
                });
            }
        });
    };
}

参考:https://www.helloweba.net/javascript/445.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,077评论 25 707
  • 文/周宗强 人这一辈子要遇到很多很多的第一次,第一次哭,第一次笑,第一次走路,第一次成功,第一次失败,它是生命的体...
    周宗强阅读 385评论 0 1
  • 不知不觉已经一半的时间过去了,在这十五天我每天坚持画画,周末孩子在家也不例外。有些收获语言可以形容,有些收获是语言...
    晴空霁月阅读 157评论 0 1
  • 亨利·詹姆斯的小说《一位女士的画像》开头是这样一句话:“在某些情况下,生活中很少有比把时间用在名为下午茶的仪式上更...
    Nesier无恙阅读 1,287评论 5 51
  • 累的时候总想找个人聊聊,哪怕从未相识,一直被认为无比强大的自己掩盖了,其实人哪有不脆弱的时候……
    wakening阅读 186评论 0 0