打造你的專屬Vue組件:基于FullCalendar超實用“日程任務管理組件”實戰

打造你的專屬Vue組件:基于FullCalendar超實用“日程任務管理組件”實戰

在現代Web應用中,日程管理是一個常見而又關鍵的功能,它幫助用戶高效安排和追蹤日常任務及會議。Vue.js作為一個流行的前端框架,以其簡潔的語法和強大的組件化能力深受開發者喜愛。本文將手把手教你如何利用Vue 3和FullCalendar庫構建一個功能豐富、易用的日程任務管理組件,讓你的應用瞬間提升日程管理體驗。

引言

FullCalendar是一款功能全面的日歷插件,支持多種視圖展示、事件拖放編輯、外部數據源集成等功能,是構建日程管理系統的理想選擇。結合Vue 3的Composition API,我們可以輕松實現組件化開發,提高代碼的可維護性和復用性。

效果

在這里插入圖片描述

準備工作

安裝依賴

安裝FullCalendar及其必要的Vue 3適配器和視圖插件:

npm install @fullcalendar/core @fullcalendar/vue3 @fullcalendar/daygrid @fullcalendar/timegrid @fullcalendar/list

引入樣式

public/index.html中加入FullCalendar的CSS:

<head><!-- ... --><link rel="stylesheet" href="@fullcalendar/core/main.css"><link rel="stylesheet" href="@fullcalendar/daygrid/main.css"><link rel="stylesheet" href="@fullcalendar/timegrid/main.css"><link rel="stylesheet" href="@fullcalendar/list/main.css"><!-- ... -->
</head>

創建日程任務管理組件

新建組件

src/components目錄下創建Calendar.vue

<template><div class="app-container"><FullCalendar :options="calendarOptions" /></div>
</template><script setup>
import { defineComponent } from "vue";
import FullCalendar from "@fullcalendar/vue3";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import listPlugin from "@fullcalendar/list";
import interaction from "@fullcalendar/interaction";
import dayjs from 'dayjs'const matchList = ref([{id: "1",title: "第一個任務",start: "2024-05-26 13:22:24",allDay: true,color: "#FECACA",textColor: "#6B7280",},{id: "11",title: "第二個任務",start: "2024-05-26 13:22:24",end: "2024-05-28 23:22:24",allDay: true,color: "#6EE7B7",},{id: "12",title: "第三個任務",start: "2024-05-26 13:22:24",allDay: true,color: "#93C5FD",},{id: "13",title: "勞動節",start: "2024-05-01 00:00:00",allDay: true,color: "#F59E0B",editable: false,},{id: "2",title: "第二個任務",start: "2024-05-27 13:22:24",end: "2024-06-27 23:22:24",allDay: true,color: "#FBCFE8",},{id: "4",title: "第三個任務",start: "2024-05-28 13:22:24",end: "2024-046-28 23:22:24",allDay: true,color: "#EDE9FE",},
]);const handleDateSelect = (e) => {// console.log(e, "handleDateSelect");
};const handleEventClick = (e) => {// console.log(e, "handleEventClick");};const handleEvents = (e) => {// console.log(e, "handleEvents");
};
const eventDrop = (event,dayDelta,minuteDelta,allDay,revertFunc,jsEvent,ui,view
) => {};
// 開始拖拽
const startDrag = (event,jsEvent,ui)=>{console.log(event,'ssss');let obj = event.eventlet id = obj.idlet start = obj.startStrlet end = obj.endStrconsole.log([start,end],'開始拖拽時間點');
}
// 拖拽結束
const stopDrag = (event,jsEvent,ui)=>{console.log(event,'endedb');let obj = event.eventlet start = obj.startStrlet end = obj.endStrconsole.log([start,end],'結束拖拽時間點');
}
// 定義日歷配置
const calendarOptions = {plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interaction],locale: "zh-cn",firstDay: "1",initialView: "dayGridMonth", // 初始視圖weekends: true, // 顯示周末height: 800, //日歷高度eventColor: "#3BB2E3", // 全部日歷日程背景色themeSystem: "bootstrap", // 主題色(本地測試未能生效)timeGridEventMinHeight: "20", // 設置事件的最小高度aspectRatio: 1.65, // 設置日歷單元格寬度與高度的比例。headerToolbar: {left: "prev,next today",center: "title",right: "dayGridMonth,timeGridWeek,timeGridDay,listWeek",},// buttonText: {//     today: '今天',//     month: '月',//     week: '周',//     day: '日'//   },slotLabelFormat: {hour: "2-digit",minute: "2-digit",meridiem: false,hour12: false, // 設置時間為24小時},handleWindowResize: true,droppable: true, //可拖拽的editable: true,selectable: true,selectMirror: true,dayMaxEvents: true,weekends: true,selectable: true, // 是否可以選中日歷格selectMirror: true,selectMinDistance: 0, // 選中日歷格的最小距離dayMaxEvents: true,weekends: true,navLinks: true, // 天鏈接selectHelper: false,slotEventOverlap: false, // 相同時間段的多個日程視覺上是否允許重疊,默認true允許select: handleDateSelect,eventClick: handleEventClick,eventsSet: handleEvents,eventDragStart:startDrag,eventDragStop:stopDrag,events: matchList.value,
};
</script>

數據交互

在真實場景中,事件數據通常來自API。你可以使用axios或fetch等庫獲取數據,并填充到calendarOptions.events中。這里簡單模擬數據加載過程:

// 在onMounted內添加
const fetchData = async () => {try {const response = await fetch('/api/events'); // 假設的API路徑const eventsData = await response.json();calendarRef.value.getApi().addEventSource(eventsData);} catch (error) {console.error('Error fetching events:', error);}
};
fetchData();

添加、編輯、刪除事件

FullCalendar提供了豐富的API來處理事件的交互,如select用于添加新事件,eventDropeventResize用于編輯事件,eventRemove用于刪除事件。你可以通過監聽這些事件并在回調中實現相應的邏輯。

結語

至此,一個基本的日程任務管理組件已經構建完成,你可以根據項目需求進一步定制,如添加權限控制、時間區間選擇限制、事件顏色分類等高級功能。Vue 3與FullCalendar的結合,不僅讓日程管理變得簡單直觀,也極大地提升了用戶體驗。希望這篇實戰教程能幫助你在未來的項目中快速實現高效、美觀的日程管理功能。

官網文檔地址

官網文檔地址

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21165.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21165.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21165.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

編譯選項導致的結構體字節參數異常

文章目錄 前言問題描述原因分析問題解決總結 前言 在構建編譯工程時&#xff0c;會有一些對應的編譯配置選項&#xff0c;不同的編譯器&#xff0c;會有對應的配置項。本文介紹GHS工程中編譯選項配置不對應導致的異常。 問題描述 在S32K3集成工程中&#xff0c;核1的INP_SWC…

transformer中的ffn

## import torch import torch.nn as nn import torch.nn.functional as F import logging logging.basicConfig(levellogging.INFO, format%(asctime)s %(levelname)s: %(message)s) # 定義FFN層 class FeedForwardNetwork(nn.Module): def __init__(self, input_dim, hi…

python運營商身份證二要素查驗接口、身份證實名認證接口

隨著網絡服務安全需求的日益增長&#xff0c;個人信息的真實性和安全性成為了眾多在線平臺關注的焦點。近日&#xff0c;為應對這一挑戰&#xff0c;翔云人工智能接口開放平臺提供了Python語言的身份證二要素查驗接口”及“實名認證接口”&#xff0c;旨在為各行業提供高效、準…

將字符串 “()“ ““ “|“ 條件組成的復雜表達式轉換為ES查詢語句

應用場景 "()" "&" "|" 這幾個條件對于我們來說并不陌生, 其表達的邏輯非常明了, 又能通過很少的字符表達很復雜的嵌套關系, 在一些復雜的查詢中會經常用到, 因此我最近也遇到了類似的問題,一開始覺得這類的工具應該挺常見的, 結果搜了半天…

JVM垃圾收集器和內存分配策略

概述 Java內存運行時數據區的程序計數器、虛擬機棧、本地方法棧3個區域會隨著線程而產生&#xff0c;隨線程而消失。這幾個區域分配多少內存時在類結構確定下來即已知的&#xff0c;在這幾個區域內就不需要過多考慮如何回收內存的問題&#xff0c;當方法結束或者線程結束時&am…

【spring】第一篇 IOC和DI入門案例

Spring到底是如何來實現IOC和DI的&#xff0c;那接下來就通過一些簡單的入門案例&#xff0c;來演示下具體實現過程。 目錄 前期準備 一、IOC入門案例 思路分析 代碼實現 二、DI入門案例 思路分析 代碼實現 總結 前期準備 使用IDEA創建Maven項目&#xff0c;首先需要配…

JAVAEE1

Web前端&#xff1a; 1.建立web開發的息維模式寫代碼不僅僅是為了實現某個功能&#xff0c;更是學習解決問題的思維方式 2.先使用&#xff0c;再理解&#xff0c;會導致剛開始比較懵&#xff0c;不知其所以然.切忌不可深陷其中&#xff0c; 3.涉及簡單的軟件工程的設計思想&…

Springboot整合kafka簡單使用

kafka 一&#xff0c;介紹 Kafka 是一個開源的分布式流處理平臺&#xff0c;最初由 LinkedIn 開發并貢獻給 Apache 軟件基金會。它設計用于構建高性能、持久性、可伸縮和容錯的實時數據管道和流處理應用程序。 以下是 Kafka 的一些關鍵特點和概念&#xff1a; 發布-訂閱模型…

SPWM載波調制方式-三電平雜記1

方法一&#xff1a; P2 O1 N0 方法二&#xff1a;雙載波直接發波 方法三&#xff1a;負軸載波和調制波往上抬升1&#xff0c;得到使用同一個載波 在正半周在P和O切換&#xff0c;在下半軸式O和N切換

自動評論自動私信引流系統,自動化時代的挑戰與機遇

隨著科技的飛速發展&#xff0c;自動化技術已經滲透到我們生活的方方面面。從工業生產線上的機械臂到家庭中的智能助手&#xff0c;自動化不僅改變了我們的工作方式&#xff0c;也在重塑著社會的面貌。然而&#xff0c;在享受自動化帶來的便利和效率的同時&#xff0c;我們也必…

961題庫 北航計算機 MIPS基礎選擇題 附答案 選擇題形式

有題目和答案&#xff0c;沒有解析&#xff0c;不懂的題問大模型即可&#xff0c;無償分享。 第1組 習題 MIPS處理器五級流水線中&#xff0c;涉及DRAM的是 A. 取指階段 B. 譯碼階段 C. 執行階段 D. 訪存階段 MIPS處理器五級流水線中&#xff0c;R型指令保存結果的階段是 A.…

關于高版本 Plant Simulation 每次保存是 提示提交comm對話框的處理方法

關于高版本 Plant Simulation 每次保存是 提示提交comm對話框的處理方法 如下圖 將model saving history 修改為None即可 關于AutoCAD 2022 丟失模板庫的問題 從新從以下地址打開即可&#xff1a; D:\Program Files\Autodesk\AutoCAD 2022\UserDataCache\zh-cn\Template

Visual Studio Installer 點擊閃退

Visual Studio Installer 點擊閃退問題 1. 問題描述2. 錯誤類型3. 解決方法4. 結果5. 說明6. 參考 1. 問題描述 重裝了系統后&#xff08;系統版本&#xff1a;如下圖所示&#xff09;&#xff0c;我從官方網站&#xff08;https://visualstudio.microsoft.com/ ) 下載了安裝程…

Leetcode:正則表達式匹配

目錄 普通版本&#xff08;動態規劃&#xff09; 狀態表示 狀態轉移方程 優化③①情況 數學化簡分析 結合實際情況畫圖化簡分析 總結 最終代碼 題目鏈接&#xff1a;10. 正則表達式匹配 - 力扣&#xff08;LeetCode&#xff09; 好像是leetcode前100道里面最難的一道&a…

方法引用與構造方法引用

目錄 方法引用 什么是方法引用 構造方法引用 構造方法引用&#xff08;也可以稱作構造器引用&#xff09; 數組構造方法引用 方法引用 什么是方法引用 當要傳遞給 Lambda 體的操作&#xff0c;已經有實現的方法了&#xff0c;可以使用方法引用。 方法引用可以看做是 La…

PHAR反序列化

PHAR PHAR&#xff08;PHP Archive&#xff09;文件是一種歸檔文件格式&#xff0c;phar文件本質上是一種壓縮文件&#xff0c;會以序列化的形式存儲用戶自定義的meta-data。當受影響的文件操作函數調用phar文件時&#xff0c;會自動反序列化meta-data內的內容,這里就是我們反序…

頭歌頁面置換算法第3關:計算LRU算法缺頁率

2 任務:LRU算法 2.1 任務描述 設計LRU頁面置換算法模擬程序:從鍵盤輸入訪問串。計算LRU算法在不同內存頁框數時的缺頁數和缺頁率。要求程序模擬駐留集變化過程,即能模擬頁框裝入與釋放過程。 2.2任務要求 輸入串長度作為總頁框數目,補充程序完成LRU算法。 2.3算法思路 LRU算…

jmeter常用的斷言

包括&#xff08;Contains&#xff09;&#xff1a;響應內容包括需要匹配的內容即代表響應成功&#xff0c;支持正則表達式 匹配&#xff08;Matches&#xff09;&#xff1a;響應內容要完全匹配需要匹配的內容即代表響應成功&#xff0c;大小寫不敏感&#xff0c;支持正則表達…

vue html2canvas生成base64圖片和圖片高度

vue html2canvas生成圖片 exportAsBase64() {const ele document.getElementById(content);html2canvas(ele, {dpi: 96, // 分辨率 scale: 2, // 設置縮放 useCORS: true, // 允許canvas畫布內跨域請求外部鏈接圖片 bgcolor: #ffffff, // 背景顏色 logging: false, // 不…

rust之cargo install cargo-binstall 是什么

cargo-binstall 是什么 官方&#xff1a;https://lib.rs/crates/cargo-binstall Binstall 提供了一種低復雜性的機制來安裝 Rust 二進制文件&#xff0c;作為從源代碼&#xff08;通過 cargo install &#xff09;構建或手動下載軟件包的替代方案。這旨在與現有的 CI 工件和基…