From 2edc1f6b73f733c2ed9064881b97ef83638e553d Mon Sep 17 00:00:00 2001 From: zhangheng Date: Tue, 14 Apr 2026 17:14:43 +0800 Subject: [PATCH] fix(ones): bug --- .../report/components/DailyReportModal.tsx | 222 +++++++++++------- 1 file changed, 131 insertions(+), 91 deletions(-) diff --git a/app/person/report/components/DailyReportModal.tsx b/app/person/report/components/DailyReportModal.tsx index 43d5e27..335a465 100644 --- a/app/person/report/components/DailyReportModal.tsx +++ b/app/person/report/components/DailyReportModal.tsx @@ -24,7 +24,6 @@ import { import { useForm } from "@mantine/form" import { notifications } from "@mantine/notifications" import { useEffect, useMemo } from "react" -import classes from "./DailyReportModal.module.css" import { accountTypeOpts, actualTypeOpts, @@ -33,6 +32,7 @@ import { setTypeOpts, workTypeOpts, } from "../config" +import classes from "./DailyReportModal.module.css" function normalizeTimeValue(value?: string | null) { if (!value) return "" @@ -88,6 +88,85 @@ function HourRightSection() { ) } +function getEmptyFormValues(currentUserName?: string) { + return { + user_name: currentUserName ?? "", + date: "", + start_time: "", + end_time: "", + set_type: "", + actual_type: "", + project_id: "", + leader_uid: "", + work_type: "", + accounting_type: "", + performance_accounting: "", + obj_type: "", + work_time: undefined as number | undefined, + rate: undefined as number | undefined, + standard_size: undefined as number | undefined, + completed_size: undefined as number | undefined, + residual_size: undefined as number | undefined, + residual_work_time: undefined as number | undefined, + residual_pm: "", + remarks: "", + } +} + +function getCreateFormValues(currentUserName?: string) { + return { + ...getEmptyFormValues(currentUserName), + date: new Date().toISOString().slice(0, 10), + } +} + +function getRecordFormValues( + record: Daily.DailyWorkList, + currentUserName?: string +) { + return { + user_name: currentUserName ?? "", + date: record.date ?? "", + start_time: normalizeTimeValue(record.start_time), + end_time: normalizeTimeValue(record.end_time), + set_type: record.set_type ?? "", + actual_type: record.actual_type ?? "", + project_id: + record.project_id === undefined || record.project_id === null + ? "" + : String(record.project_id), + leader_uid: + record.leader_uid === undefined || record.leader_uid === null + ? "" + : String(record.leader_uid), + work_type: record.work_type ?? "", + accounting_type: record.accounting_type ?? "", + performance_accounting: + record.performance_accounting === true + ? "true" + : record.performance_accounting === false + ? "false" + : "", + obj_type: + record.obj_type === undefined || record.obj_type === null + ? "" + : String(record.obj_type), + work_time: record.work_time ?? undefined, + rate: record.rate ?? undefined, + standard_size: record.standard_size ?? undefined, + completed_size: record.completed_size ?? undefined, + residual_size: record.residual_size ?? undefined, + residual_work_time: record.residual_work_time ?? undefined, + residual_pm: + record.residual_pm === true + ? "正" + : record.residual_pm === false + ? "负" + : "", + remarks: record.remarks ?? "", + } +} + export default function DailyReportModal(props: { opened: boolean record: Daily.DailyWorkList | null @@ -105,31 +184,10 @@ export default function DailyReportModal(props: { }, [treeData]) const form = useForm({ - initialValues: { - user_name: user_name ?? "", - date: "", - start_time: "", - end_time: "", - set_type: "", - actual_type: "", - project_id: "", - leader_uid: "", - work_type: "", - accounting_type: "", - performance_accounting: "", - obj_type: "", - work_time: undefined as number | undefined, - rate: undefined as number | undefined, - standard_size: undefined as number | undefined, - completed_size: undefined as number | undefined, - residual_size: undefined as number | undefined, - residual_work_time: undefined as number | undefined, - residual_pm: "", - remarks: "", - }, + initialValues: getEmptyFormValues(user_name), validate: { date: (v) => (v ? null : "请输入日期"), - // set_type: (v) => (v ? null : "请选择规定类型"), + set_type: (v) => (v ? null : "请选择规定类型"), actual_type: (v) => (v ? null : "请选择出勤类型"), }, validateInputOnChange: true, @@ -137,77 +195,27 @@ export default function DailyReportModal(props: { clearInputErrorOnChange: true, }) + const resetFormState = () => { + form.setValues(getEmptyFormValues(user_name)) + form.clearErrors() + form.resetDirty() + } + useEffect(() => { - if (!opened) return + if (!opened) { + resetFormState() + return + } if (!record) { - form.setValues({ - user_name: user_name ?? "", - date: new Date().toISOString().slice(0, 10), - start_time: "", - end_time: "", - set_type: "", - actual_type: "", - project_id: "", - leader_uid: "", - work_type: "", - accounting_type: "", - performance_accounting: "", - obj_type: "", - work_time: undefined, - rate: undefined, - standard_size: undefined, - completed_size: undefined, - residual_size: undefined, - residual_work_time: undefined, - residual_pm: "", - remarks: "", - }) + form.setValues(getCreateFormValues(user_name)) + form.clearErrors() form.resetDirty() return } - form.setValues({ - user_name: user_name ?? "", - date: record.date ?? "", - start_time: normalizeTimeValue(record.start_time), - end_time: normalizeTimeValue(record.end_time), - set_type: record.set_type ?? "", - actual_type: record.actual_type ?? "", - project_id: - record.project_id === undefined || record.project_id === null - ? "" - : String(record.project_id), - leader_uid: - record.leader_uid === undefined || record.leader_uid === null - ? "" - : String(record.leader_uid), - work_type: record.work_type ?? "", - accounting_type: record.accounting_type ?? "", - performance_accounting: - record.performance_accounting === true - ? "true" - : record.performance_accounting === false - ? "false" - : "", - obj_type: - record.obj_type === undefined || record.obj_type === null - ? "" - : String(record.obj_type), - work_time: record.work_time ?? undefined, - rate: record.rate ?? undefined, - standard_size: record.standard_size ?? undefined, - completed_size: record.completed_size ?? undefined, - residual_size: record.residual_size ?? undefined, - residual_work_time: record.residual_work_time ?? undefined, - residual_pm: - record.residual_pm === true - ? "正" - : record.residual_pm === false - ? "负" - : "", - remarks: record.remarks ?? "", - }) + form.setValues(getRecordFormValues(record, user_name)) + form.clearErrors() form.resetDirty() // eslint-disable-next-line react-hooks/exhaustive-deps }, [opened, record, user_name]) @@ -313,8 +321,8 @@ export default function DailyReportModal(props: { message: "已提交日报", }) } + resetFormState() onCloseAction(true) - form.reset() } catch (e) { notifications.show({ color: "red", @@ -328,7 +336,7 @@ export default function DailyReportModal(props: { { - form.reset() + resetFormState() onCloseAction() }} title={record ? "编辑日报" : "填写日报"} @@ -384,6 +392,10 @@ export default function DailyReportModal(props: { searchable clearable {...form.getInputProps("set_type")} + value={form.values.set_type || null} + onChange={(value) => + form.setFieldValue("set_type", value ?? "") + } /> + form.setFieldValue("leader_uid", value ?? "") + } /> + form.setFieldValue("obj_type", value ?? "") + } /> + form.setFieldValue("accounting_type", value ?? "") + } /> { - form.reset() + resetFormState() onCloseAction() }}> 取消