Files

60 lines
2.7 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.
# 项目管理系统后端
依据《产品文档》与《API 文档》,Python + FastAPI 实现,数据持久化到 MySQLocean 库)。
## 目录结构
```
backend/
├── src/ # 后端源码
│ ├── __init__.py
│ ├── app.py # FastAPI 应用与路由
│ ├── config.py # 配置(环境变量)
│ ├── database.py # MySQL 连接
│ ├── auth.py # 登录、Token 校验
│ └── projects_repo.py # 项目与操作日志数据层
├── tests/ # 测试(由测试工程师维护)
├── schema.sql # 数据库表结构
├── .env.example # 环境变量示例
├── requirements.txt
└── API.md
```
## 环境与数据库
1. 复制 `.env.example``.env`,按本地 MySQL 填写 `MYSQL_*`
2. 执行 `schema.sql` 创建数据库 `ocean` 及表(users、projects、operation_logs)。**若已有 projects 表**,需补加四个日期原文列:见下方「数据库迁移」。
3. **首次使用**:在 `users` 表中插入至少一个用户;`password_hash` 需用 bcrypt 哈希。可在 Python 中执行:
```python
from app.auth import hash_password
print(hash_password("你的密码")) # 将输出写入 INSERT 语句
```
示例 SQL`INSERT INTO users (id, username, password_hash, role, display_name) VALUES ('user-1', 'market', '<上面输出的哈希>', '市场部', '市场部');`
## 启动服务
```bash
cd backend
source .venv/bin/activate
PYTHONPATH=src uvicorn app:app --reload --host 0.0.0.0 --port 8000
```
或进入 `src` 再启动:
```bash
cd backend/src
uvicorn app:app --reload --host 0.0.0.0 --port 8000
```
## 功能说明
- **认证**`POST /api/auth/login` 校验 users 表账号密码,签发 token(内存存储);后续请求头 `Authorization: Bearer <token>`。
- **项目列表**:分页,支持按项目名称/合同编号搜索(searchType + keyword)、按进度/费用筛选(progress、cost)、时间筛选(dateFilterType + dateFrom/dateTo,仅对「日期正常」项目)、日期异常筛选(dateAbnormal 为 true 时只返回日期异常项目)。
- **项目详情/新建/更新**:与 API 文档一致;新建仅市场部;更新时写入 operation_logs。
- **操作日志**:按项目 id 分页查询,含操作人、时间、修改摘要。
## 数据库迁移(已有 projects 表时)
1. **日期原文列**(若无):执行 `PYTHONPATH=src python scripts/migrate_add_date_str_columns.py`,或执行 README 中「增加四个 _str 列」的 SQL。
2. **三列改为字符串**(质保期截止日、中标合同金额、工程款拨付方式):执行 `PYTHONPATH=src python scripts/migrate_string_columns.py`。