+
{title}
+
+ {field => (
+
+ 活动类型
+
+
+
+ )}
+
+ )}
+
+ {/* enable_kyc — create mode only */}
+ {mode === 'create' && (
+
+ {field => (
+
+ 启用实名认证
+ field.handleChange(val)}
+ />
+
+ )}
+
+ )}
+
+
+ {field => (
+
+ 名称 *
+ field.handleChange(e.target.value)}
+ />
+
+
+ )}
+
+
+
+ {field => (
+
+ 副标题
+ field.handleChange(e.target.value)}
+ />
+
+
+ )}
+
+
+
+ {field => (
+
+ 封面图片链接
+ field.handleChange(e.target.value)}
+ />
+
+
+ )}
+
+
+
+ {field => (
+
+ 开始时间 *
+ field.handleChange(e.target.value)}
+ />
+
+
+ )}
+
+
+
+ {field => (
+
+ 结束时间 *
+ field.handleChange(e.target.value)}
+ />
+
+
+ )}
+
+
+
+ {field => (
+
+ 活动介绍 (Markdown)
+
+ )}
+
+
+
+ {field => (
+
+ 参会指南 (Markdown)
+
+ )}
+
+
+ {/* is_agenda_published — edit mode only */}
+ {mode === 'edit' && (
+
+ {(field) => {
+ const isAlreadyPublished = field.state.value;
+ const blockError = !isAlreadyPublished && isAgendaPublishBlocked
+ ? isAgendaPublishBlocked.pendingCount > 0
+ ? `还有 ${isAgendaPublishBlocked.pendingCount} 个议程待审核`
+ : isAgendaPublishBlocked.unscheduledCount > 0
+ ? `还有 ${isAgendaPublishBlocked.unscheduledCount} 个已通过议程未排期`
+ : null
+ : null;
+
+ return (
+
+ 发布议程日程
+
+ {
+ if (val && isAgendaPublishBlocked && (isAgendaPublishBlocked.pendingCount > 0 || isAgendaPublishBlocked.unscheduledCount > 0)) {
+ return;
+ }
+ field.handleChange(val);
+ }}
+ />
+ {blockError !== null && (
+ {blockError}
+ )}
+ {isAlreadyPublished && (
+ 已发布,不可撤销
+ )}
+
+
+ );
+ }}
+
+ )}
+
+
+
[state.canSubmit, state.isSubmitting]}
+ children={([canSubmit, isSubmitting]) => (
+
+ )}
+ />
+
+
+
+ );
+}
diff --git a/src/stories/admin/events/event-admin-form.stories.tsx b/src/stories/admin/events/event-admin-form.stories.tsx
new file mode 100644
index 0000000..560c9bd
--- /dev/null
+++ b/src/stories/admin/events/event-admin-form.stories.tsx
@@ -0,0 +1,53 @@
+import type { Meta, StoryObj } from '@storybook/react-vite';
+import { EventAdminFormSkeleton } from '@/components/admin/events/event-admin-form.skeleton';
+import { EventAdminFormView } from '@/components/admin/events/event-admin-form.view';
+import { PERMISSION_LEVELS } from '@/lib/permissions';
+
+const meta = {
+ title: 'Admin/Events/EventAdminForm',
+ component: EventAdminFormView,
+} satisfies Meta