diff --git a/frontend/src/lib/api-services.ts b/frontend/src/lib/api-services.ts index f8849c1..3bcad24 100644 --- a/frontend/src/lib/api-services.ts +++ b/frontend/src/lib/api-services.ts @@ -219,6 +219,18 @@ export const dashboardApi = { /** 年度价值报告保存 */ annualValueSave: (year: number) => post('/dashboard/annual-value/save', { year }).then(unwrap()), + /** 待办标记已处理 */ + resolveTodo: (id: string) => + patch(`/dashboard/todos/${id}/resolve`), + /** 待办忽略 */ + ignoreTodo: (id: string) => + patch(`/dashboard/todos/${id}/ignore`), + /** 批量标记已处理 */ + batchResolveTodos: (ids: string[]) => + patch('/dashboard/todos/batch-resolve', { ids }), + /** 批量忽略 */ + batchIgnoreTodos: (ids: string[]) => + patch('/dashboard/todos/batch-ignore', { ids }), } // ========== 考勤相关 ========== @@ -511,6 +523,15 @@ export const socialInsuranceApi = { /** 社保/公积金记录更正 */ correctRecord: (type: 'social' | 'housing', id: string, data: any) => put(`/social/records/${type}/${id}/correct`, data).then(unwrap()), + /** 社保月度变动 */ + monthlyChanges: (month: string) => + get('/social/monthly-changes', { params: { month } }).then(unwrap()), + /** 公积金月度变动 */ + housingMonthlyChanges: (month: string) => + get('/social/housing/monthly-changes', { params: { month } }).then(unwrap()), + /** 公积金活跃申报 */ + housingActiveDeclaration: (month: string) => + get('/social/housing/active-declaration', { params: { month } }).then(unwrap()), } // ========== 商业保险 ========== @@ -665,6 +686,12 @@ export const notificationsApi = { /** 更新通知设置 */ updateSettings: (data: any) => put('/notifications/settings', data), + /** 检查合同到期 */ + checkContracts: () => + post('/notifications/check-contracts'), + /** 测试通知发送 */ + test: (channel: 'wechat' | 'email') => + post('/notifications/test', { channel }), } // ========== 系统设置 ========== @@ -697,6 +724,9 @@ export const settingsApi = { /** 退休政策 */ retirementPolicy: () => get('/settings/retirement-policy').then(unwrap()), + /** 确认退休政策生效 */ + confirmRetirementPolicy: (id: string) => + post(`/settings/retirement-policy/${id}/confirm`), } // ========== 模板相关 ========== diff --git a/frontend/src/pages/AIAssistant.tsx b/frontend/src/pages/AIAssistant.tsx index 6fd45fa..62355ac 100644 --- a/frontend/src/pages/AIAssistant.tsx +++ b/frontend/src/pages/AIAssistant.tsx @@ -8,7 +8,6 @@ import rehypeRaw from 'rehype-raw' import { Document, Packer, Paragraph, HeadingLevel, TextRun, Table, TableRow, TableCell, WidthType, BorderStyle, AlignmentType } from 'docx' import { saveAs } from 'file-saver' import { aiApi, rosterApi, employeeApi } from '../lib/api-services' -import { post as apiPost } from '../lib/api-services-raw' import { useAuthStore } from '../store/authStore' import Card from '../components/ui/Card' import Button from '../components/ui/Button' diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx index 338315d..8a7bc86 100644 --- a/frontend/src/pages/Dashboard.tsx +++ b/frontend/src/pages/Dashboard.tsx @@ -5,7 +5,6 @@ import { Link } from 'react-router-dom' import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip, RadialBarChart, RadialBar, PolarAngleAxis } from 'recharts' import { Users, AlertTriangle, CheckSquare, DollarSign, ArrowRight, RefreshCw, FileText, Calendar, TrendingUp, Briefcase, Calculator, Wallet, Building2, Receipt, Check, X, Clock, LayoutDashboard, ListTodo, ShieldAlert, UserPlus, AlertCircle, Download, ChevronRight, TrendingDown, ShieldCheck, Lightbulb, BookOpen, Sparkles, Repeat, XCircle, Loader2 } from 'lucide-react' import { dashboardApi, rosterApi, workProcessApi } from '../lib/api-services' -import { post as apiPost, patch as apiPatch } from '../lib/api-services-raw' import { useAuthStore } from '../store/authStore' import Card from '../components/ui/Card' import Button from '../components/ui/Button' @@ -76,17 +75,17 @@ export default function Dashboard() { }) const resolveMutation = useMutation({ - mutationFn: (id: string) => apiPatch(`/dashboard/todos/${id}/resolve`), + mutationFn: (id: string) => dashboardApi.resolveTodo(id), onSuccess: () => queryClient.invalidateQueries({ queryKey: ['dashboard'] }), }) const ignoreMutation = useMutation({ - mutationFn: (id: string) => apiPatch(`/dashboard/todos/${id}/ignore`), + mutationFn: (id: string) => dashboardApi.ignoreTodo(id), onSuccess: () => queryClient.invalidateQueries({ queryKey: ['dashboard'] }), }) const batchResolveMutation = useMutation({ - mutationFn: (ids: string[]) => apiPatch('/dashboard/todos/batch-resolve', { ids }), + mutationFn: (ids: string[]) => dashboardApi.batchResolveTodos(ids), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['dashboard'] }) setSelectedIds(new Set()) @@ -94,7 +93,7 @@ export default function Dashboard() { }) const batchIgnoreMutation = useMutation({ - mutationFn: (ids: string[]) => apiPatch('/dashboard/todos/batch-ignore', { ids }), + mutationFn: (ids: string[]) => dashboardApi.batchIgnoreTodos(ids), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['dashboard'] }) setSelectedIds(new Set()) diff --git a/frontend/src/pages/Notifications.tsx b/frontend/src/pages/Notifications.tsx index 9df0773..d413a9c 100644 --- a/frontend/src/pages/Notifications.tsx +++ b/frontend/src/pages/Notifications.tsx @@ -3,7 +3,6 @@ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { toast } from 'sonner' import { Bell, CheckCircle, AlertCircle, Send, Settings as SettingsIcon, X } from 'lucide-react' import { notificationsApi } from '../lib/api-services' -import { post as apiPost } from '../lib/api-services-raw' import Card from '../components/ui/Card' import Button from '../components/ui/Button' import EmptyState from '../components/ui/EmptyState' @@ -52,7 +51,7 @@ export default function Notifications() { }) const checkContractsMutation = useMutation({ - mutationFn: () => apiPost('/notifications/check-contracts'), + mutationFn: () => notificationsApi.checkContracts(), onSuccess: () => { toast.success('合同到期检查已触发') queryClient.invalidateQueries({ queryKey: ['notification-logs'] }) diff --git a/frontend/src/pages/Settings.tsx b/frontend/src/pages/Settings.tsx index 7643133..ae95f3d 100644 --- a/frontend/src/pages/Settings.tsx +++ b/frontend/src/pages/Settings.tsx @@ -3,7 +3,6 @@ import { toast } from 'sonner' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { Building2, Users, CreditCard, Plus, Bell, Download, Upload, FileSpreadsheet, Clock, CheckCircle, AlertCircle, ClipboardList } from 'lucide-react' import { settingsApi, notificationsApi } from '../lib/api-services' -import { post as apiPost, patch as apiPatch } from '../lib/api-services-raw' import { useAuthStore } from '../store/authStore' import Card from '../components/ui/Card' import Button from '../components/ui/Button' @@ -158,7 +157,7 @@ function RetirementSection({ enabled, onToggle }: { enabled: boolean; onToggle: }) const confirmMutation = useMutation({ - mutationFn: (id: string) => apiPost(`/settings/retirement-policy/${id}/confirm`), + mutationFn: (id: string) => settingsApi.confirmRetirementPolicy(id), onSuccess: () => { toast.success('退休政策已确认生效') setConfirming(false) @@ -762,7 +761,7 @@ function NotificationSettings() { }) const checkMutation = useMutation({ - mutationFn: () => apiPost('/notifications/check-contracts') as any, + mutationFn: () => notificationsApi.checkContracts() as any, onSuccess: (res: any) => { setCheckResult(`检查完成:发现 ${res.data.checked} 个即将到期的合同,已发送 ${res.data.notified} 条通知`) queryClient.invalidateQueries({ queryKey: ['notification-logs'] }) @@ -770,14 +769,14 @@ function NotificationSettings() { }) const testWechatMutation = useMutation({ - mutationFn: () => apiPost('/notifications/test', { channel: 'wechat' }) as any, + mutationFn: () => notificationsApi.test('wechat') as any, onSuccess: (res: any) => { toast.success(res.success ? res.data.message : (res.error?.message || '测试失败')) }, }) const testEmailMutation = useMutation({ - mutationFn: () => apiPost('/notifications/test', { channel: 'email' }) as any, + mutationFn: () => notificationsApi.test('email') as any, onSuccess: (res: any) => { toast.success(res.success ? res.data.message : (res.error?.message || '测试失败')) }, diff --git a/frontend/src/pages/SocialInsurance.tsx b/frontend/src/pages/SocialInsurance.tsx index 5556f5c..4ec25e3 100644 --- a/frontend/src/pages/SocialInsurance.tsx +++ b/frontend/src/pages/SocialInsurance.tsx @@ -5,7 +5,6 @@ import { useConfirm } from '../hooks/useConfirm' import { Calculator, Info, Check, Settings as SettingsIcon, Plus, History, Download, AlertCircle, Clock, MapPin, Sparkles, Upload, X, Shield } from 'lucide-react' import { InlineAlert } from '../components/ui/InlineAlert' import { socialInsuranceApi, commercialInsuranceApi } from '../lib/api-services' -import { get as apiGet, post as apiPost, put as apiPut, del as apiDel } from '../lib/api-services-raw' import { useAuthStore } from '../store/authStore' import Card from '../components/ui/Card' import Button from '../components/ui/Button' @@ -119,16 +118,16 @@ export default function SocialInsurance() { const { mutateAsync: fetchMonthlyChanges, isPending: monthlyLoading, data: monthlyChanges } = useMutation({ mutationFn: async () => { const [socialRes, housingRes, socialActiveRes, housingActiveRes] = await Promise.all([ - apiGet('/social/monthly-changes', { params: { month: monthlyMonth } }) as any, - apiGet('/social/housing/monthly-changes', { params: { month: monthlyMonth } }) as any, - apiGet('/social/active-declaration', { params: { month: monthlyMonth } }) as any, - apiGet('/social/housing/active-declaration', { params: { month: monthlyMonth } }) as any, + socialInsuranceApi.monthlyChanges(monthlyMonth) as any, + socialInsuranceApi.housingMonthlyChanges(monthlyMonth) as any, + socialInsuranceApi.activeDeclaration(monthlyMonth) as any, + socialInsuranceApi.housingActiveDeclaration(monthlyMonth) as any, ]) return { - social: socialRes.data, - housing: housingRes.data, - socialActive: socialActiveRes.data, - housingActive: housingActiveRes.data, + social: socialRes, + housing: housingRes, + socialActive: socialActiveRes, + housingActive: housingActiveRes, } }, })