项目亮点
1. 响应式设计与移动端适配
断点策略
css
/* Tailwind 断点 */
sm: 640px /* 小屏手机横屏 */
md: 768px /* 平板 */
lg: 1024px /* 桌面 */
xl: 1280px /* 大屏 */
移动端专属组件
| 组件 | 说明 |
|---|---|
MobileBottomNav.tsx | 移动端底部导航栏(首页/消息/通知/我的) |
MobileSidebar.tsx | 移动端侧边抽屉菜单 |
自适应布局
tsx
// 侧边栏:桌面显示,移动端隐藏
<ForumSidebar className="hidden md:block" />
// 底部导航:移动端显示,桌面隐藏
<MobileBottomNav className="md:hidden" />
// 主内容区:移动端留出底部导航空间
<main className="mb-16 md:mb-0">
触摸优化
- 按钮/链接最小点击区域 44x44px
- 滑动手势支持(侧边栏抽屉)
- 图片画廊支持左右滑动
2. 用户体验优化
骨架屏加载
tsx
// PostCardSkeleton.tsx - 帖子卡片骨架屏
<div className="animate-pulse">
<div className="h-4 bg-gray-200 rounded w-3/4" />
<div className="h-3 bg-gray-200 rounded w-1/2 mt-2" />
</div>
无限滚动
tsx
// useInfiniteScroll.ts - 自定义 Hook
const { isLoading, hasMore, loadMore } = useInfiniteScroll({
fetchData: (page) => getPosts(category, sort, page),
threshold: 200 // 距底部 200px 触发加载
});
键盘快捷键
typescript
// useKeyboardShortcuts.ts
const shortcuts = {
'n': '新建帖子',
'/': '搜索',
'j': '下一篇',
'k': '上一篇',
'l': '点赞',
'f': '收藏',
'?': '显示快捷键帮助'
};
草稿自动保存
- 编辑器内容实时保存到
drafts表 - 页面刷新/关闭不丢失
- 草稿箱统一管理
3. 明暗主题切换
tsx
// ThemeToggle.tsx + next-themes
<ThemeProvider attribute="class" defaultTheme="system">
<button onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}>
{theme === 'dark' ? <Sun /> : <Moon />}
</button>
</ThemeProvider>
- 跟随系统主题
- 手动切换保存到 localStorage
- CSS 变量实现主题色
4. 楼中楼回复系统
帖子
├── 1楼 回复
│ ├── 回复 @1楼: 楼中楼回复1
│ └── 回复 @1楼: 楼中楼回复2
├── 2楼 回复
└── 3楼 回复
└── 回复 @3楼: 楼中楼回复
- 支持无限层级嵌套
- 显示被回复者楼层号
- 点击引用跳转到原回复
5. 富文本编辑器
MarkdownEditor 组件功能
| 功能 | 说明 |
|---|---|
| Markdown 语法 | 标题、加粗、斜体、链接、代码块 |
| 表情选择器 | EmojiPicker 组件 |
| 图片上传 | 拖拽/粘贴/点击上传 |
| 实时预览 | 编辑/预览双栏切换 |
| 代码高亮 | react-syntax-highlighter |
6. 图片处理
上传优化
typescript
// Sharp 图片压缩
sharp(buffer)
.resize(1920, 1080, { fit: 'inside', withoutEnlargement: true })
.jpeg({ quality: 80 })
.toBuffer();
查看体验
| 组件 | 功能 |
|---|---|
ImageGallery | 多图网格展示 |
ImageViewer | 全屏查看、缩放、左右切换 |
7. 实时通知系统
通知类型:
├── new_reply: 帖子/回复被回复
├── like: 收到点赞
└── system: 系统通知
触发时机:
├── 创建回复 → 通知帖主/被回复者
└── 点赞 → 通知作者
- 顶部导航红点提示
- 通知下拉快速预览
- 点击跳转到对应帖子
8. 安全防护体系
| 层级 | 措施 |
|---|---|
| 传输层 | HTTPS (Nginx) |
| 应用层 | Helmet 安全头、CORS 限制 |
| 输入层 | XSS 过滤、参数验证、敏感词过滤 |
| 数据层 | 参数化查询防 SQL 注入 |
| 认证层 | bcrypt 密码加密、Session Token |
| 限流层 | 速率限制 (API/上传分离) |
9. 管理后台
| 功能 | 说明 |
|---|---|
| 数据概览 | 用户数、帖子数、回复数统计 |
| 用户管理 | 搜索、启用/禁用、删除 |
| 内容管理 | 帖子/回复审核删除 |
| 操作日志 | 管理员操作全记录、可追溯 |
10. 性能优化
| 优化点 | 实现 |
|---|---|
| 数据库索引 | 关键字段建立索引、全文索引 |
| 冗余字段 | reply_count、like_count 避免 COUNT 查询 |
| 连接池 | MySQL 20 连接池复用 |
| Gzip 压缩 | Nginx + Express compression |
| 静态资源缓存 | 1 年强缓存 + 文件哈希 |
| 图片懒加载 | 滚动到可视区域再加载 |
| 代码分割 | Vite 自动 chunk 分割 |
11. 开发体验
| 特性 | 说明 |
|---|---|
| TypeScript 全栈 | 前后端类型共享 |
| HMR 热更新 | Vite 毫秒级热更新 |
| ts-node-dev | 后端代码热重载 |
| 统一错误处理 | ErrorBoundary + 全局错误中间件 |
| 日志轮转 | Winston 每日轮转、14天保留 |
12. 无障碍支持
- Radix UI 原生无障碍支持
- 键盘导航完整支持
- ARIA 标签
- 焦点管理
- 屏幕阅读器兼容