From 50637863ce7fae40ec0298fe02e5fb1ec46668ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=81=8F?= Date: Wed, 14 Dec 2016 23:08:57 +0800 Subject: [PATCH] update DatePicker update DatePicker --- .../date-picker/base/date-table.vue | 137 ++++++++++++------ src/components/date-picker/panel/date.vue | 53 ++++++- src/components/date-picker/picker.vue | 17 ++- .../date-picker/picker/date-picker.js | 13 +- src/styles/components/date-picker.less | 103 +++++++++++++ src/styles/components/index.less | 3 +- src/styles/themes/default/custom.less | 1 + test/routers/date.vue | 14 +- test/routers/table.vue | 100 +++++++------ 9 files changed, 343 insertions(+), 98 deletions(-) create mode 100644 src/styles/components/date-picker.less diff --git a/src/components/date-picker/base/date-table.vue b/src/components/date-picker/base/date-table.vue index 6fccf470..07beb3ed 100644 --- a/src/components/date-picker/base/date-table.vue +++ b/src/components/date-picker/base/date-table.vue @@ -1,43 +1,34 @@ \ No newline at end of file diff --git a/src/components/date-picker/panel/date.vue b/src/components/date-picker/panel/date.vue index 24b17a59..fd971d22 100644 --- a/src/components/date-picker/panel/date.vue +++ b/src/components/date-picker/panel/date.vue @@ -32,7 +32,14 @@
+ v-show="currentView === 'date'" + :year="year" + :month="month" + :date="date" + :value="value" + :week="week" + :selection-mode="selectionMode" + :disabled-date="disabledDate"> \ No newline at end of file diff --git a/src/components/date-picker/picker.vue b/src/components/date-picker/picker.vue index d2c5a775..34f39e7a 100644 --- a/src/components/date-picker/picker.vue +++ b/src/components/date-picker/picker.vue @@ -27,6 +27,7 @@ import Drop from '../../components/select/dropdown.vue'; import clickoutside from '../../directives/clickoutside'; import { oneOf } from '../../utils/assist'; + import { formatDate } from './util'; const prefixCls = 'ivu-date-picker'; @@ -90,7 +91,8 @@ showClose: false, visualValue: '', visible: false, - picker: null + picker: null, + internalValue: '' } }, computed: { @@ -126,6 +128,13 @@ showPicker () { if (!this.picker) { this.picker = new Vue(this.panel).$mount(this.$els.picker); + this.picker.value = this.internalValue; + if (this.format) this.picker.format = this.format; + + const options = this.options; + for (const option in options) { + this.picker[option] = options[option]; + } } } }, @@ -137,6 +146,12 @@ } else { this.$refs.drop.destroy(); } + }, + value: { + immediate: true, + handler (val) { + this.internalValue = formatDate(val); + } } }, beforeDestroy () { diff --git a/src/components/date-picker/picker/date-picker.js b/src/components/date-picker/picker/date-picker.js index d6bd690d..79e77e35 100644 --- a/src/components/date-picker/picker/date-picker.js +++ b/src/components/date-picker/picker/date-picker.js @@ -19,9 +19,20 @@ export default { return oneOf(value, ['year', 'month', 'week', 'date', 'daterange', 'datetime', 'datetimerange']); }, default: 'date' + }, + value: { + type: [String, Array] } }, - created() { + created () { + if (!this.value) { + if (this.type === 'daterange' || this.type === 'datetimerange') { + this.value = ['','']; + } else { + this.value = ''; + } + } + this.panel = getPanel(this.type); } } \ No newline at end of file diff --git a/src/styles/components/date-picker.less b/src/styles/components/date-picker.less new file mode 100644 index 00000000..ff8adb0c --- /dev/null +++ b/src/styles/components/date-picker.less @@ -0,0 +1,103 @@ +@date-picker-prefix-cls: ~"@{css-prefix}date-picker"; + +.@{date-picker-prefix-cls} { + position: relative; + .@{select-dropdown-prefix-cls} { + width: auto; + overflow: visible; + max-height: none; + } + &-cells{ + width: 196px; + margin: 10px; + span{ + display: inline-block; + width: 24px; + height: 24px; + + em{ + display: inline-block; + width: 24px; + height: 24px; + line-height: 24px; + margin: 2px; + font-style: normal; + border-radius: @btn-border-radius-small; + text-align: center; + transition: all @transition-time @ease-in-out; + } + } + &-header span{ + line-height: 24px; + text-align: center; + margin: 2px; + color: @btn-disable-color; + } + &-cell{ + span&{ + width: 28px; + height: 28px; + cursor: pointer; + } + &:hover{ + em{ + background: @date-picker-cell-hover-bg; + } + } + &-prev-month,&-next-month{ + em{ + color: @btn-disable-color; + } + &:hover{ + em{ + background: transparent; + } + } + } + span&-disabled,span&-disabled:hover{ + cursor: @cursor-disabled; + background: @btn-disable-bg; + color: @btn-disable-color; + em{ + color: inherit; + background: inherit; + } + } + &-today{ + em { + position: relative; + &:after{ + content: ''; + display: block; + width: 6px; + height: 6px; + border-radius: 50%; + background: @primary-color; + position: absolute; + top: 1px; + right: 1px; + } + } + } + &-selected,&-selected:hover { + em{ + background: @primary-color; + color: #fff; + } + } + span&-disabled&-selected{ + em { + background: @btn-disable-color; + color: @btn-disable-bg; + } + } + &-today&-selected{ + em{ + &:after{ + background: #fff; + } + } + } + } + } +} \ No newline at end of file diff --git a/src/styles/components/index.less b/src/styles/components/index.less index 79404b6f..a38a72d9 100644 --- a/src/styles/components/index.less +++ b/src/styles/components/index.less @@ -31,4 +31,5 @@ @import "table"; @import "dropdown"; @import "tabs"; -@import "menu"; \ No newline at end of file +@import "menu"; +@import "date-picker"; \ No newline at end of file diff --git a/src/styles/themes/default/custom.less b/src/styles/themes/default/custom.less index 5c5ccebe..066481c7 100644 --- a/src/styles/themes/default/custom.less +++ b/src/styles/themes/default/custom.less @@ -43,6 +43,7 @@ @table-td-hover-bg : #ebf7ff; @table-td-highlight-bg : #ebf7ff; @menu-dark-active-bg : #313540; +@date-picker-cell-hover-bg : #e1f0fe; // Shadow @shadow-color : rgba(0, 0, 0, .2); diff --git a/test/routers/date.vue b/test/routers/date.vue index 2190e029..cb599a1a 100644 --- a/test/routers/date.vue +++ b/test/routers/date.vue @@ -1,13 +1,21 @@