ant-design-vue日历a-calendar自定义日期

1.日历联动需求 

依旧是记录ai不能一步直达的操作,作为前端开发是需要一步步理解的,不能全依赖于ai开发。

需求:
  • 展示日历视图
  • 根据后台数据判断某一天是否有计划
  • 如果有计划:
    • 所有计划都已完成 → 显示 ✅ 图标
    • 存在未完成计划 → 显示 ❌ 图标
  • 点击某天时触发对应日期的筛选或跳转逻辑

最终效果:

当看完我的逻辑后,希望能举一反三,做更多联动操作。

2.具体操作步骤

1.点击日期操作:
import zhCN from 'ant-design-vue/es/locale/zh_CN'

组件默认为英文,添加cn转换为中文格式 

				<a-config-provider :locale="zhCN">
					<a-calendar v-model:value="calValue" :fullscreen="false" @select="handleCalendarSelect">
						<template #dateCellRender="{ current }">
							<div class="ant-fullcalendar-date">
								<img v-if="isSpecialDate(current) === 'check'" src="../check.png" alt="check-icon" class="calender_icon" />
								<img v-if="isSpecialDate(current) === 'cross'" src="../cross.png" alt="check-icon" class="calender_icon" />
							</div>
						</template>
					</a-calendar>
				</a-config-provider>

 添加@select="handleCalendarSelect"选中日期进行第一步简单联动操作

原始calendar的数据格式是Dayjs格式,直接format需要的格式,如:

const handleCalendarSelect = (value: Dayjs) => {
  const newDate = value.format('YYYY-MM-DD')
  ...接口
}
 2.根据后端传回数据联动

传回数据判断日期上的图标,当天program_status 全为8则显示对钩

const isSpecialDate = (current: any) => {
  const dateStr = current.format('YYYY-MM-DD')
  const filtered = allPlanData.value.filter((item) => item.create_date_time?.startsWith(dateStr))

  if (filtered.length === 0) return false // 不显示图标

  const allSuccess = filtered.every((item) => item.program_status === 8)

  return allSuccess ? 'check' : 'cross' // 返回类型标识符
}

让图标展示在日期右上角, 父级日期的position有relative,所以不用自己写relative。

.ant-fullcalendar-date {
		.calender_icon {
			position: absolute;
			top: -8px;
			right: -8px;
			width: 16px;
			height: 16px;
			z-index: 100;
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值