diff --git "a/src/app/community/community-detail/\133communityId\135/page.tsx" "b/src/app/community/community-detail/\133communityId\135/page.tsx"
new file mode 100644
index 0000000..40200f7
--- /dev/null
+++ "b/src/app/community/community-detail/\133communityId\135/page.tsx"
@@ -0,0 +1,289 @@
+'use client';
+
+import React, { useEffect, useState, useRef } from "react";
+import { InputText } from 'primereact/inputtext';
+import { Button } from 'primereact/button';
+import { Card } from 'primereact/card';
+import { Image } from 'primereact/image';
+import { Dropdown } from 'primereact/dropdown';
+// 页面跳转
+import { useParams } from 'next/navigation'
+import { useRouter } from 'next/navigation';
+// 分页
+import { Paginator, type PaginatorPageChangeEvent } from 'primereact/paginator';
+// 评分图标
+import { Fire } from '@icon-park/react';
+// 消息提醒
+import { Toast } from 'primereact/toast';
+// 发布帖子
+import { Dialog } from 'primereact/dialog';
+import { FileUpload } from 'primereact/fileupload';
+import { InputTextarea } from 'primereact/inputtextarea';
+// 接口传输
+import axios from 'axios';
+// 防抖函数
+import { debounce } from 'lodash';
+// 样式
+import './resource-community.scss';
+
+// 帖子列表数据
+interface Thread {
+    threadId: number;
+    userId: number;
+    threadPicture: string;
+    title: string;
+    createdAt: string;
+    communityId: string;
+    likes: number;
+}
+interface ThreadList {
+    records: Thread[];
+}
+// 社区信息
+interface CommunityInfo {
+    communityId: string;
+    communityName: string;
+    communityPicture: string;
+    description: string;
+    hot: number;
+    type: string;
+    threadNumber: number;
+}
+
+
+// 社区详情页面
+export default function CommunityDetailPage() {
+    // 获取URL参数，页面跳转
+    const params = useParams<{ communityId: string }>()
+    const communityId = decodeURIComponent(params.communityId); // 防止中文路径乱码
+    const router = useRouter();
+    // 社区数据
+    const [communityInfo, setCommunityInfo] = useState<CommunityInfo | null>(null);
+    // 帖子列表数据
+    const [threads, setThreads] = useState<Thread[]>([]);
+    const [totalThreads, setTotalThreads] = useState<number>(0);
+    // 搜索框
+    const [searchValue, setSearchValue] = useState("");
+    const debouncedSearch = useRef(
+        debounce((value: string) => {
+            setSearchValue(value);
+        }, 600)
+    ).current;
+    // 消息提醒
+    const toast = useRef<Toast>(null);
+    // 筛选器选项数据
+    const [selectedOption, setSelectedOption] = useState({ name: '热度最高' });
+    const options = [
+        { name: '来自好友' },
+        { name: '热度最高' }
+    ];
+    // 分页
+    const [first, setFirst] = useState(0);
+    const [rows, setRows] = useState(6);
+    const onPageChange = (event: PaginatorPageChangeEvent) => {
+        setFirst(event.first);
+        setRows(event.rows);
+    };
+    // 获取社区信息
+    useEffect(() => {
+        const fetchThreadInfo = async () => {
+            try {
+                const { data } = await axios.get(`http://127.0.0.1:4523/m1/6387307-6083949-default/community/info?communityId=${communityId}`);
+                setCommunityInfo(data);
+                setTotalThreads(data.threadNumber);
+            } catch (err) {
+                console.error(err);
+                toast.current?.show({ severity: 'error', summary: 'error', detail: '获取社区信息失败' });
+            }
+        };
+        fetchThreadInfo();
+    }, [communityId]);
+
+    // 获取帖子列表
+    useEffect(() => {
+        fetchThreads();
+    }, [communityId, first, rows, selectedOption, searchValue]);
+
+    const fetchThreads = async () => {
+        try {
+            const page = first / rows + 1;
+            console.log("当前页" + page + "size" + rows + "搜索内容" + searchValue);
+            const option = selectedOption.name // 添加排序参数
+            const response = await axios.get<ThreadList>(
+                `http://127.0.0.1:4523/m1/6387307-6083949-default/community/threads`, {
+                params: { communityId, page, rows, option, searchValue }
+            }
+            );
+            console.log('获取帖子列表:', response.data.records);
+            setThreads(response.data.records);
+        } catch (err) {
+            console.error('获取帖子失败', err);
+            toast.current?.show({ severity: 'error', summary: 'error', detail: '获取帖子失败' });
+        }
+    };
+
+    // 发布帖子弹窗
+    const [visible, setVisible] = useState(false);
+    const [formData, setFormData] = useState({
+        title: '',
+        content: '',
+        threadPicture: ''
+    });
+    // 图片上传消息通知
+    const onUpload = () => {
+        toast.current?.show({ severity: 'info', summary: 'Success', detail: 'File Uploaded' });
+    };
+
+    // 发帖接口
+    const handleSubmit = async () => {
+        try {
+            const currentDate = new Date().toISOString();
+            const postData = {
+                userId: 22301145, // 记得用户登录状态获取
+                threadPicture: formData.threadPicture,
+                title: formData.title,
+                content: formData.content,
+                createdAt: currentDate,
+                communityId: communityId // 从URL参数获取的社区ID
+            };
+            // 发送POST请求
+            const response = await axios.post('http://127.0.0.1:4523/m1/6387307-6083949-default/thread', postData);
+
+            if (response.status === 200) {
+                toast.current?.show({ severity: 'success', summary: 'Success', detail: '帖子发布成功' });
+                // 发帖成功
+                setVisible(false);
+                // 重置表单
+                setFormData({
+                    title: '',
+                    content: '',
+                    threadPicture: ''
+                });
+                // 可以刷新帖子列表
+                fetchThreads();
+            }
+        } catch (error) {
+            console.error('发帖失败:', error);
+            toast.current?.show({ severity: 'error', summary: 'error', detail: '帖子发布失败' });
+        }
+    };
+    return (
+        <div className="resource-community">
+            <Toast ref={toast}></Toast>
+            {/* 社区标题和介绍 */}
+            <div className="community-header">
+                <div className="title-section">
+                    <h1>{communityInfo?.communityName}</h1>
+                    <p className="subtitle">{communityInfo?.description}</p>
+                    <div className="community-states">
+                        <div className="state-item">
+                            <Fire theme="outline" size="16" fill="#FF8D1A" />
+                            <span>热度: {communityInfo?.hot}</span>
+                        </div>
+                        <div className="state-item">
+                            <i className="pi pi-book" />
+                            <span>帖子数: {totalThreads}</span>
+                        </div>
+                    </div>
+                </div>
+                <div className="input">
+                    <Button label="返回列表" link onClick={() => router.push(`/community/resource-community-list/${communityInfo?.type}`)} />
+                    <div className="action-section">
+                        <div className="communities-searchBar">
+                            <i className="pi pi-search" />
+                            <InputText type="search" className="search-helper" placeholder="搜索你感兴趣的帖子" onChange={(e) => { const target = e.target as HTMLInputElement; debouncedSearch(target.value); }} />
+                        </div>
+                        <Dropdown
+                            value={selectedOption}
+                            onChange={(e) => setSelectedOption(e.value)}
+                            options={options}
+                            optionLabel="name"
+                            className="select-dropdown"
+                        />
+                    </div>
+                </div>
+            </div>
+
+            {/* 帖子列表 */}
+            <div className="thread-list">
+                <div className="resource-grid">
+                    {threads.map((thread) => (
+                        <Card key={thread.threadId} className="resource-card" onClick={() => router.push(`/community/thread-detail/${thread.threadId}`)}>
+                            <Image
+                                src={process.env.NEXT_PUBLIC_NGINX_URL + thread.threadPicture}
+                                alt={thread.title}
+                                width="368"
+                                height="200"
+                            />
+                            <div className="card-content">
+                                <h3>{thread.title}</h3>
+                                <div className="view-count">
+                                    <i className="pi pi-face-smile" />
+                                    <span>{thread.likes}</span>
+                                </div>
+                            </div>
+                        </Card>
+                    ))}
+                </div>
+                {totalThreads > 6 && (<Paginator className="Paginator" first={first} rows={rows} totalRecords={totalThreads} rowsPerPageOptions={[6, 12]} onPageChange={onPageChange} />)}
+            </div>
+
+            {/* 添加按钮 */}
+            <Button className="add-resource-button" icon="pi pi-plus" rounded aria-label="add-thread" onClick={() => setVisible(true)} />
+
+            {/* 发布帖子弹窗 */}
+            <Dialog
+                header="发布新帖子"
+                visible={visible}
+                onHide={() => setVisible(false)}
+                className="publish-dialog"
+                modal
+                footer={
+                    <div className="dialog-footer">
+                        <Button label="发布" icon="pi pi-check" onClick={handleSubmit} autoFocus />
+                        <Button label="取消" icon="pi pi-times" onClick={() => setVisible(false)} className="p-button-text" />
+                    </div>
+                }
+            >
+                <div className="publish-form">
+                    <div className="form-field">
+                        <label htmlFor="title">标题</label>
+                        <InputText
+                            id="title"
+                            value={formData.title}
+                            onChange={(e) => setFormData(prev => ({ ...prev, title: e.target.value }))}
+                            placeholder="请输入帖子标题"
+                            className="w-full"
+                        />
+                    </div>
+
+                    <div className="form-field">
+                        <label htmlFor="content">内容</label>
+                        <InputTextarea
+                            id="content"
+                            value={formData.content}
+                            onChange={(e) => setFormData(prev => ({ ...prev, content: e.target.value }))}
+                            rows={5}
+                            placeholder="请输入帖子内容"
+                            className="w-full"
+                        />
+                    </div>
+
+                    <div className="form-field">
+                        <label>封面图片</label>
+                        <FileUpload
+                            mode="basic"
+                            name="thread-image"
+                            url="/file" // 与后端交互的URL
+                            accept="image/*"
+                            maxFileSize={10000000000}
+                            chooseLabel="选择图片"
+                            className="w-full"
+                            onUpload={onUpload}
+                        />
+                    </div>
+                </div>
+            </Dialog>
+        </div>
+    );
+}
\ No newline at end of file
