From abd36935cfc6665d7f4f517ca233e4324e0540fa Mon Sep 17 00:00:00 2001 From: Zylan Date: Thu, 13 Mar 2025 22:34:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E8=96=AA=E8=B5=84=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=99=A8=E4=B8=AD=E7=9A=84=E6=95=B0=E5=80=BC=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=BB=8E=E6=95=B0=E5=AD=97=E6=9B=B4=E6=94=B9=E4=B8=BA=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=EF=BC=8C=E4=BB=A5=E7=A1=AE=E4=BF=9D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E6=80=A7=EF=BC=8C=E5=B9=B6=E5=9C=A8=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=E6=97=B6=E6=B7=BB=E5=8A=A0=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BB=A5=E4=BE=BF=E4=BA=8E=E6=8E=92=E6=9F=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/calculator.tsx | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/components/calculator.tsx b/components/calculator.tsx index c5855cc..79e8879 100644 --- a/components/calculator.tsx +++ b/components/calculator.tsx @@ -16,12 +16,12 @@ const inputLimits = { const SalaryCalculator = () => { const [formData, setFormData] = useState({ annualSalary: '', // 年薪 - workDaysPerWeek: 5, // 每周工作天数 - annualLeave: 5, // 年假天数 - publicHolidays: 11, // 法定节假日 - workHours: 10, // 工作时长 - commuteHours: 2, // 通勤时长 - breakHours: 2, // 午休时长 + workDaysPerWeek: '5', // 每周工作天数 + annualLeave: '5', // 年假天数 + publicHolidays: '11', // 法定节假日 + workHours: '10', // 工作时长 + commuteHours: '2', // 通勤时长 + breakHours: '2', // 午休时长 workEnvironment: '1.0', // 工作环境系数 heterogeneity: '1.0', // 异性环境系数 teamwork: '1.0', // 同事环境系数 @@ -31,7 +31,7 @@ const SalaryCalculator = () => { const calculateWorkingDays = useCallback(() => { const weeksPerYear = 52; - const totalWorkDays = weeksPerYear * formData.workDaysPerWeek; + const totalWorkDays = weeksPerYear * Number(formData.workDaysPerWeek); // 确保转换为数字 const totalLeaves = Number(formData.annualLeave) + Number(formData.publicHolidays); return Math.max(totalWorkDays - totalLeaves, 0); }, [formData.workDaysPerWeek, formData.annualLeave, formData.publicHolidays]); @@ -43,15 +43,23 @@ const SalaryCalculator = () => { }, [formData.annualSalary, calculateWorkingDays]); const handleInputChange = (name: string, value: string) => { + console.log(`Input change: ${name} = ${value}`); // 调试日志 + if (name in inputLimits) { const numValue = Number(value); if (!isNaN(numValue)) { const limits = inputLimits[name as keyof typeof inputLimits]; const clampedValue = Math.max(limits.min, Math.min(limits.max, numValue)); - setFormData(prev => ({ - ...prev, - [name]: clampedValue.toString() - })); + console.log(`Clamped value for ${name}: ${clampedValue}`); // 调试日志 + + setFormData(prev => { + const newState = { + ...prev, + [name]: clampedValue.toString() // 所有数值都转为字符串 + }; + console.log(`New form state for ${name}:`, newState[name as keyof typeof prev]); // 修复类型错误 + return newState; + }); return; } }