更新记录

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));
};

选择多个日期

设置 typemultiple 后可以选择多个日期,此时 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('/')
};

选择日期区间

设置 typerange 后可以选择日期区间,此时 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-datemax-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-modenone 时为当前日期
maxDate 可选择的最大日期 number switch-modenone 时为当前日期的六个月后
defaultValue 默认选中的日期,typemultiplerange 时为数组 number | number[] 今天
value 默认选中的日期,typemultiplerange 时为数组 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 -

打赏

如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问