diff --git a/src/pages/InterestGroup/InterestGroup.jsx b/src/pages/InterestGroup/InterestGroup.jsx
index 8a8d67b..eb9ed41 100644
--- a/src/pages/InterestGroup/InterestGroup.jsx
+++ b/src/pages/InterestGroup/InterestGroup.jsx
@@ -97,97 +97,128 @@
     }
   };
 
+  const handleSearch = () => {
+    // 触发搜索逻辑，通过修改 name 状态重新请求数据
+    setPage(1);
+  };
+
   return (
     <div className="interest-group-container">
       {/* Header 组件放在页面最上方 */}
       <Header />
+      <div className="interest-group-card">
+        {/* <h1>兴趣小组列表</h1> */}
+        {/* 水平排列的筛选、搜索和排序容器 */}
+        <div className="filter-search-sort-container">
+          {/* 分类筛选 */}
+          <div className="filter">
+            <label>分类：</label>
+            <select onChange={handleCategoryChange} value={category} style={{ width: '150px' }}>
+              <option value="">全部</option>
+              <option value="影视">影视</option>
+              <option value="游戏">游戏</option>
+              <option value="学习">学习</option>
+              <option value="体育">体育</option>
+              <option value="其他">其他</option>
+            </select>
+          </div>
 
-      <h1>兴趣小组列表</h1>
-      {/* 分类筛选 */}
-      <div className="filter">
-        <label>分类：</label>
-        <select onChange={handleCategoryChange} value={category}>
-          <option value="">全部</option>
-          <option value="影视">影视</option>
-          <option value="游戏">游戏</option>
-          <option value="学习">学习</option>
-          <option value="体育">体育</option>
-          <option value="其他">其他</option>
-        </select>
-      </div>
+          {/* 排序 */}
+          <div className="sort">
+            <label>排序：</label>
+            <select onChange={handleSortChange} value={sortBy} style={{ width: '150px' }}>
+              <option value="member_count">按成员数排序</option>
+              <option value="name">按名称排序</option>
+              <option value="category">按分类排序</option>
+            </select>
+          </div>
 
-      {/* 搜索框 */}
-      <div className="search">
-        <label>搜索：</label>
-        <input
-          type="text"
-          value={name}
-          onChange={handleSearchChange}
-          placeholder="输入小组名称搜索"
-        />
-      </div>
-
-      {/* 排序 */}
-      <div className="sort">
-        <label>排序：</label>
-        <select onChange={handleSortChange} value={sortBy}>
-          <option value="member_count">按成员数排序</option>
-          <option value="name">按名称排序</option>
-          <option value="category">按分类排序</option>
-        </select>
-      </div>
-
-      {/* 加载中提示 */}
-      {loading && <p>加载中...</p>}
-
-      {/* 错误提示 */}
-      {error && <p className="error">{error}</p>}
-
-      {/* 小组列表 */}
-      {!loading && !error && (
-        <div className="group-list">
-          {groups.map((group) => (
-            <div className="group-item" key={group.group_id}>
-              <img
-                src={group.cover_image}
-                alt={group.name}
-                className="group-cover"
-              />
-              <div className="group-info">
-                <h2>{group.name}</h2>
-                <p>{group.description}</p>
-                <p>成员数：{group.member_count}</p>
-                <p>分类：{group.category}</p>
-                {/* 加入小组按钮 */}
-                <button
-                  onClick={() => handleJoinGroup(group.group_id)}
-                  disabled={joinStatus[group.group_id] === '加入成功'}
-                >
-                  {joinStatus[group.group_id] === '加入成功' ? '已加入' : '加入小组'}
-                </button>
-                {/* 显示加入状态 */}
-                {joinStatus[group.group_id] && <p>{joinStatus[group.group_id]}</p>}
-              </div>
-            </div>
-          ))}
+          {/* 搜索框 */}
+          <div className="search">
+            <input
+              type="text"
+              value={name}
+              onChange={handleSearchChange}
+              placeholder="输入小组名称搜索"
+            />
+            <button onClick={handleSearch} style={{ backgroundColor: '#BA929A', color: 'white' , padding: '5px 10px'}}>搜索</button>
+          </div>
         </div>
-      )}
 
-      {/* 分页 */}
-      <div className="pagination">
-        <button onClick={() => handlePageChange(page - 1)} disabled={page <= 1}>
-          上一页
-        </button>
-        <span>第 {page} 页 / 共 {totalPages} 页</span>
-        <button
-          onClick={() => handlePageChange(page + 1)}
-          disabled={page >= totalPages}
-        >
-          下一页
-        </button>
+        {/* 加载中提示 */}
+        {loading && <p>加载中...</p>}
+
+        {/* 错误提示 */}
+        {error && <p className="error">{error}</p>}
+
+        {/* 小组列表 */}
+        {!loading && !error && (
+          <div className="group-list">
+            {groups.map((group) => (
+              <div className="group-item" key={group.group_id}>
+                <div className="group-content">
+                  <img
+                    style={{ width: '40%', height: '40%'}}
+                    src={group.cover_image}
+                    alt={group.name}
+                    className="group-cover"
+                  />
+                  <div
+                    className="group-info-right"
+                    style={{
+                      display: 'flex',
+                      flexDirection: 'column',
+                      alignItems: 'flex-start',
+                      gap: '4px', // 控制元素之间的垂直间距
+                    }}
+                  >
+                    <h3 style={{ margin: 0 }}>{group.name}</h3>
+                    <p style={{ color: '#BA929A', margin: 0 }}>{group.member_count}人加入了小组</p>
+                    <button
+                      onClick={() => handleJoinGroup(group.group_id)}
+                      disabled={joinStatus[group.group_id] === '加入成功'}
+                      style={{
+                        background: 'none',
+                        color: '#007bff',
+                        padding: 0,
+                        marginTop: '4px',
+                        /*左对齐*/
+                        textAlign: 'left',
+                        marginLeft: '0',
+                        cursor: joinStatus[group.group_id] === '加入成功' ? 'default' : 'pointer',
+                      }}
+                    >
+                      {joinStatus[group.group_id] === '加入成功' ? '已加入' : '+加入小组'}
+                    </button>
+                  </div>
+
+                </div>
+                <div className="group-description">
+                  <p>{group.description}</p>
+                </div>
+                <p>分类：{group.category}</p>
+        
+              </div>
+            ))}
+          </div>
+        )}    
+
+        {/* 分页 */}
+        <div className="pagination">
+          <button onClick={() => handlePageChange(page - 1)} disabled={page <= 1}>
+            上一页
+          </button>
+          <span>第 {page} 页 / 共 {totalPages} 页</span>
+          <button
+            onClick={() => handlePageChange(page + 1)}
+            disabled={page >= totalPages}
+          >
+            下一页
+          </button>
+        </div>
       </div>
     </div>
   );
 };
 
-export default InterestGroup;
+export default InterestGroup;
\ No newline at end of file
