From 187e4f2af026460ea2b2592280b54d8751b30c2a Mon Sep 17 00:00:00 2001 From: xyx Date: Mon, 13 Jul 2026 12:16:39 +0800 Subject: [PATCH] fix: improve error handling in expense form submissions --- apps/admin/src/pages/Expenses/index.tsx | 49 +++++++++++++++---------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/apps/admin/src/pages/Expenses/index.tsx b/apps/admin/src/pages/Expenses/index.tsx index 9411be6..30f241c 100644 --- a/apps/admin/src/pages/Expenses/index.tsx +++ b/apps/admin/src/pages/Expenses/index.tsx @@ -31,6 +31,11 @@ import { message } from '../../ui/app-message'; const { RangePicker } = DatePicker; +const isFormValidationError = (error: unknown) => + typeof error === 'object' + && error !== null + && Array.isArray((error as { errorFields?: unknown }).errorFields); + const ExpensesPage: React.FC = () => { @@ -157,16 +162,16 @@ const ExpensesPage: React.FC = () => { const handleRoomExpense = async () => { setSaving(true); - const values = await roomForm.validateFields(); - const payload = { - roomId: values.roomId, - expenseType: values.expenseType, - amount: values.amount, - periodStart: values.period[0].format('YYYY-MM-DD'), - periodEnd: values.period[1].format('YYYY-MM-DD'), - description: values.description, - }; try { + const values = await roomForm.validateFields(); + const payload = { + roomId: values.roomId, + expenseType: values.expenseType, + amount: values.amount, + periodStart: values.period[0].format('YYYY-MM-DD'), + periodEnd: values.period[1].format('YYYY-MM-DD'), + description: values.description, + }; if (editingRoom) { await api.put(`/expenses/room/${editingRoom.id}`, payload); message.success('更新成功'); @@ -179,7 +184,9 @@ const ExpensesPage: React.FC = () => { roomForm.resetFields(); fetchData(); } catch (e: any) { - message.error(e?.message || '操作失败'); + if (!isFormValidationError(e)) { + message.error(e?.message || '操作失败'); + } } finally { setSaving(false); } @@ -187,16 +194,16 @@ const ExpensesPage: React.FC = () => { const handlePersonalExpense = async () => { setSaving(true); - const values = await personalForm.validateFields(); - const payload = { - studentId: values.studentId, - roomId: values.roomId, - expenseType: values.expenseType, - amount: values.amount, - expenseDate: values.expenseDate.format('YYYY-MM-DD'), - description: values.description, - }; try { + const values = await personalForm.validateFields(); + const payload = { + studentId: values.studentId, + roomId: values.roomId, + expenseType: values.expenseType, + amount: values.amount, + expenseDate: values.expenseDate.format('YYYY-MM-DD'), + description: values.description, + }; if (editingPersonal) { await api.put(`/expenses/personal/${editingPersonal.id}`, payload); message.success('更新成功'); @@ -209,7 +216,9 @@ const ExpensesPage: React.FC = () => { personalForm.resetFields(); fetchData(); } catch (e: any) { - message.error(e?.message || '操作失败'); + if (!isFormValidationError(e)) { + message.error(e?.message || '操作失败'); + } } finally { setSaving(false); }