# TravelAlbum ## 职责 旅拍相册(新增相册 / 新建相册任务)模块,包含任务创建、相册详情、小程序码与 USB 有线传图上传。 ## 入口 - 权限 URI:`travel_album` → `TravelAlbumEntryView` - Android 对照:`ui/travelalbum` → `WiredCameraTransferScreen.kt` ## 核心页面 | 页面 | 说明 | | --- | --- | | `TravelAlbumEntryView` | 新增相册列表、新建任务入口;卡片主区域点击进入详情,底部保留「拍传」「相册码」 | | `CreateTravelAlbumSheet` | 先拍再买 / 买了再拍创建弹窗 | | `TravelAlbumDetailView` | 相册详情与素材管理(UI 对齐 Android) | | `WiredCameraTransferView` | 有线传图页(UI 对齐 Android) | ## 相册详情 UI 结构 Android 对照:`zhiflyfollow/.../TravelAlbumDetailScreen.kt` ``` TravelAlbumDetailInfoCard # 信息卡片:手机号 + 创建时间 + 拨号 TravelAlbumDetailPhotoManageCard # 白卡片:Tab / 排序 / 批量选择 + 网格 TravelAlbumDetailMaterialGridItem# 缩略图 + 已上传角标 + 文件名 + 大小 BottomBar # 上传照片 + 条件删除选中 ``` ## 相册详情交互流程 1. **Tab**:全部照片 / 已购照片,切换后重载素材列表 2. **排序**:创建时间正序/倒序、文件名正序/倒序 3. **批量删除**:仅在「全部照片」Tab 可选,且仅未购买素材可删 4. **上传照片**:底部按钮进入 `WiredCameraTransferView`,返回后自动刷新 5. **删除相册**:右上角更多菜单 6. **图片预览**:非选择模式下点击网格项打开大图预览,可左右滑动浏览当前列表 ## 有线传图 UI 结构 Android 对照:`zhiflyfollow/.../WiredCameraTransferScreen.kt` ``` WiredTransferHeaderView # 蓝色顶栏:相册名 + 手机号 WiredTransferControlCard # 浮动白卡片:设备存储 / 连接状态 / 筛选 Chip / Tab WiredTransferSelectAllBar # 勾选模式全选栏(条件显示) WiredTransferPhotoListPanel # 时间侧栏 + 30 分钟分组列表 WiredTransferBottomBar # 批量上传 + 指定上传 SpecifyUploadBottomSheet # 指定上传选项弹层 ``` ## 有线传图交互流程 1. **刷新**:顶部连接区「刷新」按钮 → `refreshCameraFiles()` → 同步相机历史文件 2. **批量上传三态**: - 首次点击 → 进入勾选模式 - 有选中项 → 上传选中照片 - 无选中项 → 取消选择 3. **指定上传**:底部 Sheet 选择「上传所有未上传的照片」或「上传所有今日拍摄的照片」 4. **时间侧栏**:按 30 分钟时间段分组,点击侧栏滚动到对应 section 5. **格式 Chip**:当前固定展示 JPG,与「不修图」一样不可点击;RAW 等格式后续扩展 ## 业务流程 1. 创建任务:`POST .../travel-album/create` 2. 进入有线传图:Sony 相机 PTP 下载(`Core/CameraTethering`) 3. OSS 上传:复用 `OSSUploadService.uploadAlbumFile` 4. 素材登记:`POST .../travel-album/upload-material` 5. 本地照片路径以相对 Documents 的路径持久化(如 `CameraDownloads/xxx.JPG`),加载时自动迁移旧版绝对路径 ## 有线传图性能策略 - 本地下载原图只用于上传与大图预览;列表缩略图在后台下采样生成到 `CameraDownloads/Thumbnails/`,由 Kingfisher 统一加载与缓存。 - 连拍上传进度采用节流通知,下载/上传关键状态立即刷新,普通进度合并后再更新 UI;边拍边传自动队列最多 3 张照片并发上传,避免滚动时高频触发整页重绘或网络资源被打满。 - `WiredCameraTransferViewModel` 缓存当前 Tab、时间侧栏和 30 分钟分组;新增/删除/切换 Tab 才重建分组,单张进度变化只替换对应行数据。 - 本地记录以相册和用户维度持久化,状态终态、路径变化立即保存,普通进度按步长或时间间隔降频保存。 ## 解耦关系 - `CameraTransferPipeline` 只依赖 `CameraAssetUploadSink` 协议 - `TravelAlbumMaterialUploader` 实现 OSS + 后端登记 - 与「相册管理」(`Features/Assets`)API、Store、路由完全隔离 ## 依赖模块 - `Core/CameraTethering` — USB/PTP 相机 - `Core/CameraTransfer` — 传输编排 - `Core/Upload` — OSS STS 上传 ## 二期待补齐 - RAW 预览 - 格式 Chip 扩展 RAW / JPEG+RAW,并与 `CameraTransferPipeline` 联动 - 设备存储不足时的业务侧限制(当前仅 UI 提示弹窗)