Files
ops2/.workbuddy/memory/2026-05-06.md
T
2026-05-06 21:28:17 +08:00

87 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 英文版
## 新增日历管理页面 /calendars/admin
**功能**:系统管理员查看所有日历列表,包含日程数量、创建者、创建时间。
**新增文件**
- `src/views/calendar/CalendarAdminList.vue` - 日历管理列表组件
**路由修改** `src/router/index.js`
- 新增 `/calendars/admin` 路由,指向 `CalendarAdminList.vue`
- 设置 `meta: { requireSysAdmin: true }` 要求管理员权限
**SysAdminView.vue**
- `tabs` 数组新增 `{ id: 'calendar', label: t('calendar.admin_title'), to: '/calendars/admin' }`
**i18n 新增**
- `zh-CN.json`: `calendar.admin_title = "日历管理"`, `calendar.event_count = "日程数量"`
- `en.json`: `calendar.admin_title = "Calendar Admin"`, `calendar.event_count = "Event Count"`