# Projects 模块业务逻辑

## 模块职责

Projects 模块负责首页项目相关入口：
- `pm`、`project_edit`：摄影师项目管理。
- `pm_manager`：店铺项目管理。

模块只保存项目列表、详情、编辑表单和上传中的临时状态，不写入 `AppSession`、`AccountContext`、TabBar 或首页全局状态。

## 摄影师项目

`ProjectManagementViewModel` 管理摄影师项目列表、搜索、分页、详情入口和删除动作。列表请求依赖当前景区 ID，缺少景区时清空本模块列表并停止请求。

`ProjectEditorViewModel` 管理新建和编辑表单。项目封面、轮播图先通过 `OSSUploadService.uploadProjectImage` 上传到 `project/yyyyMMdd/scenicId/...` 路径，再把最终 URL 提交给项目创建或编辑接口。

## 店铺项目

`StoreProjectManagementViewModel` 管理店铺项目列表和可管理景区。店铺项目按业务账号 ID 查询，缺少用户 ID 时不请求。

`StoreProjectEditorViewModel` 支持多点位项目和押金项目两种提交路径。多点位项目提交景区、点位、展示图和项目套餐；押金项目提交门店、押金金额、底片数量等字段。

## 接口边界

`ProjectAPI` 只封装项目模块需要的接口，包括摄影师项目列表/详情/创建/编辑/删除，以及店铺项目列表/详情/创建/更新/删除和可管理景区列表。

样片上传需要的轻量项目选择复用共享 `PhotographerProjectItem`，但不反向依赖 Projects 页面状态。

## 缓存边界

项目图片临时数据、OSS STS、编辑表单和分页状态都不落盘。网络图片展示继续交给 `RemoteImage` / Kingfisher。
