Docker
Change-Id: I2aefd96a43bcf3a3c41c079ecfc04a3fee48bed6
diff --git a/src/views/upload/upload.tsx b/src/views/upload/upload.tsx
new file mode 100644
index 0000000..4a60330
--- /dev/null
+++ b/src/views/upload/upload.tsx
@@ -0,0 +1,123 @@
+import instance from '@/utils/axios';
+import React, { useState } from 'react';
+import styles from './upload.module.css';
+import { Upload } from '@/api/upload';
+import { useNavigate } from 'react-router-dom'; // 用于跳转
+
+const PostDetails = () => {
+ const [postTitle, setPostTitle] = useState('');
+ const [postType, setPostType] = useState('');
+ const [postContent, setPostContent] = useState('');
+ const [isChecked, setIsChecked] = useState(false);
+
+ const navigate = useNavigate();
+
+ const handleSubmit = async () => {
+ if (!postTitle.trim() || !postType || !postContent.trim()) {
+ alert('请填写完整内容(资源名、类型、内容介绍)');
+ return;
+ }
+
+ if (!isChecked) {
+ alert('请先确认您已知晓以上内容');
+ return;
+ }
+
+ const payload = {
+ post: {
+ postId: 0,
+ userId: 0,
+ postTitle,
+ postContent,
+ createdAt: Date.now(),
+ postType,
+ viewCount: 0,
+ hotScore: 5,
+ lastCalculated: Date.now()
+ },
+ tagIds: [0]
+ };
+
+ try {
+ const res = await instance.post(Upload, payload);
+
+ console.log('mock返回内容:', res.code);
+
+ // 判断返回内容是否成功(根据你 mock 接口返回的 code 字段)
+ if (res.code !== 0) throw new Error('发布失败');
+
+ alert('发布成功!');
+ navigate(-1); // 返回上一页(homepage)
+ } catch (error) {
+ alert('发布失败,请稍后重试');
+ console.error(error);
+ }
+ };
+
+ return (
+ <div className={styles.container}>
+ <div className={styles.formGroup}>
+ <label>资源名:</label>
+ <input
+ type="text"
+ value={postTitle}
+ placeholder="请输入文本"
+ onChange={(e) => setPostTitle(e.target.value)}
+ className={styles.input}
+ />
+ </div>
+
+ <div className={styles.formGroup}>
+ <label>类型选择:</label>
+ <select
+ value={postType}
+ onChange={(e) => setPostType(e.target.value)}
+ className={styles.select}
+ >
+ <option value="">下拉选择</option>
+ <option value="type1">类型一</option>
+ <option value="type2">类型二</option>
+ </select>
+ </div>
+
+ {/* 暂时移除上传文件表单 */}
+ {/* <div className={styles.formGroup}>
+ <label>上传资源:</label>
+ <input
+ type="file"
+ onChange={(e) => setFile(e.target.files?.[0] || null)}
+ className={styles.upload}
+ />
+ </div> */}
+
+ <div className={styles.formGroup}>
+ <label>内容介绍:</label>
+ <textarea
+ placeholder="请输入内容介绍"
+ value={postContent}
+ onChange={(e) => setPostContent(e.target.value)}
+ maxLength={200}
+ className={styles.textarea}
+ />
+ <div className={styles.charCount}>{postContent.length}/200</div>
+ </div>
+
+ <div className={styles.requirement}>【发布内容要求】</div>
+
+ <div className={styles.checkbox}>
+ <input
+ type="checkbox"
+ checked={isChecked}
+ onChange={() => setIsChecked(!isChecked)}
+ />
+ <span>我已知晓以上内容</span>
+ </div>
+
+ <button onClick={handleSubmit} className={styles.submitBtn}>
+ 我已知晓
+ </button>
+ </div>
+ );
+};
+
+export default PostDetails;