elementui?el-calendar日歷組件使用示例
需求
需要在日歷基礎(chǔ)上展示每天排班記錄及排班詳情、當(dāng)天是否有異常情況。完成效果:

elementui自帶切換月份按鈕與設(shè)計(jì)圖不符,所以我隱藏了插件自帶的按鈕,自己加了個(gè)左右切換圖標(biāo),代碼如下:
// 隱藏組件自帶切換月份按鈕
::v-deep.el-calendar .el-calendar__button-group{
display: none;
}
在html中新增
<!-- 日歷兩側(cè)年月切換 -->
<img class="month-cut-img month-cut-left" @click="dateCut(1)" src="../../../../assets/img/scheduling/calendar-month-left.png" />
<img class="month-cut-img month-cut-right" @click="dateCut(2)" src="../../../../assets/img/scheduling/calendar-month-right.png" />
<img class="month-cut-img year-cut-left" @click="dateCut(3)" src="../../../../assets/img/scheduling/calendar-year-left.png" />
<img class="month-cut-img year-cut-right" @click="dateCut(4)" src="../../../../assets/img/scheduling/calendar-year-right.png" />具體代碼實(shí)現(xiàn)
html
<!-- 日歷兩側(cè)年月切換 -->
<img class="month-cut-img month-cut-left" @click="dateCut(1)" src="../../../../assets/img/scheduling/calendar-month-left.png" />
<img class="month-cut-img month-cut-right" @click="dateCut(2)" src="../../../../assets/img/scheduling/calendar-month-right.png" />
<img class="month-cut-img year-cut-left" @click="dateCut(3)" src="../../../../assets/img/scheduling/calendar-year-left.png" />
<img class="month-cut-img year-cut-right" @click="dateCut(4)" src="../../../../assets/img/scheduling/calendar-year-right.png" />
<!-- 日歷 -->
<el-calendar v-model="calendarVal">
<template slot="dateCell" slot-scope="{date, data}">
<div @click="viewDetail(data.day)">
<div class="date">{{ data.day.slice(8) }}</div>
<div v-for="item in schedulingData.schedulingHandle">
<div v-if="item.date == data.day">
<!-- 是否異常 -->
<div class="abnormal-state" v-if="item.hasException === true"></div>
<!-- 排版情況 === memberAmount:根據(jù)是否有值班成員判斷是否排班;isPast:日期是否已過(guò);isToday:是否是今天 -->
<div class="scheduling-state scheduling-state-notset" v-if="item.memberAmount === 0">
<img src="../../../../assets/img/scheduling/scheduling-state1.png">
<span class="f14">未排</span>
</div>
<div class="scheduling-state scheduling-state-ordering1" v-if="item.memberAmount > 0 && item.isPast === true && item.isToday === false">
<img src="../../../../assets/img/scheduling/scheduling-state2.png">
<span class="f14">已排</span>
</div>
<div class="scheduling-state scheduling-state-ordering2" v-if="item.memberAmount > 0 && item.isToday === true">
<img src="../../../../assets/img/scheduling/scheduling-state3.png">
<span class="f14">已排</span>
</div>
<div class="scheduling-state scheduling-state-ordering3" v-if="item.memberAmount > 0 && item.isPast === false && item.isToday === false">
<img src="../../../../assets/img/scheduling/scheduling-state4.png">
<span class="f14">已排</span>
</div>
<!-- 當(dāng)日排班情況彈窗 -->
<div class="today-scheduling-detail" v-if="item.showTodayScheduling">
<div class="today-scheduling-title">當(dāng)日排班</div>
<div class="today-scheduling-center">
<div class="today-scheduling-item" v-for="item1 in item.todayDetail">
<div class="name1">{{ item1.shiftName }}</div>
<div class="name2">{{ item1.crewName }}</div>
</div>
</div>
<div class="today-scheduling-footer">
<div class="edit"><span class="el-icon-edit"></span>編輯</div>
<div class="view"><span class="el-icon-view"></span>查看</div>
</div>
</div>
</div>
</div>
</div>
</template>
</el-calendar>
<div class="back-to-today" @click="dateCut(5)">回到今天</div>js
dateCut(type) {
// type:1 月份左側(cè)按鈕,2 月份右側(cè)按鈕,3 年份左側(cè)按鈕,4 年份右側(cè)按鈕,5 回到今天
if (type === 1) {
this.calendarVal = new Date(this.calendarVal).getMonth() > 0 ?
new Date(this.calendarVal).getFullYear() + '-' + new Date(this.calendarVal).getMonth() + '-01' :
new Date(this.calendarVal).getFullYear() - 1 + '-12' + '-01'
} else if (type === 2) {
this.calendarVal = new Date(this.calendarVal).getMonth() < 11 ?
new Date(this.calendarVal).getFullYear() + '-' + (Number(new Date(this.calendarVal).getMonth()) + 2) + '-01' :
new Date(this.calendarVal).getFullYear() + 1 + '-01' + '-01'
} else if (type === 3) {
this.calendarVal = new Date(this.calendarVal).getFullYear() - 1 + '-' + (Number(new Date(this.calendarVal).getMonth()) + 1) + '-01'
} else if (type === 4) {
this.calendarVal = new Date(this.calendarVal).getFullYear() + 1 + '-' + (Number(new Date(this.calendarVal).getMonth()) + 1) + '-01'
} else if (type === 5) {
this.calendarVal = this.getDate(new Date()).fullDate
}
this.getData() // 調(diào)接口數(shù)據(jù)
},css代碼
// 日歷組件樣式修改
.is-selected {
color: #1989FA;
}
::v-deep.el-calendar{
height: calc(100% - 35px);
}
::v-deep.el-calendar .el-calendar__body{
padding-bottom: 16px;
height: calc(100% - 80px);
}
::v-deep.el-calendar .el-calendar-table{
height: 100%;
}
.el-backtop, ::v-deep.el-calendar .el-calendar-table td.is-today .date{
//background: #5E97F9;
//box-shadow: 0px 4px 7px 0px rgba(113,208,255,0.5);
//color: #fff;
background: #DCE9FF;
color: rgba(0,0,0,0.45);
}
.el-backtop, ::v-deep.el-calendar .el-calendar-table .date:hover{
background: #DCE9FF;
color: rgba(0,0,0,0.45);
}
::v-deep.el-calendar .el-calendar-table .el-calendar-day:hover{
background: none;
}
::v-deep.el-calendar .el-calendar-table td.is-selected{
background: none;
}
::v-deep.el-calendar .el-calendar-table td.is-selected .date{
background: #5E97F9;
box-shadow: 0px 4px 7px 0px rgba(113,208,255,0.5);
color: #fff;
}
::v-deep.el-calendar .el-calendar__button-group{
display: none;
}
::v-deep.el-calendar .el-calendar__title{
margin: 0 auto;
}
::v-deep.el-calendar .el-calendar-table .el-calendar-day{
position: relative;
}日歷組件就完成了,有任何問(wèn)題歡迎大家留言!
以上就是elementui el-calendar日歷組件使用示例的詳細(xì)內(nèi)容,更多關(guān)于elementui el-calendar日歷組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue.js組件props數(shù)據(jù)驗(yàn)證實(shí)現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了Vue.js組件props數(shù)據(jù)驗(yàn)證的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
vue-element-admin中node-sass換成dart-sass,安裝依賴報(bào)code?128多種問(wèn)題的解決
這篇文章主要介紹了vue-element-admin中node-sass換成dart-sass,安裝依賴報(bào)code?128多種問(wèn)題的解決方法,本文給大家分享問(wèn)題原因分析及解決方法,需要的朋友可以參考下2023-02-02
vue?element-ui動(dòng)態(tài)橫向統(tǒng)計(jì)表格的實(shí)現(xiàn)
這篇文章主要介紹了vue?element-ui動(dòng)態(tài)橫向統(tǒng)計(jì)表格的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Vue中使用video.js實(shí)現(xiàn)截圖和視頻錄制與下載
這篇文章主要為大家詳細(xì)介紹了Vue中如何使用video.js實(shí)現(xiàn)截圖和視頻錄制與下載,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
解決vue3項(xiàng)目中el-menu不兼容SSR問(wèn)題
這篇文章主要介紹了解決vue3項(xiàng)目中el-menu不兼容SSR問(wèn)題,需要的朋友可以參考下2023-12-12
詳解Vue中的render:?h?=>?h(App)示例代碼
這篇文章主要介紹了Vue中的render:?h?=>?h(App),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09

