fix: 标题库API兼容直接数组返回 + 素材上传弹窗闪退修复
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 37h34m9s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 37h34m9s

Issue 2: getTitles() 兼容后端返回直接数组 [...] 和 {items:[...]} 两种格式
Issue 5: beforeUpload 改为同步返回 false(避免 async Promise 不稳定);
         上传失败时延迟1.5秒关闭弹窗,让用户能看到错误提示
This commit is contained in:
灵应
2026-07-07 23:20:15 +08:00
parent fb7ce370ea
commit 1cff5d52fd
2 changed files with 19 additions and 8 deletions
+8 -4
View File
@@ -68,10 +68,14 @@ export interface CreateTitleRequest {
/** 获取当前用户的所有标题 */
export const getTitles = async (): Promise<TitleItem[]> => {
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);
};
/** 创建标题 */
+11 -4
View File
@@ -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 = () => {
<div className="xx-assets-content">
{/* 上传区域 */}
<Upload.Dragger
beforeUpload={handleUpload}
beforeUpload={(file) => {
// 同步返回 false 阻止 antd 默认上传行为
// 异步上传由 handleUpload 处理
handleUpload(file as File);
return false;
}}
showUploadList={false}
multiple
accept="video/*,image/*"