blob: 69388d84202e337a9aade7ad68cc952c9792369e [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";
San3yuan2728ba02025-06-06 22:02:57 +080014import { MainPostTag } from "@/types/common";
San3yuana2ee30b2025-06-05 21:20:17 +080015
16
17const PostList:React.FC = () => {
18 const [searchParams] = useSearchParams();
19 const type = searchParams.get("type") || "";
20 const nav = useNavigate();
21
22 if(type in ['video', 'music', 'game', 'software']) {
23 nav('/')
24 }
25
San3yuan2728ba02025-06-06 22:02:57 +080026 const {data:postList, refresh:getPostList} = useApi(() => request.get(getPosts + `?tags=${[MainPostTag[type as keyof typeof MainPostTag]]}&page=${currentPage}&pageSize=${pageSize}`), false);
San3yuana2ee30b2025-06-05 21:20:17 +080027 const [currentPage, setCurrentPage] = React.useState(1);
28 const [pageSize, setPageSize] = React.useState(10);
29 const handlePageChange = (page:number, size?:number) => {
30 setCurrentPage(page);
31 if(size) setPageSize(size);
32 console.log(page, size);
33 };
34
35 const handlePostClick = (postId:number) => {
36 nav(`/postsDetail?postId=${postId}`);
37 }
38
39 useEffect(() => {
40 getPostList();
41 },[currentPage, pageSize]);
42
43 return (
44 <div className={style.container}>
45 <div className={style.left}>
46 <div className={style.navbar}>
47 <Navbar current={type}/>
48 </div>
49 <div className={style.content}>
50 {postList && postList.length > 0 ? (
51 postList.map((post: { postId: number; postTitle: string; postContent: string; createdAt:string }) => (
52 <div key={post.postId} className={style.contentItem} onClick={() => handlePostClick(post.postId)}>
53 <h3>{post.postTitle}</h3>
54 <p>{post.postContent.substring(0, 20)}</p>
55 <p className={style.createDate}>{post.createdAt}</p>
56 </div>
57 ))
58 ) : (
59 <div className={style.noData}>未查询到相关帖子</div>
60 )}
61
San3yuana2ee30b2025-06-05 21:20:17 +080062 </div>
63 </div>
64 <div className={style.right}>
65 <div className={style.selfStatus}>
66 <SelfStatus/>
67 </div>
68 <div className={style.filter}>
69
70 </div>
71 </div>
72 </div>
73 )
74}
75
76export default PostList;