Skip to content

Commit 4c1a75e

Browse files
committed
feat: 新增 年月日选择器格式
1 parent f9bcedb commit 4c1a75e

File tree

3 files changed

+58
-10
lines changed

3 files changed

+58
-10
lines changed

src/components/date-picker/src/date-picker.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import Toast from './toast';
2222
import Main from './main';
2323
import Vue from 'vue';
24+
import { oneOf } from '@/utils/validatorProps';
2425
2526
export default {
2627
name: 'LayDatePicker',
@@ -29,6 +30,13 @@ export default {
2930
type: [String, Number],
3031
default: ''
3132
},
33+
type: {
34+
type: String,
35+
default: 'date',
36+
validator (value) {
37+
return oneOf('type', ['year', 'month', 'date'], value);
38+
}
39+
},
3240
placeholder: {
3341
type: String,
3442
default: ''
@@ -60,6 +68,7 @@ export default {
6068
this.picker = Toast();
6169
this.picker.elem = this.$refs.input;
6270
this.main = new Vue(Main);
71+
this.main.$props.type = this.type;
6372
this.main.$mount();
6473
this.main.$on('change', this.emitChange);
6574
this.main.$on('close', () => {

src/components/date-picker/src/main/index.vue

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
class="laydate-btns-confirm"
4848
@click="handelConfirm"
4949
>
50-
确定
50+
确定{{ type }} {{ selectedType }}
5151
</span>
5252
</div>
5353
</div>
@@ -60,8 +60,8 @@ import { getDaysInMonth } from '../utils';
6060
import DateTable from '../content/date-table';
6161
import MonthTable from '../content/month-table';
6262
import YearTable from '../content/year-table';
63-
6463
import PickerHeader from '../header';
64+
import { oneOf } from '@/utils/validatorProps';
6565
6666
export default {
6767
name: 'Main',
@@ -71,16 +71,30 @@ export default {
7171
YearTable,
7272
PickerHeader
7373
},
74+
props: {
75+
type: {
76+
type: String,
77+
default: 'date',
78+
validator (value) {
79+
return oneOf('type', ['year', 'month', 'date'], value);
80+
}
81+
}
82+
},
7483
data () {
7584
return {
7685
selectedYear: 0,
7786
selectedMonth: 0,
7887
selectedDay: 0,
79-
// date year month
80-
selectedType: 'date'
88+
selectedType: this.type
8189
};
8290
},
91+
watch: {
92+
type: function () {
93+
this.selectedType = this.type;
94+
}
95+
},
8396
created () {
97+
this.selectedType = this.type;
8498
// // 测试当前时间
8599
const date = new Date();
86100
this.handerYearTableChange(date.getFullYear());
@@ -94,7 +108,7 @@ export default {
94108
handerMonthTableChange (month, isHeaderChange) {
95109
this.selectedMonth = month;
96110
if (!isHeaderChange) {
97-
this.selectedType = 'date';
111+
this.selectedType = this.type;
98112
}
99113
100114
let _day = this.checkDay();
@@ -103,16 +117,27 @@ export default {
103117
handerYearTableChange (year, isHeaderChange) {
104118
this.selectedYear = year;
105119
if (!isHeaderChange) {
106-
this.selectedType = 'date';
120+
this.selectedType = this.type;
107121
}
108122
109123
let _day = this.checkDay();
110124
this.handerDateTableChange(_day);
111125
112126
},
113127
emitChange (isClear) {
114-
const val = isClear ? '' : `${this.selectedYear}/${this.selectedMonth + 1}/${this.selectedDay}`;
115-
this.$emit('change', val);
128+
let val;
129+
switch (this.type) {
130+
case 'year':
131+
val = `${this.selectedYear}`;
132+
break;
133+
case 'month':
134+
val = `${this.selectedYear}/${this.selectedMonth + 1}`;
135+
break;
136+
case 'date':
137+
val = `${this.selectedYear}/${this.selectedMonth + 1}/${this.selectedDay}`;
138+
break;
139+
}
140+
this.$emit('change', isClear ? '' : val);
116141
this.$emit('close');
117142
},
118143
checkDay (year = this.selectedYear, month = this.selectedMonth, day = this.selectedDay) {
@@ -166,7 +191,7 @@ export default {
166191
this.emitChange();
167192
},
168193
handelConfirm () {
169-
this.selectedType = 'date';
194+
this.selectedType = this.type;
170195
this.emitChange();
171196
}
172197
}

src/views/DatePicker.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,26 @@
44
placeholder="选择日期">
55
</lay-date-picker>
66

7+
<lay-date-picker
8+
v-model="value2"
9+
type="month"
10+
placeholder="选择月份">
11+
</lay-date-picker>
12+
13+
<lay-date-picker
14+
v-model="value3"
15+
type="year"
16+
placeholder="选择年">
17+
</lay-date-picker>
18+
719
<script>
820
export default {
921
name: "DataPicker",
1022
data(){
1123
return {
12-
value1: ''
24+
value1: '',
25+
value2: '',
26+
value3: ''
1327
}
1428
}
1529
};

0 commit comments

Comments
 (0)