el-calendar日历的各种样式及事件

效果图

班和休互相修改功能

 

el-calendar  HTML代码段

可以根据自己的需要显示内容,样式

<template>
  <div class="la-container">
    <div class="la-info-main">
      <!-- 关于日历控件 -->
      <el-calendar
        class="lar-el-calendar"
        v-model="value"
        :first-day-of-week="7"
      >
        <template slot="dateCell" slot-scope="{ date, data }">
          <div
            :class="
              calendarData.indexOf(data.day) > -1
                ? 'lar-is-selected'
                : 'lar-no-selected'
            "
            @click="holidayUpdate(data, date)"
          >
            <span
              v-if="
                calendarData.indexOf(data.day) == -1 &&
                queryDate.indexOf(data.day) != -1
              "
              >班</span
            >
            <span
              v-else-if="
                calendarData.indexOf(data.day) > -1 &&
                queryDate.indexOf(data.day) != -1
              "
              style="color: #f73131"
              >休</span
            >
            <span v-else>&nbsp;</span>
            <div
              :style="
                calendarData.indexOf(data.day) > -1
                  ? 'color:#F73131;text-align:center'
                  : 'text-align:center'
              "
            >
              {{ data.day.split("-").slice(1).join("-") }}
            </div>
          </div>
        </template>
      </el-calendar>
    </div>
    <ladrawer ref="drawer"></ladrawer>
  </div>
</template>

js代码段

el-calendar的上一页,今天,下一页的按钮点击事件在ui库里没有,需要用的话需要在mounted里写监听事件,如下

<script>
import ladrawer from "./components/calendarDialog.vue";
import Api from "@/api";
export default {
  name: "CalendarConfig",
  data() {
    return {
      queryDate: [], //查询的日期
      calendarData: [], //所有假期对应的日期
      value: new Date(),
      year: new Date().getFullYear(),
    };
  },
  components: {
    ladrawer,
  },
  mounted() {
    this.getDayList();
    this.$nextTick(() => {
      // 点击前一个月
      let prevBtn = document.querySelector(
        ".el-calendar__button-group .el-button-group>button:nth-child(1)"
      );
      prevBtn.addEventListener("click", () => {
        this.judgeDate();
      });
      let dayBtn = document.querySelector(
        ".el-calendar__button-group .el-button-group>button:nth-child(2)"
      );
      dayBtn.addEventListener("click", () => {
        this.judgeDate();
      });
      let nextBtn = document.querySelector(
        ".el-calendar__button-group .el-button-group>button:nth-child(3)"
      );
      nextBtn.addEventListener("click", () => {
        this.judgeDate();
      });
    });
  },
  methods: {
    // 获取日期列表
    getDayList() {
      Api.common
        .getDayList({
          year: this.year,
          month: "",
        })
        .then((res) => {
          this.calendarData = [];
          this.queryDate = [];
          res.data.map((item) => {
            let time =
              item.day.toString().slice(0, 4) +
              "-" +
              item.day.toString().slice(4, 6) +
              "-" +
              item.day.toString().slice(6);
            if (item.isWork == 0) {
              this.calendarData.push(time);
            }
            this.queryDate.push(time);
          });
        });
    },
    //节日内容编辑
    holidayUpdate(dataVal, dateVal) {
      this.$refs.drawer.infoscope = {};
      this.$refs.drawer.infoscope = {
        holidayDate: [dataVal.day], // 日期
        years: dataVal.day.substring(0, dataVal.day.indexOf("-")), //获取年份//年份
      };
      this.$refs.drawer.drawer = true;
    },
    // 判断时间
    judgeDate() {
      let d = new Date(this.value);
      if (this.year != d.getFullYear()) {
        this.year = d.getFullYear();
        this.getDayList();
      }
    },
  },
};
</script>

el-calendar css样式

<style lang="scss">
.lar-el-calendar {
  .el-calendar-table td.is-selected {
    background-color: #a2e5a2 !important;
  }
  .el-calendar-table td .el-calendar-day:hover {
    background-color: #a2e5a2 !important;
  }
  .current.is-today {
    background: green;
    color: #fff;
  }
}
</style>

修改类型的弹窗代码

<template>
    <el-dialog :visible.sync="drawer" width="600px"
        append-to-body
        :close-on-click-modal="false"
        title="修改类型"
    >
      <el-form ref="infoscope" :model="infoscope" :rules="rulesinfoscope" label-width="80px">
        <el-form-item label="日期:" prop="holidayDate">
          <el-date-picker
            clearable 
            size="small"
            v-model="infoscope.holidayDate"
            type="dates" 
            value-format="yyyy-MM-dd" 
            placeholder="选择时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="类型:" prop="holidayType">
          <el-select  size="small" v-model="infoscope.holidayType" placeholder="请选择类型" clearable>
            <el-option label="休息日" value="0"></el-option>
            <el-option label="工作日" value="1"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="drawer=false">取 消</el-button>
        <el-button type="primary" @click="sure">确 定</el-button>
      </div>
    </el-dialog>
</template>

<script>
import Api from "@/api"
export default {
    data(){
        return{
            drawer:false,
            title:'1',
            infoscope:{
              holidayDate:[],
              holidayType:''
            },
            rulesinfoscope:{
              holidayDate: [
                { required: true, message: '请选择时间', trigger: 'change' }
              ],
              holidayType: [
                { required: true, message: '请选择类型', trigger: 'change' }
              ],
            },
        }
    },
    methods:{
        sure(){
          this.$refs.infoscope.validate(val=>{
            if(val){
              let day=this.infoscope.holidayDate.map(item=>{
                return Number(item.replace(/-/g,''))
              })
              Api.common.updateWorkFlag({
                days:day,
                isWorkDay:this.infoscope.holidayType,
              }).then(res=>{
                this.$message.success('修改成功')
                this.drawer=false
                this.$parent.getDayList()
              })
            }else{
              return false
            }
          })
        }
    }
}
</script>

有不懂的可以私信!

有用的留下一个赞👍,谢谢

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值