This commit is contained in:
2026-05-06 22:20:51 +08:00
parent cd2c90ffb4
commit 4cbb266bec
6 changed files with 70 additions and 49 deletions
+33 -3
View File
@@ -286,27 +286,51 @@ func ApiCalendar(r *gin.RouterGroup) {
}
})
// 获取所有日历(包括已删除的,系统管理员专用)
// 获取所有日历(包括已删除的,管理员专用)
r.POST("/calendar/list_all", func(ctx *gin.Context) {
isAuth, _, _ := AuthenticationAuthority(ctx)
isAuth, user, _ := AuthenticationAuthority(ctx)
if !isAuth {
ReturnJson(ctx, "userCookieError", nil)
return
}
// 限制只有日历管理员可访问
if !slices.Contains(calendarAdmins, user.ID) {
ReturnJson(ctx, "permission_denied", nil)
return
}
// 使用 Unscoped 查询所有日历(包括软删除的)
var calendars []TabCalendar
models.DB.Unscoped().Order("created_at DESC").Find(&calendars)
// 一次性查询所有日历的事件数量(仅统计未删除的事件)
type calendarEventCount struct {
CalendarID uint `gorm:"column:calendar_id"`
Cnt int `gorm:"column:cnt"`
}
var rows []calendarEventCount
models.DB.Model(&TabCalendarEvent{}).
Select("calendar_id, COUNT(*) as cnt").
Where("deleted_at IS NULL").
Group("calendar_id").
Scan(&rows)
eventCountMap := make(map[uint]int)
for _, row := range rows {
eventCountMap[row.CalendarID] = row.Cnt
}
type CalendarWithEdit struct {
TabCalendar
CanEdit bool `json:"canEdit"`
CanEdit bool `json:"canEdit"`
EventCount int `json:"event_count"`
}
var result []CalendarWithEdit
for _, cal := range calendars {
result = append(result, CalendarWithEdit{
TabCalendar: cal,
CanEdit: true,
EventCount: eventCountMap[cal.ID],
})
}
ReturnJson(ctx, "apiOK", gin.H{"list": result})
@@ -320,6 +344,12 @@ func ApiCalendar(r *gin.RouterGroup) {
return
}
// 限制只有日历管理员可操作
if !slices.Contains(calendarAdmins, user.ID) {
ReturnJson(ctx, "permission_denied", nil)
return
}
var from fromRestoreCalendar
if err := mapstructure.Decode(data, &from); err != nil {
ReturnJson(ctx, "jsonErr", nil)