```
feat: 添加自定义提醒功能并优化项目配置 - 添加 CustomReminder 模型支持自由文案周期性提醒功能 - 实现自定义提醒的 UI 界面,包括新建、编辑和列表展示 - 集成本地通知服务支持自定义提醒的时间触发 - 更新项目配置文件添加应用显示名称和加密声明 - 修正 iOS 部署目标版本从 26.0 到 17.0 - 修复 FileDownloader 中的线程安全问题 - 优化 ModelManifest 和 Localization 的并发安全性 - 扩展本地化字符串支持多语言提醒相关文本 - 调整项目支持平台范围仅保留 iphoneos 和 iphonesimulator ```
This commit is contained in:
@@ -263,6 +263,58 @@ final class MetricReminder {
|
||||
}
|
||||
}
|
||||
|
||||
/// 自由文案的周期性提醒(如「每天 20:00 跑步 5 公里」「每天 12:30 吃 2 片护肝片」)。
|
||||
/// 与 `MetricReminder`(去记录某指标)语义独立:这里是用户自定义的动作提醒,
|
||||
/// 量词(5 公里 / 2 片)直接写在 `title` 自由文本里。
|
||||
/// 周期粒度沿用 weekday 约定(全 7 = 每天);本地通知调度见 `ReminderService`。
|
||||
@Model
|
||||
final class CustomReminder {
|
||||
@Attribute(.unique) var id: UUID
|
||||
var title: String // 用户文案,如 "跑步5公里"
|
||||
var note: String // 可选备注 → 通知正文
|
||||
var hour: Int // 0...23
|
||||
var minute: Int // 0...59
|
||||
var weekdays: [Int] // iOS Calendar 约定:1=日, 2=一, ..., 7=六。全 7 个 = 每天
|
||||
var enabled: Bool
|
||||
var createdAt: Date
|
||||
var updatedAt: Date
|
||||
|
||||
init(id: UUID = UUID(),
|
||||
title: String,
|
||||
note: String = "",
|
||||
hour: Int = 8,
|
||||
minute: Int = 0,
|
||||
weekdays: [Int] = [1, 2, 3, 4, 5, 6, 7],
|
||||
enabled: Bool = true,
|
||||
createdAt: Date = .now) {
|
||||
self.id = id
|
||||
self.title = title
|
||||
self.note = note
|
||||
self.hour = max(0, min(23, hour))
|
||||
self.minute = max(0, min(59, minute))
|
||||
self.weekdays = weekdays
|
||||
self.enabled = enabled
|
||||
self.createdAt = createdAt
|
||||
self.updatedAt = createdAt
|
||||
}
|
||||
|
||||
var isEveryDay: Bool { Set(weekdays) == Set(1...7) }
|
||||
|
||||
/// 与 MetricReminder.frequencyLabel 同款,复用同一批本地化 key。
|
||||
var frequencyLabel: String {
|
||||
if !enabled { return String(appLoc: "已关闭") }
|
||||
if isEveryDay { return String(appLoc: "每天") }
|
||||
if weekdays.isEmpty { return String(appLoc: "未选日") }
|
||||
let names = [String(appLoc: "日"), String(appLoc: "一"), String(appLoc: "二"), String(appLoc: "三"), String(appLoc: "四"), String(appLoc: "五"), String(appLoc: "六")]
|
||||
let sorted = weekdays.sorted()
|
||||
return String(appLoc: "每周 ") + sorted.map { names[$0 - 1] }.joined()
|
||||
}
|
||||
|
||||
var timeLabel: String {
|
||||
String(format: "%02d:%02d", hour, minute)
|
||||
}
|
||||
}
|
||||
|
||||
@Model
|
||||
final class ChatTurn {
|
||||
var question: String
|
||||
|
||||
Reference in New Issue
Block a user