vue之ele中的时间组件,设置禁用的日期

vue之ele中的时间组件,设置禁用的日期

只允许选择当月的最后一天和下月的第一天

转载于:链接: link.

<template>
  <div class="container">
    <el-date-picker
      v-model="value"
      type="date"
      placeholder="选择日期"
      :picker-options="pickerOptions">
    </el-date-picker>
  </div>
</template>
export default {
  data () {
    return {
      value: {},
      pickerOptions: {}
    }
  },
  mounted () {
  	// 页面初始化时配置 pickerOptions
  	this.disabledDate()
  },
  methods: {
    disabledDate () {
      let now = new Date() //当前日期 
      // now.getFullYear() -- 当前年  now.getMonth() -- 当前月
      let monthEndDate = new Date(now.getFullYear(), now.getMonth() + 1, 0) // 获取本月的结束日期
      let timeEnd = Date.parse(monthEndDate)
      // 设置某段日期的禁用状态
      this.pickerOptions.disabledDate = time => (time.getTime() < timeEnd) || (time.getTime() > timeEnd + 60 * 60 * 24 * 1000)
    }
  }
}

只允许选择每一个月的最后一天

  • :picker-options=“pickerOptionsFlag ? pickerOptions : {}”
<!-- 单选日期等 -->
<template>
  <div class="xSelect_container">
    <!-- :type="dataTpye" -->
    <el-date-picker
      class="xSelect_wrap"
      :style="
        labelWType == 1
          ? 'width: calc(100% - 100px)'
          : 'width: calc(100% - 110px)'
      "
      style="height: '32px'"
      v-model="value1"
      value-format="yyyy-MM-dd"
      @change="selectDate"
      :placeholder="dataTpye == 'date' ? '选择日期' : '选择月份'"
      :picker-options="pickerOptionsFlag ? pickerOptions : {}"
    >
    </el-date-picker>
    <span
      :style="labelWType == 1 ? 'width:100px' : 'width:110px'"
      class="xSelect_label"
      ><span class="xSelect_check" v-show="isCheck"></span>
      <span>{{ defaultConfig.title }}</span>
    </span>
  </div>
</template>

<script>
export default {
  name: "SingleData",
  components: {},
  props: {
    //给 label 设置宽度 默认94 类型2 为110
    labelWType: {
      type: Number,
      default: 1,
    },
    defaultConfig: {
      type: Object,
      default: () => {},
    },
    isCheck: {
      type: Boolean,
      default: false,
    },
    dataTpye: {
      type: String,
      default: "date",
    },
    //当前 组件的title
    titleType: {
      type: String,
      title: "",
    },
    pickerOptionsFlag: {
      type: Boolean,
      default:false
    },
    // 公告的 清除
    commomClear: {
      type: Boolean,
      default: false,
    },
  },
  data() {
    return {
      value1: "",
      pickerOptions: {
        disabledDate: (time) => {
          let year = time.getFullYear();
          let month = time.getMonth() + 1;
          let newDate = new Date(year, month, 0);
          return newDate.getDate() !== time.getDate();
        },
      },
    };
  },
  watch: {
    commomClear(val) {
      // 担保额度查询 截止时间
      if (val && this.titleType == "clearGLQdeadline") {
        this.value1 = "";
        this.$store.commit("clearGLQdeadline", false);
      }
    }
   methods: {
    selectDate() {
      this.$emit("selectDate", this.value1);
    },
  },
};
</script>
<style  lang="scss" scoped>
.xSelect_wrap {
  overflow: hidden;
  line-height: 32px;
  height: 32px;
  border: 1px solid #dcdfe6;
}
::v-deep .el-input__inner {
  border: none;
  margin-top: -10px;
}
::v-deep .el-input__icon {
  margin-top: -5px;
}
</style>
        <div class="odd_number">
          <SingleData
            :defaultConfig="dataDeadline"
            :isCheck="true"
            dataTpye="month"
            titleType="clearBankCLQueryDataDeadline"
            :commomClear="clearBankCLQueryDataDeadline"
            @selectDate="dataDeadlineChange"
            :pickerOptionsFlag="true"
          />
        </div>

只允许选择的日期是,不超过今天的日期

  • 假如今天为2021年7月23号,那么只能选择的日期为23号之前!
    在这里插入图片描述
  • pickerOptionsFlag 为判断标志,是否需要这个日期限制
<el-date-picker
  v-model="scope.row[item.prop]"
  type="date"
  value-format="yyyy-MM-dd"
 :placeholder="item.placeholder"
  :picker-options="pickerOptionsFlag ? pickerOptions : {}"
  >
</el-date-picker>

  created() {
    this.disabledDate();  // 格式化
  },
  methods: {
    disabledDate () {
      let now = new Date() 
      let monthEndDate = new Date(now.getFullYear(), now.getMonth() , now.getDate());
      let timeEnd = Date.parse(monthEndDate)
      // 设置当前时间截止日 必须小于日历组件的时间!
      this.pickerOptions.disabledDate = time => ( time.getTime() > timeEnd )
    },
 }

根据后台返回的数据 显示对应的日期

在这里插入图片描述
在这里插入图片描述

<template>
  <div style="height: 100%">
    <el-date-picker
      v-model="value1"
      type="date"
      placeholder="选择日期"
      @change="changeData"
      :picker-options="pickerOptions"
    >
    </el-date-picker>
  </div>
</template>

<script>
export default {
  name: "Test",
  components: {},
  data() {
    let _this = this;
    return {
      pickerMaxDates: [
        // 后台返回的是这种格式
        "2021-09-30",
        "2021-09-28",
        "2021-09-07",
        "2021-09-03",
        "2021-09-01",
        "2021-08-28",
      ],
      pickerOptions: {
        disabledDate(time) {
          return (
             _this.disabledEndDate(time)
          );
        },
      },
      value1: "",
    };
  },
  methods: {
    changeData(val) {
      console.log("val", val);
    },
    dateFormat(dateData) {
      var date = new Date(dateData)
      var y = date.getFullYear()
      var m = date.getMonth() + 1
      m = m < 10 ? ('0' + m) : m
      var d = date.getDate()
      d = d < 10 ? ('0' + d) : d
      const time = y + '-' + m + '-' + d
      return time
    },
    // 设置日期禁用日期
    disabledEndDate(time) {
      let dateTime = this.dateFormat(time);
      // console.log("time", time); // time -> Sun Aug 29 2021 00:00:00 GMT+0800 (中国标准时间)
      let time2 = [];
      for (let i = 0; i < this.pickerMaxDates.length; i++) {
        time2.push(new Date(this.pickerMaxDates[i]).getTime());
      }
      // console.log("time2",time2); // [1632960000000, 1632787200000, 1630972800000, 1630627200000, 1630454400000, 1630108800000]
      var t = new Date(dateTime).getTime(); // 当前面板里的时间戳
      // console.log("t", t); // t 1630195200000
      if (time2.indexOf(t) == -1) {
        //disabledDate属性:true为禁用,false为可用  如果面板里的时间戳不包含在可选时间戳里面则禁用
        return true;
      }
    },
  },
};
</script>

<style lang="scss" scoped>
</style>

根据后台返回的数据 显示对应的年月的数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<template>
  <div style="height: 100%">
    <el-date-picker
      v-model="value"
      type="month"
      placeholder="选择日期"
      @change="changeData"
      :picker-options="pickerOptions"
    >
    </el-date-picker>
  </div>
</template>

<script>
export default {
  name: "Test",
  components: {},
  data() {
    let _this = this;
    return {
      pickerMaxDates: [
        // 后台返回的是这种格式
        "2022-04",
        "2022-02",
        "2022-01",
        "2021-09",
        "2021-08",
        "2021-06",
        "2021-04",
        "2021-02",
        "2021-01",
        "2020-10",
        "2020-08",
        "2020-05",
      ],
      pickerOptions: {
        disabledDate(time) {
          return _this.disabledEndDate(time);
        },
      },
      value: "",
    };
  },
  methods: {
    changeData(val) {
      console.log("val", val);
    },
    dateFormat(dateData) {
      var date = new Date(dateData);
      var y = date.getFullYear();
      var m = date.getMonth() + 1;
      m = m < 10 ? "0" + m : m;
      const time = y + "-" + m ;
      return time;
    },
    // 设置日期禁用日期
    disabledEndDate(time) {
      let dateTime = this.dateFormat(time);
      let time2 = [];
      for (let i = 0; i < this.pickerMaxDates.length; i++) {
        time2.push(new Date(this.pickerMaxDates[i]).getTime());
      }
      var t = new Date(dateTime).getTime(); // 当前面板里的时间戳
      if (time2.indexOf(t) == -1) {
        //disabledDate属性:true为禁用,false为可用  如果面板里的时间戳不包含在可选时间戳里面则禁用
        return true;
      }
    },
  },
};
</script>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值