diff --git a/web/src/components/accounts/MonitoringAccountList.tsx b/web/src/components/accounts/MonitoringAccountList.tsx index 8c7bce3..b12e1b1 100644 --- a/web/src/components/accounts/MonitoringAccountList.tsx +++ b/web/src/components/accounts/MonitoringAccountList.tsx @@ -2,25 +2,11 @@ // 展示作者头像与粉丝/关注/作品/最近发布等账号画像属性(migration 038 字段 + work 聚合)。 import { useCallback, useEffect, useState } from 'react'; import { history } from '@umijs/max'; -import { Alert, App, Avatar, Button, Card, Descriptions, Empty, Flex, Form, Listy, Modal, Popconfirm, Select, Space, Spin, Tag, theme, Typography } 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'; -const useRowHoverStyle = () => { - const { token } = theme.useToken(); - return { - padding: 16, - borderBottom: `1px solid ${token.colorSplit}`, - borderRadius: token.borderRadiusLG, - cursor: 'pointer', - transition: 'background-color 0.2s', - ['@media (hover: hover)']: { - '&:hover': { backgroundColor: token.colorFillQuaternary }, - }, - } as const; -}; - interface CompetitorRow { id: string; platform: string; @@ -143,8 +129,6 @@ export default function MonitoringAccountList() { } } - const rowHoverStyle = useRowHoverStyle(); - const syncMeta = syncStatusMeta[tagTarget?.sync_status ?? ''] || { label: tagTarget?.sync_status || '—' }; return ( @@ -167,7 +151,7 @@ export default function MonitoringAccountList() { itemRender={(row) => { const meta = syncStatusMeta[row.sync_status ?? ''] || { label: row.sync_status || '—' }; return ( -
history.push(`/accounts/monitoring/${row.id}`)}> +
history.push(`/accounts/monitoring/${row.id}`)}> diff --git a/web/tests/monitoring-account-list.test.cjs b/web/tests/monitoring-account-list.test.cjs new file mode 100644 index 0000000..8808453 --- /dev/null +++ b/web/tests/monitoring-account-list.test.cjs @@ -0,0 +1,26 @@ +const assert = require('node:assert/strict'); +const { readFileSync } = require('node:fs'); +const { test } = require('node:test'); +const ts = require('typescript'); + +const source = ts.createSourceFile( + 'MonitoringAccountList.tsx', + readFileSync(`${__dirname}/../src/components/accounts/MonitoringAccountList.tsx`, 'utf8'), + ts.ScriptTarget.Latest, + true, + ts.ScriptKind.TSX, +); + +test('监控账号行由 Listy 独占内边距和分隔线,保留详情入口', () => { + let itemRender; + function visit(node) { + if (ts.isJsxAttribute(node) && node.name.getText(source) === 'itemRender') itemRender = node; + ts.forEachChild(node, visit); + } + visit(source); + assert.ok(itemRender, '应使用 Listy itemRender'); + const row = itemRender.getText(source); + assert.match(row, /history\.push\(`\/accounts\/monitoring\/\$\{row\.id\}`\)/); + assert.match(row, /