refactor(Home): 优化数据获取和提交逻辑

- 修改 fetchData 支持静默模式避免重复加载
- 提取提交逻辑到 performSubmit 方法复用
- 简化快捷理由选择的处理流程
This commit is contained in:
Linkon
2026-01-18 21:35:25 +08:00
parent db699f0c41
commit 3025081197
+39 -28
View File
@@ -51,9 +51,9 @@ export const Home: React.FC<{ canEdit: boolean }> = ({ canEdit }) => {
window.dispatchEvent(new CustomEvent('ss:data-updated', { detail: { category } })) 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 if (!(window as any).api) return
setLoading(true) if (!silent) setLoading(true)
const [stuRes, reaRes] = await Promise.all([ const [stuRes, reaRes] = await Promise.all([
(window as any).api.queryStudents({}), (window as any).api.queryStudents({}),
(window as any).api.queryReasons() (window as any).api.queryReasons()
@@ -61,15 +61,20 @@ export const Home: React.FC<{ canEdit: boolean }> = ({ canEdit }) => {
if (stuRes.success) setStudents(stuRes.data) if (stuRes.success) setStudents(stuRes.data)
if (reaRes.success) setReasons(reaRes.data) if (reaRes.success) setReasons(reaRes.data)
setLoading(false) if (!silent) setLoading(false)
}, []) }, [])
useEffect(() => { useEffect(() => {
fetchData() fetchData()
const onDataUpdated = (e: any) => { const onDataUpdated = (e: any) => {
const category = e?.detail?.category const category = e?.detail?.category
if (category === 'students' || category === 'reasons' || category === 'all') { if (
fetchData() category === 'students' ||
category === 'reasons' ||
category === 'all' ||
category === 'events'
) {
fetchData(true)
} }
} }
window.addEventListener('ss:data-updated', onDataUpdated as any) window.addEventListener('ss:data-updated', onDataUpdated as any)
@@ -226,14 +231,36 @@ export const Home: React.FC<{ canEdit: boolean }> = ({ canEdit }) => {
setOperationVisible(true) setOperationVisible(true)
} }
// 提交积分 // 核心提交逻辑
const handleSubmit = async () => { const performSubmit = async (student: student, delta: number, content: string) => {
if (!(window as any).api || !selectedStudent) return if (!(window as any).api) return
if (!canEdit) { if (!canEdit) {
MessagePlugin.error('当前为只读权限') MessagePlugin.error('当前为只读权限')
return 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 const delta = customScore
if (delta === undefined || !Number.isFinite(delta)) { if (delta === undefined || !Number.isFinite(delta)) {
MessagePlugin.warning('请选择或输入分值') MessagePlugin.warning('请选择或输入分值')
@@ -241,29 +268,13 @@ export const Home: React.FC<{ canEdit: boolean }> = ({ canEdit }) => {
} }
const content = reasonContent || (delta > 0 ? '加分' : delta < 0 ? '扣分' : '积分变更') const content = reasonContent || (delta > 0 ? '加分' : delta < 0 ? '扣分' : '积分变更')
await performSubmit(selectedStudent, delta, content)
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)
} }
// 快捷理由选择 // 快捷理由选择:点击即提交
const handleReasonSelect = (reason: reason) => { const handleReasonSelect = (reason: reason) => {
setCustomScore(reason.delta) if (!selectedStudent) return
setReasonContent(reason.content) performSubmit(selectedStudent, reason.delta, reason.content)
} }
// 渲染学生卡片 // 渲染学生卡片