diff --git a/src/calendar/README.zh-CN.md b/src/calendar/README.zh-CN.md
index 8f3d8ebf8..49270f25b 100644
--- a/src/calendar/README.zh-CN.md
+++ b/src/calendar/README.zh-CN.md
@@ -2,7 +2,7 @@
### 介绍
-日历组件用于选择日期或日期区间,可以与 [弹出层](#/zh-CN/popup)、[单元格](#/zh-CN/cell)、[输入框](#/zh-CN/field) 等组件配合使用
+日历组件用于选择日期或日期区间
### 引入
@@ -17,26 +17,19 @@ Vue.use(Calendar);
### 选择单个日期
-下面演示了结合单元格、弹出层来使用日历组件的用法。
+下面演示了结合单元格来使用日历组件的用法,点击单元格后唤起日历组件。
```html
-
-
-
-
-
+ @select="onSelect"
+/>
```
```js
@@ -87,6 +80,7 @@ export default {
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|------|------|------|------|------|
+| v-model | 是否显示日历弹窗 | *boolean* | `false` | - |
| type | 选择类型,`single`表示选择单个日期,
`range`表示选择日期区间 | *string* | `single` | - |
| title | 日历标题 | *string* | `日期选择` | - |
| min-date | 最小日期 | *Date* | 当前日期 | - |
@@ -95,6 +89,7 @@ export default {
| row-height | 日期所在行的高度 | *number* | `64` | - |
| button-text | 确认按钮的文字 | *string* | `确定` | - |
| button-disabled-text | 确认按钮处于禁用状态时的文字 | *string* | `确定` | - |
+| poppable | 是否以弹层的形式展示日历 | *boolean* | `true` | - |
| show-mark | 是否显示月份背景水印 | *boolean* | `true` | - |
| safe-area-inset-bottom | 是否开启底部安全区适配,[详细说明](#/zh-CN/quickstart#di-bu-an-quan-qu-gua-pei) | *boolean* | `true` | - |
diff --git a/src/calendar/demo/index.vue b/src/calendar/demo/index.vue
index aebf87dfa..9788491fe 100644
--- a/src/calendar/demo/index.vue
+++ b/src/calendar/demo/index.vue
@@ -8,15 +8,11 @@
@click="toggle('selectSingleDate', true)"
/>
-
-
-
+ :poppable="false"
+ @select="onSelect($event, 'selectSingleDate')"
+ />
-
-
-
+ type="range"
+ @select="onSelect($event, 'selectDateRange')"
+ />
diff --git a/src/calendar/index.js b/src/calendar/index.js
index 22b841705..1af30bf03 100644
--- a/src/calendar/index.js
+++ b/src/calendar/index.js
@@ -11,6 +11,7 @@ import {
RENDER_OFFSET
} from './utils';
+import Popup from '../popup';
import Button from '../button';
import Month from './components/Month';
import Header from './components/Header';
@@ -18,6 +19,7 @@ import Header from './components/Header';
export default createComponent({
props: {
title: String,
+ value: Boolean,
buttonText: String,
defaultDate: [Date, Array],
buttonDisabledText: String,
@@ -42,6 +44,10 @@ export default createComponent({
type: Number,
default: ROW_HEIGHT
},
+ poppable: {
+ type: Boolean,
+ default: true
+ },
showMark: {
type: Boolean,
default: true
@@ -76,17 +82,31 @@ export default createComponent({
},
watch: {
+ value(val) {
+ if (val) {
+ this.initRect();
+ }
+ },
+
defaultDate(val) {
this.currentDate = val;
}
},
mounted() {
- this.bodyHeight = this.$refs.body.getBoundingClientRect().height;
- this.onScroll();
+ if (!this.poppable) {
+ this.initRect();
+ }
},
methods: {
+ initRect() {
+ this.$nextTick(() => {
+ this.bodyHeight = this.$refs.body.getBoundingClientRect().height;
+ this.onScroll();
+ });
+ },
+
getInitialDate() {
const { type, defaultDate, minDate } = this;
@@ -155,6 +175,10 @@ export default createComponent({
}
},
+ togglePopup(val) {
+ this.$emit('input', val);
+ },
+
onConfirmRange() {
this.$emit('select', this.currentDate);
},
@@ -213,24 +237,43 @@ export default createComponent({
{this.genFooterContent()}
);
+ },
+
+ genCalendar() {
+ return (
+
+ );
}
},
render() {
- return (
-
- );
+ if (this.poppable) {
+ return (
+
+ );
+ }
+
+ return this.genCalendar();
}
});
diff --git a/src/calendar/index.less b/src/calendar/index.less
index 901a39e62..7803db958 100644
--- a/src/calendar/index.less
+++ b/src/calendar/index.less
@@ -4,6 +4,11 @@
display: flex;
flex-direction: column;
height: 100%;
+ background-color: @white;
+
+ &__popup {
+ height: 80%;
+ }
&__header {
flex-shrink: 0;