首页 > 其他分享 >前端

前端

时间:2024-07-29 08:59:23浏览次数:13  
标签:function 前端 event error var roomId response

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FullCalendar Example</title>
<!-- 引入 jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- 引入 FullCalendar 的 CSS 文件 -->
<link href='https://cdn.jsdelivr.net/npm/[email protected]/main.min.css' rel='stylesheet' />
<script src='https://cdn.jsdelivr.net/npm/[email protected]/main.min.js'></script>
</head>
<body>
<label for="roomSelect">选择:</label>
<select id="roomSelect">会议室</select>
<!-- FullCalendar 容器 -->
<div id="myCalendar"></div>

<!-- 您的 JavaScript 代码将放在这里 -->
<!--<script src="js/one.js"></script>-->
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('myCalendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'timeGridWeek',
editable: true,
selectable: true,
locale: 'zh-cn',
timeZone: 'local',
events: function(fetchInfo, successCallback, failureCallback) {
var roomId = document.getElementById('roomSelect').value;
if (!roomId) {
failureCallback("Please select a room first.");
return;
}
fetch('/BookId/' + roomId) // 后端API,根据roomId查询事件
.then(response => response.ok ? response.json() : Promise.reject('Failed to fetch events'))
.then(events => {
successCallback(events.map(event => ({
id: event.reservationId,
title: event.topic,
start: event.startTime,
end: event.endTime
})));
})
.catch(error => {
console.error('There was a problem with the fetch operation:', error);
failureCallback(error);
});
},
select: function(selectInfo) {
var roomId = document.getElementById('roomSelect').value; // 获取当前选中的roomId
var title = prompt('Please enter event title:');
if (title) {
var newEvent = {
// 简单的 ID 生成策略
title: title,
start: selectInfo.start,
end: selectInfo.end,
allDay: selectInfo.allDay,
extendedProps: { // 扩展属性,用于存储额外信息
roomId: roomId // 将roomId添加到事件的扩展属性中
}
};
// 将事件添加到日历中
calendar.addEvent(newEvent);
// 调用函数发送请求到后端保存事件
saveEventToBackend(newEvent);
}
selectInfo.jsEvent.preventDefault();
},
});

// 初始化日历
calendar.render();

// 加载会议室列表
function loadRoomList() {
fetch('/rooms') // 后端API,返回会议室列表
.then(response => response.ok ? response.json() : Promise.reject('Failed to fetch rooms'))
.then(rooms => {
var roomSelect = document.getElementById('roomSelect');
roomSelect.innerHTML = ''; // 清空现有选项
rooms.forEach(room => {
var option = document.createElement('option');
option.value = room.room_id;
option.textContent = room.room_name;
roomSelect.appendChild(option);
});
roomSelect.addEventListener('change', function() {
fetchEventsByRoomId(this.value);
});
// 默认选择第一个会议室并加载事件
var defaultRoomId = roomSelect.options[0].value;
calendar.refetchEvents(); // 重新获取事件

})
.catch(error => console.error('Failed to fetch room list:', error));
}

// 事件点击时的处理
calendar.on('eventClick', function(clickInfo) {
var reservationId = clickInfo.event.id;
if (confirm('Are you sure you want to delete this event?')) {
deleteEvent(reservationId).then(() => {
clickInfo.calendar.removeEventById(reservationId); // 从日历中删除事件
});
}
});

// 删除事件的函数
function deleteEvent(reservationId) {
return fetch('/deleteBook/' + reservationId, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
}
}).then(function(response) {
if (!response.ok) {
throw new Error('Failed to delete event');
}
return response.text(); // 返回响应的文本
}).then(function(text) {
alert(text); // 显示后端返回的字符串消息
window.location.reload();
}).catch(function(error) {
console.error('Error deleting event:', error);
alert('Error: ' + error.message);
});
}

// 根据roomId查询事件
function fetchEventsByRoomId(roomId) {
if (!roomId) return;

calendar.removeAllEvents(); // 清除日历上的所有事件

fetch('/BookId/' + roomId) // 后端API,根据roomId查询事件
.then(response => response.ok ? response.json() : Promise.reject('Failed to fetch events'))
.then(events => {
events.forEach(event => {
calendar.addEvent({
id: event.reservationId,
title: event.topic,
start: event.startTime,
end: event.endTime
});
});
})
.catch(error => console.error('Failed to fetch events:', error));
}

function saveEventToBackend(eventData) {
// 从事件的扩展属性中获取roomId
var roomId = eventData.extendedProps.roomId;
// 构建请求的body
var body = {
title: eventData.title,
start: eventData.start.toString(),
end: eventData.end.toString(),
roomId: roomId
};
fetch('/addReservation', { // 替换为您的后端API端点
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
})
.then(response => response.json())
.then(response => {
console.log('Event saved successfully', response);
// 事件保存成功后的逻辑
})
.catch(error => {
console.error('Error saving event', error);
// 事件保存失败后的逻辑
});
}

// 初始化操作
loadRoomList();
});
</script>
</body>
</html>

标签:function,前端,event,error,var,roomId,response
From: https://www.cnblogs.com/lz2z/p/18329288

相关文章

  • web期末作业设计网页/web前端开发期末大作业/html css网页制作成品(第51-60套/总计100
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 目前前端开发最新技术和趋势
    框架和库的更新React18:提供了并发模式和自动批处理等新特性,提升了性能和用户体验。Vue3.3:优化了组合式API和性能,增加了新特性如<scriptsetup>和<stylev-bind>。Angular14:改进了开发体验和性能,增加了更好的类型支持和独立组件。边缘计算和Jamstack边缘计......
  • 前端如何处理后端一次性返回10万条数据?
    在前端开发中,我们经常需要处理后端返回的大量数据。假设后端一次性返回10万条数据,直接在浏览器中处理和展示这些数据会导致性能问题,比如页面卡顿、内存占用过高等。本文将结合Vue项目实战,介绍如何有效地处理和展示大数据集的方法。1.后端数据处理首先,确保后端在传输数据时是经......
  • 前端如何处理后端一次性返回10万条数据?---02
    该方法和前面方法大致相同,主要通过分页加载、虚拟滚动和数据缓存1.后端数据处理首先,确保后端在传输数据时是经过压缩的,可以大大减少传输的数据量。常见的压缩方式有Gzip或Brotli。//例如,在Node.js中使用compression中间件constcompression=require('compression');cons......
  • 402.高端大气的网络科技公司网页 大学生期末大作业 Web前端网页制作 html+css+js
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有Web前端网页制作的各行各业的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这......
  • 前端物联网开发教程
    随着物联网(IoT)技术的快速发展,前端开发者有机会参与到构建智能互联世界的过程中。本文将介绍如何使用前端技术开发物联网应用,并提供一些实用的指南和技巧。物联网源码见最下方一、物联网前端开发概述物联网前端开发是指利用HTML、CSS、JavaScript等前端技术实现物联网应用的......
  • web前端学习路线图
    web前端学习路线图应该包括以下几个阶段:第一阶段:基础入门阶段HTML5+CSS3基础结构布局,PC端和移动端。JavaScript基础内容,如数据类型、函数、数组等。JavaScript高级内容,如对象、原型链、闭包等。JavaScriptES6进阶,包括箭头函数、模块化等。CSS3学习,通过CSS开发网页和......
  • 后端说,单页面SPA和前端路由是怎么回事
    没有请求的路由在传统开发中,浏览器点击一个超链接,就会像后端web服务器发送一个html文档请求,然后页面刷新。但开始单页面开发后,就完全不同了。单页面?这个概念难以理解。我用一个js作为整个web应用,然后再这个js中操作dom变化,以此来实现页面变化。这不叫单页面吗?这叫!但不完善,因为这......
  • 前端绘制一个好看炫酷的流程图
    文章目录一、效果图二、直接上代码一、效果图因为是图片,所以不能展示动画效果,你们要看具体效果,就复制下面的代码到自己的项目里面去二、直接上代码<template><divclass="part"><divclass="line_box"><svgheight="505"width="450"><d......
  • 前端性能优化实践方向与方法
    0x01代码优化与压缩(1)HTML移除不必要的空白字符、注释和冗余标签,以减少文件大小使用命令npminstallhtml-minifier-g安装HTMLMinifier使用命令html-minifier-V确认安装成功在Node.js环境中配置index.js//引入HTMLMinifierconstminify=require("h......