Files
ops2/.workbuddy/memory/2026-05-06.md
T
2026-05-06 20:36:52 +08:00

2.6 KiB
Raw Blame History

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

问题fromGetCalendarEventsstart/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-distancedata-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 英文版