Browse Source

dynamic date-picker in filterBox

zhuth 6 years ago
parent
commit
dd936bb5d1

+ 66 - 41
src/components/common/filterBox/filter.jsx

@@ -15,6 +15,8 @@ class Filter extends React.Component {
             fetching: false,
             columnData: [],
             dropdownOpen: false, // 多选框下拉展开控制
+            datePickerOpen1: false, // 时间选择器
+            datePickerOpen2: false, // 时间选择器
         }
     }
 
@@ -37,7 +39,7 @@ class Filter extends React.Component {
         const { fetching, columnData, dropdownOpen } = this.state;
         let field;
         const { type, operator } = filter;
-        let defaultValue = type==='time' ? ( filter['value' + index] ? ( filter['value' + index].label ? ( filter['value' + index].label ) : moment(filter['value' + index]) ) : null ) : filter['value' + index]
+        let defaultValue = type==='time' ? ( filter['value' + index] ? ( filter['value' + index].dynamic ? ( filter['value' + index] ) : moment(filter['value' + index]) ) : null ) : filter['value' + index]
         const commonProps = { defaultValue }
 
         if(['index', 'string'].indexOf(type) !== -1) {
@@ -54,13 +56,33 @@ class Filter extends React.Component {
                 }
             }}/>
         }else if(type === 'time') {
-            field = <DatePicker
-                key={Math.random()}
-                { ...commonProps }
-                showToday={false}
-                onChange={(value) => {this.changeFilterValue(filter, value, index)}}
-                // renderExtraFooter={() => this.generateTimeTags(filter, index)}
-            />
+            field = <div className='cus-time-picker' >
+                <Input
+                    key={Math.random()}
+                    suffix={<Icon style={{ color: 'rgba(0, 0, 0, 0.25)' }} type="calendar" />}
+                    defaultValue={ commonProps.defaultValue.dynamic ? commonProps.defaultValue.label : moment(commonProps.defaultValue).format('YYYY-MM-DD') }
+                        onFocus={() => {
+                        let obj = {};
+                        obj['datePickerOpen' + index] = true;
+                        this.setState(obj);
+                    }}
+                />
+                <DatePicker
+                    key={Math.random()}
+                    defaultValue={commonProps.defaultValue.dynamic ? null : commonProps.defaultValue}
+                    showToday={false}
+                    open={this.state['datePickerOpen' + index]}
+                    onOpenChange={status => {
+                        let obj = {};
+                        obj['datePickerOpen' + index] = status;
+                        this.setState(obj);
+                    }}
+                    getCalendarContainer={trigger => {return trigger.parentNode.parentNode}}
+                    onChange={(value) => {this.changeFilterValue(filter, value, index)}}
+                    renderExtraFooter={() => this.generateTimeTags(filter, index, commonProps.defaultValue)}
+                />
+            </div>
+
         }else if(type === 'categorical') { // 类别
             if(operator === 'include' || operator==='notInclude') { // 包含/不包含
                 field = <Input key={Math.random()} { ...commonProps } onBlur={(e) => {
@@ -72,8 +94,8 @@ class Filter extends React.Component {
                 field = (<Select
                     // key={Math.random()} // 这里使用随机数作为key会导致下拉框出现问题
                     value={commonProps.defaultValue} // 使用defaultValue不能及时响应全选/取消全选的操作
-                    // open={dropdownOpen}
-                    // onDropdownVisibleChange={this.onDropdownVisibleChange}
+                    open={dropdownOpen}
+                    onDropdownVisibleChange={this.onDropdownVisibleChange}
                     allowClear
                     mode='multiple'
                     maxTagCount={5}
@@ -83,25 +105,25 @@ class Filter extends React.Component {
                     onSearch={(value) => {this.fetchColumnData(filter, { keyword: value, mandatory: true })}}
                     onFocus={() => {this.fetchColumnData(filter)}}
                     onChange={(value) => {this.changeFilterValue(filter, value, index)}}
-                    // dropdownRender={menu => (
-                    //     <div>
-                    //         {menu}
-                    //         {columnData.length > 0 && <Divider style={{ margin: '4px 0' }} />}
-                    //         {columnData.length > 0 && <div style={{ padding: '8px', cursor: 'pointer' }}>
-                    //             {/** https://github.com/ant-design/ant-design/issues/13448 */}
-                    //             <span onMouseDown={this.lockClose} onMouseUp={this.lockClose} onClick={() => {
-                    //                 if(commonProps.defaultValue && commonProps.defaultValue.length === columnData.length) {
-                    //                     this.changeFilterValue(filter, [], index)
-                    //                 }else {
-                    //                     this.changeFilterValue(filter, columnData, index)
-                    //                 }
-                    //                 this.setState({ dropdownOpen: false });
-                    //             }}>    
-                    //                 <Icon type={ commonProps.defaultValue && commonProps.defaultValue.length === columnData.length ? 'check-square' : 'border' } /> { commonProps.defaultValue && commonProps.defaultValue.length === columnData.length ? '取消全选' : '全选' }
-                    //             </span>
-                    //         </div>}
-                    //     </div>
-                    // )}
+                    dropdownRender={menu => (
+                        <div>
+                            {menu}
+                            {columnData.length > 0 && <Divider style={{ margin: '4px 0' }} />}
+                            {columnData.length > 0 && <div style={{ padding: '8px', cursor: 'pointer' }}>
+                                {/** https://github.com/ant-design/ant-design/issues/13448 */}
+                                <span onMouseDown={this.lockClose} onMouseUp={this.lockClose} onClick={() => {
+                                    if(commonProps.defaultValue && commonProps.defaultValue.length === columnData.length) {
+                                        this.changeFilterValue(filter, [], index)
+                                    }else {
+                                        this.changeFilterValue(filter, columnData, index)
+                                    }
+                                    this.setState({ dropdownOpen: false });
+                                }}>    
+                                    <Icon type={ commonProps.defaultValue && commonProps.defaultValue.length === columnData.length ? 'check-square' : 'border' } /> { commonProps.defaultValue && commonProps.defaultValue.length === columnData.length ? '取消全选' : '全选' }
+                                </span>
+                            </div>}
+                        </div>
+                    )}
                 >
                     { columnData.map((s, i) => {
                         return <SelectOption key={i} value={s}>{s}</SelectOption>
@@ -136,21 +158,24 @@ class Filter extends React.Component {
         return field;
     }
 
-    generateTimeTags = (filter, index) => {
+    generateTimeTags = (filter, index, defaultValue) => {
         const timeTypes = [
-            { label: '今天', name: 'today', format: () => {console.log(11);return 'today'} },
-            { label: '昨天', name: 'yesterday' },
-            { label: '本周', name: 'week' },
-            { label: '上周', name: 'lastweek' },
-            { label: '本月', name: 'month' },
-            { label: '上月', name: 'lastmonth' },
-            { label: '本季度', name: 'quarter' },
-            { label: '上季度', name: 'lastquarter' },
-            { label: '本年', name: 'year' },
-            { label: '上年', name: 'lastyear' },
+            { dynamic: true, label: '今天', name: 'today', format: () => {console.log(11);return 'today'} },
+            { dynamic: true, label: '昨天', name: 'yesterday' },
+            { dynamic: true, label: '本周', name: 'week' },
+            { dynamic: true, label: '上周', name: 'lastweek' },
+            { dynamic: true, label: '本月', name: 'month' },
+            { dynamic: true, label: '上月', name: 'lastmonth' },
+            { dynamic: true, label: '本季度', name: 'quarter' },
+            { dynamic: true, label: '上季度', name: 'lastquarter' },
+            { dynamic: true, label: '本年', name: 'year' },
+            { dynamic: true, label: '上年', name: 'lastyear' },
         ]
-        return timeTypes.map(t => <Tag key={t.name} onClick={() => {
+        return timeTypes.map(t => <Tag key={t.name} className={`cus-time-tag${defaultValue.name === t.name ? ' current' : ''}`} onClick={() => {
             this.changeFilterValue(filter, t, index);
+            let obj = {};
+            obj['datePickerOpen' + index] = false;
+            this.setState(obj);
         }}>{t.label}</Tag>);
     }
 

+ 19 - 0
src/components/common/filterBox/filter.less

@@ -9,4 +9,23 @@
             min-width: 100px;
         }
     }
+}
+
+.cus-time-picker {
+    &>.ant-calendar-picker {
+        width: 0;
+        height: 0;
+        overflow: hidden;
+    }
+    .ant-calendar-picker-container {
+        left: 2px !important;
+        top: 38px !important;
+    }
+
+    .cus-time-tag {
+        &.current {
+            background: #1890ff;
+            color: white;
+        }
+    }
 }

+ 49 - 3
src/components/common/filterBox/filter2.jsx

@@ -1,5 +1,5 @@
 import React from 'react'
-import { Form, Input, InputNumber, DatePicker, Select, Spin, Divider, Icon } from 'antd'
+import { Form, Input, InputNumber, DatePicker, Select, Spin, Divider, Icon, Tag } from 'antd'
 import * as service from '../../../services/index'
 import URLS from '../../../constants/url'
 import moment from 'moment'
@@ -32,12 +32,33 @@ class Filter extends React.Component {
         </div>
     }
 
+    generateTimeTags = (filter, index, defaultValue) => {
+        const timeTypes = [
+            { dynamic: true, label: '今天', name: 'today', format: () => {console.log(11);return 'today'} },
+            { dynamic: true, label: '昨天', name: 'yesterday' },
+            { dynamic: true, label: '本周', name: 'week' },
+            { dynamic: true, label: '上周', name: 'lastweek' },
+            { dynamic: true, label: '本月', name: 'month' },
+            { dynamic: true, label: '上月', name: 'lastmonth' },
+            { dynamic: true, label: '本季度', name: 'quarter' },
+            { dynamic: true, label: '上季度', name: 'lastquarter' },
+            { dynamic: true, label: '本年', name: 'year' },
+            { dynamic: true, label: '上年', name: 'lastyear' },
+        ]
+        return timeTypes.map(t => <Tag key={t.name} className={`cus-time-tag${defaultValue.name === t.name ? ' current' : ''}`} onClick={() => {
+            this.changeFilterValue(filter, t, index);
+            let obj = {};
+            obj['datePickerOpen' + index] = false;
+            this.setState(obj);
+        }}>{t.label}</Tag>);
+    }
+
     generateValueItem = (filter, index) => {
         const { fetching, columnData, dropdownOpen } = this.state;
         let field;
         let { type, operator } = filter;
 
-        let defaultValue = type==='time' ? ( filter['value' + index] ? moment(filter['value' + index]) : null) : filter['value' + index]
+        let defaultValue = type==='time' ? ( filter['value' + index] ? ( filter['value' + index].dynamic ? ( filter['value' + index] ) : moment(filter['value' + index]) ) : null ) : filter['value' + index]
         const commonProps = { defaultValue }
 
         if(['index', 'string'].indexOf(type) !== -1) {
@@ -53,7 +74,32 @@ class Filter extends React.Component {
                 }
             }}/>
         }else if(type === 'time') {
-            field = <DatePicker key={Math.random()} { ...commonProps } onChange={(value) => {this.changeFilterValue(filter, value, index)}}/>
+            field = <div className='cus-time-picker' >
+                <Input
+                    key={Math.random()}
+                    suffix={<Icon style={{ color: 'rgba(0, 0, 0, 0.25)' }} type="calendar" />}
+                    defaultValue={ commonProps.defaultValue.dynamic ? commonProps.defaultValue.label : moment(commonProps.defaultValue).format('YYYY-MM-DD') }
+                        onFocus={() => {
+                        let obj = {};
+                        obj['datePickerOpen' + index] = true;
+                        this.setState(obj);
+                    }}
+                />
+                <DatePicker
+                    key={Math.random()}
+                    defaultValue={commonProps.defaultValue.dynamic ? null : commonProps.defaultValue}
+                    showToday={false}
+                    open={this.state['datePickerOpen' + index]}
+                    onOpenChange={status => {
+                        let obj = {};
+                        obj['datePickerOpen' + index] = status;
+                        this.setState(obj);
+                    }}
+                    getCalendarContainer={trigger => {return trigger.parentNode.parentNode}}
+                    onChange={(value) => {this.changeFilterValue(filter, value, index)}}
+                    renderExtraFooter={() => this.generateTimeTags(filter, index, commonProps.defaultValue)}
+                />
+            </div>
         }else if(type === 'categorical') { // 类别
             if(operator === 'include' || operator==='notInclude') { // 包含/不包含
                 field = <Input key={Math.random()} { ...commonProps } onBlur={(e) => {

+ 63 - 21
src/components/common/filterBox/filterBox.jsx

@@ -1,6 +1,8 @@
 import React from 'react'
 import PropTypes from 'prop-types'
-import { Modal, Form, Row, Col, Input, Icon, Button, Select, InputNumber, DatePicker, Spin, Divider } from 'antd'
+import { Modal, Form, Row, Col, Input, Icon, Button, Select, InputNumber, DatePicker, Spin, Tag,
+    // Divider
+} from 'antd'
 import OPERATORS from './filterOperators.js';
 import './filterBox.less'
 import * as service from '../../../services/index'
@@ -208,27 +210,71 @@ class FilterBox extends React.Component {
         }
     }
 
-    getFilterValueField = (key, type, operator, index) => {
+    generateTimeTags = (filter, index, defaultValue) => {
+        const timeTypes = [
+            { dynamic: true, label: '今天', name: 'today', format: () => {console.log(11);return 'today'} },
+            { dynamic: true, label: '昨天', name: 'yesterday' },
+            { dynamic: true, label: '本周', name: 'week' },
+            { dynamic: true, label: '上周', name: 'lastweek' },
+            { dynamic: true, label: '本月', name: 'month' },
+            { dynamic: true, label: '上月', name: 'lastmonth' },
+            { dynamic: true, label: '本季度', name: 'quarter' },
+            { dynamic: true, label: '上季度', name: 'lastquarter' },
+            { dynamic: true, label: '本年', name: 'year' },
+            { dynamic: true, label: '上年', name: 'lastyear' },
+        ]
+        return timeTypes.map(t => <Tag key={t.name} className={`cus-time-tag${defaultValue.name === t.name ? ' current' : ''}`} onClick={() => {
+            this.changeFilterValue(filter, t, index);
+            let obj = {};
+            obj['datePickerOpen' + index] = false;
+            this.setState(obj);
+        }}>{t.label}</Tag>);
+    }
+
+    getFilterValueField = (filter, index) => {
         const { columns, fetching } = this.state;
         
         let field;
-        const { form } = this.props;
-        const filters = form.getFieldValue('filters');
-        let filter = filters.filter((f) => {return f.key === key})[0];
+        const { type, operator } = filter;
         let column = columns.filter((c) => {return c.name === filter.name});
         column = column.length > 0 ? column[0] : { selection: [] };
         column.selection = column.selection || [];
 
-        let dropdownOpen = this.state['dropdownOpen-' + filter.key] || false;
+        // let dropdownOpen = this.state['dropdownOpen-' + filter.key] || false;
         let columnData = this.state['columnData-' + filter.name] || [];
 
-        const commonProps = { placeholder: '无默认值' }
+        let defaultValue = type==='time' ? ( filter['value' + index] ? ( filter['value' + index].dynamic ? ( filter['value' + index] ) : moment(filter['value' + index]) ) : null ) : filter['value' + index]
+        const commonProps = { placeholder: '无默认值', defaultValue }
         if(['index', 'string'].indexOf(type) !== -1) {
             field = <Input { ...commonProps } onBlur={(e) => {this.changeFilterValue(filter, e.target.value, index)}}/>
         }else if(['scale', 'ordinal'].indexOf(type) !== -1) {
             field = <InputNumber { ...commonProps } onBlur={(e) => {this.changeFilterValue(filter, e.target.value, index)}}/>
         }else if(type === 'time') {
-            field = <DatePicker { ...commonProps } onChange={(value) => {this.changeFilterValue(filter, value, index)}}/>
+            field = <div className='cus-time-picker' >
+                <Input
+                    key={Math.random()}
+                    suffix={<Icon style={{ color: 'rgba(0, 0, 0, 0.25)' }} type="calendar" />}
+                    defaultValue={ commonProps.defaultValue.dynamic ? commonProps.defaultValue.label : moment(commonProps.defaultValue).format('YYYY-MM-DD') }
+                    onFocus={() => {
+                        let obj = {};
+                        obj['datePickerOpen' + index] = true;
+                        this.setState(obj);
+                    }}
+                />
+                <DatePicker
+                    key={Math.random()}
+                    defaultValue={commonProps.defaultValue.dynamic ? null : commonProps.defaultValue}
+                    showToday={false}
+                    open={this.state['datePickerOpen' + index]}
+                    onOpenChange={status => {
+                        let obj = {};
+                        obj['datePickerOpen' + index] = status;
+                        this.setState(obj);
+                    }}
+                    onChange={(value) => {this.changeFilterValue(filter, value, index)}}
+                    renderExtraFooter={() => this.generateTimeTags(filter, index, commonProps.defaultValue)}
+                />
+            </div>
         }else if(type === 'categorical') { // 类别
             if(operator === 'include' || operator==='notInclude') { // 包含/不包含
                 field = <Input { ...commonProps } onBlur={(e) => {this.changeFilterValue(filter, e.target.value, index)}}/>
@@ -304,12 +350,12 @@ class FilterBox extends React.Component {
         }, 100);
     };
 
-    onDropdownVisibleChange = (filter, open) => {
-        if (this.lock) return;
-        let obj = {};
-        obj['dropdownOpen-' + filter.key] = open;
-        this.setState(obj);
-    };
+    // onDropdownVisibleChange = (filter, open) => {
+    //     if (this.lock) return;
+    //     let obj = {};
+    //     obj['dropdownOpen-' + filter.key] = open;
+    //     this.setState(obj);
+    // };
 
     /**
      * 生成过滤规则文本
@@ -378,7 +424,7 @@ class FilterBox extends React.Component {
         getFieldDecorator('filters', { initialValue: [] });
         const filters = getFieldValue('filters');
         const filterItems = filters.map((f, index) => {
-            let { key, name, type, operator, value1, value2 } = f;
+            let { key, name, type, operator } = f;
             return (
                 <Row key={`filterDiv[${key}]`}>
                     <Col span={22}>
@@ -448,9 +494,7 @@ class FilterBox extends React.Component {
                                 key={key}
                                 className='filterValueOne'
                             >
-                                {getFieldDecorator(`filterValueOne${key}`, {
-                                    initialValue: type==='time' ? ( value1 ? moment(value1) : null) : value1,
-                                })(this.getFilterValueField(key, type, operator, 1))}
+                                {this.getFilterValueField(f, 1)}
                             </FormItem>
                         </Col>
                         {operator==='between' && <Col span={6}>
@@ -458,9 +502,7 @@ class FilterBox extends React.Component {
                                 key={key}
                                 className='filterValueTwo'
                             >
-                                {getFieldDecorator(`filterValueTwo${key}`, {
-                                    initialValue: type==='time' ? ( value2 ? moment(value2) : null) : value2,
-                                })(this.getFilterValueField(key, type, operator, 2))}
+                                {this.getFilterValueField(f, 2)}
                             </FormItem>
                         </Col>}
                     </Col>

+ 20 - 0
src/components/common/filterBox/filterBox.less

@@ -30,4 +30,24 @@
   cursor: pointer;
   color: red;
   font-size: 14px;
+}
+
+.cus-time-picker {
+  &>.ant-calendar-picker {
+      width: 0;
+      height: 0;
+      overflow: hidden;
+  }
+}
+
+.ant-calendar-picker-container {
+  // margin-left: -232px !important;
+  // margin-top: 17px !important;
+}
+
+.cus-time-tag {
+  &.current {
+      background: #1890ff;
+      color: white;
+  }
 }

+ 61 - 17
src/components/common/filterBox/filterBox2.jsx

@@ -3,7 +3,9 @@
  */
 import React from 'react'
 import PropTypes from 'prop-types'
-import { Modal, Form, Row, Col, Input, Icon, Button, Cascader, Select, InputNumber, DatePicker, Spin } from 'antd'
+import { Modal, Form, Row, Col, Input, Icon, Button, Cascader, Select, InputNumber, DatePicker, Spin, Tag,
+    // Divider
+} from 'antd'
 import OPERATORS from './filterOperators.js'
 import './filterBox.less'
 import * as service from '../../../services/index'
@@ -275,7 +277,7 @@ class FilterBox extends React.Component {
         const filters = getFieldValue('filters');
 
         const filterItems = filters.map((f, index) => {
-            let { key, name, dataSource, type, operator, value1, value2 } = f;
+            let { key, name, dataSource, operator } = f;
             return (
                 <Row key={`filterDiv[${key}]`}>
                     <Col span={22}>
@@ -304,9 +306,7 @@ class FilterBox extends React.Component {
                                 key={key}
                                 className='filterValueOne'
                             >
-                                {getFieldDecorator(`filterValueOne${key}`, {
-                                    initialValue: type==='time' ? ( value1 ? moment(value1) : null) : value1,
-                                })(this.generateValueItem(f, 1))}
+                                {this.generateValueItem(f, 1)}
                             </FormItem>
                         </Col>
                         {operator==='between' && <Col span={6}>
@@ -314,9 +314,7 @@ class FilterBox extends React.Component {
                                 key={key}
                                 className='filterValueTwo'
                             >
-                                {getFieldDecorator(`filterValueTwo${key}`, {
-                                    initialValue: type==='time' ? ( value2 ? moment(value2) : null) : value2,
-                                })(this.generateValueItem(f, 2))}
+                                {this.generateValueItem(f, 2)}
                             </FormItem>
                         </Col>}
                     </Col>
@@ -362,21 +360,67 @@ class FilterBox extends React.Component {
         </Select>)
     }
 
+    generateTimeTags = (filter, index, defaultValue) => {
+        const timeTypes = [
+            { dynamic: true, label: '今天', name: 'today', format: () => {console.log(11);return 'today'} },
+            { dynamic: true, label: '昨天', name: 'yesterday' },
+            { dynamic: true, label: '本周', name: 'week' },
+            { dynamic: true, label: '上周', name: 'lastweek' },
+            { dynamic: true, label: '本月', name: 'month' },
+            { dynamic: true, label: '上月', name: 'lastmonth' },
+            { dynamic: true, label: '本季度', name: 'quarter' },
+            { dynamic: true, label: '上季度', name: 'lastquarter' },
+            { dynamic: true, label: '本年', name: 'year' },
+            { dynamic: true, label: '上年', name: 'lastyear' },
+        ]
+        return timeTypes.map(t => <Tag key={t.name} className={`cus-time-tag${defaultValue.name === t.name ? ' current' : ''}`} onClick={() => {
+            this.changeFilterValue(filter, t, index);
+            let obj = {};
+            obj['datePickerOpen' + index] = false;
+            this.setState(obj);
+        }}>{t.label}</Tag>);
+    }
+
     generateValueItem = (filter, index) => {
         const { fetching } = this.state;
-        const dropdownOpen = filter.key ? (this.state['dropdownOpen-' + filter.key] || false) : false;
+        // const dropdownOpen = filter.key ? (this.state['dropdownOpen-' + filter.key] || false) : false;
         const columnData = filter.name ? (this.state['columnData-' + filter.dataSource.name + '-' + filter.name] || []) : [];
         let field;
         const { type, operator } = filter;
 
-        const commonProps = { placeholder: '无默认值' }
+        let defaultValue = type==='time' ? ( filter['value' + index] ? ( filter['value' + index].dynamic ? ( filter['value' + index] ) : moment(filter['value' + index]) ) : null ) : filter['value' + index]
+        const commonProps = { placeholder: '无默认值', defaultValue }
 
         if(['index', 'string'].indexOf(type) !== -1) {
             field = <Input { ...commonProps } onBlur={(e) => {this.changeFilterValue(filter, e.target.value, index)}}/>
         }else if(['scale', 'ordinal'].indexOf(type) !== -1) {
             field = <InputNumber { ...commonProps } onBlur={(e) => {this.changeFilterValue(filter, e.target.value, index)}}/>
         }else if(type === 'time') {
-            field = <DatePicker { ...commonProps } onChange={(value) => {this.changeFilterValue(filter, value, index)}}/>
+            field = <div className='cus-time-picker' >
+                <Input
+                    key={Math.random()}
+                    suffix={<Icon style={{ color: 'rgba(0, 0, 0, 0.25)' }} type="calendar" />}
+                    defaultValue={ commonProps.defaultValue.dynamic ? commonProps.defaultValue.label : moment(commonProps.defaultValue).format('YYYY-MM-DD') }
+                    onFocus={() => {
+                        let obj = {};
+                        obj['datePickerOpen' + index] = true;
+                        this.setState(obj);
+                    }}
+                />
+                <DatePicker
+                    key={Math.random()}
+                    defaultValue={commonProps.defaultValue.dynamic ? null : commonProps.defaultValue}
+                    showToday={false}
+                    open={this.state['datePickerOpen' + index]}
+                    onOpenChange={status => {
+                        let obj = {};
+                        obj['datePickerOpen' + index] = status;
+                        this.setState(obj);
+                    }}
+                    onChange={(value) => {this.changeFilterValue(filter, value, index)}}
+                    renderExtraFooter={() => this.generateTimeTags(filter, index, commonProps.defaultValue)}
+                />
+            </div>
         }else if(type === 'categorical') { // 类别
             if(operator === 'include' || operator==='notInclude') { // 包含/不包含
                 field = <Input { ...commonProps } onBlur={(e) => {this.changeFilterValue(filter, e.target.value, index)}}/>
@@ -452,12 +496,12 @@ class FilterBox extends React.Component {
         }, 100);
     };
 
-    onDropdownVisibleChange = (filter, open) => {
-        if (this.lock) return;
-        let obj = {};
-        obj['dropdownOpen-' + filter.key] = open;
-        this.setState(obj);
-    };
+    // onDropdownVisibleChange = (filter, open) => {
+    //     if (this.lock) return;
+    //     let obj = {};
+    //     obj['dropdownOpen-' + filter.key] = open;
+    //     this.setState(obj);
+    // };
 
     loadColumnDatas() {
         let { fieldOptions } = this.state;

+ 0 - 1
src/components/dashboard/view.jsx

@@ -5,7 +5,6 @@ import DashboardDesigner from '../dashboardDesigner/layout'
 class DashboardView extends React.Component {
     render() {
         const { code } = this.props.match.params;
-        console.log(code);
         return <DashboardDesigner dashboardDesigner={this.props.dashboardDesigner} code={code}/>
     }
 }

+ 2 - 2
src/models/chartDesigner.js

@@ -24,8 +24,8 @@ function getBodyFilters(filters) {
             if(type === 'scale' && operator === 'between') {
                 bodyFilter['value'] = value1 + ',' + value2;
             }else if(type === 'time') {
-                let v1 = moment(value1).format('YYYY-MM-DD');
-                let v2 = moment(value2).format('YYYY-MM-DD');
+                let v1 = value1.dynamic ? value1.name : moment(value1).format('YYYY-MM-DD');
+                let v2 = value2.dynamic ? value2.name : moment(value2).format('YYYY-MM-DD');
     
                 if(operator === 'between') {
                     bodyFilter['value'] = v1 + ',' + v2;

+ 2 - 2
src/models/dashboardDesigner.js

@@ -68,8 +68,8 @@ function getBodyFilters(filters) {
         if(type === 'scale' && operator === 'between') {
             bodyFilter['value'] = value1 + ',' + value2;
         }else if(type === 'time') {
-            let v1 = moment(value1).format('YYYY-MM-DD');
-            let v2 = moment(value2).format('YYYY-MM-DD');
+            let v1 = value1.dynamic ? value1.name : moment(value1).format('YYYY-MM-DD');
+            let v2 = value2.dynamic ? value2.name : moment(value2).format('YYYY-MM-DD');
 
             if(operator === 'between') {
                 bodyFilter['value'] = v1 + ',' + v2;

+ 2 - 3
src/models/recent.js

@@ -100,16 +100,15 @@ export default {
         *addRecentRecord(action, { call }) {
             const { tarId, recordType } = action
             try {
-                const res = yield call(service.fetch, {
+                yield call(service.fetch, {
                     url: URLS.HOMEPAGE_ADD_RECENT_RECORD,
                     body: {
                         tarId: tarId,
                         type: recordType
                     }
                 });
-                console.log("添加访问记录: " + res + tarId, recordType)
             }catch(e) {
-                console.log(e);
+                console.error(e);
                 message.error('添加访问记录错误: ' + e.message);
             }
         }