add:添加过滤行功能的清除按钮以及下拉条件的清除.

This commit is contained in:
kvkens 2018-09-26 22:01:13 +08:00
parent d52c9c26ca
commit 9287420466
12 changed files with 2077 additions and 1494 deletions

2
.gitignore vendored
View File

@ -39,3 +39,5 @@ jspm_packages
coverage coverage
.*.swp .*.swp
package-lock.json package-lock.json
demo/.DS_Store
demo/demolist/.DS_Store

BIN
demo/.DS_Store vendored

Binary file not shown.

Binary file not shown.

View File

@ -12,9 +12,9 @@ import Table from '../../src';
const columns26 = [ const columns26 = [
{ title: "姓名", width: 180, dataIndex: "name", key: "name", filterType: "text", filterDropdown: "show" }, { title: "姓名", width: 180, dataIndex: "name", key: "name", filterType: "text", filterDropdown: "show" },
{ title: "年龄", width: 120, dataIndex: "age", key: "age", filterType: "dropdown" }, { title: "年龄", width: 150, dataIndex: "age", key: "age", filterType: "dropdown", filterDropdown: "show" },
{ title: "日期", width: 200, dataIndex: "date", key: "date", filterType: "date" }, { title: "日期", width: 200, dataIndex: "date", key: "date", filterType: "date", filterDropdown: "show", format: "YYYY-MM-DD" },
{ title: "居住地址", width: 120, dataIndex: "address", key: "address", filterType: "dropdown" }, { title: "居住地址", width: 150, dataIndex: "address", key: "address", filterType: "dropdown", filterDropdown: "show" },
{ title: "备注", dataIndex: "mark", key: "mark" } { title: "备注", dataIndex: "mark", key: "mark" }
]; ];
@ -23,7 +23,7 @@ const data26 = [
key: "1", key: "1",
name: "John Brown", name: "John Brown",
age: 32, age: 32,
date: "2018-09-18 09:46:44", date: "2018-09-19",
address: "朝阳区", address: "朝阳区",
mark: "无" mark: "无"
}, },
@ -31,7 +31,7 @@ const data26 = [
key: "2", key: "2",
name: "Jim Green", name: "Jim Green",
age: 40, age: 40,
date: "2018-09-18 09:46:44", date: "2018-09-18",
address: "朝阳区", address: "朝阳区",
mark: "无" mark: "无"
}, },
@ -39,7 +39,7 @@ const data26 = [
key: "3", key: "3",
name: "Jim Green", name: "Jim Green",
age: 40, age: 40,
date: "2018-09-18 09:46:44", date: "2018-09-18",
address: "东城区", address: "东城区",
mark: "无" mark: "无"
}, },
@ -47,14 +47,14 @@ const data26 = [
key: "4", key: "4",
name: "Jim Green", name: "Jim Green",
age: 40, age: 40,
date: "2018-09-18 09:46:44", date: "2018-09-18",
address: "东城区", address: "东城区",
mark: "无" mark: "无"
}, { }, {
key: "5", key: "5",
name: "John Brown", name: "John Brown",
age: 32, age: 32,
date: "2018-09-18 09:46:44", date: "2018-09-18",
address: "海淀区", address: "海淀区",
mark: "无" mark: "无"
}, },
@ -62,7 +62,7 @@ const data26 = [
key: "6", key: "6",
name: "Jim Green", name: "Jim Green",
age: 48, age: 48,
date: "2018-09-18 09:46:44", date: "2018-09-18",
address: "海淀区", address: "海淀区",
mark: "无" mark: "无"
}, },
@ -70,7 +70,7 @@ const data26 = [
key: "7", key: "7",
name: "Jim Green", name: "Jim Green",
age: 40, age: 40,
date: "2018-09-18 09:46:44", date: "2018-09-18",
address: "海淀区", address: "海淀区",
mark: "无" mark: "无"
}, },
@ -78,7 +78,7 @@ const data26 = [
key: "8", key: "8",
name: "Jim Green", name: "Jim Green",
age: 38, age: 38,
date: "2018-09-18 09:46:44", date: "2018-09-18",
address: "海淀区", address: "海淀区",
mark: "无" mark: "无"
} }

File diff suppressed because one or more lines are too long

2
dist/demo.css.map vendored

File diff suppressed because one or more lines are too long

3162
dist/demo.js vendored

File diff suppressed because one or more lines are too long

2
dist/demo.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -6,10 +6,38 @@ import Icon from 'bee-icon';
const { Item } = Menu; const { Item } = Menu;
class FilterDropDown extends Component { class FilterDropDown extends Component {
constructor() {
super();
this.state = {
selectValue: []
}
}
onSelectDropdown = (s) => {
let { onSelectDropdown } = this.props;
if (onSelectDropdown) {
this.setState({
selectValue: s.key
}, () => {
onSelectDropdown(s);
});
}
}
onClickClear = () => {
let { onClickClear } = this.props;
if (onClickClear) {
this.setState({
selectValue: []
}, () => {
onClickClear();
});
}
}
render() { render() {
let { isShowCondition } = this.props;
let dropmenu = ( let dropmenu = (
<Menu <Menu
onSelect={this.props.onSelectDropdown} onSelect={this.onSelectDropdown}
selectedKeys={this.state.selectValue}
> >
<Item key="1">等于</Item> <Item key="1">等于</Item>
<Item key="2">包含</Item> <Item key="2">包含</Item>
@ -20,14 +48,16 @@ class FilterDropDown extends Component {
<Item key="7">以开始</Item> <Item key="7">以开始</Item>
</Menu> </Menu>
); );
return ( return (<div>
<Dropdown {isShowCondition == 'show' && <Dropdown
trigger={['click']} trigger={['click']}
overlay={dropmenu} overlay={dropmenu}
animation="slide-up" animation="slide-up"
> >
<Button shape="border" style={{ marginLeft: "5px", minWidth: "0px", width: "38px", padding: 0 }}><Icon style={{ padding: 0 }} type="uf-navmenu" /></Button> <Button shape="border" style={{ marginLeft: "3px", minWidth: "0px", width: "24px", padding: 0 }}><Icon style={{ padding: 0 }} type="uf-treearrow-down" /></Button>
</Dropdown> </Dropdown>}
<Button onClick={this.onClickClear} shape="border" style={{ marginLeft: "1px", minWidth: "0px", width: "24px", padding: 0, "visibility": this.props.isShowClear || this.state.selectValue.length > 0 ? "visible" : "hidden" }}><Icon style={{ padding: 0, "visibility": this.props.isShowClear || this.state.selectValue.length > 0 ? "visible" : "hidden" }} type="uf-close" /></Button>
</div>
); );
} }
} }

View File

@ -10,31 +10,122 @@ const propTypes = {
}; };
class FilterType extends Component { class FilterType extends Component {
constructor() {
super();
this.state = {
text: "",
selectValue: "",
dateValue: "",
open: false
}
}
//清除文本
clearText = () => {
this.setState({
text: ""
}, () => {
this.changeText("");
});
}
//设置文本
changeText = (val) => {
let { onChange } = this.props;
if (onChange) {
onChange(val);
this.setState({
text: val
});
}
}
//设置下拉值
changeSelect = (val) => {
let { onChange } = this.props;
if (onChange) {
onChange(val);
this.setState({
selectValue: val
});
}
}
//清除下拉值
clearSelectValue = () => {
this.setState({
selectValue: ""
}, () => {
this.changeSelect("");
});
}
//清除日期值
clearDateValue = () => {
this.setState({
dateValue: ""
}, () => {
this.changeDate("");
});
}
//设置日期值
changeDate = (val) => {
let { onChange } = this.props;
if (onChange) {
onChange(val);
this.setState({
dateValue: val,
open: false
});
}
}
//组件渲染
renderControl = (rendertype) => { renderControl = (rendertype) => {
let { filterDropdown, className, onChange, onSelectDropdown, clsPrefix } = this.props; let { filterDropdown, className, onChange, onSelectDropdown, clsPrefix } = this.props;
switch (rendertype) { switch (rendertype) {
case 'text': case 'text':
return <div className={`${clsPrefix} filter-wrap`}><FormControl return <div className={`${clsPrefix} filter-wrap`}><FormControl
ref={el => this.text = el}
value={this.state.text}
className={className} className={className}
onChange={onChange} onChange={this.changeText}
/> />
{filterDropdown == 'show' && <FilterDropDown <FilterDropDown
onSelectDropdown={onSelectDropdown} onSelectDropdown={onSelectDropdown}
onClickClear={this.clearText}
isShowClear={this.state.text}
isShowCondition={filterDropdown}
> >
</FilterDropDown>} </FilterDropDown>
</div> </div>
case 'dropdown': case 'dropdown':
return <div className={`${clsPrefix} filter-wrap`}><Select return <div className={`${clsPrefix} filter-wrap`}><Select
{...this.props} {...this.props}
/>{filterDropdown == 'show' && <FilterDropDown value={this.state.selectValue}
onChange={this.changeSelect}
/><FilterDropDown
onSelectDropdown={onSelectDropdown} onSelectDropdown={onSelectDropdown}
onClickClear={this.clearSelectValue}
isShowCondition={filterDropdown}
isShowClear={this.state.selectValue}
> >
</FilterDropDown>}</div> </FilterDropDown></div>
case 'date': case 'date':
return <div className={`${clsPrefix} filter-wrap`}><DatePicker return <div className={`${clsPrefix} filter-wrap`}><DatePicker
{...this.props} {...this.props}
value={this.state.dateValue}
onChange={this.changeDate}
open={this.state.open}
/>{filterDropdown == 'show' && <FilterDropDown />{filterDropdown == 'show' && <FilterDropDown
onSelectDropdown={onSelectDropdown} onSelectDropdown={onSelectDropdown}
onClickClear={this.clearDateValue}
isShowCondition={filterDropdown}
isShowClear={this.state.dateValue}
>
</FilterDropDown>}
</div>
case 'bool':
return <div className={`${clsPrefix} filter-wrap`}><Switch
className={className}
onChange={onChange}
/>
{filterDropdown == 'show' && <FilterDropDown
onSelectDropdown={onSelectDropdown}
> >
</FilterDropDown>} </FilterDropDown>}
</div> </div>

View File

@ -343,6 +343,7 @@ class Table extends Component {
filtertype: column.filterType, filtertype: column.filterType,
dataindex: column.dataIndex, dataindex: column.dataIndex,
datasource: this.props.data, datasource: this.props.data,
format: column.format,
filterdropdown: column.filterDropdown filterdropdown: column.filterDropdown
}); });
} }

View File

@ -185,10 +185,10 @@ class TableHeader extends Component {
let currentDom = document.getElementById("u-table-drag-thead-" + this.theadKey).getElementsByTagName("th")[this.drag.currIndex]; let currentDom = document.getElementById("u-table-drag-thead-" + this.theadKey).getElementsByTagName("th")[this.drag.currIndex];
currentDom.style.width = newWidth + "px"; currentDom.style.width = newWidth + "px";
// this.contentTableWidth = newTableWidth; // this.contentTableWidth = newTableWidth;
contentTableDom.style.width = newTableWidth+'px'; contentTableDom.style.width = newTableWidth + 'px';
this.drag.x = x; this.drag.x = x;
let contentColDomArr = contentTableDom.querySelectorAll('colgroup col') let contentColDomArr = contentTableDom.querySelectorAll('colgroup col')
contentColDomArr[this.drag.currIndex].style.width = newWidth+"px" ; contentColDomArr[this.drag.currIndex].style.width = newWidth + "px";
//固定表头时,表头和表体分开,拖拽时表体的宽度也需要一起联动 //固定表头时,表头和表体分开,拖拽时表体的宽度也需要一起联动
const siblingDom = contentTableDom.parentNode.nextElementSibling; const siblingDom = contentTableDom.parentNode.nextElementSibling;
if (siblingDom) { if (siblingDom) {
@ -261,8 +261,9 @@ class TableHeader extends Component {
case 'date': case 'date':
return <FilterType return <FilterType
rendertype={type} rendertype={type}
className={`${clsPrefix} filter-date`} className={`filter-date`}
onClick={() => { }} onClick={() => { }}
format={rows[1][index]['format'] || "YYYY-MM-DD"}
onChange={this.handlerFilterTextChange.bind(this, dataIndex)} onChange={this.handlerFilterTextChange.bind(this, dataIndex)}
onSelectDropdown={this.handlerFilterDropChange.bind(this, dataIndex)} onSelectDropdown={this.handlerFilterDropChange.bind(this, dataIndex)}
filterDropdown={rows[1][index]['filterdropdown']} filterDropdown={rows[1][index]['filterdropdown']}