Files
labelimage/components/label/components/RepairScaleModal.tsx
2026-04-21 19:36:32 +08:00

100 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use client"
import { Button, Group, NumberInput, Stack, Text } from "@mantine/core"
import { useEffect, useMemo, useState } from "react"
import CustomModal from "./CustomModal"
interface ComponentProps {
open: boolean
defaultFactor: number
selectedObjectCount: number
canRepairImage: boolean
handleCancel: () => void
handleRepairObject: (factor: number) => void
handleRepairImage: (factor: number) => void
}
const RepairScaleModal = ({
open,
defaultFactor,
selectedObjectCount,
canRepairImage,
handleCancel,
handleRepairObject,
handleRepairImage,
}: ComponentProps) => {
const [factorInput, setFactorInput] = useState<number | string>(1)
useEffect(() => {
if (!open) return
const nextFactor =
Number.isFinite(defaultFactor) && defaultFactor > 0
? Number(defaultFactor.toFixed(6))
: 1
setFactorInput(nextFactor)
}, [defaultFactor, open])
const normalizedFactor = useMemo(() => {
if (typeof factorInput === "number") return factorInput
return Number(factorInput)
}, [factorInput])
const factorError =
Number.isFinite(normalizedFactor) && normalizedFactor > 0
? null
: "请输入大于 0 的修复因子"
return (
<CustomModal
title="修复标注对象"
open={open}
onCancel={handleCancel}
centered
closeOnClickOutside={false}
footer={
<Group justify="flex-end" gap="xs" mt="md">
<Button variant="default" onClick={handleCancel}>
</Button>
<Button
variant="light"
onClick={() => handleRepairObject(normalizedFactor)}
disabled={!!factorError || selectedObjectCount !== 1}>
</Button>
<Button
onClick={() => handleRepairImage(normalizedFactor)}
disabled={!!factorError || !canRepairImage}>
</Button>
</Group>
}>
<Stack gap="sm">
<Text size="sm" c="dimmed">
`rasterScale`
</Text>
<NumberInput
label="修复因子"
placeholder="请输入大于 0 的修复因子"
value={factorInput}
onChange={setFactorInput}
allowNegative={false}
decimalScale={6}
min={0.000001}
error={factorError || undefined}
/>
<Text size="xs" c="dimmed">
{selectedObjectCount} 1
</Text>
<Text size="xs" c="dimmed">
{canRepairImage ? "已有" : "暂无"}
</Text>
</Stack>
</CustomModal>
)
}
export default RepairScaleModal