|
|
## 日历组件
|
|
|
### 简单介绍
|
|
|
- 组件需要依赖 sass 插件 ,请自行安装;
|
|
|
- 本组件依赖 uni-app内置组件`swiper`组件,请与`swiper`组件配合使用;
|
|
|
- nvue页面中的`swiper`组件部分功能不支持,详情见[uni-app内置组件:swiper](https://uniapp.dcloud.net.cn/component/swiper.html)
|
|
|
- 通过uni_modules引用组件,在页面template中即可直接使用,无需在页面中import和注册components;
|
|
|
- 可设置显示收缩按钮,收缩后只显示一个星期的日期,展开后显示一个月的日期;可以通过触摸屏幕左右滑动切换月份或切换周;
|
|
|
- 可根据需要选择是否显示农历日期,且会显示节日,如春节、端午、国庆、腊八节等;
|
|
|
- 本组件农历转换使用的js是 [@1900-2100区间内的公历、农历互转](https://github.com/jjonline/calendar.js)
|
|
|
- 欢迎大家下载使用,项目源码示例:[https://gitee.com/lunc9932/calendar](https://gitee.com/lunc9932/calendar)
|
|
|
- 若有插件导入失败,重启编辑器;
|
|
|
|
|
|
### API
|
|
|
#### 属性说明
|
|
|
| 属性名 | 类型 | 默认值 | 说明 |
|
|
|
|-----------------|----------|----------|-----------------------|
|
|
|
| showLunar | Boolean | false | 是否显示农历 |
|
|
|
| firstDayOfWeek | String | monday | 周几为每周的第一天,可选值:monday / sunday<br>monday:每周从周一开始;sunday:每周从周日开始 |
|
|
|
| showMonthBg | Boolean | true | 是否显示月份背景 |
|
|
|
| weekend | Boolean | true | 周末标红(周六周日日期用红色字体) |
|
|
|
| shouChangeBtn | Boolean | true | 是否显示上月下月箭头按钮 |
|
|
|
| weekType | Boolean | 周 | 星期的前缀,如星期一星期二,或周一周二,也可以只显示一、二等 |
|
|
|
| showShrink | Boolean | false | 是否显示收缩按钮 |
|
|
|
| shrinkState | String | month | 默认显示周数据还是月数据(收起或展开),可选值:week / month<br>week:默认打开显示周数据(收起状态);month:默认打开显示月数据(展开状态) |
|
|
|
| signList | Array | [] | 标记数组,若同日期有多个标记,则显示最后一个<br>期待格式[{date: '2021-09-10', title: '生日', info: '八月初四张三生日'}] |
|
|
|
|
|
|
注意:
|
|
|
1. 标记日期会在日期下方显示“title”内容,建议“title”内容不超过4个汉字;
|
|
|
2. 农历日期、节日、标记日期,只会显示其一,优先级 标记 > 节日 > 农历日期;
|
|
|
3. `showShrink`表示是否显示收缩按钮,并不是表示收起或展开状态;
|
|
|
|
|
|
#### 方法说明
|
|
|
| 方法名 | 说明 | 参数 |
|
|
|
|-----------------|------------|--------|
|
|
|
| addSignList | 添加标记 | (Array:list),传入需要添加的标记数组,日期相同不会覆盖,只显示第一个出现的标记 |
|
|
|
| deleteSignList | 删除标记 | (Array:list),传入需要删除的标记数组,根据 date 和 title 同时判断进行删除 |
|
|
|
|
|
|
方法使用:在组件上添加 `ref` 属性,在调用对应的方法:`this.$refs.calendar.addSignList([])` 即可,详情见下方的基本用法;<br>
|
|
|
**原 setSignList() 方法已弃用;**
|
|
|
|
|
|
|
|
|
#### 事件说明
|
|
|
| 事件名 | 说明 | 返回值 |
|
|
|
|---------------|--------------------|--------|
|
|
|
| @dayChange | 选中日期改变时触发,包括点击日期、切换月份和切换周都会改变选中日期 | dayInfo,详情见下方说明 |
|
|
|
| @monthChange | 切换月份时触发,包括点击切换月份按钮、选中日期时切换的月份等都会改变触发 | monthInfo,详情见下方说明 |
|
|
|
| @shrinkClick | 收缩和展开时触发事件 | 返回当前状态:week / month<br>week:当前显示的一个星期(收起);month:当前显示的一个月(展开) |
|
|
|
|
|
|
#### @dayChange 返回值 dayInfo 说明
|
|
|
| 值 | 类型 | 说明 |
|
|
|
| ------- | ------ | ----- |
|
|
|
| date | String | 日期,格式“yyyy-MM-dd” |
|
|
|
| year | Number | 年 |
|
|
|
| month | Number | 月 |
|
|
|
| day | Number | 日 |
|
|
|
| week | Number | 星期几 |
|
|
|
| daySign | Array | 当前日期的标记,若没有则为空数组 |
|
|
|
| lunar | Object | 农历信息,包含农历日期、节日、生肖等;<br>只有属性 showLunar 设置为 true 时才会返回此值; |
|
|
|
|
|
|
#### @monthChange 返回值 monthInfo 说明
|
|
|
| 值 | 类型 | 说明 |
|
|
|
| ----- | ------ | ----- |
|
|
|
| year | Number | 年 |
|
|
|
| month | Number | 月 |
|
|
|
| type | String | 返回类型:today / pre / next<br>today:当前月份,pre:上个月,next:下个月 |
|
|
|
|
|
|
|
|
|
### 基本用法
|
|
|
在`template`中使用组件
|
|
|
|
|
|
```
|
|
|
<view class="content">
|
|
|
<view class="content-item">
|
|
|
<lunc-calendar ref="calendar" :showLunar="true" :showMonthBg="true" :showShrink="true" :signList="signList"
|
|
|
@dayChange="dayChange" weekType="星期" @monthChange="monthChange" @shrinkClick="shrinkClick">
|
|
|
<view class="operation">
|
|
|
<view class="button" @click="addSign">新增标记</view>
|
|
|
<view class="button" @click="updateSign">修改标记</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
<view class="content-item">
|
|
|
<lunc-calendar :showShrink="true" shrinkState="week"></lunc-calendar>
|
|
|
</view>
|
|
|
</view>
|
|
|
```
|
|
|
在`script`中使用
|
|
|
|
|
|
```
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
signList: [{date: "2023-06-25",title: "生日",info: "张三生日"},
|
|
|
{date: "2023-06-19",title: "朋友聚会"},
|
|
|
{date: "2023-07-22",title: "纪念日"},
|
|
|
{date: "2023-04-11",title: "聚会"},
|
|
|
{date: "2023-07-23",title: "郊游"},
|
|
|
{date: "2023-08-19",title: "游玩"}],
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
dayChange(dayInfo) { // 点击日期
|
|
|
console.log("点击日期", JSON.parse(JSON.stringify(dayInfo)));
|
|
|
},
|
|
|
monthChange(monthInfo) { // 切换月份
|
|
|
console.log("切换月份", JSON.parse(JSON.stringify(monthInfo)));
|
|
|
},
|
|
|
shrinkClick(type) {
|
|
|
console.log("当前状态", type);
|
|
|
},
|
|
|
|
|
|
addSign() { // 添加标记
|
|
|
let addList = [{date: "2023-06-28",title: "休息"},
|
|
|
{date: "2023-06-01",title: "上班"}];
|
|
|
// 调用 addSignList 方法,传入需要添加的标记数组
|
|
|
this.$refs.calendar.addSignList(addList);
|
|
|
},
|
|
|
deleteSign() { // 删除标记
|
|
|
let deleteList = [{date: "2023-06-01",title: "上班"}];
|
|
|
// 调用 deleteSignList 方法,传入需要删除的标记数组
|
|
|
this.$refs.calendar.deleteSignList(deleteList);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
|