Calendar 日历

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

何时使用

当数据是日期或按照日期划分时,例如日程、课表、价格日历等,农历等。目前支持年/月切换。

代码演示

Calendar日历 - 图1

基本

一个通用的日历面板,支持年/月切换。

  1. <template>
  2. <a-calendar @panelChange="onPanelChange" />
  3. </template>
  4. <script>
  5. export default {
  6. methods: {
  7. onPanelChange(value, mode) {
  8. console.log(value, mode);
  9. }
  10. }
  11. }
  12. </script>

Calendar日历 - 图2

卡片模式

用于嵌套在空间有限的容器中。

  1. <template>
  2. <div :style="{ width: '300px', border: '1px solid #d9d9d9', borderRadius: '4px' }">
  3. <a-calendar :fullscreen="false" @panelChange="onPanelChange" />
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. methods: {
  9. onPanelChange(value, mode) {
  10. console.log(value, mode);
  11. }
  12. }
  13. }
  14. </script>

Calendar日历 - 图3

通知事项日历

一个复杂的应用示例,用 dateCellRendermonthCellRender 函数来自定义需要渲染的数据。

  1. <template>
  2. <a-calendar>
  3. <ul class="events" slot="dateCellRender" slot-scope="value">
  4. <li v-for="item in getListData(value)" :key="item.content">
  5. <a-badge :status="item.type" :text="item.content" />
  6. </li>
  7. </ul>
  8. <template slot="monthCellRender" slot-scope="value">
  9. <div v-if="getMonthData(value)" class="notes-month">
  10. <section>{{getMonthData(value)}}</section>
  11. <span>Backlog number</span>
  12. </div>
  13. </template>
  14. </a-calendar>
  15. </template>
  16. <script>
  17. export default {
  18. methods: {
  19. getListData(value) {
  20. let listData;
  21. switch (value.date()) {
  22. case 8:
  23. listData = [
  24. { type: 'warning', content: 'This is warning event.' },
  25. { type: 'success', content: 'This is usual event.' },
  26. ]; break;
  27. case 10:
  28. listData = [
  29. { type: 'warning', content: 'This is warning event.' },
  30. { type: 'success', content: 'This is usual event.' },
  31. { type: 'error', content: 'This is error event.' },
  32. ]; break;
  33. case 15:
  34. listData = [
  35. { type: 'warning', content: 'This is warning event' },
  36. { type: 'success', content: 'This is very long usual event。。....' },
  37. { type: 'error', content: 'This is error event 1.' },
  38. { type: 'error', content: 'This is error event 2.' },
  39. { type: 'error', content: 'This is error event 3.' },
  40. { type: 'error', content: 'This is error event 4.' },
  41. ]; break;
  42. default:
  43. }
  44. return listData || [];
  45. },
  46. getMonthData(value) {
  47. if (value.month() === 8) {
  48. return 1394;
  49. }
  50. },
  51. }
  52. }
  53. </script>
  54. <style scoped>
  55. .events {
  56. list-style: none;
  57. margin: 0;
  58. padding: 0;
  59. }
  60. .events .ant-badge-status {
  61. overflow: hidden;
  62. white-space: nowrap;
  63. width: 100%;
  64. text-overflow: ellipsis;
  65. font-size: 12px;
  66. }
  67. .notes-month {
  68. text-align: center;
  69. font-size: 28px;
  70. }
  71. .notes-month section {
  72. font-size: 28px;
  73. }
  74. </style>

Calendar日历 - 图4

选择功能

一个通用的日历面板,支持年/月切换。

  1. <template>
  2. <div>
  3. <a-alert :message="`You selected date: ${selectedValue && selectedValue.format('YYYY-MM-DD')}`" />
  4. <div :style="{ display: 'inline-block', width: '500px', border: '1px solid #d9d9d9', borderRadius: '4px' }">
  5. <a-calendar :value="value" @select="onSelect" @panelChange="onPanelChange" />
  6. </div>
  7. <div :style="{ display: 'inline-block', width: '500px',marginLeft: '20px', border: '1px solid #d9d9d9', borderRadius: '4px' }">
  8. <a-calendar v-model="value1" />
  9. </div>
  10. </div>
  11. </template>
  12. <script>
  13. import moment from 'moment';
  14. export default {
  15. data() {
  16. return {
  17. value: moment('2017-01-25'),
  18. selectedValue: moment('2017-01-25'),
  19. value1: moment('2017-01-25'),
  20. }
  21. },
  22. methods: {
  23. onSelect(value) {
  24. this.value = value
  25. this.selectedValue = value
  26. },
  27. onPanelChange (value) {
  28. this.value = value
  29. }
  30. }
  31. }
  32. </script>

API

注意:Calendar 部分 locale 是从 value 中读取,所以请先正确设置 moment 的 locale。

  1. // 默认语言为 en-US,所以如果需要使用其他语言,推荐在入口文件全局设置 locale
  2. // import moment from 'moment';
  3. // import 'moment/locale/zh-cn';
  4. // moment.locale('zh-cn');
  5. <a-calendar
  6. @panelChange="onPanelChange"
  7. @select="onSelect"
  8. >
  9. <template slot="dateCellRender" slot-scope="value"></template>
  10. <template slot="monthCellRender" slot-scope="value"></template>
  11. </a-calendar>
参数说明类型默认值
dateCellRender作用域插槽,用来自定义渲染日期单元格,返回内容会被追加到单元格,function(date: moment)
dateFullCellRender作用域插槽,自定义渲染日期单元格,返回内容覆盖单元格function(date: moment)
defaultValue默认展示的日期moment默认日期
disabledDate不可选择的日期(currentDate: moment) => boolean
fullscreen是否全屏显示booleantrue
locale国际化配置object默认配置
mode初始模式,month/yearstringmonth
monthCellRender作用域插槽,自定义渲染月单元格,返回内容会被追加到单元格function(date: moment)
monthFullCellRender作用域插槽,自定义渲染月单元格,返回内容覆盖单元格function(date: moment)
validRange设置可以显示的日期[moment, moment]
value(v-model)展示日期moment当前日期

事件

事件名称说明回调参数
panelChange日期面板变化回调function(date: moment, mode: string)
select点击选择日期回调function(date: moment)
change日期变化时的回调, 面板变化有可能导致日期变化function(date: moment)