更新记录
0.0.1(2025-01-01)
- init
平台兼容性
Vue2 | Vue3 |
---|---|
× | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 4.42 app-vue app-uvue | × | √ | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 | 鸿蒙元服务 |
---|---|---|---|---|
× | × | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | × | × | × | × |
lime-calendar 日历
- 日历组件用于选择日期或日期区间,支持翻页,平铺,自定义文案,类似vant的日历。兼容uniapp/uniappx
安装
插件市场导入本插件即可,首次导入可能需要重新编译。uniappx app要自定义基座
注意
- 🔔 本插件依赖的lime-svg在 uniapp x app中是原生插件,如果购买(收费为5元)则需要自定义基座,才能使用!uniapp可忽略。
- 🔔 如果不需要lime-svg在lime-icon代码中注释掉即可
// lime-icon/components/l-icon.uvue 第4行 注释掉即可。
<!-- <l-svg class="l-icon" :class="classes" :style="styles" :color="color" :src="iconUrl" v-else :web="web" @error="imageError" @load="imageload" @click="$emit('click')"></l-svg> -->
代码演示
选择切换模式
默认所有月份将以平铺方式展示,不显示切换按钮,当月份过多时可能会影响页面交互性能。可以通过设置 switch-mode
属性,展示年月切换按钮。可选值:none
平铺、month
支持按月切换、year-month
支持按年切换,也支持按月切换
<l-calendar v-model:visible="visible" switch-mode="year-month"></l-calendar>
选择单个日期
下面演示了结合单元格来使用日历组件的用法,日期选择完成后会触发 change
事件,返回的是日期的时间戳。
<l-calendar v-model:visible="visible" @change="handleConfirm"></l-calendar>
const date = ref('');
const visible = ref(false);
const formatDate = (date: number) => {
return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
};
const handleConfirm = (value: number) => {
date.value = formatDate(new Date(value));
};
选择多个日期
设置 type
为 multiple
后可以选择多个日期,此时 confirm
事件返回的 date
为数组结构的时间戳,数组包含若干个选中的日期。
<l-calendar v-model:visible="visible" type="multiple" @confirm="handleConfirm"></l-calendar>
const date = ref('');
const visible = ref(false);
const formatDate = (date: number) => {
return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
};
const handleConfirm = (dates: number[]) => {
console.log(`选择了 ${dates.length} 个日期`)
date.value = dates.map((item):string => formatDate(new Date(item))).join('/')
};
选择日期区间
设置 type
为 range
后可以选择日期区间,此时 confirm
事件返回的 date
为数组结构的时间戳,数组第一项为开始时间,第二项为结束时间。
<l-calendar v-model:visible="visible" type="range" @confirm="handleConfirm"></l-calendar>
const date = ref('');
const visible = ref(false);
const formatDate = (date: number) => {
return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
};
const handleConfirm = (dates: number[]) => {
date.value = `${formatDate(new Date(dates[0]))} - ${formatDate(new Date(dates[1]))}`;
};
自定义颜色
通过 color
属性可以自定义日历的颜色,对选中日期和底部按钮生效。
<l-calendar v-model:visible="visible" color="#e34d59"></l-calendar>
自定义日期范围
通过 min-date
和 max-date
定义日历的范围。
<l-calendar v-model:visible="visible" :minDate="minDate" :maxDate="maxDate"></l-calendar>
const minDate = new Date(2022, 0, 10).getTime()
const maxDate = new Date(2027, 10, 27).getTime()
自定义按钮文字
通过 confirm-btn
设置按钮文字,也可以是object,此时为Button的属性, confirm-disabled-text
设置按钮禁用时的文字。
<l-calendar v-model:visible="visible" type="range" confirm-btn="确认" confirm-disabled-text="请选择结束时间"></l-calendar>
自定义日期文案
通过传入 format
函数来对日历上每一格的内容进行格式化。
<l-calendar v-model:visible="visible" type="range" confirm-btn="确认" :format="customFormat"></l-calendar>
// 非uniappx 不需要指定类型
import { LDate } from '@/uni_modules/lime-calendar';
const customFormat = (day : LDate) : LDate => {
const { date } = day;
const year = date.getFullYear();
const month = date.getMonth() + 1;
const curDate = date.getDate();
day.suffix = '¥60';
if (year == 2025) {
if (month == 2) {
const map = new Map<number, string>([
[1, '初一'],
[2, '初二'],
[3, '初三'],
[14, '情人节'],
[15, '元宵节'],
])
if (map.has(curDate)) {
day.prefix = map.get(curDate);
day.prefixStyle = { color: '#e34d59' }
day.textStyle = { color: '#e34d59' }
day.suffix = '¥100';
}
if (day.type == 'start') {
day.suffix = '入住';
} else if (day.type == 'end') {
day.suffix = '离店';
}
}
}
return day;
};
日期区间最大范围
选择日期区间或多选日期时,可以通过 max-range
属性来指定最多可选天数,选择的范围超过最多可选天数时,会弹出相应的提示文案。
<l-calendar v-model:visible="visible" type="range" confirm-btn="确认" :max-range="3"></l-calendar>
自定义周起始日
通过 first-day-of-week
属性设置一周从哪天开始。
<l-calendar v-model:visible="visible" type="range" confirm-btn="确认" :firstDayOfWeek="1"></l-calendar>
查看示例
- 导入后直接使用这个标签查看演示效果
// 代码位于 uni_modules/lime-calendar/compoents/lime-calendar
<lime-calendar />
插件标签
- 默认 l-calendar 为 component
- 默认 lime-calendar 为 demo
关于vue2的使用方式
- 插件使用了
composition-api
, 如果你希望在vue2中使用请按官方的教程vue-composition-api配置 - 关键代码是: 在main.js中 在vue2部分加上这一段即可.
// vue2
import Vue from 'vue'
import VueCompositionAPI from '@vue/composition-api'
Vue.use(VueCompositionAPI)
API
Props
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
type | 选择类型:single 表示选择单个日期,multiple 表示选择多个日期,range 表示选择日期区间 |
string | single |
switchMode | 切换模式:none 平铺展示所有月份,不展示切换按钮,month 支持按月切换,展示上个月/下个月按钮,year-month 支持按年切换,也支持按月切换,展示上一年/下一年,上个月/下个月按钮 |
string | none |
title | 日历标题 | string | 日期选择 |
color | 主题色,对底部按钮和选中日期生效 | string | `` |
minDate | 可选择的最小日期 | number | switch-mode 为 none 时为当前日期 |
maxDate | 可选择的最大日期 | number | switch-mode 为 none 时为当前日期的六个月后 |
defaultValue | 默认选中的日期,type 为 multiple 或 range 时为数组 |
number | number[] | 今天 |
value | 默认选中的日期,type 为 multiple 或 range 时为数组 |
number | number[] | 今天 |
rowHeight | 日期行高 | string | `` |
format | 日期格式化函数 | (day: LDate) => LDate | - |
showMark | 是否显示月份背景水印 | boolean | true |
readonly | 是否为只读状态,只读状态下不能选择日期 | boolean | false |
confirmBtn | 确认按钮。值类型为字符串,则表示自定义按钮文本,值类型为 Object 则表示透传 Button 组件属性。 | string| Object | 确认 |
confirmDisabledText | 确认按钮处于禁用状态时的文字 | string | 确认 |
firstDayOfWeek | 第一天从星期几开始,默认 0 = 周日 | 0-6 | 0 |
maxRange | 日期区间最大范围,只对多选和区间生效 | number | `` |
rangePrompt | 超过日期最大范围时提示文本 | string | `` |
readonly | 是否为只读,只读禁止选择 | boolean | false |
fullFillDates | 补全格子日期,即上一个最后几天,和下一个月前几天 | boolean | false |
Events
事件名 | 说明 | 回调参数 |
---|---|---|
select | 点击并选中任意日期时触发 | value: number | number[] |
confirm | 日期选择完成后触发,则点击确认按钮后触发 | value: number | number[] |
change | 不显示 confirm-btn 时,完成选择时触发(暂不支持 type = multiple) | - |
close | 关闭时触发 | - |
panel-change | 日历面板切换时触发(switch-mode 不为 none 时生效) |
{ date: Date } |
方法
通过 ref 可以获取到 Calendar 实例并调用实例方法。
方法名 | 说明 | 参数 | 返回值 |
---|---|---|---|
scrollToDate | 滚动到某个日期 | date: Date | - |
主题定制
样式变量
组件提供了下列 CSS 变量,可用于自定义样式)。uvue app无效。
名称 | 默认值 | 描述 |
---|---|---|
--l-calendar-active-color | $primary-color | - |
--l-calendar-selected-color | white | - |
--l-calendar-selected-border-radius | 12rpx | - |
--l-calendar-title-font-size | 18px | - |
--l-calendar-title-color | $text-color-1 | - |
--l-calendar-days-color | $text-color-2 | - |
--l-calendar-item-suffix-color | $text-color-3 | - |
--l-calendar-item-height | 92rpx | - |
--l-calendar-item-disabled-color | $text-color-4 | - |
--l-calendar-switch-mode-icon-color | $text-color-2 | - |
--l-calendar-switch-mode-icon-disabled-color | $text-color-4 | - |
--l-calendar-month-mark-color | $gray-1 | - |
--l-calendar-month-mark-font-size | 160px | - |
--l-calendar-month-height | 712rpx | - |
打赏
如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。