Skip to content

About

校园技能互助与闲置交易平台|Vue 3 + Flask 全栈 C2C MVP

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

校园交换站 Campus Loop

Vue 3 Flask 3.1 8 API tests pass Build passing MIT License

面向校园的技能互助与闲置交易平台。将发布、检索、需求响应、即时沟通、交易状态和双方评价串成一条完整的 C2C 履约链路。

项目概览

校园交换站不是一个只负责“发帖子”的信息黄页,而是一套围绕校园轻交易设计的全栈 MVP:

  • 技能场景:支持免费分享、技能交换与付费服务,记录线上/线下服务方式和可用时间。
  • 闲置场景:支持交换、租赁与出售,记录物品成色、校区位置和价格条件。
  • 需求场景:当现有供给无法满足时,用户可以明确发布需求、预算、紧急程度与截止时间。
  • 履约闭环:从请求、接受/拒绝、消息沟通到完成交易与双向评价,关键状态均可追踪。

项目由个人完成产品规则、数据建模、接口设计与前后端实现。本次版本对一年前的 MVP 做了系统性重构:统一接口契约、修复权限与消息查询缺陷、补齐交易/需求响应/评价流程,并重新设计视觉与演示数据。

页面预览

首页

技能市场 需求广场
技能市场 需求广场

个人资料与统计

产品机制

flowchart LR
    A[注册 / 登录] --> B{从何开始?}
    B --> C[发布技能]
    B --> D[发布闲置]
    B --> E[发布需求]
    C --> F[检索与匹配]
    D --> F
    E --> G[他人响应]
    G --> F
    F --> H[消息沟通]
    H --> I[接受 / 拒绝]
    I --> J[履约进行中]
    J --> K[交易完成]
    K --> L[双方评价]
Loading

交易权限在服务端校验:

  • 只有资源所有者可以编辑或下架自己的技能、物品与需求。
  • 用户不能请求自己的技能、交换自己的物品或响应自己的需求。
  • 只有交易承接方可以接受或拒绝请求,交易双方才能查看和推进状态。
  • 只有已完成交易的参与者可以评价,同一参与者对同一交易只能评价一次。

技术架构

层级 技术 作用
前端 Vue 3、Vue Router、Pinia 页面、路由、登录态
UI Element Plus、SCSS 组件与响应式视觉系统
API Axios JWT 注入、统一错误处理
后端 Flask 3、Flask-JWT-Extended REST API、鉴权与权限规则
数据 SQLAlchemy 2、SQLite 7 类核心实体与关系建模
迁移 Flask-Migrate、Alembic 数据库版本管理
验证 unittest、Vite build API 业务回归与生产构建
.
├── app/
│   ├── api/                  # 认证、技能、物品、需求、消息、交易、评价
│   ├── models.py             # 7 类核心业务实体
│   └── config.py             # 数据库、JWT、CORS 配置
├── frontend/
│   ├── src/api/              # 前端接口契约
│   ├── src/components/       # 发布、编辑、响应与评价组件
│   ├── src/views/            # 13 个核心页面
│   └── src/styles/           # 视觉变量与全局样式
├── migrations/               # Alembic 迁移
├── tests/                    # 后端 API 回归测试
├── docs/screenshots/         # README 页面截图
├── init_db.py                # 幂等演示数据初始化
└── run.py                    # Flask 入口

本地运行

环境要求

  • Python 3.10+
  • Node.js 18+
  • npm 9+

1. 启动后端

python -m venv .venv

Windows PowerShell:

.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env
python init_db.py
python run.py

macOS / Linux:

source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python init_db.py
python run.py

后端默认运行在 http://127.0.0.1:5000,健康检查地址为 http://127.0.0.1:5000/api/v1/health。

2. 启动前端

另开一个终端:

cd frontend
npm ci
npm run dev

浏览器访问 http://127.0.0.1:3000。

演示账号

账号 密码
linan@example.com demo123
suyue@example.com demo123

init_db.py 会为旧版 SQLite 数据库补齐新增字段,并且仅在数据库为空时写入演示数据,不会覆盖已有记录。

API 概览

所有业务接口以 /api/v1 为前缀,目前覆盖 50+ 个 method-route 映射。常用入口如下:

模块 代表接口
系统 GET /health、GET /stats
认证 POST /auth/register、POST /auth/login、GET /auth/me
技能 GET/POST /skills、POST /skills/{id}/request_service
物品 GET/POST /items、GET /items/mine
需求 GET/POST /demands、POST /demands/{id}/responses
消息 GET /messages/conversations、POST /messages
交易 GET /transactions、PUT /transactions/{id}/respond
评价 POST /transactions/{id}/reviews、GET /reviews/received

分页接口同时兼容 per_page 和旧版 page_size 参数,以减少前后端升级期间的破坏性变更。

测试与构建

运行后端回归测试:

python -m unittest discover -s tests -v

测试覆盖身份契约、资源归属、分页搜索、需求响应、消息会话、技能交易生命周期、评价权限与物品交换归属校验。

运行前端生产构建:

cd frontend
npm run build

当前验证结果:

  • 后端 API:8/8 通过
  • 前端生产构建:通过
  • 浏览器验收:首页、技能、需求、详情、个人资料、交易评价与消息会话 通过

配置与安全说明

  • .env、SQLite 数据库、构建产物和依赖目录均已加入 .gitignore。
  • CORS 默认只允许本地前端地址;非本地部署前请配置 CORS_ORIGINS。
  • 生产环境必须替换 SECRET_KEY 与 JWT_SECRET_KEY。
  • 当前 JWT 注销黑名单保存在进程内存中;多实例部署应替换为 Redis 或数据库存储。
  • 演示版将图片以 URL/Base64 列表保存;生产场景应接入对象存储并增加内容审核。

License

MIT © 2026 Yu Quanjie

About

校园技能互助与闲置交易平台|Vue 3 + Flask 全栈 C2C MVP

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages