# 农易富 · 农产品收购交易平台 — 快速启动手册

> 本文档是**唯一权威的快速启动入口**。重新安装 CodeBuddy / 更换目录后，把本文件夹整体拷贝过去，在**新项目根目录**打开终端执行下列命令即可启动，无需任何额外配置。

## 1. 项目一句话

BS 版农产品收购平台，业务链路：**农户管理 → 过磅称重 → 电子支付 → 反向开票 → 统计报表 → 可视化大屏**。后端 C#/.NET，前端 Vue3，数据库在线 MySQL，图片存阿里云 OSS，身份证识别走阿里云市场 OCR。

## 2. 端口约定（全局固定，勿乱改）

| 服务 | 端口 | 说明 |
| --- | --- | --- |
| 后端 API | **9002** | `appsettings.json` 的 `Server:LanPort`、`launchSettings.json` |
| 前端 dev server | **9000** | `frontend/vite.config.ts`，代理 `/api`、`/uploads` → `http://localhost:9002` |

## 3. 快速启动（PowerShell，在项目根目录执行）

### 后端（必须先编译，再启动）

```powershell
# 1) 编译（改过后端代码必须执行；未改过可跳过）
dotnet build backend/AgriculturalPlatform.Api/AgriculturalPlatform.Api.csproj -c Debug

# 2) 启动（脚本用 dotnet run --no-build，加载的是第 1 步编译产物）
powershell -ExecutionPolicy Bypass -File scripts/start-backend.ps1
```

### 前端

```powershell
Start-Process -FilePath "npm.cmd" -ArgumentList @("run","dev") -WorkingDirectory "frontend" -RedirectStandardOutput "frontend-dev.log" -RedirectStandardError "frontend-dev.err.log" -WindowStyle Hidden
```

### 验证启动成功

```powershell
Get-NetTCPConnection -LocalPort 9002,9000 -ErrorAction SilentlyContinue | Where-Object State -eq Listen
```

- 后端健康检查：`http://localhost:9002/api/auth/login`（POST `{"username":"admin","password":"123456"}`）应返回 token
- 浏览器打开 `http://localhost:9000` 登录

## 4. 登录账号

| 账号 | 密码 | 角色 |
| --- | --- | --- |
| admin | 123456 | 系统管理员 |
| company | 123456 | 公司管理员 |
| station1 / station2 | 123456 | 收购站员工 |
| individual | 123456 | 收购个体 |

## 5. 数据库（在线 MySQL，无需本地部署）

连接串在 `backend/AgriculturalPlatform.Api/appsettings.json` 的 `ConnectionStrings:Default`：

```
server=116.198.221.105;port=3306;database=F8Web;user=f8web;charset=utf8mb4
```

首次启动自动 `EnsureCreated + Seed` 建表并写入演示数据（幂等，可重复启动）。数据库连接失败时检查该连接串与 MySQL 白名单。

## 6. 常见坑（务必先看）

1. **改后端代码后必须 `dotnet build` 再启动**：`start-backend.ps1` 是 `--no-build`，会加载旧 DLL，导致"改了半天没生效"（历史踩坑：`/menus/my` 401 登录失败即因此）。
2. **PowerShell 中文路径乱码**：所有命令用**相对路径**并在项目根执行，不要拼写绝对中文路径。
3. **git commit 中文消息报"字符串缺少终止符"**：PowerShell 编码问题，提交信息用英文。
4. **浏览器自动化**：`playwright-cli` 默认找 Chrome，本机需用 Edge（路径 `C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe`）；快速排查接口问题时直接用 PowerShell `Invoke-WebRequest` 测 API 更快。
5. **停服务**：`Get-NetTCPConnection -LocalPort 9002,9000` 找到 OwningProcess 后 `Stop-Process -Id <pid> -Force`。

## 7. Git 私有仓库

- 远程：`https://github.bbitcn.net/fanhongcai/F8WebAI.git`（`origin`）
- 账号：`fanhongcai@bbitcn.net`
- 自动化终端无法弹出 Git 登录窗时，用内嵌凭据 URL 推送：
  `git push https://fanhongcai%40bbitcn.net:<密码>@github.bbitcn.net/fanhongcai/F8WebAI.git main`
- 注意：`F8Web` 远程（缺仓库路径）与 `F8WebAI`（与 origin 重复）均已清理，只剩 `origin`

## 8. 关键文件索引

| 用途 | 路径 |
| --- | --- |
| 后端入口 / 服务注册 | `backend/AgriculturalPlatform.Api/Program.cs` |
| 后端配置（DB/OSS/OCR/JWT/端口） | `backend/AgriculturalPlatform.Api/appsettings.json` |
| 数据模型 / DbContext / 种子数据 | `backend/AgriculturalPlatform.Api/Models`、`Data/` |
| JWT 签发 / 当前用户 / 数据权限 | `Services/JwtService.cs`、`CurrentUser.cs`、`DataScopeService.cs` |
| 登录接口 / 登录页 | `Controllers/AuthController.cs`、`frontend/src/views/Login.vue` |
| 菜单权限 | `Controllers/MenusController.cs` |
| 前端 API 封装 / 请求拦截 | `frontend/src/api/` |
| 主布局 / 顶栏（日历+天气+Logo 字典） | `frontend/src/layouts/MainLayout.vue`、`HeaderCalendar.vue`、`HeaderWeather.vue` |
| 天气数据（全局共享 composable） | `frontend/src/composables/useWeather.ts` |
| 可视化大屏 | `frontend/src/views/Dashboard.vue`（路由 `/dashboard`） |
| 前端代理配置 | `frontend/vite.config.ts` |
| 启动脚本 | `scripts/start-backend.ps1` |

## 9. 开发进度存档

见同目录文档 `开发进度存档.md`。
