Vue.js實現(xiàn)日歷功能
本文實例為大家分享了Vue.js實現(xiàn)日歷功能的具體代碼,供大家參考,具體內(nèi)容如下

功能需求
使用 Vue.js 實現(xiàn)指定年月的日歷表,配合后臺接口數(shù)據(jù),添加對應日期的空氣質(zhì)量描述等信息。后臺傳遞當月空氣質(zhì)量指數(shù)的數(shù)據(jù),前端生成日歷表后將空氣質(zhì)量指數(shù)添加到對應日期上。
空氣質(zhì)量數(shù)據(jù)示例:
data.json
{
"code": 200,
"msg": "",
"data": [{
"time": "2020-08-01",
"kqzl": "優(yōu)"
},
{
"time": "2020-08-02",
"kqzl": "良"
},
{
"time": "2020-08-03",
"kqzl": "良"
}
]
}
實現(xiàn)方法
<template>
<div id="app">
<h1 style="text-align:center;">
2020-08</h1>
<div class="calendar-container">
<div class="calendar-week">
<div class="cw-inner">
<div class="cw-item"
:style="{width: setItemWidth}"
v-for="(item, index) of week"
:key="index">
{{item}}
</div>
</div>
</div>
<div class="calendar-day">
<div class="cd-list"
v-for="(item, index) of day"
:key="index">
<div class="cl-item"
:style="{width: setItemWidth}"
v-for="(child,index) of item"
:key="index"
:class="[{has: child}]">
<div class="ci-inner"
v-if="child">
<span>{{child.date}}</span>
<span v-if="child.text"
class="aqi"
:class="child.text.kqzl">
{{child.text.kqzl}}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import kqzlData from './assets/data.json' // 空氣質(zhì)量數(shù)據(jù)
export default {
name: 'app',
data() {
return {
week: [
'星期一',
'星期二',
'星期三',
'星期四',
'星期五',
'星期六',
'星期日',
],
day: [],
}
},
computed: {
setItemWidth() {
return 100 / 7 + '%'
},
},
mounted() {
this.createCalendar(2020, 8)
},
methods: {
/**
* @name: 格式化日期
* @param {date}
*/
dateFormat(date) {
let dateArr = date.split('-')
let mounth = dateArr[1] >= 10 ? dateArr[1] : '0' + dateArr[1]
let day = dateArr[2] >= 10 ? dateArr[2] : '0' + dateArr[2]
return dateArr[0] + '-' + mounth + '-' + day
},
/**
* @name: 日期信息
* @param {date}
*/
getDayInfo(date) {
let kqzl = kqzlData.data
let formatDate = this.dateFormat(date)
let txt = kqzl[kqzl.findIndex(item => item.time === formatDate)]
return txt
},
/**
* @name: 生成日歷表
* @param {year}
* @param {mounth}
*/
createCalendar(year, mounth) {
// 某個月一共有多少天
let allDay = new Date(year, mounth, 0).getDate()
// 某個月1號是星期幾
let firstDay = this.judjeFirstDay(year, mounth)
// 需要多少行來展示
let row = Math.ceil((allDay + firstDay) / 7)
let k = firstDay - 1
let result = []
let count = 1
// 生成日歷二維數(shù)組
for (let i = 0; i < row; i++) {
result[i] = new Array(7)
do {
if (count <= allDay) {
result[i][k] = {
date: count,
// 根據(jù)接口匹配日期對應的信息
text: this.getDayInfo(year + '-' + mounth + '-' + count),
}
k++
count++
} else {
break
}
} while (k < 7)
k = 0
}
this.day = result
},
/**
* @name: 判斷某年某月1號是星期幾
* @param {year}
* @param {mounth}
*/
judjeFirstDay(year, mounth) {
let date = new Date(year, mounth - 1, 1)
let week = date.getDay()
let weekArr = [1, 2, 3, 4, 5, 6, 7]
return weekArr[week - 1]
},
},
}
</script>
<style lang="scss">
.calendar-container {
text-align: center;
.calendar-week {
margin-bottom: 4px;
padding: 0 4px;
color: #fff;
.cw-inner {
overflow: hidden;
background: #a0a0a0;
.cw-item {
float: left;
padding: 8px 0;
}
}
}
.calendar-day {
.cd-list {
overflow: hidden;
.cl-item {
float: left;
min-height: 30px;
box-sizing: border-box;
padding: 4px;
.ci-inner {
background: #f5f5f5;
padding: 8px 0;
span {
display: inline-block;
&.aqi {
color: #fff;
background: #a7cf8c;
padding: 0 4px;
border-radius: 4px;
}
&.優(yōu) {
background: #a7cf8c;
}
&.良 {
background: #f7da64;
}
&.輕度 {
background: #f29e39;
}
&.中度 {
background: #da555d;
}
&.重度 {
background: #b9377a;
}
&.嚴重 {
background: #881326;
}
}
}
}
}
}
}
</style>
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue-cli項目中使用公用的提示彈層tips或加載loading組件實例詳解
這篇文章主要介紹了vue-cli項目中使用公用的提示彈層tips或加載loading組件,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2018-05-05
Vue3利用自定義指令進行內(nèi)容控制的實現(xiàn)方法
Vue3作為一個漸進式JavaScript框架,提供了強大的自定義指令功能,使得權(quán)限控制變得既簡單又高效,本文將詳細介紹如何在Vue3中使用自定義指令來判斷內(nèi)容是否顯示,以滿足不同用戶權(quán)限下的界面展示需求,需要的朋友可以參考下2024-04-04
Vue使用Axios庫請求數(shù)據(jù)時跨域問題的解決方法詳解
在 VUE 項目開發(fā)時,遇到個問題,正常設置使用 Axios 庫請求數(shù)據(jù)時,報錯提示跨域問題,那在生產(chǎn)壞境下,該去怎么解決呢?下面小編就來和大家詳細講講2024-01-01
Vue+Flask實現(xiàn)簡單的登錄驗證跳轉(zhuǎn)的示例代碼
本篇文章主要介紹了Vue+Flask實現(xiàn)簡單的登錄驗證跳轉(zhuǎn)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
element-ui 遠程搜索組件el-select在項目中組件化的實現(xiàn)代碼
這篇文章主要介紹了element-ui 遠程搜索組件el-select在項目中組件化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12

