|
|
@@ -244,17 +244,112 @@ export const memoManageMixin = {
|
|
|
}
|
|
|
},
|
|
|
// 根据提醒类型获取对应的颜色
|
|
|
- getReminderTypeColor(type) {
|
|
|
- const colorMap = {
|
|
|
- 1: '#c0c4cc', // 不提醒 - 浅灰色
|
|
|
- 2: '#f56c6c', // 提前1小时 - 红色
|
|
|
- 3: '#e6a23c', // 提前2小时 - 橙色
|
|
|
- 4: '#e6a23c', // 提前3小时 - 橙色
|
|
|
- 5: '#73c0de', // 提前1天 - 天蓝色
|
|
|
- 6: '#98fb98', // 提前2天 - 浅绿色
|
|
|
- 7: '#c0c4cc', // 提前3天 - 浅灰色
|
|
|
+ // 规则:
|
|
|
+ // - reminderType=0:一直灰色
|
|
|
+ // - reminderType!=0:未到提醒触发时间 => 灰色;到达触发时间 => 显示 reminderType 对应颜色
|
|
|
+ // 触发时间 = memoDate + timePeriod(开始时间) - reminderType 对应提前量
|
|
|
+ // 兼容旧用法:
|
|
|
+ // - getReminderTypeColor(row.reminderType)
|
|
|
+ // 推荐用法(可动态判断):
|
|
|
+ // - getReminderTypeColor(row.reminderType, row)
|
|
|
+ getReminderTypeColor(type, row) {
|
|
|
+ console.log('getReminderTypeColor', type, row)
|
|
|
+ const t = Number(type)
|
|
|
+
|
|
|
+ // 不提醒:始终灰色
|
|
|
+ if (!t) return '#c0c4cc'
|
|
|
+
|
|
|
+ // 触发后才显示对应颜色;未触发(或未传row无法判断)统一灰色
|
|
|
+ if (!row || !this._isReminderTriggered(row)) {
|
|
|
+ return '#c0c4cc'
|
|
|
+ }
|
|
|
+
|
|
|
+ // 已触发:按 reminderType 显示对应颜色
|
|
|
+ const triggeredColorMap = {
|
|
|
+ 1: '#f56c6c', // 提前1小时 - 红色
|
|
|
+ 2: '#e6a23c', // 提前2小时 - 橙色
|
|
|
+ 3: '#e6a23c', // 提前3小时 - 橙色
|
|
|
+ 4: '#73c0de', // 提前1天 - 天蓝色
|
|
|
+ 5: '#98fb98', // 提前2天 - 浅绿色
|
|
|
+ 6: '#c0c4cc', // 提前3天 - 浅灰色
|
|
|
+ }
|
|
|
+
|
|
|
+ return triggeredColorMap[t] || '#c0c4cc'
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断是否已到提醒触发时间
|
|
|
+ * 触发时间 = memoDate + timePeriod 的开始时间 - reminderType 对应的提前量
|
|
|
+ * @private
|
|
|
+ */
|
|
|
+ _isReminderTriggered(row) {
|
|
|
+ const reminderType = Number(row?.reminderType)
|
|
|
+ if (!reminderType) return false // 0:不提醒
|
|
|
+
|
|
|
+ const memoDate = row?.memoDate
|
|
|
+ const timePeriod = row?.timePeriod
|
|
|
+ if (!memoDate || !timePeriod) return false
|
|
|
+
|
|
|
+ const { startTime } = this._parseTimePeriod(timePeriod)
|
|
|
+ if (!startTime) return false
|
|
|
+
|
|
|
+ const startAt = moment(`${memoDate} ${startTime}`, 'YYYY-MM-DD HH:mm')
|
|
|
+ if (!startAt.isValid()) return false
|
|
|
+
|
|
|
+ const offset = this._getReminderOffset(reminderType)
|
|
|
+ const remindAt = startAt.clone().subtract(offset)
|
|
|
+ const now = moment()
|
|
|
+
|
|
|
+ // 只在“提前窗口内”触发:remindAt <= now <= startAt
|
|
|
+ return now.isSameOrAfter(remindAt) && now.isSameOrBefore(startAt)
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * timePeriod: "16:00-18:13" -> { startTime: "16:00", endTime: "18:13" }
|
|
|
+ * @private
|
|
|
+ */
|
|
|
+ _parseTimePeriod(timePeriod) {
|
|
|
+ if (!timePeriod || typeof timePeriod !== 'string') {
|
|
|
+ return { startTime: '', endTime: '' }
|
|
|
+ }
|
|
|
+ const arr = timePeriod.split('-')
|
|
|
+ if (arr.length !== 2) {
|
|
|
+ return { startTime: '', endTime: '' }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ startTime: (arr[0] || '').trim(),
|
|
|
+ endTime: (arr[1] || '').trim(),
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * reminderType:
|
|
|
+ * 0 不提醒
|
|
|
+ * 1 提前1小时
|
|
|
+ * 2 提前2小时
|
|
|
+ * 3 提前3小时
|
|
|
+ * 4 提前1天
|
|
|
+ * 5 提前2天
|
|
|
+ * 6 提前3天
|
|
|
+ * @private
|
|
|
+ */
|
|
|
+ _getReminderOffset(reminderType) {
|
|
|
+ switch (Number(reminderType)) {
|
|
|
+ case 1:
|
|
|
+ return { hours: 1 }
|
|
|
+ case 2:
|
|
|
+ return { hours: 2 }
|
|
|
+ case 3:
|
|
|
+ return { hours: 3 }
|
|
|
+ case 4:
|
|
|
+ return { days: 1 }
|
|
|
+ case 5:
|
|
|
+ return { days: 2 }
|
|
|
+ case 6:
|
|
|
+ return { days: 3 }
|
|
|
+ default:
|
|
|
+ return { minutes: 0 }
|
|
|
}
|
|
|
- return colorMap[type] || '#c0c4cc'
|
|
|
},
|
|
|
|
|
|
// 时间处理逻辑已移除,改为直接使用editForm中的startTime和endTime
|