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;
}
}