后台审核改用后端批量接口 (#67)

依赖 app-server PR #164。

## 改动
- 低价审核、用户反馈仅勾选待审核记录
- 批量操作改为单次请求后端 `/bulk/approve` 或 `/bulk/reject`
- 按后端逐条结果展示成功/失败;失败项保留勾选,方便重试
- 采纳/拒绝所需的统一金币、原因、内部备注和用户回复保持原有校验与二次确认

## 验证
- `npm run build`
- `git diff --check`

---------

Co-authored-by: linkeyu <798648091@qq.com>
Reviewed-on: #67
Co-authored-by: linkeyu <linkeyu@wonderable.ai>
Co-committed-by: linkeyu <linkeyu@wonderable.ai>
This commit was merged in pull request #67.
This commit is contained in:
2026-07-24 12:04:37 +08:00
committed by guke
parent bce720df9e
commit 2dfdc721b3
3 changed files with 372 additions and 12 deletions
+33
View File
@@ -0,0 +1,33 @@
export interface BulkReviewItemResult {
id: number;
ok: boolean;
status: string | null;
error: string | null;
}
export interface BulkReviewResult {
total: number;
success: number;
failed: number;
items: BulkReviewItemResult[];
}
export const BULK_REVIEW_MAX = 50;
export function failedReviewIds(result: BulkReviewResult): number[] {
return result.items.filter((item) => !item.ok).map((item) => item.id);
}
export function bulkFailureReasonText(result: BulkReviewResult): string {
const reasons = Array.from(
new Set(
result.items
.filter((item) => !item.ok)
.map((item) => item.error?.trim())
.filter((reason): reason is string => Boolean(reason)),
),
);
if (!reasons.length) return '';
const visible = reasons.slice(0, 3);
return `;原因:${visible.join('')}${reasons.length > visible.length ? ';…' : ''}`;
}