Skip to content

Commit a67ad46

Browse files
committed
feat: 新增 自定义日期格式
1 parent 4c1a75e commit a67ad46

File tree

6 files changed

+50
-19
lines changed

6 files changed

+50
-19
lines changed

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
},
1313
"dependencies": {
1414
"async-validator": "^1.11.0",
15+
"dayjs": "^1.8.13",
1516
"vue": "^2.6.10"
1617
},
1718
"devDependencies": {

src/components/date-picker/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
- [x] 日期选择器
55
- [x] 年选择器
66
- [x] 年月选择器
7-
- [ ] 自定义日期格式
7+
- [x] 自定义日期格式
88
- [ ] 公历节日
99
- [ ] 自定义重要日子
1010
- [ ] 限制可选日期

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ export default {
3737
return oneOf('type', ['year', 'month', 'date'], value);
3838
}
3939
},
40+
format: {
41+
type: String,
42+
default: ''
43+
},
4044
placeholder: {
4145
type: String,
4246
default: ''
@@ -69,6 +73,7 @@ export default {
6973
this.picker.elem = this.$refs.input;
7074
this.main = new Vue(Main);
7175
this.main.$props.type = this.type;
76+
this.main.$props.format = this.format;
7277
this.main.$mount();
7378
this.main.$on('change', this.emitChange);
7479
this.main.$on('close', () => {

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

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,16 @@
4747
class="laydate-btns-confirm"
4848
@click="handelConfirm"
4949
>
50-
确定{{ type }} {{ selectedType }}
50+
确定
5151
</span>
5252
</div>
5353
</div>
5454
</div>
5555
</template>
5656

5757
<script>
58+
59+
import dayjs from 'dayjs';
5860
import { getDaysInMonth } from '../utils';
5961
6062
import DateTable from '../content/date-table';
@@ -78,6 +80,10 @@ export default {
7880
validator (value) {
7981
return oneOf('type', ['year', 'month', 'date'], value);
8082
}
83+
},
84+
format: {
85+
type: String,
86+
default: ''
8187
}
8288
},
8389
data () {
@@ -124,22 +130,6 @@ export default {
124130
this.handerDateTableChange(_day);
125131
126132
},
127-
emitChange (isClear) {
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);
141-
this.$emit('close');
142-
},
143133
checkDay (year = this.selectedYear, month = this.selectedMonth, day = this.selectedDay) {
144134
const daysInMonth = getDaysInMonth(year, month);
145135
if (day > daysInMonth) {
@@ -193,6 +183,28 @@ export default {
193183
handelConfirm () {
194184
this.selectedType = this.type;
195185
this.emitChange();
186+
},
187+
emitChange (isClear) {
188+
let date = dayjs(`${this.selectedYear}-${this.selectedMonth + 1}-${this.selectedDay}`);
189+
let val;
190+
if (!this.format) {
191+
switch (this.type) {
192+
case 'year':
193+
val = date.format('YYYY');
194+
break;
195+
case 'month':
196+
val = date.format('YYYY-MM');
197+
break;
198+
case 'date':
199+
val = date.format('YYYY-MM-DD');
200+
break;
201+
}
202+
} else {
203+
val = date.format(this.format);
204+
}
205+
206+
this.$emit('change', isClear ? '' : val);
207+
this.$emit('close');
196208
}
197209
}
198210

src/views/DatePicker.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,22 @@
1616
placeholder="选择年">
1717
</lay-date-picker>
1818

19+
<lay-date-picker
20+
v-model="value4"
21+
format="YYYY年MM月DD日"
22+
placeholder="选择格式化">
23+
</lay-date-picker>
24+
25+
1926
<script>
2027
export default {
2128
name: "DataPicker",
2229
data(){
2330
return {
2431
value1: '',
2532
value2: '',
26-
value3: ''
33+
value3: '',
34+
value4: ''
2735
}
2836
}
2937
};

0 commit comments

Comments
 (0)