diff --git a/web/src/components/accounts/MonitoringAccountList.tsx b/web/src/components/accounts/MonitoringAccountList.tsx index 5021474..a9d589e 100644 --- a/web/src/components/accounts/MonitoringAccountList.tsx +++ b/web/src/components/accounts/MonitoringAccountList.tsx @@ -1,12 +1,12 @@ // 监控账号列表:表格呈现账号画像、作品数据与同步状态。 import { useCallback, useEffect, useState } from 'react'; -import { history } from '@umijs/max'; +import { history, useSearchParams } from '@umijs/max'; import { Alert, App, Avatar, Button, Card, Flex, Form, Grid, Modal, Popconfirm, Select, Space, Table, Tag, Tooltip, Typography } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { CloudUploadOutlined, ReloadOutlined } from '@ant-design/icons'; import { getList, remove, creatorAction, creatorUpdate } from '@/services/api'; import { conflictMessage, dateTime } from '@/utils/helpers'; -import { fixedLeft, fixedRight, tablePagination, useTableSticky } from '@/utils/table'; +import { fixedLeft, fixedRight, TABLE_PAGE_SIZE, tablePagination, useTableSticky } from '@/utils/table'; interface CompetitorRow { id: string; @@ -37,6 +37,12 @@ function formatCount(value?: number | null): string { } export default function MonitoringAccountList() { + const [searchParams, setSearchParams] = useSearchParams(); + const pageValue = Number(searchParams.get('page')); + const pageSizeValue = Number(searchParams.get('pageSize')); + const current = Number.isSafeInteger(pageValue) && pageValue > 0 ? pageValue : 1; + const pageSize = Number.isSafeInteger(pageSizeValue) && pageSizeValue > 0 ? pageSizeValue : TABLE_PAGE_SIZE; + const listQuery = searchParams.toString(); const [rows, setRows] = useState([]); const [pending, setPending] = useState(true); const [error, setError] = useState(null); @@ -136,7 +142,7 @@ export default function MonitoringAccountList() { render: (_, account) => ( {(account.nickname || '账').slice(0, 1).toUpperCase()} - history.push(`/accounts/monitoring/${account.id}`)}> + history.push(`/accounts/monitoring/${account.id}${listQuery ? `?${listQuery}` : ''}`)}> {account.nickname || '未命名账号'} @@ -229,7 +235,17 @@ export default function MonitoringAccountList() { dataSource={rows} loading={pending} sticky={sticky} - pagination={tablePagination()} + pagination={{ + ...tablePagination(), + current, + pageSize, + onChange: (page, size) => { + const params = new URLSearchParams(searchParams); + params.set('page', String(size === pageSize ? page : 1)); + params.set('pageSize', String(size)); + setSearchParams(params, { replace: true }); + }, + }} locale={{ emptyText: '暂无监控账号。' }} scroll={{ x: horizontal ? 1100 : undefined }} /> diff --git a/web/src/pages/accounts/monitoring/$id/index.tsx b/web/src/pages/accounts/monitoring/$id/index.tsx index 1908c96..0c6cc07 100644 --- a/web/src/pages/accounts/monitoring/$id/index.tsx +++ b/web/src/pages/accounts/monitoring/$id/index.tsx @@ -2,7 +2,7 @@ // 页头 actions 为返回/同步/暂停恢复;主体:账号画像 Card + 作品数据(共享 WorksGallery:作品网格 + Drawer 增长曲线/指标记录/评论)。 // 作品列表走 GET /creator/works?source_id=&source_type=competitor,定时采集由后端调度器维护。 import { useCallback, useEffect, useState } from 'react'; -import { history, useParams } from '@umijs/max'; +import { history, useLocation, useParams } from '@umijs/max'; import { Alert, App, Avatar, Button, Card, Descriptions, Flex, Popover, Space, Tag, Typography } from 'antd'; import { creatorAction, getOne } from '@/services/api'; import { conflictMessage, dateTime } from '@/utils/helpers'; @@ -44,6 +44,7 @@ function formatCount(value?: number | null): string { export default function Page() { const { id = '' } = useParams<{ id: string }>(); + const { search } = useLocation(); const [competitor, setCompetitor] = useState(null); const [pending, setPending] = useState(true); const [error, setError] = useState(null); @@ -73,7 +74,7 @@ export default function Page() { // 页头 actions:返回/同步/暂停恢复,对齐账号详情页形态。 usePageActions( - +