From 30250811970a0f8d717970c2ada52e95556e49d2 Mon Sep 17 00:00:00 2001 From: Linkon <116425752+Linkon-lcw@users.noreply.github.com> Date: Sun, 18 Jan 2026 21:35:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor(Home):=20=E4=BC=98=E5=8C=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=8E=B7=E5=8F=96=E5=92=8C=E6=8F=90=E4=BA=A4=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 fetchData 支持静默模式避免重复加载 - 提取提交逻辑到 performSubmit 方法复用 - 简化快捷理由选择的处理流程 --- src/renderer/src/components/Home.tsx | 67 ++++++++++++++++------------ 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/src/renderer/src/components/Home.tsx b/src/renderer/src/components/Home.tsx index 0724486..f670209 100644 --- a/src/renderer/src/components/Home.tsx +++ b/src/renderer/src/components/Home.tsx @@ -51,9 +51,9 @@ export const Home: React.FC<{ canEdit: boolean }> = ({ canEdit }) => { window.dispatchEvent(new CustomEvent('ss:data-updated', { detail: { category } })) } - const fetchData = useCallback(async () => { + const fetchData = useCallback(async (silent = false) => { if (!(window as any).api) return - setLoading(true) + if (!silent) setLoading(true) const [stuRes, reaRes] = await Promise.all([ (window as any).api.queryStudents({}), (window as any).api.queryReasons() @@ -61,15 +61,20 @@ export const Home: React.FC<{ canEdit: boolean }> = ({ canEdit }) => { if (stuRes.success) setStudents(stuRes.data) if (reaRes.success) setReasons(reaRes.data) - setLoading(false) + if (!silent) setLoading(false) }, []) useEffect(() => { fetchData() const onDataUpdated = (e: any) => { const category = e?.detail?.category - if (category === 'students' || category === 'reasons' || category === 'all') { - fetchData() + if ( + category === 'students' || + category === 'reasons' || + category === 'all' || + category === 'events' + ) { + fetchData(true) } } window.addEventListener('ss:data-updated', onDataUpdated as any) @@ -226,14 +231,36 @@ export const Home: React.FC<{ canEdit: boolean }> = ({ canEdit }) => { setOperationVisible(true) } - // 提交积分 - const handleSubmit = async () => { - if (!(window as any).api || !selectedStudent) return + // 核心提交逻辑 + const performSubmit = async (student: student, delta: number, content: string) => { + if (!(window as any).api) return if (!canEdit) { MessagePlugin.error('当前为只读权限') return } + setSubmitLoading(true) + const res = await (window as any).api.createEvent({ + student_name: student.name, + reason_content: content, + delta: delta + }) + + if (res.success) { + MessagePlugin.success(`已为 ${student.name} ${delta > 0 ? '加' : '扣'}${Math.abs(delta)}分`) + setOperationVisible(false) + fetchData(true) + emitDataUpdated('events') + } else { + MessagePlugin.error(res.message || '提交失败') + } + setSubmitLoading(false) + } + + // 手动点击确定按钮提交(用于自定义分值) + const handleSubmit = async () => { + if (!selectedStudent) return + const delta = customScore if (delta === undefined || !Number.isFinite(delta)) { MessagePlugin.warning('请选择或输入分值') @@ -241,29 +268,13 @@ export const Home: React.FC<{ canEdit: boolean }> = ({ canEdit }) => { } const content = reasonContent || (delta > 0 ? '加分' : delta < 0 ? '扣分' : '积分变更') - - setSubmitLoading(true) - const res = await (window as any).api.createEvent({ - student_name: selectedStudent.name, - reason_content: content, - delta: delta - }) - - if (res.success) { - MessagePlugin.success('积分提交成功') - setOperationVisible(false) - fetchData() - emitDataUpdated('events') - } else { - MessagePlugin.error(res.message || '提交失败') - } - setSubmitLoading(false) + await performSubmit(selectedStudent, delta, content) } - // 快捷理由选择 + // 快捷理由选择:点击即提交 const handleReasonSelect = (reason: reason) => { - setCustomScore(reason.delta) - setReasonContent(reason.content) + if (!selectedStudent) return + performSubmit(selectedStudent, reason.delta, reason.content) } // 渲染学生卡片