"use client" import { projectConfig } from "@/components/label/api/project" import { ProjectDetail } from "@/components/label/api/project/typing" import { Button, Checkbox, Group, NumberInput, Paper, SimpleGrid, Stack, Text, } from "@mantine/core" import { useForm } from "@mantine/form" import { notifications } from "@mantine/notifications" import { useEffect } from "react" type GradeKey = "A" | "B" | "C" export default function SamplingPlanContainer(props: { projectId: number info: ProjectDetail.DataProps | undefined onUpdated: () => void }) { const { projectId, info, onUpdated } = props const form = useForm({ initialValues: { check_task: false, check_frame: false, A_task: 0, A_frame: 0, B_task: 0, B_frame: 0, C_task: 0, C_frame: 0, }, }) useEffect(() => { if (!info) return const grade = info.user_grade ?? ({} as any) const toPercent = (v?: number) => Number(((v ?? 0) * 100).toFixed(2)) form.setValues({ check_task: !!info.check_task, check_frame: !!info.check_frame, A_task: toPercent(grade.A?.task), A_frame: toPercent(grade.A?.frame), B_task: toPercent(grade.B?.task), B_frame: toPercent(grade.B?.frame), C_task: toPercent(grade.C?.task), C_frame: toPercent(grade.C?.frame), }) form.resetDirty() // eslint-disable-next-line react-hooks/exhaustive-deps }, [info]) const save = async () => { try { const toRatio = (v: number) => Number((v / 100).toFixed(4)) await projectConfig({ project_id: projectId, check_task: form.values.check_task, check_frame: form.values.check_frame, user_grade: { A: { task: toRatio(form.values.A_task), frame: toRatio(form.values.A_frame), }, B: { task: toRatio(form.values.B_task), frame: toRatio(form.values.B_frame), }, C: { task: toRatio(form.values.C_task), frame: toRatio(form.values.C_frame), }, }, }) notifications.show({ color: "green", title: "操作成功", message: "已保存抽检配置", }) onUpdated() } catch (e) { notifications.show({ color: "red", title: "操作失败", message: e instanceof Error ? e.message : "请求失败", }) } } return ( 抽检方案 form.setFieldValue("check_task", e.currentTarget.checked) } /> form.setFieldValue("check_frame", e.currentTarget.checked) } /> {(["A", "B", "C"] as GradeKey[]).map((g) => ( 等级 {g} form.setFieldValue(`${g}_task` as any, Number(v ?? 0)) } hideControls /> form.setFieldValue(`${g}_frame` as any, Number(v ?? 0)) } hideControls /> ))} ) }