blob: c08b7cf14401fd1e2e3d07f70ccf4b4c91870a6d [file] [log] [blame]
San3yuana2ee30b2025-06-05 21:20:17 +08001import React from "react";
2import style from "./postList.module.css";
3import SelfStatus from "@/components/selfStatus/selfStatus";
4import Navbar from "@/components/navbar/navbar";
5import PostsPanel from "@/components/postsPanel/postsPanel";
6import { getPosts, unknownAPI } from "@/api/post";
7import { Form } from "antd"
8import { useApi } from "@/hooks/request";
9import request from "@/utils/request";
10import { Pagination, PaginationProps } from "antd";
11import { set } from "lodash";
12import { useEffect } from "react";
13import { useNavigate, useSearchParams } from "react-router";
14
15
16const PostList:React.FC = () => {
17 const [searchParams] = useSearchParams();
18 const type = searchParams.get("type") || "";
19 const nav = useNavigate();
20
21 if(type in ['video', 'music', 'game', 'software']) {
22 nav('/')
23 }
24
25 const {data:postList, refresh:getPostList} = useApi(() => request.get(getPosts + `?tags=${[type]}&page=${currentPage}&pageSize=${pageSize}`), false);
26 const [currentPage, setCurrentPage] = React.useState(1);
27 const [pageSize, setPageSize] = React.useState(10);
28 const handlePageChange = (page:number, size?:number) => {
29 setCurrentPage(page);
30 if(size) setPageSize(size);
31 console.log(page, size);
32 };
33
34 const handlePostClick = (postId:number) => {
35 nav(`/postsDetail?postId=${postId}`);
36 }
37
38 useEffect(() => {
39 getPostList();
40 },[currentPage, pageSize]);
41
42 return (
43 <div className={style.container}>
44 <div className={style.left}>
45 <div className={style.navbar}>
46 <Navbar current={type}/>
47 </div>
48 <div className={style.content}>
49 {postList && postList.length > 0 ? (
50 postList.map((post: { postId: number; postTitle: string; postContent: string; createdAt:string }) => (
51 <div key={post.postId} className={style.contentItem} onClick={() => handlePostClick(post.postId)}>
52 <h3>{post.postTitle}</h3>
53 <p>{post.postContent.substring(0, 20)}</p>
54 <p className={style.createDate}>{post.createdAt}</p>
55 </div>
56 ))
57 ) : (
58 <div className={style.noData}>未查询到相关帖子</div>
59 )}
60
61 <Pagination
62 showSizeChanger
63 onShowSizeChange={handlePageChange}
64 defaultCurrent={1}
65 total={500}
66 onChange={handlePageChange}
67 />
68 </div>
69 </div>
70 <div className={style.right}>
71 <div className={style.selfStatus}>
72 <SelfStatus/>
73 </div>
74 <div className={style.filter}>
75
76 </div>
77 </div>
78 </div>
79 )
80}
81
82export default PostList;