@robot-admin/naive-ui-components 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +257 -0
- package/dist/C_ActionBar-DWN-woTc.css.map +1 -0
- package/dist/C_ActionBar.cjs +5 -0
- package/dist/C_ActionBar.d.cts +2 -0
- package/dist/C_ActionBar.d.ts +2 -0
- package/dist/C_ActionBar.js +4 -0
- package/dist/C_ActionBar2.js +196 -0
- package/dist/C_ActionBar2.js.map +1 -0
- package/dist/C_AntV-AFKyK6hH.css.map +1 -0
- package/dist/C_AntV.cjs +8 -0
- package/dist/C_AntV.d.cts +2 -0
- package/dist/C_AntV.d.ts +2 -0
- package/dist/C_AntV.js +4 -0
- package/dist/C_AntV2.js +3150 -0
- package/dist/C_AntV2.js.map +1 -0
- package/dist/C_Barcode-P_EFj8dC.css.map +1 -0
- package/dist/C_Barcode.cjs +4 -0
- package/dist/C_Barcode.d.cts +2 -0
- package/dist/C_Barcode.d.ts +2 -0
- package/dist/C_Barcode.js +3 -0
- package/dist/C_Barcode2.js +68 -0
- package/dist/C_Barcode2.js.map +1 -0
- package/dist/C_Captcha-C-ef41xw.css.map +1 -0
- package/dist/C_Captcha.cjs +4 -0
- package/dist/C_Captcha.d.cts +2 -0
- package/dist/C_Captcha.d.ts +2 -0
- package/dist/C_Captcha.js +3 -0
- package/dist/C_Captcha2.js +155 -0
- package/dist/C_Captcha2.js.map +1 -0
- package/dist/C_Cascade-D9kNsjsV.css.map +1 -0
- package/dist/C_Cascade.cjs +4 -0
- package/dist/C_Cascade.d.cts +2 -0
- package/dist/C_Cascade.d.ts +2 -0
- package/dist/C_Cascade.js +3 -0
- package/dist/C_Cascade2.js +103 -0
- package/dist/C_Cascade2.js.map +1 -0
- package/dist/C_City-BCQ4ipiK.css.map +1 -0
- package/dist/C_City.cjs +4 -0
- package/dist/C_City.d.cts +2 -0
- package/dist/C_City.d.ts +2 -0
- package/dist/C_City.js +3 -0
- package/dist/C_City2.js +841 -0
- package/dist/C_City2.js.map +1 -0
- package/dist/C_Code-C9kvvEmO.css.map +1 -0
- package/dist/C_Code.cjs +5 -0
- package/dist/C_Code.d.cts +2 -0
- package/dist/C_Code.d.ts +2 -0
- package/dist/C_Code.js +4 -0
- package/dist/C_Code2.js +346 -0
- package/dist/C_Code2.js.map +1 -0
- package/dist/C_CollapsePanel-BUJHuYcU.css.map +1 -0
- package/dist/C_CollapsePanel.cjs +6 -0
- package/dist/C_CollapsePanel.d.cts +2 -0
- package/dist/C_CollapsePanel.d.ts +2 -0
- package/dist/C_CollapsePanel.js +4 -0
- package/dist/C_CollapsePanel2.js +319 -0
- package/dist/C_CollapsePanel2.js.map +1 -0
- package/dist/C_Cron-yx2Ob4Jl.css.map +1 -0
- package/dist/C_Cron.cjs +15 -0
- package/dist/C_Cron.d.cts +2 -0
- package/dist/C_Cron.d.ts +2 -0
- package/dist/C_Cron.js +4 -0
- package/dist/C_Cron2.js +1209 -0
- package/dist/C_Cron2.js.map +1 -0
- package/dist/C_Date.cjs +4 -0
- package/dist/C_Date.d.cts +2 -0
- package/dist/C_Date.d.ts +2 -0
- package/dist/C_Date.js +3 -0
- package/dist/C_Date2.js +219 -0
- package/dist/C_Date2.js.map +1 -0
- package/dist/C_Draggable-C483syRC.css.map +1 -0
- package/dist/C_Draggable.cjs +5 -0
- package/dist/C_Draggable.d.cts +2 -0
- package/dist/C_Draggable.d.ts +2 -0
- package/dist/C_Draggable.js +3 -0
- package/dist/C_Draggable2.js +295 -0
- package/dist/C_Draggable2.js.map +1 -0
- package/dist/C_Editor-Bp0SyIEw.css.map +1 -0
- package/dist/C_Editor.cjs +4 -0
- package/dist/C_Editor.d.cts +2 -0
- package/dist/C_Editor.d.ts +2 -0
- package/dist/C_Editor.js +3 -0
- package/dist/C_Editor2.js +160 -0
- package/dist/C_Editor2.js.map +1 -0
- package/dist/C_FilePreview-CPqvhoCy.css.map +1 -0
- package/dist/C_FilePreview.cjs +6 -0
- package/dist/C_FilePreview.d.cts +2 -0
- package/dist/C_FilePreview.d.ts +2 -0
- package/dist/C_FilePreview.js +3 -0
- package/dist/C_FilePreview2.js +1031 -0
- package/dist/C_FilePreview2.js.map +1 -0
- package/dist/C_Form-Jx7PY3sT.css.map +1 -0
- package/dist/C_Form.cjs +15 -0
- package/dist/C_Form.d.cts +2 -0
- package/dist/C_Form.d.ts +2 -0
- package/dist/C_Form.js +4 -0
- package/dist/C_Form2.js +2510 -0
- package/dist/C_Form2.js.map +1 -0
- package/dist/C_FormSearch-DvRgxlRn.css.map +1 -0
- package/dist/C_FormSearch.cjs +6 -0
- package/dist/C_FormSearch.d.cts +2 -0
- package/dist/C_FormSearch.d.ts +2 -0
- package/dist/C_FormSearch.js +3 -0
- package/dist/C_FormSearch2.js +356 -0
- package/dist/C_FormSearch2.js.map +1 -0
- package/dist/C_FormulaEditor-DtGkt4T_.css.map +1 -0
- package/dist/C_FormulaEditor.cjs +13 -0
- package/dist/C_FormulaEditor.d.cts +2 -0
- package/dist/C_FormulaEditor.d.ts +2 -0
- package/dist/C_FormulaEditor.js +4 -0
- package/dist/C_FormulaEditor2.js +1433 -0
- package/dist/C_FormulaEditor2.js.map +1 -0
- package/dist/C_FullCalendar-BF7H0YIx.css.map +1 -0
- package/dist/C_FullCalendar.cjs +9 -0
- package/dist/C_FullCalendar.d.cts +2 -0
- package/dist/C_FullCalendar.d.ts +2 -0
- package/dist/C_FullCalendar.js +3 -0
- package/dist/C_FullCalendar2.js +377 -0
- package/dist/C_FullCalendar2.js.map +1 -0
- package/dist/C_Guide.cjs +4 -0
- package/dist/C_Guide.d.cts +2 -0
- package/dist/C_Guide.d.ts +2 -0
- package/dist/C_Guide.js +3 -0
- package/dist/C_Guide2.js +58 -0
- package/dist/C_Guide2.js.map +1 -0
- package/dist/C_Icon.cjs +4 -0
- package/dist/C_Icon.d.cts +2 -0
- package/dist/C_Icon.d.ts +2 -0
- package/dist/C_Icon.js +3 -0
- package/dist/C_Icon2.js +286 -0
- package/dist/C_Icon2.js.map +1 -0
- package/dist/C_ImageCropper-BVJfUufl.css.map +1 -0
- package/dist/C_ImageCropper.cjs +6 -0
- package/dist/C_ImageCropper.d.cts +2 -0
- package/dist/C_ImageCropper.d.ts +2 -0
- package/dist/C_ImageCropper.js +4 -0
- package/dist/C_ImageCropper2.js +723 -0
- package/dist/C_ImageCropper2.js.map +1 -0
- package/dist/C_Language.cjs +4 -0
- package/dist/C_Language.d.cts +2 -0
- package/dist/C_Language.d.ts +2 -0
- package/dist/C_Language.js +3 -0
- package/dist/C_Language2.js +72 -0
- package/dist/C_Language2.js.map +1 -0
- package/dist/C_Map-DpzeuWdX.css.map +1 -0
- package/dist/C_Map.cjs +7 -0
- package/dist/C_Map.d.cts +2 -0
- package/dist/C_Map.d.ts +2 -0
- package/dist/C_Map.js +3 -0
- package/dist/C_Map2.js +199 -0
- package/dist/C_Map2.js.map +1 -0
- package/dist/C_Markdown-BEjxknqd.css.map +1 -0
- package/dist/C_Markdown.cjs +4 -0
- package/dist/C_Markdown.d.cts +2 -0
- package/dist/C_Markdown.d.ts +2 -0
- package/dist/C_Markdown.js +3 -0
- package/dist/C_Markdown2.js +186 -0
- package/dist/C_Markdown2.js.map +1 -0
- package/dist/C_NotificationCenter-0l3TY2Gn.css.map +1 -0
- package/dist/C_NotificationCenter.cjs +20 -0
- package/dist/C_NotificationCenter.d.cts +2 -0
- package/dist/C_NotificationCenter.d.ts +2 -0
- package/dist/C_NotificationCenter.js +4 -0
- package/dist/C_NotificationCenter2.js +1383 -0
- package/dist/C_NotificationCenter2.js.map +1 -0
- package/dist/C_Progress.cjs +4 -0
- package/dist/C_Progress.d.cts +2 -0
- package/dist/C_Progress.d.ts +2 -0
- package/dist/C_Progress.js +3 -0
- package/dist/C_Progress2.js +103 -0
- package/dist/C_Progress2.js.map +1 -0
- package/dist/C_QRCode-DbdiAIPg.css.map +1 -0
- package/dist/C_QRCode.cjs +5 -0
- package/dist/C_QRCode.d.cts +2 -0
- package/dist/C_QRCode.d.ts +2 -0
- package/dist/C_QRCode.js +3 -0
- package/dist/C_QRCode2.js +218 -0
- package/dist/C_QRCode2.js.map +1 -0
- package/dist/C_Signature-zhHCbra9.css.map +1 -0
- package/dist/C_Signature.cjs +8 -0
- package/dist/C_Signature.d.cts +2 -0
- package/dist/C_Signature.d.ts +2 -0
- package/dist/C_Signature.js +4 -0
- package/dist/C_Signature2.js +618 -0
- package/dist/C_Signature2.js.map +1 -0
- package/dist/C_SplitPane-C6sBsfKY.css.map +1 -0
- package/dist/C_SplitPane.cjs +6 -0
- package/dist/C_SplitPane.d.cts +2 -0
- package/dist/C_SplitPane.d.ts +2 -0
- package/dist/C_SplitPane.js +4 -0
- package/dist/C_SplitPane2.js +356 -0
- package/dist/C_SplitPane2.js.map +1 -0
- package/dist/C_Steps-CODHN5Hs.css.map +1 -0
- package/dist/C_Steps.cjs +4 -0
- package/dist/C_Steps.d.cts +2 -0
- package/dist/C_Steps.d.ts +2 -0
- package/dist/C_Steps.js +3 -0
- package/dist/C_Steps2.js +82 -0
- package/dist/C_Steps2.js.map +1 -0
- package/dist/C_Table-DSNsntmT.css.map +1 -0
- package/dist/C_Table.cjs +19 -0
- package/dist/C_Table.d.cts +2 -0
- package/dist/C_Table.d.ts +2 -0
- package/dist/C_Table.js +5 -0
- package/dist/C_Table2.js +3009 -0
- package/dist/C_Table2.js.map +1 -0
- package/dist/C_Theme.cjs +4 -0
- package/dist/C_Theme.d.cts +2 -0
- package/dist/C_Theme.d.ts +2 -0
- package/dist/C_Theme.js +3 -0
- package/dist/C_Theme2.js +60 -0
- package/dist/C_Theme2.js.map +1 -0
- package/dist/C_Time-BvZLYraL.css.map +1 -0
- package/dist/C_Time.cjs +5 -0
- package/dist/C_Time.d.cts +2 -0
- package/dist/C_Time.d.ts +2 -0
- package/dist/C_Time.js +3 -0
- package/dist/C_Time2.js +199 -0
- package/dist/C_Time2.js.map +1 -0
- package/dist/C_Tree-0GDv--jX.css.map +1 -0
- package/dist/C_Tree.cjs +7 -0
- package/dist/C_Tree.d.cts +2 -0
- package/dist/C_Tree.d.ts +2 -0
- package/dist/C_Tree.js +4 -0
- package/dist/C_Tree2.js +441 -0
- package/dist/C_Tree2.js.map +1 -0
- package/dist/C_Upload-BXd3YYLx.css.map +1 -0
- package/dist/C_Upload.cjs +12 -0
- package/dist/C_Upload.d.cts +2 -0
- package/dist/C_Upload.d.ts +2 -0
- package/dist/C_Upload.js +4 -0
- package/dist/C_Upload2.js +1388 -0
- package/dist/C_Upload2.js.map +1 -0
- package/dist/C_VideoPlayer-DYG3RL0Q.css.map +1 -0
- package/dist/C_VideoPlayer.cjs +23 -0
- package/dist/C_VideoPlayer.d.cts +2 -0
- package/dist/C_VideoPlayer.d.ts +2 -0
- package/dist/C_VideoPlayer.js +3 -0
- package/dist/C_VideoPlayer2.js +1932 -0
- package/dist/C_VideoPlayer2.js.map +1 -0
- package/dist/C_VtableGantt-fhItIiHE.css.map +1 -0
- package/dist/C_VtableGantt.cjs +6 -0
- package/dist/C_VtableGantt.d.cts +2 -0
- package/dist/C_VtableGantt.d.ts +2 -0
- package/dist/C_VtableGantt.js +4 -0
- package/dist/C_VtableGantt2.js +873 -0
- package/dist/C_VtableGantt2.js.map +1 -0
- package/dist/C_WaterFall-8sQDFXKg.css.map +1 -0
- package/dist/C_WaterFall.cjs +13 -0
- package/dist/C_WaterFall.d.cts +2 -0
- package/dist/C_WaterFall.d.ts +2 -0
- package/dist/C_WaterFall.js +3 -0
- package/dist/C_WaterFall2.js +365 -0
- package/dist/C_WaterFall2.js.map +1 -0
- package/dist/C_WorkFlow-J-dyIuh9.css.map +1 -0
- package/dist/C_WorkFlow.cjs +8 -0
- package/dist/C_WorkFlow.d.cts +2 -0
- package/dist/C_WorkFlow.d.ts +2 -0
- package/dist/C_WorkFlow.js +4 -0
- package/dist/C_WorkFlow2.js +1984 -0
- package/dist/C_WorkFlow2.js.map +1 -0
- package/dist/chunk.js +22 -0
- package/dist/city.js +4817 -0
- package/dist/city.js.map +1 -0
- package/dist/constants.d.ts +273 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants2.d.ts +178 -0
- package/dist/constants2.d.ts.map +1 -0
- package/dist/constants3.d.ts +475 -0
- package/dist/constants3.d.ts.map +1 -0
- package/dist/constants4.d.ts +430 -0
- package/dist/constants4.d.ts.map +1 -0
- package/dist/constants5.d.ts +4283 -0
- package/dist/constants5.d.ts.map +1 -0
- package/dist/data.d.ts +67 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/export-helper.js +9 -0
- package/dist/index.cjs +409 -0
- package/dist/index.d.cts +96 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +103 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +230 -0
- package/dist/index.js.map +1 -0
- package/dist/index.vue.d.ts +80 -0
- package/dist/index.vue.d.ts.map +1 -0
- package/dist/index10.vue.d.ts +72 -0
- package/dist/index10.vue.d.ts.map +1 -0
- package/dist/index11.vue.d.ts +26 -0
- package/dist/index11.vue.d.ts.map +1 -0
- package/dist/index12.vue.d.ts +81 -0
- package/dist/index12.vue.d.ts.map +1 -0
- package/dist/index13.vue.d.ts +55 -0
- package/dist/index13.vue.d.ts.map +1 -0
- package/dist/index14.vue.d.ts +33 -0
- package/dist/index14.vue.d.ts.map +1 -0
- package/dist/index15.vue.d.ts +18 -0
- package/dist/index15.vue.d.ts.map +1 -0
- package/dist/index16.vue.d.ts +662 -0
- package/dist/index16.vue.d.ts.map +1 -0
- package/dist/index2.vue.d.ts +38 -0
- package/dist/index2.vue.d.ts.map +1 -0
- package/dist/index3.vue.d.ts +45 -0
- package/dist/index3.vue.d.ts.map +1 -0
- package/dist/index4.vue.d.ts +31 -0
- package/dist/index4.vue.d.ts.map +1 -0
- package/dist/index5.vue.d.ts +35 -0
- package/dist/index5.vue.d.ts.map +1 -0
- package/dist/index6.vue.d.ts +48 -0
- package/dist/index6.vue.d.ts.map +1 -0
- package/dist/index7.vue.d.ts +56 -0
- package/dist/index7.vue.d.ts.map +1 -0
- package/dist/index8.vue.d.ts +41 -0
- package/dist/index8.vue.d.ts.map +1 -0
- package/dist/index9.vue.d.ts +30 -0
- package/dist/index9.vue.d.ts.map +1 -0
- package/dist/storage.js +31 -0
- package/dist/storage.js.map +1 -0
- package/dist/style.css +7725 -0
- package/dist/useCalendarEvents.d.ts +148 -0
- package/dist/useCalendarEvents.d.ts.map +1 -0
- package/dist/useCollapsePanel.d.ts +132 -0
- package/dist/useCollapsePanel.d.ts.map +1 -0
- package/dist/useCropperCore.d.ts +102 -0
- package/dist/useCropperCore.d.ts.map +1 -0
- package/dist/useDraggableLayout.d.ts +194 -0
- package/dist/useDraggableLayout.d.ts.map +1 -0
- package/dist/useDynamicFormState.d.ts +4248 -0
- package/dist/useDynamicFormState.d.ts.map +1 -0
- package/dist/useEdgeInteraction.d.ts +7614 -0
- package/dist/useEdgeInteraction.d.ts.map +1 -0
- package/dist/useFullscreen.d.ts +166 -0
- package/dist/useFullscreen.d.ts.map +1 -0
- package/dist/useInfiniteScroll.d.ts +169 -0
- package/dist/useInfiniteScroll.d.ts.map +1 -0
- package/dist/useModalEdit.d.ts +960 -0
- package/dist/useModalEdit.d.ts.map +1 -0
- package/dist/useQRCode.d.ts +87 -0
- package/dist/useQRCode.d.ts.map +1 -0
- package/dist/useSearchState.d.ts +180 -0
- package/dist/useSearchState.d.ts.map +1 -0
- package/dist/useSignatureHistory.d.ts +189 -0
- package/dist/useSignatureHistory.d.ts.map +1 -0
- package/dist/useSplitResize.d.ts +158 -0
- package/dist/useSplitResize.d.ts.map +1 -0
- package/dist/useTimeSelection.d.ts +105 -0
- package/dist/useTimeSelection.d.ts.map +1 -0
- package/dist/useTreeOperations.d.ts +183 -0
- package/dist/useTreeOperations.d.ts.map +1 -0
- package/dist/useWorkflowValidation.d.ts +1052 -0
- package/dist/useWorkflowValidation.d.ts.map +1 -0
- package/package.json +342 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { t as export_helper_default } from "./export-helper.js";
|
|
2
|
+
import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, isRef, normalizeStyle, openBlock, ref, renderList, unref, watch, withCtx } from "vue";
|
|
3
|
+
import { NButton, NDatePicker, NInput, NModal, useMessage } from "naive-ui";
|
|
4
|
+
import FullCalendar from "@fullcalendar/vue3";
|
|
5
|
+
import dayGridPlugin from "@fullcalendar/daygrid";
|
|
6
|
+
import interactionPlugin from "@fullcalendar/interaction";
|
|
7
|
+
import listPlugin from "@fullcalendar/list";
|
|
8
|
+
import zhCn from "@fullcalendar/core/locales/zh-cn";
|
|
9
|
+
|
|
10
|
+
//#region src/components/C_FullCalendar/data.ts
|
|
11
|
+
const EVENT_COLORS = [
|
|
12
|
+
"#3f86ff",
|
|
13
|
+
"#ff6b6b",
|
|
14
|
+
"#67c23a",
|
|
15
|
+
"#e6a23c",
|
|
16
|
+
"#9c27b0",
|
|
17
|
+
"#00bcd4",
|
|
18
|
+
"#ff5722"
|
|
19
|
+
];
|
|
20
|
+
const DEFAULT_EDIT_FORM = {
|
|
21
|
+
id: "",
|
|
22
|
+
title: "",
|
|
23
|
+
date: Date.now(),
|
|
24
|
+
startTime: "09:00",
|
|
25
|
+
endTime: "10:00",
|
|
26
|
+
color: "#3f86ff"
|
|
27
|
+
};
|
|
28
|
+
const HEADER_TOOLBAR = {
|
|
29
|
+
left: "prev,next today",
|
|
30
|
+
center: "title",
|
|
31
|
+
right: "dayGridMonth,dayGridWeek,dayGridDay,listWeek"
|
|
32
|
+
};
|
|
33
|
+
const BUTTON_TEXT = {
|
|
34
|
+
today: "今天",
|
|
35
|
+
month: "月",
|
|
36
|
+
week: "周",
|
|
37
|
+
day: "日",
|
|
38
|
+
list: "列表"
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/components/C_FullCalendar/composables/useCalendarEvents.ts
|
|
43
|
+
function useCalendarEvents(props, emit) {
|
|
44
|
+
const message = useMessage();
|
|
45
|
+
const calendarRef = ref();
|
|
46
|
+
const internalEvents = ref([...props.events ?? []]);
|
|
47
|
+
const showActionDialog = ref(false);
|
|
48
|
+
const showEditModal = ref(false);
|
|
49
|
+
const isEditing = ref(false);
|
|
50
|
+
const selectedEvent = ref(null);
|
|
51
|
+
const editForm = ref({ ...DEFAULT_EDIT_FORM });
|
|
52
|
+
const addEventToArray = (event) => {
|
|
53
|
+
internalEvents.value = [...internalEvents.value, event];
|
|
54
|
+
emit("update:events", internalEvents.value);
|
|
55
|
+
};
|
|
56
|
+
const updateEventInArray = (eventData) => {
|
|
57
|
+
const index = internalEvents.value.findIndex((e) => e.id === eventData.id);
|
|
58
|
+
if (index !== -1) {
|
|
59
|
+
internalEvents.value = internalEvents.value.map((event, i) => i === index ? {
|
|
60
|
+
...event,
|
|
61
|
+
...eventData
|
|
62
|
+
} : event);
|
|
63
|
+
emit("update:events", internalEvents.value);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const removeEventFromArray = (eventId) => {
|
|
67
|
+
internalEvents.value = internalEvents.value.filter((e) => e.id !== eventId);
|
|
68
|
+
emit("update:events", internalEvents.value);
|
|
69
|
+
};
|
|
70
|
+
function handleEventClick(info) {
|
|
71
|
+
if (!props.editable) return;
|
|
72
|
+
info.jsEvent.preventDefault();
|
|
73
|
+
selectedEvent.value = info.event;
|
|
74
|
+
if (props.showEditDialog) showActionDialog.value = true;
|
|
75
|
+
}
|
|
76
|
+
function handleDateClick(info) {
|
|
77
|
+
if (!props.editable || !props.showAddDialog) return;
|
|
78
|
+
openAddModal(new Date(info.dateStr));
|
|
79
|
+
}
|
|
80
|
+
function handleEventDrop(info) {
|
|
81
|
+
const payload = {
|
|
82
|
+
id: info.event.id,
|
|
83
|
+
start: info.event.start,
|
|
84
|
+
end: info.event.end
|
|
85
|
+
};
|
|
86
|
+
updateEventInArray(payload);
|
|
87
|
+
emit("event-dropped", payload);
|
|
88
|
+
message.success(`事件 "${info.event.title}" 时间已更新`);
|
|
89
|
+
}
|
|
90
|
+
function handleEventResize(info) {
|
|
91
|
+
const payload = {
|
|
92
|
+
id: info.event.id,
|
|
93
|
+
start: info.event.start,
|
|
94
|
+
end: info.event.end
|
|
95
|
+
};
|
|
96
|
+
updateEventInArray(payload);
|
|
97
|
+
emit("event-updated", payload);
|
|
98
|
+
}
|
|
99
|
+
function openAddModal(date) {
|
|
100
|
+
isEditing.value = false;
|
|
101
|
+
editForm.value = {
|
|
102
|
+
...DEFAULT_EDIT_FORM,
|
|
103
|
+
date: date.getTime(),
|
|
104
|
+
color: EVENT_COLORS[Math.floor(Math.random() * EVENT_COLORS.length)]
|
|
105
|
+
};
|
|
106
|
+
showEditModal.value = true;
|
|
107
|
+
}
|
|
108
|
+
function openEditModal() {
|
|
109
|
+
if (!selectedEvent.value) return;
|
|
110
|
+
isEditing.value = true;
|
|
111
|
+
const event = selectedEvent.value;
|
|
112
|
+
const startDate = new Date(event.start);
|
|
113
|
+
const endDate = event.end ? new Date(event.end) : new Date(event.start.getTime() + 36e5);
|
|
114
|
+
editForm.value = {
|
|
115
|
+
id: event.id,
|
|
116
|
+
title: event.title,
|
|
117
|
+
date: startDate.getTime(),
|
|
118
|
+
startTime: `${String(startDate.getHours()).padStart(2, "0")}:${String(startDate.getMinutes()).padStart(2, "0")}`,
|
|
119
|
+
endTime: `${String(endDate.getHours()).padStart(2, "0")}:${String(endDate.getMinutes()).padStart(2, "0")}`,
|
|
120
|
+
color: event.backgroundColor || "#3f86ff"
|
|
121
|
+
};
|
|
122
|
+
showActionDialog.value = false;
|
|
123
|
+
showEditModal.value = true;
|
|
124
|
+
}
|
|
125
|
+
function saveEvent() {
|
|
126
|
+
if (!editForm.value.title.trim()) {
|
|
127
|
+
message.error("请输入事件标题");
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
if (editForm.value.startTime >= editForm.value.endTime) {
|
|
131
|
+
message.error("结束时间必须晚于开始时间");
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
const dateStr = new Date(editForm.value.date).toISOString().split("T")[0];
|
|
135
|
+
const eventData = {
|
|
136
|
+
id: isEditing.value ? editForm.value.id : Date.now().toString(),
|
|
137
|
+
title: editForm.value.title,
|
|
138
|
+
start: /* @__PURE__ */ new Date(`${dateStr}T${editForm.value.startTime}:00`),
|
|
139
|
+
end: /* @__PURE__ */ new Date(`${dateStr}T${editForm.value.endTime}:00`),
|
|
140
|
+
color: editForm.value.color
|
|
141
|
+
};
|
|
142
|
+
if (isEditing.value) {
|
|
143
|
+
updateEventInArray(eventData);
|
|
144
|
+
emit("event-updated", eventData);
|
|
145
|
+
message.success("事件已更新");
|
|
146
|
+
} else {
|
|
147
|
+
addEventToArray(eventData);
|
|
148
|
+
emit("event-added", eventData);
|
|
149
|
+
message.success("事件已添加");
|
|
150
|
+
}
|
|
151
|
+
showEditModal.value = false;
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
function deleteEvent() {
|
|
155
|
+
if (!selectedEvent.value) return;
|
|
156
|
+
const { id, title } = selectedEvent.value;
|
|
157
|
+
removeEventFromArray(id);
|
|
158
|
+
emit("event-deleted", {
|
|
159
|
+
id,
|
|
160
|
+
title
|
|
161
|
+
});
|
|
162
|
+
showActionDialog.value = false;
|
|
163
|
+
message.success(`已删除事件: ${title}`);
|
|
164
|
+
}
|
|
165
|
+
const calendarOptions = ref({
|
|
166
|
+
plugins: [
|
|
167
|
+
dayGridPlugin,
|
|
168
|
+
interactionPlugin,
|
|
169
|
+
listPlugin
|
|
170
|
+
],
|
|
171
|
+
locale: zhCn,
|
|
172
|
+
initialView: props.initialView ?? "dayGridMonth",
|
|
173
|
+
events: internalEvents.value,
|
|
174
|
+
headerToolbar: HEADER_TOOLBAR,
|
|
175
|
+
buttonText: BUTTON_TEXT,
|
|
176
|
+
editable: props.editable ?? true,
|
|
177
|
+
eventClick: handleEventClick,
|
|
178
|
+
dateClick: handleDateClick,
|
|
179
|
+
eventDrop: handleEventDrop,
|
|
180
|
+
eventResize: handleEventResize
|
|
181
|
+
});
|
|
182
|
+
watch(() => props.events, (newEvents) => {
|
|
183
|
+
internalEvents.value = [...newEvents ?? []];
|
|
184
|
+
}, { deep: true });
|
|
185
|
+
watch(internalEvents, (newEvents) => {
|
|
186
|
+
calendarOptions.value.events = newEvents;
|
|
187
|
+
}, { deep: true });
|
|
188
|
+
return {
|
|
189
|
+
calendarRef,
|
|
190
|
+
calendarOptions,
|
|
191
|
+
showActionDialog,
|
|
192
|
+
showEditModal,
|
|
193
|
+
isEditing,
|
|
194
|
+
selectedEvent,
|
|
195
|
+
editForm,
|
|
196
|
+
eventColors: EVENT_COLORS,
|
|
197
|
+
openEditModal,
|
|
198
|
+
saveEvent,
|
|
199
|
+
deleteEvent,
|
|
200
|
+
expose: {
|
|
201
|
+
getApi: () => calendarRef.value?.getApi(),
|
|
202
|
+
addEvent: addEventToArray,
|
|
203
|
+
updateEvent: updateEventInArray,
|
|
204
|
+
deleteEvent: removeEventFromArray,
|
|
205
|
+
getEvents: () => internalEvents.value
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
//#endregion
|
|
211
|
+
//#region src/components/C_FullCalendar/index.vue?vue&type=script&setup=true&lang.ts
|
|
212
|
+
const _hoisted_1 = { class: "c-full-calendar" };
|
|
213
|
+
const _hoisted_2 = { class: "ml-10% mt-20px" };
|
|
214
|
+
const _hoisted_3 = { style: { "padding": "20px" } };
|
|
215
|
+
const _hoisted_4 = { style: { "margin-bottom": "16px" } };
|
|
216
|
+
const _hoisted_5 = { style: { "margin-bottom": "16px" } };
|
|
217
|
+
const _hoisted_6 = { style: {
|
|
218
|
+
"display": "grid",
|
|
219
|
+
"grid-template-columns": "1fr 1fr",
|
|
220
|
+
"gap": "16px"
|
|
221
|
+
} };
|
|
222
|
+
const _hoisted_7 = { style: { "margin-top": "16px" } };
|
|
223
|
+
const _hoisted_8 = { style: {
|
|
224
|
+
"display": "flex",
|
|
225
|
+
"gap": "8px"
|
|
226
|
+
} };
|
|
227
|
+
const _hoisted_9 = ["onClick"];
|
|
228
|
+
var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
229
|
+
name: "C_FullCalendar",
|
|
230
|
+
__name: "index",
|
|
231
|
+
props: {
|
|
232
|
+
events: { default: () => [] },
|
|
233
|
+
initialView: { default: "dayGridMonth" },
|
|
234
|
+
editable: {
|
|
235
|
+
type: Boolean,
|
|
236
|
+
default: true
|
|
237
|
+
},
|
|
238
|
+
showAddDialog: {
|
|
239
|
+
type: Boolean,
|
|
240
|
+
default: true
|
|
241
|
+
},
|
|
242
|
+
showEditDialog: {
|
|
243
|
+
type: Boolean,
|
|
244
|
+
default: true
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
emits: [
|
|
248
|
+
"update:events",
|
|
249
|
+
"event-added",
|
|
250
|
+
"event-updated",
|
|
251
|
+
"event-deleted",
|
|
252
|
+
"event-dropped"
|
|
253
|
+
],
|
|
254
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
255
|
+
const { calendarRef, calendarOptions, showActionDialog, showEditModal, isEditing, selectedEvent, editForm, eventColors, openEditModal, saveEvent, deleteEvent, expose } = useCalendarEvents(__props, __emit);
|
|
256
|
+
__expose(expose);
|
|
257
|
+
return (_ctx, _cache) => {
|
|
258
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
259
|
+
createVNode(unref(FullCalendar), {
|
|
260
|
+
ref_key: "calendarRef",
|
|
261
|
+
ref: calendarRef,
|
|
262
|
+
options: unref(calendarOptions)
|
|
263
|
+
}, null, 8, ["options"]),
|
|
264
|
+
unref(showActionDialog) ? (openBlock(), createBlock(unref(NModal), {
|
|
265
|
+
key: 0,
|
|
266
|
+
show: unref(showActionDialog),
|
|
267
|
+
"onUpdate:show": _cache[0] || (_cache[0] = ($event) => isRef(showActionDialog) ? showActionDialog.value = $event : null),
|
|
268
|
+
preset: "dialog",
|
|
269
|
+
title: `事件操作 - ${unref(selectedEvent)?.title}`,
|
|
270
|
+
style: { "width": "400px" }
|
|
271
|
+
}, {
|
|
272
|
+
default: withCtx(() => [createElementVNode("div", _hoisted_2, [createVNode(unref(NButton), {
|
|
273
|
+
type: "primary",
|
|
274
|
+
onClick: unref(openEditModal),
|
|
275
|
+
style: { "margin-right": "12px" },
|
|
276
|
+
size: "small"
|
|
277
|
+
}, {
|
|
278
|
+
default: withCtx(() => _cache[6] || (_cache[6] = [createTextVNode(" 编辑 ", -1)])),
|
|
279
|
+
_: 1,
|
|
280
|
+
__: [6]
|
|
281
|
+
}, 8, ["onClick"]), createVNode(unref(NButton), {
|
|
282
|
+
type: "error",
|
|
283
|
+
onClick: unref(deleteEvent),
|
|
284
|
+
size: "small"
|
|
285
|
+
}, {
|
|
286
|
+
default: withCtx(() => _cache[7] || (_cache[7] = [createTextVNode(" 删除 ", -1)])),
|
|
287
|
+
_: 1,
|
|
288
|
+
__: [7]
|
|
289
|
+
}, 8, ["onClick"])])]),
|
|
290
|
+
_: 1
|
|
291
|
+
}, 8, ["show", "title"])) : createCommentVNode("v-if", true),
|
|
292
|
+
createVNode(unref(NModal), {
|
|
293
|
+
show: unref(showEditModal),
|
|
294
|
+
"onUpdate:show": _cache[5] || (_cache[5] = ($event) => isRef(showEditModal) ? showEditModal.value = $event : null),
|
|
295
|
+
preset: "dialog",
|
|
296
|
+
title: unref(isEditing) ? "编辑事件" : "添加事件",
|
|
297
|
+
"positive-text": "保存",
|
|
298
|
+
"negative-text": "取消",
|
|
299
|
+
onPositiveClick: unref(saveEvent)
|
|
300
|
+
}, {
|
|
301
|
+
default: withCtx(() => [createElementVNode("div", _hoisted_3, [
|
|
302
|
+
createElementVNode("div", _hoisted_4, [_cache[8] || (_cache[8] = createElementVNode("label", { style: {
|
|
303
|
+
"display": "block",
|
|
304
|
+
"margin-bottom": "8px",
|
|
305
|
+
"font-weight": "500"
|
|
306
|
+
} }, "事件标题", -1)), createVNode(unref(NInput), {
|
|
307
|
+
value: unref(editForm).title,
|
|
308
|
+
"onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(editForm).title = $event),
|
|
309
|
+
placeholder: "请输入事件标题"
|
|
310
|
+
}, null, 8, ["value"])]),
|
|
311
|
+
createElementVNode("div", _hoisted_5, [_cache[9] || (_cache[9] = createElementVNode("label", { style: {
|
|
312
|
+
"display": "block",
|
|
313
|
+
"margin-bottom": "8px",
|
|
314
|
+
"font-weight": "500"
|
|
315
|
+
} }, "事件日期", -1)), createVNode(unref(NDatePicker), {
|
|
316
|
+
value: unref(editForm).date,
|
|
317
|
+
"onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(editForm).date = $event),
|
|
318
|
+
type: "date",
|
|
319
|
+
format: "yyyy-MM-dd",
|
|
320
|
+
style: { "width": "100%" }
|
|
321
|
+
}, null, 8, ["value"])]),
|
|
322
|
+
createElementVNode("div", _hoisted_6, [createElementVNode("div", null, [_cache[10] || (_cache[10] = createElementVNode("label", { style: {
|
|
323
|
+
"display": "block",
|
|
324
|
+
"margin-bottom": "8px",
|
|
325
|
+
"font-weight": "500"
|
|
326
|
+
} }, "开始时间", -1)), createVNode(unref(NInput), {
|
|
327
|
+
value: unref(editForm).startTime,
|
|
328
|
+
"onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(editForm).startTime = $event),
|
|
329
|
+
type: "time",
|
|
330
|
+
placeholder: "09:00"
|
|
331
|
+
}, null, 8, ["value"])]), createElementVNode("div", null, [_cache[11] || (_cache[11] = createElementVNode("label", { style: {
|
|
332
|
+
"display": "block",
|
|
333
|
+
"margin-bottom": "8px",
|
|
334
|
+
"font-weight": "500"
|
|
335
|
+
} }, "结束时间", -1)), createVNode(unref(NInput), {
|
|
336
|
+
value: unref(editForm).endTime,
|
|
337
|
+
"onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(editForm).endTime = $event),
|
|
338
|
+
type: "time",
|
|
339
|
+
placeholder: "10:00"
|
|
340
|
+
}, null, 8, ["value"])])]),
|
|
341
|
+
createElementVNode("div", _hoisted_7, [_cache[12] || (_cache[12] = createElementVNode("label", { style: {
|
|
342
|
+
"display": "block",
|
|
343
|
+
"margin-bottom": "8px",
|
|
344
|
+
"font-weight": "500"
|
|
345
|
+
} }, "事件颜色", -1)), createElementVNode("div", _hoisted_8, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(eventColors), (color) => {
|
|
346
|
+
return openBlock(), createElementBlock("div", {
|
|
347
|
+
key: color,
|
|
348
|
+
style: normalizeStyle({
|
|
349
|
+
width: "30px",
|
|
350
|
+
height: "30px",
|
|
351
|
+
backgroundColor: color,
|
|
352
|
+
borderRadius: "50%",
|
|
353
|
+
cursor: "pointer",
|
|
354
|
+
border: unref(editForm).color === color ? "3px solid #000" : "2px solid #ddd"
|
|
355
|
+
}),
|
|
356
|
+
onClick: ($event) => unref(editForm).color = color
|
|
357
|
+
}, null, 12, _hoisted_9);
|
|
358
|
+
}), 128))])])
|
|
359
|
+
])]),
|
|
360
|
+
_: 1
|
|
361
|
+
}, 8, [
|
|
362
|
+
"show",
|
|
363
|
+
"title",
|
|
364
|
+
"onPositiveClick"
|
|
365
|
+
])
|
|
366
|
+
]);
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
//#endregion
|
|
372
|
+
//#region src/components/C_FullCalendar/index.vue
|
|
373
|
+
var C_FullCalendar_default = /* @__PURE__ */ export_helper_default(index_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-c70fa420"]]);
|
|
374
|
+
|
|
375
|
+
//#endregion
|
|
376
|
+
export { EVENT_COLORS as a, DEFAULT_EDIT_FORM as i, useCalendarEvents as n, HEADER_TOOLBAR as o, BUTTON_TEXT as r, C_FullCalendar_default as t };
|
|
377
|
+
//# sourceMappingURL=C_FullCalendar2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C_FullCalendar2.js","names":[],"sources":["../src/components/C_FullCalendar/data.ts","../src/components/C_FullCalendar/composables/useCalendarEvents.ts","../src/components/C_FullCalendar/index.vue","../src/components/C_FullCalendar/index.vue","../src/components/C_FullCalendar/index.vue"],"sourcesContent":["import type { CalendarEditForm } from \"./types\";\r\n\r\nexport const EVENT_COLORS = [\r\n \"#3f86ff\",\r\n \"#ff6b6b\",\r\n \"#67c23a\",\r\n \"#e6a23c\",\r\n \"#9c27b0\",\r\n \"#00bcd4\",\r\n \"#ff5722\",\r\n];\r\n\r\nexport const DEFAULT_EDIT_FORM: CalendarEditForm = {\r\n id: \"\",\r\n title: \"\",\r\n date: Date.now(),\r\n startTime: \"09:00\",\r\n endTime: \"10:00\",\r\n color: \"#3f86ff\",\r\n};\r\n\r\nexport const HEADER_TOOLBAR = {\r\n left: \"prev,next today\",\r\n center: \"title\",\r\n right: \"dayGridMonth,dayGridWeek,dayGridDay,listWeek\",\r\n};\r\n\r\nexport const BUTTON_TEXT = {\r\n today: \"今天\",\r\n month: \"月\",\r\n week: \"周\",\r\n day: \"日\",\r\n list: \"列表\",\r\n};\r\n","import { ref, watch } from \"vue\";\r\nimport { useMessage } from \"naive-ui\";\r\nimport type { Ref } from \"vue\";\r\nimport type { CalendarEvent, CalendarProps, CalendarEditForm } from \"../types\";\r\nimport {\r\n EVENT_COLORS,\r\n DEFAULT_EDIT_FORM,\r\n HEADER_TOOLBAR,\r\n BUTTON_TEXT,\r\n} from \"../data\";\r\nimport dayGridPlugin from \"@fullcalendar/daygrid\";\r\nimport interactionPlugin from \"@fullcalendar/interaction\";\r\nimport listPlugin from \"@fullcalendar/list\";\r\nimport type { CalendarOptions } from \"@fullcalendar/core\";\r\nimport zhCn from \"@fullcalendar/core/locales/zh-cn\";\r\n\r\ntype EmitFn = {\r\n (event: \"update:events\", events: CalendarEvent[]): void;\r\n (event: \"event-added\", eventData: CalendarEvent): void;\r\n (event: \"event-updated\", eventData: Partial<CalendarEvent>): void;\r\n (event: \"event-deleted\", eventData: { id: string; title: string }): void;\r\n (event: \"event-dropped\", eventData: Partial<CalendarEvent>): void;\r\n};\r\n\r\nexport function useCalendarEvents(props: CalendarProps, emit: EmitFn) {\r\n const message = useMessage();\r\n const calendarRef = ref();\r\n\r\n const internalEvents = ref<CalendarEvent[]>([...(props.events ?? [])]);\r\n\r\n const showActionDialog = ref(false);\r\n const showEditModal = ref(false);\r\n const isEditing = ref(false);\r\n const selectedEvent = ref<any>(null);\r\n const editForm = ref<CalendarEditForm>({ ...DEFAULT_EDIT_FORM });\r\n\r\n const addEventToArray = (event: CalendarEvent) => {\r\n internalEvents.value = [...internalEvents.value, event];\r\n emit(\"update:events\", internalEvents.value);\r\n };\r\n\r\n const updateEventInArray = (eventData: Partial<CalendarEvent>) => {\r\n const index = internalEvents.value.findIndex((e) => e.id === eventData.id);\r\n if (index !== -1) {\r\n internalEvents.value = internalEvents.value.map((event, i) =>\r\n i === index ? { ...event, ...eventData } : event,\r\n );\r\n emit(\"update:events\", internalEvents.value);\r\n }\r\n };\r\n\r\n const removeEventFromArray = (eventId: string) => {\r\n internalEvents.value = internalEvents.value.filter((e) => e.id !== eventId);\r\n emit(\"update:events\", internalEvents.value);\r\n };\r\n\r\n function handleEventClick(info: any) {\r\n if (!props.editable) return;\r\n info.jsEvent.preventDefault();\r\n selectedEvent.value = info.event;\r\n if (props.showEditDialog) showActionDialog.value = true;\r\n }\r\n\r\n function handleDateClick(info: any) {\r\n if (!props.editable || !props.showAddDialog) return;\r\n openAddModal(new Date(info.dateStr));\r\n }\r\n\r\n function handleEventDrop(info: any) {\r\n const payload = {\r\n id: info.event.id,\r\n start: info.event.start,\r\n end: info.event.end,\r\n };\r\n updateEventInArray(payload);\r\n emit(\"event-dropped\", payload);\r\n message.success(`事件 \"${info.event.title}\" 时间已更新`);\r\n }\r\n\r\n function handleEventResize(info: any) {\r\n const payload = {\r\n id: info.event.id,\r\n start: info.event.start,\r\n end: info.event.end,\r\n };\r\n updateEventInArray(payload);\r\n emit(\"event-updated\", payload);\r\n }\r\n\r\n function openAddModal(date: Date) {\r\n isEditing.value = false;\r\n editForm.value = {\r\n ...DEFAULT_EDIT_FORM,\r\n date: date.getTime(),\r\n color: EVENT_COLORS[Math.floor(Math.random() * EVENT_COLORS.length)],\r\n };\r\n showEditModal.value = true;\r\n }\r\n\r\n function openEditModal() {\r\n if (!selectedEvent.value) return;\r\n isEditing.value = true;\r\n const event = selectedEvent.value;\r\n const startDate = new Date(event.start);\r\n const endDate = event.end\r\n ? new Date(event.end)\r\n : new Date(event.start.getTime() + 3600000);\r\n\r\n editForm.value = {\r\n id: event.id,\r\n title: event.title,\r\n date: startDate.getTime(),\r\n startTime: `${String(startDate.getHours()).padStart(2, \"0\")}:${String(startDate.getMinutes()).padStart(2, \"0\")}`,\r\n endTime: `${String(endDate.getHours()).padStart(2, \"0\")}:${String(endDate.getMinutes()).padStart(2, \"0\")}`,\r\n color: event.backgroundColor || \"#3f86ff\",\r\n };\r\n showActionDialog.value = false;\r\n showEditModal.value = true;\r\n }\r\n\r\n function saveEvent() {\r\n if (!editForm.value.title.trim()) {\r\n message.error(\"请输入事件标题\");\r\n return false;\r\n }\r\n if (editForm.value.startTime >= editForm.value.endTime) {\r\n message.error(\"结束时间必须晚于开始时间\");\r\n return false;\r\n }\r\n\r\n const dateStr = new Date(editForm.value.date).toISOString().split(\"T\")[0];\r\n const eventData: CalendarEvent = {\r\n id: isEditing.value ? editForm.value.id : Date.now().toString(),\r\n title: editForm.value.title,\r\n start: new Date(`${dateStr}T${editForm.value.startTime}:00`),\r\n end: new Date(`${dateStr}T${editForm.value.endTime}:00`),\r\n color: editForm.value.color,\r\n };\r\n\r\n if (isEditing.value) {\r\n updateEventInArray(eventData);\r\n emit(\"event-updated\", eventData);\r\n message.success(\"事件已更新\");\r\n } else {\r\n addEventToArray(eventData);\r\n emit(\"event-added\", eventData);\r\n message.success(\"事件已添加\");\r\n }\r\n\r\n showEditModal.value = false;\r\n return true;\r\n }\r\n\r\n function deleteEvent() {\r\n if (!selectedEvent.value) return;\r\n const { id, title } = selectedEvent.value;\r\n removeEventFromArray(id);\r\n emit(\"event-deleted\", { id, title });\r\n showActionDialog.value = false;\r\n message.success(`已删除事件: ${title}`);\r\n }\r\n\r\n const calendarOptions: Ref<CalendarOptions> = ref({\r\n plugins: [dayGridPlugin, interactionPlugin, listPlugin],\r\n locale: zhCn,\r\n initialView: props.initialView ?? \"dayGridMonth\",\r\n events: internalEvents.value as any,\r\n headerToolbar: HEADER_TOOLBAR,\r\n buttonText: BUTTON_TEXT,\r\n editable: props.editable ?? true,\r\n eventClick: handleEventClick,\r\n dateClick: handleDateClick,\r\n eventDrop: handleEventDrop,\r\n eventResize: handleEventResize,\r\n });\r\n\r\n watch(\r\n () => props.events,\r\n (newEvents) => {\r\n internalEvents.value = [...(newEvents ?? [])];\r\n },\r\n { deep: true },\r\n );\r\n\r\n watch(\r\n internalEvents,\r\n (newEvents) => {\r\n calendarOptions.value.events = newEvents as any;\r\n },\r\n { deep: true },\r\n );\r\n\r\n return {\r\n calendarRef,\r\n calendarOptions,\r\n showActionDialog,\r\n showEditModal,\r\n isEditing,\r\n selectedEvent,\r\n editForm,\r\n eventColors: EVENT_COLORS,\r\n openEditModal,\r\n saveEvent,\r\n deleteEvent,\r\n expose: {\r\n getApi: () => calendarRef.value?.getApi(),\r\n addEvent: addEventToArray,\r\n updateEvent: updateEventInArray,\r\n deleteEvent: removeEventFromArray,\r\n getEvents: () => internalEvents.value,\r\n },\r\n };\r\n}\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-19\r\n * @Description: 全局日历组件 — 薄 UI 壳,逻辑由 useCalendarEvents 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-full-calendar\">\r\n <FullCalendar ref=\"calendarRef\" :options=\"calendarOptions\" />\r\n\r\n <NModal\r\n v-if=\"showActionDialog\"\r\n v-model:show=\"showActionDialog\"\r\n preset=\"dialog\"\r\n :title=\"`事件操作 - ${selectedEvent?.title}`\"\r\n style=\"width: 400px\"\r\n >\r\n <div class=\"ml-10% mt-20px\">\r\n <NButton\r\n type=\"primary\"\r\n @click=\"openEditModal\"\r\n style=\"margin-right: 12px\"\r\n size=\"small\"\r\n >\r\n 编辑\r\n </NButton>\r\n <NButton type=\"error\" @click=\"deleteEvent\" size=\"small\"> 删除 </NButton>\r\n </div>\r\n </NModal>\r\n\r\n <NModal\r\n v-model:show=\"showEditModal\"\r\n preset=\"dialog\"\r\n :title=\"isEditing ? '编辑事件' : '添加事件'\"\r\n positive-text=\"保存\"\r\n negative-text=\"取消\"\r\n @positive-click=\"saveEvent\"\r\n >\r\n <div style=\"padding: 20px\">\r\n <div style=\"margin-bottom: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件标题</label\r\n >\r\n <NInput v-model:value=\"editForm.title\" placeholder=\"请输入事件标题\" />\r\n </div>\r\n\r\n <div style=\"margin-bottom: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件日期</label\r\n >\r\n <NDatePicker\r\n v-model:value=\"editForm.date\"\r\n type=\"date\"\r\n format=\"yyyy-MM-dd\"\r\n style=\"width: 100%\"\r\n />\r\n </div>\r\n\r\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 16px\">\r\n <div>\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >开始时间</label\r\n >\r\n <NInput\r\n v-model:value=\"editForm.startTime\"\r\n type=\"time\"\r\n placeholder=\"09:00\"\r\n />\r\n </div>\r\n <div>\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >结束时间</label\r\n >\r\n <NInput\r\n v-model:value=\"editForm.endTime\"\r\n type=\"time\"\r\n placeholder=\"10:00\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div style=\"margin-top: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件颜色</label\r\n >\r\n <div style=\"display: flex; gap: 8px\">\r\n <div\r\n v-for=\"color in eventColors\"\r\n :key=\"color\"\r\n :style=\"{\r\n width: '30px',\r\n height: '30px',\r\n backgroundColor: color,\r\n borderRadius: '50%',\r\n cursor: 'pointer',\r\n border:\r\n editForm.color === color\r\n ? '3px solid #000'\r\n : '2px solid #ddd',\r\n }\"\r\n @click=\"editForm.color = color\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </NModal>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NModal, NButton, NInput, NDatePicker } from \"naive-ui\";\r\nimport FullCalendar from \"@fullcalendar/vue3\";\r\nimport { useCalendarEvents } from \"./composables/useCalendarEvents\";\r\nimport type { CalendarProps, CalendarEmits, CalendarExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_FullCalendar\" });\r\n\r\nconst props = withDefaults(defineProps<CalendarProps>(), {\r\n events: () => [],\r\n initialView: \"dayGridMonth\",\r\n editable: true,\r\n showAddDialog: true,\r\n showEditDialog: true,\r\n});\r\n\r\nconst emit = defineEmits<CalendarEmits>();\r\n\r\nconst {\r\n calendarRef,\r\n calendarOptions,\r\n showActionDialog,\r\n showEditModal,\r\n isEditing,\r\n selectedEvent,\r\n editForm,\r\n eventColors,\r\n openEditModal,\r\n saveEvent,\r\n deleteEvent,\r\n expose,\r\n} = useCalendarEvents(props, emit);\r\n\r\ndefineExpose<CalendarExpose>(expose);\r\n</script>\r\n\r\n<style scoped>\r\n.c-full-calendar {\r\n width: 100%;\r\n}\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-19\r\n * @Description: 全局日历组件 — 薄 UI 壳,逻辑由 useCalendarEvents 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-full-calendar\">\r\n <FullCalendar ref=\"calendarRef\" :options=\"calendarOptions\" />\r\n\r\n <NModal\r\n v-if=\"showActionDialog\"\r\n v-model:show=\"showActionDialog\"\r\n preset=\"dialog\"\r\n :title=\"`事件操作 - ${selectedEvent?.title}`\"\r\n style=\"width: 400px\"\r\n >\r\n <div class=\"ml-10% mt-20px\">\r\n <NButton\r\n type=\"primary\"\r\n @click=\"openEditModal\"\r\n style=\"margin-right: 12px\"\r\n size=\"small\"\r\n >\r\n 编辑\r\n </NButton>\r\n <NButton type=\"error\" @click=\"deleteEvent\" size=\"small\"> 删除 </NButton>\r\n </div>\r\n </NModal>\r\n\r\n <NModal\r\n v-model:show=\"showEditModal\"\r\n preset=\"dialog\"\r\n :title=\"isEditing ? '编辑事件' : '添加事件'\"\r\n positive-text=\"保存\"\r\n negative-text=\"取消\"\r\n @positive-click=\"saveEvent\"\r\n >\r\n <div style=\"padding: 20px\">\r\n <div style=\"margin-bottom: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件标题</label\r\n >\r\n <NInput v-model:value=\"editForm.title\" placeholder=\"请输入事件标题\" />\r\n </div>\r\n\r\n <div style=\"margin-bottom: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件日期</label\r\n >\r\n <NDatePicker\r\n v-model:value=\"editForm.date\"\r\n type=\"date\"\r\n format=\"yyyy-MM-dd\"\r\n style=\"width: 100%\"\r\n />\r\n </div>\r\n\r\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 16px\">\r\n <div>\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >开始时间</label\r\n >\r\n <NInput\r\n v-model:value=\"editForm.startTime\"\r\n type=\"time\"\r\n placeholder=\"09:00\"\r\n />\r\n </div>\r\n <div>\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >结束时间</label\r\n >\r\n <NInput\r\n v-model:value=\"editForm.endTime\"\r\n type=\"time\"\r\n placeholder=\"10:00\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div style=\"margin-top: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件颜色</label\r\n >\r\n <div style=\"display: flex; gap: 8px\">\r\n <div\r\n v-for=\"color in eventColors\"\r\n :key=\"color\"\r\n :style=\"{\r\n width: '30px',\r\n height: '30px',\r\n backgroundColor: color,\r\n borderRadius: '50%',\r\n cursor: 'pointer',\r\n border:\r\n editForm.color === color\r\n ? '3px solid #000'\r\n : '2px solid #ddd',\r\n }\"\r\n @click=\"editForm.color = color\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </NModal>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NModal, NButton, NInput, NDatePicker } from \"naive-ui\";\r\nimport FullCalendar from \"@fullcalendar/vue3\";\r\nimport { useCalendarEvents } from \"./composables/useCalendarEvents\";\r\nimport type { CalendarProps, CalendarEmits, CalendarExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_FullCalendar\" });\r\n\r\nconst props = withDefaults(defineProps<CalendarProps>(), {\r\n events: () => [],\r\n initialView: \"dayGridMonth\",\r\n editable: true,\r\n showAddDialog: true,\r\n showEditDialog: true,\r\n});\r\n\r\nconst emit = defineEmits<CalendarEmits>();\r\n\r\nconst {\r\n calendarRef,\r\n calendarOptions,\r\n showActionDialog,\r\n showEditModal,\r\n isEditing,\r\n selectedEvent,\r\n editForm,\r\n eventColors,\r\n openEditModal,\r\n saveEvent,\r\n deleteEvent,\r\n expose,\r\n} = useCalendarEvents(props, emit);\r\n\r\ndefineExpose<CalendarExpose>(expose);\r\n</script>\r\n\r\n<style scoped>\r\n.c-full-calendar {\r\n width: 100%;\r\n}\r\n</style>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-19\r\n * @Description: 全局日历组件 — 薄 UI 壳,逻辑由 useCalendarEvents 驱动\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <div class=\"c-full-calendar\">\r\n <FullCalendar ref=\"calendarRef\" :options=\"calendarOptions\" />\r\n\r\n <NModal\r\n v-if=\"showActionDialog\"\r\n v-model:show=\"showActionDialog\"\r\n preset=\"dialog\"\r\n :title=\"`事件操作 - ${selectedEvent?.title}`\"\r\n style=\"width: 400px\"\r\n >\r\n <div class=\"ml-10% mt-20px\">\r\n <NButton\r\n type=\"primary\"\r\n @click=\"openEditModal\"\r\n style=\"margin-right: 12px\"\r\n size=\"small\"\r\n >\r\n 编辑\r\n </NButton>\r\n <NButton type=\"error\" @click=\"deleteEvent\" size=\"small\"> 删除 </NButton>\r\n </div>\r\n </NModal>\r\n\r\n <NModal\r\n v-model:show=\"showEditModal\"\r\n preset=\"dialog\"\r\n :title=\"isEditing ? '编辑事件' : '添加事件'\"\r\n positive-text=\"保存\"\r\n negative-text=\"取消\"\r\n @positive-click=\"saveEvent\"\r\n >\r\n <div style=\"padding: 20px\">\r\n <div style=\"margin-bottom: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件标题</label\r\n >\r\n <NInput v-model:value=\"editForm.title\" placeholder=\"请输入事件标题\" />\r\n </div>\r\n\r\n <div style=\"margin-bottom: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件日期</label\r\n >\r\n <NDatePicker\r\n v-model:value=\"editForm.date\"\r\n type=\"date\"\r\n format=\"yyyy-MM-dd\"\r\n style=\"width: 100%\"\r\n />\r\n </div>\r\n\r\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 16px\">\r\n <div>\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >开始时间</label\r\n >\r\n <NInput\r\n v-model:value=\"editForm.startTime\"\r\n type=\"time\"\r\n placeholder=\"09:00\"\r\n />\r\n </div>\r\n <div>\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >结束时间</label\r\n >\r\n <NInput\r\n v-model:value=\"editForm.endTime\"\r\n type=\"time\"\r\n placeholder=\"10:00\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div style=\"margin-top: 16px\">\r\n <label style=\"display: block; margin-bottom: 8px; font-weight: 500\"\r\n >事件颜色</label\r\n >\r\n <div style=\"display: flex; gap: 8px\">\r\n <div\r\n v-for=\"color in eventColors\"\r\n :key=\"color\"\r\n :style=\"{\r\n width: '30px',\r\n height: '30px',\r\n backgroundColor: color,\r\n borderRadius: '50%',\r\n cursor: 'pointer',\r\n border:\r\n editForm.color === color\r\n ? '3px solid #000'\r\n : '2px solid #ddd',\r\n }\"\r\n @click=\"editForm.color = color\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </NModal>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NModal, NButton, NInput, NDatePicker } from \"naive-ui\";\r\nimport FullCalendar from \"@fullcalendar/vue3\";\r\nimport { useCalendarEvents } from \"./composables/useCalendarEvents\";\r\nimport type { CalendarProps, CalendarEmits, CalendarExpose } from \"./types\";\r\n\r\ndefineOptions({ name: \"C_FullCalendar\" });\r\n\r\nconst props = withDefaults(defineProps<CalendarProps>(), {\r\n events: () => [],\r\n initialView: \"dayGridMonth\",\r\n editable: true,\r\n showAddDialog: true,\r\n showEditDialog: true,\r\n});\r\n\r\nconst emit = defineEmits<CalendarEmits>();\r\n\r\nconst {\r\n calendarRef,\r\n calendarOptions,\r\n showActionDialog,\r\n showEditModal,\r\n isEditing,\r\n selectedEvent,\r\n editForm,\r\n eventColors,\r\n openEditModal,\r\n saveEvent,\r\n deleteEvent,\r\n expose,\r\n} = useCalendarEvents(props, emit);\r\n\r\ndefineExpose<CalendarExpose>(expose);\r\n</script>\r\n\r\n<style scoped>\r\n.c-full-calendar {\r\n width: 100%;\r\n}\r\n</style>\r\n"],"mappings":"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"}
|
package/dist/C_Guide.cjs
ADDED
package/dist/C_Guide.js
ADDED
package/dist/C_Guide2.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createBlock, createElementVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
|
|
2
|
+
import { NButton, NTooltip } from "naive-ui";
|
|
3
|
+
import { driver } from "driver.js";
|
|
4
|
+
import "driver.js/dist/driver.css";
|
|
5
|
+
|
|
6
|
+
//#region src/components/C_Guide/index.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
+
var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
8
|
+
name: "C_Guide",
|
|
9
|
+
__name: "index",
|
|
10
|
+
props: {
|
|
11
|
+
steps: { default: () => [] },
|
|
12
|
+
doneBtnText: { default: "完成" },
|
|
13
|
+
nextBtnText: { default: "下一步" },
|
|
14
|
+
prevBtnText: { default: "上一步" }
|
|
15
|
+
},
|
|
16
|
+
setup(__props, { expose: __expose }) {
|
|
17
|
+
const props = __props;
|
|
18
|
+
const startGuide = () => {
|
|
19
|
+
const driverObj = driver({
|
|
20
|
+
popoverClass: "driverjs-theme",
|
|
21
|
+
animate: true,
|
|
22
|
+
showProgress: true,
|
|
23
|
+
doneBtnText: props.doneBtnText,
|
|
24
|
+
nextBtnText: props.nextBtnText,
|
|
25
|
+
prevBtnText: props.prevBtnText
|
|
26
|
+
});
|
|
27
|
+
if (props.steps.length > 0) driverObj.setSteps(props.steps);
|
|
28
|
+
driverObj.drive();
|
|
29
|
+
};
|
|
30
|
+
__expose({ startGuide });
|
|
31
|
+
return (_ctx, _cache) => {
|
|
32
|
+
return openBlock(), createBlock(unref(NTooltip), {
|
|
33
|
+
placement: "bottom",
|
|
34
|
+
trigger: "hover"
|
|
35
|
+
}, {
|
|
36
|
+
trigger: withCtx(() => [createVNode(unref(NButton), {
|
|
37
|
+
text: "",
|
|
38
|
+
onClick: startGuide
|
|
39
|
+
}, {
|
|
40
|
+
default: withCtx(() => _cache[0] || (_cache[0] = [createElementVNode("div", { class: "i-mdi:sign-routes" }, null, -1)])),
|
|
41
|
+
_: 1,
|
|
42
|
+
__: [0]
|
|
43
|
+
})]),
|
|
44
|
+
default: withCtx(() => [_cache[1] || (_cache[1] = createElementVNode("span", null, "功能引导", -1))]),
|
|
45
|
+
_: 1,
|
|
46
|
+
__: [1]
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/components/C_Guide/index.vue
|
|
54
|
+
var C_Guide_default = index_vue_vue_type_script_setup_true_lang_default;
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
export { C_Guide_default as t };
|
|
58
|
+
//# sourceMappingURL=C_Guide2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C_Guide2.js","names":[],"sources":["../src/components/C_Guide/index.vue","../src/components/C_Guide/index.vue","../src/components/C_Guide/index.vue"],"sourcesContent":["<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-01\r\n * @Description: 用户引导组件(基于 driver.js)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NTooltip placement=\"bottom\" trigger=\"hover\">\r\n <template #trigger>\r\n <NButton text @click=\"startGuide\">\r\n <div class=\"i-mdi:sign-routes\" />\r\n </NButton>\r\n </template>\r\n <span>功能引导</span>\r\n </NTooltip>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NTooltip, NButton } from \"naive-ui\";\r\nimport { driver } from \"driver.js\";\r\nimport \"driver.js/dist/driver.css\";\r\n\r\ndefineOptions({ name: \"C_Guide\" });\r\n\r\nexport interface GuideStep {\r\n element: string;\r\n popover: {\r\n title: string;\r\n description: string;\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n };\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n steps?: GuideStep[];\r\n doneBtnText?: string;\r\n nextBtnText?: string;\r\n prevBtnText?: string;\r\n }>(),\r\n {\r\n steps: () => [],\r\n doneBtnText: \"完成\",\r\n nextBtnText: \"下一步\",\r\n prevBtnText: \"上一步\",\r\n },\r\n);\r\n\r\nconst startGuide = () => {\r\n const driverObj = driver({\r\n popoverClass: \"driverjs-theme\",\r\n animate: true,\r\n showProgress: true,\r\n doneBtnText: props.doneBtnText,\r\n nextBtnText: props.nextBtnText,\r\n prevBtnText: props.prevBtnText,\r\n });\r\n\r\n if (props.steps.length > 0) {\r\n driverObj.setSteps(props.steps);\r\n }\r\n driverObj.drive();\r\n};\r\n\r\ndefineExpose({ startGuide });\r\n</script>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-01\r\n * @Description: 用户引导组件(基于 driver.js)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NTooltip placement=\"bottom\" trigger=\"hover\">\r\n <template #trigger>\r\n <NButton text @click=\"startGuide\">\r\n <div class=\"i-mdi:sign-routes\" />\r\n </NButton>\r\n </template>\r\n <span>功能引导</span>\r\n </NTooltip>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NTooltip, NButton } from \"naive-ui\";\r\nimport { driver } from \"driver.js\";\r\nimport \"driver.js/dist/driver.css\";\r\n\r\ndefineOptions({ name: \"C_Guide\" });\r\n\r\nexport interface GuideStep {\r\n element: string;\r\n popover: {\r\n title: string;\r\n description: string;\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n };\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n steps?: GuideStep[];\r\n doneBtnText?: string;\r\n nextBtnText?: string;\r\n prevBtnText?: string;\r\n }>(),\r\n {\r\n steps: () => [],\r\n doneBtnText: \"完成\",\r\n nextBtnText: \"下一步\",\r\n prevBtnText: \"上一步\",\r\n },\r\n);\r\n\r\nconst startGuide = () => {\r\n const driverObj = driver({\r\n popoverClass: \"driverjs-theme\",\r\n animate: true,\r\n showProgress: true,\r\n doneBtnText: props.doneBtnText,\r\n nextBtnText: props.nextBtnText,\r\n prevBtnText: props.prevBtnText,\r\n });\r\n\r\n if (props.steps.length > 0) {\r\n driverObj.setSteps(props.steps);\r\n }\r\n driverObj.drive();\r\n};\r\n\r\ndefineExpose({ startGuide });\r\n</script>\r\n","<!--\r\n * @Author: ChenYu ycyplus@gmail.com\r\n * @Date: 2025-06-01\r\n * @Description: 用户引导组件(基于 driver.js)\r\n * @Migration: naive-ui-components 组件库迁移版本\r\n * Copyright (c) 2025 by CHENY, All Rights Reserved.\r\n-->\r\n<template>\r\n <NTooltip placement=\"bottom\" trigger=\"hover\">\r\n <template #trigger>\r\n <NButton text @click=\"startGuide\">\r\n <div class=\"i-mdi:sign-routes\" />\r\n </NButton>\r\n </template>\r\n <span>功能引导</span>\r\n </NTooltip>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { NTooltip, NButton } from \"naive-ui\";\r\nimport { driver } from \"driver.js\";\r\nimport \"driver.js/dist/driver.css\";\r\n\r\ndefineOptions({ name: \"C_Guide\" });\r\n\r\nexport interface GuideStep {\r\n element: string;\r\n popover: {\r\n title: string;\r\n description: string;\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n };\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n steps?: GuideStep[];\r\n doneBtnText?: string;\r\n nextBtnText?: string;\r\n prevBtnText?: string;\r\n }>(),\r\n {\r\n steps: () => [],\r\n doneBtnText: \"完成\",\r\n nextBtnText: \"下一步\",\r\n prevBtnText: \"上一步\",\r\n },\r\n);\r\n\r\nconst startGuide = () => {\r\n const driverObj = driver({\r\n popoverClass: \"driverjs-theme\",\r\n animate: true,\r\n showProgress: true,\r\n doneBtnText: props.doneBtnText,\r\n nextBtnText: props.nextBtnText,\r\n prevBtnText: props.prevBtnText,\r\n });\r\n\r\n if (props.steps.length > 0) {\r\n driverObj.setSteps(props.steps);\r\n }\r\n driverObj.drive();\r\n};\r\n\r\ndefineExpose({ startGuide });\r\n</script>\r\n"],"mappings":";;;;;;;;;;;;;;;;ECkCA,MAAM,QAAQ;EAed,MAAM,mBAAmB;GACvB,MAAM,YAAY,OAAO;IACvB,cAAc;IACd,SAAS;IACT,cAAc;IACd,aAAa,MAAM;IACnB,aAAa,MAAM;IACnB,aAAa,MAAM;IACpB,CAAC;AAEF,OAAI,MAAM,MAAM,SAAS,EACvB,WAAU,SAAS,MAAM,MAAM;AAEjC,aAAU,OAAO;;AAGnB,WAAa,EAAE,YAAY,CAAC;;uBAzD1B,YAOW,MAAA,SAAA,EAAA;IAPD,WAAU;IAAS,SAAQ;;IACxB,SAAO,cAGN,CAFV,YAEU,MAAA,QAAA,EAAA;KAFD,MAAA;KAAM,SAAO;;4BACa,OAAA,OAAA,OAAA,KAAA,CAAjC,mBAAiC,OAAA,EAA5B,OAAM,qBAAmB,EAAA,MAAA,GAAA;;;;2BAGjB,2BAAjB,mBAAiB,QAAA,MAAX,QAAI,GAAA"}
|
package/dist/C_Icon.cjs
ADDED
package/dist/C_Icon.d.ts
ADDED
package/dist/C_Icon.js
ADDED