新增管理帖子的组件
Change-Id: I7299ad6f735064dd112f92bab7c87daa952e6dc2
diff --git a/Merge/front/src/components/NotebookPage.jsx b/Merge/front/src/components/NotebookPage.jsx
new file mode 100644
index 0000000..25264ec
--- /dev/null
+++ b/Merge/front/src/components/NotebookPage.jsx
@@ -0,0 +1,85 @@
+// src/components/NotebookPage.jsx
+
+import React, { useState, useEffect } from 'react'
+import { useNavigate } from 'react-router-dom'
+import { fetchPosts, deletePost } from '../api/posts_wzy'
+import '../style/NotebookPage.css'
+
+export default function NotebookPage() {
+ const navigate = useNavigate()
+ const [posts, setPosts] = useState([])
+ const [loading, setLoading] = useState(true)
+ const [error, setError] = useState(null)
+
+ // TODO: 替换成真实用户 ID
+ const currentUserId = 2
+
+ useEffect(() => {
+ async function load() {
+ try {
+ // GET /posts?user_id=1
+ const list = await fetchPosts(currentUserId)
+ setPosts(list)
+ } catch (e) {
+ setError(e.message)
+ } finally {
+ setLoading(false)
+ }
+ }
+ load()
+ }, [])
+
+ async function handleDelete(id) {
+ if (!window.confirm('确定要删除该帖子吗?')) return
+ try {
+ await deletePost(id)
+ setPosts(posts.filter(p => p.id !== id))
+ alert('删除成功')
+ } catch (e) {
+ alert('删除失败:' + e.message)
+ }
+ }
+
+ function handleEdit(id) {
+ // 假设你在路由里挂载了 /posts/edit/:postId
+ navigate(`/posts/edit/${id}`)
+ }
+
+ if (loading) return <p>加载中…</p>
+ if (error) return <p className="error">加载失败:{error}</p>
+
+ return (
+ <div className="notebook-page">
+ <h2>我的帖子管理</h2>
+ {posts.length === 0 ? (
+ <p>暂无帖子</p>
+ ) : (
+ <table className="post-table">
+ <thead>
+ <tr>
+ <th>ID</th>
+ <th>标题</th>
+ <th>状态</th>
+ <th>创建时间</th>
+ <th>操作</th>
+ </tr>
+ </thead>
+ <tbody>
+ {posts.map(p => (
+ <tr key={p.id}>
+ <td>{p.id}</td>
+ <td>{p.title}</td>
+ <td>{p.status}</td>
+ <td>{new Date(p.created_at).toLocaleString()}</td>
+ <td>
+ <button onClick={() => handleEdit(p.id)}>编辑</button>
+ <button onClick={() => handleDelete(p.id)}>删除</button>
+ </td>
+ </tr>
+ ))}
+ </tbody>
+ </table>
+ )}
+ </div>
+ )
+}