diff --git a/packages/components/table/BaseTable.tsx b/packages/components/table/BaseTable.tsx index e8a2dc8021..722c4cc4c0 100644 --- a/packages/components/table/BaseTable.tsx +++ b/packages/components/table/BaseTable.tsx @@ -54,9 +54,8 @@ const BaseTable = forwardRef((originalProps, ref) const bottomContentRef = useRef(null); const [tableFootHeight, setTableFootHeight] = useState(0); - const allTableClasses = useClassName(); const { classPrefix, virtualScrollClasses, tableLayoutClasses, tableBaseClass, tableColFixedClasses } = - allTableClasses; + useClassName(); // 表格基础样式类 const { tableClasses, sizeClassNames, tableContentStyles, tableElementStyles } = useStyle(props); const { isMultipleHeader, spansAndLeafNodes, thList } = useTableHeader({ columns: props.columns }); @@ -489,7 +488,6 @@ const BaseTable = forwardRef((originalProps, ref) tableContentRef, tableWidth, isWidthOverflow, - allTableClasses, rowKey, scroll: props.scroll, cellEmptyContent: props.cellEmptyContent, @@ -537,7 +535,6 @@ const BaseTable = forwardRef((originalProps, ref) ), // eslint-disable-next-line [ - allTableClasses, tableBodyProps.ellipsisOverlayClassName, tableBodyProps.rowAndColFixedPosition, tableBodyProps.showColumnShadow, diff --git a/packages/components/table/Cell.tsx b/packages/components/table/Cell.tsx index c8edb4cc0f..f89f2fd8e8 100644 --- a/packages/components/table/Cell.tsx +++ b/packages/components/table/Cell.tsx @@ -1,14 +1,16 @@ import React, { MouseEvent, MutableRefObject, ReactNode } from 'react'; import classNames from 'classnames'; -import { isFunction, get } from 'lodash-es'; +import { get, isFunction } from 'lodash-es'; + import TEllipsis from './Ellipsis'; -import { BaseTableCellParams, RowspanColspan, TableRowData, TdBaseTableProps } from './type'; -import { RowAndColFixedPosition } from './interface'; +import useClassName from './hooks/useClassName'; import { getColumnFixedStyles } from './hooks/useFixed'; -import { TableClassName } from './hooks/useClassName'; import { formatClassNames } from './utils'; -import { TooltipProps } from '../tooltip'; -import { PaginationProps } from '../pagination'; + +import type { PaginationProps } from '../pagination'; +import type { TooltipProps } from '../tooltip'; +import type { RowAndColFixedPosition } from './interface'; +import type { BaseTableCellParams, RowspanColspan, TableRowData, TdBaseTableProps } from './type'; export interface RenderEllipsisCellParams { cellNode: ReactNode; @@ -25,7 +27,6 @@ export interface CellProps { dataLength: number; cellSpans: RowspanColspan; cellEmptyContent: TdBaseTableProps['cellEmptyContent']; - tableClassNames: TableClassName; tableRef?: MutableRefObject; classPrefix?: string; overlayClassName?: string; @@ -94,11 +95,11 @@ function renderEllipsisCell(cellParams: BaseTableCellParams, param } const Cell = (props: CellProps) => { - const { cellParams, tableClassNames, tableRef, columnLength, classPrefix, overlayClassName, pagination } = props; + const { cellParams, tableRef, columnLength, classPrefix, overlayClassName, pagination } = props; const { col, colIndex, rowIndex } = cellParams; const { cellSpans, dataLength, rowAndColFixedPosition, cellEmptyContent, rowspanAndColspan, onClick } = props; const { tableColFixedClasses, tdEllipsisClass, tableBaseClass, tdAlignClasses, tableDraggableClasses } = - tableClassNames; + useClassName(); const cellNode = renderCell(cellParams, { cellEmptyContent, pagination }); const tdStyles = getColumnFixedStyles(col, colIndex, rowAndColFixedPosition, tableColFixedClasses); diff --git a/packages/components/table/TBody.tsx b/packages/components/table/TBody.tsx index cc2441392a..241b1d97e0 100644 --- a/packages/components/table/TBody.tsx +++ b/packages/components/table/TBody.tsx @@ -2,8 +2,9 @@ import React, { type CSSProperties, type MutableRefObject, type ReactNode, useMemo } from 'react'; import classNames from 'classnames'; import { camelCase, get, pick } from 'lodash-es'; + import { useLocaleReceiver } from '../locale/LocalReceiver'; -import { TableClassName } from './hooks/useClassName'; +import useClassName from './hooks/useClassName'; import useRowspanAndColspan from './hooks/useRowspanAndColspan'; import TR, { ROW_LISTENERS, TABLE_PROPS, type TrProps } from './TR'; @@ -25,7 +26,6 @@ export interface TableBodyProps extends BaseTableProps { isWidthOverflow?: boolean; virtualConfig: VirtualScrollConfig; pagination?: PaginationProps; - allTableClasses?: TableClassName; handleRowMounted?: (params: RowMountedParams) => void; } @@ -74,7 +74,7 @@ const trProperties = [ export default function TBody(props: TableBodyProps) { // 如果不是变量复用,没必要对每一个参数进行解构(解构过程需要单独的内存空间存储临时变量) - const { data, columns, rowKey, firstFullRow, lastFullRow, virtualConfig, allTableClasses } = props; + const { data, columns, rowKey, firstFullRow, lastFullRow, virtualConfig } = props; const { isVirtualScroll } = virtualConfig; const renderData = isVirtualScroll ? virtualConfig.visibleData : data; @@ -84,7 +84,7 @@ export default function TBody(props: TableBodyProps) { const { skipSpansMap } = useRowspanAndColspan(data, columns, rowKey, props.rowspanAndColspan); const isSkipSnapsMapNotFinish = Boolean(props.rowspanAndColspan && !skipSpansMap.size); - const { tableFullRowClasses, tableBaseClass } = allTableClasses; + const { tableFullRowClasses, tableBaseClass } = useClassName(); const tbodyClasses = useMemo(() => [tableBaseClass.body], [tableBaseClass.body]); const hasFullRowConfig = useMemo(() => firstFullRow || lastFullRow, [firstFullRow, lastFullRow]); @@ -217,7 +217,7 @@ export default function TBody(props: TableBodyProps) { // 垫上隐藏的 tr 元素高度 const translate = `translateY(${virtualConfig.translateY}px)`; - const posStyle: CSSProperties = isVirtualScroll + const posStyle = isVirtualScroll ? ({ transform: translate, msTransform: translate, diff --git a/packages/components/table/TR.tsx b/packages/components/table/TR.tsx index 4843f0cd47..a349765dea 100644 --- a/packages/components/table/TR.tsx +++ b/packages/components/table/TR.tsx @@ -87,7 +87,7 @@ export default function TR(props: TrProps) { const classNames = useClassName(); const trStyles = getRowFixedStyles( - get(row, rowKey || 'id'), + get(row, rowKey), rowIndex, dataLength, fixedRows, @@ -102,7 +102,7 @@ export default function TR(props: TrProps) { ); const classes = useMemo(() => { - const customClasses = formatRowClassNames(rowClassName, { row, rowIndex, rowKey, type: 'body' }, rowKey || 'id'); + const customClasses = formatRowClassNames(rowClassName, { row, rowIndex, rowKey, type: 'body' }, rowKey); return [trStyles?.classes, customClasses]; }, [row, rowClassName, rowIndex, rowKey, trStyles?.classes]); @@ -151,7 +151,6 @@ export default function TR(props: TrProps) { columnLength={props.columns.length} cellSpans={cellSpans} cellEmptyContent={props.cellEmptyContent} - tableClassNames={classNames} rowspanAndColspan={props.rowspanAndColspan} onClick={onClick} tableRef={props.tableRef} diff --git a/packages/components/table/_example/pagination-ajax.tsx b/packages/components/table/_example/pagination-ajax.tsx index 8346dfe922..d9c7e591cc 100644 --- a/packages/components/table/_example/pagination-ajax.tsx +++ b/packages/components/table/_example/pagination-ajax.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react'; +import { CheckCircleFilledIcon, CloseCircleFilledIcon, ErrorCircleFilledIcon } from 'tdesign-icons-react'; import { Table, Tag } from 'tdesign-react'; -import { ErrorCircleFilledIcon, CheckCircleFilledIcon, CloseCircleFilledIcon } from 'tdesign-icons-react'; import type { PrimaryTableProps, TableProps } from 'tdesign-react'; @@ -81,7 +81,7 @@ export default function TableBasic() { const { current, pageSize } = pageInfo; // 请求可能存在跨域问题 const url = new URL('https://randomuser.me/api'); - const params = { page: current, results: pageSize }; + const params = { page: current, results: pageSize, seed: 'tdesign' }; Object.keys(params).forEach((key) => url.searchParams.append(key, params[key])); const response = await fetch(url.toString()).then((x) => x.json()); setData(response.results); diff --git a/packages/components/table/_example/pagination.tsx b/packages/components/table/_example/pagination.tsx index 9805be89da..0d793e8da0 100644 --- a/packages/components/table/_example/pagination.tsx +++ b/packages/components/table/_example/pagination.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; -import { Table, Space, Radio, Tag } from 'tdesign-react'; -import { ErrorCircleFilledIcon, CheckCircleFilledIcon, CloseCircleFilledIcon } from 'tdesign-icons-react'; +import { CheckCircleFilledIcon, CloseCircleFilledIcon, ErrorCircleFilledIcon } from 'tdesign-icons-react'; +import { Radio, Space, Table, Tag } from 'tdesign-react'; import type { TableProps } from 'tdesign-react'; @@ -10,11 +10,11 @@ const statusNameListMap = { 2: { label: '审批过期', theme: 'warning', icon: }, }; +const TOTAL = 60; const data: TableProps['data'] = []; -const total = 59; -for (let i = 0; i < total; i++) { +for (let i = 0; i < TOTAL; i++) { data.push({ - index: i, + index: i + 1, applicant: ['贾明', '张三', '王芳'][i % 3], status: i % 3, channel: ['电子签署', '纸质签署', '纸质签署'][i % 3], @@ -28,6 +28,12 @@ for (let i = 0; i < total; i++) { } const columns: TableProps['columns'] = [ + { + colKey: 'row-select', + type: 'multiple', + width: 46, + disabled: ({ row }) => row.index % 4 === 0, + }, { colKey: 'serial-number', width: 80, title: '序号' }, { colKey: 'applicant', title: '申请人', width: '100' }, { @@ -51,12 +57,14 @@ const columns: TableProps['columns'] = [ { colKey: 'channel', title: '签署方式', width: '120' }, // { colKey: 'detail.email', title: '邮箱地址', ellipsis: true }, { colKey: 'createTime', title: '申请时间' }, - { colKey: 'row-select', type: 'multiple', width: 46 }, ]; export default function TableBasic() { const [reserveSelectedRowOnPaginate, setReserveSelectedRowOnPaginate] = useState(true); - const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [selectedRowKeys, setSelectedRowKeys] = useState( + Array.from({ length: TOTAL }, (_, i) => i + 1).filter((n) => n % 8 === 0), + ); + // const [current, setCurrent] = useState(2); // const [pageSize, setPageSize] = useState(5); @@ -82,7 +90,7 @@ export default function TableBasic() { pagination={{ defaultCurrent: 2, defaultPageSize: 5, - total, + total: TOTAL, showJumper: true, onChange(pageInfo) { console.log(pageInfo, 'onChange pageInfo'); @@ -123,8 +131,8 @@ export default function TableBasic() { }} selectedRowKeys={selectedRowKeys} onSelectChange={(val, context) => { - setSelectedRowKeys(val); - console.log(val, context); + setSelectedRowKeys(val as number[]); + console.log('onSelectChange', val, context); }} reserveSelectedRowOnPaginate={reserveSelectedRowOnPaginate} /> diff --git a/packages/components/table/_example/select-multiple.tsx b/packages/components/table/_example/select-multiple.tsx index 02cafd044f..3fef3d5811 100644 --- a/packages/components/table/_example/select-multiple.tsx +++ b/packages/components/table/_example/select-multiple.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; +import { CheckCircleFilledIcon, CloseCircleFilledIcon, ErrorCircleFilledIcon } from 'tdesign-icons-react'; import { Table, Tag } from 'tdesign-react'; -import { ErrorCircleFilledIcon, CheckCircleFilledIcon, CloseCircleFilledIcon } from 'tdesign-icons-react'; import type { TableProps } from 'tdesign-react'; @@ -48,7 +48,7 @@ const columns: TableProps['columns'] = [ const initData: TableProps['data'] = []; for (let i = 0; i < 5; i++) { initData.push({ - index: i + 100, + index: i + 1, applicant: ['贾明', '张三', '王芳'][i % 3], status: i % 3, channel: ['电子签署', '纸质签署', '纸质签署'][i % 3], @@ -63,11 +63,11 @@ for (let i = 0; i < 5; i++) { export default function TableSingleSort() { const [data] = useState([...initData]); - const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [selectedRowKeys, setSelectedRowKeys] = useState([4]); const onSelectChange: TableProps['onSelectChange'] = (value, { selectedRowData }) => { console.log(value, selectedRowData); - setSelectedRowKeys(value); + setSelectedRowKeys(value as number[]); }; return ( diff --git a/packages/components/table/hooks/useDragSort.ts b/packages/components/table/hooks/useDragSort.ts index b535b4068f..9993015fb6 100644 --- a/packages/components/table/hooks/useDragSort.ts +++ b/packages/components/table/hooks/useDragSort.ts @@ -1,16 +1,20 @@ // 表格 行拖拽 + 列拖拽功能 import { MutableRefObject, useEffect, useMemo, useRef, useState } from 'react'; -import Sortable, { SortableEvent, SortableOptions, MoveEvent } from 'sortablejs'; import { get } from 'lodash-es'; +import Sortable, { MoveEvent, SortableEvent, SortableOptions } from 'sortablejs'; + + import log from '@tdesign/common-js/log/index'; -import swapDragArrayElement from '@tdesign/common-js/utils/swapDragArrayElement'; import { getColumnDataByKey, getColumnIndexByKey } from '@tdesign/common-js/table/utils'; -import { PaginationProps } from '../../pagination'; -import { TableRowData, TdPrimaryTableProps, DragSortContext } from '../type'; -import useClassName from './useClassName'; +import swapDragArrayElement from '@tdesign/common-js/utils/swapDragArrayElement'; import { hasClass } from '../../_util/style'; import useLatest from '../../hooks/useLatest'; -import { BaseTableColumns } from '../interface'; +import useClassName from './useClassName'; +import { DEFAULT_CURRENT, DEFAULT_PAGE_SIZE } from './usePagination'; + +import type { PaginationProps } from '../../pagination'; +import type { BaseTableColumns } from '../interface'; +import type { DragSortContext, TableRowData, TdPrimaryTableProps } from '../type'; export default function useDragSort( props: TdPrimaryTableProps, @@ -68,8 +72,8 @@ export default function useDragSort( // 本地分页的表格,index 不同,需加上分页计数 function getDataPageIndex(index: number, pagination: PaginationProps) { - const current = pagination.current ?? pagination.defaultCurrent; - const pageSize = pagination.pageSize ?? pagination.defaultPageSize; + const current = pagination.current || pagination.defaultCurrent || DEFAULT_CURRENT; + const pageSize = pagination.pageSize || pagination.defaultPageSize || DEFAULT_PAGE_SIZE; // 开启本地分页的场景 if (!props.disableDataPage && pagination && data.length > pageSize) { return pageSize * (current - 1) + index; diff --git a/packages/components/table/hooks/usePagination.tsx b/packages/components/table/hooks/usePagination.tsx index 97c1068c97..18325796ec 100644 --- a/packages/components/table/hooks/usePagination.tsx +++ b/packages/components/table/hooks/usePagination.tsx @@ -3,6 +3,9 @@ import useConfig from '../../hooks/useConfig'; import Pagination, { PageInfo, PaginationProps } from '../../pagination'; import type { TableRowData, TdBaseTableProps } from '../type'; +export const DEFAULT_CURRENT = 1; +export const DEFAULT_PAGE_SIZE = 10; + // 分页功能包含:远程数据排序受控、远程数据排序非受控、本地数据排序受控、本地数据排序非受控 等 4 类功能 export default function usePagination(props: TdBaseTableProps, tableContentRef: React.RefObject) { const { pagination, data, disableDataPage } = props; @@ -15,7 +18,7 @@ export default function usePagination(props: TdBaseTableProps, tableContentRef: const isControlled = pagination?.current !== undefined; const calculatePaginatedData = useCallback( - (current = 1, pageSize = 10) => { + (current = DEFAULT_CURRENT, pageSize = DEFAULT_PAGE_SIZE) => { // data 数据数量超出分页大小时,则自动启动本地数据分页 const shouldPaginate = Boolean(!disableDataPage && data.length > pageSize); let newData: TableRowData[] = []; @@ -32,7 +35,7 @@ export default function usePagination(props: TdBaseTableProps, tableContentRef: ); const updateDataSourceAndPaginate = useCallback( - (current = 1, pageSize = 10) => { + (current = DEFAULT_CURRENT, pageSize = DEFAULT_PAGE_SIZE) => { const { newData, shouldPaginate } = calculatePaginatedData(current, pageSize); setIsPaginateData(shouldPaginate); setDataSource(newData); @@ -50,7 +53,7 @@ export default function usePagination(props: TdBaseTableProps, tableContentRef: // 受控情况 useEffect(() => { if (!pagination || !isControlled) return; - const [current, pageSize] = [pagination?.current || 1, pagination?.pageSize ?? 10]; + const [current, pageSize] = [pagination?.current || DEFAULT_CURRENT, pagination?.pageSize || DEFAULT_PAGE_SIZE]; updateDataSourceAndPaginate(current, pageSize); setInnerPagination({ current, pageSize }); }, [pagination, isControlled, updateDataSourceAndPaginate]); @@ -58,7 +61,10 @@ export default function usePagination(props: TdBaseTableProps, tableContentRef: // 非受控情况 useEffect(() => { if (!pagination || isControlled) return; - const [current, pageSize] = [pagination?.defaultCurrent || 1, pagination?.defaultPageSize ?? 10]; + const [current, pageSize] = [ + pagination?.defaultCurrent || DEFAULT_CURRENT, + pagination?.defaultPageSize || DEFAULT_PAGE_SIZE, + ]; updateDataSourceAndPaginate(current, pageSize); // eslint-disable-next-line react-hooks/exhaustive-deps }, [isControlled, updateDataSourceAndPaginate]); diff --git a/packages/components/table/hooks/useRowSelect.tsx b/packages/components/table/hooks/useRowSelect.tsx index b540333c6b..4b36e15da9 100644 --- a/packages/components/table/hooks/useRowSelect.tsx +++ b/packages/components/table/hooks/useRowSelect.tsx @@ -1,11 +1,17 @@ // 行选中相关功能:单选 + 多选 -import React, { useEffect, useState, MouseEvent, useMemo } from 'react'; -import { intersection, get, isFunction } from 'lodash-es'; -import { isRowSelectedDisabled } from '@tdesign/common-js/table/utils'; +import React, { MouseEvent, useEffect, useMemo, useState } from 'react'; +import { get, isFunction } from 'lodash-es'; + import log from '@tdesign/common-js/log/index'; +import { isRowSelectedDisabled } from '@tdesign/common-js/table/utils'; +import Checkbox from '../../checkbox'; import useControlled from '../../hooks/useControlled'; -import { +import Radio from '../../radio'; +import { DEFAULT_CURRENT, DEFAULT_PAGE_SIZE } from './usePagination'; + +import type { ClassName } from '../../common'; +import type { PrimaryTableCellParams, PrimaryTableCol, RowClassNameParams, @@ -13,10 +19,7 @@ import { TdBaseTableProps, TdPrimaryTableProps, } from '../type'; -import { TableClassName } from './useClassName'; -import Checkbox from '../../checkbox'; -import Radio from '../../radio'; -import { ClassName } from '../../common'; +import type { TableClassName } from './useClassName'; const selectedRowDataMap = new Map(); @@ -24,8 +27,7 @@ export default function useRowSelect( props: TdPrimaryTableProps, tableSelectedClasses: TableClassName['tableSelectedClasses'], ) { - const { selectedRowKeys, columns, data, rowKey, indeterminateSelectedRowKeys } = props; - const { pagination, reserveSelectedRowOnPaginate } = props; + const { columns, data, rowKey, indeterminateSelectedRowKeys, pagination, reserveSelectedRowOnPaginate } = props; const [currentPaginateData, setCurrentPaginateData] = useState(data); const [selectedRowClassNames, setSelectedRowClassNames] = useState(); const [tSelectedRowKeys, setTSelectedRowKeys] = useControlled(props, 'selectedRowKeys', props.onSelectChange, { @@ -39,24 +41,22 @@ export default function useRowSelect( // eslint-disable-next-line }, [reserveSelectedRowOnPaginate, data, currentPaginateData]); - // 选中的行,和所有可以选择的行,交集,用于计算 isSelectedAll 和 isIndeterminate - const intersectionKeys = intersection( - tSelectedRowKeys, - canSelectedRows.map((t) => get(t, rowKey || 'id')), - ); - useEffect( () => { if (reserveSelectedRowOnPaginate) return; // 分页变化时,在 onPageChange 中设置 setCurrentPaginateData,PrimaryTable 中 + if (!pagination) { + setCurrentPaginateData(data); + return; + } const { pageSize, current, defaultPageSize, defaultCurrent } = pagination; - const tPageSize = pageSize || defaultPageSize; - const tCurrent = current || defaultCurrent; + const tPageSize = pageSize || defaultPageSize || DEFAULT_PAGE_SIZE; + const tCurrent = current || defaultCurrent || DEFAULT_CURRENT; const newData = data.slice(tPageSize * (tCurrent - 1), tPageSize * tCurrent); setCurrentPaginateData(newData); }, // eslint-disable-next-line - [data, reserveSelectedRowOnPaginate], + [data, reserveSelectedRowOnPaginate, pagination], ); useEffect( @@ -81,22 +81,48 @@ export default function useRowSelect( return isRowSelectedDisabled(selectColumn, row, rowIndex); } - function getSelectedHeader() { - return () => { - const isIndeterminate = intersectionKeys.length > 0 && intersectionKeys.length < canSelectedRows.length; - const isChecked = - intersectionKeys.length !== 0 && - canSelectedRows.length !== 0 && - intersectionKeys.length === canSelectedRows.length; - return ( - - ); + function renderCheckAll() { + const currentData = reserveSelectedRowOnPaginate ? data : currentPaginateData; + const totalRowCount = currentData?.length || 0; + + const currentPageRowKeys = currentData?.map((row) => get(row, rowKey)) || []; + const selectedInCurrentPage = tSelectedRowKeys.filter((key) => currentPageRowKeys.includes(key)); + + const isChecked = totalRowCount > 0 && selectedInCurrentPage.length === totalRowCount; + const isIndeterminate = selectedInCurrentPage.length > 0 && selectedInCurrentPage.length < totalRowCount; + + const handleSelectAll = () => { + const canSelectedRowKeys = canSelectedRows.map((record) => get(record, rowKey)); + + const currentData = reserveSelectedRowOnPaginate ? data : currentPaginateData; + const disabledRowKeys = + currentData?.filter((row, rowIndex) => isDisabled(row, rowIndex)).map((row) => get(row, rowKey)) || []; + + const disabledSelectedRowKeys = tSelectedRowKeys?.filter((id) => disabledRowKeys.includes(id)) || []; + const allSelectableRowsSelected = canSelectedRowKeys.every((key) => tSelectedRowKeys.includes(key)); + const shouldSelectAll = !allSelectableRowsSelected; + + const allIds = shouldSelectAll + ? [...disabledSelectedRowKeys, ...canSelectedRowKeys] + : [...disabledSelectedRowKeys]; + + setTSelectedRowKeys(allIds, { + selectedRowData: shouldSelectAll + ? allIds.map((t) => selectedRowDataMap.get(t)) + : disabledSelectedRowKeys.map((t) => selectedRowDataMap.get(t)), + type: shouldSelectAll ? 'check' : 'uncheck', + currentRowKey: 'CHECK_ALL_BOX', + }); }; + + return ( + + ); } function getRowSelectDisabledData(p: PrimaryTableCellParams) { @@ -165,18 +191,6 @@ export default function useRowSelect( }); } - function handleSelectAll(checked: boolean) { - const reRowKey = rowKey || 'id'; - const canSelectedRowKeys = canSelectedRows.map((record) => get(record, reRowKey)); - const disabledSelectedRowKeys = selectedRowKeys?.filter((id) => !canSelectedRowKeys.includes(id)) || []; - const allIds = checked ? [...disabledSelectedRowKeys, ...canSelectedRowKeys] : [...disabledSelectedRowKeys]; - setTSelectedRowKeys(allIds, { - selectedRowData: checked ? allIds.map((t) => selectedRowDataMap.get(t)) : [], - type: checked ? 'check' : 'uncheck', - currentRowKey: 'CHECK_ALL_BOX', - }); - } - function formatToRowSelectColumn(col: PrimaryTableCol) { const isSelection = ['multiple', 'single'].includes(col.type); if (!isSelection) return col; @@ -185,7 +199,7 @@ export default function useRowSelect( width: col.width || 64, className: tableSelectedClasses.checkCell, cell: (p: PrimaryTableCellParams) => renderSelectCell(p), - title: col.type === 'multiple' ? getSelectedHeader() : col.title, + title: col.type === 'multiple' ? renderCheckAll() : col.title, }; } diff --git a/test/snap/__snapshots__/csr.test.jsx.snap b/test/snap/__snapshots__/csr.test.jsx.snap index 06e29da366..b9bcf3e33c 100644 --- a/test/snap/__snapshots__/csr.test.jsx.snap +++ b/test/snap/__snapshots__/csr.test.jsx.snap @@ -120593,6 +120593,9 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat class="t-table--layout-fixed" > + @@ -120608,14 +120611,34 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat - + +
+ +
+ csr test packages/components/table/_example/paginat 申请时间 - -
- -
- + + + 6 @@ -120731,6 +120749,8 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat 2022-02-01 + + @@ -120749,8 +120769,6 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat /> - - 7 @@ -120787,15 +120805,20 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat 2022-03-01 + + - - 8 @@ -120843,6 +120864,8 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat 2022-04-01 + + @@ -120861,8 +120884,6 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat /> - - 9 @@ -120899,6 +120920,8 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat 2022-01-01 + + @@ -120917,8 +120940,6 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat /> - - 10 @@ -120955,24 +120976,6 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat 2022-02-01 - - - @@ -120990,7 +120993,7 @@ exports[`csr snapshot test > csr test packages/components/table/_example/paginat
- 共 59 条数据 + 共 60 条数据
csr test packages/components/table/_example/select- class="t-table__th-cell-inner" >