跳到主要内容
Calendar
日历用于展示一个日期或时间范围,通常由一个网格状的表格组成。日历可以让用户快速地选择或查看某个日期或时间段,例如营销活动日历等。

示例

日历单元格可以通过beforeRender函数设置不同类型展示不一样的背景色,也支持操作单元格弹出popover自定义内容的弹框,详情想看下面的demo和说明。

Click触发弹框

通过click触发弹框展示

PCPhonePad
<page title="日历">
<calendar x="calendar"
before-render="{{beforeRender}}"
bindselect="selecteHandler"
bindchanged="change">
<template slot="popover">
<main title="标题标题" subtitle="{{subtitle}}">
<form label-size="{{50}}">
<item colspan="6" label="我是label" node="input"></item>
<item colspan="6" label="我是label" node="input"></item>
<item colspan="6" label="我是label" node="input"></item>
</form>
</main>
</template>
</calendar>
</page>

import moment from 'moment';

const getTomorrow=(num)=>{
let today=new Date();
let tomorrow=new Date(today);
tomorrow.setDate(today.getDate()+num);
return moment(tomorrow).format('YYYY-MM-DD');
}

export default XPage({
data: {
showPopoverLists: [
{date: moment(new Date()).format('YYYY-MM-DD'), status: 'danger'},
{date: getTomorrow(1), status: 'success'},
{date: getTomorrow(2), status: 'success'},
{date: getTomorrow(3), status: 'success'},
{date: getTomorrow(4), status: 'warning'}
],
subtitle: '',
},
selecteHandler(date, obj) {
obj.isPopoverShow ? this.getComponent('calendar').hidePopover() : this.showPopoverHandler(date);
},
beforeRender(date) {
const list = this.data.showPopoverLists.filter((item) => {
return moment(item.date).format('YYYY-MM-DD') === moment(date).format('YYYY-MM-DD');
});

if (list.length) {
return {
status: list[0].status || '',
};
}
},
change(date) {
this.setData({
subtitle: `选中日期是 ${moment(date).format('YYYY-MM-DD')}`
});

this.showPopoverHandler(date);
},
showPopoverHandler(date) {
const needShow = this.data.showPopoverLists.filter((item) => {
return moment(item.date).format('YYYY-MM-DD') === moment(date).format('YYYY-MM-DD');
});

if (!needShow.length) {
return;
}

// 请在设置value后延时展示弹框
this.getComponent('calendar').showPopover();
}

});


Hover触发弹框

通过hover触发弹框展示,注:通过hover触发弹框展示时调用showPopover函数请传入参数'hover'。

PCPhonePad
<page title="日历">
<calendar x="calendar"
before-render="{{beforeRender}}"
bindcell-mouse-enter="mouseEnter"
bindcell-mouse-leave="mouseLeave"
>
<template slot="popover">
{{text}}
</template>
</calendar>
</page>


import moment from 'moment';

const getTomorrow=(num)=>{
let today=new Date();
let tomorrow=new Date(today);
tomorrow.setDate(today.getDate()+num);
return moment(tomorrow).format('YYYY-MM-DD');
}

export default XPage({
data: {
showPopoverLists: [
{date: moment(new Date()).format('YYYY-MM-DD'), status: 'danger'},
{date: getTomorrow(1), status: 'success'},
{date: getTomorrow(2), status: 'success'},
{date: getTomorrow(3), status: 'success'},
{date: getTomorrow(4), status: 'warning'}
],
text: '',
},
beforeRender(date) {
const list = this.data.showPopoverLists.filter((item) => {
return moment(item.date).format('YYYY-MM-DD') === moment(date).format('YYYY-MM-DD');
});

if (list.length) {
return {
status: list[0].status || '',
};
}
},

mouseEnter(date) {
this.setData({
text: `当前hover日期是 ${moment(date).format('YYYY-MM-DD')}`
});

this.showPopoverHandler(date);
},
mouseLeave() {
this.getComponent('calendar').hidePopover();
},

showPopoverHandler(date) {
const needShow = this.data.showPopoverLists.filter((item) => {
return moment(item.date).format('YYYY-MM-DD') === moment(date).format('YYYY-MM-DD');
});

if (!needShow.length) {
return;
}

this.getComponent('calendar').showPopover('hover');//hover展示弹框请传入参数:'hover'
},
});


Attributes

属性说明类型可选值默认值版本
value绑定值Date/String----PC--
beforeRender单元格渲染前执行,可返回对象如:{status:'success'},具体支持属性请参考下表Function----PC--

beforeRender

单元格渲染前执行,返回的参数为Object,对象中值的说明如下表

属性说明类型可选值默认值版本
status单元格状态Stringsuccess/danger/warning--PC--

Events

名称说明回调参数版本
changed选择日期改变后触发(value)PC--
select选择单元格时触发(value, callback)PC--
cell-mouse-enter鼠标进入单元格触发(value, callback)PC--
cell-mouse-leave鼠标离开单元格触发(value, callback)PC--

Methods

名称说明入参返回版本
showPopover展示popover弹框----PC--
hidePopover关闭popover弹框----PC--

Slot

名称说明版本
popover自定义内容弹框PC--