bee-datepicker
Version:
DatePicker ui component for react
78 lines (63 loc) • 24.7 kB
JavaScript
import {Col, Row} from 'bee-layout';
import {Panel} from 'bee-panel';
import Button from 'bee-button';
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
const CARET = <i className="uf uf-arrow-down"></i>;
const CARETUP = <i className="uf uf-arrow-up"></i>;
var Demo1 = require("./demolist/Demo1");var Demo10 = require("./demolist/Demo10");var Demo11 = require("./demolist/Demo11");var Demo12 = require("./demolist/Demo12");var Demo2 = require("./demolist/Demo2");var Demo3 = require("./demolist/Demo3");var Demo4 = require("./demolist/Demo4");var Demo5 = require("./demolist/Demo5");var Demo6 = require("./demolist/Demo6");var Demo7 = require("./demolist/Demo7");var Demo8 = require("./demolist/Demo8");var Demo9 = require("./demolist/Demo9");var DemoArray = [{"example":<Demo1 />,"title":" 选择日期","code":"/**\n *\n * 选择日期\n * 以「日期」为基本单位,基础的日期选择控件\n */\n\nimport React, {Component} from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Icon, Row, Col } from 'tinper-bee';\n\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport enUS from \"rc-calendar/lib/locale/en_US\";\nimport moment from \"moment\";\nimport 'moment/locale/zh-cn';\n\nmoment.locale('zh-cn');\n\nconst format = \"YYYY-MM-DD dddd\";\n\nconst dateInputPlaceholder = \"选择日期\";\n\nfunction onSelect(d) {\n // console.log(d);\n}\n\n\nclass Demo1 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n value: '',\n open: false\n };\n }\n\n onChange = (d, dataString) => {\n console.log(dataString);\n };\n clear = d => {\n this.setState({\n value: ''\n })\n }\n renderIcon = d => {\n return (<Icon type=\"uf-search\"></Icon>)\n }\n onOpenChange = d => {\n console.log(d);\n }\n open = d => {\n this.setState({\n open: true\n })\n }\n onClick = (e,d,str) => {\n console.log(d);\n this.setState({\n open: true\n })\n }\n renderFooter = () => {\n return null\n }\n\n render() {\n var self = this;\n return (\n <div>\n <Row>\n <Col md={8}>\n <DatePicker\n format={format}\n onSelect={onSelect}\n onChange={this.onChange}\n locale={zhCN}\n open={this.state.open}\n //defaultValue={this.state.value}\n value={this.state.value}\n onOpenChange={this.onOpenChange.bind(this)}\n placeholder={dateInputPlaceholder}\n className={\"uuuu\"}\n onClick={this.onClick}\n />\n </Col>\n <Col md={3}>\n <button className=\"u-button\" onClick={this.clear}>清空</button>\n <button className=\"u-button\" onClick={this.open}>设置为true</button>\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 以「日期」为基本单位,基础的日期选择控件"},{"example":<Demo10 />,"title":" 选择年","code":"/**\n *\n * 选择年\n * 以「年」为基本单位,基础的年选择控件\n */\n\nimport React, { Component } from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Icon, Row, Col } from 'tinper-bee';\nimport moment from \"moment\";\n\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport enUS from \"rc-calendar/lib/locale/en_US\";\n\nconst { YearPicker } = DatePicker;\n\nconst format2 = \"YYYY\";\n\nfunction onSelect(d) {\n console.log(d);\n}\n\nfunction onChange(d) {\n console.log(d);\n}\n\nclass Demo10 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n value: moment(),\n open: false\n };\n }\n getCalendarContainer() {\n return this.d || document.getElementById('d');\n }\n clear = d => {\n this.setState({\n value: ''\n })\n }\n render() {\n return (\n <div>\n <Row>\n <Col md={8}>\n <div id={\"d\"}>\n <YearPicker\n format={format2}\n\n onChange={onChange}\n\n locale={zhCN}\n\n value={this.state.value}\n\n className = {'rc-calendar-year'}\n\n placeholder={\"选择年\"}\n />\n </div>\n </Col>\n <Col md={3}>\n <button className=\"u-button\" onClick={this.clear}>清空</button>\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 以「年」为基本单位,基础的年选择控件"},{"example":<Demo11 />,"title":" 自定义展示日期面板,外层输入框可输入","code":"/**\n *\n * 自定义展示日期面板,外层输入框可输入\n * open设置面板展开收起,keyboardInput外层input是否可输入,showDateInput是否显示内层input\n */\n\nimport React, {Component} from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Icon, Row, Col } from 'tinper-bee';\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport enUS from \"rc-calendar/lib/locale/en_US\";\nimport moment from \"moment\";\nimport 'moment/locale/zh-cn';\n\nmoment.locale('zh-cn');\n\nconst format = \"YYYY-MM-DD\";\n\nconst dateInputPlaceholder = \"选择日期\";\n\nfunction onSelect(d) {\n // console.log(d);\n}\n\n\nclass Demo11 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n value: '',\n open: false\n };\n }\n\n onChange = (d, dataString) => {\n this.setState({\n value:d\n })\n console.log('onChange',dataString)\n };\n renderIcon = d => {\n return (<Icon type=\"uf-search\"></Icon>)\n }\n onOpenChange = d => {\n console.log(d);\n }\n open = d => {\n this.setState({\n open: true\n })\n }\n onClick = (e,d,str) => {\n console.log(d);\n this.setState({\n open: false\n })\n }\n renderFooter = () => {\n return null\n }\n render() {\n var self = this; console.log('open:'+this.state.open)\n return (\n <div>\n <Row>\n <Col md={8}>\n <DatePicker\n format={format}\n onSelect={onSelect}\n onChange={this.onChange}\n locale={zhCN}\n open={this.state.open}\n defaultValue={moment('2018-01-01')}\n value={this.state.value}\n onOpenChange={this.onOpenChange.bind(this)}\n placeholder={dateInputPlaceholder}\n className={\"uuuu\"}\n onClick={this.onClick}\n keyboardInput={true}\n showDateInput={false}\n />\n </Col>\n <Col md={3}>\n <button className=\"u-button\" onClick={this.open}>展开面板</button>\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" open设置面板展开收起,keyboardInput外层input是否可输入,showDateInput是否显示内层input"},{"example":<Demo12 />,"title":" 自定义展示日期面板,外层输入框可输入,配合form使用","code":"/**\n *\n * 自定义展示日期面板,外层输入框可输入,配合form使用\n * open设置面板展开收起,keyboardInput外层input是否可输入,showDateInput是否显示内层input\n */\n\nimport React, {Component} from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Form, Icon, Row, Col } from 'tinper-bee';\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport enUS from \"rc-calendar/lib/locale/en_US\";\nimport moment from \"moment\";\nimport 'moment/locale/zh-cn';\n\nmoment.locale('zh-cn');\n\nconst format = \"YYYY-MM-DD\";\n\nconst dateInputPlaceholder = \"选择日期\";\n\nfunction onSelect(d) {\n // console.log(d);\n}\n\n\nclass Demo12 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n value: '',\n open: false\n };\n }\n clear = d => {\n this.props.form.setFieldsValue({\n date:''\n })\n }\n renderIcon = d => {\n return (<Icon type=\"uf-search\"></Icon>)\n }\n onOpenChange = d => {\n console.log(d);\n }\n open = d => {\n this.setState({\n open: true\n })\n }\n onClick = (e,d,str) => {\n this.setState({\n open: false\n })\n }\n renderFooter = () => {\n return null\n }\n submit = (e) => {\n this.props.form.validateFields((err, values) => {\n if (err) {\n console.log('校验失败', values);\n } else {\n console.log('提交成功', values, moment(values.date).format('YYYY-MM-DD'));\n }\n });\n }\n render() {\n const { getFieldProps, getFieldError } = this.props.form;\n var self = this; \n return (\n <div>\n <Row>\n <Col md={8}>\n <DatePicker\n format={format}\n onSelect={onSelect}\n locale={zhCN}\n open={this.state.open}\n onOpenChange={this.onOpenChange.bind(this)}\n placeholder={dateInputPlaceholder}\n className={\"uuuu\"}\n onClick={this.onClick}\n keyboardInput={true}\n showDateInput={false}\n {...getFieldProps('date', {\n validateTrigger: 'onBlur',\n initialValue:moment('2018-01-01'),\n rules: [{\n required: true, message: '请输入日期',\n }],\n }) }\n />\n </Col>\n <Col md={3}>\n <button className=\"u-button\" onClick={this.clear}>清空</button>\n <button className=\"u-button\" onClick={this.open}>设置为true</button>\n <button className=\"u-button\" onClick={this.submit}>获得值</button>\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" open设置面板展开收起,keyboardInput外层input是否可输入,showDateInput是否显示内层input"},{"example":<Demo2 />,"title":" 选择年月","code":"/**\n *\n * 选择年月\n * 以「年月」为基本单位,基础的年月选择控件\n */\n\nimport React, { Component } from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Row, Col } from 'tinper-bee';\nimport moment from \"moment\";\n\n\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport enUS from \"rc-calendar/lib/locale/en_US\";\n\nconst { MonthPicker } = DatePicker;\n\nconst format2 = \"YYYY\";\n\nfunction onSelect(d) {\n console.log(d);\n}\n\nfunction onChange(d) {\n console.log(d);\n}\n\nclass Demo2 extends Component {\n render() {\n return (\n <div>\n <Row>\n <Col md={12}>\n <MonthPicker\n format={format2}\n onSelect={onSelect}\n onChange={onChange}\n locale={zhCN}\n\n\n defaultValue={moment()}\n placeholder={\"选择年月\"}\n />\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 以「年月」为基本单位,基础的年月选择控件"},{"example":<Demo3 />,"title":" 日期范围","code":"/**\n *\n * 日期范围\n * 以「日期范围」为基本单位,基础的日期范围选择控件\n */\n\nimport React, {Component} from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Form, Icon, Row, Col } from 'tinper-bee';\n\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport moment from \"moment/moment\";\nconst FormItem = Form.FormItem;\n\n\nconst now = moment();\n\nconst {RangePicker} = DatePicker;\n\nconst format3 = \"YYYY-MM-DD HH:mm:ss\";\n\nfunction formatValue(value, format) {\n return (value && value.format(format)) || '';\n}\n\nfunction onSelect(d) {\n //console.log(d);\n}\n\n\n\nclass Demo3 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n value: '',\n v:''\n };\n }\n\n onStartChange = (value) => {\n this.setState({\n startValue: value[0],\n startOpen: false,\n endOpen: true,\n });\n }\n\n remove() {\n this.setState({value: ''})\n }\n\n onChange (d,str) {\n console.log(d);\n }\n\n render() {\n const props = this.props;\n const self = this;\n const { getFieldProps, getFieldError } = this.props.form;\n\n return (\n <div>\n <Row>\n <Col md={8}>\n <RangePicker\n placeholder={'开始 ~ 结束'}\n dateInputPlaceholder={['开始', '结束']}\n showClear={true}\n value={this.state.value}\n onChange={this.onChange.bind(this)}\n renderFooter={()=>{\n return (\n <div></div>\n )\n }}\n />\n </Col>\n <Col md={3}>\n <button className=\"u-button\" onClick={this.remove.bind(this)}>清空</button>\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 以「日期范围」为基本单位,基础的日期范围选择控件"},{"example":<Demo4 />,"title":" 动态的改变时间","code":"/**\n *\n * 动态的改变时间\n * 以「日期时间」为基本单位,基础的日期时间选择控件\n */\n\nimport React, { Component } from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Button, Row, Col } from 'tinper-bee';\nimport moment from \"moment\";\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nconst format = \"YYYY-MM-DD HH:mm:ss\";\nconst dateInputPlaceholder = \"选择日期\";\n\nclass Demo4 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n value: moment()\n };\n }\n\n handleChange = value => {\n this.setState({\n value: value\n });\n };\n onSelect = d => {\n console.log(d);\n };\n\n handlerChangeDate = () => {\n this.setState({\n value: moment(\"2011-11-11 11:11:11\")\n });\n console.log(\"click\");\n };\n render() {\n return (\n <div>\n <Row>\n <Col md={8}>\n <DatePicker\n format={format}\n locale={zhCN}\n onSelect={this.onSelect}\n onChange={this.handleChange}\n value={this.state.value}\n placeholder={dateInputPlaceholder}\n />\n </Col>\n <Col md={3}>\n <Button onClick={this.handlerChangeDate}>变</Button>\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 以「日期时间」为基本单位,基础的日期时间选择控件"},{"example":<Demo5 />,"title":" 选择周","code":"/**\n *\n * 选择周\n * 以「周」为基本单位,基础的周选择控件\n */\n\nimport React, { Component } from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Row, Col } from 'tinper-bee';\nconst { WeekPicker } = DatePicker;\nimport moment from \"moment\";\n\nfunction onSelect(d) {\n console.log(d);\n}\n\nfunction onChange(d) {\n console.log(d);\n}\n\nclass Demo5 extends Component {\n render() {\n return (\n <div>\n <Row>\n <Col md={12}>\n <WeekPicker defaultValue={''} onChange={onChange} placeholder=\"选择周\" />\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 以「周」为基本单位,基础的周选择控件"},{"example":<Demo6 />,"title":" 选择日期时间","code":"/**\n *\n * 选择日期时间\n * 以「日期时间」为基本单位,可以选择日期和时间\n */\n\nimport React, { Component } from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Row, Col } from 'tinper-bee';\n\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport enUS from \"rc-calendar/lib/locale/en_US\";\nimport moment from \"moment\";\n\nconst format = \"YYYY-MM-DD HH:mm:ss\";\n\nconst dateInputPlaceholder = \"选择日期\";\n\nfunction onSelect(d) {\n console.log(d);\n}\n\nfunction onChange(d) {\n console.log(d);\n}\n\nclass Demo6 extends Component {\n render() {\n return (\n <div>\n <Row>\n <Col md={12}>\n <DatePicker\n format={format}\n showTime={true}\n onSelect={onSelect}\n onChange={onChange}\n locale={zhCN}\n defaultValue={moment()}\n placeholder={dateInputPlaceholder}\n />\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 以「日期时间」为基本单位,可以选择日期和时间"},{"example":<Demo7 />,"title":" 禁用日期","code":"/**\n *\n * 禁用日期\n * 禁用日期\n */\n\nimport React, { Component } from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Row, Col } from 'tinper-bee';\n\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport enUS from \"rc-calendar/lib/locale/en_US\";\nimport moment from \"moment\";\n\nconst format = \"YYYY-MM-DD\";\n\nconst dateInputPlaceholder = \"选择日期\";\n\nfunction onSelect(d) {\n console.log(d);\n}\n\nfunction onChange(d) {\n console.log(d);\n}\n\nclass Demo7 extends Component {\n render() {\n return (\n <div>\n <Row>\n <Col md={12}>\n <DatePicker\n format={format}\n onSelect={onSelect}\n onChange={onChange}\n locale={zhCN}\n defaultValue={moment()}\n placeholder={dateInputPlaceholder}\n disabled={true}\n />\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 禁用日期"},{"example":<Demo8 />,"title":" 不可选择日期和时间","code":"/**\n *\n * 不可选择日期和时间\n * 可用 disabledDate 和 disabledTime 分别禁止选择部分日期和时间,其中 disabledTime 需要和 showTime 一起使用。\n */\n\nimport React, { Component } from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Row, Col } from 'tinper-bee';\n\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport moment from \"moment\";\n\nconst format = \"YYYY-MM-DD\";\n\nconst dateInputPlaceholder = \"选择日期\";\n\nfunction onSelect(d) {\n console.log(d);\n}\n\nfunction onChange(d) {\n console.log(d);\n}\n\nfunction disabledDate(current) {\n return current && current.valueOf() < Date.now();\n}\n\nclass Demo7 extends Component {\n render() {\n return (\n <div>\n <Row>\n <Col md={12}>\n <DatePicker\n format={format}\n onSelect={onSelect}\n onChange={onChange}\n locale={zhCN}\n disabledDate={disabledDate}\n defaultValue={moment()}\n placeholder={dateInputPlaceholder}\n />\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 可用 disabledDate 和 disabledTime 分别禁止选择部分日期和时间,其中 disabledTime 需要和 showTime 一起使用。"},{"example":<Demo9 />,"title":" 自定义日期渲染父级容器","code":"/**\n *\n * 自定义日期渲染父级容器\n * 以「日期」为基本单位,基础的日期选择控件\n */\n\nimport React, { Component } from \"react\";\nimport DatePicker from \"tinper-bee/lib/Datepicker\";\nimport { Icon, Row, Col } from 'tinper-bee';\n\nimport zhCN from \"rc-calendar/lib/locale/zh_CN\";\nimport enUS from \"rc-calendar/lib/locale/en_US\";\nimport moment from \"moment\";\n\nconst format = \"YYYY-MM-DD\";\n\nconst dateInputPlaceholder = \"选择日期\";\n\nfunction onSelect(d) {\n // console.log(d);\n}\n\nfunction onChange(d) {\n this.setState({\n value: ''\n });\n}\n\nclass Demo1 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n value: ''\n };\n }\n getCalendarContainer() {\n return this.d || document.getElementById('d');\n }\n onChange = d => {\n console.log(d)\n\n this.setState({\n value: ''\n });\n };\n render() {\n return (\n <div id=\"d\" ref=\"d\">\n <Row>\n <Col md={12}>\n <DatePicker\n format={format}\n onSelect={onSelect}\n onChange={this.onChange}\n locale={zhCN}\n defaultValue={this.state.value}\n placeholder={dateInputPlaceholder}\n getCalendarContainer={this.getCalendarContainer}\n />\n </Col>\n </Row>\n </div>\n );\n }\n}\n\n\n","desc":" 以「日期」为基本单位,基础的日期选择控件"}]
class Demo extends Component {
constructor(props) {
super(props);
this.state = {
open: false
}
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState({open: !this.state.open})
}
render() {
const {title, example, code, desc, scss_code} = this.props;
let caret = this.state.open ? CARETUP : CARET;
let text = this.state.open ? "隐藏代码" : "查看代码";
const header = (
<div>
{example}
<Button style={{"marginTop": "10px"}} shape="block" onClick={this.handleClick}>
{caret}
{text}
</Button>
</div>
);
return (
<Col md={12}>
<h3>{title}</h3>
<p>{desc}</p>
<Panel collapsible headerContent expanded={this.state.open} colors='bordered' header={header}
footerStyle={{padding: 0}}>
<pre><code className="hljs javascript">{code}</code></pre>
{!!scss_code ? <pre><code className="hljs css">{scss_code}</code></pre> : null}
</Panel>
</Col>
)
}
}
class DemoGroup extends Component {
constructor(props) {
super(props)
}
render() {
return (
<Row>
{DemoArray.map((child, index) => {
return (
<Demo example={child.example} title={child.title} code={child.code} scss_code={child.scss_code}
desc={child.desc} key={index}/>
)
})}
</Row>
)
}
}
ReactDOM.render(<DemoGroup/>, document.getElementById('tinperBeeDemo'));