Add click-to-lock row highlighting
Clicking a row locks an orange highlight (#fff7e6) across the whole row including fixed columns; clicking the same row unlocks, clicking another switches. Lock resets on search/clear. Highlight survives horizontal scroll since rowClassName applies to all row fragments. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -31,13 +31,10 @@ import {
|
||||
arrayMove,
|
||||
} from "@dnd-kit/sortable";
|
||||
import { CSS } from "@dnd-kit/utilities";
|
||||
import { nextLockedRow, type DataRow } from "./table-filters";
|
||||
|
||||
const { Title, Text } = Typography;
|
||||
|
||||
interface DataRow {
|
||||
[key: string]: string | number | null;
|
||||
}
|
||||
|
||||
interface ColumnConfig {
|
||||
key: string;
|
||||
visible: boolean;
|
||||
@@ -450,6 +447,7 @@ export default function Home() {
|
||||
const [columnConfig, setColumnConfig] = useState<ColumnConfig[]>(loadConfig);
|
||||
const [modalOpen, setModalOpen] = useState(false);
|
||||
const [exporting, setExporting] = useState(false);
|
||||
const [lockedRowKey, setLockedRowKey] = useState<string | null>(null);
|
||||
|
||||
// Persist config
|
||||
useEffect(() => {
|
||||
@@ -471,6 +469,7 @@ export default function Home() {
|
||||
setColumns(json.columns);
|
||||
setData(json.data);
|
||||
setSearched(true);
|
||||
setLockedRowKey(null);
|
||||
} catch {
|
||||
setError("网络请求失败");
|
||||
} finally {
|
||||
@@ -483,6 +482,7 @@ export default function Home() {
|
||||
setColumns([]);
|
||||
setSearched(false);
|
||||
setError(null);
|
||||
setLockedRowKey(null);
|
||||
}, []);
|
||||
|
||||
const handleExport = useCallback(async () => {
|
||||
@@ -582,6 +582,13 @@ export default function Home() {
|
||||
columns={tableColumns}
|
||||
dataSource={data}
|
||||
rowKey="ID"
|
||||
onRow={(record) => ({
|
||||
onClick: () =>
|
||||
setLockedRowKey((prev) => nextLockedRow(prev, String(record.ID))),
|
||||
})}
|
||||
rowClassName={(record) =>
|
||||
String(record.ID) === lockedRowKey ? "row-locked" : ""
|
||||
}
|
||||
bordered
|
||||
size="small"
|
||||
pagination={false}
|
||||
|
||||
Reference in New Issue
Block a user