fix: use original batch result images for actions

This commit is contained in:
Your Name 2026-06-04 18:42:17 +08:00
parent 8ca072d902
commit 4a36630b57

View File

@ -209,6 +209,14 @@ function toPersistableImageValue(value: unknown) {
return isPersistableImageValue(value) ? value.trim() : "";
}
function getProcessItemPreviewUrl(item: ProcessItem) {
return String(item.result || item.originalUrl || item.image || "").trim();
}
function getProcessItemSourceUrl(item: ProcessItem) {
return String(item.originalUrl || item.result || item.image || "").trim();
}
function toPersistableItems(items: ProcessItem[]) {
const persistableItems: ProcessItem[] = [];
for (const item of items) {
@ -509,7 +517,7 @@ export function SceneFusionView({
() =>
resultItems.filter(
(item) =>
item.status === "completed" && (item.originalUrl || item.result)
item.status === "completed" && Boolean(getProcessItemSourceUrl(item))
),
[resultItems]
);
@ -2015,7 +2023,8 @@ export function SceneFusionView({
const downloadAll = async () => {
const completed = resultItems.filter(
(item) => item.status === "completed" && (item.originalUrl || item.result)
(item) =>
item.status === "completed" && Boolean(getProcessItemSourceUrl(item))
);
if (completed.length === 0) {
toast.error("没有可下载的图片");
@ -2024,7 +2033,7 @@ export function SceneFusionView({
for (let i = 0; i < completed.length; i += 1) {
const item = completed[i]!;
await downloadImage(
item.originalUrl || item.result!,
getProcessItemSourceUrl(item),
`batch-result-${i + 1}.png`
);
await new Promise((resolve) => setTimeout(resolve, 400));
@ -2035,7 +2044,7 @@ export function SceneFusionView({
const handleBatchAddToCanvas = async () => {
if (!onBatchAddToCanvas) return;
const imageUrls = completedResultItems
.map((item) => item.originalUrl || item.result)
.map((item) => getProcessItemSourceUrl(item))
.filter((url): url is string => Boolean(url));
if (imageUrls.length === 0) {
toast.error("没有可添加到画布的图片");
@ -2103,7 +2112,7 @@ export function SceneFusionView({
pendingImages: selectedCompletedResultItems
.map((item, index) => ({
id: item.id,
imageUrl: String(item.originalUrl || item.result || "").trim(),
imageUrl: getProcessItemSourceUrl(item),
title: `批量结果 ${index + 1}`,
}))
.filter((item) => item.imageUrl),
@ -2946,9 +2955,13 @@ export function SceneFusionView({
<div className="grid grid-cols-2 gap-4 md:grid-cols-3 xl:grid-cols-4">
{resultItems.map((item, index) => (
(() => {
const completedResultUrl =
const resultPreviewUrl =
item.status === "completed"
? item.result || item.originalUrl || ""
? getProcessItemPreviewUrl(item)
: "";
const resultSourceUrl =
item.status === "completed"
? getProcessItemSourceUrl(item)
: "";
return (
<div
@ -2983,12 +2996,12 @@ export function SceneFusionView({
<div
className={cn(
"group relative aspect-[3/4] bg-muted/20",
completedResultUrl && "cursor-zoom-in"
resultSourceUrl && "cursor-zoom-in"
)}
onClick={() => {
if (completedResultUrl) {
if (resultSourceUrl) {
openResultPreview(
completedResultUrl,
resultSourceUrl,
`任务 ${index + 1} 预览`
);
}
@ -2996,24 +3009,24 @@ export function SceneFusionView({
onKeyDown={(event) => {
if (event.key !== "Enter" && event.key !== " ")
return;
if (completedResultUrl) {
if (resultSourceUrl) {
event.preventDefault();
openResultPreview(
completedResultUrl,
resultSourceUrl,
`任务 ${index + 1} 预览`
);
}
}}
role="button"
tabIndex={
completedResultUrl ? 0 : -1
resultSourceUrl ? 0 : -1
}
>
{completedResultUrl ? (
{resultPreviewUrl ? (
<img
alt="处理结果"
className="h-full w-full object-cover"
src={completedResultUrl}
src={resultPreviewUrl}
/>
) : (
(() => {
@ -3109,7 +3122,7 @@ export function SceneFusionView({
})()
)}
{completedResultUrl && (
{resultSourceUrl && (
<>
<button
type="button"
@ -3136,7 +3149,7 @@ export function SceneFusionView({
onClick={(event) => {
event.stopPropagation();
downloadImage(
completedResultUrl,
resultSourceUrl,
`batch-${index + 1}.png`
);
}}
@ -3241,7 +3254,7 @@ export function SceneFusionView({
<div className="mb-2 font-medium text-sm">待带入图片</div>
<div className="grid grid-cols-4 gap-2">
{selectedCompletedResultItems.map((item, index) => {
const previewUrl = item.originalUrl || item.result || item.image;
const previewUrl = getProcessItemPreviewUrl(item);
return (
<div
key={`psd-selected-preview-${item.id}`}