diff --git a/src/views/frame/frame.tsx b/src/views/frame/frame.tsx
index ba17996..0f96e8d 100644
--- a/src/views/frame/frame.tsx
+++ b/src/views/frame/frame.tsx
@@ -42,6 +42,7 @@
 
     // ✅ 用于跳转
     const handleSearch = (e: React.KeyboardEvent<HTMLInputElement>) => {
+        console.log(e.key);
         if (e.key === "Enter" && searchText.trim() !== "") {
             navigate(`/search?keyword=${encodeURIComponent(searchText.trim())}`);
         }
diff --git a/src/views/search/search.tsx b/src/views/search/search.tsx
index bf252c5..aaccc99 100644
--- a/src/views/search/search.tsx
+++ b/src/views/search/search.tsx
@@ -1,8 +1,12 @@
 // search.tsx
-import React, { useState, useEffect } from 'react';
+import React, { useState, useEffect, } from 'react';
 import styles from './search.module.css';
-import { useLocation } from "react-router-dom";
+import { useLocation, useSearchParams } from "react-router-dom";
 import { getSearch } from '@/api/search'
+import  request  from '@/utils/request'; // 路径按你项目调整
+import { useApi } from '@/hooks/request';
+import { debounce } from 'lodash';
+// import { getTagsByMainTag } from '@/utils/common';
 
 interface PostItem {
   postId: number;
@@ -19,130 +23,160 @@
 
 const tagMap: Record<string, Record<number, string>> = {
   Game: {
-    0: "android",
-    1: "mac",
-    2: "pc",
-    3: "ios",
-    4: "other",
-    5: "action",
-    6: "adventure",
-    7: "leisure",
-    8: "riddle",
-    9: "sport",
-    10: "strategy",
-    11: "table",
+    1: "android",
+    2: "mac",
+    3: "pc",
+    4: "ios",
+    5: "other",
+    6: "action",
+    7: "adventure",
+    8: "leisure",
+    9: "riddle",
+    10: "sport",
+    11: "strategy",
+    12: "table",
   },
   video: {
-    20: "chinese",
-    21: "America",
-    22: "Japan",
-    23: "Koera",
-    24: "Europe",
-    25: "other",
-    26: "Short",
-    27: "plot",
-    28: "comedy",
-    29: "love",
-    30: "action",
-    31: "terror",
-    32: "science fiction",
-    33: "commit a crime",
-    34: "Thriller",
+    21: "chinese",
+    22: "America",
+    23: "Japan",
+    24: "Koera",
+    25: "Europe",
+    26: "other",
+    27: "Short",
+    28: "plot",
+    29: "comedy",
+    30: "love",
+    31: "action",
+    32: "terror",
+    33: "science fiction",
+    34: "commit a crime",
+    35: "Thriller",
   },
   music: {
-    40: "chinese",
-    41: "America",
-    42: "Japan",
-    43: "Korea",
-    44: "Europe",
-    45: "other",
-    46: "rap",
-    47: "Electric sound",
-    48: "Guofeng",
-    49: "motion",
-    50: "ballad",
-    51: "Rock and roll",
-    52: "classical",
+    41: "chinese",
+    42: "America",
+    43: "Japan",
+    44: "Korea",
+    45: "Europe",
+    46: "other",
+    47: "rap",
+    48: "Electric sound",
+    49: "Guofeng",
+    50: "motion",
+    51: "ballad",
+    52: "Rock and roll",
+    53: "classical",
   },
   software: {
-    60: "android",
-    61: "mac",
-    62: "pc",
-    63: "ios",
-    64: "other",
-    65: "life",
-    66: "shopping",
-    67: "video",
-    68: "music",
-    69: "read",
-    70: "system",
+    61: "android",
+    62: "mac",
+    63: "pc",
+    64: "ios",
+    65: "other",
+    66: "life",
+    67: "shopping",
+    68: "video",
+    69: "music",
+    70: "read",
+    71: "system",
   },
 };
 
+const getTagsByMainTag = (mainTag: string): Record<number, string> => {
+  if (mainTag === "all") return {};
+  return tagMap[mainTag] || {};
+};
+
 const SearchPage: React.FC = () => {
-  const [posts, setPosts] = useState<PostItem[]>([]);
-  const [filteredPosts, setFilteredPosts] = useState<PostItem[]>([]);
+  const [searchParams] = useSearchParams()
+  
   const [selectedPostType, setSelectedPostType] = useState<string>('all');
-  const [selectedRating, setSelectedRating] = useState<number | null>(null);
   const [selectedTags, setSelectedTags] = useState<number[]>([]);
+  const [postsRes, setPosts] = useState<PostItem[]>([]);
 
-  const location = useLocation();
-  const params = new URLSearchParams(location.search);
-  const keyword = params.get("keyword");
-
-  const getTagsForPostType = (postType: string) => {
-    return tagMap[postType] || {};
-  };
-
+  const keyword = searchParams.get('keyword') || '';
+  
   useEffect(() => {
-    if (!keyword) return;
-
-    const requestBody = {
-      keyword,
-      tags: [] // 可以为空
-    };
-
-  console.log("请求发送:", getSearch, requestBody);
-
-
-    fetch(getSearch, {
-      method: 'Get',
-      headers: {
-        'Content-Type': 'application/json'
-      },
-      body: JSON.stringify(requestBody)
-    })
-      .then(res => res.json())
-      .then((res) => {
-        const data: PostItem[] = res.data;
-        setPosts(data);
-        setFilteredPosts(data);
-      })
-      .catch((error) => {
-        console.error('搜索请求失败:', error);
+    if (keyword) {
+      handleSearch({
+        keyword,
+        author: '',
+        tags: []
       });
+    }
   }, [keyword]);
 
 
-  const applyFilters = () => {
-    let filtered = posts;
+  const handleSearch = async (params:{
+    keyword: string;
+    author: string;
+    tags: number[];
+  }) => {
+    try {
 
-    if (selectedPostType !== 'all') {
-      filtered = filtered.filter((post) => post.postType === selectedPostType);
+      let queryParams: string = '';
+      if(params.keyword.trim() !== '') {
+        // queryParams.append('keyword',params.keyword.trim());
+        queryParams += "keyword";
+        queryParams += "=";
+        queryParams += params.keyword.trim();
+        queryParams += "&";
+        // queryParams.concat("keyword");
+        // queryParams.concat(params.keyword.trim());
+        // queryParams.concat("&");
+      }
+      queryParams += "author";
+      queryParams += "&";
+      if (params.tags.length > 0 || params.author !== '') {
+        // queryParams.append('tags', params.tags.join(','));
+        // queryParams.concat("tags");
+        // queryParams.concat(params.tags.join(','));
+        // queryParams.concat("&");
+        queryParams += "tags";
+        queryParams += "=";
+        if(params.tags.length >0){
+          queryParams += params.author;
+          queryParams += ",";
+          queryParams += params.tags.join(',');
+        }else{
+          queryParams += params.author;
+        }
+        
+      }else{
+        // queryParams.append('tags', '');
+        // queryParams.concat("tags");
+        queryParams += "tags";
+      }
+
+      console.log("queryParams",queryParams);
+      const url = `${getSearch}?${queryParams}`;
+      const res = await request.get(url);
+      console.log("url:",url);
+      console.log("res:",res);
+      setPosts(res);
+    } catch (error) {
+      console.error('获取帖子搜索错误', error);
     }
+  };
 
-    if (selectedRating !== null) {
-      filtered = filtered.filter((post) => post.hotScore >= selectedRating);
-    }
 
-    if (selectedTags.length > 0) {
-      filtered = filtered.filter((post) =>
-        post.tags?.some((tag) => selectedTags.includes(tag))
-      );
-    }
+  const handleFilterClick = () => {
+    // 分区处理：如果选择"all"，则author为空字符串
+    const author = selectedPostType === 'all' ? '' : selectedPostType;
+    
+    handleSearch({
+      keyword,
+      author,
+      tags: selectedTags
+    });
+  };
 
-    setFilteredPosts(filtered);
-
+  const handlePostTypeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
+    const value = e.target.value;
+    setSelectedPostType(value);
+    // 切换分区时清空已选标签
+    setSelectedTags([]);
   };
 
   return (
@@ -155,17 +189,13 @@
         className={styles.selectBox}
         >
         <option value="all">所有分区</option>
-        <option value="video">影视</option>
-        <option value="music">音乐</option>
-        <option value="Game">游戏</option>
-        <option value="software">软件</option>
+        <option value="20">影视</option>
+        <option value="40">音乐</option>
+        <option value="0">游戏</option>
+        <option value="60">软件</option>
         </select>
 
         <select
-        value={selectedRating || ''}
-        onChange={(e) =>
-            setSelectedRating(e.target.value ? Number(e.target.value) : null)
-        }
         className={styles.selectBox}
         >
         <option value="">所有评分</option>
@@ -177,56 +207,57 @@
         </select>
     </div>
 
-    <div className={styles.centerSection}>
+      <div className={styles.centerSection}>
         <div className={styles.tagFilters}>
-        {Object.entries(getTagsForPostType(selectedPostType)).map(([tagId, tagName]) => (
-            <label key={tagId}>
-            <input
-                type="checkbox"
-                value={tagId}
-                checked={selectedTags.includes(Number(tagId))}
-                onChange={(e) => {
-                const value = Number(e.target.value);
-                setSelectedTags((prev) =>
-                    prev.includes(value)
-                    ? prev.filter((t) => t !== value)
-                    : [...prev, value]
-                );
-                }}
-            />
-            {tagName}
-            </label>
-        ))}
+          {selectedPostType !== "all" && 
+            Object.entries(getTagsByMainTag(selectedPostType)).map(([tagId, tagName]) => {
+              const tagIdNum = Number(tagId);
+              return (
+                <label key={tagId}>
+                  <input
+                    type="checkbox"
+                    value={tagId}
+                    checked={selectedTags.includes(tagIdNum)}
+                    onChange={(e) => {
+                      const value = Number(e.target.value);
+                      setSelectedTags((prev) =>
+                        prev.includes(value)
+                          ? prev.filter((t) => t !== value)
+                          : [...prev, value]
+                      );
+                    }}
+                  />
+                  {tagName}
+                </label>
+              );
+            })
+          }
         </div>
-    </div>
+      </div>
 
     <div className={styles.rightSection}>
-        <button className={styles.filterButton} onClick={applyFilters}>
+        <button className={styles.filterButton} onClick={handleFilterClick}>
         筛选
         </button>
     </div>
     </div>
 
     <div className={styles.results}>
-      {filteredPosts.length === 0 ? (
-        <p>暂无搜索结果</p>
-      ) : (
-        <ul className={styles.resultList}>
-          {filteredPosts.map((post) => (
-            <li key={post.postId} className={styles.resultItem}>
-              <h3>{post.postTitle || '无标题'}</h3>
-              <p>{post.postContent || '无内容'}</p>
-              <p>类型：{post.postType || '未知'} | 热度评分：{post.hotScore}</p>
-            </li>
-          ))}
-        </ul>
-      )}
+    {postsRes?.length === 0 ? (
+      <p>暂无搜索结果</p>
+    ) : (
+      <ul className={styles.resultList}>
+        {postsRes?.map((post) => (
+          <li key={post.postId} className={styles.resultItem}>
+            <h3>{post.postTitle || '无标题'}</h3>
+            <p>{post.postContent || '无内容'}</p>
+            <p>类型：{post.postType || '未知'} | 观看次数：{post.viewCount}</p>
+          </li>
+        ))}
+      </ul>
+    )}
     </div>
-
   </div>
-
-        
-
   );
 };
 
