Skip to content

Commit b81e91f

Browse files
author
liyuan-meng
committed
feat: [CTable] 多选表格,支持外部调用函数回显已选数据 this.tableRef.current.init(this.state.checkedGoodsData)
1 parent 5c44b2f commit b81e91f

2 files changed

Lines changed: 13 additions & 11 deletions

File tree

src/components/c-table/demos/goods-table.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ function createGuid() {
1818
return guid.replace(/^\d+/, '');
1919
}
2020

21-
const data = new Array(30).fill(1).map((item, index) => (
21+
const data = new Array(100).fill(1).map((item, index) => (
2222
{
2323
productId: 121410327 + index,
2424
productName: '数云牌铂金戒指' + index,
2525
details: '详情详情详情详情' + index,
2626
level: 0,
27+
picUrl: 'https://brand-guide.shuyun.com/IAM/77c28a6547cd.png',
2728
skus: index === 0 ? [] : new Array(3).fill(1).map((item, index1) => {
2829
return {
2930
productId: createGuid(),
@@ -43,14 +44,15 @@ class CTableDemo extends Component {
4344
this.state = {
4445
isExpandAll: true,
4546
currentData: [],
46-
checkedGoodsData: [],
47+
checkedGoodsData: [data[0]],
4748
checkedSkusData: [],
4849
expandedRowKeys: [],
4950
defaultShowColumns: [],
5051
};
5152
this.updateBtnText();
5253

5354
setTimeout(() => {
55+
this.tableRef.current.init(this.state.checkedGoodsData);
5456
this.setState({ defaultShowColumns: this.columns.slice(0, 4).map(item => item.dataIndex) });
5557
}, 500);
5658
}
@@ -312,7 +314,7 @@ class CTableDemo extends Component {
312314
expandedRowKeys: this.state.expandedRowKeys,
313315
onExpand: this.onExpand
314316
}}
315-
checkedData={this.state.checkedGoodsData.map(item => ({ productId: item.productId }))}
317+
// checkedData={this.state.checkedGoodsData.map(item => ({ productId: item.productId }))}
316318
columnData={this.columns}
317319
onCheckedAfter={checkedList => {
318320
this.setState({

src/components/c-table/index.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,10 @@ class CTable extends Component {
264264
/**
265265
* 初始化已选数据、高度等
266266
*/
267-
init = () => {
267+
init = (checkedData) => {
268268
this.leafNodesMap = this.getLeafNodesMap(this.state.data);
269-
this.setCheckedData();
270-
this.updateSelectedNodes();
269+
this.setCheckedData(checkedData);
270+
this.updateSelectedNodes(() => {}, checkedData);
271271

272272
this.column.setColumnData();
273273

@@ -495,7 +495,7 @@ class CTable extends Component {
495495
* 更新已选数据列表
496496
* @param onCheckedAfter
497497
*/
498-
updateSelectedNodes = (onCheckedAfter = () => {}) => {
498+
updateSelectedNodes = (onCheckedAfter = () => {}, _checkedData) => {
499499
const selectedNodeList = [];
500500
const { leafNodesMap } = this;
501501
Object.keys(leafNodesMap).forEach((key) => {
@@ -510,7 +510,7 @@ class CTable extends Component {
510510
}
511511
} else {
512512
// 叶子节点无法获取到的情况(可能已选节点不在当前页)
513-
const checkedData = this.props.checkedData.find(
513+
const checkedData = (_checkedData || this.props.checkedData).find(
514514
(node) => this.getKeyFieldVal(node) === leafNodesMap[key],
515515
);
516516
if (checkedData) {
@@ -524,9 +524,9 @@ class CTable extends Component {
524524
/**
525525
* 已选数据回显
526526
*/
527-
setCheckedData = () => {
527+
setCheckedData = (checkedData) => {
528528
// 更新叶子节点 leafNodesMap 的选中状态
529-
this.props.checkedData?.forEach((cNode) => {
529+
(checkedData || this.props.checkedData)?.forEach((cNode) => {
530530
const cNodeVal = this.getKeyFieldVal(cNode);
531531
if (this.leafNodesMap[cNodeVal]) {
532532
this.leafNodesMap[cNodeVal]?.childNodes?.forEach((node) => {
@@ -539,7 +539,7 @@ class CTable extends Component {
539539
});
540540
const leafNodeKeys = Object.keys(this.leafNodesMap);
541541
leafNodeKeys.forEach((key) => {
542-
const isCheckedNode = !!this.props?.checkedData.find(
542+
const isCheckedNode = !!(checkedData || this.props?.checkedData).find(
543543
(node) => String(this.getKeyFieldVal(node)) === String(key),
544544
);
545545
// 不是已选节点 && (没有子节点被选中 或者 全部子节点都被选中)

0 commit comments

Comments
 (0)