feat: 完善相册 AI 修图模板选择流程

This commit is contained in:
2026-08-11 15:22:08 +08:00
parent 43c75c8e36
commit e64dcec094
11 changed files with 261 additions and 202 deletions
@@ -207,41 +207,18 @@ final class TravelAlbumDetailViewModel {
}
}
/// 重新拉取当前筛选、排序下已经加载的分页范围,供全屏预览刷新关联图片。
func reloadLoadedMaterials(
api: any TravelAlbumServing
) async throws -> TravelAlbumListResponse<TravelAlbumMaterial> {
let requestedPageCount = max(currentPage, 1)
var refreshed: [TravelAlbumMaterial] = []
var refreshedTotal = 0
var loadedPageCount = 0
for page in 1 ... requestedPageCount {
let response = try await api.materialList(
userEquityTravelId: albumId,
page: page,
pageSize: pageSize,
orderBy: sortOption.rawValue,
isPurchased: selectedTab == .purchased ? 1 : nil
)
if page == 1 { refreshedTotal = response.total }
refreshed.append(contentsOf: response.list)
loadedPageCount = page
if refreshed.count >= refreshedTotal || response.list.isEmpty { break }
/// 定向刷新单个素材,并同步替换网格列表中的对应缓存。
func refreshMaterial(id: Int, api: any TravelAlbumServing) async throws -> TravelAlbumMaterial {
let material = try await api.materialInfo(
userEquityTravelId: albumId,
materialId: id
)
guard material.id == id else { throw APIError.invalidResponse }
if let index = materials.firstIndex(where: { $0.id == id }) {
materials[index] = material
notifyStateChange()
}
var seen = Set<Int>()
materials = refreshed.filter { seen.insert($0.id).inserted }
currentPage = max(loadedPageCount, 1)
canLoadMore = materials.count < refreshedTotal
selectedMaterialIds.formIntersection(materials.map(\.id))
if selectedTab == .all {
allPhotoCount = refreshedTotal
} else {
purchasedPhotoCount = refreshedTotal
}
notifyStateChange()
return TravelAlbumListResponse(total: refreshedTotal, list: materials)
return material
}
/// 切换选择模式。