-
用户系统
- 📱 手机号注册/登录(支持验证码和密码)
- 👤 个人主页与资料管理
- 🔐 基于 JWT 的身份认证
- 👥 分级权限体系(管理员/编辑/普通用户)
-
作品系统
- 📷 作品发布(支持多图上传)
- 🖼️ 作品浏览与详情展示
- ✏️ 作品编辑与删除
- 🏷️ AI 智能标签生成
- 📊 EXIF 信息展示
-
社交互动
- ❤️ 点赞与收藏
- 💬 评论与回复
- 👣 关注用户
- 📰 个性化 Feed 流
-
拍摄地系统
- 🗺️ 高德地图集成
- 📍 拍摄地点标记与推荐
- 🤖 AI 拍摄建议
- 🏞️ 地点详情与作品展示
-
学习模块
- 📚 摄影课程浏览
- 📝 学习笔记管理
- 📈 学习进度跟踪
-
器材百科
- 📸 相机/镜头数据库
- 🔍 器材详情与参数
- 💼 个人器材库管理
- 🤖 AI 器材选购建议
-
活动功能
- 🎉 约拍活动发布与报名
- 🏆 摄影挑战赛
- 🗳️ 作品投票与排行
-
AI 功能
- 🏷️ 智能标签生成(基于作品内容和 EXIF)
- 💡 拍摄建议(根据地点特征)
- 🛒 器材推荐(根据预算和需求)
- 💬 摄影问答助手
- 框架: React 18 + Vite
- 路由: React Router v6
- UI 组件: Ant Design 5
- 状态管理: Zustand
- HTTP 客户端: Axios
- 地图: 高德地图 API
- 样式: CSS Modules
- 运行时: Node.js 16+
- 框架: Express 4
- 数据库: MySQL 8.0
- 缓存: Redis 6.0
- 认证: JWT (jsonwebtoken)
- 文件上传: Multer
- 密码加密: bcryptjs
- AI 服务: 阿里云千问大模型
- Node.js >= 16.0.0
- MySQL >= 5.7
- Redis >= 5.0
- 克隆项目
git clone https://github.com/Mark-kow/photography-community.git
cd photography-community- 配置后端
cd backend
npm install
# 复制环境配置文件并修改
cp .env.example .env
# 编辑 .env 文件,配置数据库密码、Redis、JWT密钥等- 配置前端
cd ../frontend
npm install
# 复制环境配置文件并修改
cp .env.example .env
# 编辑 .env 文件,配置高德地图 API Key- 初始化数据库
# 启动 MySQL 服务
sudo systemctl start mysql
# 执行数据库迁移脚本
cd ../backend/database
chmod +x migrate.sh
./migrate.sh- 启动 Redis
# 启动 Redis 服务
sudo systemctl start redis
# 或
redis-server- 启动应用
# 方式一:使用启动脚本(推荐)
cd ../..
chmod +x start.sh
./start.sh
# 方式二:手动启动
# 终端1 - 启动后端
cd backend
npm run dev
# 终端2 - 启动前端
cd frontend
npm run dev- 访问应用
- 前端地址: http://localhost:5173
- 后端 API: http://localhost:3000
管理员:
手机号: 13800138001
密码: 123456
编辑:
手机号: 13800138002
密码: 123456
普通用户:
手机号: 13800138003
密码: 123456
photography-community/
├── backend/ # 后端服务
│ ├── database/ # 数据库脚本
│ │ ├── init.sql # 核心表结构
│ │ ├── locations.sql # 拍摄地模块
│ │ ├── courses.sql # 课程模块
│ │ ├── equipments.sql # 器材模块
│ │ ├── activities.sql # 活动模块
│ │ ├── challenges.sql # 挑战赛模块
│ │ └── migrate.sh # 迁移脚本
│ ├── src/
│ │ ├── config/ # 配置文件(数据库、Redis)
│ │ ├── controllers/ # 控制器
│ │ ├── middleware/ # 中间件(认证等)
│ │ ├── routes/ # 路由定义
│ │ ├── utils/ # 工具函数
│ │ └── server.js # 服务器入口
│ ├── uploads/ # 上传文件目录
│ ├── logs/ # 日志文件
│ ├── .env.example # 环境变量模板
│ └── package.json
│
├── frontend/ # 前端应用
│ ├── src/
│ │ ├── components/ # 公共组件
│ │ ├── pages/ # 页面组件
│ │ ├── store/ # 状态管理
│ │ ├── utils/ # 工具函数
│ │ ├── config/ # 配置文件
│ │ ├── App.jsx # 应用入口
│ │ └── main.jsx # 主入口
│ ├── .env.example # 环境变量模板
│ └── package.json
│
├── .gitignore # Git 忽略配置
├── start.sh # 一键启动脚本
├── DEPLOYMENT.md # 部署指南
├── DEVELOPMENT_GUIDE.md # 开发指南
├── TESTING_GUIDE.md # 测试指南
├── TROUBLESHOOTING.md # 故障排查
├── CONTRIBUTING.md # 贡献指南
├── LICENSE # 开源许可证
└── README.md # 项目说明
# 服务器配置
NODE_ENV=development
PORT=3000
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=photograph_app
# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
# JWT配置
JWT_SECRET=your-secret-key-change-in-production
JWT_EXPIRES_IN=2h
# 千问AI配置(可选,用于AI功能)
QWEN_API_KEY=your-qwen-api-key# 高德地图 API Key(用于地图功能)
VITE_AMAP_KEY=your-amap-key
# API 基础路径
VITE_API_BASE_URL=/api/v1- 千问 AI: https://dashscope.aliyun.com/
- 高德地图: https://lbs.amap.com/
# 运行后端测试
cd backend
npm test
# 运行前端测试
cd frontend
npm test详细的部署说明请参考 DEPLOYMENT.md
- 修改环境变量为生产配置
- 使用 PM2 管理 Node.js 进程
- 配置 Nginx 反向代理
- 启用 HTTPS
- 配置数据库备份
- 设置监控和日志
欢迎贡献代码!请查看 CONTRIBUTING.md 了解详细信息。
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
- 添加单元测试和集成测试
- 实现 CI/CD 流程
- 优化图片压缩和 CDN 集成
- 添加 WebSocket 实时通知
- 移动端适配优化
- 国际化支持
- PWA 支持
本项目采用 MIT License 开源协议。
- 开发者 - Mr.Kow
- React - 前端框架
- Ant Design - UI 组件库
- Express - 后端框架
- 阿里云千问 - AI 服务
- 高德地图 - 地图服务
如有问题或建议,欢迎通过以下方式联系:
- 提交 Issue
- 发送邮件至: [email protected]
Made with ❤️ by Photography Community Team
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev前端应用将运行在 http://localhost:5173
| 接口 | 方法 | 说明 |
|---|---|---|
/api/v1/auth/send-code |
POST | 发送验证码 |
/api/v1/auth/register |
POST | 用户注册 |
/api/v1/auth/login |
POST | 用户登录 |
/api/v1/auth/logout |
POST | 用户登出 |
| 接口 | 方法 | 说明 |
|---|---|---|
/api/v1/users/me |
GET | 获取当前用户信息 |
/api/v1/users/me |
PUT | 更新用户信息 |
/api/v1/users/:id |
GET | 获取用户资料 |
/api/v1/users/:id/follow |
POST | 关注用户 |
/api/v1/users/:id/follow |
DELETE | 取消关注 |
| 接口 | 方法 | 说明 |
|---|---|---|
/api/v1/works/feed |
GET | 获取推荐Feed流 |
/api/v1/works/following |
GET | 获取关注动态 |
/api/v1/works/search |
GET | 搜索作品 |
/api/v1/works/:id |
GET | 获取作品详情 |
/api/v1/works |
POST | 发布作品 |
/api/v1/works/:id/like |
POST | 点赞作品 |
/api/v1/works/:id/collect |
POST | 收藏作品 |
| 接口 | 方法 | 说明 |
|---|---|---|
/api/v1/comments/work/:workId |
GET | 获取作品评论 |
/api/v1/comments |
POST | 发表评论 |
/api/v1/comments/:id |
DELETE | 删除评论 |
- 支持手机号+验证码注册
- 支持手机号+密码登录
- JWT Token 认证机制
- 开发环境验证码在控制台显示
- 支持多图上传(最多9张)
- 可添加标题、描述、地点、器材信息
- 作品列表瀑布流展示
- 作品详情页展示完整信息
- 关注/取消关注用户
- 点赞/取消点赞作品
- 收藏/取消收藏作品
- 发表评论和回复
- 展示用户基本信息
- 统计数据(作品数、粉丝数、关注数)
- 用户作品展示
系统已预置测试账号,可直接登录体验:
手机号:13800138001
密码:123456
手机号:13800138002
密码:123456
手机号:13800138003
密码:123456
# 服务配置
NODE_ENV=development
PORT=3000
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=photograph_app
# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379
# JWT配置
JWT_SECRET=your_secret_key
JWT_EXPIRES_IN=2h
JWT_REFRESH_EXPIRES_IN=7d
# 文件上传配置
UPLOAD_DIR=./uploads
MAX_FILE_SIZE=10485760主要数据表:
- users - 用户表
- works - 作品表
- comments - 评论表
- follows - 关注关系表
- likes - 点赞表
- collections - 收藏表
详细表结构请查看 backend/database/init.sql
- 主色调:橙色 (#FF6B35)
- 设计风格:简约现代、视觉优先
- 响应式布局,支持多种设备
根据需求文档,后续版本将实现:
- 地点管理和打卡
- 器材百科
- 课程学习系统
- 约拍活动
- 挑战赛功能
- 器材商城
- 课程付费
- 服务预约
- 会员体系
欢迎提交 Issue 和 Pull Request!
MIT License
如有问题,请通过以下方式联系:
- 提交 Issue
- 邮件联系
Enjoy Photography! 📸