sa2kit 1.6.7 → 1.6.9
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/calendar/index.js +334 -399
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/index.mjs +241 -306
- package/dist/calendar/index.mjs.map +1 -1
- package/dist/calendar/routes/index.js +21 -21
- package/dist/calendar/routes/index.mjs +1 -1
- package/dist/calendar/server.js +13 -13
- package/dist/calendar/server.mjs +2 -2
- package/dist/chunk-4FOBBWXW.mjs +179 -0
- package/dist/chunk-4FOBBWXW.mjs.map +1 -0
- package/dist/chunk-CDK3DHKM.mjs +634 -0
- package/dist/chunk-CDK3DHKM.mjs.map +1 -0
- package/dist/chunk-G6WRJ2H2.js +187 -0
- package/dist/chunk-G6WRJ2H2.js.map +1 -0
- package/dist/{chunk-6WXOA4BE.mjs → chunk-GVVS4IMM.mjs} +2 -2
- package/dist/chunk-GVVS4IMM.mjs.map +1 -0
- package/dist/chunk-L5PW2YTI.js +647 -0
- package/dist/chunk-L5PW2YTI.js.map +1 -0
- package/dist/{chunk-AXP7KROR.js → chunk-WC5QFO3T.js} +2 -2
- package/dist/chunk-WC5QFO3T.js.map +1 -0
- package/dist/index.js +15 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.map +1 -1
- package/dist/mmd/index.js +2 -2
- package/dist/mmd/index.mjs +1 -1
- package/dist/music/index.js +14 -6
- package/dist/music/index.mjs +1 -1
- package/package.json +41 -7
- package/dist/ConfigService-BxK06xP6.d.mts +0 -262
- package/dist/ConfigService-BxK06xP6.d.ts +0 -262
- package/dist/UniversalFileService-BuHN-jrR.d.ts +0 -515
- package/dist/UniversalFileService-CGGzYeeF.d.mts +0 -515
- package/dist/analytics/index.d.mts +0 -1084
- package/dist/analytics/index.d.ts +0 -1084
- package/dist/analytics/server/index.d.mts +0 -499
- package/dist/analytics/server/index.d.ts +0 -499
- package/dist/api/index.d.mts +0 -248
- package/dist/api/index.d.ts +0 -248
- package/dist/audioDetection/index.d.mts +0 -449
- package/dist/audioDetection/index.d.ts +0 -449
- package/dist/auth/client/index.d.mts +0 -153
- package/dist/auth/client/index.d.ts +0 -153
- package/dist/auth/components/index.d.mts +0 -227
- package/dist/auth/components/index.d.ts +0 -227
- package/dist/auth/hooks/index.d.mts +0 -31
- package/dist/auth/hooks/index.d.ts +0 -31
- package/dist/auth/index.d.mts +0 -40
- package/dist/auth/index.d.ts +0 -40
- package/dist/auth/middleware/index.d.mts +0 -75
- package/dist/auth/middleware/index.d.ts +0 -75
- package/dist/auth/routes/index.d.mts +0 -261
- package/dist/auth/routes/index.d.ts +0 -261
- package/dist/auth/schema/index.d.mts +0 -789
- package/dist/auth/schema/index.d.ts +0 -789
- package/dist/auth/services/index.d.mts +0 -48
- package/dist/auth/services/index.d.ts +0 -48
- package/dist/calendar/index.d.mts +0 -1197
- package/dist/calendar/index.d.ts +0 -1197
- package/dist/calendar/routes/index.d.mts +0 -118
- package/dist/calendar/routes/index.d.ts +0 -118
- package/dist/calendar/server.d.mts +0 -1184
- package/dist/calendar/server.d.ts +0 -1184
- package/dist/chunk-6WXOA4BE.mjs.map +0 -1
- package/dist/chunk-AXP7KROR.js.map +0 -1
- package/dist/chunk-GAC4J5GX.js +0 -228
- package/dist/chunk-GAC4J5GX.js.map +0 -1
- package/dist/chunk-IEA55H3G.js +0 -106
- package/dist/chunk-IEA55H3G.js.map +0 -1
- package/dist/chunk-R2F4BXUU.mjs +0 -100
- package/dist/chunk-R2F4BXUU.mjs.map +0 -1
- package/dist/chunk-T6TE7GTY.mjs +0 -218
- package/dist/chunk-T6TE7GTY.mjs.map +0 -1
- package/dist/config/index.d.mts +0 -64
- package/dist/config/index.d.ts +0 -64
- package/dist/config/server/index.d.mts +0 -1533
- package/dist/config/server/index.d.ts +0 -1533
- package/dist/drizzle-auth-service-Bxlovhv8.d.ts +0 -145
- package/dist/drizzle-auth-service-DZY2F1sv.d.mts +0 -145
- package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
- package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
- package/dist/enums-Dume-V5Y.d.mts +0 -16
- package/dist/enums-Dume-V5Y.d.ts +0 -16
- package/dist/i18n/index.d.mts +0 -417
- package/dist/i18n/index.d.ts +0 -417
- package/dist/imageCrop/index.d.mts +0 -165
- package/dist/imageCrop/index.d.ts +0 -165
- package/dist/index-DSel44Ke.d.mts +0 -93
- package/dist/index-DSel44Ke.d.ts +0 -93
- package/dist/index.d.mts +0 -671
- package/dist/index.d.ts +0 -671
- package/dist/logger/index.d.mts +0 -125
- package/dist/logger/index.d.ts +0 -125
- package/dist/mmd/admin/index.d.mts +0 -487
- package/dist/mmd/admin/index.d.ts +0 -487
- package/dist/mmd/index.d.mts +0 -599
- package/dist/mmd/index.d.ts +0 -599
- package/dist/mmd/server/index.d.mts +0 -138
- package/dist/mmd/server/index.d.ts +0 -138
- package/dist/music/index.d.mts +0 -79
- package/dist/music/index.d.ts +0 -79
- package/dist/music/server/index.d.mts +0 -1
- package/dist/music/server/index.d.ts +0 -1
- package/dist/request/index.d.mts +0 -51
- package/dist/request/index.d.ts +0 -51
- package/dist/storage/index.d.mts +0 -75
- package/dist/storage/index.d.ts +0 -75
- package/dist/testYourself/admin/index.d.mts +0 -58
- package/dist/testYourself/admin/index.d.ts +0 -58
- package/dist/testYourself/index.d.mts +0 -53
- package/dist/testYourself/index.d.ts +0 -53
- package/dist/testYourself/server/index.d.mts +0 -1029
- package/dist/testYourself/server/index.d.ts +0 -1029
- package/dist/types-B60F7EZZ.d.mts +0 -248
- package/dist/types-B60F7EZZ.d.ts +0 -248
- package/dist/types-BINlP9MK.d.mts +0 -286
- package/dist/types-BINlP9MK.d.ts +0 -286
- package/dist/types-BaZccpvk.d.mts +0 -48
- package/dist/types-BaZccpvk.d.ts +0 -48
- package/dist/types-CK4We_aI.d.mts +0 -270
- package/dist/types-CK4We_aI.d.ts +0 -270
- package/dist/types-CbTsi9CZ.d.mts +0 -31
- package/dist/types-CbTsi9CZ.d.ts +0 -31
- package/dist/types-CroexXnI.d.ts +0 -99
- package/dist/types-DmsXCWvm.d.mts +0 -99
- package/dist/types-Dt0oqeFM.d.mts +0 -70
- package/dist/types-zK6kDzDQ.d.ts +0 -70
- package/dist/universalExport/index.d.mts +0 -235
- package/dist/universalExport/index.d.ts +0 -235
- package/dist/universalExport/server/index.d.mts +0 -1270
- package/dist/universalExport/server/index.d.ts +0 -1270
- package/dist/universalFile/index.d.mts +0 -480
- package/dist/universalFile/index.d.ts +0 -480
- package/dist/universalFile/server/index.d.mts +0 -4516
- package/dist/universalFile/server/index.d.ts +0 -4516
- package/dist/useElectronStorage-Dj0rcorG.d.mts +0 -65
- package/dist/useElectronStorage-DwnNfIhl.d.ts +0 -65
- package/dist/utils/index.d.mts +0 -192
- package/dist/utils/index.d.ts +0 -192
package/dist/calendar/index.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkG6WRJ2H2_js = require('../chunk-G6WRJ2H2.js');
|
|
4
|
+
require('../chunk-7Z5LLJ3A.js');
|
|
5
|
+
require('../chunk-6PRFP5EG.js');
|
|
4
6
|
require('../chunk-DGUM43GV.js');
|
|
5
|
-
var
|
|
7
|
+
var React2 = require('react');
|
|
6
8
|
var core = require('@dnd-kit/core');
|
|
7
9
|
|
|
8
10
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
11
|
|
|
10
|
-
var
|
|
12
|
+
var React2__default = /*#__PURE__*/_interopDefault(React2);
|
|
11
13
|
|
|
12
14
|
// src/calendar/types/index.ts
|
|
13
15
|
var RecurrenceType = /* @__PURE__ */ ((RecurrenceType3) => {
|
|
@@ -266,73 +268,6 @@ function isValidDate(date) {
|
|
|
266
268
|
function cloneDate(date) {
|
|
267
269
|
return new Date(date.getTime());
|
|
268
270
|
}
|
|
269
|
-
var Modal = ({
|
|
270
|
-
isOpen,
|
|
271
|
-
onClose,
|
|
272
|
-
title,
|
|
273
|
-
children,
|
|
274
|
-
width = 600,
|
|
275
|
-
maskClosable = true
|
|
276
|
-
}) => {
|
|
277
|
-
React3.useEffect(() => {
|
|
278
|
-
if (isOpen) {
|
|
279
|
-
document.body.style.overflow = "hidden";
|
|
280
|
-
} else {
|
|
281
|
-
document.body.style.overflow = "unset";
|
|
282
|
-
}
|
|
283
|
-
return () => {
|
|
284
|
-
document.body.style.overflow = "unset";
|
|
285
|
-
};
|
|
286
|
-
}, [isOpen]);
|
|
287
|
-
if (!isOpen) return null;
|
|
288
|
-
return /* @__PURE__ */ React3__default.default.createElement("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4" }, /* @__PURE__ */ React3__default.default.createElement(
|
|
289
|
-
"div",
|
|
290
|
-
{
|
|
291
|
-
className: "fixed inset-0 bg-black/50 transition-opacity",
|
|
292
|
-
onClick: () => maskClosable && onClose()
|
|
293
|
-
}
|
|
294
|
-
), /* @__PURE__ */ React3__default.default.createElement(
|
|
295
|
-
"div",
|
|
296
|
-
{
|
|
297
|
-
className: "bg-white rounded-xl shadow-2xl z-10 overflow-hidden flex flex-col transition-all transform scale-100",
|
|
298
|
-
style: { width: typeof width === "number" ? `${width}px` : width, maxWidth: "100%" }
|
|
299
|
-
},
|
|
300
|
-
title && /* @__PURE__ */ React3__default.default.createElement("div", { className: "px-6 py-4 border-b border-gray-200 flex justify-between items-center" }, /* @__PURE__ */ React3__default.default.createElement("h3", { className: "text-xl font-semibold text-gray-900" }, title), /* @__PURE__ */ React3__default.default.createElement("button", { onClick: onClose, className: "text-gray-400 hover:text-gray-600 transition-colors" }, /* @__PURE__ */ React3__default.default.createElement("span", { className: "text-2xl" }, "\xD7"))),
|
|
301
|
-
/* @__PURE__ */ React3__default.default.createElement("div", { className: "flex-1 overflow-y-auto" }, children)
|
|
302
|
-
));
|
|
303
|
-
};
|
|
304
|
-
var ConfirmModal = ({
|
|
305
|
-
isOpen,
|
|
306
|
-
onClose,
|
|
307
|
-
onConfirm,
|
|
308
|
-
title,
|
|
309
|
-
message,
|
|
310
|
-
confirmText = "\u786E\u5B9A",
|
|
311
|
-
cancelText = "\u53D6\u6D88",
|
|
312
|
-
isLoading = false
|
|
313
|
-
}) => {
|
|
314
|
-
if (!isOpen) return null;
|
|
315
|
-
return /* @__PURE__ */ React3__default.default.createElement(Modal, { isOpen, onClose, title, width: 400 }, /* @__PURE__ */ React3__default.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React3__default.default.createElement("p", { className: "text-gray-600 mb-6" }, message), /* @__PURE__ */ React3__default.default.createElement("div", { className: "flex justify-end space-x-3" }, /* @__PURE__ */ React3__default.default.createElement(
|
|
316
|
-
"button",
|
|
317
|
-
{
|
|
318
|
-
onClick: onClose,
|
|
319
|
-
className: "px-4 py-2 text-gray-700 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors",
|
|
320
|
-
disabled: isLoading
|
|
321
|
-
},
|
|
322
|
-
cancelText
|
|
323
|
-
), /* @__PURE__ */ React3__default.default.createElement(
|
|
324
|
-
"button",
|
|
325
|
-
{
|
|
326
|
-
onClick: onConfirm,
|
|
327
|
-
className: "px-4 py-2 bg-red-600 text-white rounded-lg hover:bg-red-700 transition-colors flex items-center",
|
|
328
|
-
disabled: isLoading
|
|
329
|
-
},
|
|
330
|
-
isLoading && /* @__PURE__ */ React3__default.default.createElement("div", { className: "mr-2 w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin" }),
|
|
331
|
-
confirmText
|
|
332
|
-
))));
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
// src/calendar/components/EventList.tsx
|
|
336
271
|
function EventList({
|
|
337
272
|
events,
|
|
338
273
|
config,
|
|
@@ -345,11 +280,11 @@ function EventList({
|
|
|
345
280
|
loading = false,
|
|
346
281
|
className = ""
|
|
347
282
|
}) {
|
|
348
|
-
const [selectedEventIds, setSelectedEventIds] =
|
|
349
|
-
const [isSelectionMode, setIsSelectionMode] =
|
|
350
|
-
const [showBatchDeleteConfirm, setShowBatchDeleteConfirm] =
|
|
351
|
-
const [batchDeleteLoading, setBatchDeleteLoading] =
|
|
352
|
-
const sortedAndFilteredEvents =
|
|
283
|
+
const [selectedEventIds, setSelectedEventIds] = React2.useState(/* @__PURE__ */ new Set());
|
|
284
|
+
const [isSelectionMode, setIsSelectionMode] = React2.useState(false);
|
|
285
|
+
const [showBatchDeleteConfirm, setShowBatchDeleteConfirm] = React2.useState(false);
|
|
286
|
+
const [batchDeleteLoading, setBatchDeleteLoading] = React2.useState(false);
|
|
287
|
+
const sortedAndFilteredEvents = React2.useMemo(() => {
|
|
353
288
|
let filteredEvents = [...events];
|
|
354
289
|
if (config.filter.priority) {
|
|
355
290
|
filteredEvents = filteredEvents.filter((event) => event.priority === config.filter.priority);
|
|
@@ -408,13 +343,13 @@ function EventList({
|
|
|
408
343
|
});
|
|
409
344
|
return filteredEvents;
|
|
410
345
|
}, [events, config]);
|
|
411
|
-
const paginatedEvents =
|
|
346
|
+
const paginatedEvents = React2.useMemo(() => {
|
|
412
347
|
const startIndex = (config.currentPage - 1) * config.pageSize;
|
|
413
348
|
const endIndex = startIndex + config.pageSize;
|
|
414
349
|
return sortedAndFilteredEvents.slice(startIndex, endIndex);
|
|
415
350
|
}, [sortedAndFilteredEvents, config.currentPage, config.pageSize]);
|
|
416
351
|
const totalPages = Math.ceil(sortedAndFilteredEvents.length / config.pageSize);
|
|
417
|
-
const handleSelectEvent =
|
|
352
|
+
const handleSelectEvent = React2.useCallback((eventId, selected) => {
|
|
418
353
|
setSelectedEventIds((prev) => {
|
|
419
354
|
const newSet = new Set(prev);
|
|
420
355
|
if (selected) {
|
|
@@ -425,22 +360,22 @@ function EventList({
|
|
|
425
360
|
return newSet;
|
|
426
361
|
});
|
|
427
362
|
}, []);
|
|
428
|
-
const handleSelectAll =
|
|
363
|
+
const handleSelectAll = React2.useCallback((selected) => {
|
|
429
364
|
if (selected) {
|
|
430
365
|
setSelectedEventIds(new Set(paginatedEvents.map((event) => event.id)));
|
|
431
366
|
} else {
|
|
432
367
|
setSelectedEventIds(/* @__PURE__ */ new Set());
|
|
433
368
|
}
|
|
434
369
|
}, [paginatedEvents]);
|
|
435
|
-
const toggleSelectionMode =
|
|
370
|
+
const toggleSelectionMode = React2.useCallback(() => {
|
|
436
371
|
setIsSelectionMode(!isSelectionMode);
|
|
437
372
|
setSelectedEventIds(/* @__PURE__ */ new Set());
|
|
438
373
|
}, [isSelectionMode]);
|
|
439
|
-
const exitSelectionMode =
|
|
374
|
+
const exitSelectionMode = React2.useCallback(() => {
|
|
440
375
|
setIsSelectionMode(false);
|
|
441
376
|
setSelectedEventIds(/* @__PURE__ */ new Set());
|
|
442
377
|
}, []);
|
|
443
|
-
const handleBatchDelete =
|
|
378
|
+
const handleBatchDelete = React2.useCallback(async () => {
|
|
444
379
|
if (!onBatchDelete || selectedEventIds.size === 0) return;
|
|
445
380
|
setBatchDeleteLoading(true);
|
|
446
381
|
try {
|
|
@@ -454,10 +389,10 @@ function EventList({
|
|
|
454
389
|
setBatchDeleteLoading(false);
|
|
455
390
|
}
|
|
456
391
|
}, [onBatchDelete, selectedEventIds]);
|
|
457
|
-
const isAllSelected =
|
|
392
|
+
const isAllSelected = React2.useMemo(() => {
|
|
458
393
|
return paginatedEvents.length > 0 && paginatedEvents.every((event) => selectedEventIds.has(event.id));
|
|
459
394
|
}, [paginatedEvents, selectedEventIds]);
|
|
460
|
-
const isPartiallySelected =
|
|
395
|
+
const isPartiallySelected = React2.useMemo(() => {
|
|
461
396
|
return selectedEventIds.size > 0 && !isAllSelected;
|
|
462
397
|
}, [selectedEventIds.size, isAllSelected]);
|
|
463
398
|
const getPriorityDisplay = (priority) => {
|
|
@@ -520,14 +455,14 @@ function EventList({
|
|
|
520
455
|
const renderSortButton = (field, label) => {
|
|
521
456
|
const isActive = config.sort.field === field;
|
|
522
457
|
const isAsc = isActive && config.sort.direction === "asc" /* ASC */;
|
|
523
|
-
return /* @__PURE__ */
|
|
458
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
524
459
|
"button",
|
|
525
460
|
{
|
|
526
461
|
onClick: () => handleSortChange(field),
|
|
527
462
|
className: `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"}`
|
|
528
463
|
},
|
|
529
464
|
label,
|
|
530
|
-
/* @__PURE__ */
|
|
465
|
+
/* @__PURE__ */ React2__default.default.createElement(
|
|
531
466
|
"svg",
|
|
532
467
|
{
|
|
533
468
|
className: `ml-1 w-4 h-4 transition-transform ${isActive ? isAsc ? "rotate-180" : "" : "opacity-50"}`,
|
|
@@ -535,13 +470,13 @@ function EventList({
|
|
|
535
470
|
stroke: "currentColor",
|
|
536
471
|
viewBox: "0 0 24 24"
|
|
537
472
|
},
|
|
538
|
-
/* @__PURE__ */
|
|
473
|
+
/* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" })
|
|
539
474
|
)
|
|
540
475
|
);
|
|
541
476
|
};
|
|
542
477
|
const renderCheckbox = (eventId) => {
|
|
543
478
|
const isChecked = selectedEventIds.has(eventId);
|
|
544
|
-
return /* @__PURE__ */
|
|
479
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
545
480
|
"input",
|
|
546
481
|
{
|
|
547
482
|
type: "checkbox",
|
|
@@ -555,7 +490,7 @@ function EventList({
|
|
|
555
490
|
);
|
|
556
491
|
};
|
|
557
492
|
const renderSelectAllCheckbox = () => {
|
|
558
|
-
return /* @__PURE__ */
|
|
493
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
559
494
|
"input",
|
|
560
495
|
{
|
|
561
496
|
type: "checkbox",
|
|
@@ -568,17 +503,17 @@ function EventList({
|
|
|
568
503
|
}
|
|
569
504
|
);
|
|
570
505
|
};
|
|
571
|
-
const renderListMode = () => /* @__PURE__ */
|
|
506
|
+
const renderListMode = () => /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, paginatedEvents.map((event) => {
|
|
572
507
|
const priorityDisplay = getPriorityDisplay(event.priority);
|
|
573
508
|
const isSelected = selectedEventIds.has(event.id);
|
|
574
|
-
return /* @__PURE__ */
|
|
509
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
575
510
|
"div",
|
|
576
511
|
{
|
|
577
512
|
key: event.id,
|
|
578
513
|
className: `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" : ""}`,
|
|
579
514
|
onClick: () => !isSelectionMode && onEventClick(event)
|
|
580
515
|
},
|
|
581
|
-
/* @__PURE__ */
|
|
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: `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(
|
|
582
517
|
"button",
|
|
583
518
|
{
|
|
584
519
|
onClick: (e) => {
|
|
@@ -588,8 +523,8 @@ function EventList({
|
|
|
588
523
|
className: "p-2 text-gray-400 hover:text-blue-600 hover:bg-blue-50 rounded-lg transition-colors",
|
|
589
524
|
title: "\u7F16\u8F91\u4E8B\u4EF6"
|
|
590
525
|
},
|
|
591
|
-
/* @__PURE__ */
|
|
592
|
-
), /* @__PURE__ */
|
|
526
|
+
/* @__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: "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" }))
|
|
527
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
593
528
|
"button",
|
|
594
529
|
{
|
|
595
530
|
onClick: (e) => {
|
|
@@ -599,24 +534,24 @@ function EventList({
|
|
|
599
534
|
className: "p-2 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded-lg transition-colors",
|
|
600
535
|
title: "\u5220\u9664\u4E8B\u4EF6"
|
|
601
536
|
},
|
|
602
|
-
/* @__PURE__ */
|
|
537
|
+
/* @__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: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" }))
|
|
603
538
|
)))
|
|
604
539
|
);
|
|
605
540
|
}));
|
|
606
|
-
const renderGridMode = () => /* @__PURE__ */
|
|
541
|
+
const renderGridMode = () => /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4" }, paginatedEvents.map((event) => {
|
|
607
542
|
const priorityDisplay = getPriorityDisplay(event.priority);
|
|
608
543
|
const isSelected = selectedEventIds.has(event.id);
|
|
609
|
-
return /* @__PURE__ */
|
|
544
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
610
545
|
"div",
|
|
611
546
|
{
|
|
612
547
|
key: event.id,
|
|
613
548
|
className: `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" : ""}`,
|
|
614
549
|
onClick: () => !isSelectionMode && onEventClick(event)
|
|
615
550
|
},
|
|
616
|
-
/* @__PURE__ */
|
|
617
|
-
event.description && /* @__PURE__ */
|
|
618
|
-
/* @__PURE__ */
|
|
619
|
-
!isSelectionMode && /* @__PURE__ */
|
|
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: `px-2 py-1 text-xs font-medium rounded border flex-shrink-0 ${priorityDisplay.color}` }, priorityDisplay.text)),
|
|
552
|
+
event.description && /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-gray-600 text-sm mb-3 line-clamp-3" }, event.description),
|
|
553
|
+
/* @__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
|
+
!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(
|
|
620
555
|
"button",
|
|
621
556
|
{
|
|
622
557
|
onClick: (e) => {
|
|
@@ -626,8 +561,8 @@ function EventList({
|
|
|
626
561
|
className: "p-1.5 text-gray-400 hover:text-blue-600 hover:bg-blue-50 rounded transition-colors",
|
|
627
562
|
title: "\u7F16\u8F91\u4E8B\u4EF6"
|
|
628
563
|
},
|
|
629
|
-
/* @__PURE__ */
|
|
630
|
-
), /* @__PURE__ */
|
|
564
|
+
/* @__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: "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" }))
|
|
565
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
631
566
|
"button",
|
|
632
567
|
{
|
|
633
568
|
onClick: (e) => {
|
|
@@ -637,59 +572,59 @@ function EventList({
|
|
|
637
572
|
className: "p-1.5 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded transition-colors",
|
|
638
573
|
title: "\u5220\u9664\u4E8B\u4EF6"
|
|
639
574
|
},
|
|
640
|
-
/* @__PURE__ */
|
|
575
|
+
/* @__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: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" }))
|
|
641
576
|
))
|
|
642
577
|
);
|
|
643
578
|
}));
|
|
644
|
-
return /* @__PURE__ */
|
|
645
|
-
|
|
579
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: `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(
|
|
580
|
+
chunkG6WRJ2H2_js.SearchBox,
|
|
646
581
|
{
|
|
647
582
|
searchQuery: config.filter.searchText || "",
|
|
648
583
|
onSearchChange: handleSearchChange,
|
|
649
584
|
placeholder: "\u641C\u7D22\u4E8B\u4EF6\u6807\u9898\u3001\u63CF\u8FF0\u6216\u4F4D\u7F6E...",
|
|
650
585
|
size: "medium"
|
|
651
586
|
}
|
|
652
|
-
)), /* @__PURE__ */
|
|
587
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-3" }, enableBatchActions && onBatchDelete && /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, !isSelectionMode ? /* @__PURE__ */ React2__default.default.createElement(
|
|
653
588
|
"button",
|
|
654
589
|
{
|
|
655
590
|
onClick: toggleSelectionMode,
|
|
656
591
|
className: "flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-gray-100 border border-gray-300 rounded-lg hover:bg-gray-200 transition-colors"
|
|
657
592
|
},
|
|
658
|
-
/* @__PURE__ */
|
|
593
|
+
/* @__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: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" })),
|
|
659
594
|
"\u6279\u91CF\u64CD\u4F5C"
|
|
660
|
-
) : /* @__PURE__ */
|
|
595
|
+
) : /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
661
596
|
"button",
|
|
662
597
|
{
|
|
663
598
|
onClick: exitSelectionMode,
|
|
664
599
|
className: "px-3 py-2 text-sm font-medium text-gray-700 bg-gray-100 border border-gray-300 rounded-lg hover:bg-gray-200 transition-colors"
|
|
665
600
|
},
|
|
666
601
|
"\u53D6\u6D88"
|
|
667
|
-
), selectedEventIds.size > 0 && /* @__PURE__ */
|
|
602
|
+
), selectedEventIds.size > 0 && /* @__PURE__ */ React2__default.default.createElement(
|
|
668
603
|
"button",
|
|
669
604
|
{
|
|
670
605
|
onClick: () => setShowBatchDeleteConfirm(true),
|
|
671
606
|
disabled: batchDeleteLoading,
|
|
672
607
|
className: "flex items-center gap-2 px-3 py-2 text-sm font-medium text-white bg-red-600 border border-red-600 rounded-lg hover:bg-red-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
|
|
673
608
|
},
|
|
674
|
-
batchDeleteLoading ? /* @__PURE__ */
|
|
609
|
+
batchDeleteLoading ? /* @__PURE__ */ React2__default.default.createElement("div", { className: "animate-spin rounded-full h-4 w-4 border-b-2 border-white" }) : /* @__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: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" })),
|
|
675
610
|
"\u5220\u9664\u9009\u4E2D(",
|
|
676
611
|
selectedEventIds.size,
|
|
677
612
|
")"
|
|
678
|
-
))), /* @__PURE__ */
|
|
613
|
+
))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm text-gray-700 mr-2" }, "\u663E\u793A\u6A21\u5F0F:"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center bg-gray-100 rounded-lg p-1" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
679
614
|
"button",
|
|
680
615
|
{
|
|
681
616
|
onClick: () => handleDisplayModeChange("list" /* LIST */),
|
|
682
617
|
className: `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"}`
|
|
683
618
|
},
|
|
684
619
|
"\u5217\u8868"
|
|
685
|
-
), /* @__PURE__ */
|
|
620
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
686
621
|
"button",
|
|
687
622
|
{
|
|
688
623
|
onClick: () => handleDisplayModeChange("grid" /* GRID */),
|
|
689
624
|
className: `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"}`
|
|
690
625
|
},
|
|
691
626
|
"\u7F51\u683C"
|
|
692
|
-
))))), isSelectionMode && /* @__PURE__ */
|
|
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 && ` (\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(
|
|
693
628
|
"button",
|
|
694
629
|
{
|
|
695
630
|
onClick: () => handlePageChange(config.currentPage - 1),
|
|
@@ -697,7 +632,7 @@ function EventList({
|
|
|
697
632
|
className: "px-3 py-1.5 text-sm border border-gray-300 rounded-lg hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed"
|
|
698
633
|
},
|
|
699
634
|
"\u4E0A\u4E00\u9875"
|
|
700
|
-
), /* @__PURE__ */
|
|
635
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
701
636
|
"button",
|
|
702
637
|
{
|
|
703
638
|
onClick: () => handlePageChange(config.currentPage + 1),
|
|
@@ -705,8 +640,8 @@ function EventList({
|
|
|
705
640
|
className: "px-3 py-1.5 text-sm border border-gray-300 rounded-lg hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed"
|
|
706
641
|
},
|
|
707
642
|
"\u4E0B\u4E00\u9875"
|
|
708
|
-
)))), !loading && paginatedEvents.length === 0 && /* @__PURE__ */
|
|
709
|
-
ConfirmModal,
|
|
643
|
+
)))), !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
|
+
chunkG6WRJ2H2_js.ConfirmModal,
|
|
710
645
|
{
|
|
711
646
|
isOpen: showBatchDeleteConfirm,
|
|
712
647
|
onClose: () => setShowBatchDeleteConfirm(false),
|
|
@@ -1010,13 +945,13 @@ var EventTypeService = class {
|
|
|
1010
945
|
|
|
1011
946
|
// src/calendar/hooks/useEnhancedEvents.ts
|
|
1012
947
|
function useEnhancedEvents() {
|
|
1013
|
-
const [events, setEvents] =
|
|
1014
|
-
const [loading, setLoading] =
|
|
1015
|
-
const [error, setError] =
|
|
1016
|
-
const clearError =
|
|
948
|
+
const [events, setEvents] = React2.useState([]);
|
|
949
|
+
const [loading, setLoading] = React2.useState(false);
|
|
950
|
+
const [error, setError] = React2.useState();
|
|
951
|
+
const clearError = React2.useCallback(() => {
|
|
1017
952
|
setError(void 0);
|
|
1018
953
|
}, []);
|
|
1019
|
-
const fetchEvents =
|
|
954
|
+
const fetchEvents = React2.useCallback(async (startDate, endDate) => {
|
|
1020
955
|
setLoading(true);
|
|
1021
956
|
setError(void 0);
|
|
1022
957
|
try {
|
|
@@ -1064,7 +999,7 @@ function useEnhancedEvents() {
|
|
|
1064
999
|
setLoading(false);
|
|
1065
1000
|
}
|
|
1066
1001
|
}, []);
|
|
1067
|
-
const createEvent =
|
|
1002
|
+
const createEvent = React2.useCallback(async (eventData) => {
|
|
1068
1003
|
setLoading(true);
|
|
1069
1004
|
setError(void 0);
|
|
1070
1005
|
try {
|
|
@@ -1143,7 +1078,7 @@ function useEnhancedEvents() {
|
|
|
1143
1078
|
return "daily" /* DAILY */;
|
|
1144
1079
|
}
|
|
1145
1080
|
};
|
|
1146
|
-
const createEnhancedEvent =
|
|
1081
|
+
const createEnhancedEvent = React2.useCallback(async (eventData) => {
|
|
1147
1082
|
setLoading(true);
|
|
1148
1083
|
setError(void 0);
|
|
1149
1084
|
try {
|
|
@@ -1259,7 +1194,7 @@ function useEnhancedEvents() {
|
|
|
1259
1194
|
setLoading(false);
|
|
1260
1195
|
}
|
|
1261
1196
|
}, []);
|
|
1262
|
-
const updateEvent =
|
|
1197
|
+
const updateEvent = React2.useCallback(async (eventId, eventData) => {
|
|
1263
1198
|
setLoading(true);
|
|
1264
1199
|
setError(void 0);
|
|
1265
1200
|
try {
|
|
@@ -1305,7 +1240,7 @@ function useEnhancedEvents() {
|
|
|
1305
1240
|
setLoading(false);
|
|
1306
1241
|
}
|
|
1307
1242
|
}, []);
|
|
1308
|
-
const deleteEvent =
|
|
1243
|
+
const deleteEvent = React2.useCallback(async (eventId, deleteAll = false) => {
|
|
1309
1244
|
setLoading(true);
|
|
1310
1245
|
setError(void 0);
|
|
1311
1246
|
try {
|
|
@@ -1330,7 +1265,7 @@ function useEnhancedEvents() {
|
|
|
1330
1265
|
setLoading(false);
|
|
1331
1266
|
}
|
|
1332
1267
|
}, []);
|
|
1333
|
-
const batchDeleteEvents =
|
|
1268
|
+
const batchDeleteEvents = React2.useCallback(async (eventIds) => {
|
|
1334
1269
|
setLoading(true);
|
|
1335
1270
|
setError(void 0);
|
|
1336
1271
|
try {
|
|
@@ -1358,7 +1293,7 @@ function useEnhancedEvents() {
|
|
|
1358
1293
|
setLoading(false);
|
|
1359
1294
|
}
|
|
1360
1295
|
}, []);
|
|
1361
|
-
const updateEventTime =
|
|
1296
|
+
const updateEventTime = React2.useCallback(async (eventId, newStartTime, newEndTime) => {
|
|
1362
1297
|
setLoading(true);
|
|
1363
1298
|
setError(void 0);
|
|
1364
1299
|
console.log("\u{1F504} updateEventTime \u8C03\u7528:", {
|
|
@@ -1456,8 +1391,8 @@ var ImprovedEventModal = ({
|
|
|
1456
1391
|
event,
|
|
1457
1392
|
initialDate
|
|
1458
1393
|
}) => {
|
|
1459
|
-
const [eventType, setEventType] =
|
|
1460
|
-
const [formData, setFormData] =
|
|
1394
|
+
const [eventType, setEventType] = React2.useState("single" /* SINGLE */);
|
|
1395
|
+
const [formData, setFormData] = React2.useState({
|
|
1461
1396
|
// 基础信息
|
|
1462
1397
|
title: "",
|
|
1463
1398
|
description: "",
|
|
@@ -1484,11 +1419,11 @@ var ImprovedEventModal = ({
|
|
|
1484
1419
|
useEndDate: true
|
|
1485
1420
|
// true: 使用结束日期, false: 使用重复次数
|
|
1486
1421
|
});
|
|
1487
|
-
const [isLoading, setIsLoading] =
|
|
1488
|
-
const [errors, setErrors] =
|
|
1489
|
-
const [showDeleteConfirm, setShowDeleteConfirm] =
|
|
1422
|
+
const [isLoading, setIsLoading] = React2.useState(false);
|
|
1423
|
+
const [errors, setErrors] = React2.useState({});
|
|
1424
|
+
const [showDeleteConfirm, setShowDeleteConfirm] = React2.useState(false);
|
|
1490
1425
|
const isEditMode = !!event;
|
|
1491
|
-
|
|
1426
|
+
React2.useEffect(() => {
|
|
1492
1427
|
if (event) {
|
|
1493
1428
|
const startDate = new Date(event.startTime);
|
|
1494
1429
|
const endDate = new Date(event.endTime);
|
|
@@ -1653,35 +1588,35 @@ var ImprovedEventModal = ({
|
|
|
1653
1588
|
setErrors({});
|
|
1654
1589
|
onClose();
|
|
1655
1590
|
};
|
|
1656
|
-
const renderEventTypeSelector = () => /* @__PURE__ */
|
|
1591
|
+
const renderEventTypeSelector = () => /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-lg" }, "\u{1F3AF}"), /* @__PURE__ */ React2__default.default.createElement("label", { className: "text-base font-medium text-gray-900" }, "\u9009\u62E9\u4E8B\u4EF6\u7C7B\u578B")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-4" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1657
1592
|
"button",
|
|
1658
1593
|
{
|
|
1659
1594
|
type: "button",
|
|
1660
1595
|
onClick: () => setEventType("single" /* SINGLE */),
|
|
1661
1596
|
className: `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"}`
|
|
1662
1597
|
},
|
|
1663
|
-
/* @__PURE__ */
|
|
1664
|
-
eventType === "single" /* SINGLE */ && /* @__PURE__ */
|
|
1665
|
-
), /* @__PURE__ */
|
|
1598
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: `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: `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
|
+
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
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
1666
1601
|
"button",
|
|
1667
1602
|
{
|
|
1668
1603
|
type: "button",
|
|
1669
1604
|
onClick: () => setEventType("multi_day" /* MULTI_DAY */),
|
|
1670
1605
|
className: `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"}`
|
|
1671
1606
|
},
|
|
1672
|
-
/* @__PURE__ */
|
|
1673
|
-
eventType === "multi_day" /* MULTI_DAY */ && /* @__PURE__ */
|
|
1674
|
-
), /* @__PURE__ */
|
|
1607
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: `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: `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
|
+
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
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
1675
1610
|
"button",
|
|
1676
1611
|
{
|
|
1677
1612
|
type: "button",
|
|
1678
1613
|
onClick: () => setEventType("recurring" /* RECURRING */),
|
|
1679
1614
|
className: `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"}`
|
|
1680
1615
|
},
|
|
1681
|
-
/* @__PURE__ */
|
|
1682
|
-
eventType === "recurring" /* RECURRING */ && /* @__PURE__ */
|
|
1683
|
-
)), /* @__PURE__ */
|
|
1684
|
-
const renderBasicForm = () => /* @__PURE__ */
|
|
1616
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: `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: `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
|
+
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: `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
|
+
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(
|
|
1685
1620
|
"input",
|
|
1686
1621
|
{
|
|
1687
1622
|
type: "text",
|
|
@@ -1690,7 +1625,7 @@ var ImprovedEventModal = ({
|
|
|
1690
1625
|
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",
|
|
1691
1626
|
placeholder: "\u4E3A\u4F60\u7684\u4E8B\u4EF6\u8D77\u4E2A\u540D\u5B57..."
|
|
1692
1627
|
}
|
|
1693
|
-
), /* @__PURE__ */
|
|
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: `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(
|
|
1694
1629
|
"textarea",
|
|
1695
1630
|
{
|
|
1696
1631
|
value: formData.description,
|
|
@@ -1699,7 +1634,7 @@ var ImprovedEventModal = ({
|
|
|
1699
1634
|
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",
|
|
1700
1635
|
placeholder: "\u63CF\u8FF0\u4E00\u4E0B\u8FD9\u4E2A\u4E8B\u4EF6\u7684\u8BE6\u7EC6\u4FE1\u606F..."
|
|
1701
1636
|
}
|
|
1702
|
-
), /* @__PURE__ */
|
|
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 && `\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(
|
|
1703
1638
|
"input",
|
|
1704
1639
|
{
|
|
1705
1640
|
type: "text",
|
|
@@ -1708,7 +1643,7 @@ var ImprovedEventModal = ({
|
|
|
1708
1643
|
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",
|
|
1709
1644
|
placeholder: "\u4E8B\u4EF6\u4E3E\u529E\u5730\u70B9..."
|
|
1710
1645
|
}
|
|
1711
|
-
), /* @__PURE__ */
|
|
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: `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(
|
|
1712
1647
|
"input",
|
|
1713
1648
|
{
|
|
1714
1649
|
type: "checkbox",
|
|
@@ -1717,13 +1652,13 @@ var ImprovedEventModal = ({
|
|
|
1717
1652
|
onChange: (e) => handleInputChange("allDay", e.target.checked),
|
|
1718
1653
|
className: "sr-only"
|
|
1719
1654
|
}
|
|
1720
|
-
), /* @__PURE__ */
|
|
1655
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: `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: `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(
|
|
1721
1656
|
"div",
|
|
1722
1657
|
{
|
|
1723
1658
|
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",
|
|
1724
1659
|
style: { backgroundColor: formData.color }
|
|
1725
1660
|
},
|
|
1726
|
-
/* @__PURE__ */
|
|
1661
|
+
/* @__PURE__ */ React2__default.default.createElement(
|
|
1727
1662
|
"input",
|
|
1728
1663
|
{
|
|
1729
1664
|
type: "color",
|
|
@@ -1732,7 +1667,7 @@ var ImprovedEventModal = ({
|
|
|
1732
1667
|
className: "w-8 h-8 border-none rounded-lg cursor-pointer opacity-0 absolute"
|
|
1733
1668
|
}
|
|
1734
1669
|
)
|
|
1735
|
-
), /* @__PURE__ */
|
|
1670
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm font-medium text-gray-900", style: { color: formData.color } }, formData.color.toUpperCase()), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500" }, "\u70B9\u51FB\u8272\u5757\u9009\u62E9\u989C\u8272"))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex space-x-2" }, ["#3b82f6", "#ef4444", "#10b981", "#f59e0b", "#8b5cf6", "#ec4899"].map((color) => /* @__PURE__ */ React2__default.default.createElement(
|
|
1736
1671
|
"button",
|
|
1737
1672
|
{
|
|
1738
1673
|
key: color,
|
|
@@ -1741,12 +1676,12 @@ var ImprovedEventModal = ({
|
|
|
1741
1676
|
className: `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"}`,
|
|
1742
1677
|
style: { backgroundColor: color }
|
|
1743
1678
|
}
|
|
1744
|
-
))))), /* @__PURE__ */
|
|
1679
|
+
))))), /* @__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" }, [
|
|
1745
1680
|
{ value: "low" /* LOW */, label: "\u4F4E", icon: "\u{1F4D8}", color: "text-blue-600 bg-blue-50 border-blue-200" },
|
|
1746
1681
|
{ value: "normal" /* NORMAL */, label: "\u666E\u901A", icon: "\u{1F4D7}", color: "text-green-600 bg-green-50 border-green-200" },
|
|
1747
1682
|
{ value: "high" /* HIGH */, label: "\u9AD8", icon: "\u{1F4D9}", color: "text-yellow-600 bg-yellow-50 border-yellow-200" },
|
|
1748
1683
|
{ value: "urgent" /* URGENT */, label: "\u7D27\u6025", icon: "\u{1F4D5}", color: "text-red-600 bg-red-50 border-red-200" }
|
|
1749
|
-
].map((priority) => /* @__PURE__ */
|
|
1684
|
+
].map((priority) => /* @__PURE__ */ React2__default.default.createElement("label", { key: priority.value, className: "flex items-center cursor-pointer group" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1750
1685
|
"input",
|
|
1751
1686
|
{
|
|
1752
1687
|
type: "radio",
|
|
@@ -1756,8 +1691,8 @@ var ImprovedEventModal = ({
|
|
|
1756
1691
|
onChange: (e) => handleInputChange("priority", e.target.value),
|
|
1757
1692
|
className: "sr-only"
|
|
1758
1693
|
}
|
|
1759
|
-
), /* @__PURE__ */
|
|
1760
|
-
const renderSingleEventForm = () => /* @__PURE__ */
|
|
1694
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: `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
|
+
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(
|
|
1761
1696
|
"input",
|
|
1762
1697
|
{
|
|
1763
1698
|
type: "datetime-local",
|
|
@@ -1765,7 +1700,7 @@ var ImprovedEventModal = ({
|
|
|
1765
1700
|
onChange: (e) => handleInputChange("startTime", e.target.value),
|
|
1766
1701
|
className: "w-full px-4 py-3 border-2 border-blue-200 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 text-gray-900 bg-white hover:border-blue-300"
|
|
1767
1702
|
}
|
|
1768
|
-
), /* @__PURE__ */
|
|
1703
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-blue-500 text-sm" }, "\u{1F4C5}")))), /* @__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{1F555}"), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u7ED3\u675F\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(
|
|
1769
1704
|
"input",
|
|
1770
1705
|
{
|
|
1771
1706
|
type: "datetime-local",
|
|
@@ -1773,8 +1708,8 @@ var ImprovedEventModal = ({
|
|
|
1773
1708
|
onChange: (e) => handleInputChange("endTime", e.target.value),
|
|
1774
1709
|
className: "w-full px-4 py-3 border-2 border-blue-200 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 text-gray-900 bg-white hover:border-blue-300"
|
|
1775
1710
|
}
|
|
1776
|
-
), /* @__PURE__ */
|
|
1777
|
-
const renderMultiDayEventForm = () => /* @__PURE__ */
|
|
1711
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-y-0 right-0 flex items-center pr-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-blue-500 text-sm" }, "\u{1F4C5}"))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "mt-4 p-3 bg-blue-100 rounded-lg" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start space-x-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-blue-600 text-sm" }, "\u{1F4A1}"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-blue-700" }, /* @__PURE__ */ React2__default.default.createElement("strong", null, "\u63D0\u793A\uFF1A"), "\u5355\u6B21\u4E8B\u4EF6\u5728\u6307\u5B9A\u7684\u65F6\u95F4\u6BB5\u5185\u53D1\u751F\u4E00\u6B21\u3002\u8BF7\u786E\u4FDD\u7ED3\u675F\u65F6\u95F4\u665A\u4E8E\u5F00\u59CB\u65F6\u95F4\u3002")))), formData.allDay && /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-amber-50 rounded-xl p-4 border border-amber-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-2xl" }, "\u{1F305}"), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "font-medium text-amber-800" }, "\u5168\u5929\u4E8B\u4EF6\u6A21\u5F0F"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-amber-700 mt-1" }, "\u6B64\u4E8B\u4EF6\u5C06\u6301\u7EED\u6574\u5929\uFF0C\u65E0\u9700\u8BBE\u7F6E\u5177\u4F53\u65F6\u95F4\u3002\u4E8B\u4EF6\u5C06\u5728\u9009\u5B9A\u65E5\u671F\u7684\u5168\u5929\u663E\u793A\u3002")))));
|
|
1712
|
+
const renderMultiDayEventForm = () => /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u5F00\u59CB\u65E5\u671F *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1778
1713
|
"input",
|
|
1779
1714
|
{
|
|
1780
1715
|
type: "date",
|
|
@@ -1782,7 +1717,7 @@ var ImprovedEventModal = ({
|
|
|
1782
1717
|
onChange: (e) => handleInputChange("startDate", e.target.value),
|
|
1783
1718
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1784
1719
|
}
|
|
1785
|
-
)), /* @__PURE__ */
|
|
1720
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u7ED3\u675F\u65E5\u671F *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1786
1721
|
"input",
|
|
1787
1722
|
{
|
|
1788
1723
|
type: "date",
|
|
@@ -1790,7 +1725,7 @@ var ImprovedEventModal = ({
|
|
|
1790
1725
|
onChange: (e) => handleInputChange("endDate", e.target.value),
|
|
1791
1726
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1792
1727
|
}
|
|
1793
|
-
))), !formData.allDay && /* @__PURE__ */
|
|
1728
|
+
))), !formData.allDay && /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u6BCF\u65E5\u5F00\u59CB\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1794
1729
|
"input",
|
|
1795
1730
|
{
|
|
1796
1731
|
type: "time",
|
|
@@ -1798,7 +1733,7 @@ var ImprovedEventModal = ({
|
|
|
1798
1733
|
onChange: (e) => handleInputChange("dailyStartTime", e.target.value),
|
|
1799
1734
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1800
1735
|
}
|
|
1801
|
-
)), /* @__PURE__ */
|
|
1736
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u6BCF\u65E5\u7ED3\u675F\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1802
1737
|
"input",
|
|
1803
1738
|
{
|
|
1804
1739
|
type: "time",
|
|
@@ -1806,8 +1741,8 @@ var ImprovedEventModal = ({
|
|
|
1806
1741
|
onChange: (e) => handleInputChange("dailyEndTime", e.target.value),
|
|
1807
1742
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1808
1743
|
}
|
|
1809
|
-
))), /* @__PURE__ */
|
|
1810
|
-
const renderRecurringEventForm = () => /* @__PURE__ */
|
|
1744
|
+
))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-3 bg-blue-50 rounded-lg text-sm text-blue-700" }, /* @__PURE__ */ React2__default.default.createElement("strong", null, "\u793A\u4F8B"), "\uFF1A\u5982\u679C\u60A8\u8981\u521B\u5EFA\u4E00\u4E2A\u4ECE21\u53F7\u523023\u53F7\u7684\u57F9\u8BAD\u8BFE\u7A0B\uFF0C\u7CFB\u7EDF\u5C06\u5728\u8FD9\u4E09\u5929\u5185\u6BCF\u5929\u90FD\u521B\u5EFA\u4E00\u4E2A\u4E8B\u4EF6\u5B9E\u4F8B\u3002"));
|
|
1745
|
+
const renderRecurringEventForm = () => /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u5F00\u59CB\u65E5\u671F *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1811
1746
|
"input",
|
|
1812
1747
|
{
|
|
1813
1748
|
type: "date",
|
|
@@ -1815,7 +1750,7 @@ var ImprovedEventModal = ({
|
|
|
1815
1750
|
onChange: (e) => handleInputChange("recurrenceStartDate", e.target.value),
|
|
1816
1751
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1817
1752
|
}
|
|
1818
|
-
)), !formData.allDay && /* @__PURE__ */
|
|
1753
|
+
)), !formData.allDay && /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u5F00\u59CB\u65F6\u95F4 *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1819
1754
|
"input",
|
|
1820
1755
|
{
|
|
1821
1756
|
type: "datetime-local",
|
|
@@ -1823,7 +1758,7 @@ var ImprovedEventModal = ({
|
|
|
1823
1758
|
onChange: (e) => handleInputChange("recurrenceStartTime", e.target.value),
|
|
1824
1759
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1825
1760
|
}
|
|
1826
|
-
)), /* @__PURE__ */
|
|
1761
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u7ED3\u675F\u65F6\u95F4 *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1827
1762
|
"input",
|
|
1828
1763
|
{
|
|
1829
1764
|
type: "datetime-local",
|
|
@@ -1831,18 +1766,18 @@ var ImprovedEventModal = ({
|
|
|
1831
1766
|
onChange: (e) => handleInputChange("recurrenceEndTime", e.target.value),
|
|
1832
1767
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1833
1768
|
}
|
|
1834
|
-
))), /* @__PURE__ */
|
|
1769
|
+
))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u91CD\u590D\u6A21\u5F0F *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1835
1770
|
"select",
|
|
1836
1771
|
{
|
|
1837
1772
|
value: formData.recurrencePattern,
|
|
1838
1773
|
onChange: (e) => handleInputChange("recurrencePattern", e.target.value),
|
|
1839
1774
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1840
1775
|
},
|
|
1841
|
-
/* @__PURE__ */
|
|
1842
|
-
/* @__PURE__ */
|
|
1843
|
-
/* @__PURE__ */
|
|
1844
|
-
/* @__PURE__ */
|
|
1845
|
-
)), /* @__PURE__ */
|
|
1776
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "daily" /* DAILY */ }, "\u6BCF\u5929"),
|
|
1777
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "weekly" /* WEEKLY */ }, "\u6BCF\u5468"),
|
|
1778
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "monthly" /* MONTHLY */ }, "\u6BCF\u6708"),
|
|
1779
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "yearly" /* YEARLY */ }, "\u6BCF\u5E74")
|
|
1780
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u91CD\u590D\u95F4\u9694"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1846
1781
|
"input",
|
|
1847
1782
|
{
|
|
1848
1783
|
type: "number",
|
|
@@ -1852,7 +1787,7 @@ var ImprovedEventModal = ({
|
|
|
1852
1787
|
onChange: (e) => handleInputChange("recurrenceInterval", parseInt(e.target.value) || 1),
|
|
1853
1788
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1854
1789
|
}
|
|
1855
|
-
))), /* @__PURE__ */
|
|
1790
|
+
))), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u7ED3\u675F\u6761\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1856
1791
|
"input",
|
|
1857
1792
|
{
|
|
1858
1793
|
type: "radio",
|
|
@@ -1860,7 +1795,7 @@ var ImprovedEventModal = ({
|
|
|
1860
1795
|
onChange: () => handleInputChange("useEndDate", true),
|
|
1861
1796
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300"
|
|
1862
1797
|
}
|
|
1863
|
-
), /* @__PURE__ */
|
|
1798
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u7ED3\u675F\u65E5\u671F")), formData.useEndDate && /* @__PURE__ */ React2__default.default.createElement(
|
|
1864
1799
|
"input",
|
|
1865
1800
|
{
|
|
1866
1801
|
type: "date",
|
|
@@ -1868,7 +1803,7 @@ var ImprovedEventModal = ({
|
|
|
1868
1803
|
onChange: (e) => handleInputChange("recurrenceEndDate", e.target.value),
|
|
1869
1804
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
1870
1805
|
}
|
|
1871
|
-
), /* @__PURE__ */
|
|
1806
|
+
), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1872
1807
|
"input",
|
|
1873
1808
|
{
|
|
1874
1809
|
type: "radio",
|
|
@@ -1876,7 +1811,7 @@ var ImprovedEventModal = ({
|
|
|
1876
1811
|
onChange: () => handleInputChange("useEndDate", false),
|
|
1877
1812
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300"
|
|
1878
1813
|
}
|
|
1879
|
-
), /* @__PURE__ */
|
|
1814
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u91CD\u590D\u6B21\u6570")), !formData.useEndDate && /* @__PURE__ */ React2__default.default.createElement(
|
|
1880
1815
|
"input",
|
|
1881
1816
|
{
|
|
1882
1817
|
type: "number",
|
|
@@ -1887,25 +1822,25 @@ var ImprovedEventModal = ({
|
|
|
1887
1822
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",
|
|
1888
1823
|
placeholder: "\u8F93\u5165\u91CD\u590D\u6B21\u6570"
|
|
1889
1824
|
}
|
|
1890
|
-
))), /* @__PURE__ */
|
|
1891
|
-
return /* @__PURE__ */
|
|
1825
|
+
))), /* @__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(chunkG6WRJ2H2_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(
|
|
1892
1827
|
"button",
|
|
1893
1828
|
{
|
|
1894
1829
|
type: "button",
|
|
1895
1830
|
onClick: handleClose,
|
|
1896
1831
|
className: "w-8 h-8 flex items-center justify-center rounded-full hover:bg-gray-100 transition-colors"
|
|
1897
1832
|
},
|
|
1898
|
-
/* @__PURE__ */
|
|
1899
|
-
))), /* @__PURE__ */
|
|
1833
|
+
/* @__PURE__ */ React2__default.default.createElement("span", { className: "text-gray-400 text-xl" }, "\xD7")
|
|
1834
|
+
))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "px-6 py-6 max-h-[70vh] overflow-y-auto" }, /* @__PURE__ */ React2__default.default.createElement("form", { onSubmit: handleSubmit, className: "space-y-8" }, !isEditMode && /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-gray-50 rounded-lg p-4" }, renderEventTypeSelector()), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2 mb-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-1 h-6 bg-blue-500 rounded-full" }), /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u57FA\u672C\u4FE1\u606F")), renderBasicForm()), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2 mb-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-1 h-6 bg-green-500 rounded-full" }), /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u65F6\u95F4\u8BBE\u7F6E")), eventType === "single" /* SINGLE */ && renderSingleEventForm(), eventType === "multi_day" /* MULTI_DAY */ && renderMultiDayEventForm(), eventType === "recurring" /* RECURRING */ && renderRecurringEventForm()), (errors.general || errors.submit) && /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-3" }, errors.general && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start space-x-3 p-4 bg-red-50 border border-red-200 rounded-lg" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-red-500 text-lg" }, "\u26A0\uFE0F")), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "text-sm font-medium text-red-800" }, "\u8868\u5355\u9A8C\u8BC1\u9519\u8BEF"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-red-600 mt-1" }, errors.general))), errors.submit && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-start space-x-3 p-4 bg-red-50 border border-red-200 rounded-lg" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-red-500 text-lg" }, "\u274C")), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "text-sm font-medium text-red-800" }, "\u4FDD\u5B58\u5931\u8D25"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-red-600 mt-1" }, errors.submit)))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "px-6 py-4 border-t border-gray-200 bg-gray-50" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2__default.default.createElement("div", null, isEditMode && onDelete && /* @__PURE__ */ React2__default.default.createElement(
|
|
1900
1835
|
"button",
|
|
1901
1836
|
{
|
|
1902
1837
|
type: "button",
|
|
1903
1838
|
onClick: () => setShowDeleteConfirm(true),
|
|
1904
1839
|
className: "inline-flex items-center px-4 py-2 text-sm font-medium text-red-600 bg-white border border-red-300 rounded-lg hover:bg-red-50 hover:border-red-400 transition-all duration-200 shadow-sm hover:shadow-md"
|
|
1905
1840
|
},
|
|
1906
|
-
/* @__PURE__ */
|
|
1841
|
+
/* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2" }, "\u{1F5D1}\uFE0F"),
|
|
1907
1842
|
"\u5220\u9664\u4E8B\u4EF6"
|
|
1908
|
-
)), /* @__PURE__ */
|
|
1843
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1909
1844
|
"button",
|
|
1910
1845
|
{
|
|
1911
1846
|
type: "button",
|
|
@@ -1913,7 +1848,7 @@ var ImprovedEventModal = ({
|
|
|
1913
1848
|
className: "inline-flex items-center px-6 py-2.5 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 hover:border-gray-400 transition-all duration-200 shadow-sm hover:shadow-md"
|
|
1914
1849
|
},
|
|
1915
1850
|
"\u53D6\u6D88"
|
|
1916
|
-
), /* @__PURE__ */
|
|
1851
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
1917
1852
|
"button",
|
|
1918
1853
|
{
|
|
1919
1854
|
type: "submit",
|
|
@@ -1921,11 +1856,11 @@ var ImprovedEventModal = ({
|
|
|
1921
1856
|
onClick: handleSubmit,
|
|
1922
1857
|
className: "inline-flex items-center px-6 py-2.5 text-sm font-medium text-white bg-gradient-to-r from-blue-600 to-blue-700 border border-blue-600 rounded-lg hover:from-blue-700 hover:to-blue-800 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 shadow-md hover:shadow-lg transform hover:-translate-y-0.5"
|
|
1923
1858
|
},
|
|
1924
|
-
isLoading && /* @__PURE__ */
|
|
1925
|
-
/* @__PURE__ */
|
|
1859
|
+
isLoading && /* @__PURE__ */ React2__default.default.createElement("div", { className: "mr-2 w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin" }),
|
|
1860
|
+
/* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2" }, isEditMode ? "\u{1F4BE}" : "\u2728"),
|
|
1926
1861
|
isLoading ? "\u4FDD\u5B58\u4E2D..." : isEditMode ? "\u66F4\u65B0\u4E8B\u4EF6" : "\u521B\u5EFA\u4E8B\u4EF6"
|
|
1927
|
-
)))))), /* @__PURE__ */
|
|
1928
|
-
ConfirmModal,
|
|
1862
|
+
)))))), /* @__PURE__ */ React2__default.default.createElement(
|
|
1863
|
+
chunkG6WRJ2H2_js.ConfirmModal,
|
|
1929
1864
|
{
|
|
1930
1865
|
isOpen: showDeleteConfirm,
|
|
1931
1866
|
onClose: () => setShowDeleteConfirm(false),
|
|
@@ -1940,13 +1875,13 @@ var ImprovedEventModal = ({
|
|
|
1940
1875
|
};
|
|
1941
1876
|
var ImprovedEventModal_default = ImprovedEventModal;
|
|
1942
1877
|
function useEventDrag(events, onEventUpdate) {
|
|
1943
|
-
const [dragState, setDragState] =
|
|
1878
|
+
const [dragState, setDragState] = React2.useState({
|
|
1944
1879
|
isDragging: false,
|
|
1945
1880
|
draggedEvent: null,
|
|
1946
1881
|
dragOverDate: null,
|
|
1947
1882
|
previewTime: null
|
|
1948
1883
|
});
|
|
1949
|
-
const handleDragStart =
|
|
1884
|
+
const handleDragStart = React2.useCallback((event) => {
|
|
1950
1885
|
const eventId = parseInt(event.active.id);
|
|
1951
1886
|
const draggedEvent = events.find((e) => e.id === eventId);
|
|
1952
1887
|
console.log("\u{1F3AF} \u62D6\u62FD\u5F00\u59CB:", {
|
|
@@ -1968,7 +1903,7 @@ function useEventDrag(events, onEventUpdate) {
|
|
|
1968
1903
|
});
|
|
1969
1904
|
}
|
|
1970
1905
|
}, [events]);
|
|
1971
|
-
const handleDragOver =
|
|
1906
|
+
const handleDragOver = React2.useCallback((event) => {
|
|
1972
1907
|
const { over } = event;
|
|
1973
1908
|
console.log("\u{1F50D} \u62D6\u62FD\u60AC\u505C:", {
|
|
1974
1909
|
overId: over?.id,
|
|
@@ -2023,7 +1958,7 @@ function useEventDrag(events, onEventUpdate) {
|
|
|
2023
1958
|
}
|
|
2024
1959
|
}
|
|
2025
1960
|
}, [dragState.draggedEvent]);
|
|
2026
|
-
const handleDragEnd =
|
|
1961
|
+
const handleDragEnd = React2.useCallback(async (event) => {
|
|
2027
1962
|
const { over } = event;
|
|
2028
1963
|
console.log("\u{1F3AF} \u62D6\u62FD\u7ED3\u675F:", {
|
|
2029
1964
|
overId: over?.id,
|
|
@@ -2076,7 +2011,7 @@ function useEventDrag(events, onEventUpdate) {
|
|
|
2076
2011
|
console.log("\u{1F504} \u91CD\u7F6E\u62D6\u62FD\u72B6\u6001");
|
|
2077
2012
|
resetDragState();
|
|
2078
2013
|
}, [dragState.draggedEvent, dragState.dragOverDate, onEventUpdate]);
|
|
2079
|
-
const resetDragState =
|
|
2014
|
+
const resetDragState = React2.useCallback(() => {
|
|
2080
2015
|
setDragState({
|
|
2081
2016
|
isDragging: false,
|
|
2082
2017
|
draggedEvent: null,
|
|
@@ -2114,9 +2049,9 @@ var isDragSupported = () => {
|
|
|
2114
2049
|
return "draggable" in document.createElement("div");
|
|
2115
2050
|
};
|
|
2116
2051
|
var useDeviceType = () => {
|
|
2117
|
-
const [isMobile, setIsMobile] =
|
|
2118
|
-
const [dragSupported, setDragSupported] =
|
|
2119
|
-
|
|
2052
|
+
const [isMobile, setIsMobile] = React2.useState(false);
|
|
2053
|
+
const [dragSupported, setDragSupported] = React2.useState(true);
|
|
2054
|
+
React2.useEffect(() => {
|
|
2120
2055
|
const checkDevice = () => {
|
|
2121
2056
|
const mobile = isMobileDevice();
|
|
2122
2057
|
setIsMobile(mobile);
|
|
@@ -2179,16 +2114,16 @@ var DraggableEvent = ({
|
|
|
2179
2114
|
const getPriorityIndicator = (priority) => {
|
|
2180
2115
|
switch (priority) {
|
|
2181
2116
|
case "high":
|
|
2182
|
-
return /* @__PURE__ */
|
|
2117
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-2 h-2 bg-red-500 rounded-full flex-shrink-0", title: "\u9AD8\u4F18\u5148\u7EA7" });
|
|
2183
2118
|
case "medium":
|
|
2184
|
-
return /* @__PURE__ */
|
|
2119
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-2 h-2 bg-yellow-500 rounded-full flex-shrink-0", title: "\u4E2D\u4F18\u5148\u7EA7" });
|
|
2185
2120
|
case "low":
|
|
2186
|
-
return /* @__PURE__ */
|
|
2121
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-2 h-2 bg-green-500 rounded-full flex-shrink-0", title: "\u4F4E\u4F18\u5148\u7EA7" });
|
|
2187
2122
|
default:
|
|
2188
2123
|
return null;
|
|
2189
2124
|
}
|
|
2190
2125
|
};
|
|
2191
|
-
return /* @__PURE__ */
|
|
2126
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
2192
2127
|
"div",
|
|
2193
2128
|
{
|
|
2194
2129
|
ref: setNodeRef,
|
|
@@ -2205,16 +2140,16 @@ var DraggableEvent = ({
|
|
|
2205
2140
|
...dragSupported ? attributes : {},
|
|
2206
2141
|
onClick
|
|
2207
2142
|
},
|
|
2208
|
-
dragSupported && /* @__PURE__ */
|
|
2143
|
+
dragSupported && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute top-1 right-1 opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2209
2144
|
"svg",
|
|
2210
2145
|
{
|
|
2211
2146
|
className: "w-3 h-3 text-gray-400",
|
|
2212
2147
|
fill: "currentColor",
|
|
2213
2148
|
viewBox: "0 0 20 20"
|
|
2214
2149
|
},
|
|
2215
|
-
/* @__PURE__ */
|
|
2150
|
+
/* @__PURE__ */ React2__default.default.createElement("path", { d: "M7 2a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM7 8a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM7 14a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM13 2a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM13 8a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM13 14a2 2 0 1 0 0 4 2 2 0 0 0 0-4z" })
|
|
2216
2151
|
)),
|
|
2217
|
-
isMobile && /* @__PURE__ */
|
|
2152
|
+
isMobile && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute top-1 right-1 opacity-70" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2218
2153
|
"svg",
|
|
2219
2154
|
{
|
|
2220
2155
|
className: "w-3 h-3 text-gray-500",
|
|
@@ -2222,7 +2157,7 @@ var DraggableEvent = ({
|
|
|
2222
2157
|
stroke: "currentColor",
|
|
2223
2158
|
viewBox: "0 0 24 24"
|
|
2224
2159
|
},
|
|
2225
|
-
/* @__PURE__ */
|
|
2160
|
+
/* @__PURE__ */ React2__default.default.createElement(
|
|
2226
2161
|
"path",
|
|
2227
2162
|
{
|
|
2228
2163
|
strokeLinecap: "round",
|
|
@@ -2232,9 +2167,9 @@ var DraggableEvent = ({
|
|
|
2232
2167
|
}
|
|
2233
2168
|
)
|
|
2234
2169
|
)),
|
|
2235
|
-
/* @__PURE__ */
|
|
2170
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-1" }, getPriorityIndicator(event.priority), /* @__PURE__ */ React2__default.default.createElement("span", { className: "font-medium truncate flex-1" }, event.title), !event.allDay && /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-xs opacity-60 whitespace-nowrap" }, formatTime(new Date(event.startTime)))),
|
|
2236
2171
|
children,
|
|
2237
|
-
isDragActive && /* @__PURE__ */
|
|
2172
|
+
isDragActive && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-0 bg-white bg-opacity-20 rounded-lg pointer-events-none" })
|
|
2238
2173
|
);
|
|
2239
2174
|
};
|
|
2240
2175
|
var DraggableEvent_default = DraggableEvent;
|
|
@@ -2296,19 +2231,19 @@ var DroppableCalendarCell = ({
|
|
|
2296
2231
|
}
|
|
2297
2232
|
return baseClasses.join(" ");
|
|
2298
2233
|
};
|
|
2299
|
-
return /* @__PURE__ */
|
|
2234
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
2300
2235
|
"div",
|
|
2301
2236
|
{
|
|
2302
2237
|
ref: disableDrop ? void 0 : setNodeRef,
|
|
2303
2238
|
className: getCellClasses(),
|
|
2304
2239
|
onClick: () => onDateClick?.(date)
|
|
2305
2240
|
},
|
|
2306
|
-
/* @__PURE__ */
|
|
2241
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: `
|
|
2307
2242
|
inline-flex items-center justify-center text-sm font-semibold w-6 h-6
|
|
2308
2243
|
${!isCurrentMonth ? "text-gray-400" : date.getDay() === 0 || date.getDay() === 6 ? "text-red-600" : "text-gray-900"}
|
|
2309
2244
|
${isToday(date) ? "bg-blue-600 text-white rounded-full shadow-md" : ""}
|
|
2310
|
-
` }, date.getDate()), dayEvents.length > 0 && /* @__PURE__ */
|
|
2311
|
-
/* @__PURE__ */
|
|
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)),
|
|
2246
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-1" }, dayEvents.slice(0, 3).map((event) => /* @__PURE__ */ React2__default.default.createElement(
|
|
2312
2247
|
DraggableEvent_default,
|
|
2313
2248
|
{
|
|
2314
2249
|
key: event.id,
|
|
@@ -2318,9 +2253,9 @@ var DroppableCalendarCell = ({
|
|
|
2318
2253
|
onEventClick?.(event);
|
|
2319
2254
|
}
|
|
2320
2255
|
}
|
|
2321
|
-
)), dayEvents.length > 3 && /* @__PURE__ */
|
|
2322
|
-
isOver && dragOverPreview && /* @__PURE__ */
|
|
2323
|
-
isOver && !dragOverPreview && /* @__PURE__ */
|
|
2256
|
+
)), dayEvents.length > 3 && /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500 px-2 py-1 bg-gray-100 rounded" }, "+", dayEvents.length - 3, " \u66F4\u591A")),
|
|
2257
|
+
isOver && dragOverPreview && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center bg-blue-50 bg-opacity-90 rounded-lg border-2 border-dashed border-blue-300" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm font-medium text-blue-600 mb-1" }, "\u79FB\u52A8\u5230 ", date.getMonth() + 1, "/", date.getDate()), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-blue-500" }, dragOverPreview))),
|
|
2258
|
+
isOver && !dragOverPreview && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center bg-green-50 bg-opacity-90 rounded-lg border-2 border-dashed border-green-300" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-sm font-medium text-green-600" }, "\u70B9\u51FB\u521B\u5EFA\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-green-500" }, date.getMonth() + 1, "/", date.getDate())))
|
|
2324
2259
|
);
|
|
2325
2260
|
};
|
|
2326
2261
|
var DroppableCalendarCell_default = DroppableCalendarCell;
|
|
@@ -2335,7 +2270,7 @@ var DraggableMonthView = ({
|
|
|
2335
2270
|
onEventUpdate,
|
|
2336
2271
|
className = ""
|
|
2337
2272
|
}) => {
|
|
2338
|
-
const [selectedDate, setSelectedDate] =
|
|
2273
|
+
const [selectedDate, setSelectedDate] = React2.useState(null);
|
|
2339
2274
|
const { isMobile, dragSupported } = useDeviceType();
|
|
2340
2275
|
const {
|
|
2341
2276
|
dragState,
|
|
@@ -2344,14 +2279,14 @@ var DraggableMonthView = ({
|
|
|
2344
2279
|
handleDragEnd
|
|
2345
2280
|
} = useEventDrag(events, dragSupported ? onEventUpdate : async () => {
|
|
2346
2281
|
});
|
|
2347
|
-
const monthDays =
|
|
2282
|
+
const monthDays = React2.useMemo(() => {
|
|
2348
2283
|
const dates = getMonthViewDates(currentDate);
|
|
2349
2284
|
return dates.map((date) => ({
|
|
2350
2285
|
date,
|
|
2351
2286
|
isCurrentMonth: date.getMonth() === currentDate.getMonth()
|
|
2352
2287
|
}));
|
|
2353
2288
|
}, [currentDate]);
|
|
2354
|
-
const weekDays =
|
|
2289
|
+
const weekDays = React2.useMemo(() => {
|
|
2355
2290
|
return monthDays.slice(0, 7).map(
|
|
2356
2291
|
(dayData) => getWeekdayName(dayData.date, "zh-CN", "short")
|
|
2357
2292
|
);
|
|
@@ -2369,27 +2304,27 @@ var DraggableMonthView = ({
|
|
|
2369
2304
|
setSelectedDate(date);
|
|
2370
2305
|
onDateClick?.(date);
|
|
2371
2306
|
};
|
|
2372
|
-
const renderCalendarContent = () => /* @__PURE__ */
|
|
2307
|
+
const renderCalendarContent = () => /* @__PURE__ */ React2__default.default.createElement("div", { className: "overflow-hidden border border-gray-300 rounded-lg" }, /* @__PURE__ */ React2__default.default.createElement("table", { className: "w-full table-fixed border-collapse" }, /* @__PURE__ */ React2__default.default.createElement("thead", null, /* @__PURE__ */ React2__default.default.createElement("tr", { className: "bg-gradient-to-r from-gray-50 to-gray-100 border-b-2 border-gray-300" }, weekDays.map((day, index) => /* @__PURE__ */ React2__default.default.createElement(
|
|
2373
2308
|
"th",
|
|
2374
2309
|
{
|
|
2375
2310
|
key: day,
|
|
2376
2311
|
className: `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"}`
|
|
2377
2312
|
},
|
|
2378
2313
|
day
|
|
2379
|
-
)))), /* @__PURE__ */
|
|
2314
|
+
)))), /* @__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) => {
|
|
2380
2315
|
const dateIndex = weekIndex * 7 + dayIndex;
|
|
2381
2316
|
const dayData = monthDays[dateIndex];
|
|
2382
2317
|
if (!dayData) {
|
|
2383
|
-
return /* @__PURE__ */
|
|
2318
|
+
return /* @__PURE__ */ React2__default.default.createElement("td", { key: dayIndex, className: "h-24 sm:h-32 border-b border-gray-300 border-r border-gray-300 last:border-r-0 bg-gray-100" });
|
|
2384
2319
|
}
|
|
2385
2320
|
const isWeekend2 = dayData.date.getDay() === 0 || dayData.date.getDay() === 6;
|
|
2386
|
-
return /* @__PURE__ */
|
|
2321
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
2387
2322
|
"td",
|
|
2388
2323
|
{
|
|
2389
2324
|
key: dayIndex,
|
|
2390
2325
|
className: `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`
|
|
2391
2326
|
},
|
|
2392
|
-
/* @__PURE__ */
|
|
2327
|
+
/* @__PURE__ */ React2__default.default.createElement(
|
|
2393
2328
|
DroppableCalendarCell_default,
|
|
2394
2329
|
{
|
|
2395
2330
|
date: dayData.date,
|
|
@@ -2405,30 +2340,30 @@ var DraggableMonthView = ({
|
|
|
2405
2340
|
)
|
|
2406
2341
|
);
|
|
2407
2342
|
}))))));
|
|
2408
|
-
return /* @__PURE__ */
|
|
2343
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: `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(
|
|
2409
2344
|
"button",
|
|
2410
2345
|
{
|
|
2411
2346
|
onClick: goToToday,
|
|
2412
2347
|
className: "px-3 py-1 text-sm bg-blue-100 text-blue-600 rounded hover:bg-blue-200 transition-colors"
|
|
2413
2348
|
},
|
|
2414
2349
|
"\u4ECA\u5929"
|
|
2415
|
-
), isMobile && /* @__PURE__ */
|
|
2350
|
+
), isMobile && /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-xs text-gray-500 bg-gray-100 px-2 py-1 rounded" }, "\u70B9\u51FB\u4E8B\u4EF6\u7F16\u8F91")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2416
2351
|
"button",
|
|
2417
2352
|
{
|
|
2418
2353
|
onClick: goToPreviousMonth,
|
|
2419
2354
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors",
|
|
2420
2355
|
title: "\u4E0A\u4E2A\u6708"
|
|
2421
2356
|
},
|
|
2422
|
-
/* @__PURE__ */
|
|
2423
|
-
), /* @__PURE__ */
|
|
2357
|
+
/* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }))
|
|
2358
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
2424
2359
|
"button",
|
|
2425
2360
|
{
|
|
2426
2361
|
onClick: goToNextMonth,
|
|
2427
2362
|
className: "p-2 hover:bg-gray-100 rounded-lg transition-colors",
|
|
2428
2363
|
title: "\u4E0B\u4E2A\u6708"
|
|
2429
2364
|
},
|
|
2430
|
-
/* @__PURE__ */
|
|
2431
|
-
))), dragSupported ? /* @__PURE__ */
|
|
2365
|
+
/* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }))
|
|
2366
|
+
))), dragSupported ? /* @__PURE__ */ React2__default.default.createElement(
|
|
2432
2367
|
core.DndContext,
|
|
2433
2368
|
{
|
|
2434
2369
|
onDragStart: handleDragStart,
|
|
@@ -2436,7 +2371,7 @@ var DraggableMonthView = ({
|
|
|
2436
2371
|
onDragEnd: handleDragEnd
|
|
2437
2372
|
},
|
|
2438
2373
|
renderCalendarContent(),
|
|
2439
|
-
/* @__PURE__ */
|
|
2374
|
+
/* @__PURE__ */ React2__default.default.createElement(core.DragOverlay, null, dragState.isDragging && dragState.draggedEvent && /* @__PURE__ */ React2__default.default.createElement("div", { className: "transform rotate-1 scale-105 pointer-events-none" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2440
2375
|
DraggableEvent_default,
|
|
2441
2376
|
{
|
|
2442
2377
|
event: dragState.draggedEvent,
|
|
@@ -2444,7 +2379,7 @@ var DraggableMonthView = ({
|
|
|
2444
2379
|
className: "shadow-lg border border-blue-400 bg-opacity-90"
|
|
2445
2380
|
}
|
|
2446
2381
|
)))
|
|
2447
|
-
) : renderCalendarContent(), dragSupported && dragState.isDragging && /* @__PURE__ */
|
|
2382
|
+
) : renderCalendarContent(), dragSupported && dragState.isDragging && /* @__PURE__ */ React2__default.default.createElement("div", { className: "fixed bottom-4 right-4 bg-blue-600 text-white px-4 py-2 rounded-lg shadow-lg z-50" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-4 h-4 animate-pulse", fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React2__default.default.createElement("path", { d: "M10 12a2 2 0 100-4 2 2 0 000 4z" }), /* @__PURE__ */ React2__default.default.createElement("path", { fillRule: "evenodd", d: "M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z", clipRule: "evenodd" })), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm" }, '\u62D6\u62FD "', dragState.draggedEvent?.title, '" \u5230\u76EE\u6807\u65E5\u671F'))));
|
|
2448
2383
|
};
|
|
2449
2384
|
var DraggableMonthView_default = DraggableMonthView;
|
|
2450
2385
|
var COLOR_THEMES = {
|
|
@@ -2579,9 +2514,9 @@ var DEFAULT_SETTINGS = {
|
|
|
2579
2514
|
}
|
|
2580
2515
|
};
|
|
2581
2516
|
function CalendarSettings({ onSettingsChange }) {
|
|
2582
|
-
const [settings, setSettings] =
|
|
2583
|
-
const [activeTab, setActiveTab] =
|
|
2584
|
-
|
|
2517
|
+
const [settings, setSettings] = React2.useState(DEFAULT_SETTINGS);
|
|
2518
|
+
const [activeTab, setActiveTab] = React2.useState("theme");
|
|
2519
|
+
React2.useEffect(() => {
|
|
2585
2520
|
const savedSettings = localStorage.getItem("calendar-settings");
|
|
2586
2521
|
if (savedSettings) {
|
|
2587
2522
|
try {
|
|
@@ -2605,28 +2540,28 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2605
2540
|
saveSettings(DEFAULT_SETTINGS);
|
|
2606
2541
|
};
|
|
2607
2542
|
const currentTheme = COLOR_THEMES[settings.theme];
|
|
2608
|
-
return /* @__PURE__ */
|
|
2543
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "px-6 py-4 border-b border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("h2", { className: "text-lg font-semibold text-gray-900" }, "\u65E5\u5386\u8BBE\u7F6E"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-600 mt-1" }, "\u81EA\u5B9A\u4E49\u60A8\u7684\u65E5\u5386\u5916\u89C2\u548C\u884C\u4E3A")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "border-b border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("nav", { className: "flex space-x-8 px-6" }, [
|
|
2609
2544
|
{ key: "theme", label: "\u4E3B\u9898\u6837\u5F0F", icon: "\u{1F3A8}" },
|
|
2610
2545
|
{ key: "general", label: "\u5E38\u89C4\u8BBE\u7F6E", icon: "\u2699\uFE0F" },
|
|
2611
2546
|
{ key: "time", label: "\u65F6\u95F4\u8BBE\u7F6E", icon: "\u23F0" }
|
|
2612
|
-
].map(({ key, label, icon }) => /* @__PURE__ */
|
|
2547
|
+
].map(({ key, label, icon }) => /* @__PURE__ */ React2__default.default.createElement(
|
|
2613
2548
|
"button",
|
|
2614
2549
|
{
|
|
2615
2550
|
key,
|
|
2616
2551
|
onClick: () => setActiveTab(key),
|
|
2617
2552
|
className: `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"}`
|
|
2618
2553
|
},
|
|
2619
|
-
/* @__PURE__ */
|
|
2554
|
+
/* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2" }, icon),
|
|
2620
2555
|
label
|
|
2621
|
-
)))), /* @__PURE__ */
|
|
2556
|
+
)))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-6" }, activeTab === "theme" && /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-md font-medium text-gray-900 mb-4" }, "\u9884\u8BBE\u4E3B\u9898"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-4" }, Object.entries(COLOR_THEMES).map(([key, theme]) => /* @__PURE__ */ React2__default.default.createElement(
|
|
2622
2557
|
"div",
|
|
2623
2558
|
{
|
|
2624
2559
|
key,
|
|
2625
2560
|
onClick: () => updateSettings({ theme: key }),
|
|
2626
2561
|
className: `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"}`
|
|
2627
2562
|
},
|
|
2628
|
-
/* @__PURE__ */
|
|
2629
|
-
/* @__PURE__ */
|
|
2563
|
+
/* @__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
|
+
/* @__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(
|
|
2630
2565
|
"div",
|
|
2631
2566
|
{
|
|
2632
2567
|
key: index,
|
|
@@ -2634,7 +2569,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2634
2569
|
style: { backgroundColor: color }
|
|
2635
2570
|
}
|
|
2636
2571
|
))),
|
|
2637
|
-
/* @__PURE__ */
|
|
2572
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2638
2573
|
"div",
|
|
2639
2574
|
{
|
|
2640
2575
|
className: "grid grid-cols-7 gap-1 p-2 rounded border",
|
|
@@ -2643,7 +2578,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2643
2578
|
borderColor: theme.border.calendar
|
|
2644
2579
|
}
|
|
2645
2580
|
},
|
|
2646
|
-
["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"].map((day, index) => /* @__PURE__ */
|
|
2581
|
+
["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"].map((day, index) => /* @__PURE__ */ React2__default.default.createElement(
|
|
2647
2582
|
"div",
|
|
2648
2583
|
{
|
|
2649
2584
|
key: day,
|
|
@@ -2652,7 +2587,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2652
2587
|
},
|
|
2653
2588
|
day
|
|
2654
2589
|
)),
|
|
2655
|
-
Array.from({ length: 7 }, (_, index) => /* @__PURE__ */
|
|
2590
|
+
Array.from({ length: 7 }, (_, index) => /* @__PURE__ */ React2__default.default.createElement(
|
|
2656
2591
|
"div",
|
|
2657
2592
|
{
|
|
2658
2593
|
key: index,
|
|
@@ -2666,7 +2601,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2666
2601
|
index + 1
|
|
2667
2602
|
))
|
|
2668
2603
|
))
|
|
2669
|
-
)))), /* @__PURE__ */
|
|
2604
|
+
)))), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-md font-medium text-gray-900 mb-4" }, "\u81EA\u5B9A\u4E49\u989C\u8272"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4" }, Object.entries(currentTheme.colors).map(([key, defaultColor]) => /* @__PURE__ */ React2__default.default.createElement("div", { key, className: "space-y-2" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 capitalize" }, key === "primary" ? "\u4E3B\u8272" : key === "secondary" ? "\u6B21\u8981\u8272" : key === "accent" ? "\u5F3A\u8C03\u8272" : key === "danger" ? "\u5371\u9669\u8272" : key), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2670
2605
|
"input",
|
|
2671
2606
|
{
|
|
2672
2607
|
type: "color",
|
|
@@ -2679,7 +2614,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2679
2614
|
}),
|
|
2680
2615
|
className: "w-12 h-8 border border-gray-300 rounded cursor-pointer"
|
|
2681
2616
|
}
|
|
2682
|
-
), /* @__PURE__ */
|
|
2617
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
2683
2618
|
"input",
|
|
2684
2619
|
{
|
|
2685
2620
|
type: "text",
|
|
@@ -2693,23 +2628,23 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2693
2628
|
className: "flex-1 px-3 py-1 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",
|
|
2694
2629
|
placeholder: defaultColor
|
|
2695
2630
|
}
|
|
2696
|
-
))))))), activeTab === "general" && /* @__PURE__ */
|
|
2631
|
+
))))))), activeTab === "general" && /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u4E00\u5468\u5F00\u59CB\u4E8E"), /* @__PURE__ */ React2__default.default.createElement(
|
|
2697
2632
|
"select",
|
|
2698
2633
|
{
|
|
2699
2634
|
value: settings.weekStartsOn,
|
|
2700
2635
|
onChange: (e) => updateSettings({ weekStartsOn: Number(e.target.value) }),
|
|
2701
2636
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
2702
2637
|
},
|
|
2703
|
-
WEEK_START_OPTIONS.map((option) => /* @__PURE__ */
|
|
2704
|
-
)), /* @__PURE__ */
|
|
2638
|
+
WEEK_START_OPTIONS.map((option) => /* @__PURE__ */ React2__default.default.createElement("option", { key: option.value, value: option.value }, option.label))
|
|
2639
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u8BED\u8A00"), /* @__PURE__ */ React2__default.default.createElement(
|
|
2705
2640
|
"select",
|
|
2706
2641
|
{
|
|
2707
2642
|
value: settings.language,
|
|
2708
2643
|
onChange: (e) => updateSettings({ language: e.target.value }),
|
|
2709
2644
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
2710
2645
|
},
|
|
2711
|
-
LANGUAGE_OPTIONS.map((option) => /* @__PURE__ */
|
|
2712
|
-
)), /* @__PURE__ */
|
|
2646
|
+
LANGUAGE_OPTIONS.map((option) => /* @__PURE__ */ React2__default.default.createElement("option", { key: option.value, value: option.value }, option.label))
|
|
2647
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-md font-medium text-gray-900" }, "\u663E\u793A\u9009\u9879"), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2713
2648
|
"input",
|
|
2714
2649
|
{
|
|
2715
2650
|
type: "checkbox",
|
|
@@ -2717,7 +2652,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2717
2652
|
onChange: (e) => updateSettings({ showWeekNumbers: e.target.checked }),
|
|
2718
2653
|
className: "rounded border-gray-300 text-blue-600 focus:ring-blue-500"
|
|
2719
2654
|
}
|
|
2720
|
-
), /* @__PURE__ */
|
|
2655
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u663E\u793A\u5468\u6570")), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2721
2656
|
"input",
|
|
2722
2657
|
{
|
|
2723
2658
|
type: "checkbox",
|
|
@@ -2725,7 +2660,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2725
2660
|
onChange: (e) => updateSettings({ showLunarCalendar: e.target.checked }),
|
|
2726
2661
|
className: "rounded border-gray-300 text-blue-600 focus:ring-blue-500"
|
|
2727
2662
|
}
|
|
2728
|
-
), /* @__PURE__ */
|
|
2663
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u663E\u793A\u519C\u5386"))), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u9ED8\u8BA4\u4E8B\u4EF6\u65F6\u957F\uFF08\u5206\u949F\uFF09"), /* @__PURE__ */ React2__default.default.createElement(
|
|
2729
2664
|
"input",
|
|
2730
2665
|
{
|
|
2731
2666
|
type: "number",
|
|
@@ -2736,15 +2671,15 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2736
2671
|
onChange: (e) => updateSettings({ defaultEventDuration: Number(e.target.value) }),
|
|
2737
2672
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
2738
2673
|
}
|
|
2739
|
-
))), activeTab === "time" && /* @__PURE__ */
|
|
2674
|
+
))), activeTab === "time" && /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u65F6\u95F4\u683C\u5F0F"), /* @__PURE__ */ React2__default.default.createElement(
|
|
2740
2675
|
"select",
|
|
2741
2676
|
{
|
|
2742
2677
|
value: settings.timeFormat,
|
|
2743
2678
|
onChange: (e) => updateSettings({ timeFormat: e.target.value }),
|
|
2744
2679
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
2745
2680
|
},
|
|
2746
|
-
TIME_FORMAT_OPTIONS.map((option) => /* @__PURE__ */
|
|
2747
|
-
)), /* @__PURE__ */
|
|
2681
|
+
TIME_FORMAT_OPTIONS.map((option) => /* @__PURE__ */ React2__default.default.createElement("option", { key: option.value, value: option.value }, option.label))
|
|
2682
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-md font-medium text-gray-900 mb-4" }, "\u5DE5\u4F5C\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u5F00\u59CB\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement(
|
|
2748
2683
|
"input",
|
|
2749
2684
|
{
|
|
2750
2685
|
type: "time",
|
|
@@ -2757,7 +2692,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2757
2692
|
}),
|
|
2758
2693
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
2759
2694
|
}
|
|
2760
|
-
)), /* @__PURE__ */
|
|
2695
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u7ED3\u675F\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement(
|
|
2761
2696
|
"input",
|
|
2762
2697
|
{
|
|
2763
2698
|
type: "time",
|
|
@@ -2770,14 +2705,14 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2770
2705
|
}),
|
|
2771
2706
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
2772
2707
|
}
|
|
2773
|
-
))))), /* @__PURE__ */
|
|
2708
|
+
))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex justify-between pt-6 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2774
2709
|
"button",
|
|
2775
2710
|
{
|
|
2776
2711
|
onClick: resetSettings,
|
|
2777
2712
|
className: "px-4 py-2 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-md transition-colors"
|
|
2778
2713
|
},
|
|
2779
2714
|
"\u91CD\u7F6E\u4E3A\u9ED8\u8BA4"
|
|
2780
|
-
), /* @__PURE__ */
|
|
2715
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex space-x-3" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
2781
2716
|
"button",
|
|
2782
2717
|
{
|
|
2783
2718
|
onClick: () => {
|
|
@@ -2793,7 +2728,7 @@ function CalendarSettings({ onSettingsChange }) {
|
|
|
2793
2728
|
className: "px-4 py-2 text-sm font-medium text-blue-600 bg-blue-50 hover:bg-blue-100 rounded-md transition-colors"
|
|
2794
2729
|
},
|
|
2795
2730
|
"\u5BFC\u51FA\u8BBE\u7F6E"
|
|
2796
|
-
), /* @__PURE__ */
|
|
2731
|
+
), /* @__PURE__ */ React2__default.default.createElement("label", { className: "px-4 py-2 text-sm font-medium text-green-600 bg-green-50 hover:bg-green-100 rounded-md transition-colors cursor-pointer" }, "\u5BFC\u5165\u8BBE\u7F6E", /* @__PURE__ */ React2__default.default.createElement(
|
|
2797
2732
|
"input",
|
|
2798
2733
|
{
|
|
2799
2734
|
type: "file",
|
|
@@ -2825,14 +2760,14 @@ function CalendarPage({
|
|
|
2825
2760
|
onShowLogin,
|
|
2826
2761
|
headerActions
|
|
2827
2762
|
}) {
|
|
2828
|
-
const [currentDate, setCurrentDate] =
|
|
2829
|
-
const [viewType, setViewType] =
|
|
2830
|
-
const [isEventModalOpen, setIsEventModalOpen] =
|
|
2831
|
-
const [selectedDate, setSelectedDate] =
|
|
2832
|
-
const [editingEvent, setEditingEvent] =
|
|
2833
|
-
const [activeTab, setActiveTab] =
|
|
2834
|
-
const [calendarSettings, setCalendarSettings] =
|
|
2835
|
-
const [eventListConfig, setEventListConfig] =
|
|
2763
|
+
const [currentDate, setCurrentDate] = React2.useState(/* @__PURE__ */ new Date());
|
|
2764
|
+
const [viewType, setViewType] = React2.useState("month" /* MONTH */);
|
|
2765
|
+
const [isEventModalOpen, setIsEventModalOpen] = React2.useState(false);
|
|
2766
|
+
const [selectedDate, setSelectedDate] = React2.useState(null);
|
|
2767
|
+
const [editingEvent, setEditingEvent] = React2.useState(null);
|
|
2768
|
+
const [activeTab, setActiveTab] = React2.useState("calendar");
|
|
2769
|
+
const [calendarSettings, setCalendarSettings] = React2.useState(null);
|
|
2770
|
+
const [eventListConfig, setEventListConfig] = React2.useState({
|
|
2836
2771
|
displayMode: "list" /* LIST */,
|
|
2837
2772
|
sort: {
|
|
2838
2773
|
field: "startTime" /* START_TIME */,
|
|
@@ -2855,8 +2790,8 @@ function CalendarPage({
|
|
|
2855
2790
|
fetchEvents,
|
|
2856
2791
|
clearError
|
|
2857
2792
|
} = useEnhancedEvents();
|
|
2858
|
-
|
|
2859
|
-
|
|
2793
|
+
React2.useMemo(() => getMonthViewDates(currentDate), [currentDate]);
|
|
2794
|
+
React2.useEffect(() => {
|
|
2860
2795
|
const viewDates = getMonthViewDates(currentDate);
|
|
2861
2796
|
const viewStart = viewDates[0];
|
|
2862
2797
|
const viewEnd = viewDates[viewDates.length - 1];
|
|
@@ -2872,7 +2807,7 @@ function CalendarPage({
|
|
|
2872
2807
|
});
|
|
2873
2808
|
}
|
|
2874
2809
|
}, [currentDate, fetchEvents]);
|
|
2875
|
-
const sampleEvents =
|
|
2810
|
+
const sampleEvents = React2.useMemo(() => [
|
|
2876
2811
|
{ date: "2024-12-15", title: "\u56E2\u961F\u4F1A\u8BAE", color: "blue" },
|
|
2877
2812
|
{ date: "2024-12-20", title: "\u9879\u76EE\u8BC4\u5BA1", color: "green" },
|
|
2878
2813
|
{ date: "2024-12-25", title: "\u5723\u8BDE\u8282", color: "red" },
|
|
@@ -3045,7 +2980,7 @@ function CalendarPage({
|
|
|
3045
2980
|
const renderCalendarView = () => {
|
|
3046
2981
|
switch (viewType) {
|
|
3047
2982
|
case "month" /* MONTH */:
|
|
3048
|
-
return /* @__PURE__ */
|
|
2983
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
3049
2984
|
DraggableMonthView_default,
|
|
3050
2985
|
{
|
|
3051
2986
|
events,
|
|
@@ -3064,7 +2999,7 @@ function CalendarPage({
|
|
|
3064
2999
|
case "day" /* DAY */:
|
|
3065
3000
|
return renderDayView();
|
|
3066
3001
|
default:
|
|
3067
|
-
return /* @__PURE__ */
|
|
3002
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
3068
3003
|
DraggableMonthView_default,
|
|
3069
3004
|
{
|
|
3070
3005
|
events,
|
|
@@ -3082,21 +3017,21 @@ function CalendarPage({
|
|
|
3082
3017
|
};
|
|
3083
3018
|
const renderWeekView = () => {
|
|
3084
3019
|
const weekDates = getWeekViewDates(currentDate);
|
|
3085
|
-
return /* @__PURE__ */
|
|
3020
|
+
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("table", { className: "w-full table-fixed" }, /* @__PURE__ */ React2__default.default.createElement("thead", null, /* @__PURE__ */ React2__default.default.createElement("tr", { className: "bg-gray-50" }, weekDates.map((date, index) => {
|
|
3086
3021
|
const isWeekend2 = date.getDay() === 0 || date.getDay() === 6;
|
|
3087
|
-
return /* @__PURE__ */
|
|
3022
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
3088
3023
|
"th",
|
|
3089
3024
|
{
|
|
3090
3025
|
key: index,
|
|
3091
3026
|
className: `p-3 text-center border-b border-gray-200 ${index < 6 ? "border-r border-gray-200" : ""}`
|
|
3092
3027
|
},
|
|
3093
|
-
/* @__PURE__ */
|
|
3028
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: `text-sm font-medium ${isWeekend2 ? "text-red-600" : "text-gray-700"}` }, getWeekdayName(date, "zh-CN", "short"))
|
|
3094
3029
|
);
|
|
3095
|
-
}))), /* @__PURE__ */
|
|
3030
|
+
}))), /* @__PURE__ */ React2__default.default.createElement("tbody", null, /* @__PURE__ */ React2__default.default.createElement("tr", null, weekDates.map((date, index) => {
|
|
3096
3031
|
const dayEvents = getEventsForDate(date);
|
|
3097
3032
|
const isTodayDate = isToday(date);
|
|
3098
3033
|
const isWeekend2 = date.getDay() === 0 || date.getDay() === 6;
|
|
3099
|
-
return /* @__PURE__ */
|
|
3034
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
3100
3035
|
"td",
|
|
3101
3036
|
{
|
|
3102
3037
|
key: index,
|
|
@@ -3108,7 +3043,7 @@ function CalendarPage({
|
|
|
3108
3043
|
${isTodayDate ? "bg-blue-50" : "bg-white"}
|
|
3109
3044
|
`
|
|
3110
3045
|
},
|
|
3111
|
-
/* @__PURE__ */
|
|
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: `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: `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(
|
|
3112
3047
|
"div",
|
|
3113
3048
|
{
|
|
3114
3049
|
key: eventIndex,
|
|
@@ -3122,21 +3057,21 @@ function CalendarPage({
|
|
|
3122
3057
|
title: event.title
|
|
3123
3058
|
},
|
|
3124
3059
|
event.title
|
|
3125
|
-
)), dayEvents.length > 4 && /* @__PURE__ */
|
|
3060
|
+
)), dayEvents.length > 4 && /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-500 text-center py-1 bg-gray-100 rounded" }, "+", dayEvents.length - 4, " \u66F4\u591A"))) : /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1 flex items-center justify-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-4 h-4 mx-auto mb-1 opacity-30" }, /* @__PURE__ */ React2__default.default.createElement("svg", { fill: "currentColor", viewBox: "0 0 20 20", className: "text-gray-400" }, /* @__PURE__ */ React2__default.default.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z", clipRule: "evenodd" }))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-400" }, "\u65E0\u4E8B\u4EF6")))))
|
|
3126
3061
|
);
|
|
3127
3062
|
})))));
|
|
3128
3063
|
};
|
|
3129
3064
|
const renderDayView = () => {
|
|
3130
3065
|
const dayEvents = getEventsForDate(currentDate);
|
|
3131
3066
|
const isTodayDate = isToday(currentDate);
|
|
3132
|
-
return /* @__PURE__ */
|
|
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: `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(
|
|
3133
3068
|
"button",
|
|
3134
3069
|
{
|
|
3135
3070
|
onClick: () => handleDateClick(currentDate),
|
|
3136
3071
|
className: "w-full mb-4 p-3 border-2 border-dashed border-gray-300 rounded-lg text-gray-600 hover:border-blue-300 hover:text-blue-600 transition-colors"
|
|
3137
3072
|
},
|
|
3138
3073
|
"+ \u5728\u6B64\u65E5\u671F\u521B\u5EFA\u4E8B\u4EF6"
|
|
3139
|
-
), dayEvents.length > 0 ? /* @__PURE__ */
|
|
3074
|
+
), dayEvents.length > 0 ? /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-sm font-semibold text-gray-700 mb-3" }, "\u4ECA\u65E5\u4E8B\u4EF6 (", dayEvents.length, ")"), dayEvents.map((event, eventIndex) => /* @__PURE__ */ React2__default.default.createElement(
|
|
3140
3075
|
"div",
|
|
3141
3076
|
{
|
|
3142
3077
|
key: eventIndex,
|
|
@@ -3148,11 +3083,11 @@ function CalendarPage({
|
|
|
3148
3083
|
${getEventColorClass(event.color)}
|
|
3149
3084
|
`
|
|
3150
3085
|
},
|
|
3151
|
-
/* @__PURE__ */
|
|
3152
|
-
event.isRealEvent && event.id && /* @__PURE__ */
|
|
3153
|
-
))) : /* @__PURE__ */
|
|
3086
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "font-medium text-sm mb-1" }, event.title),
|
|
3087
|
+
event.isRealEvent && event.id && /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-xs text-gray-600" }, "\u70B9\u51FB\u7F16\u8F91\u4E8B\u4EF6")
|
|
3088
|
+
))) : /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center py-8 text-gray-500" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-12 h-12 mx-auto mb-3 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("p", null, "\u4ECA\u65E5\u6682\u65E0\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-xs mt-1" }, "\u70B9\u51FB\u4E0A\u65B9\u6309\u94AE\u521B\u5EFA\u4E8B\u4EF6"))));
|
|
3154
3089
|
};
|
|
3155
|
-
const handleCreateEnhancedEvent =
|
|
3090
|
+
const handleCreateEnhancedEvent = React2.useCallback(async (eventData) => {
|
|
3156
3091
|
try {
|
|
3157
3092
|
const createdEvents = await createEnhancedEvent(eventData);
|
|
3158
3093
|
setIsEventModalOpen(false);
|
|
@@ -3168,42 +3103,42 @@ function CalendarPage({
|
|
|
3168
3103
|
alert("\u521B\u5EFA\u4E8B\u4EF6\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5");
|
|
3169
3104
|
}
|
|
3170
3105
|
}, [createEnhancedEvent]);
|
|
3171
|
-
return /* @__PURE__ */
|
|
3106
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "min-h-screen bg-gray-50" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "max-w-7xl mx-auto p-4 lg:p-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex justify-between items-start mb-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("h1", { className: "text-3xl font-bold text-gray-900 mb-2" }, "\u65E5\u5386\u7BA1\u7406"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-gray-600" }, "\u529F\u80FD\u5B8C\u6574\u7684\u65E5\u5386\u5E94\u7528\uFF0C\u652F\u6301\u4E8B\u4EF6\u7BA1\u7406\u3001\u63D0\u9192\u3001\u91CD\u590D\u4E8B\u4EF6\u7B49\u529F\u80FD")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-3" }, headerActions, !headerActions && !isAuthenticated && /* @__PURE__ */ React2__default.default.createElement(
|
|
3172
3107
|
"button",
|
|
3173
3108
|
{
|
|
3174
3109
|
onClick: onShowLogin,
|
|
3175
3110
|
className: "px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors"
|
|
3176
3111
|
},
|
|
3177
3112
|
"\u767B\u5F55"
|
|
3178
|
-
))), /* @__PURE__ */
|
|
3113
|
+
))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex space-x-1 bg-gray-100 p-1 rounded-lg w-fit" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3179
3114
|
"button",
|
|
3180
3115
|
{
|
|
3181
3116
|
onClick: () => setActiveTab("calendar"),
|
|
3182
3117
|
className: `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"}`
|
|
3183
3118
|
},
|
|
3184
3119
|
"\u{1F4C5} \u65E5\u5386\u89C6\u56FE"
|
|
3185
|
-
), /* @__PURE__ */
|
|
3120
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3186
3121
|
"button",
|
|
3187
3122
|
{
|
|
3188
3123
|
onClick: () => setActiveTab("events"),
|
|
3189
3124
|
className: `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"}`
|
|
3190
3125
|
},
|
|
3191
3126
|
"\u{1F4CB} \u4E8B\u4EF6\u5217\u8868"
|
|
3192
|
-
), /* @__PURE__ */
|
|
3127
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3193
3128
|
"button",
|
|
3194
3129
|
{
|
|
3195
3130
|
onClick: () => setActiveTab("settings"),
|
|
3196
3131
|
className: `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"}`
|
|
3197
3132
|
},
|
|
3198
3133
|
"\u2699\uFE0F \u8BBE\u7F6E"
|
|
3199
|
-
))), error && /* @__PURE__ */
|
|
3134
|
+
))), 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(
|
|
3200
3135
|
"button",
|
|
3201
3136
|
{
|
|
3202
3137
|
onClick: clearError,
|
|
3203
3138
|
className: "mt-2 text-sm text-red-600 hover:text-red-800 font-medium"
|
|
3204
3139
|
},
|
|
3205
3140
|
"\u5173\u95ED"
|
|
3206
|
-
)))), activeTab === "calendar" && /* @__PURE__ */
|
|
3141
|
+
)))), activeTab === "calendar" && /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-blue-50 border border-blue-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-blue-400 mt-0.5", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React2__default.default.createElement("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-sm font-medium text-blue-800" }, "\u529F\u80FD\u8BF4\u660E"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "mt-1 text-sm text-blue-700" }, "\u70B9\u51FB\u65E5\u5386\u4E0A\u7684\u4EFB\u610F\u65E5\u671F\u53EF\u4EE5\u521B\u5EFA\u65B0\u4E8B\u4EF6\u3002\u5F53\u524D\u5DF2\u652F\u6301\u5B8C\u6574\u7684\u4E8B\u4EF6\u7BA1\u7406\u529F\u80FD\uFF0C\u5305\u62EC\u521B\u5EFA\u3001\u7F16\u8F91\u3001\u5220\u9664\u7B49\u64CD\u4F5C\u3002", !isAuthenticated && /* @__PURE__ */ React2__default.default.createElement("span", { className: "block mt-2 text-orange-700 font-medium" }, "\u{1F4A1} \u63D0\u793A\uFF1A\u8BF7\u5148\u767B\u5F55\u4EE5\u4F7F\u7528\u5B8C\u6574\u7684\u4E8B\u4EF6\u7BA1\u7406\u529F\u80FD"))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React2__default.default.createElement("button", { onClick: goToPrevious, className: "p-2 hover:bg-gray-100 rounded-lg transition-colors" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5 text-gray-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }))), /* @__PURE__ */ React2__default.default.createElement("h2", { className: "text-xl font-semibold text-gray-900 min-w-[160px] text-center" }, getViewTitle()), /* @__PURE__ */ React2__default.default.createElement("button", { onClick: goToNext, className: "p-2 hover:bg-gray-100 rounded-lg transition-colors" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5 text-gray-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" })))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React2__default.default.createElement("button", { onClick: goToToday, className: "px-4 py-2 text-sm font-medium text-blue-600 bg-blue-50 hover:bg-blue-100 rounded-lg transition-colors" }, "\u4ECA\u5929"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center bg-gray-100 rounded-lg p-1" }, ["month", "week", "day"].map((view) => /* @__PURE__ */ React2__default.default.createElement(
|
|
3207
3142
|
"button",
|
|
3208
3143
|
{
|
|
3209
3144
|
key: view,
|
|
@@ -3211,7 +3146,7 @@ function CalendarPage({
|
|
|
3211
3146
|
className: `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"}`
|
|
3212
3147
|
},
|
|
3213
3148
|
view === "month" ? "\u6708" : view === "week" ? "\u5468" : "\u65E5"
|
|
3214
|
-
)))))), renderCalendarView(), /* @__PURE__ */
|
|
3149
|
+
)))))), 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(
|
|
3215
3150
|
EventList,
|
|
3216
3151
|
{
|
|
3217
3152
|
events,
|
|
@@ -3224,12 +3159,12 @@ function CalendarPage({
|
|
|
3224
3159
|
enableBatchActions: true,
|
|
3225
3160
|
loading
|
|
3226
3161
|
}
|
|
3227
|
-
), activeTab === "settings" && /* @__PURE__ */
|
|
3162
|
+
), activeTab === "settings" && /* @__PURE__ */ React2__default.default.createElement(
|
|
3228
3163
|
CalendarSettings,
|
|
3229
3164
|
{
|
|
3230
3165
|
onSettingsChange: handleSettingsChange
|
|
3231
3166
|
}
|
|
3232
|
-
)), /* @__PURE__ */
|
|
3167
|
+
)), /* @__PURE__ */ React2__default.default.createElement(
|
|
3233
3168
|
ImprovedEventModal_default,
|
|
3234
3169
|
{
|
|
3235
3170
|
isOpen: isEventModalOpen,
|
|
@@ -3249,7 +3184,7 @@ var EventModal = ({
|
|
|
3249
3184
|
event,
|
|
3250
3185
|
initialDate
|
|
3251
3186
|
}) => {
|
|
3252
|
-
const [formData, setFormData] =
|
|
3187
|
+
const [formData, setFormData] = React2.useState({
|
|
3253
3188
|
title: "",
|
|
3254
3189
|
description: "",
|
|
3255
3190
|
startTime: "",
|
|
@@ -3272,11 +3207,11 @@ var EventModal = ({
|
|
|
3272
3207
|
reminderType: "notification",
|
|
3273
3208
|
reminderMinutes: void 0
|
|
3274
3209
|
});
|
|
3275
|
-
const [isLoading, setIsLoading] =
|
|
3276
|
-
const [errors, setErrors] =
|
|
3277
|
-
const [showDeleteConfirm, setShowDeleteConfirm] =
|
|
3210
|
+
const [isLoading, setIsLoading] = React2.useState(false);
|
|
3211
|
+
const [errors, setErrors] = React2.useState({});
|
|
3212
|
+
const [showDeleteConfirm, setShowDeleteConfirm] = React2.useState(false);
|
|
3278
3213
|
const isEditMode = !!event;
|
|
3279
|
-
|
|
3214
|
+
React2.useEffect(() => {
|
|
3280
3215
|
if (event) {
|
|
3281
3216
|
const startDate = new Date(event.startTime);
|
|
3282
3217
|
const endDate = new Date(event.endTime);
|
|
@@ -3420,8 +3355,8 @@ var EventModal = ({
|
|
|
3420
3355
|
resetForm();
|
|
3421
3356
|
onClose();
|
|
3422
3357
|
};
|
|
3423
|
-
return /* @__PURE__ */
|
|
3424
|
-
Modal,
|
|
3358
|
+
return /* @__PURE__ */ React2__default.default.createElement(
|
|
3359
|
+
chunkG6WRJ2H2_js.Modal,
|
|
3425
3360
|
{
|
|
3426
3361
|
isOpen,
|
|
3427
3362
|
onClose: handleClose,
|
|
@@ -3429,7 +3364,7 @@ var EventModal = ({
|
|
|
3429
3364
|
width: 600,
|
|
3430
3365
|
maskClosable: false
|
|
3431
3366
|
},
|
|
3432
|
-
/* @__PURE__ */
|
|
3367
|
+
/* @__PURE__ */ React2__default.default.createElement("form", { onSubmit: handleSubmit, className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "title", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u4E8B\u4EF6\u6807\u9898 *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3433
3368
|
"input",
|
|
3434
3369
|
{
|
|
3435
3370
|
type: "text",
|
|
@@ -3439,7 +3374,7 @@ var EventModal = ({
|
|
|
3439
3374
|
className: `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"}`,
|
|
3440
3375
|
placeholder: "\u8F93\u5165\u4E8B\u4EF6\u6807\u9898"
|
|
3441
3376
|
}
|
|
3442
|
-
), errors.title && /* @__PURE__ */
|
|
3377
|
+
), 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(
|
|
3443
3378
|
"input",
|
|
3444
3379
|
{
|
|
3445
3380
|
type: "checkbox",
|
|
@@ -3448,7 +3383,7 @@ var EventModal = ({
|
|
|
3448
3383
|
onChange: (e) => handleInputChange("isAllDay", e.target.checked),
|
|
3449
3384
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
|
3450
3385
|
}
|
|
3451
|
-
), /* @__PURE__ */
|
|
3386
|
+
), /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "isAllDay", className: "ml-2 text-sm text-gray-700" }, "\u5168\u5929\u4E8B\u4EF6")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "startTime", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u5F00\u59CB\u65F6\u95F4 *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3452
3387
|
"input",
|
|
3453
3388
|
{
|
|
3454
3389
|
type: formData.isAllDay ? "date" : "datetime-local",
|
|
@@ -3460,7 +3395,7 @@ var EventModal = ({
|
|
|
3460
3395
|
},
|
|
3461
3396
|
className: `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"}`
|
|
3462
3397
|
}
|
|
3463
|
-
), errors.startTime && /* @__PURE__ */
|
|
3398
|
+
), 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(
|
|
3464
3399
|
"input",
|
|
3465
3400
|
{
|
|
3466
3401
|
type: formData.isAllDay ? "date" : "datetime-local",
|
|
@@ -3472,7 +3407,7 @@ var EventModal = ({
|
|
|
3472
3407
|
},
|
|
3473
3408
|
className: `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"}`
|
|
3474
3409
|
}
|
|
3475
|
-
), errors.endTime && /* @__PURE__ */
|
|
3410
|
+
), 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(
|
|
3476
3411
|
"input",
|
|
3477
3412
|
{
|
|
3478
3413
|
type: "text",
|
|
@@ -3482,7 +3417,7 @@ var EventModal = ({
|
|
|
3482
3417
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none",
|
|
3483
3418
|
placeholder: "\u8F93\u5165\u4E8B\u4EF6\u4F4D\u7F6E"
|
|
3484
3419
|
}
|
|
3485
|
-
)), /* @__PURE__ */
|
|
3420
|
+
)), /* @__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" }, "\u63CF\u8FF0"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3486
3421
|
"textarea",
|
|
3487
3422
|
{
|
|
3488
3423
|
id: "description",
|
|
@@ -3492,7 +3427,7 @@ var EventModal = ({
|
|
|
3492
3427
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none resize-none",
|
|
3493
3428
|
placeholder: "\u8F93\u5165\u4E8B\u4EF6\u63CF\u8FF0"
|
|
3494
3429
|
}
|
|
3495
|
-
)), /* @__PURE__ */
|
|
3430
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "priority", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u4F18\u5148\u7EA7"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3496
3431
|
"select",
|
|
3497
3432
|
{
|
|
3498
3433
|
id: "priority",
|
|
@@ -3500,11 +3435,11 @@ var EventModal = ({
|
|
|
3500
3435
|
onChange: (e) => handleInputChange("priority", e.target.value),
|
|
3501
3436
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none"
|
|
3502
3437
|
},
|
|
3503
|
-
/* @__PURE__ */
|
|
3504
|
-
/* @__PURE__ */
|
|
3505
|
-
/* @__PURE__ */
|
|
3506
|
-
/* @__PURE__ */
|
|
3507
|
-
)), /* @__PURE__ */
|
|
3438
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "low" /* LOW */ }, "\u4F4E"),
|
|
3439
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "normal" /* NORMAL */ }, "\u666E\u901A"),
|
|
3440
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "high" /* HIGH */ }, "\u9AD8"),
|
|
3441
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "urgent" /* URGENT */ }, "\u7D27\u6025")
|
|
3442
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "color", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u989C\u8272\u6807\u7B7E"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3508
3443
|
"input",
|
|
3509
3444
|
{
|
|
3510
3445
|
type: "color",
|
|
@@ -3513,7 +3448,7 @@ var EventModal = ({
|
|
|
3513
3448
|
onChange: (e) => handleInputChange("color", e.target.value),
|
|
3514
3449
|
className: "w-12 h-10 border border-gray-300 rounded cursor-pointer"
|
|
3515
3450
|
}
|
|
3516
|
-
), /* @__PURE__ */
|
|
3451
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm text-gray-600" }, formData.color))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "border-t border-gray-200 pt-4" }, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "text-sm font-medium text-gray-700 mb-3" }, "\u{1F504} \u91CD\u590D\u8BBE\u7F6E"), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "recurrenceType", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u91CD\u590D\u9891\u7387"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3517
3452
|
"select",
|
|
3518
3453
|
{
|
|
3519
3454
|
id: "recurrenceType",
|
|
@@ -3524,12 +3459,12 @@ var EventModal = ({
|
|
|
3524
3459
|
},
|
|
3525
3460
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none"
|
|
3526
3461
|
},
|
|
3527
|
-
/* @__PURE__ */
|
|
3528
|
-
/* @__PURE__ */
|
|
3529
|
-
/* @__PURE__ */
|
|
3530
|
-
/* @__PURE__ */
|
|
3531
|
-
/* @__PURE__ */
|
|
3532
|
-
)), formData.recurrenceType && /* @__PURE__ */
|
|
3462
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "none" }, "\u4E0D\u91CD\u590D"),
|
|
3463
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "daily" }, "\u6BCF\u5929"),
|
|
3464
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "weekly" }, "\u6BCF\u5468"),
|
|
3465
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "monthly" }, "\u6BCF\u6708"),
|
|
3466
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "yearly" }, "\u6BCF\u5E74")
|
|
3467
|
+
)), formData.recurrenceType && /* @__PURE__ */ React2__default.default.createElement("div", { className: "mt-3" }, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "recurrenceInterval", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u91CD\u590D\u95F4\u9694"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm text-gray-600" }, "\u6BCF"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3533
3468
|
"input",
|
|
3534
3469
|
{
|
|
3535
3470
|
type: "number",
|
|
@@ -3540,7 +3475,7 @@ var EventModal = ({
|
|
|
3540
3475
|
onChange: (e) => handleInputChange("recurrenceInterval", parseInt(e.target.value) || 1),
|
|
3541
3476
|
className: "w-20 px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none text-center"
|
|
3542
3477
|
}
|
|
3543
|
-
), /* @__PURE__ */
|
|
3478
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm text-gray-600" }, formData.recurrenceType === "daily" && "\u5929", formData.recurrenceType === "weekly" && "\u5468", formData.recurrenceType === "monthly" && "\u6708", formData.recurrenceType === "yearly" && "\u5E74"))), formData.recurrenceType && /* @__PURE__ */ React2__default.default.createElement("div", { className: "mt-3" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u91CD\u590D\u7ED3\u675F"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3544
3479
|
"input",
|
|
3545
3480
|
{
|
|
3546
3481
|
type: "radio",
|
|
@@ -3552,7 +3487,7 @@ var EventModal = ({
|
|
|
3552
3487
|
},
|
|
3553
3488
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300"
|
|
3554
3489
|
}
|
|
3555
|
-
), /* @__PURE__ */
|
|
3490
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u6C38\u4E0D\u7ED3\u675F")), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3556
3491
|
"input",
|
|
3557
3492
|
{
|
|
3558
3493
|
type: "radio",
|
|
@@ -3566,7 +3501,7 @@ var EventModal = ({
|
|
|
3566
3501
|
},
|
|
3567
3502
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300"
|
|
3568
3503
|
}
|
|
3569
|
-
), /* @__PURE__ */
|
|
3504
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u7ED3\u675F\u4E8E:"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3570
3505
|
"input",
|
|
3571
3506
|
{
|
|
3572
3507
|
type: "date",
|
|
@@ -3578,7 +3513,7 @@ var EventModal = ({
|
|
|
3578
3513
|
className: "ml-2 px-2 py-1 border border-gray-300 rounded text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none",
|
|
3579
3514
|
disabled: !formData.recurrenceEndDate
|
|
3580
3515
|
}
|
|
3581
|
-
)), /* @__PURE__ */
|
|
3516
|
+
)), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3582
3517
|
"input",
|
|
3583
3518
|
{
|
|
3584
3519
|
type: "radio",
|
|
@@ -3590,7 +3525,7 @@ var EventModal = ({
|
|
|
3590
3525
|
},
|
|
3591
3526
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300"
|
|
3592
3527
|
}
|
|
3593
|
-
), /* @__PURE__ */
|
|
3528
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u91CD\u590D"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3594
3529
|
"input",
|
|
3595
3530
|
{
|
|
3596
3531
|
type: "number",
|
|
@@ -3607,7 +3542,7 @@ var EventModal = ({
|
|
|
3607
3542
|
className: "ml-2 w-16 px-2 py-1 border border-gray-300 rounded text-sm text-center focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none",
|
|
3608
3543
|
disabled: !formData.recurrenceCount || formData.recurrenceCount === 0
|
|
3609
3544
|
}
|
|
3610
|
-
), /* @__PURE__ */
|
|
3545
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u6B21"))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "border-t border-gray-200 pt-4" }, /* @__PURE__ */ React2__default.default.createElement("h4", { className: "text-sm font-medium text-gray-700 mb-3" }, "\u{1F514} \u63D0\u9192\u8BBE\u7F6E"), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u63D0\u9192\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3611
3546
|
"input",
|
|
3612
3547
|
{
|
|
3613
3548
|
type: "checkbox",
|
|
@@ -3621,7 +3556,7 @@ var EventModal = ({
|
|
|
3621
3556
|
},
|
|
3622
3557
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
|
3623
3558
|
}
|
|
3624
|
-
), /* @__PURE__ */
|
|
3559
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u4E8B\u4EF6\u5F00\u59CB\u65F6")), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3625
3560
|
"input",
|
|
3626
3561
|
{
|
|
3627
3562
|
type: "checkbox",
|
|
@@ -3635,7 +3570,7 @@ var EventModal = ({
|
|
|
3635
3570
|
},
|
|
3636
3571
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
|
3637
3572
|
}
|
|
3638
|
-
), /* @__PURE__ */
|
|
3573
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u63D0\u524D15\u5206\u949F")), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3639
3574
|
"input",
|
|
3640
3575
|
{
|
|
3641
3576
|
type: "checkbox",
|
|
@@ -3649,7 +3584,7 @@ var EventModal = ({
|
|
|
3649
3584
|
},
|
|
3650
3585
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
|
3651
3586
|
}
|
|
3652
|
-
), /* @__PURE__ */
|
|
3587
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u63D0\u524D30\u5206\u949F")), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3653
3588
|
"input",
|
|
3654
3589
|
{
|
|
3655
3590
|
type: "checkbox",
|
|
@@ -3663,7 +3598,7 @@ var EventModal = ({
|
|
|
3663
3598
|
},
|
|
3664
3599
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
|
3665
3600
|
}
|
|
3666
|
-
), /* @__PURE__ */
|
|
3601
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u63D0\u524D1\u5C0F\u65F6")), /* @__PURE__ */ React2__default.default.createElement("label", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3667
3602
|
"input",
|
|
3668
3603
|
{
|
|
3669
3604
|
type: "checkbox",
|
|
@@ -3677,7 +3612,7 @@ var EventModal = ({
|
|
|
3677
3612
|
},
|
|
3678
3613
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
|
3679
3614
|
}
|
|
3680
|
-
), /* @__PURE__ */
|
|
3615
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "ml-2 text-sm text-gray-700" }, "\u63D0\u524D1\u5929"))))), errors.submit && /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-red-50 border border-red-200 rounded-lg p-3" }, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-red-600 text-sm" }, errors.submit)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex justify-between pt-4 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", null, isEditMode && onDelete && /* @__PURE__ */ React2__default.default.createElement(
|
|
3681
3616
|
"button",
|
|
3682
3617
|
{
|
|
3683
3618
|
type: "button",
|
|
@@ -3686,7 +3621,7 @@ var EventModal = ({
|
|
|
3686
3621
|
disabled: isLoading
|
|
3687
3622
|
},
|
|
3688
3623
|
"\u5220\u9664\u4E8B\u4EF6"
|
|
3689
|
-
)), /* @__PURE__ */
|
|
3624
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex space-x-3" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3690
3625
|
"button",
|
|
3691
3626
|
{
|
|
3692
3627
|
type: "button",
|
|
@@ -3695,7 +3630,7 @@ var EventModal = ({
|
|
|
3695
3630
|
disabled: isLoading
|
|
3696
3631
|
},
|
|
3697
3632
|
"\u53D6\u6D88"
|
|
3698
|
-
), /* @__PURE__ */
|
|
3633
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3699
3634
|
"button",
|
|
3700
3635
|
{
|
|
3701
3636
|
type: "submit",
|
|
@@ -3704,8 +3639,8 @@ var EventModal = ({
|
|
|
3704
3639
|
},
|
|
3705
3640
|
isLoading ? "\u4FDD\u5B58\u4E2D..." : isEditMode ? "\u66F4\u65B0\u4E8B\u4EF6" : "\u521B\u5EFA\u4E8B\u4EF6"
|
|
3706
3641
|
)))),
|
|
3707
|
-
/* @__PURE__ */
|
|
3708
|
-
ConfirmModal,
|
|
3642
|
+
/* @__PURE__ */ React2__default.default.createElement(
|
|
3643
|
+
chunkG6WRJ2H2_js.ConfirmModal,
|
|
3709
3644
|
{
|
|
3710
3645
|
isOpen: showDeleteConfirm,
|
|
3711
3646
|
onClose: () => setShowDeleteConfirm(false),
|
|
@@ -3728,13 +3663,13 @@ var EventDetailPage = ({
|
|
|
3728
3663
|
onEdit,
|
|
3729
3664
|
onDelete
|
|
3730
3665
|
}) => {
|
|
3731
|
-
const [event, setEvent] =
|
|
3732
|
-
const [isLoading, setIsLoading] =
|
|
3733
|
-
const [isEditModalOpen, setIsEditModalOpen] =
|
|
3734
|
-
const [showDeleteConfirm, setShowDeleteConfirm] =
|
|
3735
|
-
const [isDeleting, setIsDeleting] =
|
|
3666
|
+
const [event, setEvent] = React2.useState(null);
|
|
3667
|
+
const [isLoading, setIsLoading] = React2.useState(true);
|
|
3668
|
+
const [isEditModalOpen, setIsEditModalOpen] = React2.useState(false);
|
|
3669
|
+
const [showDeleteConfirm, setShowDeleteConfirm] = React2.useState(false);
|
|
3670
|
+
const [isDeleting, setIsDeleting] = React2.useState(false);
|
|
3736
3671
|
const { events, updateEvent, deleteEvent } = useEvents2();
|
|
3737
|
-
|
|
3672
|
+
React2.useEffect(() => {
|
|
3738
3673
|
const foundEvent = events.find((e) => e.id === eventId);
|
|
3739
3674
|
if (foundEvent) {
|
|
3740
3675
|
setEvent(foundEvent);
|
|
@@ -3797,10 +3732,10 @@ var EventDetailPage = ({
|
|
|
3797
3732
|
}
|
|
3798
3733
|
};
|
|
3799
3734
|
if (isLoading) {
|
|
3800
|
-
return /* @__PURE__ */
|
|
3735
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "min-h-screen bg-gray-50 flex items-center justify-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto" }), /* @__PURE__ */ React2__default.default.createElement("p", { className: "mt-4 text-gray-600" }, "\u52A0\u8F7D\u4E8B\u4EF6\u8BE6\u60C5...")));
|
|
3801
3736
|
}
|
|
3802
3737
|
if (!event) {
|
|
3803
|
-
return /* @__PURE__ */
|
|
3738
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "min-h-screen bg-gray-50 flex items-center justify-center" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-gray-600" }, "\u4E8B\u4EF6\u4E0D\u5B58\u5728"), onBack && /* @__PURE__ */ React2__default.default.createElement(
|
|
3804
3739
|
"button",
|
|
3805
3740
|
{
|
|
3806
3741
|
onClick: onBack,
|
|
@@ -3809,40 +3744,40 @@ var EventDetailPage = ({
|
|
|
3809
3744
|
"\u8FD4\u56DE"
|
|
3810
3745
|
)));
|
|
3811
3746
|
}
|
|
3812
|
-
return /* @__PURE__ */
|
|
3747
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "min-h-screen bg-gray-50" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "max-w-4xl mx-auto px-4 py-8" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "mb-8" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-4" }, onBack && /* @__PURE__ */ React2__default.default.createElement(
|
|
3813
3748
|
"button",
|
|
3814
3749
|
{
|
|
3815
3750
|
onClick: onBack,
|
|
3816
3751
|
className: "p-2 hover:bg-gray-100 rounded-md"
|
|
3817
3752
|
},
|
|
3818
|
-
/* @__PURE__ */
|
|
3819
|
-
), /* @__PURE__ */
|
|
3753
|
+
/* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }))
|
|
3754
|
+
), /* @__PURE__ */ React2__default.default.createElement("h1", { className: "text-3xl font-bold text-gray-900" }, "\u4E8B\u4EF6\u8BE6\u60C5")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex space-x-3" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3820
3755
|
"button",
|
|
3821
3756
|
{
|
|
3822
3757
|
onClick: () => setIsEditModalOpen(true),
|
|
3823
3758
|
className: "px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700"
|
|
3824
3759
|
},
|
|
3825
3760
|
"\u7F16\u8F91"
|
|
3826
|
-
), /* @__PURE__ */
|
|
3761
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3827
3762
|
"button",
|
|
3828
3763
|
{
|
|
3829
3764
|
onClick: () => setShowDeleteConfirm(true),
|
|
3830
3765
|
className: "px-4 py-2 bg-red-600 text-white rounded-md hover:bg-red-700"
|
|
3831
3766
|
},
|
|
3832
3767
|
"\u5220\u9664"
|
|
3833
|
-
)))), /* @__PURE__ */
|
|
3768
|
+
)))), /* @__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(
|
|
3834
3769
|
"span",
|
|
3835
3770
|
{
|
|
3836
3771
|
className: `px-2 py-1 text-xs font-medium rounded-full ${getPriorityColor(event.priority || "normal")}`
|
|
3837
3772
|
},
|
|
3838
3773
|
getPriorityText(event.priority || "normal")
|
|
3839
|
-
), /* @__PURE__ */
|
|
3774
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3840
3775
|
"div",
|
|
3841
3776
|
{
|
|
3842
3777
|
className: "w-4 h-4 rounded-full",
|
|
3843
3778
|
style: { backgroundColor: event.color }
|
|
3844
3779
|
}
|
|
3845
|
-
)))), /* @__PURE__ */
|
|
3780
|
+
)))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "px-6 py-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u65F6\u95F4\u4FE1\u606F"), /* @__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("svg", { className: "w-5 h-5 text-gray-400", 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("div", null, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u5F00\u59CB\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "font-medium" }, formatDate(new Date(event.startTime)), " ", formatTime(new Date(event.startTime))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5 text-gray-400", 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("div", null, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u7ED3\u675F\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "font-medium" }, formatDate(new Date(event.endTime)), " ", formatTime(new Date(event.endTime))))), event.allDay && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" })), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u5168\u5929\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "font-medium text-blue-600" }, "\u662F"))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u57FA\u672C\u4FE1\u606F"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-3" }, event.location && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5 text-gray-400", 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("div", null, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u5730\u70B9"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "font-medium" }, event.location))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 4V2a1 1 0 011-1h8a1 1 0 011 1v2M7 4a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V6a2 2 0 00-2-2M7 4h10M7 8h10M7 12h10" })), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u521B\u5EFA\u65F6\u95F4"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "font-medium" }, formatDate(new Date(event.createdAt)), " ", formatTime(new Date(event.createdAt))))), event.updatedAt && event.updatedAt !== event.createdAt && /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-3" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-5 h-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" })), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u6700\u540E\u4FEE\u6539"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "font-medium" }, formatDate(new Date(event.updatedAt)), " ", formatTime(new Date(event.updatedAt)))))))), event.description && /* @__PURE__ */ React2__default.default.createElement("div", { className: "mt-6 pt-6 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900 mb-3" }, "\u63CF\u8FF0"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "prose max-w-none" }, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-gray-700 whitespace-pre-wrap" }, event.description)))))), /* @__PURE__ */ React2__default.default.createElement(
|
|
3846
3781
|
EventModal_default,
|
|
3847
3782
|
{
|
|
3848
3783
|
isOpen: isEditModalOpen,
|
|
@@ -3850,8 +3785,8 @@ var EventDetailPage = ({
|
|
|
3850
3785
|
onSave: handleEditSave,
|
|
3851
3786
|
event
|
|
3852
3787
|
}
|
|
3853
|
-
), /* @__PURE__ */
|
|
3854
|
-
ConfirmModal,
|
|
3788
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
3789
|
+
chunkG6WRJ2H2_js.ConfirmModal,
|
|
3855
3790
|
{
|
|
3856
3791
|
isOpen: showDeleteConfirm,
|
|
3857
3792
|
onClose: () => setShowDeleteConfirm(false),
|
|
@@ -3872,7 +3807,7 @@ function EventForm({
|
|
|
3872
3807
|
onCancel,
|
|
3873
3808
|
loading = false
|
|
3874
3809
|
}) {
|
|
3875
|
-
const [formData, setFormData] =
|
|
3810
|
+
const [formData, setFormData] = React2.useState({
|
|
3876
3811
|
title: "",
|
|
3877
3812
|
description: "",
|
|
3878
3813
|
startTime: /* @__PURE__ */ new Date(),
|
|
@@ -3885,8 +3820,8 @@ function EventForm({
|
|
|
3885
3820
|
recurrence: void 0,
|
|
3886
3821
|
reminders: []
|
|
3887
3822
|
});
|
|
3888
|
-
const [errors, setErrors] =
|
|
3889
|
-
|
|
3823
|
+
const [errors, setErrors] = React2.useState({});
|
|
3824
|
+
React2.useEffect(() => {
|
|
3890
3825
|
if (initialData) {
|
|
3891
3826
|
setFormData((prev) => ({
|
|
3892
3827
|
...prev,
|
|
@@ -3947,14 +3882,14 @@ function EventForm({
|
|
|
3947
3882
|
{ value: "#6366F1" /* INDIGO */, label: "\u975B\u84DD", class: "bg-indigo-500" },
|
|
3948
3883
|
{ value: "#6B7280" /* GRAY */, label: "\u7070\u8272", class: "bg-gray-500" }
|
|
3949
3884
|
];
|
|
3950
|
-
return /* @__PURE__ */
|
|
3885
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 max-w-2xl mx-auto" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ React2__default.default.createElement("h2", { className: "text-xl font-semibold text-gray-900" }, isEdit ? "\u7F16\u8F91\u4E8B\u4EF6" : "\u521B\u5EFA\u4E8B\u4EF6"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3951
3886
|
"button",
|
|
3952
3887
|
{
|
|
3953
3888
|
onClick: onCancel,
|
|
3954
3889
|
className: "text-gray-400 hover:text-gray-600 transition-colors"
|
|
3955
3890
|
},
|
|
3956
|
-
/* @__PURE__ */
|
|
3957
|
-
)), /* @__PURE__ */
|
|
3891
|
+
/* @__PURE__ */ React2__default.default.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
|
|
3892
|
+
)), /* @__PURE__ */ React2__default.default.createElement("form", { onSubmit: handleSubmit, className: "space-y-6" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u57FA\u672C\u4FE1\u606F"), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "title", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u4E8B\u4EF6\u6807\u9898 *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3958
3893
|
"input",
|
|
3959
3894
|
{
|
|
3960
3895
|
type: "text",
|
|
@@ -3964,7 +3899,7 @@ function EventForm({
|
|
|
3964
3899
|
className: `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"}`,
|
|
3965
3900
|
placeholder: "\u8BF7\u8F93\u5165\u4E8B\u4EF6\u6807\u9898"
|
|
3966
3901
|
}
|
|
3967
|
-
), errors.title && /* @__PURE__ */
|
|
3902
|
+
), 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(
|
|
3968
3903
|
"textarea",
|
|
3969
3904
|
{
|
|
3970
3905
|
id: "description",
|
|
@@ -3974,7 +3909,7 @@ function EventForm({
|
|
|
3974
3909
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",
|
|
3975
3910
|
placeholder: "\u8BF7\u8F93\u5165\u4E8B\u4EF6\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09"
|
|
3976
3911
|
}
|
|
3977
|
-
)), /* @__PURE__ */
|
|
3912
|
+
)), /* @__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" }, "\u5730\u70B9"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3978
3913
|
"input",
|
|
3979
3914
|
{
|
|
3980
3915
|
type: "text",
|
|
@@ -3984,7 +3919,7 @@ function EventForm({
|
|
|
3984
3919
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",
|
|
3985
3920
|
placeholder: "\u8BF7\u8F93\u5165\u4E8B\u4EF6\u5730\u70B9\uFF08\u53EF\u9009\uFF09"
|
|
3986
3921
|
}
|
|
3987
|
-
))), /* @__PURE__ */
|
|
3922
|
+
))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u65F6\u95F4\u8BBE\u7F6E"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
3988
3923
|
"input",
|
|
3989
3924
|
{
|
|
3990
3925
|
type: "checkbox",
|
|
@@ -3993,7 +3928,7 @@ function EventForm({
|
|
|
3993
3928
|
onChange: (e) => handleInputChange("allDay", e.target.checked),
|
|
3994
3929
|
className: "h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded"
|
|
3995
3930
|
}
|
|
3996
|
-
), /* @__PURE__ */
|
|
3931
|
+
), /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "allDay", className: "ml-2 text-sm text-gray-700" }, "\u5168\u5929\u4E8B\u4EF6")), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { htmlFor: "startTime", className: "block text-sm font-medium text-gray-700 mb-1" }, "\u5F00\u59CB\u65F6\u95F4 *"), /* @__PURE__ */ React2__default.default.createElement(
|
|
3997
3932
|
"input",
|
|
3998
3933
|
{
|
|
3999
3934
|
type: formData.allDay ? "date" : "datetime-local",
|
|
@@ -4005,7 +3940,7 @@ function EventForm({
|
|
|
4005
3940
|
},
|
|
4006
3941
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
4007
3942
|
}
|
|
4008
|
-
)), /* @__PURE__ */
|
|
3943
|
+
)), /* @__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(
|
|
4009
3944
|
"input",
|
|
4010
3945
|
{
|
|
4011
3946
|
type: formData.allDay ? "date" : "datetime-local",
|
|
@@ -4017,7 +3952,7 @@ function EventForm({
|
|
|
4017
3952
|
},
|
|
4018
3953
|
className: `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"}`
|
|
4019
3954
|
}
|
|
4020
|
-
), errors.endTime && /* @__PURE__ */
|
|
3955
|
+
), 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(
|
|
4021
3956
|
"button",
|
|
4022
3957
|
{
|
|
4023
3958
|
key: option.value,
|
|
@@ -4028,9 +3963,9 @@ function EventForm({
|
|
|
4028
3963
|
${formData.color === option.value ? "border-blue-500 ring-2 ring-blue-200" : "border-gray-200 hover:border-gray-300"}
|
|
4029
3964
|
`
|
|
4030
3965
|
},
|
|
4031
|
-
/* @__PURE__ */
|
|
4032
|
-
/* @__PURE__ */
|
|
4033
|
-
))))), /* @__PURE__ */
|
|
3966
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: `w-4 h-4 rounded-full ${option.class} mr-2` }),
|
|
3967
|
+
/* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm text-gray-700" }, option.label)
|
|
3968
|
+
))))), /* @__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(
|
|
4034
3969
|
"button",
|
|
4035
3970
|
{
|
|
4036
3971
|
type: "button",
|
|
@@ -4038,7 +3973,7 @@ function EventForm({
|
|
|
4038
3973
|
className: "px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors"
|
|
4039
3974
|
},
|
|
4040
3975
|
"\u53D6\u6D88"
|
|
4041
|
-
), /* @__PURE__ */
|
|
3976
|
+
), /* @__PURE__ */ React2__default.default.createElement(
|
|
4042
3977
|
"button",
|
|
4043
3978
|
{
|
|
4044
3979
|
type: "submit",
|
|
@@ -4053,8 +3988,8 @@ var EventSearch = ({
|
|
|
4053
3988
|
onFiltered,
|
|
4054
3989
|
className = ""
|
|
4055
3990
|
}) => {
|
|
4056
|
-
const [isExpanded, setIsExpanded] =
|
|
4057
|
-
const [filters, setFilters] =
|
|
3991
|
+
const [isExpanded, setIsExpanded] = React2.useState(false);
|
|
3992
|
+
const [filters, setFilters] = React2.useState({
|
|
4058
3993
|
keyword: "",
|
|
4059
3994
|
priority: "all",
|
|
4060
3995
|
dateRange: {
|
|
@@ -4064,14 +3999,14 @@ var EventSearch = ({
|
|
|
4064
3999
|
colorFilter: [],
|
|
4065
4000
|
isAllDay: "all"
|
|
4066
4001
|
});
|
|
4067
|
-
const availableColors =
|
|
4002
|
+
const availableColors = React2.useMemo(() => {
|
|
4068
4003
|
const colors = /* @__PURE__ */ new Set();
|
|
4069
4004
|
events.forEach((event) => {
|
|
4070
4005
|
if (event.color) colors.add(event.color);
|
|
4071
4006
|
});
|
|
4072
4007
|
return Array.from(colors);
|
|
4073
4008
|
}, [events]);
|
|
4074
|
-
const filteredEvents =
|
|
4009
|
+
const filteredEvents = React2.useMemo(() => {
|
|
4075
4010
|
return events.filter((event) => {
|
|
4076
4011
|
if (filters.keyword) {
|
|
4077
4012
|
const keyword = filters.keyword.toLowerCase();
|
|
@@ -4108,16 +4043,16 @@ var EventSearch = ({
|
|
|
4108
4043
|
return true;
|
|
4109
4044
|
});
|
|
4110
4045
|
}, [events, filters]);
|
|
4111
|
-
|
|
4046
|
+
React2__default.default.useEffect(() => {
|
|
4112
4047
|
onFiltered(filteredEvents);
|
|
4113
4048
|
}, [filteredEvents, onFiltered]);
|
|
4114
|
-
const handleFilterChange =
|
|
4049
|
+
const handleFilterChange = React2.useCallback((key, value) => {
|
|
4115
4050
|
setFilters((prev) => ({
|
|
4116
4051
|
...prev,
|
|
4117
4052
|
[key]: value
|
|
4118
4053
|
}));
|
|
4119
4054
|
}, []);
|
|
4120
|
-
const resetFilters =
|
|
4055
|
+
const resetFilters = React2.useCallback(() => {
|
|
4121
4056
|
setFilters({
|
|
4122
4057
|
keyword: "",
|
|
4123
4058
|
priority: "all",
|
|
@@ -4126,7 +4061,7 @@ var EventSearch = ({
|
|
|
4126
4061
|
isAllDay: "all"
|
|
4127
4062
|
});
|
|
4128
4063
|
}, []);
|
|
4129
|
-
const hasActiveFilters =
|
|
4064
|
+
const hasActiveFilters = React2.useMemo(() => {
|
|
4130
4065
|
return filters.keyword !== "" || filters.priority !== "all" || filters.dateRange.start !== "" || filters.dateRange.end !== "" || filters.colorFilter.length > 0 || filters.isAllDay !== "all";
|
|
4131
4066
|
}, [filters]);
|
|
4132
4067
|
const getPriorityText = (priority) => {
|
|
@@ -4138,7 +4073,7 @@ var EventSearch = ({
|
|
|
4138
4073
|
};
|
|
4139
4074
|
return priorityMap[priority];
|
|
4140
4075
|
};
|
|
4141
|
-
return /* @__PURE__ */
|
|
4076
|
+
return /* @__PURE__ */ React2__default.default.createElement("div", { className: `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(
|
|
4142
4077
|
"input",
|
|
4143
4078
|
{
|
|
4144
4079
|
type: "text",
|
|
@@ -4147,14 +4082,14 @@ var EventSearch = ({
|
|
|
4147
4082
|
onChange: (e) => handleFilterChange("keyword", e.target.value),
|
|
4148
4083
|
className: "w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none"
|
|
4149
4084
|
}
|
|
4150
|
-
), /* @__PURE__ */
|
|
4085
|
+
), /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none" }, /* @__PURE__ */ React2__default.default.createElement("svg", { className: "h-5 w-5 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }))))), /* @__PURE__ */ React2__default.default.createElement(
|
|
4151
4086
|
"button",
|
|
4152
4087
|
{
|
|
4153
4088
|
type: "button",
|
|
4154
4089
|
onClick: () => setIsExpanded(!isExpanded),
|
|
4155
4090
|
className: `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"}`
|
|
4156
4091
|
},
|
|
4157
|
-
/* @__PURE__ */
|
|
4092
|
+
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
4158
4093
|
"svg",
|
|
4159
4094
|
{
|
|
4160
4095
|
className: `h-4 w-4 transition-transform ${isExpanded ? "rotate-180" : ""}`,
|
|
@@ -4162,11 +4097,11 @@ var EventSearch = ({
|
|
|
4162
4097
|
stroke: "currentColor",
|
|
4163
4098
|
viewBox: "0 0 24 24"
|
|
4164
4099
|
},
|
|
4165
|
-
/* @__PURE__ */
|
|
4166
|
-
), /* @__PURE__ */
|
|
4100
|
+
/* @__PURE__ */ React2__default.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" })
|
|
4101
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u8FC7\u6EE4\u5668"), hasActiveFilters && /* @__PURE__ */ React2__default.default.createElement("span", { className: "inline-flex items-center justify-center w-5 h-5 text-xs font-bold text-white bg-blue-600 rounded-full" }, Object.values(filters).filter(
|
|
4167
4102
|
(v) => v !== "" && v !== "all" && (Array.isArray(v) ? v.length > 0 : true) && (typeof v === "object" && !Array.isArray(v) ? v.start !== "" || v.end !== "" : true)
|
|
4168
4103
|
).length))
|
|
4169
|
-
), hasActiveFilters && /* @__PURE__ */
|
|
4104
|
+
), hasActiveFilters && /* @__PURE__ */ React2__default.default.createElement(
|
|
4170
4105
|
"button",
|
|
4171
4106
|
{
|
|
4172
4107
|
type: "button",
|
|
@@ -4174,29 +4109,29 @@ var EventSearch = ({
|
|
|
4174
4109
|
className: "px-3 py-2 text-sm font-medium text-red-600 bg-red-50 border border-red-300 rounded-lg hover:bg-red-100 transition-colors"
|
|
4175
4110
|
},
|
|
4176
4111
|
"\u91CD\u7F6E"
|
|
4177
|
-
)), /* @__PURE__ */
|
|
4112
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", { className: "mt-3 text-sm text-gray-600" }, "\u5171\u627E\u5230 ", /* @__PURE__ */ React2__default.default.createElement("span", { className: "font-medium text-gray-900" }, filteredEvents.length), " \u4E2A\u4E8B\u4EF6", filteredEvents.length !== events.length && /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-gray-500" }, "\uFF08\u5171 ", events.length, " \u4E2A\uFF09"))), isExpanded && /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-4 bg-gray-50 border-t border-gray-200" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u4F18\u5148\u7EA7"), /* @__PURE__ */ React2__default.default.createElement(
|
|
4178
4113
|
"select",
|
|
4179
4114
|
{
|
|
4180
4115
|
value: filters.priority,
|
|
4181
4116
|
onChange: (e) => handleFilterChange("priority", e.target.value),
|
|
4182
4117
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none"
|
|
4183
4118
|
},
|
|
4184
|
-
/* @__PURE__ */
|
|
4185
|
-
/* @__PURE__ */
|
|
4186
|
-
/* @__PURE__ */
|
|
4187
|
-
/* @__PURE__ */
|
|
4188
|
-
/* @__PURE__ */
|
|
4189
|
-
)), /* @__PURE__ */
|
|
4119
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "all" }, "\u5168\u90E8\u4F18\u5148\u7EA7"),
|
|
4120
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "low" /* LOW */ }, getPriorityText("low" /* LOW */)),
|
|
4121
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "normal" /* NORMAL */ }, getPriorityText("normal" /* NORMAL */)),
|
|
4122
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "high" /* HIGH */ }, getPriorityText("high" /* HIGH */)),
|
|
4123
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "urgent" /* URGENT */ }, getPriorityText("urgent" /* URGENT */))
|
|
4124
|
+
)), /* @__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\u7C7B\u578B"), /* @__PURE__ */ React2__default.default.createElement(
|
|
4190
4125
|
"select",
|
|
4191
4126
|
{
|
|
4192
4127
|
value: filters.isAllDay,
|
|
4193
4128
|
onChange: (e) => handleFilterChange("isAllDay", e.target.value),
|
|
4194
4129
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none"
|
|
4195
4130
|
},
|
|
4196
|
-
/* @__PURE__ */
|
|
4197
|
-
/* @__PURE__ */
|
|
4198
|
-
/* @__PURE__ */
|
|
4199
|
-
)), /* @__PURE__ */
|
|
4131
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "all" }, "\u5168\u90E8\u7C7B\u578B"),
|
|
4132
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "yes" }, "\u5168\u5929\u4E8B\u4EF6"),
|
|
4133
|
+
/* @__PURE__ */ React2__default.default.createElement("option", { value: "no" }, "\u5B9A\u65F6\u4E8B\u4EF6")
|
|
4134
|
+
)), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u989C\u8272\u6807\u7B7E"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, availableColors.map((color) => /* @__PURE__ */ React2__default.default.createElement(
|
|
4200
4135
|
"button",
|
|
4201
4136
|
{
|
|
4202
4137
|
key: color,
|
|
@@ -4209,7 +4144,7 @@ var EventSearch = ({
|
|
|
4209
4144
|
style: { backgroundColor: color },
|
|
4210
4145
|
title: `\u989C\u8272: ${color}`
|
|
4211
4146
|
}
|
|
4212
|
-
)))), /* @__PURE__ */
|
|
4147
|
+
)))), /* @__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(
|
|
4213
4148
|
"input",
|
|
4214
4149
|
{
|
|
4215
4150
|
type: "date",
|
|
@@ -4220,7 +4155,7 @@ var EventSearch = ({
|
|
|
4220
4155
|
}),
|
|
4221
4156
|
className: "px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none"
|
|
4222
4157
|
}
|
|
4223
|
-
), /* @__PURE__ */
|
|
4158
|
+
), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-gray-500" }, "\u81F3"), /* @__PURE__ */ React2__default.default.createElement(
|
|
4224
4159
|
"input",
|
|
4225
4160
|
{
|
|
4226
4161
|
type: "date",
|
|
@@ -4235,13 +4170,13 @@ var EventSearch = ({
|
|
|
4235
4170
|
};
|
|
4236
4171
|
var EventSearch_default = EventSearch;
|
|
4237
4172
|
function useEvents2() {
|
|
4238
|
-
const [events, setEvents] =
|
|
4239
|
-
const [loading, setLoading] =
|
|
4240
|
-
const [error, setError] =
|
|
4241
|
-
const clearError =
|
|
4173
|
+
const [events, setEvents] = React2.useState([]);
|
|
4174
|
+
const [loading, setLoading] = React2.useState(false);
|
|
4175
|
+
const [error, setError] = React2.useState();
|
|
4176
|
+
const clearError = React2.useCallback(() => {
|
|
4242
4177
|
setError(void 0);
|
|
4243
4178
|
}, []);
|
|
4244
|
-
const fetchEvents =
|
|
4179
|
+
const fetchEvents = React2.useCallback(async (startDate, endDate) => {
|
|
4245
4180
|
setLoading(true);
|
|
4246
4181
|
setError(void 0);
|
|
4247
4182
|
try {
|
|
@@ -4272,7 +4207,7 @@ function useEvents2() {
|
|
|
4272
4207
|
setLoading(false);
|
|
4273
4208
|
}
|
|
4274
4209
|
}, []);
|
|
4275
|
-
const createEvent =
|
|
4210
|
+
const createEvent = React2.useCallback(async (eventData) => {
|
|
4276
4211
|
setLoading(true);
|
|
4277
4212
|
setError(void 0);
|
|
4278
4213
|
try {
|
|
@@ -4324,7 +4259,7 @@ function useEvents2() {
|
|
|
4324
4259
|
setLoading(false);
|
|
4325
4260
|
}
|
|
4326
4261
|
}, []);
|
|
4327
|
-
const updateEvent =
|
|
4262
|
+
const updateEvent = React2.useCallback(async (eventId, eventData) => {
|
|
4328
4263
|
setLoading(true);
|
|
4329
4264
|
setError(void 0);
|
|
4330
4265
|
try {
|
|
@@ -4370,7 +4305,7 @@ function useEvents2() {
|
|
|
4370
4305
|
setLoading(false);
|
|
4371
4306
|
}
|
|
4372
4307
|
}, []);
|
|
4373
|
-
const deleteEvent =
|
|
4308
|
+
const deleteEvent = React2.useCallback(async (eventId, deleteAll = false) => {
|
|
4374
4309
|
setLoading(true);
|
|
4375
4310
|
setError(void 0);
|
|
4376
4311
|
try {
|
|
@@ -4395,7 +4330,7 @@ function useEvents2() {
|
|
|
4395
4330
|
setLoading(false);
|
|
4396
4331
|
}
|
|
4397
4332
|
}, []);
|
|
4398
|
-
const batchDeleteEvents =
|
|
4333
|
+
const batchDeleteEvents = React2.useCallback(async (eventIds) => {
|
|
4399
4334
|
setLoading(true);
|
|
4400
4335
|
setError(void 0);
|
|
4401
4336
|
try {
|