更新记录

1.0.9(2024-03-21) 下载此版本

修复收缩状态最后一周不包含下月日期时滑动至下一个月日期显示错误问题

1.0.8(2023-03-17) 下载此版本

支持uni_modules

1.0.7(2023-03-17) 下载此版本

代码优化,周历与月历共用一个轮播组件,代码量直接减少一百多行

查看更多

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
app-vue × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × ×

仿钉钉日历组件 支持月与周两种模式的左右滑动切换 支持在APP、小程序、H5运行

复制代码<template>
    <view class="calendar_container">
        <zsyCalendar
            :sundayIndex="6"
            @change="change"
        />
    </view>
</template>

<script>
    import zsyCalendar from '@/components/zsy-calendar/zsy-calendar'
    export default {
        name: 'Calendar',
        components: {
            zsyCalendar
        },
        methods: {
           // 日历选中日期改变事件回调
            change(e) {
                console.log(e)
            }
        }
    }
</script>
<style>
    .calendar_container {
        min-height: calc(100vh - var(--window-top));
        background-color: #f5f5f5;
        padding: 30rpx;
        box-sizing: border-box;
    }
</style>
// Vue

通用日历,可标记,支持自定义主题颜色,列高度的自定义
  1. 日历展开模式显示的是月历,上月份跟下月份的日期呈灰色显示,点击对应的日期可滑动到相应的月份并且高亮显示;
  2. 日历收缩时显示的是周历,可以进行周之间滑动的切换,且点击上月份的日期时自动切换到上月,具体请看效果演示图或自行尝试;
  3. 因本人工作项目需求暂没有做日期选择器,但我在里面增加了一个goToDate方法可以切换到某一天,并且加了一个回到今天的功能,如果你们有这个需求可以自行二次开发;
  4. 该日历组件共使用了两个swiper组件分别对应月历跟周历,使用三个swiper-item并且显示相邻的数据,即可以达到无限循环的效果又可以节省性能,并且当组件滑动完毕后才进行数据的预生成,避免滑动过程中计算数据造成页面不流畅卡顿;
  5. 项目源码注释清晰且不难理解,可自行根据实际需求进行二次开发;
  6. 本插件本人还未进行深度测试,可能还有些隐藏BUG暂未发现,若有小伙伴发现可进行评论留言;
  7. 本人刚入行时间也不长,可能一些思路大佬看了会觉得比较简单低级,如果大佬有更好的思路,欢迎在评论区指出留言,我后续也会出一篇关于源码解析的文章;
    组件属性说明:
    属性名 类型 默认值 说明
    duration Number 300 动画时长
    cellHeight Number 75 日历每一列的高度,单位为rpx
    dateActiveColor String #FE6601 日期选中颜色
    sundayIndex Number 6 星期天所在位置,范围为0~6
    mode String 'open' 日历模式 'open'为月历 'close'为周历
    changeSetDefault Boolean true 月历切换是否默认选中1号
    defaultSelectedDate String Null null 选中日期,默认为当天

    方法说明:
    属性名 说明
    goToDate 切换到某一天日期 格式 YYYY-MM 或者 YYYY-MM-DD

    事件说明:
    属性名 说明
    change 日历选中日期改变事件回调

    插件实际运行效果预览:

    avatar

    项目实际运行效果预览:

    avatar

    线上预览地址:

    点击访问

隐私、权限声明

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

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

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

许可协议

MIT协议

2025-02-12

我直接拿来用了,默认支持vue3的选项式;和你说一下,作者大大

255***@qq.com

2024-12-12

滑动问题:滑动提示如下 hook.js:608 Maximum recursive updates exceeded in component . This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.

133***@qq.com

2024-10-23

怎么传数据呀,我要绘制点

148***@qq.com

2024-07-12

怎么打点呀

zhengsenyi 2024-07-16

可以看看dateBox组件,在里面创建相应的插槽,再根据具体传入的数据进行点的绘制,根据不同数据显示不同颜色的圆点即可。

286***@qq.com

2024-05-05

怎么打点啊

zhengsenyi 2024-07-16

可以看看dateBox组件,在里面创建相应的插槽,再根据具体传入的数据进行点的绘制,根据不同数据显示不同颜色的圆点即可。

libo

2024-03-21

作者你好,插件很好用但是发现了一个bug。 切换到周模式滑动,比如selectedDate是2024-03-25且正好为周一,2024-03-31就是周日,那么3月份最后七天独占一周,想要往下周滑动的时候selectedDate应为2024-04-01,而结果却是2024-04-08。

libo 2024-03-21

我调整以后加了判断 let lastWeek = curDates.filter(i => i.month == curYM.split("-")[1]).slice(-7) if (curDates[curDates.length - 1].dateFormat === this.selectedDate || lastWeek[0].dateFormat === this.selectedDate) { // 选中日期刚好为日历最后一天,或者是最后一周的第一天

libo 2024-03-21

着急完成需求临时增加的代码,质量以及严谨性没有作者的好,作者可以早点优化一下这个问题

zhengsenyi 2024-03-21

感谢你的肯定与支持,确实有这个问题,之前居然都没发现,问题已经修复了,感谢你的使用

split

2024-03-01

这个统计我怎么显示多天的打卡呢?没这个方法啊

924***@qq.com

2023-12-28

大佬大佬,很好用插件

163***@qq.com

2023-12-08

大佬,我加dotsList 打点的时候,显示一周的模式下,不显示点,展开的模式下就有,然后再切换显示一周,就有了,就是最开始默认进去的时候,显示不到那个点

zhengsenyi 2023-12-08

你看看默认展开跟默认收缩两份数据有没有什么不同,因为我之前做的时候默认收缩展开只考虑了日期数据,没有考虑其他数据,这个得靠你自己实现了

苏七丶

2024-01-08

大佬 后台会返回当前一周的数据 红色异常 绿色正常 ,二次开发的话大概怎么搞?

2022-11-12

切换周/月 有点难搞

2022-04-01

请问如何将接口返回的数据传入组件