antd-vue 实现自定义日期头部

javascript 复制代码
<template>
 <a-config-provider :locale="zhCN">
                <a-calendar 
                :fullscreen="true"  
                :disabled-date="dateDisabled"
                @panelChange="panelChange">
                <!-- :headerRender="headerRender" -->
                  <div slot="headerRender" slot-scope="{ value, type, onChange, onTypeChange }" class="ant-fullcalendar-date" >
                    <div class="slotHeader" style="padding:15px 15px 40px 15px; textAlign: center; position: relative; ">
                        <div style="position: absolute;left: 15px;top: 20px;">
                        </div>
                        <div style="display: inline-block; textAlign: center;">
                          <Select  style="width:200px" :value="moment(value).year()" @on-change="(year) =>{changeYear(value,year,onChange)}">
                              <Option v-for="item in yearOptions" :value="item.value" :key="item.value">{{ item.label }}</Option>
                          </Select>
                          <Select style="width:140px" :value="moment(value).month()" @on-change="(month) => {changeMonth(value,month,onChange)}">
                              <Option v-for="item in monthOptions" :value="item.value" :key="item.value">{{ item.label }}</Option>
                          </Select>
                        </div>
                        <div style="position: absolute;right: 15px;top: 20px;">
                          <ButtonGroup>
                            <Button type="primary" @click="() => {prevMonth(value,onChange)}">
                                <Icon type="ios-arrow-back"></Icon>
                            </Button>
                            <Button type="primary" @click="() => {showTotay(value,onChange)}">本月</Button>
                            <Button type="primary" @click="()=> {nextMonth(value,onChange)}">
                                <Icon type="ios-arrow-forward"></Icon>
                            </Button>
                        </ButtonGroup>
                        </div>
                        </div>
                  </div>
                  <ul slot="dateCellRender" slot-scope="value" class="events">
                    <li
                        v-for="(row, index) in getListData(value)"
                        :key="row.formId"
                        class="li-item"
                      >
                      </li>

                  </ul>
                </a-calendar>
              </a-config-provider>
           </template>
<script>
import zhCN from "ant-design-vue/es/locale-provider/zh_CN";
data() {
	return {
		zhCN,
		 yearOptions:[],
         monthOptions:[],
	}
},
methods: {
    getMonthOptions() {
      let monthOptions = []
      for (let i = 0; i <= 11; i++) {
        monthOptions.push({
          label: `${i+1}月`,
          value: i,
        })
      }
      this.monthOptions = monthOptions
    },
    getYearOptions() {
      let yearOptions = []
      for (let i = 2020; i <= new Date().getFullYear()+5; i++) {
        yearOptions.push({
          label: `${i}年`,
          value: i,
        })
      }
      this.yearOptions = yearOptions
    },
        changeYear(value,newYear, onChange) {
      const now =  value.clone().year(newYear)
      onChange(now)

    },
    changeMonth(value,selectedMonth, onChange) {
      const newValue = value.clone()
      newValue.month(parseInt(selectedMonth, 10))
      onChange(newValue)
    },
    prevMonth(value, onChange) {
      let newMonth = moment(value).subtract(1, 'months');
      onChange(newMonth);
    },
    nextMonth(value, onChange) {
      let newMonth = moment(value).add(1, 'months');
      onChange(newMonth);
    },
    showTotay(value,onChange) {
      const today = moment(new Date())
      onChange(today)
    },
}
</script>

效果如下

相关推荐
北海-cherish3 小时前
vue中的 watchEffect、watchAsyncEffect、watchPostEffect的区别
前端·javascript·vue.js
AALoveTouch4 小时前
网球馆自动预约系统的反调试
javascript·网络
2501_915909064 小时前
HTML5 与 HTTPS,页面能力、必要性、常见问题与实战排查
前端·ios·小程序·https·uni-app·iphone·html5
white-persist5 小时前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
新中地GIS开发老师6 小时前
Cesium 军事标绘入门:用 Cesium-Plot-JS 快速实现标绘功能
前端·javascript·arcgis·cesium·gis开发·地理信息科学
Superxpang6 小时前
前端性能优化
前端·javascript·vue.js·性能优化
左手吻左脸。6 小时前
解决el-select因为弹出层层级问题,不展示下拉选
javascript·vue.js·elementui
左手吻左脸。6 小时前
Element UI表格中根据数值动态设置字体颜色
vue.js·ui·elementui
李白的故乡6 小时前
el-tree-select名字
javascript·vue.js·ecmascript
Rysxt_6 小时前
Element Plus 入门教程:从零开始构建 Vue 3 界面
前端·javascript·vue.js