Antd——如何自定义月的选择范围

简介: Antd——如何自定义月的选择范围

前言

小徒弟的一个问题,写了一个简单的demo,因为是月份的选择,所以我们直接使用MonthPicker组件进行改造即可;

内容

CodeSandbox

MonthPickerForRange

完整代码

<template>
  <div>
    <a-month-picker
      placeholder="开始日期"
      v-model="startValue"
      :disabled-date="disabledStartDate"
      @openChange="handleStartOpenChange"
    />
    ~
    <a-month-picker
      placeholder="结束日期"
      v-model="endValue"
      :open="endOpen"
      @openChange="handleEndOpenChange"
      :disabled-date="disabledEndDate"
    />
  </div>
</template>
<script>
import moment from "moment";
export default {
  data() {
    return {
      startValue: null,
      endValue: null,
      endOpen: false,
    };
  },
  watch: {
    startValue(val) {
      console.log("startValue", val);
    },
    endValue(val) {
      console.log("endValue", val);
    },
  },
  methods: {
    moment,
    disabledStartDate(startValue) {
      const endValue = this.endValue;
      // 未来时间不可选择
      if (startValue.year() > moment().year()) {
        return startValue.month() > -1;
      }
      // 选择当年且endValue有值
      if (startValue.year() === moment().year() && endValue) {
        return (
          startValue.valueOf() > endValue.valueOf() || startValue.month() >= 10
        );
      }
      // 选择当年endValue无值
      if (startValue.year() === moment().year() && !endValue) {
        return startValue.month() >= 10;
      }
      if (!startValue || !endValue) {
        return false;
      }
      return startValue.valueOf() > endValue.valueOf();
    },
    disabledEndDate(endValue) {
      const startValue = this.startValue;
      // 未来时间不可选择
      if (endValue.year() > moment().year()) {
        return endValue.month() > -1;
      }
      // 选择当年startValue有值
      if (endValue.year() === moment().year() && startValue) {
        return (
          startValue.valueOf() >= endValue.valueOf() || endValue.month() >= 10
        );
      }
      // 选择当年startValue无值
      if (endValue.year() === moment().year() && !startValue) {
        return endValue.month() >= 10;
      }
      if (!startValue || !endValue) {
        return false;
      }
      return startValue.valueOf() >= endValue.valueOf();
    },
    handleStartOpenChange(open) {
      if (!open) {
        this.endOpen = true;
      }
    },
    handleEndOpenChange(open) {
      this.endOpen = open;
    },
  },
};
</script>

效果

学无止境,谦卑而行.

目录
相关文章
|
5月前
uniapp中uview组件库丰富的tab标签
uniapp中uview组件库丰富的tab标签
131 0
|
5月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
103 0
|
12月前
|
存储 JavaScript API
vue3+ant design vue 自定义文件上传和自定义上传进度条
1.关键点是Upload组件中customRequest的API,它能通过覆盖默认的上传行为,可以自定义自己的上传实现(具体可看官方文档); 2.通过在Upload组件中绑定progress实现。 下面是详细代码
1699 0
|
JavaScript
Vue vant引入,tabbar封装使用示例
使用tabbarTempValue值来监听,使用active值来接收。这是为了防止props为单向数据绑定,在组件内改变值后会产生报错,父页面无法接收
403 0
|
2月前
Vue3项目引入 vue-quill 编辑器组件并封装使用
本文介绍了如何在Vue3项目中引入并封装使用`vue-quill`富文本编辑器组件,包括安装配置、父页面实现、子组件设计以及使用方法和效果展示。
527 0
Vue3项目引入 vue-quill 编辑器组件并封装使用
|
4月前
|
资源调度 前端开发
|
5月前
|
JavaScript 前端开发
vue怎么自定义底部导航
vue怎么自定义底部导航
53 10
|
5月前
|
JavaScript 前端开发
【vue2中引入阿里第三方图标库使用自定义的Ant Design Vue组件a-cascader级联选择后缀图标】
【vue2中引入阿里第三方图标库使用自定义的Ant Design Vue组件a-cascader级联选择后缀图标】
394 0
|
5月前
|
小程序 API 索引
uniapp中uview组件库的DatetimePicker 选择器的用法
uniapp中uview组件库的DatetimePicker 选择器的用法
1004 0
|
11月前
vue3引入uview-plus3.0移动组件库
vue3引入uview-plus3.0移动组件库