sa2kit 1.6.30 → 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-KJYRIZES.mjs.map → AliyunOSSProvider-P6TOVKMM.mjs.map} +1 -1
- package/dist/AliyunOSSProvider-Z5BRBCG6.js +15 -0
- package/dist/{AliyunOSSProvider-FWAKUB2T.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-RTPMUOZ2.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
- package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
- package/dist/{LocalStorageProvider-XSRCUXOU.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-TV3VKRJK.mjs → chunk-77M5AQG3.mjs} +37 -37
- 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-LZHMNOED.js → chunk-Q5EDCKQA.js} +26 -26
- 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-OPPF3326.js → chunk-X3UU7JHT.js} +38 -38
- 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-ZI25QCHD.mjs → chunk-YOTQG4NP.mjs} +25 -25
- 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-FWAKUB2T.js +0 -15
- package/dist/AliyunOSSProvider-KJYRIZES.mjs +0 -6
- package/dist/ConfigService-7MEZXKJ5.js +0 -21
- package/dist/ConfigService-BV57YYFW.mjs +0 -4
- package/dist/LocalStorageProvider-RTPMUOZ2.mjs +0 -6
- package/dist/LocalStorageProvider-XSRCUXOU.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-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-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-LZHMNOED.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-OPPF3326.js.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-TOC5FSHP.js.map +0 -1
- package/dist/chunk-TV3VKRJK.mjs.map +0 -1
- package/dist/chunk-UOFTHYIH.js.map +0 -1
- package/dist/chunk-VRTRSEEH.mjs.map +0 -1
- package/dist/chunk-ZI25QCHD.mjs.map +0 -1
package/dist/calendar/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
require('../chunk-
|
|
3
|
+
var chunk5A7ERLKK_js = require('../chunk-5A7ERLKK.js');
|
|
4
|
+
require('../chunk-ZWQJSZEY.js');
|
|
5
|
+
require('../chunk-25OFOKNF.js');
|
|
6
6
|
require('../chunk-DGUM43GV.js');
|
|
7
7
|
var React2 = require('react');
|
|
8
|
+
var clsx = require('clsx');
|
|
8
9
|
var core = require('@dnd-kit/core');
|
|
9
10
|
|
|
10
11
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -81,7 +82,7 @@ function formatDate(date) {
|
|
|
81
82
|
const year = date.getFullYear();
|
|
82
83
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
83
84
|
const day = String(date.getDate()).padStart(2, "0");
|
|
84
|
-
return
|
|
85
|
+
return year + "-" + month + "-" + day;
|
|
85
86
|
}
|
|
86
87
|
function formatTime(date) {
|
|
87
88
|
return date.toLocaleTimeString("zh-CN", {
|
|
@@ -109,7 +110,7 @@ function toLocalISOString(date) {
|
|
|
109
110
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
110
111
|
const seconds = String(date.getSeconds()).padStart(2, "0");
|
|
111
112
|
const milliseconds = String(date.getMilliseconds()).padStart(3, "0");
|
|
112
|
-
return
|
|
113
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes + ":" + seconds + "." + milliseconds;
|
|
113
114
|
}
|
|
114
115
|
function getMonthStart(date) {
|
|
115
116
|
return new Date(date.getFullYear(), date.getMonth(), 1);
|
|
@@ -256,9 +257,9 @@ function getRelativeTime(date, locale = "zh-CN") {
|
|
|
256
257
|
} else if (diffInDays === -1) {
|
|
257
258
|
return "\u6628\u5929";
|
|
258
259
|
} else if (diffInDays > 1 && diffInDays <= 7) {
|
|
259
|
-
return
|
|
260
|
+
return diffInDays + "\u5929\u540E";
|
|
260
261
|
} else if (diffInDays < -1 && diffInDays >= -7) {
|
|
261
|
-
return
|
|
262
|
+
return Math.abs(diffInDays) + "\u5929\u524D";
|
|
262
263
|
}
|
|
263
264
|
return formatDate(date);
|
|
264
265
|
}
|
|
@@ -459,13 +460,13 @@ function EventList({
|
|
|
459
460
|
"button",
|
|
460
461
|
{
|
|
461
462
|
onClick: () => handleSortChange(field),
|
|
462
|
-
className:
|
|
463
|
+
className: clsx.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")
|
|
463
464
|
},
|
|
464
465
|
label,
|
|
465
466
|
/* @__PURE__ */ React2__default.default.createElement(
|
|
466
467
|
"svg",
|
|
467
468
|
{
|
|
468
|
-
className:
|
|
469
|
+
className: clsx.clsx("ml-1 w-4 h-4 transition-transform", isActive ? isAsc ? "rotate-180" : "" : "opacity-50"),
|
|
469
470
|
fill: "none",
|
|
470
471
|
stroke: "currentColor",
|
|
471
472
|
viewBox: "0 0 24 24"
|
|
@@ -510,10 +511,10 @@ function EventList({
|
|
|
510
511
|
"div",
|
|
511
512
|
{
|
|
512
513
|
key: event.id,
|
|
513
|
-
className:
|
|
514
|
+
className: clsx.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" : ""),
|
|
514
515
|
onClick: () => !isSelectionMode && onEventClick(event)
|
|
515
516
|
},
|
|
516
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start gap-3 flex-1" }, isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "pt-1" }, renderCheckbox(event.id)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-3 mb-2" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, event.title), /* @__PURE__ */ React2__default.default.createElement("span", { className:
|
|
517
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start justify-between" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start gap-3 flex-1" }, isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "pt-1" }, renderCheckbox(event.id)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-3 mb-2" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, event.title), /* @__PURE__ */ React2__default.default.createElement("span", { className: clsx.clsx("px-2 py-1 text-xs font-medium rounded border", priorityDisplay.color) }, priorityDisplay.text)), event.description && /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-gray-600 mb-2 line-clamp-2" }, event.description), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-4 text-sm text-gray-500" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.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__default.default.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__default.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z" })), /* @__PURE__ */ React2__default.default.createElement("span", null, event.location))))), !isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-2 ml-4" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
517
518
|
"button",
|
|
518
519
|
{
|
|
519
520
|
onClick: (e) => {
|
|
@@ -545,10 +546,10 @@ function EventList({
|
|
|
545
546
|
"div",
|
|
546
547
|
{
|
|
547
548
|
key: event.id,
|
|
548
|
-
className:
|
|
549
|
+
className: clsx.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" : ""),
|
|
549
550
|
onClick: () => !isSelectionMode && onEventClick(event)
|
|
550
551
|
},
|
|
551
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start justify-between mb-3" }, isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "pt-1 mr-2" }, renderCheckbox(event.id)), /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 flex-1 pr-2" }, event.title), /* @__PURE__ */ React2__default.default.createElement("span", { className:
|
|
552
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start justify-between mb-3" }, isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "pt-1 mr-2" }, renderCheckbox(event.id)), /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 flex-1 pr-2" }, event.title), /* @__PURE__ */ React2__default.default.createElement("span", { className: clsx.clsx("px-2 py-1 text-xs font-medium rounded border flex-shrink-0", priorityDisplay.color) }, priorityDisplay.text)),
|
|
552
553
|
event.description && /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-gray-600 text-sm mb-3 line-clamp-3" }, event.description),
|
|
553
554
|
/* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-2 text-sm text-gray-500" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-4 h-4 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.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__default.default.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__default.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-4 h-4 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z" })), /* @__PURE__ */ React2__default.default.createElement("span", { className: "truncate" }, event.location))),
|
|
554
555
|
!isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-end gap-2 mt-4 pt-3 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -576,8 +577,8 @@ function EventList({
|
|
|
576
577
|
))
|
|
577
578
|
);
|
|
578
579
|
}));
|
|
579
|
-
return /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
580
|
-
|
|
580
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("space-y-6", className) }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1 max-w-md" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
581
|
+
chunk5A7ERLKK_js.SearchBox,
|
|
581
582
|
{
|
|
582
583
|
searchQuery: config.filter.searchText || "",
|
|
583
584
|
onSearchChange: handleSearchChange,
|
|
@@ -614,17 +615,17 @@ function EventList({
|
|
|
614
615
|
"button",
|
|
615
616
|
{
|
|
616
617
|
onClick: () => handleDisplayModeChange("list" /* LIST */),
|
|
617
|
-
className:
|
|
618
|
+
className: clsx.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")
|
|
618
619
|
},
|
|
619
620
|
"\u5217\u8868"
|
|
620
621
|
), /* @__PURE__ */ React2__default.default.createElement(
|
|
621
622
|
"button",
|
|
622
623
|
{
|
|
623
624
|
onClick: () => handleDisplayModeChange("grid" /* GRID */),
|
|
624
|
-
className:
|
|
625
|
+
className: clsx.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")
|
|
625
626
|
},
|
|
626
627
|
"\u7F51\u683C"
|
|
627
|
-
))))), isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center gap-2 text-sm font-medium text-gray-700" }, renderSelectAllCheckbox(), "\u5168\u9009\u5F53\u524D\u9875"), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm text-gray-600" }, "\u5DF2\u9009\u62E9 ", selectedEventIds.size, " \u4E2A\u4E8B\u4EF6"))), !isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-wrap items-center gap-2 mt-4 pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm text-gray-600" }, "\u5171 ", sortedAndFilteredEvents.length, " \u4E2A\u4E8B\u4EF6", config.filter.searchText &&
|
|
628
|
+
))))), isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between mt-4 pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center gap-2 text-sm font-medium text-gray-700" }, renderSelectAllCheckbox(), "\u5168\u9009\u5F53\u524D\u9875"), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm text-gray-600" }, "\u5DF2\u9009\u62E9 ", selectedEventIds.size, " \u4E2A\u4E8B\u4EF6"))), !isSelectionMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-wrap items-center gap-2 mt-4 pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "flex justify-center py-8" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600" })), !loading && paginatedEvents.length > 0 && /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, config.displayMode === "list" /* LIST */ ? renderListMode() : renderGridMode(), totalPages > 1 && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between pt-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm text-gray-600" }, "\u7B2C ", config.currentPage, " \u9875\uFF0C\u5171 ", totalPages, " \u9875"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
628
629
|
"button",
|
|
629
630
|
{
|
|
630
631
|
onClick: () => handlePageChange(config.currentPage - 1),
|
|
@@ -641,13 +642,13 @@ function EventList({
|
|
|
641
642
|
},
|
|
642
643
|
"\u4E0B\u4E00\u9875"
|
|
643
644
|
)))), !loading && paginatedEvents.length === 0 && /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-16 h-16 mx-auto mb-4 text-gray-300", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900 mb-2" }, "\u6682\u65E0\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-gray-600" }, config.filter.searchText || config.filter.priority || config.filter.color || config.filter.dateRange ? "\u6CA1\u6709\u627E\u5230\u7B26\u5408\u6761\u4EF6\u7684\u4E8B\u4EF6" : "\u8FD8\u6CA1\u6709\u521B\u5EFA\u4EFB\u4F55\u4E8B\u4EF6")), /* @__PURE__ */ React2__default.default.createElement(
|
|
644
|
-
|
|
645
|
+
chunk5A7ERLKK_js.ConfirmModal,
|
|
645
646
|
{
|
|
646
647
|
isOpen: showBatchDeleteConfirm,
|
|
647
648
|
onClose: () => setShowBatchDeleteConfirm(false),
|
|
648
649
|
onConfirm: handleBatchDelete,
|
|
649
650
|
title: "\u786E\u8BA4\u6279\u91CF\u5220\u9664",
|
|
650
|
-
message:
|
|
651
|
+
message: "\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684 " + selectedEventIds.size + " \u4E2A\u4E8B\u4EF6\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002",
|
|
651
652
|
confirmText: "\u5220\u9664",
|
|
652
653
|
cancelText: "\u53D6\u6D88",
|
|
653
654
|
isLoading: batchDeleteLoading
|
|
@@ -683,7 +684,7 @@ var EventTypeService = class {
|
|
|
683
684
|
case "recurring" /* RECURRING */:
|
|
684
685
|
return this.generateRecurringEvents(eventData, viewStartDate, viewEndDate, parentEventId);
|
|
685
686
|
default:
|
|
686
|
-
throw new Error(
|
|
687
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B: " + eventData.type);
|
|
687
688
|
}
|
|
688
689
|
}
|
|
689
690
|
/**
|
|
@@ -804,7 +805,7 @@ var EventTypeService = class {
|
|
|
804
805
|
nextDate.setFullYear(nextDate.getFullYear() + recurrence.interval);
|
|
805
806
|
break;
|
|
806
807
|
default:
|
|
807
|
-
throw new Error(
|
|
808
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u91CD\u590D\u6A21\u5F0F: " + recurrence.pattern);
|
|
808
809
|
}
|
|
809
810
|
return nextDate;
|
|
810
811
|
}
|
|
@@ -913,28 +914,28 @@ var EventTypeService = class {
|
|
|
913
914
|
return "\u5355\u6B21\u4E8B\u4EF6";
|
|
914
915
|
case "multi_day" /* MULTI_DAY */:
|
|
915
916
|
const dayCount = Math.ceil((eventData.endDate.getTime() - eventData.startDate.getTime()) / (24 * 60 * 60 * 1e3)) + 1;
|
|
916
|
-
return
|
|
917
|
+
return "\u6301\u7EED " + dayCount + " \u5929";
|
|
917
918
|
case "recurring" /* RECURRING */:
|
|
918
919
|
const { pattern, interval, count, endDate } = eventData.recurrence;
|
|
919
920
|
let desc = "";
|
|
920
921
|
switch (pattern) {
|
|
921
922
|
case "daily" /* DAILY */:
|
|
922
|
-
desc = interval === 1 ? "\u6BCF\u5929" :
|
|
923
|
+
desc = interval === 1 ? "\u6BCF\u5929" : "\u6BCF " + interval + " \u5929";
|
|
923
924
|
break;
|
|
924
925
|
case "weekly" /* WEEKLY */:
|
|
925
|
-
desc = interval === 1 ? "\u6BCF\u5468" :
|
|
926
|
+
desc = interval === 1 ? "\u6BCF\u5468" : "\u6BCF " + interval + " \u5468";
|
|
926
927
|
break;
|
|
927
928
|
case "monthly" /* MONTHLY */:
|
|
928
|
-
desc = interval === 1 ? "\u6BCF\u6708" :
|
|
929
|
+
desc = interval === 1 ? "\u6BCF\u6708" : "\u6BCF " + interval + " \u4E2A\u6708";
|
|
929
930
|
break;
|
|
930
931
|
case "yearly" /* YEARLY */:
|
|
931
|
-
desc = interval === 1 ? "\u6BCF\u5E74" :
|
|
932
|
+
desc = interval === 1 ? "\u6BCF\u5E74" : "\u6BCF " + interval + " \u5E74";
|
|
932
933
|
break;
|
|
933
934
|
}
|
|
934
935
|
if (count) {
|
|
935
|
-
desc +=
|
|
936
|
+
desc += "\uFF0C\u5171 " + count + " \u6B21";
|
|
936
937
|
} else if (endDate) {
|
|
937
|
-
desc +=
|
|
938
|
+
desc += "\uFF0C\u76F4\u5230 " + endDate.toLocaleDateString("zh-CN");
|
|
938
939
|
}
|
|
939
940
|
return desc;
|
|
940
941
|
default:
|
|
@@ -959,9 +960,9 @@ function useEnhancedEvents() {
|
|
|
959
960
|
startDate: toLocalISOString(startDate),
|
|
960
961
|
endDate: toLocalISOString(endDate)
|
|
961
962
|
});
|
|
962
|
-
const response = await fetch(
|
|
963
|
+
const response = await fetch("/api/calendar/events?" + params);
|
|
963
964
|
if (!response.ok) {
|
|
964
|
-
throw new Error(
|
|
965
|
+
throw new Error("\u83B7\u53D6\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
965
966
|
}
|
|
966
967
|
const data = await response.json();
|
|
967
968
|
if (!data.success) {
|
|
@@ -975,7 +976,7 @@ function useEnhancedEvents() {
|
|
|
975
976
|
updatedAt: new Date(event.updatedAt)
|
|
976
977
|
}));
|
|
977
978
|
console.log("\u{1F4E5} \u83B7\u53D6\u5230\u7684\u4E8B\u4EF6\u6570\u636E:", {
|
|
978
|
-
requestRange:
|
|
979
|
+
requestRange: formatDate(startDate) + " \u5230 " + formatDate(endDate),
|
|
979
980
|
eventCount: eventsWithDates.length,
|
|
980
981
|
eventIds: eventsWithDates.map((e) => e.id)
|
|
981
982
|
});
|
|
@@ -1026,7 +1027,7 @@ function useEnhancedEvents() {
|
|
|
1026
1027
|
body: JSON.stringify(createRequest)
|
|
1027
1028
|
});
|
|
1028
1029
|
if (!response.ok) {
|
|
1029
|
-
throw new Error(
|
|
1030
|
+
throw new Error("\u521B\u5EFA\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
1030
1031
|
}
|
|
1031
1032
|
const data = await response.json();
|
|
1032
1033
|
if (!data.success) {
|
|
@@ -1138,7 +1139,7 @@ function useEnhancedEvents() {
|
|
|
1138
1139
|
);
|
|
1139
1140
|
break;
|
|
1140
1141
|
default:
|
|
1141
|
-
throw new Error(
|
|
1142
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B: " + eventData.type);
|
|
1142
1143
|
}
|
|
1143
1144
|
const createdEvents = [];
|
|
1144
1145
|
for (const generatedEvent of generatedEvents) {
|
|
@@ -1168,7 +1169,7 @@ function useEnhancedEvents() {
|
|
|
1168
1169
|
body: JSON.stringify(createRequest)
|
|
1169
1170
|
});
|
|
1170
1171
|
if (!response.ok) {
|
|
1171
|
-
throw new Error(
|
|
1172
|
+
throw new Error("\u521B\u5EFA\u4E8B\u4EF6\u5B9E\u4F8B\u5931\u8D25: " + response.status);
|
|
1172
1173
|
}
|
|
1173
1174
|
const data = await response.json();
|
|
1174
1175
|
if (!data.success) {
|
|
@@ -1206,7 +1207,7 @@ function useEnhancedEvents() {
|
|
|
1206
1207
|
if (eventData.allDay !== void 0) updateRequest.allDay = eventData.allDay;
|
|
1207
1208
|
if (eventData.location !== void 0) updateRequest.location = eventData.location;
|
|
1208
1209
|
if (eventData.color !== void 0) updateRequest.color = eventData.color;
|
|
1209
|
-
const response = await fetch(
|
|
1210
|
+
const response = await fetch("/api/calendar/events/" + eventId, {
|
|
1210
1211
|
method: "PUT",
|
|
1211
1212
|
headers: {
|
|
1212
1213
|
"Content-Type": "application/json"
|
|
@@ -1214,7 +1215,7 @@ function useEnhancedEvents() {
|
|
|
1214
1215
|
body: JSON.stringify(updateRequest)
|
|
1215
1216
|
});
|
|
1216
1217
|
if (!response.ok) {
|
|
1217
|
-
throw new Error(
|
|
1218
|
+
throw new Error("\u66F4\u65B0\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
1218
1219
|
}
|
|
1219
1220
|
const data = await response.json();
|
|
1220
1221
|
if (!data.success) {
|
|
@@ -1244,12 +1245,12 @@ function useEnhancedEvents() {
|
|
|
1244
1245
|
setLoading(true);
|
|
1245
1246
|
setError(void 0);
|
|
1246
1247
|
try {
|
|
1247
|
-
const url = deleteAll ?
|
|
1248
|
+
const url = deleteAll ? "/api/calendar/events/" + eventId + "?deleteAll=true" : "/api/calendar/events/" + eventId;
|
|
1248
1249
|
const response = await fetch(url, {
|
|
1249
1250
|
method: "DELETE"
|
|
1250
1251
|
});
|
|
1251
1252
|
if (!response.ok) {
|
|
1252
|
-
throw new Error(
|
|
1253
|
+
throw new Error("\u5220\u9664\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
1253
1254
|
}
|
|
1254
1255
|
const data = await response.json();
|
|
1255
1256
|
if (!data.success) {
|
|
@@ -1277,7 +1278,7 @@ function useEnhancedEvents() {
|
|
|
1277
1278
|
body: JSON.stringify({ eventIds })
|
|
1278
1279
|
});
|
|
1279
1280
|
if (!response.ok) {
|
|
1280
|
-
throw new Error(
|
|
1281
|
+
throw new Error("\u6279\u91CF\u5220\u9664\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
1281
1282
|
}
|
|
1282
1283
|
const data = await response.json();
|
|
1283
1284
|
if (!data.success) {
|
|
@@ -1309,7 +1310,7 @@ function useEnhancedEvents() {
|
|
|
1309
1310
|
endTime: toLocalISOString(newEndTime)
|
|
1310
1311
|
};
|
|
1311
1312
|
console.log("\u{1F4E4} \u53D1\u9001API\u8BF7\u6C42:", updateRequest);
|
|
1312
|
-
const response = await fetch(
|
|
1313
|
+
const response = await fetch("/api/calendar/events/" + eventId, {
|
|
1313
1314
|
method: "PUT",
|
|
1314
1315
|
headers: {
|
|
1315
1316
|
"Content-Type": "application/json"
|
|
@@ -1317,7 +1318,7 @@ function useEnhancedEvents() {
|
|
|
1317
1318
|
body: JSON.stringify(updateRequest)
|
|
1318
1319
|
});
|
|
1319
1320
|
if (!response.ok) {
|
|
1320
|
-
throw new Error(
|
|
1321
|
+
throw new Error("\u66F4\u65B0\u4E8B\u4EF6\u65F6\u95F4\u5931\u8D25: " + response.status);
|
|
1321
1322
|
}
|
|
1322
1323
|
const data = await response.json();
|
|
1323
1324
|
console.log("\u{1F4E5} API\u54CD\u5E94:", data);
|
|
@@ -1473,18 +1474,18 @@ var ImprovedEventModal = ({
|
|
|
1473
1474
|
const day = String(date.getDate()).padStart(2, "0");
|
|
1474
1475
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
1475
1476
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
1476
|
-
return
|
|
1477
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes;
|
|
1477
1478
|
};
|
|
1478
1479
|
const formatDateOnly = (date) => {
|
|
1479
1480
|
const year = date.getFullYear();
|
|
1480
1481
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
1481
1482
|
const day = String(date.getDate()).padStart(2, "0");
|
|
1482
|
-
return
|
|
1483
|
+
return year + "-" + month + "-" + day;
|
|
1483
1484
|
};
|
|
1484
1485
|
const formatTimeOnly = (date) => {
|
|
1485
1486
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
1486
1487
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
1487
|
-
return
|
|
1488
|
+
return hours + ":" + minutes;
|
|
1488
1489
|
};
|
|
1489
1490
|
const buildEventData = () => {
|
|
1490
1491
|
switch (eventType) {
|
|
@@ -1534,7 +1535,7 @@ var ImprovedEventModal = ({
|
|
|
1534
1535
|
}
|
|
1535
1536
|
};
|
|
1536
1537
|
default:
|
|
1537
|
-
throw new Error(
|
|
1538
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B: " + eventType);
|
|
1538
1539
|
}
|
|
1539
1540
|
};
|
|
1540
1541
|
const validateForm = () => {
|
|
@@ -1593,29 +1594,29 @@ var ImprovedEventModal = ({
|
|
|
1593
1594
|
{
|
|
1594
1595
|
type: "button",
|
|
1595
1596
|
onClick: () => setEventType("single" /* SINGLE */),
|
|
1596
|
-
className:
|
|
1597
|
+
className: clsx.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")
|
|
1597
1598
|
},
|
|
1598
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1599
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("text-3xl mb-2 transition-transform duration-300", eventType === "single" /* SINGLE */ ? "scale-110" : "group-hover:scale-110") }, "\u{1F4C5}"), /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("font-semibold mb-1", eventType === "single" /* SINGLE */ ? "text-blue-700" : "text-gray-900") }, "\u5355\u6B21\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500" }, "\u4E00\u6B21\u6027\u4E8B\u4EF6")),
|
|
1599
1600
|
eventType === "single" /* SINGLE */ && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute top-2 right-2" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-6 h-6 bg-blue-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-white text-sm" }, "\u2713")))
|
|
1600
1601
|
), /* @__PURE__ */ React2__default.default.createElement(
|
|
1601
1602
|
"button",
|
|
1602
1603
|
{
|
|
1603
1604
|
type: "button",
|
|
1604
1605
|
onClick: () => setEventType("multi_day" /* MULTI_DAY */),
|
|
1605
|
-
className:
|
|
1606
|
+
className: clsx.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")
|
|
1606
1607
|
},
|
|
1607
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1608
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.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__default.default.createElement("div", { className: clsx.clsx("font-semibold mb-1", eventType === "multi_day" /* MULTI_DAY */ ? "text-green-700" : "text-gray-900") }, "\u591A\u5929\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500" }, "\u8FDE\u7EED\u591A\u5929")),
|
|
1608
1609
|
eventType === "multi_day" /* MULTI_DAY */ && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute top-2 right-2" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-6 h-6 bg-green-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-white text-sm" }, "\u2713")))
|
|
1609
1610
|
), /* @__PURE__ */ React2__default.default.createElement(
|
|
1610
1611
|
"button",
|
|
1611
1612
|
{
|
|
1612
1613
|
type: "button",
|
|
1613
1614
|
onClick: () => setEventType("recurring" /* RECURRING */),
|
|
1614
|
-
className:
|
|
1615
|
+
className: clsx.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")
|
|
1615
1616
|
},
|
|
1616
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1617
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("text-3xl mb-2 transition-transform duration-300", eventType === "recurring" /* RECURRING */ ? "scale-110" : "group-hover:scale-110") }, "\u{1F504}"), /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("font-semibold mb-1", eventType === "recurring" /* RECURRING */ ? "text-purple-700" : "text-gray-900") }, "\u91CD\u590D\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500" }, "\u5468\u671F\u6027\u91CD\u590D")),
|
|
1617
1618
|
eventType === "recurring" /* RECURRING */ && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute top-2 right-2" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-6 h-6 bg-purple-500 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-white text-sm" }, "\u2713")))
|
|
1618
|
-
)), /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1619
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.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__default.default.createElement("div", { className: "flex items-start space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-shrink-0 mt-0.5" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, eventType === "single" /* SINGLE */ ? "\u{1F4A1}" : eventType === "multi_day" /* MULTI_DAY */ ? "\u{1F4CB}" : "\u{1F514}")), /* @__PURE__ */ React2__default.default.createElement("div", null, eventType === "single" /* SINGLE */ && /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "font-medium text-blue-800 mb-1" }, "\u5355\u6B21\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.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__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "font-medium text-green-800 mb-1" }, "\u591A\u5929\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.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__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "font-medium text-purple-800 mb-1" }, "\u91CD\u590D\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.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"))))));
|
|
1619
1620
|
const renderBasicForm = () => /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "group" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, "\u{1F4DD}"), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u4E8B\u4EF6\u6807\u9898"), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-red-500" }, "*")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1620
1621
|
"input",
|
|
1621
1622
|
{
|
|
@@ -1625,7 +1626,7 @@ var ImprovedEventModal = ({
|
|
|
1625
1626
|
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",
|
|
1626
1627
|
placeholder: "\u4E3A\u4F60\u7684\u4E8B\u4EF6\u8D77\u4E2A\u540D\u5B57..."
|
|
1627
1628
|
}
|
|
1628
|
-
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1629
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("w-2 h-2 rounded-full transition-colors duration-200", formData.title.trim() ? "bg-green-400" : "bg-gray-300") }))), errors.title && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2 mt-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-red-500 text-sm" }, "\u26A0\uFE0F"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-red-600" }, errors.title))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "group" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, "\u{1F4C4}"), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u4E8B\u4EF6\u63CF\u8FF0")), /* @__PURE__ */ React2__default.default.createElement(
|
|
1629
1630
|
"textarea",
|
|
1630
1631
|
{
|
|
1631
1632
|
value: formData.description,
|
|
@@ -1634,7 +1635,7 @@ var ImprovedEventModal = ({
|
|
|
1634
1635
|
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",
|
|
1635
1636
|
placeholder: "\u63CF\u8FF0\u4E00\u4E0B\u8FD9\u4E2A\u4E8B\u4EF6\u7684\u8BE6\u7EC6\u4FE1\u606F..."
|
|
1636
1637
|
}
|
|
1637
|
-
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex justify-between items-center mt-2" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500" }, formData.description.length > 0 &&
|
|
1638
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex justify-between items-center mt-2" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500" }, formData.description.length > 0 && "\u5DF2\u8F93\u5165 " + formData.description.length + " \u4E2A\u5B57\u7B26"))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "group" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, "\u{1F4CD}"), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u5730\u70B9")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1638
1639
|
"input",
|
|
1639
1640
|
{
|
|
1640
1641
|
type: "text",
|
|
@@ -1643,7 +1644,7 @@ var ImprovedEventModal = ({
|
|
|
1643
1644
|
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",
|
|
1644
1645
|
placeholder: "\u4E8B\u4EF6\u4E3E\u529E\u5730\u70B9..."
|
|
1645
1646
|
}
|
|
1646
|
-
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1647
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("w-2 h-2 rounded-full transition-colors duration-200", formData.location.trim() ? "bg-green-400" : "bg-gray-300") })))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-gray-50 rounded-xl p-4" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center justify-between cursor-pointer group" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, "\u{1F305}"), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm font-medium text-gray-900" }, "\u5168\u5929\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500" }, "\u4E0D\u8BBE\u7F6E\u5177\u4F53\u65F6\u95F4\uFF0C\u6574\u5929\u6709\u6548"))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1647
1648
|
"input",
|
|
1648
1649
|
{
|
|
1649
1650
|
type: "checkbox",
|
|
@@ -1652,7 +1653,7 @@ var ImprovedEventModal = ({
|
|
|
1652
1653
|
onChange: (e) => handleInputChange("allDay", e.target.checked),
|
|
1653
1654
|
className: "sr-only"
|
|
1654
1655
|
}
|
|
1655
|
-
), /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1656
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("w-12 h-6 rounded-full transition-colors duration-200", formData.allDay ? "bg-blue-500" : "bg-gray-300") }, /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.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__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "group" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, "\u{1F3A8}"), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u4E8B\u4EF6\u989C\u8272")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1656
1657
|
"div",
|
|
1657
1658
|
{
|
|
1658
1659
|
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",
|
|
@@ -1673,7 +1674,7 @@ var ImprovedEventModal = ({
|
|
|
1673
1674
|
key: color,
|
|
1674
1675
|
type: "button",
|
|
1675
1676
|
onClick: () => handleInputChange("color", color),
|
|
1676
|
-
className:
|
|
1677
|
+
className: clsx.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"),
|
|
1677
1678
|
style: { backgroundColor: color }
|
|
1678
1679
|
}
|
|
1679
1680
|
))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "group" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-gray-900 mb-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, "\u2B50"), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u4F18\u5148\u7EA7")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-2" }, [
|
|
@@ -1691,7 +1692,7 @@ var ImprovedEventModal = ({
|
|
|
1691
1692
|
onChange: (e) => handleInputChange("priority", e.target.value),
|
|
1692
1693
|
className: "sr-only"
|
|
1693
1694
|
}
|
|
1694
|
-
), /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1695
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.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__default.default.createElement("span", { className: "text-lg" }, priority.icon), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm font-medium" }, priority.label), formData.priority === priority.value && /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-auto text-sm" }, "\u2713"))))))));
|
|
1695
1696
|
const renderSingleEventForm = () => /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-6" }, !formData.allDay && /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-blue-50 rounded-xl p-4 border border-blue-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "group" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center space-x-2 text-sm font-medium text-blue-900 mb-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, "\u{1F550}"), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u5F00\u59CB\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-red-500" }, "*")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1696
1697
|
"input",
|
|
1697
1698
|
{
|
|
@@ -1823,7 +1824,7 @@ var ImprovedEventModal = ({
|
|
|
1823
1824
|
placeholder: "\u8F93\u5165\u91CD\u590D\u6B21\u6570"
|
|
1824
1825
|
}
|
|
1825
1826
|
))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-3 bg-purple-50 rounded-lg text-sm text-purple-700" }, /* @__PURE__ */ React2__default.default.createElement("strong", null, "\u793A\u4F8B"), '\uFF1A\u9009\u62E9"\u6BCF\u5929\u91CD\u590D3\u6B21"\u5C06\u521B\u5EFA3\u4E2A\u72EC\u7ACB\u7684\u4E8B\u4EF6\u5B9E\u4F8B\uFF0C\u5206\u522B\u5728\u8FDE\u7EED\u76843\u5929\u53D1\u751F\u3002'));
|
|
1826
|
-
return /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement(
|
|
1827
|
+
return /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement(chunk5A7ERLKK_js.Modal, { isOpen, onClose: handleClose, width: "800px", height: "auto" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "px-6 py-4 border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-blue-600 text-lg" }, isEditMode ? "\u270F\uFE0F" : "\u2795")), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("h2", { className: "text-xl font-semibold text-gray-900" }, isEditMode ? "\u7F16\u8F91\u4E8B\u4EF6" : "\u521B\u5EFA\u65B0\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-600" }, isEditMode ? "\u4FEE\u6539\u4E8B\u4EF6\u4FE1\u606F" : "\u586B\u5199\u4E8B\u4EF6\u8BE6\u7EC6\u4FE1\u606F"))), /* @__PURE__ */ React2__default.default.createElement(
|
|
1827
1828
|
"button",
|
|
1828
1829
|
{
|
|
1829
1830
|
type: "button",
|
|
@@ -1860,7 +1861,7 @@ var ImprovedEventModal = ({
|
|
|
1860
1861
|
/* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2" }, isEditMode ? "\u{1F4BE}" : "\u2728"),
|
|
1861
1862
|
isLoading ? "\u4FDD\u5B58\u4E2D..." : isEditMode ? "\u66F4\u65B0\u4E8B\u4EF6" : "\u521B\u5EFA\u4E8B\u4EF6"
|
|
1862
1863
|
)))))), /* @__PURE__ */ React2__default.default.createElement(
|
|
1863
|
-
|
|
1864
|
+
chunk5A7ERLKK_js.ConfirmModal,
|
|
1864
1865
|
{
|
|
1865
1866
|
isOpen: showDeleteConfirm,
|
|
1866
1867
|
onClose: () => setShowDeleteConfirm(false),
|
|
@@ -1938,7 +1939,7 @@ function useEventDrag(events, onEventUpdate) {
|
|
|
1938
1939
|
newStartTime.setHours(originalStart.getHours(), originalStart.getMinutes(), originalStart.getSeconds(), originalStart.getMilliseconds());
|
|
1939
1940
|
const duration = originalEnd.getTime() - originalStart.getTime();
|
|
1940
1941
|
const newEndTime = new Date(newStartTime.getTime() + duration);
|
|
1941
|
-
const previewTime = dragState.draggedEvent.allDay ? "\u5168\u5929" :
|
|
1942
|
+
const previewTime = dragState.draggedEvent.allDay ? "\u5168\u5929" : formatTime2(newStartTime) + " - " + formatTime2(newEndTime);
|
|
1942
1943
|
console.log("\u23F0 \u8BA1\u7B97\u65B0\u65F6\u95F4:", {
|
|
1943
1944
|
originalStart: dragState.draggedEvent.startTime,
|
|
1944
1945
|
originalEnd: dragState.draggedEvent.endTime,
|
|
@@ -2086,9 +2087,9 @@ var DraggableEvent = ({
|
|
|
2086
2087
|
// 移动端禁用拖拽
|
|
2087
2088
|
});
|
|
2088
2089
|
const style = transform ? {
|
|
2089
|
-
transform:
|
|
2090
|
+
transform: "translate3d(" + transform.x + "px, " + transform.y + "px, 0)"
|
|
2090
2091
|
} : void 0;
|
|
2091
|
-
event.allDay ? "\u5168\u5929" :
|
|
2092
|
+
event.allDay ? "\u5168\u5929" : formatTime(new Date(event.startTime)) + " - " + formatTime(new Date(event.endTime));
|
|
2092
2093
|
const getEventColorClasses = (color) => {
|
|
2093
2094
|
switch (color) {
|
|
2094
2095
|
case "red":
|
|
@@ -2128,14 +2129,7 @@ var DraggableEvent = ({
|
|
|
2128
2129
|
{
|
|
2129
2130
|
ref: setNodeRef,
|
|
2130
2131
|
style,
|
|
2131
|
-
className:
|
|
2132
|
-
group relative rounded border-l-2 px-1 py-0.5 mb-0.5
|
|
2133
|
-
${dragSupported ? "cursor-grab active:cursor-grabbing" : "cursor-pointer"}
|
|
2134
|
-
transition-all duration-150 ease-in-out text-xs
|
|
2135
|
-
${getEventColorClasses(event.color)}
|
|
2136
|
-
${isDragActive || isDragging ? "opacity-60 shadow-md z-[40]" : "opacity-100"}
|
|
2137
|
-
${className}
|
|
2138
|
-
`,
|
|
2132
|
+
className: clsx.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),
|
|
2139
2133
|
...dragSupported ? listeners : {},
|
|
2140
2134
|
...dragSupported ? attributes : {},
|
|
2141
2135
|
onClick
|
|
@@ -2173,8 +2167,6 @@ var DraggableEvent = ({
|
|
|
2173
2167
|
);
|
|
2174
2168
|
};
|
|
2175
2169
|
var DraggableEvent_default = DraggableEvent;
|
|
2176
|
-
|
|
2177
|
-
// src/calendar/components/DroppableCalendarCell.tsx
|
|
2178
2170
|
var DroppableCalendarCell = ({
|
|
2179
2171
|
date,
|
|
2180
2172
|
events,
|
|
@@ -2187,7 +2179,7 @@ var DroppableCalendarCell = ({
|
|
|
2187
2179
|
disableDrop = false
|
|
2188
2180
|
}) => {
|
|
2189
2181
|
const dateStr = formatDate(date);
|
|
2190
|
-
const dropId =
|
|
2182
|
+
const dropId = "date-" + dateStr;
|
|
2191
2183
|
const {
|
|
2192
2184
|
isOver,
|
|
2193
2185
|
setNodeRef
|
|
@@ -2238,11 +2230,7 @@ var DroppableCalendarCell = ({
|
|
|
2238
2230
|
className: getCellClasses(),
|
|
2239
2231
|
onClick: () => onDateClick?.(date)
|
|
2240
2232
|
},
|
|
2241
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className:
|
|
2242
|
-
inline-flex items-center justify-center text-sm font-semibold w-6 h-6
|
|
2243
|
-
${!isCurrentMonth ? "text-gray-400" : date.getDay() === 0 || date.getDay() === 6 ? "text-red-600" : "text-gray-900"}
|
|
2244
|
-
${isToday(date) ? "bg-blue-600 text-white rounded-full shadow-md" : ""}
|
|
2245
|
-
` }, date.getDate()), dayEvents.length > 0 && /* @__PURE__ */ React2__default.default.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)),
|
|
2233
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: clsx.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__default.default.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)),
|
|
2246
2234
|
/* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-1" }, dayEvents.slice(0, 3).map((event) => /* @__PURE__ */ React2__default.default.createElement(
|
|
2247
2235
|
DraggableEvent_default,
|
|
2248
2236
|
{
|
|
@@ -2308,7 +2296,7 @@ var DraggableMonthView = ({
|
|
|
2308
2296
|
"th",
|
|
2309
2297
|
{
|
|
2310
2298
|
key: day,
|
|
2311
|
-
className:
|
|
2299
|
+
className: clsx.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")
|
|
2312
2300
|
},
|
|
2313
2301
|
day
|
|
2314
2302
|
)))), /* @__PURE__ */ React2__default.default.createElement("tbody", null, Array.from({ length: 6 }, (_, weekIndex) => /* @__PURE__ */ React2__default.default.createElement("tr", { key: weekIndex }, Array.from({ length: 7 }, (_2, dayIndex) => {
|
|
@@ -2322,7 +2310,7 @@ var DraggableMonthView = ({
|
|
|
2322
2310
|
"td",
|
|
2323
2311
|
{
|
|
2324
2312
|
key: dayIndex,
|
|
2325
|
-
className:
|
|
2313
|
+
className: clsx.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")
|
|
2326
2314
|
},
|
|
2327
2315
|
/* @__PURE__ */ React2__default.default.createElement(
|
|
2328
2316
|
DroppableCalendarCell_default,
|
|
@@ -2340,7 +2328,7 @@ var DraggableMonthView = ({
|
|
|
2340
2328
|
)
|
|
2341
2329
|
);
|
|
2342
2330
|
}))))));
|
|
2343
|
-
return /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
2331
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("bg-white rounded-lg shadow-sm", className) }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between p-4 border-b" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-4" }, /* @__PURE__ */ React2__default.default.createElement("h2", { className: "text-lg sm:text-xl font-semibold text-gray-900" }, currentDate.getFullYear(), "\u5E74", getMonthName(currentDate)), /* @__PURE__ */ React2__default.default.createElement(
|
|
2344
2332
|
"button",
|
|
2345
2333
|
{
|
|
2346
2334
|
onClick: goToToday,
|
|
@@ -2549,7 +2537,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2549
2537
|
{
|
|
2550
2538
|
key,
|
|
2551
2539
|
onClick: () => setActiveTab(key),
|
|
2552
|
-
className:
|
|
2540
|
+
className: clsx.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")
|
|
2553
2541
|
},
|
|
2554
2542
|
/* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2" }, icon),
|
|
2555
2543
|
label
|
|
@@ -2558,7 +2546,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2558
2546
|
{
|
|
2559
2547
|
key,
|
|
2560
2548
|
onClick: () => updateSettings({ theme: key }),
|
|
2561
|
-
className:
|
|
2549
|
+
className: clsx.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")
|
|
2562
2550
|
},
|
|
2563
2551
|
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "font-medium text-gray-900" }, theme.name), settings.theme === key && /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5 text-blue-500", fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React2__default.default.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" }))),
|
|
2564
2552
|
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex space-x-1 mb-3" }, Object.values(theme.colors).slice(0, 6).map((color, index) => /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -2595,7 +2583,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2595
2583
|
style: {
|
|
2596
2584
|
backgroundColor: index === 3 ? theme.background.today : theme.background.cell,
|
|
2597
2585
|
color: index === 3 ? theme.text.today : theme.text.primary,
|
|
2598
|
-
border:
|
|
2586
|
+
border: "1px solid " + (index === 3 ? theme.border.today : theme.border.cell)
|
|
2599
2587
|
}
|
|
2600
2588
|
},
|
|
2601
2589
|
index + 1
|
|
@@ -2797,7 +2785,7 @@ function CalendarPage({
|
|
|
2797
2785
|
const viewEnd = viewDates[viewDates.length - 1];
|
|
2798
2786
|
if (viewStart && viewEnd) {
|
|
2799
2787
|
console.log("\u{1F4C5} \u52A0\u8F7D\u6708\u89C6\u56FE\u4E8B\u4EF6\u8303\u56F4:", {
|
|
2800
|
-
currentMonth:
|
|
2788
|
+
currentMonth: currentDate.getFullYear() + "-" + (currentDate.getMonth() + 1),
|
|
2801
2789
|
viewStart: formatDate(viewStart),
|
|
2802
2790
|
viewEnd: formatDate(viewEnd),
|
|
2803
2791
|
totalDays: viewDates.length
|
|
@@ -2857,9 +2845,9 @@ function CalendarPage({
|
|
|
2857
2845
|
return getMonthName2(currentDate);
|
|
2858
2846
|
}
|
|
2859
2847
|
if (weekStart.getMonth() === weekEnd.getMonth()) {
|
|
2860
|
-
return
|
|
2848
|
+
return weekStart.getFullYear() + "\u5E74" + (weekStart.getMonth() + 1) + "\u6708 \u7B2C" + Math.ceil(weekStart.getDate() / 7) + "\u5468";
|
|
2861
2849
|
} else {
|
|
2862
|
-
return
|
|
2850
|
+
return weekStart.getMonth() + 1 + "\u6708" + weekStart.getDate() + "\u65E5 - " + (weekEnd.getMonth() + 1) + "\u6708" + weekEnd.getDate() + "\u65E5";
|
|
2863
2851
|
}
|
|
2864
2852
|
case "day" /* DAY */:
|
|
2865
2853
|
return currentDate.toLocaleDateString("zh-CN", {
|
|
@@ -3023,9 +3011,9 @@ function CalendarPage({
|
|
|
3023
3011
|
"th",
|
|
3024
3012
|
{
|
|
3025
3013
|
key: index,
|
|
3026
|
-
className:
|
|
3014
|
+
className: clsx.clsx("p-3 text-center border-b border-gray-200", index < 6 ? "border-r border-gray-200" : "")
|
|
3027
3015
|
},
|
|
3028
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
3016
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("text-sm font-medium", isWeekend2 ? "text-red-600" : "text-gray-700") }, getWeekdayName(date, "zh-CN", "short"))
|
|
3029
3017
|
);
|
|
3030
3018
|
}))), /* @__PURE__ */ React2__default.default.createElement("tbody", null, /* @__PURE__ */ React2__default.default.createElement("tr", null, weekDates.map((date, index) => {
|
|
3031
3019
|
const dayEvents = getEventsForDate(date);
|
|
@@ -3036,24 +3024,14 @@ function CalendarPage({
|
|
|
3036
3024
|
{
|
|
3037
3025
|
key: index,
|
|
3038
3026
|
onClick: () => handleDateClick(date),
|
|
3039
|
-
className:
|
|
3040
|
-
h-56 border-b border-gray-200 relative cursor-pointer
|
|
3041
|
-
${index < 6 ? "border-r border-gray-200" : ""}
|
|
3042
|
-
hover:bg-gray-50 transition-colors
|
|
3043
|
-
${isTodayDate ? "bg-blue-50" : "bg-white"}
|
|
3044
|
-
`
|
|
3027
|
+
className: clsx.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")
|
|
3045
3028
|
},
|
|
3046
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col h-full p-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col items-center mb-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
3029
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col h-full p-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col items-center mb-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.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__default.default.createElement("div", { className: "text-xs text-gray-500 mt-1 font-medium" }, date.getMonth() + 1, "\u6708")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1 flex flex-col" }, dayEvents.length > 0 ? /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center mb-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: clsx.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__default.default.createElement("div", { className: "space-y-1 overflow-hidden" }, dayEvents.slice(0, 4).map((event, eventIndex) => /* @__PURE__ */ React2__default.default.createElement(
|
|
3047
3030
|
"div",
|
|
3048
3031
|
{
|
|
3049
3032
|
key: eventIndex,
|
|
3050
3033
|
onClick: (e) => event.isRealEvent && event.id ? handleEventClick(events.find((e2) => e2.id === event.id), e) : void 0,
|
|
3051
|
-
className:
|
|
3052
|
-
text-xs px-2 py-1 rounded font-medium truncate text-center
|
|
3053
|
-
${event.isRealEvent ? "cursor-pointer hover:opacity-80 hover:shadow-sm" : "cursor-default"}
|
|
3054
|
-
transition-all duration-200
|
|
3055
|
-
${getEventColorClass(event.color)}
|
|
3056
|
-
`,
|
|
3034
|
+
className: clsx.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)),
|
|
3057
3035
|
title: event.title
|
|
3058
3036
|
},
|
|
3059
3037
|
event.title
|
|
@@ -3064,7 +3042,7 @@ function CalendarPage({
|
|
|
3064
3042
|
const renderDayView = () => {
|
|
3065
3043
|
const dayEvents = getEventsForDate(currentDate);
|
|
3066
3044
|
const isTodayDate = isToday(currentDate);
|
|
3067
|
-
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden mb-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-gray-50 p-4 border-b border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm text-gray-600 mb-1" }, currentDate.toLocaleDateString("zh-CN", { weekday: "long" })), /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
3045
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden mb-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-gray-50 p-4 border-b border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm text-gray-600 mb-1" }, currentDate.toLocaleDateString("zh-CN", { weekday: "long" })), /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("text-2xl font-bold", isTodayDate ? "text-blue-600" : "text-gray-900") }, currentDate.getDate(), "\u65E5"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm text-gray-600" }, currentDate.toLocaleDateString("zh-CN", { year: "numeric", month: "long" })))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-4" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3068
3046
|
"button",
|
|
3069
3047
|
{
|
|
3070
3048
|
onClick: () => handleDateClick(currentDate),
|
|
@@ -3076,12 +3054,7 @@ function CalendarPage({
|
|
|
3076
3054
|
{
|
|
3077
3055
|
key: eventIndex,
|
|
3078
3056
|
onClick: (e) => event.isRealEvent && event.id ? handleEventClick(events.find((e2) => e2.id === event.id), e) : void 0,
|
|
3079
|
-
className:
|
|
3080
|
-
p-3 rounded-lg border-l-4 bg-gray-50
|
|
3081
|
-
${event.isRealEvent ? "cursor-pointer hover:shadow-md" : "cursor-default"}
|
|
3082
|
-
transition-shadow
|
|
3083
|
-
${getEventColorClass(event.color)}
|
|
3084
|
-
`
|
|
3057
|
+
className: clsx.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))
|
|
3085
3058
|
},
|
|
3086
3059
|
/* @__PURE__ */ React2__default.default.createElement("div", { className: "font-medium text-sm mb-1" }, event.title),
|
|
3087
3060
|
event.isRealEvent && event.id && /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-600" }, "\u70B9\u51FB\u7F16\u8F91\u4E8B\u4EF6")
|
|
@@ -3094,7 +3067,7 @@ function CalendarPage({
|
|
|
3094
3067
|
setSelectedDate(null);
|
|
3095
3068
|
const eventCount = createdEvents.length;
|
|
3096
3069
|
if (eventCount > 1) {
|
|
3097
|
-
alert(
|
|
3070
|
+
alert("\u6210\u529F\u521B\u5EFA " + eventCount + " \u4E2A\u4E8B\u4EF6\uFF01");
|
|
3098
3071
|
} else {
|
|
3099
3072
|
alert("\u4E8B\u4EF6\u521B\u5EFA\u6210\u529F\uFF01");
|
|
3100
3073
|
}
|
|
@@ -3114,21 +3087,21 @@ function CalendarPage({
|
|
|
3114
3087
|
"button",
|
|
3115
3088
|
{
|
|
3116
3089
|
onClick: () => setActiveTab("calendar"),
|
|
3117
|
-
className:
|
|
3090
|
+
className: clsx.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")
|
|
3118
3091
|
},
|
|
3119
3092
|
"\u{1F4C5} \u65E5\u5386\u89C6\u56FE"
|
|
3120
3093
|
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3121
3094
|
"button",
|
|
3122
3095
|
{
|
|
3123
3096
|
onClick: () => setActiveTab("events"),
|
|
3124
|
-
className:
|
|
3097
|
+
className: clsx.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")
|
|
3125
3098
|
},
|
|
3126
3099
|
"\u{1F4CB} \u4E8B\u4EF6\u5217\u8868"
|
|
3127
3100
|
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3128
3101
|
"button",
|
|
3129
3102
|
{
|
|
3130
3103
|
onClick: () => setActiveTab("settings"),
|
|
3131
|
-
className:
|
|
3104
|
+
className: clsx.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")
|
|
3132
3105
|
},
|
|
3133
3106
|
"\u2699\uFE0F \u8BBE\u7F6E"
|
|
3134
3107
|
))), error && /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4 mb-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "h-5 w-5 text-red-400 mt-0.5", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-sm font-medium text-red-800" }, "\u64CD\u4F5C\u5931\u8D25"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "mt-1 text-sm text-red-700" }, error), /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -3143,7 +3116,7 @@ function CalendarPage({
|
|
|
3143
3116
|
{
|
|
3144
3117
|
key: view,
|
|
3145
3118
|
onClick: () => setViewType(CalendarViewType[view.toUpperCase()]),
|
|
3146
|
-
className:
|
|
3119
|
+
className: clsx.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")
|
|
3147
3120
|
},
|
|
3148
3121
|
view === "month" ? "\u6708" : view === "week" ? "\u5468" : "\u65E5"
|
|
3149
3122
|
)))))), renderCalendarView(), /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center mb-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-blue-100 p-3 rounded-lg" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-6 h-6 text-blue-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("h3", { className: "ml-3 text-lg font-semibold text-gray-900" }, "\u4E8B\u4EF6\u7BA1\u7406")), /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center mb-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-green-100 p-3 rounded-lg" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-6 h-6 text-green-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("h3", { className: "ml-3 text-lg font-semibold text-gray-900" }, "\u91CD\u590D\u4E8B\u4EF6")), /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center mb-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-purple-100 p-3 rounded-lg" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-6 h-6 text-purple-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("h3", { className: "ml-3 text-lg font-semibold text-gray-900" }, "\u667A\u80FD\u63D0\u9192")), /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-6" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-900 mb-4" }, "\u6280\u672F\u7279\u6027"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center text-sm text-gray-600" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-4 h-4 text-green-500 mr-3 flex-shrink-0", fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "flex items-center text-sm text-gray-600" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-4 h-4 text-green-500 mr-3 flex-shrink-0", fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React2__default.default.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__default.default.createElement(
|
|
@@ -3256,7 +3229,7 @@ var EventModal = ({
|
|
|
3256
3229
|
const day = String(date.getDate()).padStart(2, "0");
|
|
3257
3230
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
3258
3231
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
3259
|
-
return
|
|
3232
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes;
|
|
3260
3233
|
};
|
|
3261
3234
|
const validateForm = () => {
|
|
3262
3235
|
const newErrors = {};
|
|
@@ -3356,7 +3329,7 @@ var EventModal = ({
|
|
|
3356
3329
|
onClose();
|
|
3357
3330
|
};
|
|
3358
3331
|
return /* @__PURE__ */ React2__default.default.createElement(
|
|
3359
|
-
|
|
3332
|
+
chunk5A7ERLKK_js.Modal,
|
|
3360
3333
|
{
|
|
3361
3334
|
isOpen,
|
|
3362
3335
|
onClose: handleClose,
|
|
@@ -3371,7 +3344,7 @@ var EventModal = ({
|
|
|
3371
3344
|
id: "title",
|
|
3372
3345
|
value: formData.title,
|
|
3373
3346
|
onChange: (e) => handleInputChange("title", e.target.value),
|
|
3374
|
-
className:
|
|
3347
|
+
className: clsx.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"),
|
|
3375
3348
|
placeholder: "\u8F93\u5165\u4E8B\u4EF6\u6807\u9898"
|
|
3376
3349
|
}
|
|
3377
3350
|
), errors.title && /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-red-500 text-sm mt-1" }, errors.title)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -3390,10 +3363,10 @@ var EventModal = ({
|
|
|
3390
3363
|
id: "startTime",
|
|
3391
3364
|
value: formData.isAllDay ? formData.startTime.split("T")[0] : formData.startTime,
|
|
3392
3365
|
onChange: (e) => {
|
|
3393
|
-
const value = formData.isAllDay ?
|
|
3366
|
+
const value = formData.isAllDay ? e.target.value + "T00:00" : e.target.value;
|
|
3394
3367
|
handleInputChange("startTime", value);
|
|
3395
3368
|
},
|
|
3396
|
-
className:
|
|
3369
|
+
className: clsx.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")
|
|
3397
3370
|
}
|
|
3398
3371
|
), errors.startTime && /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-red-500 text-sm mt-1" }, errors.startTime)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "endTime", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u7ED3\u675F\u65F6\u95F4 *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3399
3372
|
"input",
|
|
@@ -3402,10 +3375,10 @@ var EventModal = ({
|
|
|
3402
3375
|
id: "endTime",
|
|
3403
3376
|
value: formData.isAllDay ? formData.endTime.split("T")[0] : formData.endTime,
|
|
3404
3377
|
onChange: (e) => {
|
|
3405
|
-
const value = formData.isAllDay ?
|
|
3378
|
+
const value = formData.isAllDay ? e.target.value + "T23:59" : e.target.value;
|
|
3406
3379
|
handleInputChange("endTime", value);
|
|
3407
3380
|
},
|
|
3408
|
-
className:
|
|
3381
|
+
className: clsx.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")
|
|
3409
3382
|
}
|
|
3410
3383
|
), errors.endTime && /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-red-500 text-sm mt-1" }, errors.endTime))), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "location", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u4F4D\u7F6E"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3411
3384
|
"input",
|
|
@@ -3640,13 +3613,13 @@ var EventModal = ({
|
|
|
3640
3613
|
isLoading ? "\u4FDD\u5B58\u4E2D..." : isEditMode ? "\u66F4\u65B0\u4E8B\u4EF6" : "\u521B\u5EFA\u4E8B\u4EF6"
|
|
3641
3614
|
)))),
|
|
3642
3615
|
/* @__PURE__ */ React2__default.default.createElement(
|
|
3643
|
-
|
|
3616
|
+
chunk5A7ERLKK_js.ConfirmModal,
|
|
3644
3617
|
{
|
|
3645
3618
|
isOpen: showDeleteConfirm,
|
|
3646
3619
|
onClose: () => setShowDeleteConfirm(false),
|
|
3647
3620
|
onConfirm: handleDelete,
|
|
3648
3621
|
title: "\u786E\u8BA4\u5220\u9664",
|
|
3649
|
-
message:
|
|
3622
|
+
message: '\u786E\u5B9A\u8981\u5220\u9664\u4E8B\u4EF6"' + formData.title + '"\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002',
|
|
3650
3623
|
confirmText: "\u5220\u9664",
|
|
3651
3624
|
cancelText: "\u53D6\u6D88",
|
|
3652
3625
|
isLoading
|
|
@@ -3655,8 +3628,6 @@ var EventModal = ({
|
|
|
3655
3628
|
);
|
|
3656
3629
|
};
|
|
3657
3630
|
var EventModal_default = EventModal;
|
|
3658
|
-
|
|
3659
|
-
// src/calendar/pages/EventDetailPage.tsx
|
|
3660
3631
|
var EventDetailPage = ({
|
|
3661
3632
|
eventId,
|
|
3662
3633
|
onBack,
|
|
@@ -3768,7 +3739,7 @@ var EventDetailPage = ({
|
|
|
3768
3739
|
)))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-white rounded-lg shadow-md overflow-hidden" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "px-6 py-4 border-b border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2__default.default.createElement("h2", { className: "text-2xl font-semibold text-gray-900" }, event.title), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3769
3740
|
"span",
|
|
3770
3741
|
{
|
|
3771
|
-
className:
|
|
3742
|
+
className: clsx.clsx("px-2 py-1 text-xs font-medium rounded-full", getPriorityColor(event.priority || "normal"))
|
|
3772
3743
|
},
|
|
3773
3744
|
getPriorityText(event.priority || "normal")
|
|
3774
3745
|
), /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -3786,13 +3757,13 @@ var EventDetailPage = ({
|
|
|
3786
3757
|
event
|
|
3787
3758
|
}
|
|
3788
3759
|
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3789
|
-
|
|
3760
|
+
chunk5A7ERLKK_js.ConfirmModal,
|
|
3790
3761
|
{
|
|
3791
3762
|
isOpen: showDeleteConfirm,
|
|
3792
3763
|
onClose: () => setShowDeleteConfirm(false),
|
|
3793
3764
|
onConfirm: handleDelete,
|
|
3794
3765
|
title: "\u786E\u8BA4\u5220\u9664",
|
|
3795
|
-
message:
|
|
3766
|
+
message: '\u60A8\u786E\u5B9A\u8981\u5220\u9664\u4E8B\u4EF6"' + event.title + '"\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002',
|
|
3796
3767
|
confirmText: "\u5220\u9664",
|
|
3797
3768
|
cancelText: "\u53D6\u6D88",
|
|
3798
3769
|
isLoading: isDeleting
|
|
@@ -3867,7 +3838,7 @@ function EventForm({
|
|
|
3867
3838
|
const day = String(date.getDate()).padStart(2, "0");
|
|
3868
3839
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
3869
3840
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
3870
|
-
return
|
|
3841
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes;
|
|
3871
3842
|
};
|
|
3872
3843
|
const parseDateTimeLocal = (value) => {
|
|
3873
3844
|
return new Date(value);
|
|
@@ -3896,7 +3867,7 @@ function EventForm({
|
|
|
3896
3867
|
id: "title",
|
|
3897
3868
|
value: formData.title,
|
|
3898
3869
|
onChange: (e) => handleInputChange("title", e.target.value),
|
|
3899
|
-
className:
|
|
3870
|
+
className: clsx.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"),
|
|
3900
3871
|
placeholder: "\u8BF7\u8F93\u5165\u4E8B\u4EF6\u6807\u9898"
|
|
3901
3872
|
}
|
|
3902
3873
|
), errors.title && /* @__PURE__ */ React2__default.default.createElement("p", { className: "mt-1 text-sm text-red-600" }, errors.title)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "description", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u4E8B\u4EF6\u63CF\u8FF0"), /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -3950,7 +3921,7 @@ function EventForm({
|
|
|
3950
3921
|
const newDate = formData.allDay ? /* @__PURE__ */ new Date(e.target.value + "T23:59:59") : parseDateTimeLocal(e.target.value);
|
|
3951
3922
|
handleInputChange("endTime", newDate);
|
|
3952
3923
|
},
|
|
3953
|
-
className:
|
|
3924
|
+
className: clsx.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")
|
|
3954
3925
|
}
|
|
3955
3926
|
), errors.endTime && /* @__PURE__ */ React2__default.default.createElement("p", { className: "mt-1 text-sm text-red-600" }, errors.endTime))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u5916\u89C2"), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u4E8B\u4EF6\u989C\u8272"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-wrap gap-3" }, colorOptions.map((option) => /* @__PURE__ */ React2__default.default.createElement(
|
|
3956
3927
|
"button",
|
|
@@ -3958,12 +3929,9 @@ function EventForm({
|
|
|
3958
3929
|
key: option.value,
|
|
3959
3930
|
type: "button",
|
|
3960
3931
|
onClick: () => handleInputChange("color", option.value),
|
|
3961
|
-
className:
|
|
3962
|
-
flex items-center px-3 py-2 rounded-lg border-2 transition-all
|
|
3963
|
-
${formData.color === option.value ? "border-blue-500 ring-2 ring-blue-200" : "border-gray-200 hover:border-gray-300"}
|
|
3964
|
-
`
|
|
3932
|
+
className: clsx.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")
|
|
3965
3933
|
},
|
|
3966
|
-
/* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
3934
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("w-4 h-4 rounded-full", option.class, "mr-2") }),
|
|
3967
3935
|
/* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm text-gray-700" }, option.label)
|
|
3968
3936
|
))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-end gap-3 pt-6 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3969
3937
|
"button",
|
|
@@ -4073,7 +4041,7 @@ var EventSearch = ({
|
|
|
4073
4041
|
};
|
|
4074
4042
|
return priorityMap[priority];
|
|
4075
4043
|
};
|
|
4076
|
-
return /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
4044
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.clsx("bg-white rounded-lg border border-gray-200", className) }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-4 border-b border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
4077
4045
|
"input",
|
|
4078
4046
|
{
|
|
4079
4047
|
type: "text",
|
|
@@ -4087,12 +4055,12 @@ var EventSearch = ({
|
|
|
4087
4055
|
{
|
|
4088
4056
|
type: "button",
|
|
4089
4057
|
onClick: () => setIsExpanded(!isExpanded),
|
|
4090
|
-
className:
|
|
4058
|
+
className: clsx.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")
|
|
4091
4059
|
},
|
|
4092
4060
|
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
4093
4061
|
"svg",
|
|
4094
4062
|
{
|
|
4095
|
-
className:
|
|
4063
|
+
className: clsx.clsx("h-4 w-4 transition-transform", isExpanded ? "rotate-180" : ""),
|
|
4096
4064
|
fill: "none",
|
|
4097
4065
|
stroke: "currentColor",
|
|
4098
4066
|
viewBox: "0 0 24 24"
|
|
@@ -4140,9 +4108,9 @@ var EventSearch = ({
|
|
|
4140
4108
|
const newColors = filters.colorFilter.includes(color) ? filters.colorFilter.filter((c) => c !== color) : [...filters.colorFilter, color];
|
|
4141
4109
|
handleFilterChange("colorFilter", newColors);
|
|
4142
4110
|
},
|
|
4143
|
-
className:
|
|
4111
|
+
className: clsx.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"),
|
|
4144
4112
|
style: { backgroundColor: color },
|
|
4145
|
-
title:
|
|
4113
|
+
title: "\u989C\u8272: " + color
|
|
4146
4114
|
}
|
|
4147
4115
|
)))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "md:col-span-2 lg:col-span-3" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u65E5\u671F\u8303\u56F4"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
4148
4116
|
"input",
|
|
@@ -4184,9 +4152,9 @@ function useEvents2() {
|
|
|
4184
4152
|
startDate: toLocalISOString(startDate),
|
|
4185
4153
|
endDate: toLocalISOString(endDate)
|
|
4186
4154
|
});
|
|
4187
|
-
const response = await fetch(
|
|
4155
|
+
const response = await fetch("/api/calendar/events?" + params);
|
|
4188
4156
|
if (!response.ok) {
|
|
4189
|
-
throw new Error(
|
|
4157
|
+
throw new Error("\u83B7\u53D6\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4190
4158
|
}
|
|
4191
4159
|
const data = await response.json();
|
|
4192
4160
|
if (!data.success) {
|
|
@@ -4235,7 +4203,7 @@ function useEvents2() {
|
|
|
4235
4203
|
body: JSON.stringify(createRequest)
|
|
4236
4204
|
});
|
|
4237
4205
|
if (!response.ok) {
|
|
4238
|
-
throw new Error(
|
|
4206
|
+
throw new Error("\u521B\u5EFA\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4239
4207
|
}
|
|
4240
4208
|
const data = await response.json();
|
|
4241
4209
|
if (!data.success) {
|
|
@@ -4271,7 +4239,7 @@ function useEvents2() {
|
|
|
4271
4239
|
if (eventData.allDay !== void 0) updateRequest.allDay = eventData.allDay;
|
|
4272
4240
|
if (eventData.location !== void 0) updateRequest.location = eventData.location;
|
|
4273
4241
|
if (eventData.color !== void 0) updateRequest.color = eventData.color;
|
|
4274
|
-
const response = await fetch(
|
|
4242
|
+
const response = await fetch("/api/calendar/events/" + eventId, {
|
|
4275
4243
|
method: "PUT",
|
|
4276
4244
|
headers: {
|
|
4277
4245
|
"Content-Type": "application/json"
|
|
@@ -4279,7 +4247,7 @@ function useEvents2() {
|
|
|
4279
4247
|
body: JSON.stringify(updateRequest)
|
|
4280
4248
|
});
|
|
4281
4249
|
if (!response.ok) {
|
|
4282
|
-
throw new Error(
|
|
4250
|
+
throw new Error("\u66F4\u65B0\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4283
4251
|
}
|
|
4284
4252
|
const data = await response.json();
|
|
4285
4253
|
if (!data.success) {
|
|
@@ -4309,12 +4277,12 @@ function useEvents2() {
|
|
|
4309
4277
|
setLoading(true);
|
|
4310
4278
|
setError(void 0);
|
|
4311
4279
|
try {
|
|
4312
|
-
const url = deleteAll ?
|
|
4280
|
+
const url = deleteAll ? "/api/calendar/events/" + eventId + "?deleteAll=true" : "/api/calendar/events/" + eventId;
|
|
4313
4281
|
const response = await fetch(url, {
|
|
4314
4282
|
method: "DELETE"
|
|
4315
4283
|
});
|
|
4316
4284
|
if (!response.ok) {
|
|
4317
|
-
throw new Error(
|
|
4285
|
+
throw new Error("\u5220\u9664\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4318
4286
|
}
|
|
4319
4287
|
const data = await response.json();
|
|
4320
4288
|
if (!data.success) {
|
|
@@ -4342,7 +4310,7 @@ function useEvents2() {
|
|
|
4342
4310
|
body: JSON.stringify({ eventIds })
|
|
4343
4311
|
});
|
|
4344
4312
|
if (!response.ok) {
|
|
4345
|
-
throw new Error(
|
|
4313
|
+
throw new Error("\u6279\u91CF\u5220\u9664\u4E8B\u4EF6\u5931\u8D25: " + response.status);
|
|
4346
4314
|
}
|
|
4347
4315
|
const data = await response.json();
|
|
4348
4316
|
if (!data.success) {
|
|
@@ -4385,7 +4353,7 @@ var CalendarExportService = class {
|
|
|
4385
4353
|
case "csv":
|
|
4386
4354
|
return this.exportToCSV(events);
|
|
4387
4355
|
default:
|
|
4388
|
-
throw new Error(
|
|
4356
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u5BFC\u51FA\u683C\u5F0F: " + options.format);
|
|
4389
4357
|
}
|
|
4390
4358
|
}
|
|
4391
4359
|
/**
|
|
@@ -4400,16 +4368,16 @@ var CalendarExportService = class {
|
|
|
4400
4368
|
lines.push("METHOD:PUBLISH");
|
|
4401
4369
|
events.forEach((event) => {
|
|
4402
4370
|
lines.push("BEGIN:VEVENT");
|
|
4403
|
-
lines.push(
|
|
4404
|
-
lines.push(
|
|
4405
|
-
lines.push(
|
|
4406
|
-
lines.push(
|
|
4407
|
-
lines.push(
|
|
4371
|
+
lines.push("UID:" + event.id + "@profile-v1.calendar");
|
|
4372
|
+
lines.push("DTSTART:" + this.formatDateTimeToICal(new Date(event.startTime)));
|
|
4373
|
+
lines.push("DTEND:" + this.formatDateTimeToICal(new Date(event.endTime)));
|
|
4374
|
+
lines.push("DTSTAMP:" + this.formatDateTimeToICal(new Date(event.createdAt)));
|
|
4375
|
+
lines.push("SUMMARY:" + this.escapeICalText(event.title));
|
|
4408
4376
|
if (event.description) {
|
|
4409
|
-
lines.push(
|
|
4377
|
+
lines.push("DESCRIPTION:" + this.escapeICalText(event.description));
|
|
4410
4378
|
}
|
|
4411
4379
|
if (event.location) {
|
|
4412
|
-
lines.push(
|
|
4380
|
+
lines.push("LOCATION:" + this.escapeICalText(event.location));
|
|
4413
4381
|
}
|
|
4414
4382
|
if (event.priority) {
|
|
4415
4383
|
const priorityMap = {
|
|
@@ -4417,7 +4385,7 @@ var CalendarExportService = class {
|
|
|
4417
4385
|
"normal": "5",
|
|
4418
4386
|
"high": "1"
|
|
4419
4387
|
};
|
|
4420
|
-
lines.push(
|
|
4388
|
+
lines.push("PRIORITY:" + (priorityMap[event.priority] || "5"));
|
|
4421
4389
|
}
|
|
4422
4390
|
if (event.allDay) {
|
|
4423
4391
|
lines.push("X-MICROSOFT-CDO-ALLDAYEVENT:TRUE");
|
|
@@ -4537,7 +4505,7 @@ var CalendarExportService = class {
|
|
|
4537
4505
|
*/
|
|
4538
4506
|
static escapeCSVField(field) {
|
|
4539
4507
|
if (field.includes(",") || field.includes('"') || field.includes("\n")) {
|
|
4540
|
-
return
|
|
4508
|
+
return '"' + field.replace(/"/g, '""') + '"';
|
|
4541
4509
|
}
|
|
4542
4510
|
return field;
|
|
4543
4511
|
}
|
|
@@ -4557,7 +4525,7 @@ var CalendarImportService = class {
|
|
|
4557
4525
|
return {
|
|
4558
4526
|
success: false,
|
|
4559
4527
|
importedCount: 0,
|
|
4560
|
-
errors: [
|
|
4528
|
+
errors: ["\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25: " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF")],
|
|
4561
4529
|
events: []
|
|
4562
4530
|
};
|
|
4563
4531
|
}
|
|
@@ -4579,7 +4547,7 @@ var CalendarImportService = class {
|
|
|
4579
4547
|
events = this.parseCSVContent(content);
|
|
4580
4548
|
break;
|
|
4581
4549
|
default:
|
|
4582
|
-
throw new Error(
|
|
4550
|
+
throw new Error("\u4E0D\u652F\u6301\u7684\u5BFC\u5165\u683C\u5F0F: " + options.format);
|
|
4583
4551
|
}
|
|
4584
4552
|
if (options.validateEvents) {
|
|
4585
4553
|
events = this.validateAndFilterEvents(events);
|
|
@@ -4594,7 +4562,7 @@ var CalendarImportService = class {
|
|
|
4594
4562
|
return {
|
|
4595
4563
|
success: false,
|
|
4596
4564
|
importedCount: 0,
|
|
4597
|
-
errors: [
|
|
4565
|
+
errors: ["\u89E3\u6790\u5185\u5BB9\u5931\u8D25: " + (error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF")],
|
|
4598
4566
|
events: []
|
|
4599
4567
|
};
|
|
4600
4568
|
}
|
|
@@ -4821,7 +4789,7 @@ var CalendarImportService = class {
|
|
|
4821
4789
|
const hour = dateTime.substring(8, 10);
|
|
4822
4790
|
const minute = dateTime.substring(10, 12);
|
|
4823
4791
|
const second = dateTime.substring(12, 14);
|
|
4824
|
-
return
|
|
4792
|
+
return year + "-" + month + "-" + day + "T" + hour + ":" + minute + ":" + second + ".000Z";
|
|
4825
4793
|
}
|
|
4826
4794
|
} else {
|
|
4827
4795
|
const dateOnly = value.replace(/[^\d]/g, "");
|
|
@@ -4829,7 +4797,7 @@ var CalendarImportService = class {
|
|
|
4829
4797
|
const year = dateOnly.substring(0, 4);
|
|
4830
4798
|
const month = dateOnly.substring(4, 6);
|
|
4831
4799
|
const day = dateOnly.substring(6, 8);
|
|
4832
|
-
return
|
|
4800
|
+
return year + "-" + month + "-" + day + "T00:00:00.000Z";
|
|
4833
4801
|
}
|
|
4834
4802
|
}
|
|
4835
4803
|
return (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -4991,22 +4959,22 @@ var RecurrenceService = class {
|
|
|
4991
4959
|
let description = "";
|
|
4992
4960
|
switch (rule.type) {
|
|
4993
4961
|
case "daily":
|
|
4994
|
-
description = rule.interval === 1 ? "\u6BCF\u5929" :
|
|
4962
|
+
description = rule.interval === 1 ? "\u6BCF\u5929" : "\u6BCF" + rule.interval + "\u5929";
|
|
4995
4963
|
break;
|
|
4996
4964
|
case "weekly":
|
|
4997
|
-
description = rule.interval === 1 ? "\u6BCF\u5468" :
|
|
4965
|
+
description = rule.interval === 1 ? "\u6BCF\u5468" : "\u6BCF" + rule.interval + "\u5468";
|
|
4998
4966
|
break;
|
|
4999
4967
|
case "monthly":
|
|
5000
|
-
description = rule.interval === 1 ? "\u6BCF\u6708" :
|
|
4968
|
+
description = rule.interval === 1 ? "\u6BCF\u6708" : "\u6BCF" + rule.interval + "\u4E2A\u6708";
|
|
5001
4969
|
break;
|
|
5002
4970
|
case "yearly":
|
|
5003
|
-
description = rule.interval === 1 ? "\u6BCF\u5E74" :
|
|
4971
|
+
description = rule.interval === 1 ? "\u6BCF\u5E74" : "\u6BCF" + rule.interval + "\u5E74";
|
|
5004
4972
|
break;
|
|
5005
4973
|
}
|
|
5006
4974
|
if (rule.endDate) {
|
|
5007
|
-
description +=
|
|
4975
|
+
description += "\uFF0C\u76F4\u5230" + rule.endDate;
|
|
5008
4976
|
} else if (rule.count) {
|
|
5009
|
-
description +=
|
|
4977
|
+
description += "\uFF0C\u5171" + rule.count + "\u6B21";
|
|
5010
4978
|
}
|
|
5011
4979
|
return description;
|
|
5012
4980
|
}
|
|
@@ -5030,7 +4998,7 @@ var ReminderService = class {
|
|
|
5030
4998
|
* 为事件创建提醒
|
|
5031
4999
|
*/
|
|
5032
5000
|
static createReminder(event, reminderMinutes, reminderType = "browser") {
|
|
5033
|
-
const reminderId =
|
|
5001
|
+
const reminderId = event.id + "_" + Date.now();
|
|
5034
5002
|
const eventStart = new Date(event.startTime);
|
|
5035
5003
|
const reminderTime = new Date(eventStart.getTime() - reminderMinutes * 60 * 1e3);
|
|
5036
5004
|
const reminder = {
|
|
@@ -5112,8 +5080,7 @@ var ReminderService = class {
|
|
|
5112
5080
|
}
|
|
5113
5081
|
const timeText = this.getTimeText(reminder.config.minutes);
|
|
5114
5082
|
const notification = new Notification(`\u{1F4C5} \u4E8B\u4EF6\u63D0\u9192`, {
|
|
5115
|
-
body:
|
|
5116
|
-
${timeText}`,
|
|
5083
|
+
body: reminder.eventTitle + "\n" + timeText,
|
|
5117
5084
|
icon: "/favicon.ico",
|
|
5118
5085
|
tag: reminder.id,
|
|
5119
5086
|
requireInteraction: true
|
|
@@ -5166,10 +5133,7 @@ ${timeText}`,
|
|
|
5166
5133
|
*/
|
|
5167
5134
|
static showVisualAlert(reminder) {
|
|
5168
5135
|
const timeText = this.getTimeText(reminder.config.minutes);
|
|
5169
|
-
alert(
|
|
5170
|
-
|
|
5171
|
-
${reminder.eventTitle}
|
|
5172
|
-
${timeText}`);
|
|
5136
|
+
alert("\u{1F4C5} \u4E8B\u4EF6\u63D0\u9192\n\n" + reminder.eventTitle + "\n" + timeText);
|
|
5173
5137
|
}
|
|
5174
5138
|
/**
|
|
5175
5139
|
* 获取时间描述文本
|
|
@@ -5178,15 +5142,15 @@ ${timeText}`);
|
|
|
5178
5142
|
if (minutes === 0) {
|
|
5179
5143
|
return "\u4E8B\u4EF6\u5373\u5C06\u5F00\u59CB";
|
|
5180
5144
|
} else if (minutes < 60) {
|
|
5181
|
-
return
|
|
5145
|
+
return minutes + "\u5206\u949F\u540E\u5F00\u59CB";
|
|
5182
5146
|
} else if (minutes < 1440) {
|
|
5183
5147
|
const hours = Math.floor(minutes / 60);
|
|
5184
5148
|
const remainingMinutes = minutes % 60;
|
|
5185
|
-
return remainingMinutes > 0 ?
|
|
5149
|
+
return remainingMinutes > 0 ? hours + "\u5C0F\u65F6" + remainingMinutes + "\u5206\u949F\u540E\u5F00\u59CB" : hours + "\u5C0F\u65F6\u540E\u5F00\u59CB";
|
|
5186
5150
|
} else {
|
|
5187
5151
|
const days = Math.floor(minutes / 1440);
|
|
5188
5152
|
const remainingHours = Math.floor(minutes % 1440 / 60);
|
|
5189
|
-
return remainingHours > 0 ?
|
|
5153
|
+
return remainingHours > 0 ? days + "\u5929" + remainingHours + "\u5C0F\u65F6\u540E\u5F00\u59CB" : days + "\u5929\u540E\u5F00\u59CB";
|
|
5190
5154
|
}
|
|
5191
5155
|
}
|
|
5192
5156
|
/**
|