You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
6.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 日历组件
### 简单介绍
- 组件需要依赖 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);
}
}
}
```