diff --git a/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx b/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx
index 5292d27cb..cb9ef7e8b 100644
--- a/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx
+++ b/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx
@@ -169,6 +169,7 @@ export function PsdTemplatesSettingsClient({
const [fontFamily, setFontFamily] = useState("");
const [fontUploadFile, setFontUploadFile] = useState(null);
const [isCreating, setIsCreating] = useState(false);
+ const [isCreatingAndParsing, setIsCreatingAndParsing] = useState(false);
const [templateUploadPercent, setTemplateUploadPercent] = useState(0);
const [templateUploadStatus, setTemplateUploadStatus] = useState("");
const [isSaving, setIsSaving] = useState(false);
@@ -289,7 +290,8 @@ export function PsdTemplatesSettingsClient({
}
}
- async function handleCreateTemplate() {
+ async function handleCreateTemplate(options?: { parseAfterUpload?: boolean }) {
+ const parseAfterUpload = options?.parseAfterUpload === true;
if (!uploadFile) {
toast.error("请先选择 PSD / PSB 文件");
return;
@@ -308,7 +310,8 @@ export function PsdTemplatesSettingsClient({
formData.set("file", uploadFile);
try {
- setIsCreating(true);
+ setIsCreating(!parseAfterUpload);
+ setIsCreatingAndParsing(parseAfterUpload);
setTemplateUploadPercent(0);
setTemplateUploadStatus("上传中 0%");
@@ -357,8 +360,14 @@ export function PsdTemplatesSettingsClient({
}
setTemplateUploadPercent(100);
- setTemplateUploadStatus("上传完成,等待手动解析");
- toast.success("PSD 文件已上传,请点击“解析 PSD”生成模板图层");
+ setTemplateUploadStatus(
+ parseAfterUpload ? "上传完成,正在提交 PSD 解析..." : "上传完成,等待手动解析"
+ );
+ toast.success(
+ parseAfterUpload
+ ? "PSD 文件已上传,正在开始解析"
+ : "PSD 文件已上传,请点击“解析 PSD”生成模板图层"
+ );
setUploadName("");
setUploadBrandName("");
setUploadDescription("");
@@ -366,12 +375,28 @@ export function PsdTemplatesSettingsClient({
await mutate();
setSelectedTemplateId(payload.template.id);
setDraftTemplate(cloneTemplate(payload.template));
+
+ if (parseAfterUpload) {
+ await handleParseTemplate(payload.template, {
+ skipCompletedConfirm: true,
+ onStart: () => {
+ setTemplateUploadStatus("正在解析 PSD,请稍候...");
+ },
+ onDone: () => {
+ setTemplateUploadStatus("解析完成");
+ },
+ onError: (message) => {
+ setTemplateUploadStatus(`解析失败:${message}`);
+ },
+ });
+ }
} catch (error) {
setTemplateUploadPercent(0);
setTemplateUploadStatus("");
toast.error(error instanceof Error ? error.message : "PSD 模板上传失败");
} finally {
setIsCreating(false);
+ setIsCreatingAndParsing(false);
}
}
@@ -502,17 +527,26 @@ export function PsdTemplatesSettingsClient({
}
}
- async function handleParseTemplate(template = selectedTemplate) {
+ async function handleParseTemplate(
+ template = selectedTemplate,
+ options?: {
+ skipCompletedConfirm?: boolean;
+ onStart?: () => void;
+ onDone?: () => void;
+ onError?: (message: string) => void;
+ }
+ ) {
if (!template) return;
const actionLabel = template.parseStatus === "completed" ? "重新解析" : "解析";
const confirmed =
- template.parseStatus === "completed"
+ template.parseStatus === "completed" && !options?.skipCompletedConfirm
? window.confirm(`确认重新解析模板“${template.name}”吗?`)
: true;
if (!confirmed) return;
try {
+ options?.onStart?.();
setParsingTemplateIds((current) =>
current.includes(template.id) ? current : [...current, template.id]
);
@@ -566,9 +600,12 @@ export function PsdTemplatesSettingsClient({
setDraftTemplate(cloneTemplate(payload.template));
await mutate();
setSelectedTemplateId(payload.template.id);
+ options?.onDone?.();
} catch (error) {
await mutate();
- toast.error(error instanceof Error ? error.message : "PSD 解析失败");
+ const message = error instanceof Error ? error.message : "PSD 解析失败";
+ options?.onError?.(message);
+ toast.error(message);
} finally {
setParsingTemplateIds((current) => current.filter((item) => item !== template.id));
}
@@ -716,14 +753,37 @@ export function PsdTemplatesSettingsClient({
{uploadFile ? `已选择:${uploadFile.name}` : "支持 80MB 以内 PSD / PSB 文件"}
-
+
+
+
+
{templateUploadStatus ? (