diff --git a/src/views/postList/postList.tsx b/src/views/postList/postList.tsx
index 28a660d..2312361 100644
--- a/src/views/postList/postList.tsx
+++ b/src/views/postList/postList.tsx
@@ -1,15 +1,11 @@
-import React from "react";
+import React ,{useCallback, useState}from "react";
 import style from "./postList.module.css";
 import SelfStatus from "@/components/selfStatus/selfStatus";
 import Corner from "@/components/corner/corner"
 import Navbar from "@/components/navbar/navbar";
-import PostsPanel from "@/components/postsPanel/postsPanel";
 import { getPosts, unknownAPI } from "@/api/post";
-import { Form } from "antd"
 import { useApi } from "@/hooks/request";
 import request from "@/utils/request";
-import { Pagination, PaginationProps } from "antd";
-import { set } from "lodash";
 import { useEffect } from "react";
 import { useNavigate, useSearchParams } from "react-router";
 import { MainPostTag } from "@/types/common";
@@ -20,27 +16,26 @@
     const type = searchParams.get("type") || ""; 
     const nav = useNavigate();
 
-    if(type in ['video', 'music', 'game', 'software']) {
+    if(type in ['video', 'music', 'Game', 'software']) {
         nav('/')
     }
-
-    const {data:postList, refresh:getPostList} = useApi(() => request.get(getPosts + `?tags=${[MainPostTag[type as keyof typeof MainPostTag]]}&page=${currentPage}&pageSize=${pageSize}`), false);
-    const [currentPage, setCurrentPage] = React.useState(1);
-    const [pageSize, setPageSize] = React.useState(10);
-    const handlePageChange = (page:number, size?:number) => {
-        setCurrentPage(page);
-        if(size) setPageSize(size);
-        console.log(page, size);
-    };
+    const {data:postList, refresh:getPostList} = useApi((tags) => request.get(getPosts + `?keyword&tags=${tags.join(',')}&author`), false);
+    const [currentPage, setCurrentPage] = useState(1);
+    const [pageSize, setPageSize] = useState(10);
+    const [tagIds, setTagIds] = useState<Array<number>>([]);
 
     const handlePostClick = (postId:number) => {
         nav(`/postsDetail?postId=${postId}`);
     }
 
     useEffect(() => {
-        getPostList();
+        getPostList([MainPostTag[type as keyof typeof MainPostTag]]);
     },[currentPage, pageSize]);
 
+    useEffect(()=>{
+        console.log(tagIds)
+        getPostList([...tagIds, MainPostTag[type as keyof typeof MainPostTag]])
+    },[tagIds])
     return (
         <div className={style.container}>
             <div className={style.left}>
@@ -53,7 +48,7 @@
                             <div key={post.postId} className={style.contentItem} onClick={() => handlePostClick(post.postId)}>
                                 <h3>{post.postTitle}</h3>
                                 <p>{post.postContent.substring(0, 20)}</p>
-                                <p className={style.createDate}>{post.createdAt}</p>
+                                <p className={style.createDate}>{new Date(post.createdAt).toLocaleString()}</p>
                             </div>
                         ))
                     ) : (
@@ -67,7 +62,7 @@
                     <SelfStatus/>
                 </div>
                 <div className={style.filter}>
-                    <Corner />
+                    <Corner setTagIds={setTagIds}/>
                 </div> 
             </div>
         </div>
