欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

教你如何在12月平铺日历样式中使用vue-material-year-calendar插件进行前端开发

最编程 2024-02-01 10:08:57
...
<template> <div class="weekdays-pages"> <div class="weekdays-year"> <svg-icon icon-class="icl-dir-left" class="el-pointer" @click="nextYear(0)" /><span> {{ curYear }}年</span> <svg-icon icon-class="icl-dir-right" class="el-pointer" @click="nextYear(1)" /> </div> <div class="content-box__gap weekdays-area"> <div class="weekdays-content "> <!-- :activeDates.sync="activeDates" --> <div class="weekdays-left"> <el-button class="weekdays-btn" size="mini" @click="addWeekendCurrentYear">设置所有周末为节假日</el-button> <YearCalendar v-model="year" :activeDates="activeDates" @toggleDate="toggleDate" prefixClass="your_customized_wrapper_class" :activeClass="activeClass" lang="tw" :showYearSelector="false" ></YearCalendar> </div> <div class="weekdays-right"> <h1 class="summer-time-title">夏令工作时间</h1> <el-form :model="timeForm" :rules="timeFormRules" ref="timeForm" label-position="top" class="demo-ruleForm"> <el-form-item label="夏令起止时间:" required> <el-col :span="11"> <el-form-item prop="summerStart"> <el-date-picker type="date" placeholder="选择日期" v-model="timeForm.summerStart"></el-date-picker> </el-form-item> </el-col> <el-col class="time-text-tip" :span="2"> 至 </el-col> <el-col :span="11"> <el-form-item prop="summerEnd"> <el-date-picker type="date" placeholder="选择日期" v-model="timeForm.summerEnd"></el-date-picker> </el-form-item> </el-col> </el-form-item> <el-form-item label="上午工作时间:" required> <el-col :span="11"> <el-form-item prop="summerMorningDate1"> <el-time-picker format="HH:mm" placeholder="选择时间" v-model="timeForm.summerMorningDate1" ></el-time-picker> </el-form-item> </el-col> <el-col class="time-text-tip" :span="2"> 至 </el-col> <el-col :span="11"> <el-form-item prop="summerMorningDate2"> <el-time-picker format="HH:mm" placeholder="选择时间" v-model="timeForm.summerMorningDate2" ></el-time-picker> </el-form-item> </el-col> </el-form-item> <el-form-item label="下午工作时间:" required> <el-col :span="11"> <el-form-item prop="summerAfternoonDate1"> <el-time-picker format="HH:mm" placeholder="选择时间" v-model="timeForm.summerAfternoonDate1" ></el-time-picker> </el-form-item> </el-col> <el-col class="time-text-tip" :span="2"> 至 </el-col> <el-col :span="11"> <el-form-item prop="summerAfternoonDate2"> <el-time-picker format="HH:mm" placeholder="选择时间" v-model="timeForm.summerAfternoonDate2" ></el-time-picker> </el-form-item> </el-col> </el-form-item> <h1 class="winter-time-title">冬令工作时间</h1> <el-form-item label="冬令起止时间:" required> <el-col :span="11"> <el-form-item prop="winterStart"> <el-date-picker type="date" placeholder="选择日期" v-model="timeForm.winterStart"></el-date-picker> </el-form-item> </el-col> <el-col class="time-text-tip" :span="2"> 至 </el-col> <el-col :span="11"> <el-form-item prop="winterEnd"> <el-date-picker type="date" placeholder="选择日期" v-model="timeForm.winterEnd"></el-date-picker> </el-form-item> </el-col> </el-form-item> <el-form-item label="上午工作时间:" required> <el-col :span="11"> <el-form-item prop="winterMorningDate1"> <el-time-picker format="HH:mm" placeholder="选择时间" v-model="timeForm.winterMorningDate1" ></el-time-picker> </el-form-item> </el-col> <el-col class="time-text-tip" :span="2"> 至 </el-col> <el-col :span="11"> <el-form-item prop="winterMorningDate2"> <el-time-picker format="HH:mm" placeholder="选择时间" v-model="timeForm.winterMorningDate2" ></el-time-picker> </el-form-item> </el-col> </el-form-item> <el-form-item label="下午工作时间:" required> <el-col :span="11"> <el-form-item prop="winterAfternoonDate1"> <el-time-picker format="HH:mm" placeholder="选择时间" v-model="timeForm.winterAfternoonDate1" ></el-time-picker> </el-form-item> </el-col> <el-col class="time-text-tip" :span="2"> 至 </el-col> <el-col :span="11"> <el-form-item prop="winterAfternoonDate2"> <el-time-picker format="HH:mm" placeholder="选择时间" v-model="timeForm.winterAfternoonDate2" ></el-time-picker> </el-form-item> </el-col> </el-form-item> <el-form-item class="save-btn"> <el-button type="primary" @click="submitForm('timeForm')">保 存</el-button> </el-form-item> </el-form> </div> </div> </div> </div> </template> <script lang="ts"> import { Vue, Component, Inject } from 'vue-property-decorator' import YearCalendar from 'vue-material-year-calendar' import dayjs from 'dayjs' @Component({ name: 'WeekdaysManagement', components: { YearCalendar } }) export default class WeekdaysManagement extends Vue { private year: number = new Date().getFullYear() private activeDates: Array<object> = [ // { date: '2019-02-16', className: 'your_customized_classname' } ] private activeClass: string = '' private timeForm = {} private curYear: number = new Date().getFullYear() private timeFormRules: object = { summerStart: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], summerEnd: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], summerMorningDate1: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], summerMorningDate2: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], summerAfternoonDate1: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], summerAfternoonDate2: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], winterStart: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], winterEnd: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], winterMorningDate1: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], winterMorningDate2: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], winterAfternoonDate1: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }], winterAfternoonDate2: [{ type: 'date', required: true, message: '请选择', trigger: 'change' }] } /* 切换年份 */ nextYear(type: number) { if (type) { this.curYear += 1 } else { this.curYear -= 1 } this.year = this.curYear } /* 按年设置周末 */ addWeekendCurrentYear() { this.removeWeekendCurrentYear() let theDate = dayjs(`${this.year}-01-01`) let isActiveDateUsingString = this.activeDates.length && typeof this.activeDates[0] === 'string' while (theDate.diff(theDate.endOf('year'), 'day') !== 0) { if (theDate.day() === 6 || theDate.day() === 0) { let oDate = isActiveDateUsingString ? theDate.format('YYYY-MM-DD') : { date: theDate.format('YYYY-MM-DD') } oDate.className = 'red' this.activeDates.push(oDate) } theDate = theDate.add(1, 'day') } } removeWeekendCurrentYear() { this.activeDates = this.activeDates.filter((oDate: any) => { let date = typeof oDate === 'string' ? oDate : oDate.date let day = dayjs(date).day() let isCurrentYear = dayjs(date).year() === this.year let isWeekend = [6, 0].includes(day) return !(isCurrentYear && isWeekend) }) } /* 时间表单提交 */ submitForm(timeForm: string) { ;(this.$refs[timeForm] as any).validate((valid: any) => { if (valid) { } }) } /* 点击日期 */ toggleDate(dateInfo: any) { console.log(dateInfo) // { date: '2010-10-23', selected: true } let curDate = { date: dateInfo.date, className: 'red' } this.activeDates.push(curDate) } } </script> <style lang="scss" scoped> .weekdays-pages { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .weekdays-year { height: 62px; line-height: 62px; opacity: 1; background: #ffffff; font-size: 16px; font-weight: 600; text-align: LEFT; color: #262d3c; padding-left: 24px; } .weekdays-area { width: 100%; height: calc(100% - 62px); } .weekdays-content { display: flex; width: 100%; height: 100%; overflow: hidden; background-color: white; .weekdays-left { width: calc(100% - 341px); overflow-y: auto; overflow-x: hidden; .weekdays-btn { margin: 20px 20px 10px 20px; } } .weekdays-right { width: 383px; margin: 20px 0; border-left: solid 1px #dcdcdc; padding: 0 20px 20px 20px; margin-left: 40px; .summer-time-title { margin-bottom: 14px; } .winter-time-title { margin-top: 24px; } .time-text-tip { text-align: center; } .save-btn { margin-top: 20px; } ::v-deep .el-form { .el-form-item--small.el-form-item { margin-bottom: 6px; } .el-form-item__label { padding: 0; color: #595e6a; } .el-date-editor.el-input { width: 100%; } } } } ::v-deep .vue-calendar__container { background-color: #fff; box-shadow: 0 0 0 0 rgb(0 0 0 / 10%); .calendar__title { justify-content: left; height: 32px; line-height: 32px; border-bottom: 0; margin-bottom: 0; } .day__weektitle { height: 36px; opacity: 1; background: rgba(0, 8, 25, 0.05); } .calendar__body { padding: 0; background: #ffffff; } .calendar__day { color: #595e6a; font-size: 12px; font-weight: 400; } .container__months { padding: 0; flex: auto; } .container__month { flex: 24%; padding: 0; } .calendar:hover { transform: scale(1); box-shadow: 0 0 0 0 rgb(0 0 0 / 10%); } .calendar { transform: scale(1); box-shadow: 0 0 0 0 rgb(0 0 0 / 10%); min-height: auto; width: 100%; padding-left: 20px; margin-bottom: 8px; .day { width: 100%; height: 100%; } .day:hover { border-radius: 0; } } .grey { color: #bfc1c5; } .red { color: #f6414a; background-color: #feeced; border-radius: 0; } } </style>