refactor: 全量迁移前端 API 调用到统一 api-services 服务层
- 新建 api-services-raw.ts 导出原始 axios 方法供特殊端点使用 - 完成 api-services.ts 全领域覆盖(auth/employee/roster/dashboard/attendance/payroll/socialInsurance/commercialInsurance/termination/policies/evidence/audit/calendar/companyFiles/notifications/settings/ai/platform/portal/survey/search) - 迁移所有 47+ 页面文件:pages/、pages/roster/、pages/portal/、pages/platform/、pages/auth/、pages/dashboard/、pages/compliance/ - 移除所有直接 import api from '../../lib/api' 引用 - 修复 Termination.tsx / WorkProcess.tsx 中 string|null 类型错误 - 修复 SocialInsurance.tsx 中 api-services-raw delete 导入名 - 修复 PlatformLogin.tsx 变量遮蔽问题 - tsc --noEmit 零错误,vite build 成功
This commit is contained in:
@@ -3,7 +3,7 @@ import { HelpCircle, Search, ChevronDown, ChevronRight, Sparkles,
|
||||
Home, Users, FileText, Calculator, Shield, UserX, Bot,
|
||||
Bell, Settings, Lightbulb, AlertTriangle, CheckCircle, Phone } from 'lucide-react'
|
||||
import Modal from './ui/Modal'
|
||||
import api from '../lib/api'
|
||||
import { aiApi } from '../lib/api-services'
|
||||
import clsx from 'clsx'
|
||||
|
||||
interface HelpCategory {
|
||||
@@ -267,8 +267,8 @@ export default function HelpModal({ open, onClose }: { open: boolean; onClose: (
|
||||
setRagLoading(true)
|
||||
setRagError(false)
|
||||
try {
|
||||
const res = await api.post('/ai/rag/help-search', { query: searchQuery, topK: 8 }) as any
|
||||
setRagResults(res.data?.results || [])
|
||||
const res = await aiApi.ragHelpSearch(searchQuery, 8) as any
|
||||
setRagResults(res?.results || [])
|
||||
} catch {
|
||||
setRagError(true)
|
||||
setRagResults([])
|
||||
|
||||
@@ -6,8 +6,7 @@ import { useState, useEffect } from 'react'
|
||||
import { QRCodeSVG } from 'qrcode.react'
|
||||
import { Smartphone, Copy, Check, Search, Loader2, User, ChevronRight } from 'lucide-react'
|
||||
import Modal from './ui/Modal'
|
||||
import api from '../lib/api'
|
||||
import { employeeApi } from '../lib/api-services'
|
||||
import { employeeApi, portalApi } from '../lib/api-services'
|
||||
|
||||
interface Employee {
|
||||
id: string
|
||||
@@ -47,8 +46,8 @@ export default function PortalQRModal({ open, onClose }: { open: boolean; onClos
|
||||
setGenerating(true)
|
||||
setAutoLoginUrl('')
|
||||
try {
|
||||
const res = await api.post('/portal/auto-login-token', { employeeId: emp.id }) as any
|
||||
const token = res.data?.token
|
||||
const res = await portalApi.generateAutoLoginToken(emp.id) as any
|
||||
const token = res?.token
|
||||
if (token) {
|
||||
setAutoLoginUrl(`${window.location.origin}/portal/auto-login?token=${token}`)
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import { useState, useMemo, useEffect, useCallback } from 'react'
|
||||
import { Star, ChevronDown, ChevronRight, Check, Search, ClipboardList, Send, Save, RotateCcw } from 'lucide-react'
|
||||
import Modal from './ui/Modal'
|
||||
import { toast } from 'sonner'
|
||||
import api from '../lib/api'
|
||||
import { surveyApi } from '../lib/api-services'
|
||||
import { surveyPages, totalFeatures } from '../data/surveyData'
|
||||
|
||||
interface FeatureScore {
|
||||
@@ -104,7 +104,7 @@ export default function SurveyModal({ open, onClose }: { open: boolean; onClose:
|
||||
}
|
||||
setSubmitting(true)
|
||||
try {
|
||||
await api.post('/survey/submit', { items })
|
||||
await surveyApi.submit(items)
|
||||
toast.success(`已提交 ${items.length} 项评分,感谢您的反馈!`)
|
||||
localStorage.removeItem(STORAGE_KEY)
|
||||
setSavedAt(null)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { ChevronDown, Settings as SettingsIcon, Bell, Menu, HelpCircle, Smartpho
|
||||
import { useState } from 'react'
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import { useAuthStore } from '../../store/authStore'
|
||||
import api from '../../lib/api'
|
||||
import { dashboardApi } from '../../lib/api-services'
|
||||
import Breadcrumb from './Breadcrumb'
|
||||
import HelpModal from '../HelpModal'
|
||||
import PortalQRModal from '../PortalQRModal'
|
||||
@@ -19,10 +19,7 @@ export default function TopNav({ onMenuClick }: { onMenuClick?: () => void }) {
|
||||
|
||||
const { data: dashboardData } = useQuery<any>({
|
||||
queryKey: ['dashboard'],
|
||||
queryFn: async () => {
|
||||
const res = await api.get('/dashboard') as any
|
||||
return res.data
|
||||
},
|
||||
queryFn: () => dashboardApi.data(),
|
||||
refetchInterval: 60000,
|
||||
})
|
||||
const riskCount = dashboardData?.riskSummary?.pending || 0
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
import { useState, useRef, useEffect } from 'react'
|
||||
import { useMutation } from '@tanstack/react-query'
|
||||
import { Bot, Send, X, Sparkles } from 'lucide-react'
|
||||
import api from '../../lib/api'
|
||||
import { aiApi } from '../../lib/api-services'
|
||||
|
||||
interface AIContextEntryProps {
|
||||
/** 当前页面上下文标识 */
|
||||
@@ -39,7 +39,7 @@ export function AIContextEntry({ context, contextData, pageTitle }: AIContextEnt
|
||||
/** AI 问答 */
|
||||
const askMutation = useMutation({
|
||||
mutationFn: async (question: string) => {
|
||||
const res = await api.post('/ai/context-ask', {
|
||||
const res = await aiApi.contextAsk({
|
||||
context,
|
||||
contextData,
|
||||
pageTitle,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
import { useState, useEffect, useRef, useMemo } from 'react'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
import { Search, ArrowRight, Clock } from 'lucide-react'
|
||||
import api from '../../lib/api'
|
||||
import { searchApi } from '../../lib/api-services'
|
||||
|
||||
/** 搜索结果类型 */
|
||||
interface SearchResult {
|
||||
@@ -74,8 +74,8 @@ export function CommandPalette({ open, onClose }: CommandPaletteProps) {
|
||||
// 远程搜索员工
|
||||
const timer = setTimeout(async () => {
|
||||
try {
|
||||
const res = await api.get('/search', { params: { q } }) as any
|
||||
const remoteResults: SearchResult[] = (res.data?.employees || []).map((e: any) => ({
|
||||
const res = await searchApi.search(q) as any
|
||||
const remoteResults: SearchResult[] = (res?.employees || []).map((e: any) => ({
|
||||
type: 'employee' as const,
|
||||
id: e.id,
|
||||
title: e.name,
|
||||
|
||||
Reference in New Issue
Block a user