fix(web): remove duplicate monitoring row spacing and border

This commit is contained in:
2026-09-28 10:48:56 +08:00
parent 5e391b70e9
commit 8fe66f24a0
2 changed files with 28 additions and 18 deletions
@@ -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 (
<div style={rowHoverStyle} onClick={() => history.push(`/accounts/monitoring/${row.id}`)}>
<div style={{ cursor: 'pointer' }} onClick={() => history.push(`/accounts/monitoring/${row.id}`)}>
<Flex justify="space-between" align="flex-start" gap={16}>
<Flex align="flex-start" gap={12}>
<Avatar size={44} src={row.avatar_url || undefined}>
@@ -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, /<div style=\{\{ cursor: 'pointer' \}\}/);
assert.doesNotMatch(row, /padding|borderBottom|rowHoverStyle/);
});