a-calendar 日历组件选择一周

方法:先获取日历每个节点的标签,通过判断title属性是否在选择的周内,如果是则把一周的标签父级加上选中周类名,其他移除

效果如图:
在这里插入图片描述

类名参考日期选择框周组件
类名参考日期选择框周组件

<a-calendar 
	v-model:value="month" 
	@select="onPanelSelect" 
	@panelChange="panelChange" 
	valueFormat="YYYY-MM-DD" 
	:fullscreen="false"
/>

  // 点击选择日期回调
  const onPanelSelect = (date)=>{
    let list = getWeekNumber.getDayWeekRange(date,'YYYY-MM-DD')
    // 通过判断标签属性title是否在 当周内,是则加上被选中类名
    nextTick(()=>{
      let elements = document.querySelectorAll(".ant-picker-cell");  
      elements.forEach(element=>{
        let customAttr = element.getAttribute("title"); 
        if(list.find(item=> item==customAttr )) {
          element.parentNode.classList.add("ant-picker-week-panel-row-selected");
        }else{
          element.parentNode.classList.remove("ant-picker-week-panel-row-selected");
        }
      })
      loadData()
    })
  }
  
  // 日期面板变化回调
 const panelChange = (date,mode)=> {
    if(mode=='month' && isDateInCurrentMonth(date)) setTimeout(()=>onPanelSelect(date))
 }

// 获取点击日期所在周
const getDayWeekRange = (curDay,format)=>{ 
    const now = new Date(curDay);  
    const day = now.getDay(); // 获取今天是周几(0代表周日,1代表周一,依此类推)  
    const diff = now.getDate() - day + (day === 0 ? -6 : 1); // 计算调整后的日期  
    const firstDay = new Date(now.setDate(diff)); // 设置起始日期为周一  
    const lastDay = new Date(firstDay);  
    lastDay.setDate(lastDay.getDate() + 6); // 计算结束日期为周日  
    const datesOfWeek = [];  
    for (let date = new Date(firstDay); date <= lastDay; date.setDate(date.getDate() + 1)) {  
        datesOfWeek.push(dayjs(new Date(date)).format(format));  
    }  
    return datesOfWeek;  
}  
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值