希望在有日历事件的日期上,能有个标记,比如红点。 例如 1 日到 9 日,8 日有事件,就在 8 号显示一个小红点。
这个功能以前有,被主动去掉了。 用户原话:
咱们之前是有小红点的,不过当时显示得太多了,每个日历本下边都显示小红点。 比方说一共有三个日历本,在某一个日期有小红点、有日程的话, 它会在那个日期下面显示三个小红点,太多了,我就把它去掉了。
根因:红点是按日历本逐个渲染的 —— N 个本在同一日期都有事件,就渲染 N 个点。 有 15 个本时(本机实测镜像就是 15 个本),一个月视图能被点成筛子。
每个日期最多一个红点。 只要该日期有任意事件,就显示 1 个, 不区分是哪个本、有几个本、有几条事件。
用户原话:
只要某个日期有事件,就在这个日期下边显示一个小红点,告诉大家这个日期下边其实是有事件的。 也别显示那么多了,显示得太多,显得有点乱。
entry/src/main/ets/pages/Index.ets 里 grep -n 'dot\|Dot\|红点' 零命中 ⇒ 旧实现已彻底删除,需要重新实现(但不是从零设计,需求已明确)。
entry/src/main/ets/pages/Index.ets
grep -n 'dot\|Dot\|红点'
相关结构:
monthBody()
dayCell(cell: MonthCell)
dayCell
cell.lunar
MonthCell
events
hasEvent: boolean
wideLayout
Set<number>
应用市场用户反馈的第3条;纯前端月视图展示标记,与 #4 默认时间、#5 待办读写互不相干
已随 0.2.0 实现并在真机验证通过,关闭。
原单要求「每个日期最多一个红点」,实际落地为:
soft_red
纯红(#D93025)在本应用里语义是"告警",而"这天有安排"是中性信息。 浅红是柔和提示,不抢日期数字。用户看过后确认采用。
选中/今天改为正圆底(46vp 正方形 + 50% 圆角):
dayCellCircle
showWeekLabel
圆点在下方 = 是
monthDataVersion
reloadEvents()
@State
rebuildPagesFor(y,m)
No dependencies set.
The note is not visible to the blocked user.
用户反馈(应用市场评价)
历史背景(重要)
这个功能以前有,被主动去掉了。 用户原话:
根因:红点是按日历本逐个渲染的 —— N 个本在同一日期都有事件,就渲染 N 个点。
有 15 个本时(本机实测镜像就是 15 个本),一个月视图能被点成筛子。
本次要求(明确)
每个日期最多一个红点。 只要该日期有任意事件,就显示 1 个,
不区分是哪个本、有几个本、有几条事件。
用户原话:
现状
entry/src/main/ets/pages/Index.ets里grep -n 'dot\|Dot\|红点'零命中 ⇒旧实现已彻底删除,需要重新实现(但不是从零设计,需求已明确)。
相关结构:
monthBody()→dayCell(cell: MonthCell)dayCell现有内容:日期数字、农历(cell.lunar)、选中/今天高亮MonthCell结构 + 已加载的events(月视图已有按日聚合计数的能力)实现要点
MonthCell加一个布尔(或计数)标记,如hasEvent: boolean,在构造月视图单元格时按"该日期是否存在任意事件"置位。
⚠️ 只用一个布尔,不要存每本的集合 —— 正是"每本一个点"导致上次被砍。
dayCell里在农历下方加一个小圆点,(月历格子里 30 个点全红会很吵;用户说"显得有点乱"就是嫌吵)
wideLayout)下月历格子变窄、农历已省略,点也要保留或相应调整先用一次遍历把"有事件的日期"收进
Set<number>(按 dayStart 归一化),再渲染时 O(1) 查。
需要注意的边界
(若用户希望待办也提示,再单独说)
验收标准
为什么单独建单
应用市场用户反馈的第3条;纯前端月视图展示标记,与 #4 默认时间、#5 待办读写互不相干
已随 0.2.0 实现并在真机验证通过,关闭。
最终实现(与原要求的差异)
原单要求「每个日期最多一个红点」,实际落地为:
soft_red:浅色 #F2938A / 深色 #C97A72为什么不用纯红
纯红(#D93025)在本应用里语义是"告警",而"这天有安排"是中性信息。
浅红是柔和提示,不抢日期数字。用户看过后确认采用。
选中态
选中/今天改为正圆底(46vp 正方形 + 50% 圆角):
dayCellCircle),仅多传showWeekLabel—— 之前两个视图各写一套导致圆大小/字号/间距反复对不齐
真机验证证据(dump 实测)
圆点在下方 = 是)664;星期「一」y497534、日期 y537612、648、事件点×7 y651~662 —— 全部在圆内,无溢出农历 y615
顺带修复的相关缺陷
导致整棵子树被复用、itemGenerator 不重跑(加
monthDataVersion)reloadEvents()是 async 但被当作同步调用 +@State赋值在同一同步栈内不可读(改为
rebuildPagesFor(y,m)显式传参)已随 0.2.0 实现并在真机验证通过,关闭。
最终实现(与原要求的差异)
原单要求「每个日期最多一个红点」,实际落地为:
soft_red:浅色 #F2938A / 深色 #C97A72为什么不用纯红
纯红(#D93025)在本应用里语义是"告警",而"这天有安排"是中性信息。
浅红是柔和提示,不抢日期数字。用户看过后确认采用。
选中态
选中/今天改为正圆底(46vp 正方形 + 50% 圆角):
dayCellCircle),仅多传showWeekLabel—— 之前两个视图各写一套导致圆大小/字号/间距反复对不齐
真机验证证据(dump 实测)
圆点在下方 = 是)664;星期「一」y497534、日期 y537612、648、事件点×7 y651~662 —— 全部在圆内,无溢出农历 y615
顺带修复的相关缺陷
导致整棵子树被复用、itemGenerator 不重跑(加
monthDataVersion)reloadEvents()是 async 但被当作同步调用 +@State赋值在同一同步栈内不可读(改为
rebuildPagesFor(y,m)显式传参)