Files
hero920103 57d9866dab feat: PhotoWall 毕业照存储系统初始版本
后端: Go(Gin+GORM+MySQL+Redis)
- 17张业务表(yz_pw_前缀), 自动迁移
- JWT认证(3小时) + 盐+MD5密码 + 图形验证码
- 班级CRUD/加入(8人姓名验证/邀请码)/审核/30天自动清理
- 系统配置(16项)/菜单管理(动态路由)/数据统计
- 文件MD5去重/数据隔离/账号封禁/敏感词DFA检测

前端: Vue3+Vite+Element Plus+Less+ECharts+FontAwesome
- 动态路由(数据库菜单驱动)
- 蓝白配色, H5响应式
- 登录/注册/忘记密码/个人中心
- 班级创建向导/详情/加入/列表
- 管理后台: 审核/配置/菜单/统计/用户/敏感词

数据库: MySQL 10.31.100.3:3306/photowall
管理员: hero920103 / 920103
2026-09-03 05:55:23 +08:00

193 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PhotoWall 毕业照存储系统
全球学校毕业照存储与同学联络平台。支持国家→省/州→县/区三级组织架构,班级唯一毕业照,每人每班级10张个人照片,8人姓名验证加入,平台审核机制。
## 技术栈
- **后端**: Go (Gin + GORM + MySQL + Redis)
- **前端**: Vue3 + Vite + Element Plus + Less + ECharts + FontAwesome
- **数据库**: MySQL 5.7+ (utf8mb4, 表前缀 `yz_pw_`)
- **认证**: JWT (3小时有效期) + 盐+MD5密码 + 图形验证码
## 快速启动
### 1. 环境要求
- Go 1.21+
- Node.js 16+
- MySQL 5.7+ (需提前创建数据库 `photowall`)
- Redis (可选,未安装时自动降级为内存模式)
### 2. 数据库配置
编辑 `go/internal/config/config.go` 或设置环境变量:
```bash
# 默认配置
DB_HOST=10.31.100.3
DB_PORT=3306
DB_USER=photowall
DB_PASSWORD=Dfn47yeKpyJfwz8n
DB_NAME=photowall
```
提前在 MySQL 中创建数据库:
```sql
CREATE DATABASE photowall DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
### 3. 启动后端
```bash
cd go
go run ./cmd/server
# 或编译后运行
go build -o photowall.exe ./cmd/server
./photowall.exe
```
后端启动后自动:
- 连接 MySQL 并创建所有数据表(表前缀 `yz_pw_`)
- 创建超级管理员账号 `hero920103` / 密码 `920103`
- 初始化16项系统配置、20个默认菜单、示例地区数据(中/美/英/日)
- 启动定时任务(每小时检查过期班级,30天未补齐自动删除)
后端端口:**8010**
### 4. 启动前端
```bash
cd vue
npm install
npm run dev
```
前端端口:**8011**,自动代理 `/api` 和 `/uploads` 到后端 8010。
### 5. 登录
- 管理员账号:`hero920103` / `920103`
- 开发万能验证码:`888888`(任意 captcha_id 均可通过)
## 功能清单
### 用户系统
- 注册/登录(图形验证码)
- 忘记密码(邮箱重置码,开发模式直接返回)
- 短信验证码登录(预留,需配置短信服务商)
- 微信扫码登录(预留,需配置微信开放平台)
- JWT 3小时有效期,超时强制跳转登录
- 盐+MD5密码加密
- 个人资料管理(昵称、邮箱、简介)
- 学习履历管理(必须有履历才能创建班级)
- 联系方式管理(邮箱2/QQ5/微信2/手机5/住址1/工作单位1)
### 组织架构
- 三级地区:国家 → 省/州 → 县/区(最低级是县)
- 学校管理(大学/职业学校/高中/初中/小学/幼儿园/其他)
- 学院管理(仅大学/职业学校有学院层级)
- 示例地区种子数据(中国含江苏连云港海州区)
### 班级系统
- 班级创建(4步向导:选地区→选学校→填信息→上传毕业照+同学名单)
- 班级唯一性约束(学校+学院+年级+班号+毕业年份)
- 毕业照唯一(每个班级一张)
- 同学名单(创建时必须录入,至少8人)
- 老师名单
- 每人每班级最多10张个人照片
- 加入班级两种方式:
- 管理员邀请码
- 搜索+正确说出至少8位同学姓名
- 管理员转移(只能转给同班同学)
- 成员管理(移除成员)
### 审核机制
- 班级创建后进入待审核状态
- 少于8人直接打回
- 平台管理员巡查发现照片与名单不符可打回
- 打回后30天内未补齐自动删除班级
- 审核日志记录
### 平台管理
- 数据统计仪表盘(用户/学校/班级/照片核心指标 + 增长趋势 + 分布图表 + 地区TOP10)
- 系统配置管理(16项配置,5个分类:基础/极验/短信/微信/存储)
- 菜单管理(动态路由数据源,树形结构,增删改查)
- 用户管理(封禁/解封账号,封禁原因记录)
- 敏感词全局屏蔽(DFA算法,增删改查,启用/禁用)
- 审核管理(审核队列、通过、打回、手动删除、审核日志)
### 技术特性
- 动态路由(菜单存储在数据库,登录后按角色动态加载)
- 文件上传MD5去重(重复文件直接返回已有路径,ref_count引用计数)
- 数据隔离(班级照片和联系方式只有班级成员或管理员可见)
- Redis集成(验证码/缓存,连接失败自动降级内存模式)
- 敏感词检测(班级创建时自动检测名称)
- 账号封禁(被封禁用户无法登录)
- H5响应式适配
- CORS跨域支持
## 目录结构
```
photowall/
├── go/ # 后端
│ ├── cmd/server/main.go # 入口
│ ├── internal/
│ │ ├── config/ # 配置
│ │ ├── database/ # 数据库连接+迁移+种子
│ │ ├── model/ # 数据模型(16+张表)
│ │ ├── service/ # 业务逻辑
│ │ ├── handler/ # HTTP处理器
│ │ ├── middleware/ # 中间件(JWT认证)
│ │ ├── router/ # 路由注册
│ │ └── scheduler/ # 定时任务
│ ├── pkg/ # 工具包
│ │ ├── jwt/ # JWT
│ │ ├── hash/ # 盐+MD5
│ │ ├── response/ # 统一响应
│ │ ├── captcha/ # 图形验证码
│ │ ├── redis/ # Redis+内存降级
│ │ └── sensitive/ # DFA敏感词检测
│ ├── uploads/ # 上传文件目录
│ └── photowall.exe # 编译产物
├── vue/ # 前端
│ ├── src/
│ │ ├── api/ # API封装
│ │ ├── assets/ # 全局样式(Less蓝白配色)
│ │ ├── composables/ # useAuth等
│ │ ├── router/ # 动态路由
│ │ ├── views/ # 页面
│ │ │ ├── auth/ # 登录/注册/忘记密码
│ │ │ ├── home/ # 首页
│ │ │ ├── class/ # 班级(list/edit/detail/join)
│ │ │ ├── normalsettings/ # 个人中心等
│ │ │ └── admin/ # 管理(审核/配置/菜单/统计/用户/敏感词)
│ │ ├── App.vue # 布局(侧边栏+顶部栏)
│ │ └── main.js # 入口
│ └── dist/ # 构建产物
└── doc/ # 文档
└── 立项说明.md # 开发基准文档
```
## 第三方服务配置
在「系统管理 → 系统配置」中配置以下参数(留空则处于开发模式):
| 分类 | 配置项 | 获取地址 |
|------|--------|----------|
| 极验 | geetest_id / geetest_key | https://www.geetest.com |
| 短信 | sms_access_key / sms_secret_key / sms_sign_name / sms_template_code | 阿里云/腾讯云短信控制台 |
| 微信 | wechat_app_id / wechat_app_secret / wechat_redirect_uri | https://open.weixin.qq.com |
## 开发说明
- 开发万能验证码:`888888`
- 忘记密码重置码:开发模式直接在接口返回(生产需配置SMTP邮件服务)
- 短信验证码:开发模式直接返回(需配置短信服务商后真实发送)
- Redis:未安装时自动降级为内存模式,不影响功能
- 表前缀:所有业务表均以 `yz_pw_` 开头
## UniApp 版本
规划中,用于生成 APK 和小程序端源码。详见 `doc/立项说明.md`。