blob: 28a660d1db9e5d8e23722daac34dd1a9906eafaa [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";
阳菜,放晴!77743f42025-06-06 23:04:08 +08004import Corner from "@/components/corner/corner"
San3yuana2ee30b2025-06-05 21:20:17 +08005import Navbar from "@/components/navbar/navbar";
6import PostsPanel from "@/components/postsPanel/postsPanel";
7import { getPosts, unknownAPI } from "@/api/post";
8import { Form } from "antd"
9import { useApi } from "@/hooks/request";
10import request from "@/utils/request";
11import { Pagination, PaginationProps } from "antd";
12import { set } from "lodash";
13import { useEffect } from "react";
14import { useNavigate, useSearchParams } from "react-router";
San3yuan2728ba02025-06-06 22:02:57 +080015import { MainPostTag } from "@/types/common";
San3yuana2ee30b2025-06-05 21:20:17 +080016
17
18const PostList:React.FC = () => {
19 const [searchParams] = useSearchParams();
20 const type = searchParams.get("type") || "";
21 const nav = useNavigate();
22
23 if(type in ['video', 'music', 'game', 'software']) {
24 nav('/')
25 }
26
San3yuan2728ba02025-06-06 22:02:57 +080027 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 +080028 const [currentPage, setCurrentPage] = React.useState(1);
29 const [pageSize, setPageSize] = React.useState(10);
30 const handlePageChange = (page:number, size?:number) => {
31 setCurrentPage(page);
32 if(size) setPageSize(size);
33 console.log(page, size);
34 };
35
36 const handlePostClick = (postId:number) => {
37 nav(`/postsDetail?postId=${postId}`);
38 }
39
40 useEffect(() => {
41 getPostList();
42 },[currentPage, pageSize]);
43
44 return (
45 <div className={style.container}>
46 <div className={style.left}>
47 <div className={style.navbar}>
48 <Navbar current={type}/>
49 </div>
50 <div className={style.content}>
51 {postList && postList.length > 0 ? (
52 postList.map((post: { postId: number; postTitle: string; postContent: string; createdAt:string }) => (
53 <div key={post.postId} className={style.contentItem} onClick={() => handlePostClick(post.postId)}>
54 <h3>{post.postTitle}</h3>
55 <p>{post.postContent.substring(0, 20)}</p>
56 <p className={style.createDate}>{post.createdAt}</p>
57 </div>
58 ))
59 ) : (
60 <div className={style.noData}>未查询到相关帖子</div>
61 )}
62
San3yuana2ee30b2025-06-05 21:20:17 +080063 </div>
64 </div>
65 <div className={style.right}>
66 <div className={style.selfStatus}>
67 <SelfStatus/>
68 </div>
69 <div className={style.filter}>
阳菜,放晴!77743f42025-06-06 23:04:08 +080070 <Corner />
San3yuana2ee30b2025-06-05 21:20:17 +080071 </div>
72 </div>
73 </div>
74 )
75}
76
77export default PostList;