This commit is contained in:
hero920103 committed 2026-11-11 08:53:14 +08:00
1 parent d9a50e23dd
commit 4f1acaa451
25 files changed
+1265 -335

No files matched your search

+58 -8
View File
@@ -447,14 +447,14 @@ func (c *BackendOaScheduleController) Stats() {
}
type oaSchedulePayload struct {
Title string `json:"title"`
Content string `json:"content"`
ScheduleDate string `json:"schedule_date"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
AllDay int8 `json:"all_day"`
Color string `json:"color"`
Priority int8 `json:"priority"`
Title string `json:"title"`
Content string `json:"content"`
ScheduleDate string `json:"schedule_date"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
AllDay int8 `json:"all_day"`
Color string `json:"color"`
Priority int8 `json:"priority"`
// 提醒绑定:开启后会在提醒工具生成一条提醒任务,并把其 ID 回写到 ReminderID。
ReminderEnabled bool `json:"reminder_enabled"`
ReminderTime string `json:"reminder_time"`
@@ -1157,6 +1157,7 @@ func (c *BackendOaScheduleController) CarrySchedule() {
// 目标日期可选,不传则默认顺延到下一天
var payload struct {
TargetDate string `json:"target_date"`
Mode string `json:"mode"`
}
if raw, e := io.ReadAll(c.Ctx.Request.Body); e == nil && len(raw) > 0 {
_ = json.Unmarshal(raw, &payload)
@@ -1180,7 +1181,56 @@ func (c *BackendOaScheduleController) CarrySchedule() {
targetDate = nextOaDate(normalizeOaDate(item.ScheduleDate), 1)
}
mode := strings.TrimSpace(payload.Mode)
if mode != "" && mode != "to" && mode != "through" {
c.oasJsonErr(400, 400, "延期方式无效")
return
}
now := time.Now()
if mode == "through" {
startDate := normalizeOaDate(item.ScheduleDate)
if targetDate <= startDate {
c.oasJsonErr(400, 400, "延期至日期需晚于当前日程日期")
return
}
// 延期至代表将原日程推至终点日期,并在起始日之后到终点日的每一天创建独立待办。
rootID := oaScheduleRootID(&item)
created := 0
for date := nextOaDate(startDate, 1); date != "" && date <= targetDate; date = nextOaDate(date, 1) {
exists := models.Orm.QueryTable(new(models.OaSchedule)).Filter("is_deleted", 0).
Filter("tid", claims.TenantId).Filter("user_id", claims.UserID).
Filter("source_id", rootID).Filter("schedule_date", date).Exist()
if exists {
continue
}
next := &models.OaSchedule{
Tid: item.Tid, UserID: item.UserID, UserName: item.UserName,
Title: item.Title, Content: item.Content, Images: item.Images,
ScheduleDate: date, StartTime: item.StartTime, EndTime: item.EndTime,
AllDay: item.AllDay, Color: item.Color, Priority: item.Priority,
Status: 0, SourceID: rootID, CarryCount: item.CarryCount + 1,
IsDeleted: 0, CreateTime: now, UpdateTime: &now,
}
if _, insertErr := models.Orm.Insert(next); insertErr != nil {
c.oasJsonErr(500, 500, "生成延期日程失败")
return
}
created++
}
item.Status = 1
item.FinishTime = &now
item.CarryOver = 1
item.CarryToDate = targetDate
item.UpdateTime = &now
if _, updateErr := models.Orm.Update(&item, "Status", "FinishTime", "CarryOver", "CarryToDate", "UpdateTime"); updateErr != nil {
c.oasJsonErr(500, 500, "更新原日程失败")
return
}
c.oasOk(map[string]interface{}{"created": created, "schedule_date": targetDate, "mode": "through"})
return
}
next, msg := carryOaSchedule(&item, targetDate, claims, now)
if msg != "" {
c.oasJsonErr(400, 400, msg)