feat(mobile): UI-01 upload center, capture and auxiliary pages

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-21 17:20:43 +08:00
parent f6929ae18f
commit 1f67b7c818
26 changed files with 2144 additions and 771 deletions
@@ -407,12 +407,27 @@ class TaskStore {
return query.get();
}
/// 账号内各状态任务数(队列 UI 徽章;全部状态都会出现,无任务计 0)。
Future<Map<UploadTaskState, int>> countsByState(String accountId) async {
final rows = await (_db.selectOnly(_db.uploadTasks)
..addColumns([_db.uploadTasks.state, _db.uploadTasks.id.count()])
..where(_db.uploadTasks.accountId.equals(accountId))
..groupBy([_db.uploadTasks.state]))
/// 账号内各状态任务数(队列 UI 徽章/摘要;全部状态都会出现,无任务计
/// 0)。可选 albumId/since 与 [listByAccount] 同语义(UI-01 §4.4 摘要按
/// 当前筛选范围聚合,仍走 SQL COUNT,不整表载入内存)。
Future<Map<UploadTaskState, int>> countsByState(
String accountId, {
String? albumId,
DateTime? since,
}) async {
final query = _db.selectOnly(_db.uploadTasks)
..addColumns([_db.uploadTasks.state, _db.uploadTasks.id.count()])
..where(_db.uploadTasks.accountId.equals(accountId));
if (albumId != null) {
query.where(_db.uploadTasks.albumId.equals(albumId));
}
if (since != null) {
query.where(
_db.uploadTasks.createdAt.isBiggerOrEqualValue(since.toUtc()),
);
}
query.groupBy([_db.uploadTasks.state]);
final rows = await query
.map((row) => MapEntry(
row.readWithConverter(_db.uploadTasks.state)!,
row.read(_db.uploadTasks.id.count())!,