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>

效果

学无止境,谦卑而行.

相关文章
|
11月前
|
JavaScript
Vue在Element UI下使用富文本框插件quill-editor(我个人不推荐用这个复杂的富文本插件)
Vue在Element UI下使用富文本框插件quill-editor(我个人不推荐用这个复杂的富文本插件)
|
11月前
|
前端开发 数据可视化 API
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
591 0
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
|
JavaScript 前端开发
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件1
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件1
77 0
|
JavaScript 前端开发
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件10
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件10
68 0
|
11月前
|
前端开发 JavaScript CDN
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(一)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
328 0
|
11月前
|
JavaScript 前端开发
【vue2中引入阿里第三方图标库使用自定义的Ant Design Vue组件a-cascader级联选择后缀图标】
【vue2中引入阿里第三方图标库使用自定义的Ant Design Vue组件a-cascader级联选择后缀图标】
719 0
|
JavaScript 前端开发
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件3
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件3
69 0
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件3
|
前端开发
前端项目实战拾陆-react-admin路由样式替换antd
前端项目实战拾陆-react-admin路由样式替换antd
102 0
|
JavaScript 前端开发
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件4
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件4
77 0
|
JavaScript 前端开发
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件5
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之编辑表单 封装form组件5
57 0