feat: add calendar scheduling feature for agent teams

- Implemented FindCalendarSchedules method in agentTeamScheduleService to retrieve schedules within a specified time range.
- Added new API endpoint fetchAgentTeamScheduleCalendar to fetch schedules for the calendar view.
- Created ScheduleCalendar component to display agent team schedules in a calendar format with drag-and-drop functionality for moving and resizing schedules.
- Updated EditDialog component to support deleting schedules and handling default values for new entries.
- Enhanced DashboardAgentTeamSchedulesPage to toggle between calendar and list views, and to load calendar data based on selected week.
- Added tests for FindCalendarSchedules to ensure correct schedule retrieval and validation of time ranges.
This commit is contained in:
mlogclub
2026-04-29 09:23:54 +08:00
parent ce8a8d5bcc
commit 8646b002c1
10 changed files with 895 additions and 139 deletions
@@ -31,6 +31,28 @@ func (c *AgentTeamScheduleController) AnyList() *web.JsonResult {
return web.JsonData(&web.PageResult{Results: results, Page: paging})
}
func (c *AgentTeamScheduleController) AnyCalendar() *web.JsonResult {
if _, err := services.AuthService.RequirePermission(c.Ctx, constants.PermissionAgentTeamScheduleView); err != nil {
return web.JsonError(err)
}
startAt, _ := params.Get(c.Ctx, "startAt")
endAt, _ := params.Get(c.Ctx, "endAt")
teamID, _ := params.GetInt64(c.Ctx, "teamId")
list, err := services.AgentTeamScheduleService.FindCalendarSchedules(request.AgentTeamScheduleCalendarRequest{
StartAt: startAt,
EndAt: endAt,
TeamID: teamID,
})
if err != nil {
return web.JsonError(err)
}
results := make([]response.AgentTeamScheduleResponse, 0, len(list))
for _, item := range list {
results = append(results, buildAgentTeamScheduleResponse(&item))
}
return web.JsonData(results)
}
func (c *AgentTeamScheduleController) GetBy(id int64) *web.JsonResult {
if _, err := services.AuthService.RequirePermission(c.Ctx, constants.PermissionAgentTeamScheduleView); err != nil {
return web.JsonError(err)