up
This commit is contained in:
@@ -321,11 +321,14 @@ func ApiCalendar(r *gin.RouterGroup) {
|
||||
}
|
||||
})
|
||||
|
||||
// 获取日历事件
|
||||
// 获取日历事件(公开接口,无需登录)
|
||||
r.POST("/calendar/events", func(ctx *gin.Context) {
|
||||
isAuth, _, data := AuthenticationAuthority(ctx)
|
||||
if isAuth {
|
||||
// 直接从 data 中解析,避免 float64 → uint 类型问题
|
||||
data, cookieval := SeparateData(ctx)
|
||||
|
||||
if data == nil {
|
||||
ReturnJson(ctx, "jsonErr", nil)
|
||||
return
|
||||
}
|
||||
calendarIDRaw, ok := data["calendar_id"].(float64)
|
||||
if !ok || calendarIDRaw == 0 {
|
||||
ReturnJson(ctx, "jsonErr", nil)
|
||||
@@ -333,30 +336,47 @@ func ApiCalendar(r *gin.RouterGroup) {
|
||||
}
|
||||
calendarID := uint(calendarIDRaw)
|
||||
|
||||
// 解析日期字符串
|
||||
startStr, _ := data["start"].(string)
|
||||
endStr, _ := data["end"].(string)
|
||||
startDate, _ := time.Parse("2006-01-02", startStr)
|
||||
endDate, _ := time.Parse("2006-01-02", endStr)
|
||||
|
||||
// 查询:当前日历的事件 + 所有公共日程
|
||||
var events []TabCalendarEvent
|
||||
models.DB.Where("calendar_id = ? AND start_date <= ? AND end_date >= ? AND deleted_at IS NULL",
|
||||
calendarID, &endDate, &startDate).Find(&events)
|
||||
models.DB.Where(
|
||||
"(calendar_id = ? OR is_public = ?) AND start_date <= ? AND end_date >= ? AND deleted_at IS NULL",
|
||||
calendarID, true, &endDate, &startDate,
|
||||
).Find(&events)
|
||||
|
||||
// 判断是否已登录
|
||||
var currentUserID uint
|
||||
isLogin := false
|
||||
if cookieval != "" {
|
||||
user, err := AuthenticationAuthorityFromCookie(cookieval)
|
||||
if err == nil {
|
||||
isLogin = true
|
||||
currentUserID = user.ID
|
||||
}
|
||||
}
|
||||
|
||||
// 为事件添加编辑权限标识
|
||||
var relist []map[string]interface{}
|
||||
for _, event := range events {
|
||||
data, _ := json.Marshal(event)
|
||||
var temp map[string]interface{}
|
||||
json.Unmarshal(data, &temp)
|
||||
// 这里可以根据需要添加 edit 字段
|
||||
relist = append(relist, temp)
|
||||
eventMap, _ := json.Marshal(event)
|
||||
var item map[string]interface{}
|
||||
json.Unmarshal(eventMap, &item)
|
||||
|
||||
// 可编辑条件:事件创建者 或 日历管理员
|
||||
canEdit := false
|
||||
if isLogin {
|
||||
if event.UserID == currentUserID || slices.Contains(calendarAdmins, currentUserID) {
|
||||
canEdit = true
|
||||
}
|
||||
}
|
||||
item["canEdit"] = canEdit
|
||||
relist = append(relist, item)
|
||||
}
|
||||
|
||||
ReturnJson(ctx, "apiOK", gin.H{"list": relist})
|
||||
} else {
|
||||
ReturnJson(ctx, "userCookieError", nil)
|
||||
}
|
||||
})
|
||||
|
||||
// 添加日历事件
|
||||
|
||||
Reference in New Issue
Block a user