perf(frontend): split admin bundles and tighten data fetching

Add next/dynamic lazy loading for database, logs, and settings heavy
modules; migrate access-logs and task-executions to React Query; parallelize
login auth-sources with public config; consolidate users table tooltips;
enable lazy image decoding; and replace barrel @/lib/services imports with
direct module paths.
This commit is contained in:
ryan
2026-06-17 12:12:47 +08:00
parent 9550fa6ff3
commit a44043262e
43 changed files with 752 additions and 695 deletions
+4 -4
View File
@@ -4,8 +4,8 @@ import * as React from "react"
import {createContext, useCallback, useContext, useRef, useState} from "react"
import {useQueryClient} from "@tanstack/react-query"
import type {SystemConfig, UpdateSystemConfigRequest} from "@/lib/services"
import services from "@/lib/services"
import type {SystemConfig, UpdateSystemConfigRequest} from "@/lib/services/admin"
import {AdminService} from "@/lib/services/admin"
import {handleContextError} from "@/lib/utils/error-handling"
@@ -49,7 +49,7 @@ export function AdminProvider({ children }: { children: React.ReactNode }) {
try {
setSystemConfigsLoading(true)
setSystemConfigsError(null)
const data = await services.admin.listSystemConfigs(type)
const data = await AdminService.listSystemConfigs(type)
if (requestId !== systemRequestIdRef.current) {
return
@@ -71,7 +71,7 @@ export function AdminProvider({ children }: { children: React.ReactNode }) {
/** 更新系统配置 */
const updateSystemConfig = useCallback(async (key: string, data: UpdateSystemConfigRequest) => {
try {
await services.admin.updateSystemConfig(key, data)
await AdminService.updateSystemConfig(key, data)
await queryClient.invalidateQueries({ queryKey: ['public-config'] })
await refetchSystemConfigs(lastConfigTypeRef.current)
} catch (error) {
+1 -1
View File
@@ -3,7 +3,7 @@
import * as React from "react"
import {createContext, useCallback, useContext, useEffect, useRef, useState} from "react"
import {toast} from "sonner"
import {AdminService, AdminUser, CreateUserRequest, ListUsersRequest} from "@/lib/services"
import {AdminService, AdminUser, CreateUserRequest, ListUsersRequest} from "@/lib/services/admin"
/** 用户列表查询参数 */
export interface UserQueryParams {
+3 -3
View File
@@ -2,7 +2,7 @@
import {createContext, ReactNode, useCallback, useContext, useEffect, useRef, useState} from 'react'
import services from '@/lib/services'
import {AuthService} from '@/lib/services/auth'
import {User} from '@/lib/services/auth/types'
@@ -54,7 +54,7 @@ export function UserProvider({ children }: { children: ReactNode }) {
const fetchUser = useCallback(async () => {
try {
setState(prev => ({ ...prev, loading: true, error: null }))
const user = await services.auth.getUserInfo()
const user = await AuthService.getUserInfo()
if (!isMountedRef.current) return
@@ -83,7 +83,7 @@ export function UserProvider({ children }: { children: ReactNode }) {
/** 用户登出 */
const logout = useCallback(async () => {
try {
await services.auth.logout()
await AuthService.logout()
if (!isMountedRef.current) return