# 2026-05-06 日志 ## 日历事件日程类型功能 ### 修改内容 - **后端** `routers/apiCalendar.go`: - `TabCalendarEvent` 结构体新增 `ScheduleType string` 字段(默认值 work) - `addevent`/`updateevent` 接口解析并保存 `schedule_type` 参数 - **前端** `CalendarDetail.vue`: - `eventData` 新增 `scheduleType` 字段 - `openEventModal`/`editEvent` 传递 `scheduleType` - `selectColor` 函数联动更新 `scheduleType` - `saveEvent`/`eventDrop` 提交 `schedule_type` - `getEvents` 返回数据附加 `extendedProps.scheduleType` - 模态框显示日程类型标签 - **i18n**: - `zh-CN.json`: 新增 `event_type: "日程类型"` - `en.json`: 新增 `event_type: "Event Type"` ### 日程类型选项 - work - 工作 - duty - 值班 - exam - 考试 - standby - 备用 - personal_holiday - 个人假期 - public_holiday - 公众假期 ### 注意事项 - GORM AutoMigrate 会自动添加新字段 - 前端颜色选择与日程类型联动 ## 修复:calendar/events jsonErr **问题**:`fromGetCalendarEvents` 的 `start/end` 是 `*time.Time` 类型,无法直接解析字符串格式的日期。 **修复**:改为直接用类型断言解析字符串,用 `time.Parse("2006-01-02", ...)` 解析。 ## 优化:BgColor 弃用,前端根据 ScheduleType 渲染颜色 **前端**:添加 `getColorByScheduleType()` 函数,`getEvents` 中使用 scheduleType 映射颜色。 **后端**:只存储 ScheduleType,不处理颜色逻辑。颜色完全由前端 `colorOptions` 控制。 ## CalendarDetail 滚动标题快照对比 **功能**:每次 getEvents 存快照,数据变化或宽度变化时重新计算标题滚动。 **实现**: - `pageData.lastEventsSnapshot`:存储上一次的 JSON 快照 - `getEvents()` 末尾对比快照,变化则 `setTimeout(recalcScrollTitles, 150)` - `ResizeObserver` 监听日历容器宽度变化,防抖 150ms 后重算 - `applyScrollToTitle()`:清除旧状态 → 测量 overflow → 设置 `--scroll-distance` 和 `data-truncated` 属性 ## CalendarList 编辑/删除按钮改用 canEdit **改动**: - `CalendarList.vue`:编辑/删除按钮 `v-if` 条件从 `calendar.UserID === userStore.userInfo?.ID` 改为 `calendar.canEdit` - 移除废弃的 `useUserStore` 导入 ## CalendarList 删除改用 ConfirmDialog 组件 **改动**: - `CalendarList.vue` 导入并使用 `ConfirmDialog` 组件 - 新增 `showDeleteModal` + `deletingCalendar` 状态 - `deleteCalendar()` 改为打开确认弹窗,`confirmDelete()` 执行实际删除 API - i18n 新增 `calendar.confirm_delete_message`:zh-CN「确定要删除日历「{name}」吗?此操作不可撤销。」,en 英文版