提交 3c4a354b authored 作者: 王鹏飞's avatar 王鹏飞

refactor(admin): migrate books management module

上级 f29f2487
export { getList as getManagementList } from "@/pages/books/management/request";
export { default } from "@/pages/books/management/addedit";
import type { Dayjs } from "dayjs";
export interface ManagementFilters { name?: string; authors?: string; audit_status?: string; time?: [Dayjs | null, Dayjs | null] | null; }
export function buildManagementQuery(page: number, pageSize: number, filters: ManagementFilters) { const query: any = { page, page_size: pageSize, ...filters }; delete query.time; if (filters.time?.[0] && filters.time[1]) { query.start_time = filters.time[0].startOf("day").unix(); query.end_time = filters.time[1].endOf("day").unix(); } return query; }
import { Navigate, Outlet, useRoutes } from "react-router";
import ManagementAddEdit from "./components/ManagementAddEdit";
import ManagementChapter from "./components/ManagementChapter";
import ManagementListView from "./views/ManagementListView";
function Layout() { return <Outlet />; }
export default function ManagementRoutes() { return useRoutes([{ Component: Layout, children: [{ index: true, Component: ManagementListView }, { path: "list", Component: ManagementListView }, { path: "add-edit", Component: ManagementAddEdit }, { path: "chapter", Component: ManagementChapter }, { path: "*", element: <Navigate to="." replace /> }] }]); }
import { useCallback, useEffect, useRef, useState } from "react";
import { getManagementList } from "./api";
import { buildManagementQuery, type ManagementFilters } from "./query";
export function useManagementList() { const [filters, setFilters] = useState<ManagementFilters>({}); const [page, setPage] = useState(1); const [pageSize, setPageSize] = useState(10); const [rows, setRows] = useState<any[]>([]); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(true); const [error, setError] = useState<Error | null>(null); const last = useRef<any>(buildManagementQuery(1, 10, {})); const load = useCallback(async (query: any) => { last.current = query; setLoading(true); try { const data: any = await getManagementList(query); if (!data) throw new Error("请求失败"); setRows(data.list || []); setTotal(data.total || 0); setError(null); } catch (e) { setError(e instanceof Error ? e : new Error("请求失败")); } finally { setLoading(false); } }, []); useEffect(() => { void load(last.current); }, [load]); return { filters, setFilters, page, pageSize, rows, total, loading, error, search: () => { setPage(1); void load(buildManagementQuery(1, pageSize, filters)); }, reset: () => { setFilters({}); setPage(1); void load(buildManagementQuery(1, pageSize, {})); }, refresh: () => void load(buildManagementQuery(page, pageSize, filters)), retry: () => void load(last.current), changePage: (value: number) => { setPage(value); void load(buildManagementQuery(value, pageSize, filters)); }, changePageSize: (value: number) => { setPage(1); setPageSize(value); void load(buildManagementQuery(1, value, filters)); } }; }
export { default } from "@/pages/books/management/list";
...@@ -3,10 +3,7 @@ import { Navigate, useRoutes } from "react-router"; ...@@ -3,10 +3,7 @@ import { Navigate, useRoutes } from "react-router";
import ModuleBoundary from "@/app/ModuleBoundary"; import ModuleBoundary from "@/app/ModuleBoundary";
const BooksLayout = lazy(() => import("@/pages/books/index")); const BooksLayout = lazy(() => import("@/pages/books/index"));
const ManagementLayout = lazy(() => import("@/pages/books/management/index")); const ManagementRoutes = lazy(() => import("./management/routes"));
const ManagementList = lazy(() => import("@/pages/books/management/list/index"));
const ManagementAddEdit = lazy(() => import("@/pages/books/management/addedit/index"));
const ChapterManagement = lazy(() => import("@/pages/books/section/index"));
const AuditRoutes = lazy(() => import("./audit/routes")); const AuditRoutes = lazy(() => import("./audit/routes"));
const ClassifyRoutes = lazy(() => import("./classify/routes")); const ClassifyRoutes = lazy(() => import("./classify/routes"));
const LabelRoutes = lazy(() => import("./label/routes")); const LabelRoutes = lazy(() => import("./label/routes"));
...@@ -24,16 +21,7 @@ export default function BooksRoutes() { ...@@ -24,16 +21,7 @@ export default function BooksRoutes() {
Component: BooksLayout, Component: BooksLayout,
children: [ children: [
{ index: true, element: <Navigate to="management" /> }, { index: true, element: <Navigate to="management" /> },
{ { path: "management/*", Component: ManagementRoutes },
path: "management",
Component: ManagementLayout,
children: [
{ index: true, Component: ManagementList },
{ path: "list", Component: ManagementList },
{ path: "add-edit", Component: ManagementAddEdit },
{ path: "chapter", Component: ChapterManagement },
],
},
{ path: "audit/*", Component: AuditRoutes }, { path: "audit/*", Component: AuditRoutes },
{ path: "classify/*", Component: ClassifyRoutes }, { path: "classify/*", Component: ClassifyRoutes },
{ path: "label/*", Component: LabelRoutes }, { path: "label/*", Component: LabelRoutes },
......
Markdown 格式
0% 或
您添加了 0 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论