Programming/Spring | Spring-Boot

[Spring Boot] FullCalender 추가

seandoesdev 2023. 10. 15. 21:29

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset='utf-8' />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@6.1.9/index.global.min.js"></script>
<!-- <script src="js/index.global.min.js"></script> -->

<!-- Core CSS -->
<link rel="stylesheet" th:href="@{/assets/vendor/css/core.css}" />
<link rel="stylesheet" th:href="@{/assets/vendor/css/theme-default.css}" />


<script>
	var calendar = null;
	$(document).ready(function() {
		var calendarEl = document.getElementById('calendar');

		var calendar = new FullCalendar.Calendar(calendarEl, {
			headerToolbar : {
				start : 'today',
				center : 'title',
				end:'prev,next',
			},
			footerToolbar: {
			      start: 'dayGridMonth,dayGridWeek,dayGridDay',
			      center: '',
			      end: ''
			},
			/* customButtons: {
				addEventButton: {
					text: '일정 추가',
					click: function() {
						$("#backDropModal").modal("show"); // modal 나타내기
						
						$("#addEvent").on("click", function(){
							$.ajax({
								url: "/schedule"
							})
							const content = $("#event_content").val();
							const start_date = $("#event_start_date").val();
							const end_date = $("#event_end_date").val();
							const color = $("#event_color").val();
							
							if (content == null || content == ""){
								alert("내용을 입력하세요.");
							} else if(start_date == "" || end_date ==""){
                                alert("날짜를 입력하세요.");
                            } else if(new Date(end_date)- new Date(start_date) < 0){ // date 타입으로 변경 후 확인
                                alert("종료일이 시작일보다 먼저입니다.");
                            } else if(color == null || color == ""){
                                alert("색상을 선택해주세요.");
                            } else {
                            	let obj = {
                            			"content": content,
                            			"startDate": start_date,
                            			"endDate": end_date,
                            			"color": color
                            	}
                            }
						});
						

					}
				}
			}, */
			navLinks : true, // can click day/week names to navigate views
			editable : true,
			dayMaxEvents : true, // allow "more" link when too many events
			selectable : true, // 마우스로 선택한 날짜 클릭 시 색상 변환
			locale : 'ko', // 한국어 적용
			selectMirror : true,
			height: 30,
			contentHeight : 'auto', // 일정개수에 맞게 달력 크기 조절
			eventAdd : function() {// 이벤트가 추가되면 발생하는 이벤트
				console.log()
			},
			// eventChange: function (obj) { // 이벤트가 수정되면 발생하는 이벤트
			//     allEvent = calendar.getEvents();
			//     console.log(allEvent);
			// },
			// eventRemove: function (obj) { // 이벤트가 삭제되면 발생하는 이벤트
			//     console.log(obj);
			// },
			events : [],
			
			select: function(event){
				console.log(event);
				
				$("#backDropModal").modal("show"); // modal 나타내기
				
				$("#addEvent").on("click", function(){
					/* $.ajax({
						url: "/schedule"
					}) */
					const allDay = event.allDay; 
					const content = $("#event_content").val();
					const start_date = event.startStr;
					const end_date = event.endStr;
					const color = $("#event_color").val();
					console.log(content);
					if (content == null || content == ""){
						alert("내용을 입력하세요.");
					} else if(start_date == "" || end_date ==""){
                        alert("날짜를 입력하세요.");
                    } else if(new Date(end_date)- new Date(start_date) < 0){ // date 타입으로 변경 후 확인
                        alert("종료일이 시작일보다 먼저입니다.");
                    } else if(color == null || color == ""){
                        alert("색상을 선택해주세요.");
                    } else {
                    	console.log(start_date);
                    	$("event_start_date").val(start_date);
                    	calendar.addEvent({
                    		title: content,
                    		start: start_date,
                    		end: end_date,
                    		allDay: allDay,
                    		color: color,
                    	})
                    }
				});
			},

			/* dateClick : function(info) {
				console.log("Clicked event occurs : date = " + info.dateStr);
				addEventToCalendar({
					start : info.dateStr
				})
			} */
			
			
		});

		calendar.render();
	});

	// 이벤트 추가
	function addEventToCalendar(event) {
		console.log(event);
		calendar.addEvent(event)
	}
</script>

</head>
<body>

	<div id="calender-container">
		<div id='calendar'></div>

	</div>


	<!-- Modal -->
	<div class="modal fade" id="backDropModal" data-bs-backdrop="static" tabindex="-1">
		<div class="modal-dialog">
			<form class="modal-content">
				<div class="modal-header">
					<h5 class="modal-title" id="backDropModalTitle">일정 추가</h5>
					<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
				</div>
				<div class="modal-body">
					<div class="row">
						<div class="col mb-3">
							<label for="nameBackdrop" class="form-label" id="event_content">일정 <span class="text-danger">*</span></label>
							<input type="text" id="nameBackdrop" class="form-control" placeholder="일정 입력해주세요.">
						</div>
						<div class="row">
							<div class="col mb-0">
								<label for="dobBackdrop" class="form-label" id="event_start_date">시작일 <span class="text-danger">*</span></label>
								<input type="date" id="dobBackdrop" class="form-control">
							</div>
							<div class="col mb-0">
								<label for="dobBackdrop" class="form-label" id="event_end_date">마감일 - <small class="text-muted">선택사항</small></label>
								<input type="date" id="dobBackdrop" class="form-control">
							</div>
						</div>
						<div class="row">
							<div class="col mb-3">
								<label for="nameBackdrop" class="form-label" id="event_color">색상 </label>
								<input type="color" id="nameBackdrop" class="form-control" value="#3788d8">
							</div>
						</div>
					</div>
				</div>
				<div class="modal-footer">
					<button type="button" class="btn btn-label-secondary" data-bs-dismiss="modal">Close</button>
					<button type="button" class="btn btn-primary" id="addEvent">추가</button>
				</div>
			</form>
		</div>
	</div>

	<script th:src="@{/assets/vendor/js/bootstrap.js}"></script>
	
</body>
</html>