From e32b86e97f1239114d82ad37bdc2361895925426 Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Tue, 16 Jan 2018 22:22:49 +0100 Subject: [PATCH 01/48] move date.vue to subfolder --- .../date-picker/panel/Date/date.vue | 162 +++++++++++ src/components/date-picker/panel/date.vue | 261 ------------------ 2 files changed, 162 insertions(+), 261 deletions(-) create mode 100644 src/components/date-picker/panel/Date/date.vue delete mode 100644 src/components/date-picker/panel/date.vue diff --git a/src/components/date-picker/panel/Date/date.vue b/src/components/date-picker/panel/Date/date.vue new file mode 100644 index 00000000..052ce87b --- /dev/null +++ b/src/components/date-picker/panel/Date/date.vue @@ -0,0 +1,162 @@ + + diff --git a/src/components/date-picker/panel/date.vue b/src/components/date-picker/panel/date.vue deleted file mode 100644 index 980720ef..00000000 --- a/src/components/date-picker/panel/date.vue +++ /dev/null @@ -1,261 +0,0 @@ - - From c4e3fe331f8e4db897652a46f4ace5b6f231698a Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Tue, 16 Jan 2018 22:23:58 +0100 Subject: [PATCH 02/48] move date-range.vue to subfolder --- .../date-picker/panel/Date/date-range.vue | 268 ++++++++++++ .../date-picker/panel/date-range.vue | 414 ------------------ 2 files changed, 268 insertions(+), 414 deletions(-) create mode 100644 src/components/date-picker/panel/Date/date-range.vue delete mode 100644 src/components/date-picker/panel/date-range.vue diff --git a/src/components/date-picker/panel/Date/date-range.vue b/src/components/date-picker/panel/Date/date-range.vue new file mode 100644 index 00000000..f0225d3f --- /dev/null +++ b/src/components/date-picker/panel/Date/date-range.vue @@ -0,0 +1,268 @@ + + diff --git a/src/components/date-picker/panel/date-range.vue b/src/components/date-picker/panel/date-range.vue deleted file mode 100644 index cd55b125..00000000 --- a/src/components/date-picker/panel/date-range.vue +++ /dev/null @@ -1,414 +0,0 @@ - - From ca8e830cc36301f2347c63a635f8733af88d3da4 Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Tue, 16 Jan 2018 22:24:21 +0100 Subject: [PATCH 03/48] move files to subfolders --- .../date-picker/base/month-table.vue | 79 ------- .../date-picker/base/year-table.vue | 66 +++--- .../panel/{ => Date}/date-panel-label.vue | 0 .../panel/Date/date-panel-mixin.js | 50 ++++ .../date-picker/panel/Time/time-range.vue | 163 +++++++++++++ .../date-picker/panel/{ => Time}/time.vue | 89 +++----- .../panel/{mixin.js => panel-mixin.js} | 21 +- .../date-picker/panel/time-range.vue | 214 ------------------ 8 files changed, 297 insertions(+), 385 deletions(-) delete mode 100644 src/components/date-picker/base/month-table.vue rename src/components/date-picker/panel/{ => Date}/date-panel-label.vue (100%) create mode 100644 src/components/date-picker/panel/Date/date-panel-mixin.js create mode 100644 src/components/date-picker/panel/Time/time-range.vue rename src/components/date-picker/panel/{ => Time}/time.vue (52%) rename src/components/date-picker/panel/{mixin.js => panel-mixin.js} (54%) delete mode 100644 src/components/date-picker/panel/time-range.vue diff --git a/src/components/date-picker/base/month-table.vue b/src/components/date-picker/base/month-table.vue deleted file mode 100644 index c01556b3..00000000 --- a/src/components/date-picker/base/month-table.vue +++ /dev/null @@ -1,79 +0,0 @@ - - diff --git a/src/components/date-picker/base/year-table.vue b/src/components/date-picker/base/year-table.vue index 6bc8467e..00ab9f5e 100644 --- a/src/components/date-picker/base/year-table.vue +++ b/src/components/date-picker/base/year-table.vue @@ -1,30 +1,34 @@ diff --git a/src/components/date-picker/panel/date-panel-label.vue b/src/components/date-picker/panel/Date/date-panel-label.vue similarity index 100% rename from src/components/date-picker/panel/date-panel-label.vue rename to src/components/date-picker/panel/Date/date-panel-label.vue diff --git a/src/components/date-picker/panel/Date/date-panel-mixin.js b/src/components/date-picker/panel/Date/date-panel-mixin.js new file mode 100644 index 00000000..3c4ec99c --- /dev/null +++ b/src/components/date-picker/panel/Date/date-panel-mixin.js @@ -0,0 +1,50 @@ + +import { oneOf } from '../../../../utils/assist'; +import {initTimeDate } from '../../util'; + + +export default { + props: { + confirm: { + type: Boolean, + default: false + }, + showTime: { + type: Boolean, + default: false + }, + format: { + type: String, + default: 'yyyy-MM-dd' + }, + selectionMode: { + type: String, + validator (value) { + return oneOf(value, ['year', 'month', 'date', 'time']); + }, + default: 'date' + }, + shortcuts: { + type: Array, + default: () => [] + }, + disabledDate: { + type: Function, + default: () => false + }, + value: { + type: Array, + default: () => [initTimeDate(), initTimeDate()] + } + }, + computed: { + isTime(){ + return this.currentView === 'time'; + } + }, + methods: { + handleToggleTime(){ + this.currentView = this.currentView === 'time' ? this.selectionMode : 'time'; + }, + } +}; diff --git a/src/components/date-picker/panel/Time/time-range.vue b/src/components/date-picker/panel/Time/time-range.vue new file mode 100644 index 00000000..aea53d2c --- /dev/null +++ b/src/components/date-picker/panel/Time/time-range.vue @@ -0,0 +1,163 @@ + + diff --git a/src/components/date-picker/panel/time.vue b/src/components/date-picker/panel/Time/time.vue similarity index 52% rename from src/components/date-picker/panel/time.vue rename to src/components/date-picker/panel/Time/time.vue index e6646b5f..35a26888 100644 --- a/src/components/date-picker/panel/time.vue +++ b/src/components/date-picker/panel/Time/time.vue @@ -7,9 +7,9 @@ ref="timeSpinner" :show-seconds="showSeconds" :steps="steps" - :hours="hours" - :minutes="minutes" - :seconds="seconds" + :hours="date.getHours()" + :minutes="date.getMinutes()" + :seconds="date.getSeconds()" :disabled-hours="disabledHours" :disabled-minutes="disabledMinutes" :disabled-seconds="disabledSeconds" @@ -25,42 +25,45 @@ From 0b51803bcefc15a8bb0e815d022876e3dbc007e4 Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Tue, 16 Jan 2018 22:25:13 +0100 Subject: [PATCH 04/48] Add functions to utils.js --- src/components/date-picker/util.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/components/date-picker/util.js b/src/components/date-picker/util.js index 31a10dc4..fb248f3c 100644 --- a/src/components/date-picker/util.js +++ b/src/components/date-picker/util.js @@ -14,6 +14,18 @@ export const toDate = function(date) { return _date; }; +export const clearHours = function (time) { + const cloneDate = new Date(time); + cloneDate.setHours(0, 0, 0, 0); + return cloneDate.getTime(); +}; + +export const isInRange = (time, a, b) => { + if (!a || !b) return false; + const [start, end] = [a, b].sort(); + return time >= start && time <= end; +}; + export const formatDate = function(date, format) { date = toDate(date); if (!date) return ''; From 95eae081bce373865b446f4070f275f5645250fb Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Tue, 16 Jan 2018 22:26:00 +0100 Subject: [PATCH 05/48] refactor Datepicker refactor Datepicker to render subcomponents in template instead of creating new Vue instances --- .../date-picker/base/date-table.vue | 176 ++------ src/components/date-picker/base/mixin.js | 51 +++ .../date-picker/base/month-table.vue | 74 ++++ src/components/date-picker/base/prefixCls.js | 2 + src/components/date-picker/picker.vue | 388 +++++++----------- .../date-picker/picker/date-picker.js | 35 +- .../date-picker/picker/time-picker.js | 45 +- 7 files changed, 332 insertions(+), 439 deletions(-) create mode 100644 src/components/date-picker/base/mixin.js create mode 100644 src/components/date-picker/base/month-table.vue create mode 100644 src/components/date-picker/base/prefixCls.js diff --git a/src/components/date-picker/base/date-table.vue b/src/components/date-picker/base/date-table.vue index 23be43a2..12fbb2b6 100644 --- a/src/components/date-picker/base/date-table.vue +++ b/src/components/date-picker/base/date-table.vue @@ -1,88 +1,40 @@ diff --git a/src/components/date-picker/base/prefixCls.js b/src/components/date-picker/base/prefixCls.js new file mode 100644 index 00000000..571b218b --- /dev/null +++ b/src/components/date-picker/base/prefixCls.js @@ -0,0 +1,2 @@ + +export default 'ivu-date-picker-cells'; \ No newline at end of file diff --git a/src/components/date-picker/picker.vue b/src/components/date-picker/picker.vue index 5211fccf..52c39b41 100644 --- a/src/components/date-picker/picker.vue +++ b/src/components/date-picker/picker.vue @@ -29,12 +29,33 @@ ref="drop" :data-transfer="transfer" v-transfer-dom> -
+
+ +
--> - - - - - + @@ -148,22 +150,47 @@ - - - - - - - - - - - - - - - - + + @@ -189,33 +216,22 @@ - - + + + + + + + + + + + + + + + + + + + From 63bd0f7d3fda0cb15a6f83705f8c71ed2c7108f1 Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Wed, 17 Jan 2018 13:05:15 +0100 Subject: [PATCH 08/48] Add start-date prop to force placing of date picker in date --- src/components/date-picker/panel/Date/date-panel-mixin.js | 3 +++ src/components/date-picker/panel/Date/date-range.vue | 6 ++++-- src/components/date-picker/panel/Date/date.vue | 2 +- src/components/date-picker/picker.vue | 4 ++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/date-picker/panel/Date/date-panel-mixin.js b/src/components/date-picker/panel/Date/date-panel-mixin.js index 3c4ec99c..8050cede 100644 --- a/src/components/date-picker/panel/Date/date-panel-mixin.js +++ b/src/components/date-picker/panel/Date/date-panel-mixin.js @@ -35,6 +35,9 @@ export default { value: { type: Array, default: () => [initTimeDate(), initTimeDate()] + }, + startDate: { + type: Date } }, computed: { diff --git a/src/components/date-picker/panel/Date/date-range.vue b/src/components/date-picker/panel/Date/date-range.vue index f0225d3f..8e7a8840 100644 --- a/src/components/date-picker/panel/Date/date-range.vue +++ b/src/components/date-picker/panel/Date/date-range.vue @@ -129,14 +129,16 @@ }, data(){ const [minDate, maxDate] = this.value.map(date => date || initTimeDate()); + const leftPanelDate = this.startDate ? this.startDate : minDate; + return { prefixCls: prefixCls, datePrefixCls: datePrefixCls, dates: this.value, rangeState: {from: this.value[0], to: this.value[1], selecting: minDate && !maxDate}, currentView: this.selectionMode || 'range', - leftPanelDate: minDate, - rightPanelDate: new Date(minDate.getFullYear(), minDate.getMonth() + 1, minDate.getDate()) + leftPanelDate: leftPanelDate, + rightPanelDate: new Date(leftPanelDate.getFullYear(), leftPanelDate.getMonth() + 1, leftPanelDate.getDate()) }; }, computed: { diff --git a/src/components/date-picker/panel/Date/date.vue b/src/components/date-picker/panel/Date/date.vue index 052ce87b..adec411f 100644 --- a/src/components/date-picker/panel/Date/date.vue +++ b/src/components/date-picker/panel/Date/date.vue @@ -97,7 +97,7 @@ datePrefixCls: datePrefixCls, currentView: this.selectionMode || 'date', dates: dates, - panelDate: dates[0] || new Date() + panelDate: this.startDate || dates[0] || new Date() }; }, computed: { diff --git a/src/components/date-picker/picker.vue b/src/components/date-picker/picker.vue index 17982a34..67566efc 100644 --- a/src/components/date-picker/picker.vue +++ b/src/components/date-picker/picker.vue @@ -39,6 +39,7 @@ :steps="steps" :format="format" :value="internalValue" + :start-date="startDate" v-bind="ownPickerProps" @@ -204,6 +205,9 @@ type: Boolean, default: false }, + startDate: { + type: Date + }, size: { validator (value) { return oneOf(value, ['small', 'large', 'default']); From 435bf7814a6ad6aab47a357ceae8cd28480fbb57 Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Wed, 17 Jan 2018 13:23:10 +0100 Subject: [PATCH 09/48] add split panel props --- src/components/date-picker/panel/Date/date-range.vue | 10 +++++++++- src/components/date-picker/picker.vue | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/components/date-picker/panel/Date/date-range.vue b/src/components/date-picker/panel/Date/date-range.vue index 8e7a8840..aab7c3e8 100644 --- a/src/components/date-picker/panel/Date/date-range.vue +++ b/src/components/date-picker/panel/Date/date-range.vue @@ -21,9 +21,11 @@ :current-view="currentView" :date-prefix-cls="datePrefixCls"> @@ -45,9 +47,11 @@
@@ -125,7 +129,11 @@ mixins: [ Mixin, Locale, DateMixin ], components: { Icon, DateTable, YearTable, MonthTable, TimePicker, Confirm, datePanelLabel }, props: { - // in the mixin + // more props in the mixin + splitPanels: { + type: Boolean, + default: false + }, }, data(){ const [minDate, maxDate] = this.value.map(date => date || initTimeDate()); diff --git a/src/components/date-picker/picker.vue b/src/components/date-picker/picker.vue index 67566efc..d53f27b1 100644 --- a/src/components/date-picker/picker.vue +++ b/src/components/date-picker/picker.vue @@ -40,6 +40,7 @@ :format="format" :value="internalValue" :start-date="startDate" + :split-panels="splitPanels" v-bind="ownPickerProps" @@ -205,6 +206,10 @@ type: Boolean, default: false }, + splitPanels: { + type: Boolean, + default: false + }, startDate: { type: Date }, From ac231c9ab497b034de5d90c063353a74872eeead Mon Sep 17 00:00:00 2001 From: Sergio Crisostomo Date: Wed, 17 Jan 2018 13:23:20 +0100 Subject: [PATCH 10/48] examples --- examples/routers/date.vue | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/examples/routers/date.vue b/examples/routers/date.vue index 37b36270..39ba84c6 100644 --- a/examples/routers/date.vue +++ b/examples/routers/date.vue @@ -167,12 +167,17 @@
| Single date, format MM-dd HH:mm
+ | Single datetime, date object, start date +
+
| DateTimeRange, date objects
| Range, no dates
+ | Range, no dates, split panels +
| DateTimeRange, format yyyy-MM-dd HH:mm
@@ -183,10 +188,14 @@