/** * 薪资计算记录 hook:封装记录列表的取数与保存/删除变更。 * 列表通过通用 useAsyncData 管理 loading/error/refresh 三态; * save/remove 为变更操作,执行后调用 refresh 以 storage 为唯一真相源重新取数。 */ import { useCallback } from 'react'; import { useAsyncData } from './useAsyncData'; import { deleteSalaryRecord, fetchSalaryRecords, saveSalaryRecord } from '../api'; import type { SalaryCalcInput, SalaryCalcRecord, SalaryCalcResult, } from '../types'; export function useSalaryRecords() { const fetcher = useCallback(() => fetchSalaryRecords(), []); const { data, loading, error, refresh } = useAsyncData(fetcher); /** 保存当前计算结果,成功后刷新列表 */ const save = useCallback( async (input: SalaryCalcInput, result: SalaryCalcResult, note?: string) => { const record = await saveSalaryRecord(input, result, note); refresh(); return record; }, [refresh], ); /** 删除某条记录,成功后刷新列表 */ const remove = useCallback( async (id: string) => { await deleteSalaryRecord(id); refresh(); }, [refresh], ); return { records: data ?? [], loading, error, refresh, save, remove, }; }