vue 给指定日期添加小红点

一、需求背景


        今天在项目开发中有一个需求,要求日期选择器中,指定的日期显示标注,标识该日期有待处理的内容。

二、代码

选择单个日期

redPoint.vue

<template>
    <el-form-item prop="value">
        <el-date-picker
            v-model="value"
            type="date"
            format="yyyy-MM-dd"
            value-format="yyyy-MM-dd"
            :picker-options="pickerOptions"
            @change="sendMsg($event)"
            :placeholder="holder">
        </el-date-picker>
    </el-form-item>
</template>

<script>
export default {
    name: "redPointDate",
    props: {
        dataList: {
            type: Array,
            required: []
        },
        holderText: {
            type: String,
            required: '选择日期'
        },
    },
    data() {
        return{
            value:undefined,
        }
    },
    computed:{
        pickerOptions(){
            let that = this
            return {
                cellClassName(time){
                    if(that.dataList.includes(that.DateToformatDate(time))){
                        return 'red';
                    }
                }
            }
        },
        holder(){
            return this.holderText
        }
    },
    methods: {
        // 日期格式化
        DateToformatDate(date) {
            var d = new Date(date);
            var year = d.getFullYear();
            var month = d.getMonth() < 9 ? "0" + (d.getMonth() + 1) : "" + (d.getMonth() + 1);
            var day = d.getDate() < 10 ? "0" + d.getDate() : "" + d.getDate();
            // var hour = d.getHours() < 10 ? "0" + d.getHours() : "" + d.getHours();
            // var minutes = d.getMinutes() < 10 ? "0" + d.getMinutes() : "" + d.getMinutes();
            // var seconds = d.getSeconds() < 10 ? "0" + d.getSeconds() : "" + d.getSeconds();
            return ( year + '-' + month + '-' + day );
        },
        sendMsg(val){
            //func: 是父组件指定的传数据绑定的函数,this.msg:子组件给父组件传递的数据
            this.$emit('func',val)
        }
    }
}
</script>

<style>
  .red::after{
      content: '';
      width: 4px;
      height: 4px;
      background-color: #f00;
      border-radius:50%;
      display: inline-block;
      position: absolute;
      left: 30px;
      bottom: 25px;
  } 
</style>

页面引用

<redPoint@func="getReturnDate" :dataList="datas" ></redPoint>

getReturnDate回调函数

选择日期范围

redPointDateRange.vue

<template>
    <el-form-item prop="value">
        <el-date-picker
            v-model="value"
            type="daterange"
            format="yyyy-MM-dd"
            value-format="yyyy-MM-dd"
            :picker-options="pickerOptions"
            @change="sendMsg($event)"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
        </el-date-picker>
    </el-form-item>
</template>

<script>
export default {
    name: "redPointDateRange",
    props: {
        dataList: {
            type: Array,
            required: []
        },
    },
    data() {
        return{
            value:[],
        }
    },
    computed:{
        pickerOptions(){
            let that = this
            return {
                cellClassName(time){
                    if(that.dataList.includes(that.DateToformatDate(time))){
                        return 'red';
                    }
                }
            }
        },
    },
    methods: {
        // 日期格式化
        DateToformatDate(date) {
            var d = new Date(date);
            var year = d.getFullYear();
            var month = d.getMonth() < 9 ? "0" + (d.getMonth() + 1) : "" + (d.getMonth() + 1);
            var day = d.getDate() < 10 ? "0" + d.getDate() : "" + d.getDate();
            // var hour = d.getHours() < 10 ? "0" + d.getHours() : "" + d.getHours();
            // var minutes = d.getMinutes() < 10 ? "0" + d.getMinutes() : "" + d.getMinutes();
            // var seconds = d.getSeconds() < 10 ? "0" + d.getSeconds() : "" + d.getSeconds();
            return ( year + '-' + month + '-' + day );
        },
        sendMsg(val){
            //func: 是父组件指定的传数据绑定的函数,this.msg:子组件给父组件传递的数据
            this.$emit('func',val)
        }
    }
}
</script>

<style> 
.red::after{
    content: '';
    width: 4px;
    height: 4px;
    background-color: #f00;
    border-radius:50%;
    display: inline-block;
    position: absolute;
    left: 30px;
    bottom: 25px;
}
</style>

页面引用

import redPointDateRange from '../../dashboard/dataRedPoint/redPointDateRange';

components: {
    redPointDateRange
  },

<redPointDateRange @func="getReturnDate" :dataList="datas" ></redPointDateRange>
//日期控件回调函数
    getReturnDate(data){
      // this.queryParams.searchDate = data
      if(data === null){
        this.dateRange = []
      }else{
        this.dateRange = data
      }
      this.getList();
    },

三、效果

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值