• Calendar 日历
    • 何时使用
    • 代码演示
      • 基本
      • 卡片模式
      • 通知事项日历
      • 选择功能
  • API
    • 事件

    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)