refactor(ui): 全站 message.useMessage 统一 App.useApp,删除 contextHolder(走查 P1-#4)

This commit is contained in:
2026-09-28 07:22:18 +08:00
parent e52d8c797b
commit 96a4692c96
17 changed files with 106 additions and 311 deletions
@@ -3,21 +3,7 @@
// 数据走 GET /creator/accounts/monitor-views(画像 + 作品数/最近发布聚合),对齐竞品列表画像形态。
import { useCallback, useEffect, useState } from 'react';
import { history } from '@umijs/max';
import {
Flex,
Alert,
Button,
Card,
Form,
Modal,
Popconfirm,
Select,
Space,
Table,
Tag,
Typography,
message,
} from 'antd';
import { Alert, App, Button, Card, Flex, Form, Modal, Popconfirm, Select, Space, Table, Tag, Typography } from 'antd';
import { PlusOutlined, ReloadOutlined } from '@ant-design/icons';
import type { ColumnsType } from 'antd/es/table';
import { remove, creatorUpdate, creatorGet } from '@/services/api';
@@ -43,7 +29,7 @@ export default function AccountManagementList() {
const [tagForm] = Form.useForm<{ tags: string[] }>();
const [tagBusy, setTagBusy] = useState(false);
const [actionBusy, setActionBusy] = useState('');
const [messageApi, contextHolder] = message.useMessage();
const { message: messageApi } = App.useApp();
const load = useCallback(async () => {
setPending(true);
@@ -54,8 +40,7 @@ export default function AccountManagementList() {
(rows ?? []).map((account: any) => ({
...account,
name: account.name,
tags: account.tags ?? [],
})),
tags: account.tags ?? [] })),
);
} catch (loadError) {
setError(loadError);
@@ -113,8 +98,7 @@ export default function AccountManagementList() {
{account.platform_account_key}
</Typography.Paragraph>
</div>
),
},
) },
{
title: '作品数据',
dataIndex: 'work_count',
@@ -125,13 +109,11 @@ export default function AccountManagementList() {
最近发布 {account.latest_published_at ? dateTime(account.latest_published_at) : '—'}
</Typography.Text>
</Flex>
),
},
) },
{
title: '标签',
dataIndex: 'tags',
render: (tags?: string[]) => (tags?.length ? tags.map((tag) => <Tag key={tag}>{tag}</Tag>) : <Typography.Text type="secondary">未设置</Typography.Text>),
},
render: (tags?: string[]) => (tags?.length ? tags.map((tag) => <Tag key={tag}>{tag}</Tag>) : <Typography.Text type="secondary">未设置</Typography.Text>) },
{
title: '状态',
dataIndex: 'status',
@@ -142,8 +124,7 @@ export default function AccountManagementList() {
</Tag>
<Typography.Text type="secondary">{account.authorization_status === 'authorized' ? '已授权' : '已撤销'}</Typography.Text>
</Flex>
),
},
) },
{
title: '操作',
key: 'actions',
@@ -169,13 +150,11 @@ export default function AccountManagementList() {
</Button>
</Popconfirm>
</Space>
),
},
) },
];
return (
<Card variant="outlined">
{contextHolder}
<Flex justify="space-between" align="center" style={{ marginBottom: 16 }}>
<Typography.Text type="secondary">共 {rows.length} 个自有账号</Typography.Text>
<Space>
@@ -2,25 +2,7 @@
// 展示作者头像与粉丝/关注/作品/最近发布等账号画像属性(migration 038 字段 + work 聚合)。
import { useCallback, useEffect, useState } from 'react';
import { history } from '@umijs/max';
import {
Alert,
Avatar,
Button,
Card,
Descriptions,
Empty,
Flex,
Form,
Listy,
Modal,
Popconfirm,
Select,
Space,
Spin,
Tag,
Typography,
message,
} from 'antd';
import { Alert, App, Avatar, Button, Card, Descriptions, Empty, Flex, Form, Listy, Modal, Popconfirm, Select, Space, Spin, Tag, Typography } from 'antd';
import { CloudUploadOutlined, ReloadOutlined } from '@ant-design/icons';
import { getList, remove, creatorAction, creatorUpdate } from '@/services/api';
import { conflictMessage, dateTime, platformLabel } from '@/utils/helpers';
@@ -50,8 +32,7 @@ const syncStatusMeta: Record<string, { color?: string; label: string }> = {
running: { color: 'processing', label: '同步中' },
paused: { label: '已暂停' },
failed: { color: 'error', label: '同步失败' },
blocked: { color: 'warning', label: '同步受阻' },
};
blocked: { color: 'warning', label: '同步受阻' } };
function formatCount(value?: number | null): string {
if (value === null || value === undefined) return '—';
@@ -66,7 +47,7 @@ export default function MonitoringAccountList() {
const [tagForm] = Form.useForm<{ tags: string[] }>();
const [tagBusy, setTagBusy] = useState(false);
const [actionBusy, setActionBusy] = useState('');
const [messageApi, contextHolder] = message.useMessage();
const { message: messageApi } = App.useApp();
const load = useCallback(async () => {
setPending(true);
@@ -152,7 +133,6 @@ export default function MonitoringAccountList() {
return (
<Card variant="outlined">
{contextHolder}
<Flex justify="space-between" align="center" style={{ marginBottom: 16 }}>
<Typography.Text type="secondary">共 {rows.length} 个监控账号</Typography.Text>
<Space>
@@ -232,8 +212,7 @@ export default function MonitoringAccountList() {
<Typography.Text type="danger" style={{ fontSize: 12 }}>{row.sync_error}</Typography.Text>
) : (
'—'
),
},
) },
]}
/>
</div>
+5 -24
View File
@@ -4,30 +4,14 @@
// 指标 GET /creator/works/:id/metrics,评论 GET /creator/comments?work_id=(定时采集由后端调度器维护)。
import { useCallback, useEffect, useMemo, useState } from 'react';
import { Line } from '@ant-design/charts';
import {
Alert,
Button,
Card,
Col,
Drawer,
Empty,
Flex,
InputNumber,
Row,
Space,
Spin,
Table,
Typography,
message,
} from 'antd';
import { Alert, App, Button, Card, Col, Drawer, Empty, Flex, InputNumber, Row, Space, Spin, Table, Typography } from 'antd';
import {
CommentOutlined,
EyeOutlined,
FireOutlined,
LikeOutlined,
ReloadOutlined,
ShareAltOutlined,
} from '@ant-design/icons';
ShareAltOutlined } from '@ant-design/icons';
import { creatorGet, getList } from '@/services/api';
import { conflictMessage, dateTime } from '@/utils/helpers';
@@ -49,8 +33,7 @@ function GrowthChart({ metrics }: { metrics: any[] }) {
.map((series) => ({
time: dateTime(point.collected_at),
metric: series.label,
value: point[series.key],
})),
value: point[series.key] })),
),
[metrics],
);
@@ -88,7 +71,7 @@ export default function WorksGallery({ sourceId, sourceType, emptyHint }: WorksG
const [commentPage, setCommentPage] = useState(1);
const [commentTotal, setCommentTotal] = useState(0);
const [commentsPending, setCommentsPending] = useState(false);
const [messageApi, contextHolder] = message.useMessage();
const { message: messageApi } = App.useApp();
const loadWorks = useCallback(async () => {
setWorksPending(true);
@@ -149,7 +132,6 @@ export default function WorksGallery({ sourceId, sourceType, emptyHint }: WorksG
return (
<>
{contextHolder}
<Card
title="作品列表"
extra={
@@ -290,8 +272,7 @@ export default function WorksGallery({ sourceId, sourceType, emptyHint }: WorksG
setCommentPage(page);
loadComments(detailWork.id, page);
},
hideOnSinglePage: true,
}}
hideOnSinglePage: true }}
columns={[
{ title: '作者', dataIndex: 'author_name', width: 140, render: (v) => v || '—' },
{ title: '内容', dataIndex: 'content', ellipsis: true },