Calendar 日历

如果项目中使用的是 1.x 版本的基础组件(@alifd/next),请在左侧导航顶部切换组件版本。

安装方法

  1. 在命令行中执行以下命令npm install @icedesign/base@latest -S

Guide

按照日历形式展示数据的容器。

何时使用

日历组件是一个偏向于展示与受控的基础组件,例如日程、课表、价格日历、农历等,如果您在使用上偏向于主动交互,请使用 DatePicker 组件。

类型说明

组件回调函数返回的数据格式为组件内自定义 CalendarDate 对象格式,请注意使用:

  1. CalendarDate = {
  2. timestamp: Number, // 时间戳
  3. year: Number, // 年
  4. month: Number, // 月 0~11
  5. date: Number, // 日 1~31
  6. week: Number // 周几 1~7
  7. };

注意点

  • 如果要使用该组件,请直接使用直接导出的 Calendar 组件。

  • Calendar 私有的 DatePickerPanelRangePickerPanel 为组件的私有属性,不对外暴露,建议不要使用。

API

日历

参数说明类型默认值
prefix样式品牌前缀String'next-'
base基准日期any-
value选中的日期值any-
mode面板选择模式可选值:'month', 'year', 'decade'Enum'month'
type类型可选值:'fullscreen', 'card'Enum'fullscreen'
onChange日期改变时的回调签名:Function(calendarDate: Object) => void参数:calendarDate: {Object} 对应 Calendar 返回的自定义日期对象Function() => {}
className自定义样式类String-
dateCellRender自定义日期渲染函数签名:Function(calendarDate: Object) => Function参数:calendarDate: {Object} 对应 Calendar 返回的自定义日期对象返回值:{Function} nullFunction-
monthCellRender自定义月份渲染函数签名:Function(calendarDate: Object) => Function参数:calendarDate: {Object} 对应 Calendar 返回的自定义日期对象返回值:{Function} nullFunction-
yearCellRender自定义年份渲染函数签名:Function(calendarDate: Object) => Function参数:calendarDate: {Object} 对应 Calendar 返回的自定义日期对象返回值:{Function} nullFunction-
disabledDate不可选择的日期签名:Function(calendarDate: Object) => Boolean参数:calendarDate: {Object} 对应 Calendar 返回的自定义日期对象返回值:{Boolean} nullFunction-
disabledMonth不可选择的月份签名:Function(calendarDate: Object) => Boolean参数:calendarDate: {Object} 对应 Calendar 返回的自定义日期对象返回值:{Boolean} nullFunction-
disabledYear不可选择的年份签名:Function(calendarDate: Object) => Boolean参数:calendarDate: {Object} 对应 Calendar 返回的自定义日期对象返回值:{Boolean} nullFunction-
language多语言选择可选值:'en-us', 'ar', 'de', 'es', 'fr', 'hi', 'it', 'ja', 'ko', 'pt', 'ru', 'zh-cn', 'zh-hk', 'zh-tw'Enum-
locale国际化配置Object-

代码示例

基本

一个最简单的日历面板,用户可以切换年/月。

Calendar 日历 - 图1

查看源码在线预览

  1. import { Calendar } from "@icedesign/base";
  2. function dateCellRender(calendarDate) {
  3. const style = {
  4. position: "absolute",
  5. width: "calc(100% - 8px)",
  6. height: "2px",
  7. textAlign: "center",
  8. background: "#ff0000",
  9. top: 0,
  10. left: 4
  11. };
  12. return calendarDate.week > 5 ? (
  13. <div>
  14. <span style={style} />
  15. {calendarDate.date}
  16. </div>
  17. ) : (
  18. <div>{calendarDate.date}</div>
  19. );
  20. }
  21. ReactDOM.render(<Calendar dateCellRender={dateCellRender} />, mountNode);

卡片模式

包装在有限的容器内

Calendar 日历 - 图2

查看源码在线预览

  1. import { Calendar, Select } from "@icedesign/base";
  2. class Demo extends React.Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. lang: "zh-cn",
  7. date: "2017-06-07"
  8. };
  9. this.langs = [
  10. "en-us",
  11. "ar",
  12. "de",
  13. "es",
  14. "fr",
  15. "hi",
  16. "it",
  17. "ja",
  18. "ko",
  19. "pt",
  20. "ru",
  21. "zh-cn",
  22. "zh-hk",
  23. "zh-tw"
  24. ];
  25. }
  26. onChangeLang(val) {
  27. this.setState({
  28. lang: val
  29. });
  30. }
  31. render() {
  32. const { lang, date } = this.state;
  33. return (
  34. <div>
  35. <Select defaultValue={lang} onChange={this.onChangeLang.bind(this)}>
  36. {this.langs.map(item => (
  37. <Select.Option value={item} key={item}>
  38. {item}
  39. </Select.Option>
  40. ))}
  41. </Select>
  42. <div className="custom-calendar-guide">
  43. <Calendar type="card" language={lang} value={date} />
  44. </div>
  45. </div>
  46. );
  47. }
  48. }
  49. ReactDOM.render(<Demo />, mountNode);
  1. .custom-calendar-guide {
  2. width: 270px;
  3. border: 1px solid #C4C6CF;
  4. border-radius: 3px;
  5. overflow: hidden;
  6. margin-top: 20px;
  7. }

受控的日历组件

用于日历组件中的日期选择面板

Calendar 日历 - 图3

查看源码在线预览

  1. import { Calendar, Select } from "@icedesign/base";
  2. class Demo extends React.Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. lang: "zh-cn",
  7. base: "",
  8. value: "",
  9. mode: "month"
  10. };
  11. this.langs = [
  12. "en-us",
  13. "ar",
  14. "de",
  15. "es",
  16. "fr",
  17. "hi",
  18. "it",
  19. "ja",
  20. "ko",
  21. "pt",
  22. "ru",
  23. "zh-cn",
  24. "zh-hk",
  25. "zh-tw"
  26. ];
  27. }
  28. onChangeLang(val) {
  29. this.setState({
  30. lang: val
  31. });
  32. }
  33. onDateChange(nextState) {
  34. nextState.mode = nextState.mode === "date" ? "month" : nextState.mode;
  35. this.setState(nextState);
  36. }
  37. render() {
  38. const { lang, base, value, mode } = this.state;
  39. return (
  40. <div>
  41. <Select defaultValue={lang} onChange={this.onChangeLang.bind(this)}>
  42. {this.langs.map(item => (
  43. <Select.Option value={item} key={item}>
  44. {item}
  45. </Select.Option>
  46. ))}
  47. </Select>
  48. <div className="custom-calendar-guide">
  49. <Calendar
  50. type="card"
  51. language={lang}
  52. value={value}
  53. mode={mode}
  54. base={base}
  55. onChange={this.onDateChange.bind(this)}
  56. />
  57. </div>
  58. </div>
  59. );
  60. }
  61. }
  62. ReactDOM.render(<Demo />, mountNode);
  1. .custom-calendar-guide {
  2. width: 270px;
  3. border: 1px solid #C4C6CF;
  4. border-radius: 3px;
  5. overflow: hidden;
  6. margin-top: 20px;
  7. }

禁用日期

禁用某些日期

Calendar 日历 - 图4

查看源码在线预览

  1. import { Calendar, moment } from "@icedesign/base";
  2. const disabledDate = function(calendarDate) {
  3. let current = moment()
  4. .year(calendarDate.year)
  5. .month(calendarDate.month)
  6. .date(calendarDate.date);
  7. return current.valueOf() > moment().valueOf();
  8. };
  9. const wrapperStyle = {
  10. width: "270px",
  11. border: "1px solid #C4C6CF",
  12. borderRadius: "4px",
  13. overflow: "hidden"
  14. };
  15. ReactDOM.render(
  16. <div style={wrapperStyle}>
  17. <Calendar type="card" disabledDate={disabledDate} />
  18. </div>,
  19. mountNode
  20. );

自定义语言

用于日历组件中的日期选择面板

Calendar 日历 - 图5

查看源码在线预览

  1. import { Calendar } from "@icedesign/base";
  2. const locale = {
  3. format: {
  4. months: [
  5. "一月",
  6. "二月",
  7. "三月",
  8. "四月",
  9. "五月",
  10. "六月",
  11. "七月",
  12. "八月",
  13. "九月",
  14. "十月",
  15. "十一月",
  16. "十二月"
  17. ],
  18. shortMonths: [
  19. "一月",
  20. "二月",
  21. "三月",
  22. "四月",
  23. "五月",
  24. "六月",
  25. "七月",
  26. "八月",
  27. "九月",
  28. "十月",
  29. "十一月",
  30. "十二月"
  31. ],
  32. weekdays: [
  33. "星期天",
  34. "星期一",
  35. "星期二",
  36. "星期三",
  37. "星期四",
  38. "星期五",
  39. "星期六"
  40. ],
  41. shortWeekdays: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
  42. veryShortWeekdays: ["日", "一", "二", "三", "四", "五", "六"],
  43. ampms: ["上午", "下午"]
  44. }
  45. };
  46. const wrapperStyle = {
  47. width: "270px",
  48. border: "1px solid #C4C6CF",
  49. borderRadius: "3px",
  50. overflow: "hidden"
  51. };
  52. ReactDOM.render(
  53. <div>
  54. <div style={wrapperStyle}>
  55. <Calendar type="card" language={"en-us"} locale={locale} />
  56. </div>
  57. </div>,
  58. mountNode
  59. );

相关区块

Calendar 日历 - 图6

暂无相关区块