xiangqinxiaochengxu/README.md
2026-04-17 10:49:14 +08:00

345 lines
6.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.

# 相亲小程序项目 README
## 1. 项目简介
这是一个基于微信小程序的相亲活动与匹配平台,包含 3 个子系统:
1. `backend/`Python FastAPI 后端
2. `miniprogram/`:微信小程序原生前端
3. `admin-web/`Vue3 + Element Plus 后台管理端
当前系统已经完成基础主链路:
1. 微信登录
2. 用户资料编辑与提交审核
3. 后台审核
4. 活动发布、报名、查看我的活动
5. 匹配候选、感兴趣、我的匹配
6. AI 推荐基础能力
7. 公告管理与首页公告展示
8. 后台活动管理、公告管理、数据看板
## 2. 目录结构
```text
xqxcx/
├── backend/ # FastAPI 后端
├── miniprogram/ # 微信小程序
├── admin-web/ # Vue3 后台管理端
├── 开发规划.md
├── 功能差距清单.md
├── 验收清单.md
├── 上线准备清单.md
└── README.md
```
## 3. 环境要求
建议本地环境如下:
1. Python 3.11
2. Node.js 18+
3. npm 9+
4. MySQL 8.0
5. Redis 7.x
6. 微信开发者工具
## 4. 首次启动前准备
### 4.1 准备数据库
先创建数据库:
```sql
CREATE DATABASE dating_app DEFAULT CHARACTER SET utf8mb4;
```
### 4.2 准备 Redis
本地默认配置使用:
1. Host`127.0.0.1`
2. Port`6379`
3. DB`0`
目前代码里 Redis 主要是预留配置,后续通知和缓存能力会继续接入。
## 5. 后端启动说明
### 5.1 进入后端目录
```bash
cd backend
```
### 5.2 创建虚拟环境
Windows PowerShell 示例:
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
```
### 5.3 安装依赖
```bash
pip install -r requirements.txt
```
### 5.4 配置环境变量
`backend/.env.example` 复制为 `backend/.env`,然后按实际环境修改。
最少需要确认这些配置:
```env
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=123456
MYSQL_DATABASE=dating_app
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_DB=0
JWT_SECRET_KEY=replace_with_a_secure_secret
WX_APPID=your_wx_appid
WX_SECRET=your_wx_secret
COS_REGION=ap-beijing
COS_SECRET_ID=your_cos_secret_id
COS_SECRET_KEY=your_cos_secret_key
COS_BUCKET=your_cos_bucket
COS_BASE_URL=https://your-bucket.cos.ap-beijing.myqcloud.com
```
### 5.5 执行数据库迁移
```bash
alembic upgrade head
```
### 5.6 初始化管理员账号
```bash
python scripts/init_admin.py
```
默认管理员账号:
1. 用户名:`admin`
2. 密码:`Admin@123456`
第一次启动后请尽快修改密码。
### 5.7 启动后端服务
```bash
uvicorn main:app --reload
```
默认启动地址:
1. 服务地址:`http://127.0.0.1:8000`
2. API 前缀:`http://127.0.0.1:8000/api/v1`
3. 健康检查:`http://127.0.0.1:8000/health`
### 5.8 后端快速自检
可以先访问:
```text
http://127.0.0.1:8000/health
```
如果返回:
```json
{"status":"ok"}
```
说明后端已经正常启动。
## 6. 后台管理端启动说明
### 6.1 进入后台目录
```bash
cd admin-web
```
### 6.2 安装依赖
```bash
npm install
```
### 6.3 启动开发服务
```bash
npm run dev
```
默认会输出一个本地地址,通常类似:
```text
http://127.0.0.1:5173
```
### 6.4 登录后台
使用管理员账号登录:
1. 用户名:`admin`
2. 密码:`Admin@123456`
后台当前已支持:
1. 登录
2. 待审核队列
3. 活动管理
4. 公告管理
5. 数据看板
## 7. 微信小程序启动说明
### 7.1 打开项目
使用微信开发者工具打开目录:
```text
miniprogram/
```
### 7.2 检查接口地址
当前小程序默认使用本地接口:
1. `miniprogram/utils/constants.js`
2. `miniprogram/app.js`
默认地址为:
```text
http://localhost:8000/api/v1
```
如果你的后端不是运行在本机,请改成实际地址。
### 7.3 开发者工具本地调试配置
如果你在本地联调,请在微信开发者工具中勾选:
1. `不校验合法域名`
2. `不校验 HTTPS 证书`
否则会出现错误:
```text
request:fail url not in domain list
```
### 7.4 真机调试说明
真机调试时不要使用 `localhost`,因为:
1. 手机访问不到你电脑的 `localhost`
2. 微信小程序要求请求域名在后台配置合法域名
真机调试需要:
1. 使用一个外网可访问的后端地址
2. 最好使用 HTTPS
3. 在微信公众平台配置 `request 合法域名`
## 8. 推荐启动顺序
建议按下面顺序启动:
1. 启动 MySQL
2. 启动 Redis
3. 启动后端 `backend/`
4. 启动后台 `admin-web/`
5. 使用微信开发者工具打开 `miniprogram/`
## 9. 常见问题
### 9.1 小程序报错 `request:fail url not in domain list`
原因:
1. 当前请求域名不在微信合法域名列表里
2. 或开发者工具未关闭合法域名校验
解决方式:
1. 本地开发时在微信开发者工具里关闭域名校验
2. 真机或上线时,换成 HTTPS 域名并配置到微信公众平台
### 9.2 后台登录失败
检查:
1. 后端是否已启动
2. 是否已执行 `python scripts/init_admin.py`
3. 默认账号密码是否被修改
### 9.3 数据库迁移失败
检查:
1. `backend/.env` 中的 MySQL 配置是否正确
2. 数据库 `dating_app` 是否已创建
3. MySQL 服务是否已经启动
### 9.4 小程序图片不显示
当前代码已经清理了远程占位图依赖。
如果真实图片不显示,通常是:
1. 返回的图片地址不可访问
2. 图片域名不在微信合法域名配置中
## 10. 当前功能完成情况
当前已完成:
1. 用户登录、资料编辑、审核提交
2. 后台审核
3. 活动列表、详情、报名、我的活动
4. 匹配候选、感兴趣、我的匹配
5. AI 推荐基础能力
6. 公告列表、详情、后台公告管理
7. 后台活动管理、数据看板
8. 后端统一错误响应
9. 项目启动文档、验收清单、上线准备清单
当前仍建议继续补充:
1. 微信订阅消息
2. Redis 推荐缓存与频控
3. COS 真实上传
4. 更完整的后台用户管理与系统设置
5. 自动化测试
6. 生产部署验证
## 11. 相关文档
根目录已提供这些文档:
1. `相亲小程序开发详情.md`
2. `开发规划.md`
3. `功能差距清单.md`
4. `验收清单.md`
5. `上线准备清单.md`
建议使用顺序:
1. 先看 `README.md` 启动项目
2. 再按 `验收清单.md` 做联调
3. 最后按 `上线准备清单.md` 准备部署