laoyang
|
df6fe894d0
|
v32 第 32 批(4 条):资源共享弹框真落库 / 消息通知覆盖全部共享入口 / 浏览器通知(站内消息+日程到期提醒) / 首页任务随看板色
用户原话:
①「资源共享功能有问题,弹框中,点击共享给某个人后,弹框消失,但是并没有共享成功。」
②「消息通知,在所有引用自己的地方,都通知,包括别人分享了日历本给自己,
分享了笔记给自己,分享了资源给自己等等。」
③「当有消息通知时,还有日历中日程到期提醒时,比如一个日程,设置了10点开始,
提前十分钟提醒,则需要在 9:50 时浏览器中发提醒通知。」
④「首页,近期任务,任务的文字和前面的圆点,颜色并没有跟看板颜色一致,这个需要修正。」
四条真根因:
① v28 把资源编辑改成三页签后,每个页签各有自己的 form 与 <input name=id>,
而设 id 的代码是 panel.querySelector() → 只命中文档序第一个(info 的 update),
⇒ share/att 表单的 id 恒空 ⇒ 提交 id=0 ⇒ Resource::find(familyId,0,me) 返回 null
⇒ 静默不共享。修:表单打 data-res-idform 标记 + querySelectorAll 逐个填。
② v30 只在 saveAttendees 后调 syncForTarget,6 个共享入口一个都没接。
新增 Notification::syncShares(家庭,类型,宿主id,动作人) —— 照共享表现状重建差额
(写表后调用;漏调只会没通知,不会状态不一致)。SHARE_KINDS 抽常量。
③ 完全没有浏览器通知。新增 Calendar::remindersBetween()(窗口留 -2 分钟防后台节流)
+ ?r=notifications/poll JSON 路由 + assets/js/notify.js(轮询 + Notification API
+ id@at 去重)+ 顶栏铃铛(权限只能用户点一下才要,自动申请会被 Chrome 静默拒绝)。
④ v30 把用户那句和主题颜色一样理解成了**任务模块主题色**,用户要的是**看板色**。
新增 Task::boardColorById(家庭,看板id)(没设色按看板名派生稳定色),home.php 两处改 $tkColor。
验证:诊断探针 18/0、真机 25/0(真点共享→库里真的多一行;三类共享真发通知;
9:50 窗口真算出 10:00 那条;首页每条任务色 == 其看板色)、反向 5/0、
e2e 1502/0、升级 153/0、几何 428+680+92、城市 32/0。
部署脚本静态断言段本地空跑通过;线上站点自检 19 条全过,notifications/poll 未登录 302。
|
2026-10-09 07:25:08 +08:00 |
|
laoyang
|
2a10df2557
|
v30 后半(5 条):导入框选中反馈+单选 / 首页日程改色块 / 近期任务主题色 / 时间冲突错开 / 通知消息模块
用户 2026-10-08 第二批 5 条。
1. 导入日程选中文件后没有任何反应 + 不允许多选
`_stage_drop.php` 现在有两种模式:暂存型(附件,拖进来即刻上传)与导入型
(`$sdStage=false`,写回 input.files、随表单提交、PHP 读完即弃)。
暂存型框靠 queueDrop 画缩略图,而**导入型框选中文件后什么都不显示** ——
框里那句「点击或拖动进行上传」从头到尾不变,用户看不出"到底选上没有"。
改:app.js 新增 bindFileEcho(),只给**非暂存框**补 change 监听,
选中后框里的话换成文件名 + 图标变 ✓ + `.upbox.is-picked` 稳定态;
取消选择则还原原始文案(不是空字符串)。单选由 `$sdMultiple=false` 保证。
2. 首页「今天的日程」用色块表示,和日程保持一致
原来那套是"白底卡片 + 左边一条 3px 色线",色只占一条线,看不出是哪个日历本。
改:与日历页 `.tg-block` 同款实心色块(底色=日历本色,白字,圆角,无阴影),
left/width/top/height 全部由内联给出(冲突分列 + 真实时长)。
⚠️ `.ag-ev` 的 CSS 里去掉 `right` —— 绝对定位下 left+right+width 三者同时存在是
过约束,内联 width 会失效(冲突就不会错开了)。
3. 首页「近期任务」名称与圆点走任务模块主题色
原来用 `var(--brand)` —— 那是**当前页面**(首页)的主题色,不是任务模块的;
用户改过模块配色时两者不一致(首页砖红、任务别的色),正是他看到的"不一致"。
改:两处都走 `--tk-c`(= Module::color('tasks')),与右上角「全部任务」按钮同源。
逾期仍用红色(状态语义,不能被主题色盖掉)。
4. 日程时间冲突错开(算法借鉴 SyncCalendar)
用户指定去读 SyncCalendar 的算法。落地自
`entry/src/main/ets/common/TimelineUtil.ets` 的 build()/groupsOf():
① 划分冲突组(与组内最晚结束仍重叠就并入);② 组内贪心分列(区间图着色),
列数 = **每组各自的最大同时重叠数**(sync 原注释点名的反例:传递性重叠但
B/C 不重叠 → 只该 2 列)。落成 `App\Calendar::conflictLanes()`(PHP,判据一字未改)。
⚠️ 两处比原算法更细,都有单测钉住:
· 列数按**组**算 —— 否则一个孤立日程会被别处的三方冲突连累成 1/3 宽;
· "缺结束时间"不能一律按 30 分钟参与冲突(会与后面所有日程假冲突),
改为优先拿**同列下一条的起点**当它的视觉结束 → 因此必须**先分列再算高度**。
首页与日历页共用同一套(用户第 2 条要求"和日程保持一致")。
5. 通知消息模块(Schema v30 → v31)
不在导航显示,入口在头像下拉里、**排在个人设置之前**,名字「通知消息」;
有人在观影/旅程加我时发通知;通知出现在首页、**往年今天之前**。
新增:app/Notification.php + notifications 表(唯一键
(person_id,target_type,target_id) —— 参与人是整组替换,没有它改三次标题就收三条)+
?r=notifications{,/del,/clear} + templates/notifications/index.php + 头像下拉未读角标 +
app/helpers.php 的 fb_time_ago()。
⚠️ 三条设计判断:不进 Module::LIST(进去就会被顶栏渲染、被"模块显示与排序"当开关);
只在 person_id !== actor_id 时发(不给自己发,"通知"≠流水账);
移出参与人**撤销未读**、**保留已读**(未读是没送达的提醒,已读是看过的历史)。
验证(全部 0 失败):e2e 1478/0(+14 条新断言)、升级 153/0、vCard 40 项、城市 32/0、
几何 428/0 + 移动 680/0 + 交互 92/0、b24/b27/b28/b29 真机全绿;
冲突分列算法单测 12/0(含 SyncCalendar 点名的反例)、
新探针 _b30_ui2 16/0 + _b30_notify 16/0 + _b30_import 26/0、
反向验证 18/0(五条各自改回旧行为 → 断言全红)、
部署脚本新增 9 条守卫 + 守卫证伪 11/0。线上 11 文件 SHA256 一致,Schema v31 已升级。
|
2026-10-08 17:41:30 +08:00 |
|