auto-save 2026-05-13 11:23 (~4)

This commit is contained in:
2026-05-13 11:23:24 +08:00
parent f4ce533b8d
commit 647b05a5bb
4 changed files with 35 additions and 12 deletions

View File

@@ -30,9 +30,11 @@ export function FrameLightbox({ jobId, frames, activeIndex, selected, onClose, o
const [addingZh, setAddingZh] = useState(false)
const [addInput, setAddInput] = useState("")
const [mounted, setMounted] = useState(false)
// 画框模式 + 选区(相对坐标 0-1
// 画框模式 + 选区(相对坐标 0-1
type Region = { x: number; y: number; w: number; h: number }
const [cropMode, setCropMode] = useState(false)
const [region, setRegion] = useState<{ x: number; y: number; w: number; h: number } | null>(null)
const [regions, setRegions] = useState<Region[]>([])
const [draftRegion, setDraftRegion] = useState<Region | null>(null) // 当前正在拖的
const [dragStart, setDragStart] = useState<{ x: number; y: number } | null>(null)
const [extractNamePrompt, setExtractNamePrompt] = useState(false) // 提取模式:要用户填名字
const [extractName, setExtractName] = useState("")
@@ -43,7 +45,8 @@ export function FrameLightbox({ jobId, frames, activeIndex, selected, onClose, o
// 切换分镜时清空选区
useEffect(() => {
setCropMode(false)
setRegion(null)
setRegions([])
setDraftRegion(null)
setDragStart(null)
setExtractNamePrompt(false)
setExtractName("")
@@ -90,13 +93,14 @@ export function FrameLightbox({ jobId, frames, activeIndex, selected, onClose, o
}
}
const handleCleanup = async (withRegion = false) => {
const handleCleanup = async (useRegions = false) => {
setCleaning(true)
try {
const updated = await cleanupFrame(jobId, f.index, withRegion ? region : null)
const usable = useRegions ? regions.filter((r) => r.w >= 0.03 && r.h >= 0.03) : null
const updated = await cleanupFrame(jobId, f.index, usable && usable.length > 0 ? usable : null)
onJobUpdate?.(updated)
toast.success(`分镜 ${f.index + 1} 清洗完成 · 下方查看${withRegion ? "(框内)" : ""}`)
if (withRegion) { setCropMode(false); setRegion(null) }
toast.success(`分镜 ${f.index + 1} 清洗完成${usable && usable.length > 0 ? `${usable.length} 个区域)` : ""}`)
if (useRegions) { setCropMode(false); setRegions([]); setDraftRegion(null) }
} catch (e) {
toast.error("清洗失败:" + (e instanceof Error ? e.message : String(e)))
} finally {