fix: use original batch result images for actions
This commit is contained in:
parent
8ca072d902
commit
4a36630b57
@ -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}`}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user