feat(torrents): 实现种子上传和列表展示功能
- 新增种子上传功能,包括用户认证和表单处理
- 实现种子列表展示,含搜索和筛选功能
- 调整布局和样式,优化用户体验
- 移除不必要的分类和筛选条件
- 重构部分代码以适应新功能
Change-Id: I86229123ba1e1a70e632042b2a9544e08c3c6876
diff --git a/src/features/torrents/pages/UploadTorrentPage.jsx b/src/features/torrents/pages/UploadTorrentPage.jsx
index 8e17a9e..6b94524 100644
--- a/src/features/torrents/pages/UploadTorrentPage.jsx
+++ b/src/features/torrents/pages/UploadTorrentPage.jsx
@@ -22,6 +22,8 @@
InboxOutlined,
InfoCircleOutlined,
} from "@ant-design/icons";
+import { uploadTorrent } from "../../../api/torrents";
+import { useAuth } from "../../auth/contexts/AuthContext";
const { Title, Paragraph, Text } = Typography;
const { TabPane } = Tabs;
@@ -34,23 +36,16 @@
const uploadProps = {
name: "torrent",
multiple: false,
- action: "/api/upload-torrent",
accept: ".torrent",
maxCount: 1,
- onChange(info) {
- const { status } = info.file;
- if (status === "done") {
- message.success(`${info.file.name} 文件上传成功`);
- } else if (status === "error") {
- message.error(`${info.file.name} 文件上传失败`);
- }
- },
beforeUpload(file) {
const isTorrent = file.type === "application/x-bittorrent" || file.name.endsWith(".torrent");
if (!isTorrent) {
message.error("您只能上传 .torrent 文件!");
+ return Upload.LIST_IGNORE;
}
- return isTorrent || Upload.LIST_IGNORE;
+ // 阻止自动上传,我们将在表单提交时手动处理
+ return false;
},
};
@@ -142,7 +137,6 @@
<Form.Item
name="title"
label="标题"
- rules={[{ required: true, message: "请输入资源标题" }]}
>
<Input placeholder="请输入完整、准确的资源标题" />
</Form.Item>
@@ -150,7 +144,6 @@
<Form.Item
name="chineseName"
label="中文名"
- rules={[{ required: true, message: "请输入资源中文名" }]}
>
<Input placeholder="请输入资源中文名称" />
</Form.Item>
@@ -165,7 +158,6 @@
<Form.Item
name="year"
label="年份"
- rules={[{ required: true, message: "请选择年份" }]}
>
<DatePicker picker="year" placeholder="选择年份" />
</Form.Item>
@@ -173,7 +165,6 @@
<Form.Item
name="region"
label="地区"
- rules={[{ required: true, message: "请选择地区" }]}
>
<Select placeholder="请选择地区">
<Option value="china">中国大陆</Option>
@@ -194,7 +185,6 @@
<Form.Item
name="language"
label="语言"
- rules={[{ required: true, message: "请选择语言" }]}
>
<Select placeholder="请选择语言" mode="multiple">
<Option value="chinese">中文</Option>
@@ -271,7 +261,6 @@
<Form.Item
name="movieType"
label="电影类型"
- rules={[{ required: true, message: "请选择电影类型" }]}
>
<Select placeholder="请选择电影类型" mode="multiple">
<Option value="action">动作</Option>
@@ -295,7 +284,6 @@
<Form.Item
name="resolution"
label="分辨率"
- rules={[{ required: true, message: "请选择分辨率" }]}
>
<Select placeholder="请选择分辨率">
<Option value="4K">4K</Option>
@@ -310,7 +298,6 @@
<Form.Item
name="source"
label="片源"
- rules={[{ required: true, message: "请选择片源" }]}
>
<Select placeholder="请选择片源">
<Option value="bluray">蓝光原盘</Option>
@@ -784,10 +771,49 @@
const UploadTorrentPage = () => {
const [form] = Form.useForm();
const [activeCategory, setActiveCategory] = useState("notice");
+ const { user } = useAuth();
- const onFinish = (values) => {
- console.log("提交的表单数据:", values);
- message.success("种子上传成功!");
+ const onFinish = async (values) => {
+ try {
+ // 创建 FormData 对象
+ const formData = new FormData();
+
+ // * 添加用户名
+ const username = user?.username || user?.uid;
+ if (!username) {
+ message.error('用户信息不完整,请重新登录');
+ return;
+ }
+ formData.append('username', username);
+
+ // 添加描述信息
+ formData.append('description', values.description || '');
+
+ // 添加种子文件
+ if (values.torrentFile && values.torrentFile.fileList && values.torrentFile.fileList.length > 0) {
+ const torrentFile = values.torrentFile.fileList[0].originFileObj;
+ formData.append('torrent', torrentFile);
+ } else {
+ message.error('请选择种子文件');
+ return;
+ }
+
+ console.log('username', formData.get('username'));
+ console.log('description', formData.get('description'));
+ console.log('torrent', formData.get('torrent'));
+ // 调用上传接口
+ const response = await uploadTorrent(formData);
+
+ if (response && response.message === "Resource published successfully") {
+ message.success('种子上传成功!');
+ form.resetFields(); // 重置表单
+ } else {
+ message.error('上传失败,请重试');
+ }
+ } catch (error) {
+ console.error('上传种子时出错:', error);
+ message.error('上传失败:' + (error.message || '网络错误,请重试'));
+ }
};
const renderFormByCategory = (category) => {