sa2kit 1.6.29 → 1.6.31
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/dist/AliyunOSSProvider-P6TOVKMM.mjs +6 -0
- package/dist/{AliyunOSSProvider-I7I5YGLB.mjs.map → AliyunOSSProvider-P6TOVKMM.mjs.map} +1 -1
- package/dist/AliyunOSSProvider-Z5BRBCG6.js +15 -0
- package/dist/{AliyunOSSProvider-L7JWMKS4.js.map → AliyunOSSProvider-Z5BRBCG6.js.map} +1 -1
- package/dist/ConfigService-3DIC6C3Q.js +21 -0
- package/dist/{ConfigService-7MEZXKJ5.js.map → ConfigService-3DIC6C3Q.js.map} +1 -1
- package/dist/ConfigService-V6ZK273Z.mjs +4 -0
- package/dist/{ConfigService-BV57YYFW.mjs.map → ConfigService-V6ZK273Z.mjs.map} +1 -1
- package/dist/LocalStorageProvider-3RVPCQB3.mjs +6 -0
- package/dist/{LocalStorageProvider-FVLLHBHO.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
- package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
- package/dist/{LocalStorageProvider-NBNHHWLY.js.map → LocalStorageProvider-PP7MA5OT.js.map} +1 -1
- package/dist/PMXParser-2VTA737I.js +13 -0
- package/dist/{PMXParser-YBS3B6HM.js.map → PMXParser-2VTA737I.js.map} +1 -1
- package/dist/PMXParser-RNVQL76A.mjs +4 -0
- package/dist/{PMXParser-L6IWHL4I.mjs.map → PMXParser-RNVQL76A.mjs.map} +1 -1
- package/dist/analytics/index.js +46 -45
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs +45 -44
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/analytics/server/index.js +4 -4
- package/dist/analytics/server/index.js.map +1 -1
- package/dist/analytics/server/index.mjs +4 -4
- package/dist/analytics/server/index.mjs.map +1 -1
- package/dist/api/index.js +5 -5
- package/dist/api/index.js.map +1 -1
- package/dist/api/index.mjs +5 -5
- package/dist/api/index.mjs.map +1 -1
- package/dist/audioDetection/index.js +17 -16
- package/dist/audioDetection/index.js.map +1 -1
- package/dist/audioDetection/index.mjs +17 -16
- package/dist/audioDetection/index.mjs.map +1 -1
- package/dist/auth/client/index.js +4 -4
- package/dist/auth/client/index.mjs +1 -1
- package/dist/auth/components/index.js +3 -3
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/components/index.mjs +3 -3
- package/dist/auth/components/index.mjs.map +1 -1
- package/dist/auth/index.js +29 -29
- package/dist/auth/index.mjs +5 -5
- package/dist/auth/middleware/index.js +3 -3
- package/dist/auth/middleware/index.mjs +2 -2
- package/dist/auth/routes/index.js +14 -14
- package/dist/auth/routes/index.mjs +2 -2
- package/dist/auth/services/index.js +7 -7
- package/dist/auth/services/index.mjs +1 -1
- package/dist/calendar/index.js +146 -182
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/index.mjs +139 -175
- package/dist/calendar/index.mjs.map +1 -1
- package/dist/calendar/routes/index.js +1 -1
- package/dist/calendar/routes/index.js.map +1 -1
- package/dist/calendar/routes/index.mjs +1 -1
- package/dist/calendar/routes/index.mjs.map +1 -1
- package/dist/{chunk-5YQ5B7IZ.js → chunk-24HGREE6.js} +5 -5
- package/dist/{chunk-5YQ5B7IZ.js.map → chunk-24HGREE6.js.map} +1 -1
- package/dist/{chunk-6PRFP5EG.js → chunk-25OFOKNF.js} +6 -6
- package/dist/chunk-25OFOKNF.js.map +1 -0
- package/dist/{chunk-KQGP6BTS.mjs → chunk-3DXPQ4YV.mjs} +6 -6
- package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
- package/dist/{chunk-3BGPZN4X.mjs → chunk-3NHAT7D4.mjs} +12 -12
- package/dist/chunk-3NHAT7D4.mjs.map +1 -0
- package/dist/{chunk-MW4BCIZC.mjs → chunk-4HC6M7FK.mjs} +3 -3
- package/dist/chunk-4HC6M7FK.mjs.map +1 -0
- package/dist/{chunk-ESRCX5TQ.mjs → chunk-52TN2QSS.mjs} +3 -3
- package/dist/{chunk-ESRCX5TQ.mjs.map → chunk-52TN2QSS.mjs.map} +1 -1
- package/dist/{chunk-DW2ZTOCV.js → chunk-5A7ERLKK.js} +105 -106
- package/dist/chunk-5A7ERLKK.js.map +1 -0
- package/dist/{chunk-CNTILN5J.mjs → chunk-5YQ62BKX.mjs} +20 -19
- package/dist/chunk-5YQ62BKX.mjs.map +1 -0
- package/dist/{chunk-6W5BMXJG.js → chunk-6OWNMJKG.js} +4 -4
- package/dist/{chunk-6W5BMXJG.js.map → chunk-6OWNMJKG.js.map} +1 -1
- package/dist/{chunk-WSNM4EU5.mjs → chunk-77M5AQG3.mjs} +37 -41
- package/dist/chunk-77M5AQG3.mjs.map +1 -0
- package/dist/{chunk-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
- package/dist/chunk-7VRT55ZD.js.map +1 -0
- package/dist/{chunk-LX4XX6W7.js → chunk-C54W2CMK.js} +16 -16
- package/dist/chunk-C54W2CMK.js.map +1 -0
- package/dist/{chunk-3WOAPLEG.mjs → chunk-EB4NR623.mjs} +27 -26
- package/dist/chunk-EB4NR623.mjs.map +1 -0
- package/dist/{chunk-CD77U7LZ.js → chunk-GBPLX42J.js} +9 -9
- package/dist/chunk-GBPLX42J.js.map +1 -0
- package/dist/{chunk-TFQF2HDO.mjs → chunk-HDEOCX2L.mjs} +12 -12
- package/dist/chunk-HDEOCX2L.mjs.map +1 -0
- package/dist/{chunk-LFG6FPM5.mjs → chunk-KIP2CERU.mjs} +37 -38
- package/dist/chunk-KIP2CERU.mjs.map +1 -0
- package/dist/{chunk-6YKMCPQI.mjs → chunk-KZKIH4AS.mjs} +4 -4
- package/dist/chunk-KZKIH4AS.mjs.map +1 -0
- package/dist/{chunk-6MQUBPKB.mjs → chunk-LJ4CCSSY.mjs} +3 -3
- package/dist/{chunk-6MQUBPKB.mjs.map → chunk-LJ4CCSSY.mjs.map} +1 -1
- package/dist/{chunk-TOC5FSHP.js → chunk-NJ2SNXBJ.js} +12 -12
- package/dist/chunk-NJ2SNXBJ.js.map +1 -0
- package/dist/{chunk-OCR5DS4C.mjs → chunk-PE5EAHZK.mjs} +3 -3
- package/dist/chunk-PE5EAHZK.mjs.map +1 -0
- package/dist/{chunk-TKCYPDWU.js → chunk-Q5EDCKQA.js} +27 -29
- package/dist/chunk-Q5EDCKQA.js.map +1 -0
- package/dist/{chunk-CLKKZSPZ.js → chunk-RBKGYWME.js} +20 -19
- package/dist/chunk-RBKGYWME.js.map +1 -0
- package/dist/{chunk-VRTRSEEH.mjs → chunk-RSJSZ7QH.mjs} +11 -11
- package/dist/chunk-RSJSZ7QH.mjs.map +1 -0
- package/dist/{chunk-E7RGBAYJ.js → chunk-TDCDEBGP.js} +30 -29
- package/dist/chunk-TDCDEBGP.js.map +1 -0
- package/dist/{chunk-T5OZHYVM.mjs → chunk-TVROG2Q4.mjs} +15 -15
- package/dist/chunk-TVROG2Q4.mjs.map +1 -0
- package/dist/{chunk-JZXJQMVE.js → chunk-UIFFDRTE.js} +11 -11
- package/dist/chunk-UIFFDRTE.js.map +1 -0
- package/dist/{chunk-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
- package/dist/chunk-UL6XJGUZ.js.map +1 -0
- package/dist/{chunk-A3UP56MS.js → chunk-WA67GZSZ.js} +3 -3
- package/dist/chunk-WA67GZSZ.js.map +1 -0
- package/dist/{chunk-OLHGZXN3.mjs → chunk-WEEXCPSE.mjs} +5 -5
- package/dist/chunk-WEEXCPSE.mjs.map +1 -0
- package/dist/{chunk-5GCHAXY5.js → chunk-X3UU7JHT.js} +38 -42
- package/dist/chunk-X3UU7JHT.js.map +1 -0
- package/dist/{chunk-QU5OT4DF.js → chunk-XJ7ZAGC5.js} +5 -5
- package/dist/chunk-XJ7ZAGC5.js.map +1 -0
- package/dist/{chunk-GSTLV3MB.mjs → chunk-YOTQG4NP.mjs} +26 -28
- package/dist/chunk-YOTQG4NP.mjs.map +1 -0
- package/dist/{chunk-QAT2RWAO.mjs → chunk-Z36R3P62.mjs} +7 -7
- package/dist/chunk-Z36R3P62.mjs.map +1 -0
- package/dist/{chunk-7Z5LLJ3A.js → chunk-ZWQJSZEY.js} +13 -13
- package/dist/chunk-ZWQJSZEY.js.map +1 -0
- package/dist/config/index.js +6 -6
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.mjs +6 -6
- package/dist/config/index.mjs.map +1 -1
- package/dist/config/server/index.js +37 -37
- package/dist/config/server/index.js.map +1 -1
- package/dist/config/server/index.mjs +37 -37
- package/dist/config/server/index.mjs.map +1 -1
- package/dist/i18n/index.d.mts +2 -2
- package/dist/i18n/index.d.ts +2 -2
- package/dist/i18n/index.js +16 -17
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/index.mjs +16 -17
- package/dist/i18n/index.mjs.map +1 -1
- package/dist/imageCrop/index.js +11 -10
- package/dist/imageCrop/index.js.map +1 -1
- package/dist/imageCrop/index.mjs +11 -10
- package/dist/imageCrop/index.mjs.map +1 -1
- package/dist/index.js +221 -246
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +79 -104
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.js +6 -6
- package/dist/logger/index.mjs +1 -1
- package/dist/mmd/admin/index.js +11 -10
- package/dist/mmd/admin/index.js.map +1 -1
- package/dist/mmd/admin/index.mjs +11 -10
- package/dist/mmd/admin/index.mjs.map +1 -1
- package/dist/mmd/index.js +223 -241
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +220 -238
- package/dist/mmd/index.mjs.map +1 -1
- package/dist/mmd/server/index.js +6 -6
- package/dist/mmd/server/index.js.map +1 -1
- package/dist/mmd/server/index.mjs +6 -6
- package/dist/mmd/server/index.mjs.map +1 -1
- package/dist/music/index.js +16 -16
- package/dist/music/index.mjs +2 -2
- package/dist/music/server/index.js +8 -8
- package/dist/music/server/index.mjs +1 -1
- package/dist/request/index.js +2 -2
- package/dist/request/index.js.map +1 -1
- package/dist/request/index.mjs +2 -2
- package/dist/request/index.mjs.map +1 -1
- package/dist/storage/index.js +11 -11
- package/dist/storage/index.mjs +2 -2
- package/dist/testYourself/admin/index.js +3 -3
- package/dist/testYourself/admin/index.mjs +1 -1
- package/dist/testYourself/index.js +22 -22
- package/dist/testYourself/index.js.map +1 -1
- package/dist/testYourself/index.mjs +14 -14
- package/dist/testYourself/index.mjs.map +1 -1
- package/dist/testYourself/server/index.js +4 -4
- package/dist/testYourself/server/index.mjs +1 -1
- package/dist/universalExport/index.d.mts +3 -3
- package/dist/universalExport/index.d.ts +3 -3
- package/dist/universalExport/index.js +48 -47
- package/dist/universalExport/index.js.map +1 -1
- package/dist/universalExport/index.mjs +48 -47
- package/dist/universalExport/index.mjs.map +1 -1
- package/dist/universalExport/server/index.js +29 -29
- package/dist/universalExport/server/index.js.map +1 -1
- package/dist/universalExport/server/index.mjs +28 -28
- package/dist/universalExport/server/index.mjs.map +1 -1
- package/dist/universalFile/index.d.mts +3 -3
- package/dist/universalFile/index.d.ts +3 -3
- package/dist/universalFile/index.js +73 -72
- package/dist/universalFile/index.js.map +1 -1
- package/dist/universalFile/index.mjs +73 -72
- package/dist/universalFile/index.mjs.map +1 -1
- package/dist/universalFile/server/index.js +258 -260
- package/dist/universalFile/server/index.js.map +1 -1
- package/dist/universalFile/server/index.mjs +244 -246
- package/dist/universalFile/server/index.mjs.map +1 -1
- package/dist/utils/index.js +11 -11
- package/dist/utils/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/AliyunOSSProvider-I7I5YGLB.mjs +0 -6
- package/dist/AliyunOSSProvider-L7JWMKS4.js +0 -15
- package/dist/ConfigService-7MEZXKJ5.js +0 -21
- package/dist/ConfigService-BV57YYFW.mjs +0 -4
- package/dist/LocalStorageProvider-FVLLHBHO.mjs +0 -6
- package/dist/LocalStorageProvider-NBNHHWLY.js +0 -15
- package/dist/PMXParser-L6IWHL4I.mjs +0 -4
- package/dist/PMXParser-YBS3B6HM.js +0 -13
- package/dist/chunk-3BGPZN4X.mjs.map +0 -1
- package/dist/chunk-3WOAPLEG.mjs.map +0 -1
- package/dist/chunk-5GCHAXY5.js.map +0 -1
- package/dist/chunk-6PRFP5EG.js.map +0 -1
- package/dist/chunk-6YKMCPQI.mjs.map +0 -1
- package/dist/chunk-7Z5LLJ3A.js.map +0 -1
- package/dist/chunk-A3UP56MS.js.map +0 -1
- package/dist/chunk-CD77U7LZ.js.map +0 -1
- package/dist/chunk-CLKKZSPZ.js.map +0 -1
- package/dist/chunk-CNTILN5J.mjs.map +0 -1
- package/dist/chunk-DUHZ7VZP.js.map +0 -1
- package/dist/chunk-DW2ZTOCV.js.map +0 -1
- package/dist/chunk-E7RGBAYJ.js.map +0 -1
- package/dist/chunk-GSTLV3MB.mjs.map +0 -1
- package/dist/chunk-JZXJQMVE.js.map +0 -1
- package/dist/chunk-KQGP6BTS.mjs.map +0 -1
- package/dist/chunk-LFG6FPM5.mjs.map +0 -1
- package/dist/chunk-LX4XX6W7.js.map +0 -1
- package/dist/chunk-MW4BCIZC.mjs.map +0 -1
- package/dist/chunk-OCR5DS4C.mjs.map +0 -1
- package/dist/chunk-OLHGZXN3.mjs.map +0 -1
- package/dist/chunk-QAT2RWAO.mjs.map +0 -1
- package/dist/chunk-QU5OT4DF.js.map +0 -1
- package/dist/chunk-T5OZHYVM.mjs.map +0 -1
- package/dist/chunk-TFQF2HDO.mjs.map +0 -1
- package/dist/chunk-TKCYPDWU.js.map +0 -1
- package/dist/chunk-TOC5FSHP.js.map +0 -1
- package/dist/chunk-UOFTHYIH.js.map +0 -1
- package/dist/chunk-VRTRSEEH.mjs.map +0 -1
- package/dist/chunk-WSNM4EU5.mjs.map +0 -1
package/dist/calendar/index.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { SearchBox, ConfirmModal, Modal } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
import { SearchBox, ConfirmModal, Modal } from '../chunk-KIP2CERU.mjs';
|
|
2
|
+
import '../chunk-3NHAT7D4.mjs';
|
|
3
|
+
import '../chunk-3DXPQ4YV.mjs';
|
|
4
4
|
import '../chunk-BJTO5JO5.mjs';
|
|
5
5
|
import React2, { useState, useMemo, useCallback, useEffect } from 'react';
|
|
6
|
+
import { clsx } from 'clsx';
|
|
6
7
|
import { useDraggable, useDroppable, DndContext, DragOverlay } from '@dnd-kit/core';
|
|
7
8
|
|
|
8
9
|
// src/calendar/types/index.ts
|
|
@@ -75,7 +76,7 @@ function formatDate(date) {
|
|
|
75
76
|
const year = date.getFullYear();
|
|
76
77
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
77
78
|
const day = String(date.getDate()).padStart(2, "0");
|
|
78
|
-
return
|
|
79
|
+
return year + "-" + month + "-" + day;
|
|
79
80
|
}
|
|
80
81
|
function formatTime(date) {
|
|
81
82
|
return date.toLocaleTimeString("zh-CN", {
|
|
@@ -103,7 +104,7 @@ function toLocalISOString(date) {
|
|
|
103
104
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
104
105
|
const seconds = String(date.getSeconds()).padStart(2, "0");
|
|
105
106
|
const milliseconds = String(date.getMilliseconds()).padStart(3, "0");
|
|
106
|
-
return
|
|
107
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes + ":" + seconds + "." + milliseconds;
|
|
107
108
|
}
|
|
108
109
|
function getMonthStart(date) {
|
|
109
110
|
return new Date(date.getFullYear(), date.getMonth(), 1);
|
|
@@ -250,9 +251,9 @@ function getRelativeTime(date, locale = "zh-CN") {
|
|
|
250
251
|
} else if (diffInDays === -1) {
|
|
251
252
|
return "\u6628\u5929";
|
|
252
253
|
} else if (diffInDays > 1 && diffInDays <= 7) {
|
|
253
|
-
return
|
|
254
|
+
return diffInDays + "\u5929\u540E";
|
|
254
255
|
} else if (diffInDays < -1 && diffInDays >= -7) {
|
|
255
|
-
return
|
|
256
|
+
return Math.abs(diffInDays) + "\u5929\u524D";
|
|
256
257
|
}
|
|
257
258
|
return formatDate(date);
|
|
258
259
|
}
|
|
@@ -453,13 +454,13 @@ function EventList({
|
|
|
453
454
|
"button",
|
|
454
455
|
{
|
|
455
456
|
onClick: () => handleSortChange(field),
|
|
456
|
-
className:
|
|
457
|
+
className: clsx("flex items-center px-3 py-1.5 text-sm font-medium rounded-lg transition-colors", isActive ? "bg-blue-100 text-blue-700" : "text-gray-600 hover:bg-gray-100")
|
|
457
458
|
},
|
|
458
459
|
label,
|
|
459
460
|
/* @__PURE__ */ React2.createElement(
|
|
460
461
|
"svg",
|
|
461
462
|
{
|
|
462
|
-
className:
|
|
463
|
+
className: clsx("ml-1 w-4 h-4 transition-transform", isActive ? isAsc ? "rotate-180" : "" : "opacity-50"),
|
|
463
464
|
fill: "none",
|
|
464
465
|
stroke: "currentColor",
|
|
465
466
|
viewBox: "0 0 24 24"
|
|
@@ -504,10 +505,10 @@ function EventList({
|
|
|
504
505
|
"div",
|
|
505
506
|
{
|
|
506
507
|
key: event.id,
|
|
507
|
-
className:
|
|
508
|
+
className: clsx("p-4 rounded-lg border-l-4 cursor-pointer hover:shadow-md transition-all", getEventColorClass(event.color), isSelected ? "ring-2 ring-blue-500 ring-opacity-50" : ""),
|
|
508
509
|
onClick: () => !isSelectionMode && onEventClick(event)
|
|
509
510
|
},
|
|
510
|
-
/* @__PURE__ */ React2.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-start gap-3 flex-1" }, isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "pt-1" }, renderCheckbox(event.id)), /* @__PURE__ */ React2.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-3 mb-2" }, /* @__PURE__ */ React2.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, event.title), /* @__PURE__ */ React2.createElement("span", { className:
|
|
511
|
+
/* @__PURE__ */ React2.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-start gap-3 flex-1" }, isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "pt-1" }, renderCheckbox(event.id)), /* @__PURE__ */ React2.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-3 mb-2" }, /* @__PURE__ */ React2.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, event.title), /* @__PURE__ */ React2.createElement("span", { className: clsx("px-2 py-1 text-xs font-medium rounded border", priorityDisplay.color) }, priorityDisplay.text)), event.description && /* @__PURE__ */ React2.createElement("p", { className: "text-gray-600 mb-2 line-clamp-2" }, event.description), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-4 text-sm text-gray-500" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" })), /* @__PURE__ */ React2.createElement("span", null, event.startTime.toLocaleDateString("zh-CN"), " ", !event.allDay && event.startTime.toLocaleTimeString("zh-CN", { hour: "2-digit", minute: "2-digit" }))), event.location && /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" }), /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z" })), /* @__PURE__ */ React2.createElement("span", null, event.location))))), !isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-2 ml-4" }, /* @__PURE__ */ React2.createElement(
|
|
511
512
|
"button",
|
|
512
513
|
{
|
|
513
514
|
onClick: (e) => {
|
|
@@ -539,10 +540,10 @@ function EventList({
|
|
|
539
540
|
"div",
|
|
540
541
|
{
|
|
541
542
|
key: event.id,
|
|
542
|
-
className:
|
|
543
|
+
className: clsx("p-4 rounded-lg border cursor-pointer hover:shadow-lg transition-all", getEventColorClass(event.color), "border-l-4", isSelected ? "ring-2 ring-blue-500 ring-opacity-50" : ""),
|
|
543
544
|
onClick: () => !isSelectionMode && onEventClick(event)
|
|
544
545
|
},
|
|
545
|
-
/* @__PURE__ */ React2.createElement("div", { className: "flex items-start justify-between mb-3" }, isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "pt-1 mr-2" }, renderCheckbox(event.id)), /* @__PURE__ */ React2.createElement("h3", { className: "text-lg font-semibold text-gray-900 flex-1 pr-2" }, event.title), /* @__PURE__ */ React2.createElement("span", { className:
|
|
546
|
+
/* @__PURE__ */ React2.createElement("div", { className: "flex items-start justify-between mb-3" }, isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "pt-1 mr-2" }, renderCheckbox(event.id)), /* @__PURE__ */ React2.createElement("h3", { className: "text-lg font-semibold text-gray-900 flex-1 pr-2" }, event.title), /* @__PURE__ */ React2.createElement("span", { className: clsx("px-2 py-1 text-xs font-medium rounded border flex-shrink-0", priorityDisplay.color) }, priorityDisplay.text)),
|
|
546
547
|
event.description && /* @__PURE__ */ React2.createElement("p", { className: "text-gray-600 text-sm mb-3 line-clamp-3" }, event.description),
|
|
547
548
|
/* @__PURE__ */ React2.createElement("div", { className: "space-y-2 text-sm text-gray-500" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-4 h-4 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" })), /* @__PURE__ */ React2.createElement("span", { className: "truncate" }, event.startTime.toLocaleDateString("zh-CN"), " ", !event.allDay && event.startTime.toLocaleTimeString("zh-CN", { hour: "2-digit", minute: "2-digit" }))), event.location && /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-4 h-4 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" }), /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z" })), /* @__PURE__ */ React2.createElement("span", { className: "truncate" }, event.location))),
|
|
548
549
|
!isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-end gap-2 mt-4 pt-3 border-t border-gray-200" }, /* @__PURE__ */ React2.createElement(
|
|
@@ -570,7 +571,7 @@ function EventList({
|
|
|
570
571
|
))
|
|
571
572
|
);
|
|
572
573
|
}));
|
|
573
|
-
return /* @__PURE__ */ React2.createElement("div", { className:
|
|
574
|
+
return /* @__PURE__ */ React2.createElement("div", { className: clsx("space-y-6", className) }, /* @__PURE__ */ React2.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-4" }, /* @__PURE__ */ React2.createElement("div", { className: "flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4" }, /* @__PURE__ */ React2.createElement("div", { className: "flex-1 max-w-md" }, /* @__PURE__ */ React2.createElement(
|
|
574
575
|
SearchBox,
|
|
575
576
|
{
|
|
576
577
|
searchQuery: config.filter.searchText || "",
|
|
@@ -608,17 +609,17 @@ function EventList({
|
|
|
608
609
|
"button",
|
|
609
610
|
{
|
|
610
611
|
onClick: () => handleDisplayModeChange("list" /* LIST */),
|
|
611
|
-
className:
|
|
612
|
+
className: clsx("px-3 py-1.5 text-sm font-medium rounded-md transition-colors", config.displayMode === "list" /* LIST */ ? "bg-white text-gray-900 shadow-sm" : "text-gray-600 hover:text-gray-900")
|
|
612
613
|
},
|
|
613
614
|
"\u5217\u8868"
|
|
614
615
|
), /* @__PURE__ */ React2.createElement(
|
|
615
616
|
"button",
|
|
616
617
|
{
|
|
617
618
|
onClick: () => handleDisplayModeChange("grid" /* GRID */),
|
|
618
|
-
className:
|
|
619
|
+
className: clsx("px-3 py-1.5 text-sm font-medium rounded-md transition-colors", config.displayMode === "grid" /* GRID */ ? "bg-white text-gray-900 shadow-sm" : "text-gray-600 hover:text-gray-900")
|
|
619
620
|
},
|
|
620
621
|
"\u7F51\u683C"
|
|
621
|
-
))))), isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center gap-2 text-sm font-medium text-gray-700" }, renderSelectAllCheckbox(), "\u5168\u9009\u5F53\u524D\u9875"), /* @__PURE__ */ React2.createElement("span", { className: "text-sm text-gray-600" }, "\u5DF2\u9009\u62E9 ", selectedEventIds.size, " \u4E2A\u4E8B\u4EF6"))), !isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "flex flex-wrap items-center gap-2 mt-4 pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2.createElement("span", { className: "text-sm text-gray-700 mr-2" }, "\u6392\u5E8F:"), renderSortButton("startTime" /* START_TIME */, "\u65E5\u671F"), renderSortButton("title" /* TITLE */, "\u6807\u9898"), renderSortButton("priority" /* PRIORITY */, "\u4F18\u5148\u7EA7"), renderSortButton("createdAt" /* CREATED_AT */, "\u521B\u5EFA\u65F6\u95F4"), renderSortButton("updatedAt" /* UPDATED_AT */, "\u66F4\u65B0\u65F6\u95F4"))), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2.createElement("div", { className: "text-sm text-gray-600" }, "\u5171 ", sortedAndFilteredEvents.length, " \u4E2A\u4E8B\u4EF6", config.filter.searchText &&
|
|
622
|
+
))))), isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center gap-2 text-sm font-medium text-gray-700" }, renderSelectAllCheckbox(), "\u5168\u9009\u5F53\u524D\u9875"), /* @__PURE__ */ React2.createElement("span", { className: "text-sm text-gray-600" }, "\u5DF2\u9009\u62E9 ", selectedEventIds.size, " \u4E2A\u4E8B\u4EF6"))), !isSelectionMode && /* @__PURE__ */ React2.createElement("div", { className: "flex flex-wrap items-center gap-2 mt-4 pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2.createElement("span", { className: "text-sm text-gray-700 mr-2" }, "\u6392\u5E8F:"), renderSortButton("startTime" /* START_TIME */, "\u65E5\u671F"), renderSortButton("title" /* TITLE */, "\u6807\u9898"), renderSortButton("priority" /* PRIORITY */, "\u4F18\u5148\u7EA7"), renderSortButton("createdAt" /* CREATED_AT */, "\u521B\u5EFA\u65F6\u95F4"), renderSortButton("updatedAt" /* UPDATED_AT */, "\u66F4\u65B0\u65F6\u95F4"))), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2.createElement("div", { className: "text-sm text-gray-600" }, "\u5171 ", sortedAndFilteredEvents.length, " \u4E2A\u4E8B\u4EF6", config.filter.searchText && ' (\u641C\u7D22: "' + config.filter.searchText + '")')), loading && /* @__PURE__ */ React2.createElement("div", { className: "flex justify-center py-8" }, /* @__PURE__ */ React2.createElement("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600" })), !loading && paginatedEvents.length > 0 && /* @__PURE__ */ React2.createElement(React2.Fragment, null, config.displayMode === "list" /* LIST */ ? renderListMode() : renderGridMode(), totalPages > 1 && /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between pt-6" }, /* @__PURE__ */ React2.createElement("div", { className: "text-sm text-gray-600" }, "\u7B2C ", config.currentPage, " \u9875\uFF0C\u5171 ", totalPages, " \u9875"), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React2.createElement(
|
|
622
623
|
"button",
|
|
623
624
|
{
|
|
624
625
|
onClick: () => handlePageChange(config.currentPage - 1),
|
|
@@ -641,7 +642,7 @@ function EventList({
|
|
|
641
642
|
onClose: () => setShowBatchDeleteConfirm(false),
|
|
642
643
|
onConfirm: handleBatchDelete,
|
|
643
644
|
title: "\u786E\u8BA4\u6279\u91CF\u5220\u9664",
|
|
644
|
-
message:
|
|
645
|
+
message: "\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684 " + selectedEventIds.size + " \u4E2A\u4E8B\u4EF6\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",
|
|
645
646
|
confirmText: "\u5220\u9664",
|
|
646
647
|
cancelText: "\u53D6\u6D88",
|
|
647
648
|
isLoading: batchDeleteLoading
|
|
@@ -677,7 +678,7 @@ var EventTypeService = class {
|
|
|
677
678
|
case "recurring" /* RECURRING */:
|
|
678
679
|
return this.generateRecurringEvents(eventData, viewStartDate, viewEndDate, parentEventId);
|
|
679
680
|
default:
|
|
680
|
-
throw new Error(
|
|
681
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B: " + eventData.type);
|
|
681
682
|
}
|
|
682
683
|
}
|
|
683
684
|
/**
|
|
@@ -798,7 +799,7 @@ var EventTypeService = class {
|
|
|
798
799
|
nextDate.setFullYear(nextDate.getFullYear() + recurrence.interval);
|
|
799
800
|
break;
|
|
800
801
|
default:
|
|
801
|
-
throw new Error(
|
|
802
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u91CD\u590D\u6A21\u5F0F: " + recurrence.pattern);
|
|
802
803
|
}
|
|
803
804
|
return nextDate;
|
|
804
805
|
}
|
|
@@ -907,28 +908,28 @@ var EventTypeService = class {
|
|
|
907
908
|
return "\u5355\u6B21\u4E8B\u4EF6";
|
|
908
909
|
case "multi_day" /* MULTI_DAY */:
|
|
909
910
|
const dayCount = Math.ceil((eventData.endDate.getTime() - eventData.startDate.getTime()) / (24 * 60 * 60 * 1e3)) + 1;
|
|
910
|
-
return
|
|
911
|
+
return "\u6301\u7EED " + dayCount + " \u5929";
|
|
911
912
|
case "recurring" /* RECURRING */:
|
|
912
913
|
const { pattern, interval, count, endDate } = eventData.recurrence;
|
|
913
914
|
let desc = "";
|
|
914
915
|
switch (pattern) {
|
|
915
916
|
case "daily" /* DAILY */:
|
|
916
|
-
desc = interval === 1 ? "\u6BCF\u5929" :
|
|
917
|
+
desc = interval === 1 ? "\u6BCF\u5929" : "\u6BCF " + interval + " \u5929";
|
|
917
918
|
break;
|
|
918
919
|
case "weekly" /* WEEKLY */:
|
|
919
|
-
desc = interval === 1 ? "\u6BCF\u5468" :
|
|
920
|
+
desc = interval === 1 ? "\u6BCF\u5468" : "\u6BCF " + interval + " \u5468";
|
|
920
921
|
break;
|
|
921
922
|
case "monthly" /* MONTHLY */:
|
|
922
|
-
desc = interval === 1 ? "\u6BCF\u6708" :
|
|
923
|
+
desc = interval === 1 ? "\u6BCF\u6708" : "\u6BCF " + interval + " \u4E2A\u6708";
|
|
923
924
|
break;
|
|
924
925
|
case "yearly" /* YEARLY */:
|
|
925
|
-
desc = interval === 1 ? "\u6BCF\u5E74" :
|
|
926
|
+
desc = interval === 1 ? "\u6BCF\u5E74" : "\u6BCF " + interval + " \u5E74";
|
|
926
927
|
break;
|
|
927
928
|
}
|
|
928
929
|
if (count) {
|
|
929
|
-
desc +=
|
|
930
|
+
desc += "\uFF0C\u5171 " + count + " \u6B21";
|
|
930
931
|
} else if (endDate) {
|
|
931
|
-
desc +=
|
|
932
|
+
desc += "\uFF0C\u76F4\u5230 " + endDate.toLocaleDateString("zh-CN");
|
|
932
933
|
}
|
|
933
934
|
return desc;
|
|
934
935
|
default:
|
|
@@ -953,9 +954,9 @@ function useEnhancedEvents() {
|
|
|
953
954
|
startDate: toLocalISOString(startDate),
|
|
954
955
|
endDate: toLocalISOString(endDate)
|
|
955
956
|
});
|
|
956
|
-
const response = await fetch(
|
|
957
|
+
const response = await fetch("/api/calendar/events?" + params);
|
|
957
958
|
if (!response.ok) {
|
|
958
|
-
throw new Error(
|
|
959
|
+
throw new Error("\u83B7\u53D6\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
959
960
|
}
|
|
960
961
|
const data = await response.json();
|
|
961
962
|
if (!data.success) {
|
|
@@ -969,7 +970,7 @@ function useEnhancedEvents() {
|
|
|
969
970
|
updatedAt: new Date(event.updatedAt)
|
|
970
971
|
}));
|
|
971
972
|
console.log("\u{1F4E5} \u83B7\u53D6\u5230\u7684\u4E8B\u4EF6\u6570\u636E:", {
|
|
972
|
-
requestRange:
|
|
973
|
+
requestRange: formatDate(startDate) + " \u5230 " + formatDate(endDate),
|
|
973
974
|
eventCount: eventsWithDates.length,
|
|
974
975
|
eventIds: eventsWithDates.map((e) => e.id)
|
|
975
976
|
});
|
|
@@ -1020,7 +1021,7 @@ function useEnhancedEvents() {
|
|
|
1020
1021
|
body: JSON.stringify(createRequest)
|
|
1021
1022
|
});
|
|
1022
1023
|
if (!response.ok) {
|
|
1023
|
-
throw new Error(
|
|
1024
|
+
throw new Error("\u521B\u5EFA\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
1024
1025
|
}
|
|
1025
1026
|
const data = await response.json();
|
|
1026
1027
|
if (!data.success) {
|
|
@@ -1132,7 +1133,7 @@ function useEnhancedEvents() {
|
|
|
1132
1133
|
);
|
|
1133
1134
|
break;
|
|
1134
1135
|
default:
|
|
1135
|
-
throw new Error(
|
|
1136
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B: " + eventData.type);
|
|
1136
1137
|
}
|
|
1137
1138
|
const createdEvents = [];
|
|
1138
1139
|
for (const generatedEvent of generatedEvents) {
|
|
@@ -1162,7 +1163,7 @@ function useEnhancedEvents() {
|
|
|
1162
1163
|
body: JSON.stringify(createRequest)
|
|
1163
1164
|
});
|
|
1164
1165
|
if (!response.ok) {
|
|
1165
|
-
throw new Error(
|
|
1166
|
+
throw new Error("\u521B\u5EFA\u4E8B\u4EF6\u5B9E\u4F8B\u5931\u8D25: " + response.status);
|
|
1166
1167
|
}
|
|
1167
1168
|
const data = await response.json();
|
|
1168
1169
|
if (!data.success) {
|
|
@@ -1200,7 +1201,7 @@ function useEnhancedEvents() {
|
|
|
1200
1201
|
if (eventData.allDay !== void 0) updateRequest.allDay = eventData.allDay;
|
|
1201
1202
|
if (eventData.location !== void 0) updateRequest.location = eventData.location;
|
|
1202
1203
|
if (eventData.color !== void 0) updateRequest.color = eventData.color;
|
|
1203
|
-
const response = await fetch(
|
|
1204
|
+
const response = await fetch("/api/calendar/events/" + eventId, {
|
|
1204
1205
|
method: "PUT",
|
|
1205
1206
|
headers: {
|
|
1206
1207
|
"Content-Type": "application/json"
|
|
@@ -1208,7 +1209,7 @@ function useEnhancedEvents() {
|
|
|
1208
1209
|
body: JSON.stringify(updateRequest)
|
|
1209
1210
|
});
|
|
1210
1211
|
if (!response.ok) {
|
|
1211
|
-
throw new Error(
|
|
1212
|
+
throw new Error("\u66F4\u65B0\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
1212
1213
|
}
|
|
1213
1214
|
const data = await response.json();
|
|
1214
1215
|
if (!data.success) {
|
|
@@ -1238,12 +1239,12 @@ function useEnhancedEvents() {
|
|
|
1238
1239
|
setLoading(true);
|
|
1239
1240
|
setError(void 0);
|
|
1240
1241
|
try {
|
|
1241
|
-
const url = deleteAll ?
|
|
1242
|
+
const url = deleteAll ? "/api/calendar/events/" + eventId + "?deleteAll=true" : "/api/calendar/events/" + eventId;
|
|
1242
1243
|
const response = await fetch(url, {
|
|
1243
1244
|
method: "DELETE"
|
|
1244
1245
|
});
|
|
1245
1246
|
if (!response.ok) {
|
|
1246
|
-
throw new Error(
|
|
1247
|
+
throw new Error("\u5220\u9664\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
1247
1248
|
}
|
|
1248
1249
|
const data = await response.json();
|
|
1249
1250
|
if (!data.success) {
|
|
@@ -1271,7 +1272,7 @@ function useEnhancedEvents() {
|
|
|
1271
1272
|
body: JSON.stringify({ eventIds })
|
|
1272
1273
|
});
|
|
1273
1274
|
if (!response.ok) {
|
|
1274
|
-
throw new Error(
|
|
1275
|
+
throw new Error("\u6279\u91CF\u5220\u9664\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
1275
1276
|
}
|
|
1276
1277
|
const data = await response.json();
|
|
1277
1278
|
if (!data.success) {
|
|
@@ -1303,7 +1304,7 @@ function useEnhancedEvents() {
|
|
|
1303
1304
|
endTime: toLocalISOString(newEndTime)
|
|
1304
1305
|
};
|
|
1305
1306
|
console.log("\u{1F4E4} \u53D1\u9001API\u8BF7\u6C42:", updateRequest);
|
|
1306
|
-
const response = await fetch(
|
|
1307
|
+
const response = await fetch("/api/calendar/events/" + eventId, {
|
|
1307
1308
|
method: "PUT",
|
|
1308
1309
|
headers: {
|
|
1309
1310
|
"Content-Type": "application/json"
|
|
@@ -1311,7 +1312,7 @@ function useEnhancedEvents() {
|
|
|
1311
1312
|
body: JSON.stringify(updateRequest)
|
|
1312
1313
|
});
|
|
1313
1314
|
if (!response.ok) {
|
|
1314
|
-
throw new Error(
|
|
1315
|
+
throw new Error("\u66F4\u65B0\u4E8B\u4EF6\u65F6\u95F4\u5931\u8D25: " + response.status);
|
|
1315
1316
|
}
|
|
1316
1317
|
const data = await response.json();
|
|
1317
1318
|
console.log("\u{1F4E5} API\u54CD\u5E94:", data);
|
|
@@ -1467,18 +1468,18 @@ var ImprovedEventModal = ({
|
|
|
1467
1468
|
const day = String(date.getDate()).padStart(2, "0");
|
|
1468
1469
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
1469
1470
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
1470
|
-
return
|
|
1471
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes;
|
|
1471
1472
|
};
|
|
1472
1473
|
const formatDateOnly = (date) => {
|
|
1473
1474
|
const year = date.getFullYear();
|
|
1474
1475
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
1475
1476
|
const day = String(date.getDate()).padStart(2, "0");
|
|
1476
|
-
return
|
|
1477
|
+
return year + "-" + month + "-" + day;
|
|
1477
1478
|
};
|
|
1478
1479
|
const formatTimeOnly = (date) => {
|
|
1479
1480
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
1480
1481
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
1481
|
-
return
|
|
1482
|
+
return hours + ":" + minutes;
|
|
1482
1483
|
};
|
|
1483
1484
|
const buildEventData = () => {
|
|
1484
1485
|
switch (eventType) {
|
|
@@ -1528,7 +1529,7 @@ var ImprovedEventModal = ({
|
|
|
1528
1529
|
}
|
|
1529
1530
|
};
|
|
1530
1531
|
default:
|
|
1531
|
-
throw new Error(
|
|
1532
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B: " + eventType);
|
|
1532
1533
|
}
|
|
1533
1534
|
};
|
|
1534
1535
|
const validateForm = () => {
|
|
@@ -1587,29 +1588,29 @@ var ImprovedEventModal = ({
|
|
|
1587
1588
|
{
|
|
1588
1589
|
type: "button",
|
|
1589
1590
|
onClick: () => setEventType("single" /* SINGLE */),
|
|
1590
|
-
className:
|
|
1591
|
+
className: clsx("group relative p-4 rounded-xl border-2 transition-all duration-300 transform hover:scale-105", eventType === "single" /* SINGLE */ ? "bg-gradient-to-br from-blue-50 to-blue-100 border-blue-300 shadow-lg ring-2 ring-blue-200" : "bg-white border-gray-200 hover:bg-gray-50 hover:border-gray-300 shadow-sm hover:shadow-md")
|
|
1591
1592
|
},
|
|
1592
|
-
/* @__PURE__ */ React2.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2.createElement("div", { className:
|
|
1593
|
+
/* @__PURE__ */ React2.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2.createElement("div", { className: clsx("text-3xl mb-2 transition-transform duration-300", eventType === "single" /* SINGLE */ ? "scale-110" : "group-hover:scale-110") }, "\u{1F4C5}"), /* @__PURE__ */ React2.createElement("div", { className: clsx("font-semibold mb-1", eventType === "single" /* SINGLE */ ? "text-blue-700" : "text-gray-900") }, "\u5355\u6B21\u4E8B\u4EF6"), /* @__PURE__ */ React2.createElement("div", { className: "text-xs text-gray-500" }, "\u4E00\u6B21\u6027\u4E8B\u4EF6")),
|
|
1593
1594
|
eventType === "single" /* SINGLE */ && /* @__PURE__ */ React2.createElement("div", { className: "absolute top-2 right-2" }, /* @__PURE__ */ React2.createElement("div", { className: "w-6 h-6 bg-blue-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React2.createElement("span", { className: "text-white text-sm" }, "\u2713")))
|
|
1594
1595
|
), /* @__PURE__ */ React2.createElement(
|
|
1595
1596
|
"button",
|
|
1596
1597
|
{
|
|
1597
1598
|
type: "button",
|
|
1598
1599
|
onClick: () => setEventType("multi_day" /* MULTI_DAY */),
|
|
1599
|
-
className:
|
|
1600
|
+
className: clsx("group relative p-4 rounded-xl border-2 transition-all duration-300 transform hover:scale-105", eventType === "multi_day" /* MULTI_DAY */ ? "bg-gradient-to-br from-green-50 to-green-100 border-green-300 shadow-lg ring-2 ring-green-200" : "bg-white border-gray-200 hover:bg-gray-50 hover:border-gray-300 shadow-sm hover:shadow-md")
|
|
1600
1601
|
},
|
|
1601
|
-
/* @__PURE__ */ React2.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2.createElement("div", { className:
|
|
1602
|
+
/* @__PURE__ */ React2.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2.createElement("div", { className: clsx("text-3xl mb-2 transition-transform duration-300", eventType === "multi_day" /* MULTI_DAY */ ? "scale-110" : "group-hover:scale-110") }, "\u{1F5D3}\uFE0F"), /* @__PURE__ */ React2.createElement("div", { className: clsx("font-semibold mb-1", eventType === "multi_day" /* MULTI_DAY */ ? "text-green-700" : "text-gray-900") }, "\u591A\u5929\u4E8B\u4EF6"), /* @__PURE__ */ React2.createElement("div", { className: "text-xs text-gray-500" }, "\u8FDE\u7EED\u591A\u5929")),
|
|
1602
1603
|
eventType === "multi_day" /* MULTI_DAY */ && /* @__PURE__ */ React2.createElement("div", { className: "absolute top-2 right-2" }, /* @__PURE__ */ React2.createElement("div", { className: "w-6 h-6 bg-green-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React2.createElement("span", { className: "text-white text-sm" }, "\u2713")))
|
|
1603
1604
|
), /* @__PURE__ */ React2.createElement(
|
|
1604
1605
|
"button",
|
|
1605
1606
|
{
|
|
1606
1607
|
type: "button",
|
|
1607
1608
|
onClick: () => setEventType("recurring" /* RECURRING */),
|
|
1608
|
-
className:
|
|
1609
|
+
className: clsx("group relative p-4 rounded-xl border-2 transition-all duration-300 transform hover:scale-105", eventType === "recurring" /* RECURRING */ ? "bg-gradient-to-br from-purple-50 to-purple-100 border-purple-300 shadow-lg ring-2 ring-purple-200" : "bg-white border-gray-200 hover:bg-gray-50 hover:border-gray-300 shadow-sm hover:shadow-md")
|
|
1609
1610
|
},
|
|
1610
|
-
/* @__PURE__ */ React2.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2.createElement("div", { className:
|
|
1611
|
+
/* @__PURE__ */ React2.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2.createElement("div", { className: clsx("text-3xl mb-2 transition-transform duration-300", eventType === "recurring" /* RECURRING */ ? "scale-110" : "group-hover:scale-110") }, "\u{1F504}"), /* @__PURE__ */ React2.createElement("div", { className: clsx("font-semibold mb-1", eventType === "recurring" /* RECURRING */ ? "text-purple-700" : "text-gray-900") }, "\u91CD\u590D\u4E8B\u4EF6"), /* @__PURE__ */ React2.createElement("div", { className: "text-xs text-gray-500" }, "\u5468\u671F\u6027\u91CD\u590D")),
|
|
1611
1612
|
eventType === "recurring" /* RECURRING */ && /* @__PURE__ */ React2.createElement("div", { className: "absolute top-2 right-2" }, /* @__PURE__ */ React2.createElement("div", { className: "w-6 h-6 bg-purple-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React2.createElement("span", { className: "text-white text-sm" }, "\u2713")))
|
|
1612
|
-
)), /* @__PURE__ */ React2.createElement("div", { className:
|
|
1613
|
+
)), /* @__PURE__ */ React2.createElement("div", { className: clsx("p-4 rounded-lg transition-all duration-300", eventType === "single" /* SINGLE */ ? "bg-blue-50 border border-blue-200" : eventType === "multi_day" /* MULTI_DAY */ ? "bg-green-50 border border-green-200" : "bg-purple-50 border border-purple-200") }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-start space-x-3" }, /* @__PURE__ */ React2.createElement("div", { className: "flex-shrink-0 mt-0.5" }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, eventType === "single" /* SINGLE */ ? "\u{1F4A1}" : eventType === "multi_day" /* MULTI_DAY */ ? "\u{1F4CB}" : "\u{1F514}")), /* @__PURE__ */ React2.createElement("div", null, eventType === "single" /* SINGLE */ && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("h4", { className: "font-medium text-blue-800 mb-1" }, "\u5355\u6B21\u4E8B\u4EF6"), /* @__PURE__ */ React2.createElement("p", { className: "text-sm text-blue-700" }, "\u5728\u6307\u5B9A\u7684\u65F6\u95F4\u53D1\u751F\u4E00\u6B21\u7684\u4E8B\u4EF6\uFF0C\u5982\u4F1A\u8BAE\u3001\u7EA6\u4F1A\u3001\u9762\u8BD5\u7B49\u3002\u9002\u5408\u4E00\u6B21\u6027\u7684\u6D3B\u52A8\u5B89\u6392\u3002")), eventType === "multi_day" /* MULTI_DAY */ && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("h4", { className: "font-medium text-green-800 mb-1" }, "\u591A\u5929\u4E8B\u4EF6"), /* @__PURE__ */ React2.createElement("p", { className: "text-sm text-green-700" }, "\u6301\u7EED\u591A\u5929\u7684\u5355\u4E2A\u4E8B\u4EF6\uFF0C\u5982\u57F9\u8BAD\u8BFE\u7A0B\u3001\u4F1A\u8BAE\u3001\u5047\u671F\u7B49\u3002\u4F8B\u5982\uFF1A3\u5929\u7684\u57F9\u8BAD\u8BFE\u7A0B\u62161\u5468\u7684\u5047\u671F\u3002")), eventType === "recurring" /* RECURRING */ && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("h4", { className: "font-medium text-purple-800 mb-1" }, "\u91CD\u590D\u4E8B\u4EF6"), /* @__PURE__ */ React2.createElement("p", { className: "text-sm text-purple-700" }, "\u6309\u7167\u89C4\u5F8B\u91CD\u590D\u53D1\u751F\u7684\u4E8B\u4EF6\uFF0C\u5982\u6BCF\u5929\u7684\u6668\u4F1A\u3001\u6BCF\u5468\u7684\u4F8B\u4F1A\u3001\u6BCF\u6708\u7684\u603B\u7ED3\u7B49\u3002\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u521B\u5EFA\u591A\u4E2A\u4E8B\u4EF6\u5B9E\u4F8B\u3002"))))));
|
|
1613
1614
|
const renderBasicForm = () => /* @__PURE__ */ React2.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React2.createElement("div", { className: "group" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, "\u{1F4DD}"), /* @__PURE__ */ React2.createElement("span", null, "\u4E8B\u4EF6\u6807\u9898"), /* @__PURE__ */ React2.createElement("span", { className: "text-red-500" }, "*")), /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
|
|
1614
1615
|
"input",
|
|
1615
1616
|
{
|
|
@@ -1619,7 +1620,7 @@ var ImprovedEventModal = ({
|
|
|
1619
1620
|
className: "w-full px-4 py-3 border-2 border-gray-200 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 placeholder-gray-400 text-gray-900 bg-white hover:border-gray-300",
|
|
1620
1621
|
placeholder: "\u4E3A\u4F60\u7684\u4E8B\u4EF6\u8D77\u4E2A\u540D\u5B57..."
|
|
1621
1622
|
}
|
|
1622
|
-
), /* @__PURE__ */ React2.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2.createElement("div", { className:
|
|
1623
|
+
), /* @__PURE__ */ React2.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2.createElement("div", { className: clsx("w-2 h-2 rounded-full transition-colors duration-200", formData.title.trim() ? "bg-green-400" : "bg-gray-300") }))), errors.title && /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-2 mt-2" }, /* @__PURE__ */ React2.createElement("span", { className: "text-red-500 text-sm" }, "\u26A0\uFE0F"), /* @__PURE__ */ React2.createElement("p", { className: "text-sm text-red-600" }, errors.title))), /* @__PURE__ */ React2.createElement("div", { className: "group" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, "\u{1F4C4}"), /* @__PURE__ */ React2.createElement("span", null, "\u4E8B\u4EF6\u63CF\u8FF0")), /* @__PURE__ */ React2.createElement(
|
|
1623
1624
|
"textarea",
|
|
1624
1625
|
{
|
|
1625
1626
|
value: formData.description,
|
|
@@ -1628,7 +1629,7 @@ var ImprovedEventModal = ({
|
|
|
1628
1629
|
className: "w-full px-4 py-3 border-2 border-gray-200 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 placeholder-gray-400 text-gray-900 bg-white hover:border-gray-300 resize-none",
|
|
1629
1630
|
placeholder: "\u63CF\u8FF0\u4E00\u4E0B\u8FD9\u4E2A\u4E8B\u4EF6\u7684\u8BE6\u7EC6\u4FE1\u606F..."
|
|
1630
1631
|
}
|
|
1631
|
-
), /* @__PURE__ */ React2.createElement("div", { className: "flex justify-between items-center mt-2" }, /* @__PURE__ */ React2.createElement("div", { className: "text-xs text-gray-500" }, formData.description.length > 0 &&
|
|
1632
|
+
), /* @__PURE__ */ React2.createElement("div", { className: "flex justify-between items-center mt-2" }, /* @__PURE__ */ React2.createElement("div", { className: "text-xs text-gray-500" }, formData.description.length > 0 && "\u5DF2\u8F93\u5165 " + formData.description.length + " \u4E2A\u5B57\u7B26"))), /* @__PURE__ */ React2.createElement("div", { className: "group" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, "\u{1F4CD}"), /* @__PURE__ */ React2.createElement("span", null, "\u5730\u70B9")), /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
|
|
1632
1633
|
"input",
|
|
1633
1634
|
{
|
|
1634
1635
|
type: "text",
|
|
@@ -1637,7 +1638,7 @@ var ImprovedEventModal = ({
|
|
|
1637
1638
|
className: "w-full px-4 py-3 border-2 border-gray-200 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 placeholder-gray-400 text-gray-900 bg-white hover:border-gray-300",
|
|
1638
1639
|
placeholder: "\u4E8B\u4EF6\u4E3E\u529E\u5730\u70B9..."
|
|
1639
1640
|
}
|
|
1640
|
-
), /* @__PURE__ */ React2.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2.createElement("div", { className:
|
|
1641
|
+
), /* @__PURE__ */ React2.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2.createElement("div", { className: clsx("w-2 h-2 rounded-full transition-colors duration-200", formData.location.trim() ? "bg-green-400" : "bg-gray-300") })))), /* @__PURE__ */ React2.createElement("div", { className: "bg-gray-50 rounded-xl p-4" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center justify-between cursor-pointer group" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, "\u{1F305}"), /* @__PURE__ */ React2.createElement("div", null, /* @__PURE__ */ React2.createElement("div", { className: "text-sm font-medium text-gray-900" }, "\u5168\u5929\u4E8B\u4EF6"), /* @__PURE__ */ React2.createElement("div", { className: "text-xs text-gray-500" }, "\u4E0D\u8BBE\u7F6E\u5177\u4F53\u65F6\u95F4\uFF0C\u6574\u5929\u6709\u6548"))), /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
|
|
1641
1642
|
"input",
|
|
1642
1643
|
{
|
|
1643
1644
|
type: "checkbox",
|
|
@@ -1646,7 +1647,7 @@ var ImprovedEventModal = ({
|
|
|
1646
1647
|
onChange: (e) => handleInputChange("allDay", e.target.checked),
|
|
1647
1648
|
className: "sr-only"
|
|
1648
1649
|
}
|
|
1649
|
-
), /* @__PURE__ */ React2.createElement("div", { className:
|
|
1650
|
+
), /* @__PURE__ */ React2.createElement("div", { className: clsx("w-12 h-6 rounded-full transition-colors duration-200", formData.allDay ? "bg-blue-500" : "bg-gray-300") }, /* @__PURE__ */ React2.createElement("div", { className: clsx("w-5 h-5 bg-white rounded-full shadow-md transform transition-transform duration-200", formData.allDay ? "translate-x-6" : "translate-x-0.5", "translate-y-0.5") }))))), /* @__PURE__ */ React2.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, /* @__PURE__ */ React2.createElement("div", { className: "group" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, "\u{1F3A8}"), /* @__PURE__ */ React2.createElement("span", null, "\u4E8B\u4EF6\u989C\u8272")), /* @__PURE__ */ React2.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2.createElement(
|
|
1650
1651
|
"div",
|
|
1651
1652
|
{
|
|
1652
1653
|
className: "w-12 h-12 rounded-xl border-2 border-gray-200 flex items-center justify-center cursor-pointer hover:scale-105 transition-transform duration-200 shadow-sm",
|
|
@@ -1667,7 +1668,7 @@ var ImprovedEventModal = ({
|
|
|
1667
1668
|
key: color,
|
|
1668
1669
|
type: "button",
|
|
1669
1670
|
onClick: () => handleInputChange("color", color),
|
|
1670
|
-
className:
|
|
1671
|
+
className: clsx("w-8 h-8 rounded-lg border-2 hover:scale-105 transition-all duration-200", formData.color === color ? "border-gray-400 ring-2 ring-gray-200" : "border-gray-200"),
|
|
1671
1672
|
style: { backgroundColor: color }
|
|
1672
1673
|
}
|
|
1673
1674
|
))))), /* @__PURE__ */ React2.createElement("div", { className: "group" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, "\u2B50"), /* @__PURE__ */ React2.createElement("span", null, "\u4F18\u5148\u7EA7")), /* @__PURE__ */ React2.createElement("div", { className: "space-y-2" }, [
|
|
@@ -1685,7 +1686,7 @@ var ImprovedEventModal = ({
|
|
|
1685
1686
|
onChange: (e) => handleInputChange("priority", e.target.value),
|
|
1686
1687
|
className: "sr-only"
|
|
1687
1688
|
}
|
|
1688
|
-
), /* @__PURE__ */ React2.createElement("div", { className:
|
|
1689
|
+
), /* @__PURE__ */ React2.createElement("div", { className: clsx("flex items-center space-x-3 px-3 py-2 rounded-lg border-2 transition-all duration-200 flex-1", formData.priority === priority.value ? priority.color + " ring-2 ring-opacity-20" : "text-gray-600 bg-white border-gray-200 hover:bg-gray-50") }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, priority.icon), /* @__PURE__ */ React2.createElement("span", { className: "text-sm font-medium" }, priority.label), formData.priority === priority.value && /* @__PURE__ */ React2.createElement("span", { className: "ml-auto text-sm" }, "\u2713"))))))));
|
|
1689
1690
|
const renderSingleEventForm = () => /* @__PURE__ */ React2.createElement("div", { className: "space-y-6" }, !formData.allDay && /* @__PURE__ */ React2.createElement("div", { className: "bg-blue-50 rounded-xl p-4 border border-blue-200" }, /* @__PURE__ */ React2.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, /* @__PURE__ */ React2.createElement("div", { className: "group" }, /* @__PURE__ */ React2.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-blue-900 mb-3" }, /* @__PURE__ */ React2.createElement("span", { className: "text-lg" }, "\u{1F550}"), /* @__PURE__ */ React2.createElement("span", null, "\u5F00\u59CB\u65F6\u95F4"), /* @__PURE__ */ React2.createElement("span", { className: "text-red-500" }, "*")), /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
|
|
1690
1691
|
"input",
|
|
1691
1692
|
{
|
|
@@ -1932,7 +1933,7 @@ function useEventDrag(events, onEventUpdate) {
|
|
|
1932
1933
|
newStartTime.setHours(originalStart.getHours(), originalStart.getMinutes(), originalStart.getSeconds(), originalStart.getMilliseconds());
|
|
1933
1934
|
const duration = originalEnd.getTime() - originalStart.getTime();
|
|
1934
1935
|
const newEndTime = new Date(newStartTime.getTime() + duration);
|
|
1935
|
-
const previewTime = dragState.draggedEvent.allDay ? "\u5168\u5929" :
|
|
1936
|
+
const previewTime = dragState.draggedEvent.allDay ? "\u5168\u5929" : formatTime2(newStartTime) + " - " + formatTime2(newEndTime);
|
|
1936
1937
|
console.log("\u23F0 \u8BA1\u7B97\u65B0\u65F6\u95F4:", {
|
|
1937
1938
|
originalStart: dragState.draggedEvent.startTime,
|
|
1938
1939
|
originalEnd: dragState.draggedEvent.endTime,
|
|
@@ -2080,9 +2081,9 @@ var DraggableEvent = ({
|
|
|
2080
2081
|
// 移动端禁用拖拽
|
|
2081
2082
|
});
|
|
2082
2083
|
const style = transform ? {
|
|
2083
|
-
transform:
|
|
2084
|
+
transform: "translate3d(" + transform.x + "px, " + transform.y + "px, 0)"
|
|
2084
2085
|
} : void 0;
|
|
2085
|
-
event.allDay ? "\u5168\u5929" :
|
|
2086
|
+
event.allDay ? "\u5168\u5929" : formatTime(new Date(event.startTime)) + " - " + formatTime(new Date(event.endTime));
|
|
2086
2087
|
const getEventColorClasses = (color) => {
|
|
2087
2088
|
switch (color) {
|
|
2088
2089
|
case "red":
|
|
@@ -2122,14 +2123,7 @@ var DraggableEvent = ({
|
|
|
2122
2123
|
{
|
|
2123
2124
|
ref: setNodeRef,
|
|
2124
2125
|
style,
|
|
2125
|
-
className:
|
|
2126
|
-
group relative rounded border-l-2 px-1 py-0.5 mb-0.5
|
|
2127
|
-
${dragSupported ? "cursor-grab active:cursor-grabbing" : "cursor-pointer"}
|
|
2128
|
-
transition-all duration-150 ease-in-out text-xs
|
|
2129
|
-
${getEventColorClasses(event.color)}
|
|
2130
|
-
${isDragActive || isDragging ? "opacity-60 shadow-md z-[40]" : "opacity-100"}
|
|
2131
|
-
${className}
|
|
2132
|
-
`,
|
|
2126
|
+
className: clsx("group relative rounded border-l-2 px-1 py-0.5 mb-0.5", dragSupported ? "cursor-grab active:cursor-grabbing" : "cursor-pointer", "transition-all duration-150 ease-in-out text-xs", getEventColorClasses(event.color), isDragActive || isDragging ? "opacity-60 shadow-md z-[40]" : "opacity-100", className),
|
|
2133
2127
|
...dragSupported ? listeners : {},
|
|
2134
2128
|
...dragSupported ? attributes : {},
|
|
2135
2129
|
onClick
|
|
@@ -2167,8 +2161,6 @@ var DraggableEvent = ({
|
|
|
2167
2161
|
);
|
|
2168
2162
|
};
|
|
2169
2163
|
var DraggableEvent_default = DraggableEvent;
|
|
2170
|
-
|
|
2171
|
-
// src/calendar/components/DroppableCalendarCell.tsx
|
|
2172
2164
|
var DroppableCalendarCell = ({
|
|
2173
2165
|
date,
|
|
2174
2166
|
events,
|
|
@@ -2181,7 +2173,7 @@ var DroppableCalendarCell = ({
|
|
|
2181
2173
|
disableDrop = false
|
|
2182
2174
|
}) => {
|
|
2183
2175
|
const dateStr = formatDate(date);
|
|
2184
|
-
const dropId =
|
|
2176
|
+
const dropId = "date-" + dateStr;
|
|
2185
2177
|
const {
|
|
2186
2178
|
isOver,
|
|
2187
2179
|
setNodeRef
|
|
@@ -2232,11 +2224,7 @@ var DroppableCalendarCell = ({
|
|
|
2232
2224
|
className: getCellClasses(),
|
|
2233
2225
|
onClick: () => onDateClick?.(date)
|
|
2234
2226
|
},
|
|
2235
|
-
/* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React2.createElement("span", { className:
|
|
2236
|
-
inline-flex items-center justify-center text-sm font-semibold w-6 h-6
|
|
2237
|
-
${!isCurrentMonth ? "text-gray-400" : date.getDay() === 0 || date.getDay() === 6 ? "text-red-600" : "text-gray-900"}
|
|
2238
|
-
${isToday(date) ? "bg-blue-600 text-white rounded-full shadow-md" : ""}
|
|
2239
|
-
` }, date.getDate()), dayEvents.length > 0 && /* @__PURE__ */ React2.createElement("span", { className: "bg-yellow-500 inline-flex items-center justify-center text-sm font-semibold w-6 h-6 border border-white 'bg-blue-600 text-white rounded-full shadow-md" }, dayEvents.length)),
|
|
2227
|
+
/* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React2.createElement("span", { className: clsx("inline-flex items-center justify-center text-sm font-semibold w-6 h-6", !isCurrentMonth ? "text-gray-400" : date.getDay() === 0 || date.getDay() === 6 ? "text-red-600" : "text-gray-900", isToday(date) ? "bg-blue-600 text-white rounded-full shadow-md" : "") }, date.getDate()), dayEvents.length > 0 && /* @__PURE__ */ React2.createElement("span", { className: "bg-yellow-500 inline-flex items-center justify-center text-sm font-semibold w-6 h-6 border border-white 'bg-blue-600 text-white rounded-full shadow-md" }, dayEvents.length)),
|
|
2240
2228
|
/* @__PURE__ */ React2.createElement("div", { className: "space-y-1" }, dayEvents.slice(0, 3).map((event) => /* @__PURE__ */ React2.createElement(
|
|
2241
2229
|
DraggableEvent_default,
|
|
2242
2230
|
{
|
|
@@ -2302,7 +2290,7 @@ var DraggableMonthView = ({
|
|
|
2302
2290
|
"th",
|
|
2303
2291
|
{
|
|
2304
2292
|
key: day,
|
|
2305
|
-
className:
|
|
2293
|
+
className: clsx("p-2 sm:p-3 text-center text-sm font-bold border-r border-gray-300 last:border-r-0", index === 5 || index === 6 ? "text-red-600 bg-red-50" : "text-gray-800")
|
|
2306
2294
|
},
|
|
2307
2295
|
day
|
|
2308
2296
|
)))), /* @__PURE__ */ React2.createElement("tbody", null, Array.from({ length: 6 }, (_, weekIndex) => /* @__PURE__ */ React2.createElement("tr", { key: weekIndex }, Array.from({ length: 7 }, (_2, dayIndex) => {
|
|
@@ -2316,7 +2304,7 @@ var DraggableMonthView = ({
|
|
|
2316
2304
|
"td",
|
|
2317
2305
|
{
|
|
2318
2306
|
key: dayIndex,
|
|
2319
|
-
className:
|
|
2307
|
+
className: clsx("h-24 sm:h-32 border-b border-gray-300 border-r border-gray-300 last:border-r-0 relative", isWeekend2 ? "bg-red-50" : "bg-white", "hover:bg-blue-50 transition-colors")
|
|
2320
2308
|
},
|
|
2321
2309
|
/* @__PURE__ */ React2.createElement(
|
|
2322
2310
|
DroppableCalendarCell_default,
|
|
@@ -2334,7 +2322,7 @@ var DraggableMonthView = ({
|
|
|
2334
2322
|
)
|
|
2335
2323
|
);
|
|
2336
2324
|
}))))));
|
|
2337
|
-
return /* @__PURE__ */ React2.createElement("div", { className:
|
|
2325
|
+
return /* @__PURE__ */ React2.createElement("div", { className: clsx("bg-white rounded-lg shadow-sm", className) }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between p-4 border-b" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-4" }, /* @__PURE__ */ React2.createElement("h2", { className: "text-lg sm:text-xl font-semibold text-gray-900" }, currentDate.getFullYear(), "\u5E74", getMonthName(currentDate)), /* @__PURE__ */ React2.createElement(
|
|
2338
2326
|
"button",
|
|
2339
2327
|
{
|
|
2340
2328
|
onClick: goToToday,
|
|
@@ -2543,7 +2531,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2543
2531
|
{
|
|
2544
2532
|
key,
|
|
2545
2533
|
onClick: () => setActiveTab(key),
|
|
2546
|
-
className:
|
|
2534
|
+
className: clsx("py-4 text-sm font-medium border-b-2 transition-colors", activeTab === key ? "border-blue-500 text-blue-600" : "border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300")
|
|
2547
2535
|
},
|
|
2548
2536
|
/* @__PURE__ */ React2.createElement("span", { className: "mr-2" }, icon),
|
|
2549
2537
|
label
|
|
@@ -2552,7 +2540,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2552
2540
|
{
|
|
2553
2541
|
key,
|
|
2554
2542
|
onClick: () => updateSettings({ theme: key }),
|
|
2555
|
-
className:
|
|
2543
|
+
className: clsx("p-4 border-2 rounded-lg cursor-pointer transition-all", settings.theme === key ? "border-blue-500 bg-blue-50" : "border-gray-200 hover:border-gray-300")
|
|
2556
2544
|
},
|
|
2557
2545
|
/* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ React2.createElement("h4", { className: "font-medium text-gray-900" }, theme.name), settings.theme === key && /* @__PURE__ */ React2.createElement("svg", { className: "w-5 h-5 text-blue-500", fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React2.createElement("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }))),
|
|
2558
2546
|
/* @__PURE__ */ React2.createElement("div", { className: "flex space-x-1 mb-3" }, Object.values(theme.colors).slice(0, 6).map((color, index) => /* @__PURE__ */ React2.createElement(
|
|
@@ -2589,7 +2577,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2589
2577
|
style: {
|
|
2590
2578
|
backgroundColor: index === 3 ? theme.background.today : theme.background.cell,
|
|
2591
2579
|
color: index === 3 ? theme.text.today : theme.text.primary,
|
|
2592
|
-
border:
|
|
2580
|
+
border: "1px solid " + (index === 3 ? theme.border.today : theme.border.cell)
|
|
2593
2581
|
}
|
|
2594
2582
|
},
|
|
2595
2583
|
index + 1
|
|
@@ -2791,7 +2779,7 @@ function CalendarPage({
|
|
|
2791
2779
|
const viewEnd = viewDates[viewDates.length - 1];
|
|
2792
2780
|
if (viewStart && viewEnd) {
|
|
2793
2781
|
console.log("\u{1F4C5} \u52A0\u8F7D\u6708\u89C6\u56FE\u4E8B\u4EF6\u8303\u56F4:", {
|
|
2794
|
-
currentMonth:
|
|
2782
|
+
currentMonth: currentDate.getFullYear() + "-" + (currentDate.getMonth() + 1),
|
|
2795
2783
|
viewStart: formatDate(viewStart),
|
|
2796
2784
|
viewEnd: formatDate(viewEnd),
|
|
2797
2785
|
totalDays: viewDates.length
|
|
@@ -2851,9 +2839,9 @@ function CalendarPage({
|
|
|
2851
2839
|
return getMonthName2(currentDate);
|
|
2852
2840
|
}
|
|
2853
2841
|
if (weekStart.getMonth() === weekEnd.getMonth()) {
|
|
2854
|
-
return
|
|
2842
|
+
return weekStart.getFullYear() + "\u5E74" + (weekStart.getMonth() + 1) + "\u6708 \u7B2C" + Math.ceil(weekStart.getDate() / 7) + "\u5468";
|
|
2855
2843
|
} else {
|
|
2856
|
-
return
|
|
2844
|
+
return weekStart.getMonth() + 1 + "\u6708" + weekStart.getDate() + "\u65E5 - " + (weekEnd.getMonth() + 1) + "\u6708" + weekEnd.getDate() + "\u65E5";
|
|
2857
2845
|
}
|
|
2858
2846
|
case "day" /* DAY */:
|
|
2859
2847
|
return currentDate.toLocaleDateString("zh-CN", {
|
|
@@ -3017,9 +3005,9 @@ function CalendarPage({
|
|
|
3017
3005
|
"th",
|
|
3018
3006
|
{
|
|
3019
3007
|
key: index,
|
|
3020
|
-
className:
|
|
3008
|
+
className: clsx("p-3 text-center border-b border-gray-200", index < 6 ? "border-r border-gray-200" : "")
|
|
3021
3009
|
},
|
|
3022
|
-
/* @__PURE__ */ React2.createElement("div", { className:
|
|
3010
|
+
/* @__PURE__ */ React2.createElement("div", { className: clsx("text-sm font-medium", isWeekend2 ? "text-red-600" : "text-gray-700") }, getWeekdayName(date, "zh-CN", "short"))
|
|
3023
3011
|
);
|
|
3024
3012
|
}))), /* @__PURE__ */ React2.createElement("tbody", null, /* @__PURE__ */ React2.createElement("tr", null, weekDates.map((date, index) => {
|
|
3025
3013
|
const dayEvents = getEventsForDate(date);
|
|
@@ -3030,24 +3018,14 @@ function CalendarPage({
|
|
|
3030
3018
|
{
|
|
3031
3019
|
key: index,
|
|
3032
3020
|
onClick: () => handleDateClick(date),
|
|
3033
|
-
className:
|
|
3034
|
-
h-56 border-b border-gray-200 relative cursor-pointer
|
|
3035
|
-
${index < 6 ? "border-r border-gray-200" : ""}
|
|
3036
|
-
hover:bg-gray-50 transition-colors
|
|
3037
|
-
${isTodayDate ? "bg-blue-50" : "bg-white"}
|
|
3038
|
-
`
|
|
3021
|
+
className: clsx("h-56 border-b border-gray-200 relative cursor-pointer", index < 6 ? "border-r border-gray-200" : "", "hover:bg-gray-50 transition-colors", isTodayDate ? "bg-blue-50" : "bg-white")
|
|
3039
3022
|
},
|
|
3040
|
-
/* @__PURE__ */ React2.createElement("div", { className: "flex flex-col h-full p-3" }, /* @__PURE__ */ React2.createElement("div", { className: "flex flex-col items-center mb-3" }, /* @__PURE__ */ React2.createElement("div", { className:
|
|
3023
|
+
/* @__PURE__ */ React2.createElement("div", { className: "flex flex-col h-full p-3" }, /* @__PURE__ */ React2.createElement("div", { className: "flex flex-col items-center mb-3" }, /* @__PURE__ */ React2.createElement("div", { className: clsx("flex items-center justify-center text-lg font-bold w-10 h-10 rounded-full", isTodayDate ? "bg-blue-600 text-white shadow-md" : isWeekend2 ? "text-red-600 bg-red-50" : "text-gray-900 hover:bg-gray-100", "transition-colors") }, date.getDate()), (index === 0 || date.getDate() === 1) && /* @__PURE__ */ React2.createElement("div", { className: "text-xs text-gray-500 mt-1 font-medium" }, date.getMonth() + 1, "\u6708")), /* @__PURE__ */ React2.createElement("div", { className: "flex-1 flex flex-col" }, dayEvents.length > 0 ? /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("div", { className: "text-center mb-2" }, /* @__PURE__ */ React2.createElement("span", { className: clsx("inline-flex items-center justify-center w-6 h-6 text-xs font-bold rounded-full", dayEvents.length > 5 ? "bg-red-100 text-red-700" : dayEvents.length > 2 ? "bg-yellow-100 text-yellow-700" : "bg-green-100 text-green-700") }, dayEvents.length)), /* @__PURE__ */ React2.createElement("div", { className: "space-y-1 overflow-hidden" }, dayEvents.slice(0, 4).map((event, eventIndex) => /* @__PURE__ */ React2.createElement(
|
|
3041
3024
|
"div",
|
|
3042
3025
|
{
|
|
3043
3026
|
key: eventIndex,
|
|
3044
3027
|
onClick: (e) => event.isRealEvent && event.id ? handleEventClick(events.find((e2) => e2.id === event.id), e) : void 0,
|
|
3045
|
-
className:
|
|
3046
|
-
text-xs px-2 py-1 rounded font-medium truncate text-center
|
|
3047
|
-
${event.isRealEvent ? "cursor-pointer hover:opacity-80 hover:shadow-sm" : "cursor-default"}
|
|
3048
|
-
transition-all duration-200
|
|
3049
|
-
${getEventColorClass(event.color)}
|
|
3050
|
-
`,
|
|
3028
|
+
className: clsx("text-xs px-2 py-1 rounded font-medium truncate text-center", event.isRealEvent ? "cursor-pointer hover:opacity-80 hover:shadow-sm" : "cursor-default", "transition-all duration-200", getEventColorClass(event.color)),
|
|
3051
3029
|
title: event.title
|
|
3052
3030
|
},
|
|
3053
3031
|
event.title
|
|
@@ -3058,7 +3036,7 @@ function CalendarPage({
|
|
|
3058
3036
|
const renderDayView = () => {
|
|
3059
3037
|
const dayEvents = getEventsForDate(currentDate);
|
|
3060
3038
|
const isTodayDate = isToday(currentDate);
|
|
3061
|
-
return /* @__PURE__ */ React2.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden mb-6" }, /* @__PURE__ */ React2.createElement("div", { className: "bg-gray-50 p-4 border-b border-gray-200" }, /* @__PURE__ */ React2.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2.createElement("div", { className: "text-sm text-gray-600 mb-1" }, currentDate.toLocaleDateString("zh-CN", { weekday: "long" })), /* @__PURE__ */ React2.createElement("div", { className:
|
|
3039
|
+
return /* @__PURE__ */ React2.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden mb-6" }, /* @__PURE__ */ React2.createElement("div", { className: "bg-gray-50 p-4 border-b border-gray-200" }, /* @__PURE__ */ React2.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2.createElement("div", { className: "text-sm text-gray-600 mb-1" }, currentDate.toLocaleDateString("zh-CN", { weekday: "long" })), /* @__PURE__ */ React2.createElement("div", { className: clsx("text-2xl font-bold", isTodayDate ? "text-blue-600" : "text-gray-900") }, currentDate.getDate(), "\u65E5"), /* @__PURE__ */ React2.createElement("div", { className: "text-sm text-gray-600" }, currentDate.toLocaleDateString("zh-CN", { year: "numeric", month: "long" })))), /* @__PURE__ */ React2.createElement("div", { className: "p-4" }, /* @__PURE__ */ React2.createElement(
|
|
3062
3040
|
"button",
|
|
3063
3041
|
{
|
|
3064
3042
|
onClick: () => handleDateClick(currentDate),
|
|
@@ -3070,12 +3048,7 @@ function CalendarPage({
|
|
|
3070
3048
|
{
|
|
3071
3049
|
key: eventIndex,
|
|
3072
3050
|
onClick: (e) => event.isRealEvent && event.id ? handleEventClick(events.find((e2) => e2.id === event.id), e) : void 0,
|
|
3073
|
-
className:
|
|
3074
|
-
p-3 rounded-lg border-l-4 bg-gray-50
|
|
3075
|
-
${event.isRealEvent ? "cursor-pointer hover:shadow-md" : "cursor-default"}
|
|
3076
|
-
transition-shadow
|
|
3077
|
-
${getEventColorClass(event.color)}
|
|
3078
|
-
`
|
|
3051
|
+
className: clsx("p-3 rounded-lg border-l-4 bg-gray-50", event.isRealEvent ? "cursor-pointer hover:shadow-md" : "cursor-default", "transition-shadow", getEventColorClass(event.color))
|
|
3079
3052
|
},
|
|
3080
3053
|
/* @__PURE__ */ React2.createElement("div", { className: "font-medium text-sm mb-1" }, event.title),
|
|
3081
3054
|
event.isRealEvent && event.id && /* @__PURE__ */ React2.createElement("div", { className: "text-xs text-gray-600" }, "\u70B9\u51FB\u7F16\u8F91\u4E8B\u4EF6")
|
|
@@ -3088,7 +3061,7 @@ function CalendarPage({
|
|
|
3088
3061
|
setSelectedDate(null);
|
|
3089
3062
|
const eventCount = createdEvents.length;
|
|
3090
3063
|
if (eventCount > 1) {
|
|
3091
|
-
alert(
|
|
3064
|
+
alert("\u6210\u529F\u521B\u5EFA " + eventCount + " \u4E2A\u4E8B\u4EF6\uFF01");
|
|
3092
3065
|
} else {
|
|
3093
3066
|
alert("\u4E8B\u4EF6\u521B\u5EFA\u6210\u529F\uFF01");
|
|
3094
3067
|
}
|
|
@@ -3108,21 +3081,21 @@ function CalendarPage({
|
|
|
3108
3081
|
"button",
|
|
3109
3082
|
{
|
|
3110
3083
|
onClick: () => setActiveTab("calendar"),
|
|
3111
|
-
className:
|
|
3084
|
+
className: clsx("px-4 py-2 text-sm font-medium rounded-md transition-colors", activeTab === "calendar" ? "bg-white text-gray-900 shadow-sm" : "text-gray-600 hover:text-gray-900")
|
|
3112
3085
|
},
|
|
3113
3086
|
"\u{1F4C5} \u65E5\u5386\u89C6\u56FE"
|
|
3114
3087
|
), /* @__PURE__ */ React2.createElement(
|
|
3115
3088
|
"button",
|
|
3116
3089
|
{
|
|
3117
3090
|
onClick: () => setActiveTab("events"),
|
|
3118
|
-
className:
|
|
3091
|
+
className: clsx("px-4 py-2 text-sm font-medium rounded-md transition-colors", activeTab === "events" ? "bg-white text-gray-900 shadow-sm" : "text-gray-600 hover:text-gray-900")
|
|
3119
3092
|
},
|
|
3120
3093
|
"\u{1F4CB} \u4E8B\u4EF6\u5217\u8868"
|
|
3121
3094
|
), /* @__PURE__ */ React2.createElement(
|
|
3122
3095
|
"button",
|
|
3123
3096
|
{
|
|
3124
3097
|
onClick: () => setActiveTab("settings"),
|
|
3125
|
-
className:
|
|
3098
|
+
className: clsx("px-4 py-2 text-sm font-medium rounded-md transition-colors", activeTab === "settings" ? "bg-white text-gray-900 shadow-sm" : "text-gray-600 hover:text-gray-900")
|
|
3126
3099
|
},
|
|
3127
3100
|
"\u2699\uFE0F \u8BBE\u7F6E"
|
|
3128
3101
|
))), error && /* @__PURE__ */ React2.createElement("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4 mb-6" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-start" }, /* @__PURE__ */ React2.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React2.createElement("svg", { className: "h-5 w-5 text-red-400 mt-0.5", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React2.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z", clipRule: "evenodd" }))), /* @__PURE__ */ React2.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React2.createElement("h3", { className: "text-sm font-medium text-red-800" }, "\u64CD\u4F5C\u5931\u8D25"), /* @__PURE__ */ React2.createElement("p", { className: "mt-1 text-sm text-red-700" }, error), /* @__PURE__ */ React2.createElement(
|
|
@@ -3137,7 +3110,7 @@ function CalendarPage({
|
|
|
3137
3110
|
{
|
|
3138
3111
|
key: view,
|
|
3139
3112
|
onClick: () => setViewType(CalendarViewType[view.toUpperCase()]),
|
|
3140
|
-
className:
|
|
3113
|
+
className: clsx("px-3 py-1.5 text-sm font-medium rounded-md transition-colors", viewType === CalendarViewType[view.toUpperCase()] ? "bg-white text-gray-900 shadow-sm" : "text-gray-600 hover:text-gray-900")
|
|
3141
3114
|
},
|
|
3142
3115
|
view === "month" ? "\u6708" : view === "week" ? "\u5468" : "\u65E5"
|
|
3143
3116
|
)))))), renderCalendarView(), /* @__PURE__ */ React2.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-6" }, /* @__PURE__ */ React2.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center mb-4" }, /* @__PURE__ */ React2.createElement("div", { className: "bg-blue-100 p-3 rounded-lg" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-6 h-6 text-blue-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }))), /* @__PURE__ */ React2.createElement("h3", { className: "ml-3 text-lg font-semibold text-gray-900" }, "\u4E8B\u4EF6\u7BA1\u7406")), /* @__PURE__ */ React2.createElement("p", { className: "text-gray-600 text-sm mb-4" }, "\u521B\u5EFA\u3001\u7F16\u8F91\u3001\u5220\u9664\u65E5\u5386\u4E8B\u4EF6\uFF0C\u652F\u6301\u62D6\u62FD\u8C03\u6574\u65F6\u95F4\uFF0C\u591A\u79CD\u989C\u8272\u6807\u8BC6\u3002")), /* @__PURE__ */ React2.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center mb-4" }, /* @__PURE__ */ React2.createElement("div", { className: "bg-green-100 p-3 rounded-lg" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-6 h-6 text-green-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" }))), /* @__PURE__ */ React2.createElement("h3", { className: "ml-3 text-lg font-semibold text-gray-900" }, "\u91CD\u590D\u4E8B\u4EF6")), /* @__PURE__ */ React2.createElement("p", { className: "text-gray-600 text-sm mb-4" }, "\u652F\u6301\u65E5\u3001\u5468\u3001\u6708\u3001\u5E74\u91CD\u590D\u6A21\u5F0F\uFF0C\u7075\u6D3B\u7684\u91CD\u590D\u89C4\u5219\u914D\u7F6E\u3002")), /* @__PURE__ */ React2.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center mb-4" }, /* @__PURE__ */ React2.createElement("div", { className: "bg-purple-100 p-3 rounded-lg" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-6 h-6 text-purple-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 17h5l-5 5v-5zM4 7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v6a2 2 0 01-2 2H6a2 2 0 01-2-2V7z" }))), /* @__PURE__ */ React2.createElement("h3", { className: "ml-3 text-lg font-semibold text-gray-900" }, "\u667A\u80FD\u63D0\u9192")), /* @__PURE__ */ React2.createElement("p", { className: "text-gray-600 text-sm mb-4" }, "\u90AE\u4EF6\u3001\u901A\u77E5\u3001\u77ED\u4FE1\u591A\u79CD\u63D0\u9192\u65B9\u5F0F\uFF0C\u81EA\u5B9A\u4E49\u63D0\u9192\u65F6\u95F4\u3002"))), /* @__PURE__ */ React2.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" }, /* @__PURE__ */ React2.createElement("h3", { className: "text-lg font-semibold text-gray-900 mb-4" }, "\u6280\u672F\u7279\u6027"), /* @__PURE__ */ React2.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center text-sm text-gray-600" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-4 h-4 text-green-500 mr-3 flex-shrink-0", fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React2.createElement("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" })), "\u5B8C\u6574\u7684TypeScript\u7C7B\u578B\u5B9A\u4E49"), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center text-sm text-gray-600" }, /* @__PURE__ */ React2.createElement("svg", { className: "w-4 h-4 text-green-500 mr-3 flex-shrink-0", fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React2.createElement("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" })), "\u54CD\u5E94\u5F0F\u8BBE\u8BA1 (TailwindCSS)")))), activeTab === "events" && /* @__PURE__ */ React2.createElement(
|
|
@@ -3250,7 +3223,7 @@ var EventModal = ({
|
|
|
3250
3223
|
const day = String(date.getDate()).padStart(2, "0");
|
|
3251
3224
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
3252
3225
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
3253
|
-
return
|
|
3226
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes;
|
|
3254
3227
|
};
|
|
3255
3228
|
const validateForm = () => {
|
|
3256
3229
|
const newErrors = {};
|
|
@@ -3365,7 +3338,7 @@ var EventModal = ({
|
|
|
3365
3338
|
id: "title",
|
|
3366
3339
|
value: formData.title,
|
|
3367
3340
|
onChange: (e) => handleInputChange("title", e.target.value),
|
|
3368
|
-
className:
|
|
3341
|
+
className: clsx("w-full px-3 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none", errors.title ? "border-red-500" : "border-gray-300"),
|
|
3369
3342
|
placeholder: "\u8F93\u5165\u4E8B\u4EF6\u6807\u9898"
|
|
3370
3343
|
}
|
|
3371
3344
|
), errors.title && /* @__PURE__ */ React2.createElement("p", { className: "text-red-500 text-sm mt-1" }, errors.title)), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React2.createElement(
|
|
@@ -3384,10 +3357,10 @@ var EventModal = ({
|
|
|
3384
3357
|
id: "startTime",
|
|
3385
3358
|
value: formData.isAllDay ? formData.startTime.split("T")[0] : formData.startTime,
|
|
3386
3359
|
onChange: (e) => {
|
|
3387
|
-
const value = formData.isAllDay ?
|
|
3360
|
+
const value = formData.isAllDay ? e.target.value + "T00:00" : e.target.value;
|
|
3388
3361
|
handleInputChange("startTime", value);
|
|
3389
3362
|
},
|
|
3390
|
-
className:
|
|
3363
|
+
className: clsx("w-full px-3 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none", errors.startTime ? "border-red-500" : "border-gray-300")
|
|
3391
3364
|
}
|
|
3392
3365
|
), errors.startTime && /* @__PURE__ */ React2.createElement("p", { className: "text-red-500 text-sm mt-1" }, errors.startTime)), /* @__PURE__ */ React2.createElement("div", null, /* @__PURE__ */ React2.createElement("label", { htmlFor: "endTime", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u7ED3\u675F\u65F6\u95F4 *"), /* @__PURE__ */ React2.createElement(
|
|
3393
3366
|
"input",
|
|
@@ -3396,10 +3369,10 @@ var EventModal = ({
|
|
|
3396
3369
|
id: "endTime",
|
|
3397
3370
|
value: formData.isAllDay ? formData.endTime.split("T")[0] : formData.endTime,
|
|
3398
3371
|
onChange: (e) => {
|
|
3399
|
-
const value = formData.isAllDay ?
|
|
3372
|
+
const value = formData.isAllDay ? e.target.value + "T23:59" : e.target.value;
|
|
3400
3373
|
handleInputChange("endTime", value);
|
|
3401
3374
|
},
|
|
3402
|
-
className:
|
|
3375
|
+
className: clsx("w-full px-3 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none", errors.endTime ? "border-red-500" : "border-gray-300")
|
|
3403
3376
|
}
|
|
3404
3377
|
), errors.endTime && /* @__PURE__ */ React2.createElement("p", { className: "text-red-500 text-sm mt-1" }, errors.endTime))), /* @__PURE__ */ React2.createElement("div", null, /* @__PURE__ */ React2.createElement("label", { htmlFor: "location", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u4F4D\u7F6E"), /* @__PURE__ */ React2.createElement(
|
|
3405
3378
|
"input",
|
|
@@ -3640,7 +3613,7 @@ var EventModal = ({
|
|
|
3640
3613
|
onClose: () => setShowDeleteConfirm(false),
|
|
3641
3614
|
onConfirm: handleDelete,
|
|
3642
3615
|
title: "\u786E\u8BA4\u5220\u9664",
|
|
3643
|
-
message:
|
|
3616
|
+
message: '\u786E\u5B9A\u8981\u5220\u9664\u4E8B\u4EF6"' + formData.title + '"\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002',
|
|
3644
3617
|
confirmText: "\u5220\u9664",
|
|
3645
3618
|
cancelText: "\u53D6\u6D88",
|
|
3646
3619
|
isLoading
|
|
@@ -3649,8 +3622,6 @@ var EventModal = ({
|
|
|
3649
3622
|
);
|
|
3650
3623
|
};
|
|
3651
3624
|
var EventModal_default = EventModal;
|
|
3652
|
-
|
|
3653
|
-
// src/calendar/pages/EventDetailPage.tsx
|
|
3654
3625
|
var EventDetailPage = ({
|
|
3655
3626
|
eventId,
|
|
3656
3627
|
onBack,
|
|
@@ -3762,7 +3733,7 @@ var EventDetailPage = ({
|
|
|
3762
3733
|
)))), /* @__PURE__ */ React2.createElement("div", { className: "bg-white rounded-lg shadow-md overflow-hidden" }, /* @__PURE__ */ React2.createElement("div", { className: "px-6 py-4 border-b border-gray-200" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2.createElement("h2", { className: "text-2xl font-semibold text-gray-900" }, event.title), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2.createElement(
|
|
3763
3734
|
"span",
|
|
3764
3735
|
{
|
|
3765
|
-
className:
|
|
3736
|
+
className: clsx("px-2 py-1 text-xs font-medium rounded-full", getPriorityColor(event.priority || "normal"))
|
|
3766
3737
|
},
|
|
3767
3738
|
getPriorityText(event.priority || "normal")
|
|
3768
3739
|
), /* @__PURE__ */ React2.createElement(
|
|
@@ -3786,7 +3757,7 @@ var EventDetailPage = ({
|
|
|
3786
3757
|
onClose: () => setShowDeleteConfirm(false),
|
|
3787
3758
|
onConfirm: handleDelete,
|
|
3788
3759
|
title: "\u786E\u8BA4\u5220\u9664",
|
|
3789
|
-
message:
|
|
3760
|
+
message: '\u60A8\u786E\u5B9A\u8981\u5220\u9664\u4E8B\u4EF6"' + event.title + '"\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002',
|
|
3790
3761
|
confirmText: "\u5220\u9664",
|
|
3791
3762
|
cancelText: "\u53D6\u6D88",
|
|
3792
3763
|
isLoading: isDeleting
|
|
@@ -3861,7 +3832,7 @@ function EventForm({
|
|
|
3861
3832
|
const day = String(date.getDate()).padStart(2, "0");
|
|
3862
3833
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
3863
3834
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
3864
|
-
return
|
|
3835
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes;
|
|
3865
3836
|
};
|
|
3866
3837
|
const parseDateTimeLocal = (value) => {
|
|
3867
3838
|
return new Date(value);
|
|
@@ -3890,7 +3861,7 @@ function EventForm({
|
|
|
3890
3861
|
id: "title",
|
|
3891
3862
|
value: formData.title,
|
|
3892
3863
|
onChange: (e) => handleInputChange("title", e.target.value),
|
|
3893
|
-
className:
|
|
3864
|
+
className: clsx("w-full px-3 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500", errors.title ? "border-red-300" : "border-gray-300"),
|
|
3894
3865
|
placeholder: "\u8BF7\u8F93\u5165\u4E8B\u4EF6\u6807\u9898"
|
|
3895
3866
|
}
|
|
3896
3867
|
), errors.title && /* @__PURE__ */ React2.createElement("p", { className: "mt-1 text-sm text-red-600" }, errors.title)), /* @__PURE__ */ React2.createElement("div", null, /* @__PURE__ */ React2.createElement("label", { htmlFor: "description", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u4E8B\u4EF6\u63CF\u8FF0"), /* @__PURE__ */ React2.createElement(
|
|
@@ -3944,7 +3915,7 @@ function EventForm({
|
|
|
3944
3915
|
const newDate = formData.allDay ? /* @__PURE__ */ new Date(e.target.value + "T23:59:59") : parseDateTimeLocal(e.target.value);
|
|
3945
3916
|
handleInputChange("endTime", newDate);
|
|
3946
3917
|
},
|
|
3947
|
-
className:
|
|
3918
|
+
className: clsx("w-full px-3 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500", errors.endTime ? "border-red-300" : "border-gray-300")
|
|
3948
3919
|
}
|
|
3949
3920
|
), errors.endTime && /* @__PURE__ */ React2.createElement("p", { className: "mt-1 text-sm text-red-600" }, errors.endTime))), /* @__PURE__ */ React2.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u5916\u89C2"), /* @__PURE__ */ React2.createElement("div", null, /* @__PURE__ */ React2.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u4E8B\u4EF6\u989C\u8272"), /* @__PURE__ */ React2.createElement("div", { className: "flex flex-wrap gap-3" }, colorOptions.map((option) => /* @__PURE__ */ React2.createElement(
|
|
3950
3921
|
"button",
|
|
@@ -3952,12 +3923,9 @@ function EventForm({
|
|
|
3952
3923
|
key: option.value,
|
|
3953
3924
|
type: "button",
|
|
3954
3925
|
onClick: () => handleInputChange("color", option.value),
|
|
3955
|
-
className:
|
|
3956
|
-
flex items-center px-3 py-2 rounded-lg border-2 transition-all
|
|
3957
|
-
${formData.color === option.value ? "border-blue-500 ring-2 ring-blue-200" : "border-gray-200 hover:border-gray-300"}
|
|
3958
|
-
`
|
|
3926
|
+
className: clsx("flex items-center px-3 py-2 rounded-lg border-2 transition-all", formData.color === option.value ? "border-blue-500 ring-2 ring-blue-200" : "border-gray-200 hover:border-gray-300")
|
|
3959
3927
|
},
|
|
3960
|
-
/* @__PURE__ */ React2.createElement("div", { className:
|
|
3928
|
+
/* @__PURE__ */ React2.createElement("div", { className: clsx("w-4 h-4 rounded-full", option.class, "mr-2") }),
|
|
3961
3929
|
/* @__PURE__ */ React2.createElement("span", { className: "text-sm text-gray-700" }, option.label)
|
|
3962
3930
|
))))), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center justify-end gap-3 pt-6 border-t border-gray-200" }, /* @__PURE__ */ React2.createElement(
|
|
3963
3931
|
"button",
|
|
@@ -4067,7 +4035,7 @@ var EventSearch = ({
|
|
|
4067
4035
|
};
|
|
4068
4036
|
return priorityMap[priority];
|
|
4069
4037
|
};
|
|
4070
|
-
return /* @__PURE__ */ React2.createElement("div", { className:
|
|
4038
|
+
return /* @__PURE__ */ React2.createElement("div", { className: clsx("bg-white rounded-lg border border-gray-200", className) }, /* @__PURE__ */ React2.createElement("div", { className: "p-4 border-b border-gray-200" }, /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
|
|
4071
4039
|
"input",
|
|
4072
4040
|
{
|
|
4073
4041
|
type: "text",
|
|
@@ -4081,12 +4049,12 @@ var EventSearch = ({
|
|
|
4081
4049
|
{
|
|
4082
4050
|
type: "button",
|
|
4083
4051
|
onClick: () => setIsExpanded(!isExpanded),
|
|
4084
|
-
className:
|
|
4052
|
+
className: clsx("px-3 py-2 text-sm font-medium rounded-lg transition-colors", hasActiveFilters ? "bg-blue-100 text-blue-700 border border-blue-300" : "bg-gray-100 text-gray-700 border border-gray-300 hover:bg-gray-200")
|
|
4085
4053
|
},
|
|
4086
4054
|
/* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2.createElement(
|
|
4087
4055
|
"svg",
|
|
4088
4056
|
{
|
|
4089
|
-
className:
|
|
4057
|
+
className: clsx("h-4 w-4 transition-transform", isExpanded ? "rotate-180" : ""),
|
|
4090
4058
|
fill: "none",
|
|
4091
4059
|
stroke: "currentColor",
|
|
4092
4060
|
viewBox: "0 0 24 24"
|
|
@@ -4134,9 +4102,9 @@ var EventSearch = ({
|
|
|
4134
4102
|
const newColors = filters.colorFilter.includes(color) ? filters.colorFilter.filter((c) => c !== color) : [...filters.colorFilter, color];
|
|
4135
4103
|
handleFilterChange("colorFilter", newColors);
|
|
4136
4104
|
},
|
|
4137
|
-
className:
|
|
4105
|
+
className: clsx("w-8 h-8 rounded border-2 transition-all", filters.colorFilter.includes(color) ? "border-gray-800 scale-110" : "border-gray-300 hover:border-gray-500"),
|
|
4138
4106
|
style: { backgroundColor: color },
|
|
4139
|
-
title:
|
|
4107
|
+
title: "\u989C\u8272: " + color
|
|
4140
4108
|
}
|
|
4141
4109
|
)))), /* @__PURE__ */ React2.createElement("div", { className: "md:col-span-2 lg:col-span-3" }, /* @__PURE__ */ React2.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u65E5\u671F\u8303\u56F4"), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2.createElement(
|
|
4142
4110
|
"input",
|
|
@@ -4178,9 +4146,9 @@ function useEvents2() {
|
|
|
4178
4146
|
startDate: toLocalISOString(startDate),
|
|
4179
4147
|
endDate: toLocalISOString(endDate)
|
|
4180
4148
|
});
|
|
4181
|
-
const response = await fetch(
|
|
4149
|
+
const response = await fetch("/api/calendar/events?" + params);
|
|
4182
4150
|
if (!response.ok) {
|
|
4183
|
-
throw new Error(
|
|
4151
|
+
throw new Error("\u83B7\u53D6\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4184
4152
|
}
|
|
4185
4153
|
const data = await response.json();
|
|
4186
4154
|
if (!data.success) {
|
|
@@ -4229,7 +4197,7 @@ function useEvents2() {
|
|
|
4229
4197
|
body: JSON.stringify(createRequest)
|
|
4230
4198
|
});
|
|
4231
4199
|
if (!response.ok) {
|
|
4232
|
-
throw new Error(
|
|
4200
|
+
throw new Error("\u521B\u5EFA\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4233
4201
|
}
|
|
4234
4202
|
const data = await response.json();
|
|
4235
4203
|
if (!data.success) {
|
|
@@ -4265,7 +4233,7 @@ function useEvents2() {
|
|
|
4265
4233
|
if (eventData.allDay !== void 0) updateRequest.allDay = eventData.allDay;
|
|
4266
4234
|
if (eventData.location !== void 0) updateRequest.location = eventData.location;
|
|
4267
4235
|
if (eventData.color !== void 0) updateRequest.color = eventData.color;
|
|
4268
|
-
const response = await fetch(
|
|
4236
|
+
const response = await fetch("/api/calendar/events/" + eventId, {
|
|
4269
4237
|
method: "PUT",
|
|
4270
4238
|
headers: {
|
|
4271
4239
|
"Content-Type": "application/json"
|
|
@@ -4273,7 +4241,7 @@ function useEvents2() {
|
|
|
4273
4241
|
body: JSON.stringify(updateRequest)
|
|
4274
4242
|
});
|
|
4275
4243
|
if (!response.ok) {
|
|
4276
|
-
throw new Error(
|
|
4244
|
+
throw new Error("\u66F4\u65B0\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4277
4245
|
}
|
|
4278
4246
|
const data = await response.json();
|
|
4279
4247
|
if (!data.success) {
|
|
@@ -4303,12 +4271,12 @@ function useEvents2() {
|
|
|
4303
4271
|
setLoading(true);
|
|
4304
4272
|
setError(void 0);
|
|
4305
4273
|
try {
|
|
4306
|
-
const url = deleteAll ?
|
|
4274
|
+
const url = deleteAll ? "/api/calendar/events/" + eventId + "?deleteAll=true" : "/api/calendar/events/" + eventId;
|
|
4307
4275
|
const response = await fetch(url, {
|
|
4308
4276
|
method: "DELETE"
|
|
4309
4277
|
});
|
|
4310
4278
|
if (!response.ok) {
|
|
4311
|
-
throw new Error(
|
|
4279
|
+
throw new Error("\u5220\u9664\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4312
4280
|
}
|
|
4313
4281
|
const data = await response.json();
|
|
4314
4282
|
if (!data.success) {
|
|
@@ -4336,7 +4304,7 @@ function useEvents2() {
|
|
|
4336
4304
|
body: JSON.stringify({ eventIds })
|
|
4337
4305
|
});
|
|
4338
4306
|
if (!response.ok) {
|
|
4339
|
-
throw new Error(
|
|
4307
|
+
throw new Error("\u6279\u91CF\u5220\u9664\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4340
4308
|
}
|
|
4341
4309
|
const data = await response.json();
|
|
4342
4310
|
if (!data.success) {
|
|
@@ -4379,7 +4347,7 @@ var CalendarExportService = class {
|
|
|
4379
4347
|
case "csv":
|
|
4380
4348
|
return this.exportToCSV(events);
|
|
4381
4349
|
default:
|
|
4382
|
-
throw new Error(
|
|
4350
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u5BFC\u51FA\u683C\u5F0F: " + options.format);
|
|
4383
4351
|
}
|
|
4384
4352
|
}
|
|
4385
4353
|
/**
|
|
@@ -4394,16 +4362,16 @@ var CalendarExportService = class {
|
|
|
4394
4362
|
lines.push("METHOD:PUBLISH");
|
|
4395
4363
|
events.forEach((event) => {
|
|
4396
4364
|
lines.push("BEGIN:VEVENT");
|
|
4397
|
-
lines.push(
|
|
4398
|
-
lines.push(
|
|
4399
|
-
lines.push(
|
|
4400
|
-
lines.push(
|
|
4401
|
-
lines.push(
|
|
4365
|
+
lines.push("UID:" + event.id + "@profile-v1.calendar");
|
|
4366
|
+
lines.push("DTSTART:" + this.formatDateTimeToICal(new Date(event.startTime)));
|
|
4367
|
+
lines.push("DTEND:" + this.formatDateTimeToICal(new Date(event.endTime)));
|
|
4368
|
+
lines.push("DTSTAMP:" + this.formatDateTimeToICal(new Date(event.createdAt)));
|
|
4369
|
+
lines.push("SUMMARY:" + this.escapeICalText(event.title));
|
|
4402
4370
|
if (event.description) {
|
|
4403
|
-
lines.push(
|
|
4371
|
+
lines.push("DESCRIPTION:" + this.escapeICalText(event.description));
|
|
4404
4372
|
}
|
|
4405
4373
|
if (event.location) {
|
|
4406
|
-
lines.push(
|
|
4374
|
+
lines.push("LOCATION:" + this.escapeICalText(event.location));
|
|
4407
4375
|
}
|
|
4408
4376
|
if (event.priority) {
|
|
4409
4377
|
const priorityMap = {
|
|
@@ -4411,7 +4379,7 @@ var CalendarExportService = class {
|
|
|
4411
4379
|
"normal": "5",
|
|
4412
4380
|
"high": "1"
|
|
4413
4381
|
};
|
|
4414
|
-
lines.push(
|
|
4382
|
+
lines.push("PRIORITY:" + (priorityMap[event.priority] || "5"));
|
|
4415
4383
|
}
|
|
4416
4384
|
if (event.allDay) {
|
|
4417
4385
|
lines.push("X-MICROSOFT-CDO-ALLDAYEVENT:TRUE");
|
|
@@ -4531,7 +4499,7 @@ var CalendarExportService = class {
|
|
|
4531
4499
|
*/
|
|
4532
4500
|
static escapeCSVField(field) {
|
|
4533
4501
|
if (field.includes(",") || field.includes('"') || field.includes("\n")) {
|
|
4534
|
-
return
|
|
4502
|
+
return '"' + field.replace(/"/g, '""') + '"';
|
|
4535
4503
|
}
|
|
4536
4504
|
return field;
|
|
4537
4505
|
}
|
|
@@ -4551,7 +4519,7 @@ var CalendarImportService = class {
|
|
|
4551
4519
|
return {
|
|
4552
4520
|
success: false,
|
|
4553
4521
|
importedCount: 0,
|
|
4554
|
-
errors: [
|
|
4522
|
+
errors: ["\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25: " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF")],
|
|
4555
4523
|
events: []
|
|
4556
4524
|
};
|
|
4557
4525
|
}
|
|
@@ -4573,7 +4541,7 @@ var CalendarImportService = class {
|
|
|
4573
4541
|
events = this.parseCSVContent(content);
|
|
4574
4542
|
break;
|
|
4575
4543
|
default:
|
|
4576
|
-
throw new Error(
|
|
4544
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u5BFC\u5165\u683C\u5F0F: " + options.format);
|
|
4577
4545
|
}
|
|
4578
4546
|
if (options.validateEvents) {
|
|
4579
4547
|
events = this.validateAndFilterEvents(events);
|
|
@@ -4588,7 +4556,7 @@ var CalendarImportService = class {
|
|
|
4588
4556
|
return {
|
|
4589
4557
|
success: false,
|
|
4590
4558
|
importedCount: 0,
|
|
4591
|
-
errors: [
|
|
4559
|
+
errors: ["\u89E3\u6790\u5185\u5BB9\u5931\u8D25: " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF")],
|
|
4592
4560
|
events: []
|
|
4593
4561
|
};
|
|
4594
4562
|
}
|
|
@@ -4815,7 +4783,7 @@ var CalendarImportService = class {
|
|
|
4815
4783
|
const hour = dateTime.substring(8, 10);
|
|
4816
4784
|
const minute = dateTime.substring(10, 12);
|
|
4817
4785
|
const second = dateTime.substring(12, 14);
|
|
4818
|
-
return
|
|
4786
|
+
return year + "-" + month + "-" + day + "T" + hour + ":" + minute + ":" + second + ".000Z";
|
|
4819
4787
|
}
|
|
4820
4788
|
} else {
|
|
4821
4789
|
const dateOnly = value.replace(/[^\d]/g, "");
|
|
@@ -4823,7 +4791,7 @@ var CalendarImportService = class {
|
|
|
4823
4791
|
const year = dateOnly.substring(0, 4);
|
|
4824
4792
|
const month = dateOnly.substring(4, 6);
|
|
4825
4793
|
const day = dateOnly.substring(6, 8);
|
|
4826
|
-
return
|
|
4794
|
+
return year + "-" + month + "-" + day + "T00:00:00.000Z";
|
|
4827
4795
|
}
|
|
4828
4796
|
}
|
|
4829
4797
|
return (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -4985,22 +4953,22 @@ var RecurrenceService = class {
|
|
|
4985
4953
|
let description = "";
|
|
4986
4954
|
switch (rule.type) {
|
|
4987
4955
|
case "daily":
|
|
4988
|
-
description = rule.interval === 1 ? "\u6BCF\u5929" :
|
|
4956
|
+
description = rule.interval === 1 ? "\u6BCF\u5929" : "\u6BCF" + rule.interval + "\u5929";
|
|
4989
4957
|
break;
|
|
4990
4958
|
case "weekly":
|
|
4991
|
-
description = rule.interval === 1 ? "\u6BCF\u5468" :
|
|
4959
|
+
description = rule.interval === 1 ? "\u6BCF\u5468" : "\u6BCF" + rule.interval + "\u5468";
|
|
4992
4960
|
break;
|
|
4993
4961
|
case "monthly":
|
|
4994
|
-
description = rule.interval === 1 ? "\u6BCF\u6708" :
|
|
4962
|
+
description = rule.interval === 1 ? "\u6BCF\u6708" : "\u6BCF" + rule.interval + "\u4E2A\u6708";
|
|
4995
4963
|
break;
|
|
4996
4964
|
case "yearly":
|
|
4997
|
-
description = rule.interval === 1 ? "\u6BCF\u5E74" :
|
|
4965
|
+
description = rule.interval === 1 ? "\u6BCF\u5E74" : "\u6BCF" + rule.interval + "\u5E74";
|
|
4998
4966
|
break;
|
|
4999
4967
|
}
|
|
5000
4968
|
if (rule.endDate) {
|
|
5001
|
-
description +=
|
|
4969
|
+
description += "\uFF0C\u76F4\u5230" + rule.endDate;
|
|
5002
4970
|
} else if (rule.count) {
|
|
5003
|
-
description +=
|
|
4971
|
+
description += "\uFF0C\u5171" + rule.count + "\u6B21";
|
|
5004
4972
|
}
|
|
5005
4973
|
return description;
|
|
5006
4974
|
}
|
|
@@ -5024,7 +4992,7 @@ var ReminderService = class {
|
|
|
5024
4992
|
* 为事件创建提醒
|
|
5025
4993
|
*/
|
|
5026
4994
|
static createReminder(event, reminderMinutes, reminderType = "browser") {
|
|
5027
|
-
const reminderId =
|
|
4995
|
+
const reminderId = event.id + "_" + Date.now();
|
|
5028
4996
|
const eventStart = new Date(event.startTime);
|
|
5029
4997
|
const reminderTime = new Date(eventStart.getTime() - reminderMinutes * 60 * 1e3);
|
|
5030
4998
|
const reminder = {
|
|
@@ -5106,8 +5074,7 @@ var ReminderService = class {
|
|
|
5106
5074
|
}
|
|
5107
5075
|
const timeText = this.getTimeText(reminder.config.minutes);
|
|
5108
5076
|
const notification = new Notification(`\u{1F4C5} \u4E8B\u4EF6\u63D0\u9192`, {
|
|
5109
|
-
body:
|
|
5110
|
-
${timeText}`,
|
|
5077
|
+
body: reminder.eventTitle + "\n" + timeText,
|
|
5111
5078
|
icon: "/favicon.ico",
|
|
5112
5079
|
tag: reminder.id,
|
|
5113
5080
|
requireInteraction: true
|
|
@@ -5160,10 +5127,7 @@ ${timeText}`,
|
|
|
5160
5127
|
*/
|
|
5161
5128
|
static showVisualAlert(reminder) {
|
|
5162
5129
|
const timeText = this.getTimeText(reminder.config.minutes);
|
|
5163
|
-
alert(
|
|
5164
|
-
|
|
5165
|
-
${reminder.eventTitle}
|
|
5166
|
-
${timeText}`);
|
|
5130
|
+
alert("\u{1F4C5} \u4E8B\u4EF6\u63D0\u9192\n\n" + reminder.eventTitle + "\n" + timeText);
|
|
5167
5131
|
}
|
|
5168
5132
|
/**
|
|
5169
5133
|
* 获取时间描述文本
|
|
@@ -5172,15 +5136,15 @@ ${timeText}`);
|
|
|
5172
5136
|
if (minutes === 0) {
|
|
5173
5137
|
return "\u4E8B\u4EF6\u5373\u5C06\u5F00\u59CB";
|
|
5174
5138
|
} else if (minutes < 60) {
|
|
5175
|
-
return
|
|
5139
|
+
return minutes + "\u5206\u949F\u540E\u5F00\u59CB";
|
|
5176
5140
|
} else if (minutes < 1440) {
|
|
5177
5141
|
const hours = Math.floor(minutes / 60);
|
|
5178
5142
|
const remainingMinutes = minutes % 60;
|
|
5179
|
-
return remainingMinutes > 0 ?
|
|
5143
|
+
return remainingMinutes > 0 ? hours + "\u5C0F\u65F6" + remainingMinutes + "\u5206\u949F\u540E\u5F00\u59CB" : hours + "\u5C0F\u65F6\u540E\u5F00\u59CB";
|
|
5180
5144
|
} else {
|
|
5181
5145
|
const days = Math.floor(minutes / 1440);
|
|
5182
5146
|
const remainingHours = Math.floor(minutes % 1440 / 60);
|
|
5183
|
-
return remainingHours > 0 ?
|
|
5147
|
+
return remainingHours > 0 ? days + "\u5929" + remainingHours + "\u5C0F\u65F6\u540E\u5F00\u59CB" : days + "\u5929\u540E\u5F00\u59CB";
|
|
5184
5148
|
}
|
|
5185
5149
|
}
|
|
5186
5150
|
/**
|