diff --git a/apps/web/src/api/titles.ts b/apps/web/src/api/titles.ts index 68dec6a90..63fd0f2b4 100644 --- a/apps/web/src/api/titles.ts +++ b/apps/web/src/api/titles.ts @@ -68,10 +68,14 @@ export interface CreateTitleRequest { /** 获取当前用户的所有标题 */ export const getTitles = async (): Promise => { - const response = await apiClient.get<{ items: BackendTitleResponse[] }>( - "/titles", - ); - return (response.data.items || []).map(toTitleItem); + const response = await apiClient.get< + { items: BackendTitleResponse[] } | BackendTitleResponse[] + >("/titles"); + // 兼容两种后端返回格式:{ items: [...] } 或直接 [...] + const items = Array.isArray(response.data) + ? response.data + : response.data.items || []; + return items.map(toTitleItem); }; /** 创建标题 */ diff --git a/apps/web/src/pages/assets/AssetLibrary.tsx b/apps/web/src/pages/assets/AssetLibrary.tsx index fa618d8ba..867bc2686 100644 --- a/apps/web/src/pages/assets/AssetLibrary.tsx +++ b/apps/web/src/pages/assets/AssetLibrary.tsx @@ -421,11 +421,11 @@ const AssetLibrary: React.FC = () => { const handleUpload = async (file: File) => { if (file.size > MAX_FILE_SIZE) { message.error(`文件 "${file.name}" 超过 2GB 限制`); - return false; + return; } if (!effectiveLibId) { message.warning("请先选择或创建一个素材库"); - return false; + return; } setUploading(true); @@ -444,12 +444,14 @@ const AssetLibrary: React.FC = () => { queryClient.invalidateQueries({ queryKey: ["asset-libraries"] }); } catch (err: unknown) { const detail = err instanceof Error ? err.message : ""; + console.error("[handleUpload] 上传失败:", err); message.error(`"${file.name}" 上传失败${detail ? `:${detail}` : ""}`); + // 错误时延迟关闭弹窗,让用户能看到错误提示 + await new Promise((r) => setTimeout(r, 1500)); } finally { setUploading(false); setUploadProgress(0); } - return false; }; /* 新建素材库 */ @@ -635,7 +637,12 @@ const AssetLibrary: React.FC = () => {
{/* 上传区域 */} { + // 同步返回 false 阻止 antd 默认上传行为 + // 异步上传由 handleUpload 处理 + handleUpload(file as File); + return false; + }} showUploadList={false} multiple accept="video/*,image/*"