From 247d0b862cfd1a49aa20cfd871d5b20d8b091d7b Mon Sep 17 00:00:00 2001 From: huyueb <1062887235@qq.com> Date: Wed, 27 Dec 2017 22:21:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8=E4=BD=BF=E7=94=A8se?= =?UTF-8?q?lectDisabled=E5=8F=82=E6=95=B0=EF=BC=8C=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E5=85=A8=E9=80=89=E6=8C=89=E9=92=AE=E6=97=B6=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8D=E6=AD=A3=E7=A1=AEbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- demo/demolist/Demo13.js | 10 +--------- docs/api.md | 5 +++-- src/lib/multiSelect.js | 28 ++++++++++++++++++++-------- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 8aa13e2..d133639 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ class Demo extends Component { | 参数 | 说明 | 类型 | 默认值 | | :--------------------- | :--------------------------------------- | :------------------------------------- | :-------------- | -| data | 传入的表格数据 | array | [] | +| data | 传入的表格数据(key值必需,否则会导致部分功能出现问题。建议使用唯一的值,如id) | array | [] | | bordered | 是否展示外边框和列边框 | boolean | false | | columns | 列的配置表,具体配置见下表 | array | - | | defaultExpandAllRows | 默认是否展开所有行 | bool | false | @@ -90,7 +90,8 @@ class Demo extends Component { | expandRowByClick | 设置展开行是否通过点击行触发,此参数需要与上面参数搭配使用(默认是通过点击行前面的加号展开行 | bool | false | | footerScroll | 表尾和body是否公用同一个横向滚动条。( 如果footer中也是一个table组件,并且也具有滚动条,那么也需要加入footerScroll参数。 ) | bool | false | -*注意: 一旦使用了expandedRowRender参数,data参数中的key属性必须设置。否则会导致无法展开!* +*注意: data参数中的key值必需,否则会导致部分功能出现问题!建议使用唯一的值,如id* + ### Column diff --git a/demo/demolist/Demo13.js b/demo/demolist/Demo13.js index 53155b2..b012510 100644 --- a/demo/demolist/Demo13.js +++ b/demo/demolist/Demo13.js @@ -25,15 +25,6 @@ const columns13 = [ key: "b", width: 200 }, - { - title: "年龄", - dataIndex: "c", - key: "c", - width: 200, - sumCol: true, - sorter: (a, b) => a.c - b.c - }, - { title: "年龄", dataIndex: "c", @@ -63,6 +54,7 @@ class Demo13 extends Component { console.log(data); }; selectDisabled = (record, index) => { + console.log(record); if (index === 1) { return true; } diff --git a/docs/api.md b/docs/api.md index 7ca0fe3..a21576e 100644 --- a/docs/api.md +++ b/docs/api.md @@ -17,7 +17,7 @@ import 'bee-table/build/Table.css'; | 参数 | 说明 | 类型 | 默认值 | | :--------------------- | :--------------------------------------- | :------------------------------------- | :-------------- | -| data | 传入的表格数据 | array | [] | +| data | 传入的表格数据(key值必需,否则会导致部分功能出现问题。建议使用唯一的值,如id) | array | [] | | bordered | 是否展示外边框和列边框 | boolean | false | | columns | 列的配置表,具体配置见下表 | array | - | | defaultExpandAllRows | 默认是否展开所有行 | bool | false | @@ -48,7 +48,8 @@ import 'bee-table/build/Table.css'; | expandRowByClick | 设置展开行是否通过点击行触发,此参数需要与上面参数搭配使用(默认是通过点击行前面的加号展开行 | bool | false | | footerScroll | 表尾和body是否公用同一个横向滚动条。( 如果footer中也是一个table组件,并且也具有滚动条,那么也需要加入footerScroll参数。 ) | bool | false | -*注意: 一旦使用了expandedRowRender参数,data参数中的key属性必须设置。否则会导致无法展开!* +*注意: data参数中的key值必需,否则会导致部分功能出现问题!建议使用唯一的值,如id* + ### Column diff --git a/src/lib/multiSelect.js b/src/lib/multiSelect.js index dde4465..07f951e 100644 --- a/src/lib/multiSelect.js +++ b/src/lib/multiSelect.js @@ -24,9 +24,17 @@ export default function multiSelect(Table) { return class BookLoader extends Component { constructor(props) { super(props); + let { selectDisabled, data } = props, + checkedObj = {}; + for (var i = 0; i < data.length; i++) { + let bool = selectDisabled(data[i], i); + if (!bool) { + checkedObj[data[i]["key"]] = false; + } + } this.state = { checkedAll: false, - checkedObj: {}, + checkedObj: checkedObj, selIds: [], data: this.props.data }; @@ -35,12 +43,9 @@ export default function multiSelect(Table) { let self = this; let listData = self.state.data.concat(); let checkedObj = Object.assign({}, self.state.checkedObj); - let data = self.props.data; + let { data } = self.props; let selIds = []; let id = self.props.multiSelect.param; - for (var i = 0; i < data.length; i++) { - checkedObj[data[i]["key"]] = !self.state.checkedAll; - } if (self.state.checkedAll) { selIds = []; } else { @@ -52,6 +57,14 @@ export default function multiSelect(Table) { } } } + for (var i = 0; i < data.length; i++) { + let bool = checkedObj.hasOwnProperty(data[i]["key"]); + if (!bool) { + selIds.splice(i, 1); + } else { + checkedObj[data[i]["key"]] = !self.state.checkedAll; + } + } self.setState({ checkedAll: !self.state.checkedAll, checkedObj: checkedObj, @@ -96,7 +109,6 @@ export default function multiSelect(Table) { }; renderColumnsMultiSelect(columns) { const { data } = this.state; - let {selectDisabled} = this.props; let checkedObj = Object.assign({}, this.state.checkedObj); let checkedArray = Object.keys(checkedObj); let { multiSelect } = this.props; @@ -127,12 +139,12 @@ export default function multiSelect(Table) { dataIndex: "checkbox", width: "100px", render: (text, record, index) => { - let bool = selectDisabled(record, index); + let bool = checkedObj.hasOwnProperty(record["key"]); return (