vux日期时间组件:Calendar/DateTimePicker
【免费下载链接】vux Mobile UI Components based on Vue & WeUI 项目地址: https://gitcode.com/gh_mirrors/vu/vux
组件概述
VUX(Mobile UI Components based on Vue & WeUI)提供了两个强大的日期时间选择组件:Calendar(日历)和DateTimePicker(日期时间选择器)。这两个组件能够满足移动端应用中各种日期时间选择需求,从简单的日期选择到复杂的时间范围选择。
组件位置
- Calendar组件源码:src/components/calendar/index.vue
- DateTime组件源码:src/components/datetime/index.vue
- Calendar组件示例:src/demos/Calendar.vue
- DateTime组件示例:src/demos/Datetime.vue
Calendar组件详解
基本用法
Calendar组件提供了直观的日历界面,支持单选、多选等多种选择模式。基本用法如下:
<group>
<calendar
:readonly="readonly"
v-model="demo1"
:title="$t('Basic Usage')"
disable-past
placeholder="placeholder"
@on-show="log('show')"
@on-hide="log('hide')">
</calendar>
</group>
主要功能
Calendar组件提供了丰富的功能选项:
- 日期限制:可通过
disable-past和disable-future属性限制选择过去或未来的日期 - 多选功能:支持选择多个日期
- 自定义格式化:可自定义选中日期的显示格式
- 日期标记:支持标记特定日期
- 周未禁用:可通过
disable-weekend禁用周末选择
代码示例
以下是一个多选日期并自定义格式化的示例:
<group>
<calendar
disable-weekend
:display-format="displayFormat"
:placeholder="$t('Please select')"
@on-change="onChange"
v-model="demo6"
:title="$t('Format multiple dates')"
:popup-header-title="$t('please select')">
</calendar>
<cell-box align-items="flex-start">
<span class="selected-days">value:</span>
<div>
<badge v-for="day in demo6" :text="day" :key="day" style="margin-right:10px;"></badge>
</div>
</cell-box>
</group>
<script>
export default {
data () {
return {
demo6: [],
displayFormat (value, type) {
if (type === 'string') {
return value
} else {
return value.length ? (value.length + ' days') : ''
}
}
}
},
methods: {
onChange (val) {
console.log('on change', val)
}
}
}
</script>
DateTimePicker组件详解
基本用法
DateTimePicker组件提供了日期和时间的选择功能,支持多种格式的日期时间选择:
<group :title="$t('Default format: YYYY-MM-DD')">
<datetime
v-model="value1"
@on-change="change"
:title="$t('Birthday')"
@on-cancel="log('cancel')"
@on-confirm="onConfirm"
@on-hide="log('hide', $event)">
</datetime>
</group>
主要功能
DateTimePicker组件提供了以下主要功能:
- 自定义格式:支持多种日期时间格式,如
YYYY-MM-DD、YYYY-MM-DD HH:mm等 - 时间范围限制:可设置最小/最大年份、小时等
- 自定义选项:可自定义年、月、日、时、分的显示格式
- 步长设置:支持自定义分钟步长(如每15分钟)
- 插件调用:支持以插件形式调用
代码示例
以下是一个自定义小时和分钟列表的示例:
<group :title="$t('Custom minute list: every 15 minutes')">
<datetime
v-model="minuteListValue"
format="YYYY-MM-DD HH:mm"
:minute-list="['00', '15', '30', '45']"
@on-change="change"
:title="$t('Birthday')">
</datetime>
</group>
<group :title="$t('Custom hour list')">
<datetime
v-model="hourListValue"
format="YYYY-MM-DD HH:mm"
:hour-list="['09', '10', '11', '12', '13', '14', '15', '16']"
:minute-list="['00', '15', '30', '45']"
@on-change="change"
:title="$t('Birthday')">
</datetime>
</group>
DateTimePicker高级用法
日期时间范围限制
DateTimePicker支持通过多种方式限制可选的日期时间范围:
<group :title="$t('Define range of hours')">
<datetime
v-model="limitHourValue"
format="YYYY-MM-DD HH:mm"
:min-hour=9
:max-hour=18
@on-change="change"
:title="$t('Define range of hours')"
:inline-desc="$t('Working hours: 09-18')">
</datetime>
</group>
<group :title="$t('Set start-date and end-date') + ' 2015-11-11 ~ 2017-10-11'">
<datetime
v-model="limitHourValue"
:start-date="startDate"
:end-date="endDate"
format="YYYY-MM-DD HH:mm"
@on-change="change"
:title="$t('Start time')">
</datetime>
</group>
<script>
export default {
data () {
return {
startDate: '2015-11-11',
endDate: '2017-10-11'
}
}
}
</script>
自定义模板
可以自定义年、月、日、时、分的显示格式,使其更符合特定的语言或格式需求:
<group :title="$t('Specified template text in Chinese')">
<datetime
v-model="value5"
:placeholder="$t('Please select')"
:min-year=2000
:max-year=2016
format="YYYY-MM-DD HH:mm"
@on-change="change"
:title="$t('Chinese')"
year-row="{value}年"
month-row="{value}月"
day-row="{value}日"
hour-row="{value}点"
minute-row="{value}分"
confirm-text="完成"
cancel-text="取消">
</datetime>
</group>
插件形式调用
除了作为组件使用外,DateTimePicker还支持以插件形式调用:
<div style="padding:15px;">
<x-button type="primary" plain @click.native="showPlugin">{{ $t('Used as a plugin') }}</x-button>
</div>
<script>
export default {
methods: {
showPlugin () {
this.$vux.datetime.show({
cancelText: '取消',
confirmText: '确定',
format: 'YYYY-MM-DD HH',
value: '2017-05-20 18',
onConfirm (val) {
console.log('plugin confirm', val)
},
onShow () {
console.log('plugin show')
},
onHide () {
console.log('plugin hide')
}
})
}
}
}
</script>
组件对比与选择建议
| 功能 | Calendar组件 | DateTimePicker组件 |
|---|---|---|
| 界面形式 | 日历视图 | 滚动选择器 |
| 日期选择 | 支持 | 支持 |
| 时间选择 | 不支持 | 支持 |
| 多选功能 | 支持 | 不支持 |
| 日期范围 | 支持 | 不支持 |
| 自定义格式 | 有限支持 | 丰富支持 |
| 占用空间 | 较大 | 较小 |
选择建议
- 日程安排:选择Calendar组件,其日历视图更直观
- 生日选择:选择DateTimePicker组件,可精确到时分
- 酒店预订:选择Calendar组件,支持日期范围选择
- 会议时间:选择DateTimePicker组件,可精确到分钟
- 多日期选择:必须使用Calendar组件
常见问题与解决方案
问题1:如何在Calendar组件中禁用特定日期?
解决方案:使用disable-date-function属性自定义禁用逻辑:
<calendar
:disable-date-function="disableDate"
v-model="selectedDate"
:title="选择日期">
</calendar>
<script>
export default {
methods: {
disableDate(date) {
// 禁用所有偶数日期
return date.getDate() % 2 === 0;
}
}
}
</script>
问题2:如何自定义DateTimePicker的日期顺序?
解决方案:使用order-map属性自定义年月日的显示顺序:
<datetime
v-model="value1"
@on-change="change"
title="customize column order"
:order-map="{
year: 3,
month: 2,
day: 1
}">
</datetime>
问题3:如何在选择日期后立即触发事件?
解决方案:使用@on-change事件监听日期变化:
<calendar
@on-change="handleDateChange"
v-model="selectedDate"
:title="选择日期">
</calendar>
<script>
export default {
methods: {
handleDateChange(date) {
console.log("选择的日期是:", date);
// 在这里处理日期变化后的逻辑
}
}
}
</script>
总结
VUX的Calendar和DateTimePicker组件为移动端日期时间选择提供了完整的解决方案。通过本文的介绍,您应该已经掌握了这两个组件的基本用法、高级特性和最佳实践。
无论是需要直观的日历视图,还是精确的时间选择,VUX都能满足您的需求。合理选择组件并充分利用其特性,将为您的移动应用带来更好的用户体验。
建议您查看官方示例代码,进一步探索组件的更多功能和用法:
- Calendar组件示例:src/demos/Calendar.vue
- DateTime组件示例:src/demos/Datetime.vue
【免费下载链接】vux Mobile UI Components based on Vue & WeUI 项目地址: https://gitcode.com/gh_mirrors/vu/vux
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




