# campus **Repository Path**: gitc_1_0/campus ## Basic Information - **Project Name**: campus - **Description**: 校园食物评价系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-15 - **Last Updated**: 2026-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 校园食堂及周边点评系统 > 基于 Spring Boot 3 + Vue 3 + Element Plus 的完整前后端分离项目,支持普通用户互动与管理员运营。 --- ## 一、快速启动 ### 1. 环境要求 - JDK 17+ - Maven 3.8+ - Node 18+ & npm 9+ - MySQL 8+(或内置 H2,开发用) ### 2. 启动后端(H2 开发模式,含自动种子数据) ```bash cd backend # Windows PowerShell $env:SPRING_PROFILES_ACTIVE='h2'; mvn spring-boot:run -DskipTests # Linux/macOS SPRING_PROFILES_ACTIVE=h2 mvn spring-boot:run -DskipTests ``` 默认端口 8080,自动创建管理员/普通用户数据: - 管理员:`admin / Admin12345` - 用户:`alice / User12345`,`bob / User12345` ### 3. 启动前端 ```bash cd frontend npm install npm run dev ``` 默认端口 5173,自动代理到后端。 ### 4. 一键联调验证 ```powershell powershell scripts/e2e.ps1 ``` 自动跑通登录→发帖→点评→点赞→举报→后台处理全流程,验证接口连通性。 --- ## 二、系统模块总览 | 端 | 模块 | 主要页面 | 核心接口 | 功能简述 | |----|------|----------|----------|----------| | 前台 | 首页 | `/home` | `/api/stats/restaurants/rank` | 热门餐厅、最新帖子、标签云 | | | 餐厅 | `/restaurants` | `/api/restaurants` | 列表、搜索、详情、点评、收藏 | | | 排行榜 | `/rankings` | `/api/stats/restaurants/rank` | 按评分/点评数排序,筛选食堂/校外 | | | 帖子 | `/posts` | `/api/posts` | 信息发布、分类、搜索、评论、点赞、举报 | | | 标签 | `/tags` | `/api/tags` | 关键词搜索、一键跳转帖子搜索 | | | 个人中心 | `/me/*` | `/api/me/*` | 资料、收藏、通知、点赞、评论、我的帖子/点评 | | 后台 | 仪表盘 | `/admin/dashboard` | `/api/admin/stats/overview` | 今日新增、待处理举报、快捷入口 | | | 审批队列 | `/admin/queue` | `/api/admin/restaurants?status=PENDING` | 待审核餐厅、待处理举报一键审批 | | | 操作日志 | `/admin/audit-logs` | `/api/admin/audit-logs` | 管理员请求记录,支持多条件筛选 | | | 用户管理 | `/admin/users` | `/api/admin/users` | 分页、禁用/启用、重置密码 | | | 餐厅管理 | `/admin/restaurants` | `/api/admin/restaurants` | 上下架、编辑、审核 | | | 帖子管理 | `/admin/posts` | `/api/admin/posts` | 隐藏/恢复、删除 | | | 点评管理 | `/admin/reviews` | `/api/admin/reviews` | 隐藏/恢复、删除 | | | 评论管理 | `/admin/comments` | `/api/admin/comments` | 隐藏/恢复、删除 | | | 举报管理 | `/admin/reports` | `/api/admin/reports` | 查看、标记已处理/驳回 | --- ## 三、角色与权限 | 角色 | 前台可见 | 后台入口 | 核心区别 | |------|----------|----------|----------| | 游客 | 首页/餐厅/排行榜 | ❌ | 只能浏览公开内容 | | 用户 | 全部前台功能 + 个人中心 | ❌ | 发帖、点评、点赞、收藏、举报 | | 管理员 | 仅顶部“后台管理”入口 | ✅ | 进入后台,运营与治理全站数据 | > 后端通过 Spring Security 拦截:
> - `/api/admin/**` → 仅 `ROLE_ADMIN`
> - 其余接口 → 登录后按业务规则鉴权(如只能删自己的评论) --- ## 四、数据库表结构(核心 ER 简图) ``` users(1) ←→ restaurants(N) ←→ reviews(N) ↑ ↑ ↑ | | | posts(N) post_comments(N) reports(N) ↑ ↑ ↑ | | | likes(3 类) favorites notifications ``` ### 1. 用户相关 - **users**(id, username, phone, email, password_hash, nickname, avatar_url, signature, role, status, last_login_at, created_at, updated_at, deleted_at) ### 2. 餐厅与点评 - **restaurants**(id, name, type, address, open_hours, phone, description, cover_image, images, status, created_by, avg_rating, review_count, created_at, updated_at) - **reviews**(id, restaurant_id, user_id, rating, content, images, spend, status, like_count, created_at, updated_at) ### 3. 帖子与评论 - **posts**(id, author_id, restaurant_id, title, content, images, category, status, view_count, like_count, created_at, updated_at) - **post_comments**(id, post_id, user_id, content, status, like_count, created_at, updated_at) ### 4. 标签体系 - **tags**(id, name, created_at) - **restaurant_tags**(restaurant_id, tag_id) - **post_tags**(post_id, tag_id) ### 5. 互动 - **restaurant_favorites**(id, user_id, restaurant_id, created_at) - **post_likes / review_likes / comment_likes**(id, user_id, 目标_id, created_at) ### 6. 举报与通知 - **reports**(id, reporter_id, target_type, target_id, reason, status, handled_by, handled_at, created_at) - **notifications**(id, user_id, type, title, content, ref_type, ref_id, read_at, created_at) ### 7. 管理员审计 - **admin_audit_logs**(id, admin_id, method, path, query, status_code, duration_ms, ip, user_agent, created_at) --- ## 五、关键实现逻辑 ### 1. 餐厅审核流程 1. 用户提交餐厅 → status=PENDING 2. 管理员在“审批队列”查看 → 通过/驳回 3. 通过 → status=PUBLISHED(前台可见) 4. 驳回 → 可选重新编辑再提交 ### 2. 点赞/收藏幂等 - 前端点击 → POST `/api/{type}/{id}/like` - 后端检查记录存在则删除,否则插入 → 返回最新 likeCount 与 liked 状态 - 同一用户同一目标仅一条记录,保证幂等 ### 3. 举报处理 - 用户提交举报 → status=OPEN - 管理员在“审批队列”或“举报管理”查看 → 标记已处理/驳回 - 已处理 → 可对被举报内容做隐藏/删除等后续操作(目前仅状态流转) ### 4. 操作日志自动采集 - Spring HandlerInterceptor 拦截 `/api/admin/**`(除自身日志接口) - 记录管理员 ID、请求方法、路径、参数、响应码、耗时、IP、UA - 支持按管理员/状态码/关键词/时间段分页查询 ### 5. 数据种子与联调 - DevDataSeeder(仅 h2/mysql 且 `app.seed.enabled=true`)自动创建 2 用户+1 管理员+4 餐厅+3 帖子+评论/点赞/举报 - 提供 PowerShell 脚本 `scripts/e2e.ps1` 一键跑通登录→发帖→点评→点赞→举报→后台处理 全流程,用于 CI 或手工验收 --- ## 六、测试与验证 | 类型 | 命令 | |------|------| | 后端单元测试 | `mvn test` | | 前端类型检查 | `npm run typecheck` | | 前端构建 | `npm run build` | | 联调脚本 | `powershell scripts/e2e.ps1` | --- ## 七、下一步可扩展 1. 消息中心汇总页(通知/点赞/评论合并,一键已读) 2. 餐厅标签搜索筛选(多选标签交集) 3. 点评有用/无用投票(扩展互动维度) 4. 餐厅菜单子表、菜品评分 5. 移动端 PWA 安装图标与离线缓存 6. 生产环境 Docker-Compose 一键启动(含 Nginx 反向代理、HTTPS 证书自动续期) --- > 代码与脚本均已在仓库,可直接 `git clone` 后按“快速启动”体验完整功能。