# 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` 后按“快速启动”体验完整功能。