blob: 8e17a9ee33d72b6bb0f39f68344a0289c8a1176c [file] [log] [blame]
ybtda5978b2025-05-31 15:58:05 +08001import React, { useState } from "react";
2import {
3 Typography,
4 Tabs,
5 Form,
6 Input,
7 Upload,
8 Button,
9 Select,
10 DatePicker,
11 InputNumber,
12 Radio,
13 Checkbox,
14 Collapse,
15 Alert,
16 Divider,
17 Space,
18 message,
19} from "antd";
20import {
21 UploadOutlined,
22 InboxOutlined,
23 InfoCircleOutlined,
24} from "@ant-design/icons";
25
26const { Title, Paragraph, Text } = Typography;
27const { TabPane } = Tabs;
28const { Option } = Select;
29const { TextArea } = Input;
30const { Panel } = Collapse;
31const { Dragger } = Upload;
32
33// 通用的上传组件配置
34const uploadProps = {
35 name: "torrent",
36 multiple: false,
37 action: "/api/upload-torrent",
38 accept: ".torrent",
39 maxCount: 1,
40 onChange(info) {
41 const { status } = info.file;
42 if (status === "done") {
43 message.success(`${info.file.name} 文件上传成功`);
44 } else if (status === "error") {
45 message.error(`${info.file.name} 文件上传失败`);
46 }
47 },
48 beforeUpload(file) {
49 const isTorrent = file.type === "application/x-bittorrent" || file.name.endsWith(".torrent");
50 if (!isTorrent) {
51 message.error("您只能上传 .torrent 文件!");
52 }
53 return isTorrent || Upload.LIST_IGNORE;
54 },
55};
56
57// 注意事项内容
58const NoticeContent = () => (
59 <div className="space-y-4">
60 <Alert
61 message="请仔细阅读以下注意事项"
62 description="上传种子前,请确保您了解并同意以下规则,否则您的种子可能会被删除或您的账号可能会被处罚。"
63 type="info"
64 showIcon
65 />
66
67 <Collapse defaultActiveKey={["1"]}>
68 <Panel header="一般规则" key="1">
69 <ul className="list-disc pl-8 space-y-2">
70 <li>您上传的资源必须是合法的,不得上传侵犯版权的内容。</li>
71 <li>禁止上传含有恶意代码的文件,所有上传内容会经过安全检查。</li>
72 <li>资源标题必须清晰描述内容,不得使用误导性标题。</li>
73 <li>请确保您提供的信息准确完整,包括分类、标签、简介等。</li>
74 <li>如发现重复资源,管理员有权合并或删除。</li>
75 <li>新用户需要达到一定等级后才能上传资源,具体请参考用户等级规则。</li>
76 </ul>
77 </Panel>
78 <Panel header="做种要求" key="2">
79 <ul className="list-disc pl-8 space-y-2">
80 <li>上传者必须保证做种至少 7 天,或直到至少有 3 个其他用户完成下载。</li>
81 <li>对于大型资源({'>'}20GB),请确保您有足够的上传带宽。</li>
82 <li>对于稀有资源,请尽可能长期做种,这将获得额外的积分奖励。</li>
83 <li>故意停止做种可能导致警告或账号处罚。</li>
84 </ul>
85 </Panel>
86 <Panel header="奖励政策" key="3">
87 <ul className="list-disc pl-8 space-y-2">
88 <li>首发资源将获得额外的积分奖励。</li>
89 <li>高质量的资源(高分辨率、完整音轨等)将获得质量加成。</li>
90 <li>稀有、珍贵的资源会获得特殊奖励。</li>
91 <li>长期保持良好的做种习惯将提高您的用户级别。</li>
92 </ul>
93 </Panel>
94 </Collapse>
95 </div>
96);
97
98// 通用版规组件
99const CategoryRules = ({ category }) => {
100 const rules = {
101 movie: "电影资源上传规则...",
102 tv: "剧集资源上传规则...",
103 music: "音乐资源上传规则...",
104 anime: "动漫资源上传规则...",
105 game: "游戏资源上传规则...",
106 variety: "综艺资源上传规则...",
107 sports: "体育资源上传规则...",
108 software: "软件资源上传规则...",
109 learning: "学习资源上传规则...",
110 documentary: "纪录片资源上传规则...",
111 other: "其他资源上传规则...",
112 };
113
114 return (
115 <Collapse className="mb-6">
116 <Panel header={`${category}资源版规`} key="1">
117 <Paragraph>{rules[category] || "暂无特定规则"}</Paragraph>
118 </Panel>
119 </Collapse>
120 );
121};
122
123// 基础表单组件
124const BaseFormItems = ({ category }) => (
125 <>
126 <Form.Item
127 name="torrentFile"
128 label="种子文件"
129 rules={[{ required: true, message: "请上传种子文件" }]}
130 >
131 <Dragger {...uploadProps}>
132 <p className="ant-upload-drag-icon">
133 <InboxOutlined />
134 </p>
135 <p className="ant-upload-text">点击或拖拽种子文件到此区域上传</p>
136 <p className="ant-upload-hint">
137 支持单个.torrent文件上传,请确保种子文件有效
138 </p>
139 </Dragger>
140 </Form.Item>
141
142 <Form.Item
143 name="title"
144 label="标题"
145 rules={[{ required: true, message: "请输入资源标题" }]}
146 >
147 <Input placeholder="请输入完整、准确的资源标题" />
148 </Form.Item>
149
150 <Form.Item
151 name="chineseName"
152 label="中文名"
153 rules={[{ required: true, message: "请输入资源中文名" }]}
154 >
155 <Input placeholder="请输入资源中文名称" />
156 </Form.Item>
157
158 <Form.Item
159 name="englishName"
160 label="英文名/原名"
161 >
162 <Input placeholder="请输入资源英文名称或原名" />
163 </Form.Item>
164
165 <Form.Item
166 name="year"
167 label="年份"
168 rules={[{ required: true, message: "请选择年份" }]}
169 >
170 <DatePicker picker="year" placeholder="选择年份" />
171 </Form.Item>
172
173 <Form.Item
174 name="region"
175 label="地区"
176 rules={[{ required: true, message: "请选择地区" }]}
177 >
178 <Select placeholder="请选择地区">
179 <Option value="china">中国大陆</Option>
180 <Option value="hongkong">中国香港</Option>
181 <Option value="taiwan">中国台湾</Option>
182 <Option value="japan">日本</Option>
183 <Option value="korea">韩国</Option>
184 <Option value="usa">美国</Option>
185 <Option value="uk">英国</Option>
186 <Option value="france">法国</Option>
187 <Option value="germany">德国</Option>
188 <Option value="italy">意大利</Option>
189 <Option value="spain">西班牙</Option>
190 <Option value="other">其他</Option>
191 </Select>
192 </Form.Item>
193
194 <Form.Item
195 name="language"
196 label="语言"
197 rules={[{ required: true, message: "请选择语言" }]}
198 >
199 <Select placeholder="请选择语言" mode="multiple">
200 <Option value="chinese">中文</Option>
201 <Option value="english">英语</Option>
202 <Option value="japanese">日语</Option>
203 <Option value="korean">韩语</Option>
204 <Option value="french">法语</Option>
205 <Option value="german">德语</Option>
206 <Option value="italian">意大利语</Option>
207 <Option value="spanish">西班牙语</Option>
208 <Option value="russian">俄语</Option>
209 <Option value="other">其他</Option>
210 </Select>
211 </Form.Item>
212
213 <Form.Item
214 name="hasSubtitle"
215 valuePropName="checked"
216 >
217 <Checkbox>包含中文字幕</Checkbox>
218 </Form.Item>
219
220 <Form.Item
221 name="description"
222 label="资源简介"
223 rules={[{ required: true, message: "请输入资源简介" }]}
224 >
225 <TextArea rows={6} placeholder="请详细描述资源内容、特点等信息" />
226 </Form.Item>
227
228 <Form.Item
229 name="mediaInfo"
230 label="MediaInfo"
231 >
232 <TextArea rows={4} placeholder="请粘贴MediaInfo信息(如有)" />
233 </Form.Item>
234
235 <Form.Item
236 name="screenshots"
237 label="截图"
238 >
239 <Upload
240 listType="picture-card"
241 action="/api/upload-screenshot"
242 accept=".jpg,.jpeg,.png,.webp"
243 multiple
244 >
245 <div>
246 <UploadOutlined />
247 <div style={{ marginTop: 8 }}>上传截图</div>
248 </div>
249 </Upload>
250 </Form.Item>
251 </>
252);
253
254// 电影特定表单项
255const MovieFormItems = () => (
256 <>
257 <Form.Item
258 name="director"
259 label="导演"
260 >
261 <Input placeholder="请输入导演名称,多个导演请用逗号分隔" />
262 </Form.Item>
263
264 <Form.Item
265 name="actors"
266 label="主演"
267 >
268 <Input placeholder="请输入主演名称,多个主演请用逗号分隔" />
269 </Form.Item>
270
271 <Form.Item
272 name="movieType"
273 label="电影类型"
274 rules={[{ required: true, message: "请选择电影类型" }]}
275 >
276 <Select placeholder="请选择电影类型" mode="multiple">
277 <Option value="action">动作</Option>
278 <Option value="comedy">喜剧</Option>
279 <Option value="romance">爱情</Option>
280 <Option value="sci-fi">科幻</Option>
281 <Option value="horror">恐怖</Option>
282 <Option value="drama">剧情</Option>
283 <Option value="war">战争</Option>
284 <Option value="documentary">纪录</Option>
285 <Option value="animation">动画</Option>
286 <Option value="thriller">惊悚</Option>
287 <Option value="crime">犯罪</Option>
288 <Option value="fantasy">奇幻</Option>
289 <Option value="adventure">冒险</Option>
290 <Option value="history">历史</Option>
291 <Option value="other">其他</Option>
292 </Select>
293 </Form.Item>
294
295 <Form.Item
296 name="resolution"
297 label="分辨率"
298 rules={[{ required: true, message: "请选择分辨率" }]}
299 >
300 <Select placeholder="请选择分辨率">
301 <Option value="4K">4K</Option>
302 <Option value="2K">2K</Option>
303 <Option value="1080p">1080p</Option>
304 <Option value="720p">720p</Option>
305 <Option value="480p">480p</Option>
306 <Option value="other">其他</Option>
307 </Select>
308 </Form.Item>
309
310 <Form.Item
311 name="source"
312 label="片源"
313 rules={[{ required: true, message: "请选择片源" }]}
314 >
315 <Select placeholder="请选择片源">
316 <Option value="bluray">蓝光原盘</Option>
317 <Option value="remux">蓝光重灌</Option>
318 <Option value="encode">压制</Option>
319 <Option value="web-dl">WEB-DL</Option>
320 <Option value="dvd">DVD</Option>
321 <Option value="hdtv">HDTV</Option>
322 <Option value="other">其他</Option>
323 </Select>
324 </Form.Item>
325
326 <Form.Item
327 name="duration"
328 label="片长(分钟)"
329 >
330 <InputNumber min={1} placeholder="请输入片长" />
331 </Form.Item>
332
333 <Form.Item
334 name="imdbId"
335 label="IMDb ID"
336 >
337 <Input placeholder="例如:tt0111161" />
338 </Form.Item>
339
340 <Form.Item
341 name="doubanId"
342 label="豆瓣ID"
343 >
344 <Input placeholder="例如:1292052" />
345 </Form.Item>
346 </>
347);
348
349// 剧集特定表单项
350const TVFormItems = () => (
351 <>
352 <Form.Item
353 name="season"
354 label="季数"
355 >
356 <InputNumber min={1} placeholder="第几季" />
357 </Form.Item>
358
359 <Form.Item
360 name="episode"
361 label="集数"
362 >
363 <Input placeholder="例如:1-12、全集、SP" />
364 </Form.Item>
365
366 <Form.Item
367 name="isComplete"
368 valuePropName="checked"
369 >
370 <Checkbox>已完结</Checkbox>
371 </Form.Item>
372
373 <Form.Item
374 name="director"
375 label="导演"
376 >
377 <Input placeholder="请输入导演名称,多个导演请用逗号分隔" />
378 </Form.Item>
379
380 <Form.Item
381 name="actors"
382 label="主演"
383 >
384 <Input placeholder="请输入主演名称,多个主演请用逗号分隔" />
385 </Form.Item>
386
387 <Form.Item
388 name="tvType"
389 label="剧集类型"
390 rules={[{ required: true, message: "请选择剧集类型" }]}
391 >
392 <Select placeholder="请选择剧集类型" mode="multiple">
393 <Option value="action">动作</Option>
394 <Option value="comedy">喜剧</Option>
395 <Option value="romance">爱情</Option>
396 <Option value="sci-fi">科幻</Option>
397 <Option value="horror">恐怖</Option>
398 <Option value="drama">剧情</Option>
399 <Option value="crime">犯罪</Option>
400 <Option value="fantasy">奇幻</Option>
401 <Option value="adventure">冒险</Option>
402 <Option value="mystery">悬疑</Option>
403 <Option value="thriller">惊悚</Option>
404 <Option value="other">其他</Option>
405 </Select>
406 </Form.Item>
407
408 <Form.Item
409 name="resolution"
410 label="分辨率"
411 rules={[{ required: true, message: "请选择分辨率" }]}
412 >
413 <Select placeholder="请选择分辨率">
414 <Option value="4K">4K</Option>
415 <Option value="2K">2K</Option>
416 <Option value="1080p">1080p</Option>
417 <Option value="720p">720p</Option>
418 <Option value="480p">480p</Option>
419 <Option value="other">其他</Option>
420 </Select>
421 </Form.Item>
422
423 <Form.Item
424 name="source"
425 label="片源"
426 rules={[{ required: true, message: "请选择片源" }]}
427 >
428 <Select placeholder="请选择片源">
429 <Option value="bluray">蓝光原盘</Option>
430 <Option value="remux">蓝光重灌</Option>
431 <Option value="encode">压制</Option>
432 <Option value="web-dl">WEB-DL</Option>
433 <Option value="dvd">DVD</Option>
434 <Option value="hdtv">HDTV</Option>
435 <Option value="other">其他</Option>
436 </Select>
437 </Form.Item>
438
439 <Form.Item
440 name="imdbId"
441 label="IMDb ID"
442 >
443 <Input placeholder="例如:tt0111161" />
444 </Form.Item>
445
446 <Form.Item
447 name="doubanId"
448 label="豆瓣ID"
449 >
450 <Input placeholder="例如:1292052" />
451 </Form.Item>
452 </>
453);
454
455// 音乐特定表单项
456const MusicFormItems = () => (
457 <>
458 <Form.Item
459 name="artist"
460 label="艺术家"
461 rules={[{ required: true, message: "请输入艺术家名称" }]}
462 >
463 <Input placeholder="请输入艺术家名称" />
464 </Form.Item>
465
466 <Form.Item
467 name="album"
468 label="专辑名称"
469 >
470 <Input placeholder="请输入专辑名称(如果是专辑)" />
471 </Form.Item>
472
473 <Form.Item
474 name="musicType"
475 label="音乐类型"
476 rules={[{ required: true, message: "请选择音乐类型" }]}
477 >
478 <Select placeholder="请选择音乐类型" mode="multiple">
479 <Option value="pop">流行</Option>
480 <Option value="rock">摇滚</Option>
481 <Option value="electronic">电子</Option>
482 <Option value="folk">民谣</Option>
483 <Option value="hip-hop">嘻哈</Option>
484 <Option value="classical">古典</Option>
485 <Option value="jazz">爵士</Option>
486 <Option value="soundtrack">原声带</Option>
487 <Option value="other">其他</Option>
488 </Select>
489 </Form.Item>
490
491 <Form.Item
492 name="format"
493 label="音频格式"
494 rules={[{ required: true, message: "请选择音频格式" }]}
495 >
496 <Select placeholder="请选择音频格式">
497 <Option value="flac">FLAC</Option>
498 <Option value="ape">APE</Option>
499 <Option value="wav">WAV</Option>
500 <Option value="mp3">MP3</Option>
501 <Option value="aac">AAC</Option>
502 <Option value="other">其他</Option>
503 </Select>
504 </Form.Item>
505
506 <Form.Item
507 name="bitrate"
508 label="比特率"
509 >
510 <Select placeholder="请选择比特率">
511 <Option value="lossless">无损</Option>
512 <Option value="320">320Kbps</Option>
513 <Option value="256">256Kbps</Option>
514 <Option value="192">192Kbps</Option>
515 <Option value="128">128Kbps</Option>
516 <Option value="other">其他</Option>
517 </Select>
518 </Form.Item>
519
520 <Form.Item
521 name="tracks"
522 label="曲目数"
523 >
524 <InputNumber min={1} placeholder="请输入曲目数量" />
525 </Form.Item>
526 </>
527);
528
529// 动漫特定表单项
530const AnimeFormItems = () => (
531 <>
532 <Form.Item
533 name="season"
534 label="季数"
535 >
536 <InputNumber min={1} placeholder="第几季" />
537 </Form.Item>
538
539 <Form.Item
540 name="episode"
541 label="集数"
542 >
543 <Input placeholder="例如:1-12、全集、SP、剧场版" />
544 </Form.Item>
545
546 <Form.Item
547 name="isComplete"
548 valuePropName="checked"
549 >
550 <Checkbox>已完结</Checkbox>
551 </Form.Item>
552
553 <Form.Item
554 name="animeType"
555 label="动漫类型"
556 rules={[{ required: true, message: "请选择动漫类型" }]}
557 >
558 <Select placeholder="请选择动漫类型" mode="multiple">
559 <Option value="tv">TV版</Option>
560 <Option value="movie">剧场版</Option>
561 <Option value="ova">OVA</Option>
562 <Option value="special">特别篇</Option>
563 </Select>
564 </Form.Item>
565
566 <Form.Item
567 name="resolution"
568 label="分辨率"
569 rules={[{ required: true, message: "请选择分辨率" }]}
570 >
571 <Select placeholder="请选择分辨率">
572 <Option value="4K">4K</Option>
573 <Option value="2K">2K</Option>
574 <Option value="1080p">1080p</Option>
575 <Option value="720p">720p</Option>
576 <Option value="480p">480p</Option>
577 <Option value="other">其他</Option>
578 </Select>
579 </Form.Item>
580
581 <Form.Item
582 name="source"
583 label="片源"
584 rules={[{ required: true, message: "请选择片源" }]}
585 >
586 <Select placeholder="请选择片源">
587 <Option value="bluray">蓝光原盘</Option>
588 <Option value="remux">蓝光重灌</Option>
589 <Option value="encode">压制</Option>
590 <Option value="web-dl">WEB-DL</Option>
591 <Option value="dvd">DVD</Option>
592 <Option value="hdtv">HDTV</Option>
593 <Option value="other">其他</Option>
594 </Select>
595 </Form.Item>
596
597 <Form.Item
598 name="subTeam"
599 label="字幕组"
600 >
601 <Input placeholder="请输入字幕组名称" />
602 </Form.Item>
603 </>
604);
605
606// 游戏特定表单项
607const GameFormItems = () => (
608 <>
609 <Form.Item
610 name="platform"
611 label="平台"
612 rules={[{ required: true, message: "请选择游戏平台" }]}
613 >
614 <Select placeholder="请选择游戏平台" mode="multiple">
615 <Option value="pc">PC</Option>
616 <Option value="ps5">PS5</Option>
617 <Option value="ps4">PS4</Option>
618 <Option value="ps3">PS3</Option>
619 <Option value="xbox-series">Xbox Series X/S</Option>
620 <Option value="xbox-one">Xbox One</Option>
621 <Option value="switch">Nintendo Switch</Option>
622 <Option value="ns">Nintendo Switch</Option>
623 <Option value="3ds">Nintendo 3DS</Option>
624 <Option value="mobile">手机</Option>
625 <Option value="other">其他</Option>
626 </Select>
627 </Form.Item>
628
629 <Form.Item
630 name="gameType"
631 label="游戏类型"
632 rules={[{ required: true, message: "请选择游戏类型" }]}
633 >
634 <Select placeholder="请选择游戏类型" mode="multiple">
635 <Option value="rpg">角色扮演</Option>
636 <Option value="action">动作</Option>
637 <Option value="fps">第一人称射击</Option>
638 <Option value="tps">第三人称射击</Option>
639 <Option value="strategy">策略</Option>
640 <Option value="simulation">模拟</Option>
641 <Option value="adventure">冒险</Option>
642 <Option value="sports">体育</Option>
643 <Option value="racing">竞速</Option>
644 <Option value="fighting">格斗</Option>
645 <Option value="other">其他</Option>
646 </Select>
647 </Form.Item>
648
649 <Form.Item
650 name="version"
651 label="版本"
652 >
653 <Input placeholder="请输入游戏版本,例如:V1.02.3" />
654 </Form.Item>
655
656 <Form.Item
657 name="developer"
658 label="开发商"
659 >
660 <Input placeholder="请输入游戏开发商" />
661 </Form.Item>
662
663 <Form.Item
664 name="publisher"
665 label="发行商"
666 >
667 <Input placeholder="请输入游戏发行商" />
668 </Form.Item>
669
670 <Form.Item
671 name="language"
672 label="语言"
673 rules={[{ required: true, message: "请选择游戏语言" }]}
674 >
675 <Select placeholder="请选择游戏语言" mode="multiple">
676 <Option value="chinese">中文</Option>
677 <Option value="english">英文</Option>
678 <Option value="japanese">日文</Option>
679 <Option value="korean">韩文</Option>
680 <Option value="french">法文</Option>
681 <Option value="german">德文</Option>
682 <Option value="russian">俄文</Option>
683 <Option value="multi">多语言</Option>
684 </Select>
685 </Form.Item>
686
687 <Form.Item
688 name="hasCrack"
689 valuePropName="checked"
690 >
691 <Checkbox>已破解/免安装</Checkbox>
692 </Form.Item>
693 </>
694);
695
696// 其他类型特定的表单项(简化)
697const OtherFormItems = ({ category }) => {
698 if (category === "variety") {
699 return (
700 <>
701 <Form.Item name="host" label="主持人">
702 <Input placeholder="请输入主持人名称" />
703 </Form.Item>
704 <Form.Item name="episode" label="期数">
705 <Input placeholder="例如:第1-12期、20200101" />
706 </Form.Item>
707 </>
708 );
709 }
710
711 if (category === "sports") {
712 return (
713 <>
714 <Form.Item name="league" label="联赛/赛事名称">
715 <Input placeholder="请输入联赛或赛事名称" />
716 </Form.Item>
717 <Form.Item name="match" label="比赛">
718 <Input placeholder="例如:队伍A vs 队伍B" />
719 </Form.Item>
720 </>
721 );
722 }
723
724 if (category === "software") {
725 return (
726 <>
727 <Form.Item name="version" label="版本">
728 <Input placeholder="请输入软件版本" />
729 </Form.Item>
730 <Form.Item name="os" label="操作系统">
731 <Select placeholder="请选择操作系统" mode="multiple">
732 <Option value="windows">Windows</Option>
733 <Option value="macos">macOS</Option>
734 <Option value="linux">Linux</Option>
735 <Option value="android">Android</Option>
736 <Option value="ios">iOS</Option>
737 </Select>
738 </Form.Item>
739 </>
740 );
741 }
742
743 if (category === "learning") {
744 return (
745 <>
746 <Form.Item name="subject" label="学科/主题">
747 <Input placeholder="请输入学科或主题" />
748 </Form.Item>
749 <Form.Item name="level" label="难度级别">
750 <Select placeholder="请选择难度级别">
751 <Option value="beginner">入门</Option>
752 <Option value="intermediate">中级</Option>
753 <Option value="advanced">高级</Option>
754 </Select>
755 </Form.Item>
756 </>
757 );
758 }
759
760 if (category === "documentary") {
761 return (
762 <>
763 <Form.Item name="docType" label="纪录片类型">
764 <Select placeholder="请选择纪录片类型" mode="multiple">
765 <Option value="nature">自然</Option>
766 <Option value="history">历史</Option>
767 <Option value="science">科学</Option>
768 <Option value="culture">人文</Option>
769 <Option value="society">社会</Option>
770 <Option value="biography">传记</Option>
771 </Select>
772 </Form.Item>
773 <Form.Item name="episodes" label="集数">
774 <Input placeholder="例如:共8集" />
775 </Form.Item>
776 </>
777 );
778 }
779
780 return null;
781};
782
783// 主组件
784const UploadTorrentPage = () => {
785 const [form] = Form.useForm();
786 const [activeCategory, setActiveCategory] = useState("notice");
787
788 const onFinish = (values) => {
789 console.log("提交的表单数据:", values);
790 message.success("种子上传成功!");
791 };
792
793 const renderFormByCategory = (category) => {
794 if (category === "notice") {
795 return <NoticeContent />;
796 }
797
798 return (
799 <Form
800 form={form}
801 layout="vertical"
802 onFinish={onFinish}
803 scrollToFirstError
804 >
805 <CategoryRules category={category} />
806
807 <BaseFormItems category={category} />
808
809 {/* 根据类别渲染特定的表单项 */}
810 {category === "movie" && <MovieFormItems />}
811 {category === "tv" && <TVFormItems />}
812 {category === "music" && <MusicFormItems />}
813 {category === "anime" && <AnimeFormItems />}
814 {category === "game" && <GameFormItems />}
815 {["variety", "sports", "software", "learning", "documentary", "other"].includes(category) && (
816 <OtherFormItems category={category} />
817 )}
818
819 <Divider />
820
821 <Form.Item>
822 <Space>
823 <Button type="primary" htmlType="submit">
824 提交
825 </Button>
826 <Button onClick={() => form.resetFields()}>重置</Button>
827 </Space>
828 </Form.Item>
829 </Form>
830 );
831 };
832
833 return (
834 <div className="space-y-6">
835 <Title level={2}>发布种子</Title>
836
837 <Tabs activeKey={activeCategory} onChange={setActiveCategory} type="card">
838 <TabPane tab="注意事项" key="notice" />
839 <TabPane tab="电影" key="movie" />
840 <TabPane tab="剧集" key="tv" />
841 <TabPane tab="音乐" key="music" />
842 <TabPane tab="动漫" key="anime" />
843 <TabPane tab="游戏" key="game" />
844 <TabPane tab="综艺" key="variety" />
845 <TabPane tab="体育" key="sports" />
846 <TabPane tab="软件" key="software" />
847 <TabPane tab="学习" key="learning" />
848 <TabPane tab="纪录片" key="documentary" />
849 <TabPane tab="其他" key="other" />
850 </Tabs>
851
852 <div>{renderFormByCategory(activeCategory)}</div>
853 </div>
854 );
855};
856
857export default UploadTorrentPage;