fix: 修复自由创作首尾帧上传人脸图不通过问题
This commit is contained in:
@@ -91,6 +91,7 @@ export function FreeCreatePage({ modelConfigs, onNotify }: {
|
||||
// —— 弹窗 ——
|
||||
const [detailId, setDetailId] = useState<string | null>(null);
|
||||
const [libraryOpen, setLibraryOpen] = useState(false);
|
||||
const [libraryTargetRole, setLibraryTargetRole] = useState<"first_frame" | "last_frame" | null>(null);
|
||||
const [deleteTarget, setDeleteTarget] = useState<FreeVideoTask | null>(null);
|
||||
|
||||
// —— 轮询/进度 ——
|
||||
@@ -441,15 +442,48 @@ export function FreeCreatePage({ modelConfigs, onNotify }: {
|
||||
}
|
||||
}, [deleteTarget, detailId, stopPolling, notify]);
|
||||
|
||||
// 素材库选中 → 注入输入条 + 插 mention chip
|
||||
const openLibrary = useCallback((role?: "first_frame" | "last_frame") => {
|
||||
if (mode === "keyframe" && !role) {
|
||||
notify("info", "请点击首帧或尾帧槽位上的人物素材库入口");
|
||||
return;
|
||||
}
|
||||
setLibraryTargetRole(role || null);
|
||||
setLibraryOpen(true);
|
||||
}, [mode, notify]);
|
||||
|
||||
const closeLibrary = useCallback(() => {
|
||||
setLibraryOpen(false);
|
||||
setLibraryTargetRole(null);
|
||||
}, []);
|
||||
|
||||
// 素材库选中 → 全能参考插 mention;首尾帧写入对应槽位
|
||||
const handleLibraryPick = useCallback((ref: FreeVideoRef) => {
|
||||
if (mode === "keyframe") { notify("info", "首尾帧模式请直接上传图片"); return; }
|
||||
if (mode === "keyframe") {
|
||||
if (!libraryTargetRole) {
|
||||
notify("info", "请先指定首帧或尾帧槽位");
|
||||
return;
|
||||
}
|
||||
if (ref.type !== "image") {
|
||||
notify("error", "首尾帧仅支持图片素材");
|
||||
return;
|
||||
}
|
||||
const local: LocalRef = {
|
||||
...ref,
|
||||
key: nextRefKey(),
|
||||
role: libraryTargetRole,
|
||||
label: undefined,
|
||||
source: "library"
|
||||
};
|
||||
setRefs((prev) => [...prev.filter((r) => r.role !== libraryTargetRole), local]);
|
||||
setLibraryTargetRole(null);
|
||||
return;
|
||||
}
|
||||
let label = ref.label || "素材";
|
||||
let n = 2;
|
||||
while (refs.some((r) => r.label === label)) label = `${ref.label}${n++}`;
|
||||
setRefs((prev) => [...prev, { ...ref, label, key: nextRefKey() }]);
|
||||
window.setTimeout(() => promptRef.current?.insertMention({ label, thumb: ref.thumb_url || (ref.type === "image" ? ref.url : "") }), 0);
|
||||
}, [mode, refs, notify]);
|
||||
}, [mode, refs, libraryTargetRole, notify]);
|
||||
|
||||
const clearInput = useCallback(() => {
|
||||
promptRef.current?.clear();
|
||||
@@ -471,7 +505,7 @@ export function FreeCreatePage({ modelConfigs, onNotify }: {
|
||||
</div>
|
||||
</div>
|
||||
<div className="actions">
|
||||
<button type="button" className="btn" onClick={() => setLibraryOpen(true)}>
|
||||
<button type="button" className="btn" onClick={() => openLibrary()}>
|
||||
<Users size={14} /> 人物素材库
|
||||
</button>
|
||||
</div>
|
||||
@@ -525,7 +559,7 @@ export function FreeCreatePage({ modelConfigs, onNotify }: {
|
||||
onResolutionChange={setResolution}
|
||||
onDurationChange={setDuration}
|
||||
onSeedChange={setSeed}
|
||||
onOpenLibrary={() => setLibraryOpen(true)}
|
||||
onOpenLibrary={openLibrary}
|
||||
onClear={clearInput}
|
||||
onSend={() => void handleSend()}
|
||||
/>
|
||||
@@ -545,7 +579,7 @@ export function FreeCreatePage({ modelConfigs, onNotify }: {
|
||||
/>
|
||||
)}
|
||||
|
||||
<AssetLibraryModal open={libraryOpen} onClose={() => setLibraryOpen(false)} onPick={handleLibraryPick} notify={notify} />
|
||||
<AssetLibraryModal open={libraryOpen} onClose={closeLibrary} onPick={handleLibraryPick} notify={notify} />
|
||||
|
||||
<ConfirmModal
|
||||
open={deleteTarget !== null}
|
||||
|
||||
Reference in New Issue
Block a user