vue工作日历的组件
·
<!--工作日历的组件-->
<template>
<div class="work-calendar">
<el-row type="flex" justify="end">
<el-select v-model="currentYear" value="" size="small" style="width: 120px" @change="dataChange">
<el-option v-for="item in yearList" :key="item" :value="item" :label="item"></el-option>
</el-select>
<el-select v-model="currentMonth" value="" size="small" style="width: 120px;margin-left: 10px" @change="dataChange">
<el-option v-for="item in 12" :key="item" :value="item" :label="item"></el-option>
</el-select>
</el-row>
<el-calendar v-model="currentDate">
<!--date是当前单元格的日期 data是对象 对象里有要显示的day -->
<template v-slot:dateCell="{ date,data }" class="content">
<div class="date-content">
<span class="text">{{ data.day | getDay }}</span>
<span v-if="isWeek(date)" class="rest">休</span>
</div>
</template>
</el-calendar>
</div>
</template>
<script>
export default {
filters: {
getDay(value) {
// value 2024-04-27
const day = value.split('-')[2]
return day.startsWith('0') ? day.substr(1) : day // 判断是否是0开头,如果是0开头则截掉
}
},
props: {
startDate: {
type: Date,
default: () => new Date() // 如果没有传递startDate 就取当前时间
}
},
data() {
return {
yearList: [], // 要遍历年的数组
currentYear: null, // 当前年份
currentMonth: null, // 当前的月份
currentDate: null // 当前时间
}
},
created() {
// 获取当前的年份
this.currentYear = this.startDate.getFullYear()
this.currentMonth = this.startDate.getMonth() + 1
// 快速生成数组的方法
// 当前日历的前5年和后5年 则-5
this.yearList = Array.from(Array(120), (value, index) => this.currentYear + index - 70)
// 钩子函数执行完毕后 主动调用
this.dataChange()
},
methods: {
dataChange() {
// 生成新的日期
this.currentDate = new Date(`${this.currentYear}-${this.currentMonth}-1`) // 以1号开始
},
// 判断当前时间是否是周末
isWeek(date) {
// date是当前时间 周日是0,周六是6 new Date("2024-04-27").getDay 返回的是6
return date.getDay() === 6 || date.getDay() === 0
}
}
}
</script>
<style scoped>
/deep/ .el-calendar-day {
height: auto;
}
/deep/ .el-calendar-table__row td,/deep/ .el-calendar-table tr td:first-child, /deep/ .el-calendar-table__row td.prev{
border:none;
}
.date-content {
height: 40px;
text-align: center;
line-height: 40px;
font-size: 14px;
}
.date-content .rest {
color: #fff;
border-radius: 50%;
background: rgb(250, 124, 77);
width: 20px;
height: 20px;
line-height: 20px;
display: inline-block;
font-size: 12px;
margin-left: 10px;
}
.date-content .text{
width: 20px;
height: 20px;
line-height: 20px;
display: inline-block;
}
/deep/ .el-calendar-table td.is-selected .text{
background: #409eff;
color: #fff;
border-radius: 50%;
}
/deep/ .el-calendar__header {
display: none
}
</style>
更多推荐
所有评论(0)