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。
This commit is contained in:
+21
-13
@@ -369,17 +369,24 @@ unset($evRef);
|
||||
<?php foreach ($tasks as $t): ?>
|
||||
<?php $late = \App\Task::isOverdue($t['due_at'] ?? null); ?>
|
||||
<?php
|
||||
/* 🔴 v30 第 3 条:「首页,近期任务,任务的名称和前面的点,都应该和主题颜色
|
||||
一样,都保持一致。」
|
||||
用户说的"主题颜色"= **任务模块的主题色**(个人设置里可换的那个)。
|
||||
⚠️ 原来圆点用的是 `var(--brand)` —— 那是**当前页面**(首页)的主题色,
|
||||
不是任务模块的;两者在用户改过模块配色时会不一样
|
||||
(首页 = 砖红,任务可能是别的色),正是用户看到的不一致。
|
||||
⇒ 两条都用同一个 `--tk-c`(= Module::color('tasks')),
|
||||
与右上角「全部任务」按钮的 `--hd-c` 同源,全块一个色。
|
||||
⚠️ 逾期仍用红色:那是状态语义(要显眼),不能被主题色盖掉;
|
||||
但改名后的那个点也统一走 `--tk-c`(不逾期时)。 */
|
||||
$tkColor = \App\Module::color('tasks', (int)\App\Auth::familyId());
|
||||
/* 🔴 v32 第 4 条(用户 2026-10-08):「首页,近期任务,任务的文字和前面的圆点,
|
||||
颜色并没有跟**看板颜色**一致,这个需要修正。」
|
||||
|
||||
⚠️ v30 那轮我把它改成了 `--tk-c`(= **任务模块**的主题色),
|
||||
当时理解成"用户说的主题色"。**理解错了** —— 用户要的是
|
||||
「这条任务属于哪个**看板**」的颜色(任务模块自己早就支持
|
||||
"给看板选颜色",用户原话在第 26 批:「任务在设置看板的时候,
|
||||
可以选择颜色,这样在首页列表中显示的时候,就可以更加直观的
|
||||
看到他属于哪个看板。」)。
|
||||
⇒ 用 `Task::boardColorById(家庭, 看板id)`:
|
||||
看板没设色时它按**看板名派生**一个稳定色(同名永远同色),
|
||||
所以这里不需要任何回退分支。
|
||||
⚠️ 逾期仍用红色(状态语义,不能被看板色盖掉)——
|
||||
但那是"整行变红",与"没逾期时跟看板一致"并不冲突。
|
||||
⚠️ 没归看板的(board_id 为空)走"默认看板"的派生色,
|
||||
与任务模块列表页看到的完全一致(同一函数)。 */
|
||||
$tkColor = \App\Task::boardColorById((int)\App\Auth::familyId(),
|
||||
(int)($t['board_id'] ?? 0) ?: null);
|
||||
?>
|
||||
<li class="dash-row tk-row" data-task-row="<?= (int)$t['id'] ?>"
|
||||
style="--tk-c: <?= e($tkColor) ?>;">
|
||||
@@ -453,11 +460,12 @@ unset($evRef);
|
||||
);
|
||||
if (trim((string)$actorName) === '') { $actorName = '有人'; }
|
||||
?>
|
||||
<li class="ntf-row<?= empty($n['is_read']) ? ' is-unread' : '' ?>">
|
||||
<li class="ntf-row ntf-row-<?= e((string)($n['kind'] ?? '')) ?><?= empty($n['is_read']) ? ' is-unread' : '' ?>">
|
||||
<span class="ntf-kind" aria-hidden="true"><?= \App\Notification::icon((string)($n['kind'] ?? '')) ?></span>
|
||||
<img class="ntf-av" src="<?= e(avatar_url($n['actor_avatar'] ?? null)) ?>" alt="">
|
||||
<a class="ntf-main" href="<?= e(\App\Notification::href($n)) ?>">
|
||||
<span class="ntf-title">
|
||||
<b><?= e((string)$actorName) ?></b><?= e(preg_replace('/^有人/', '', (string)$n['title'])) ?>
|
||||
<b><?= e((string)$actorName) ?></b><?= e(\App\Notification::bodyWithoutActor((string)$n['title'])) ?>
|
||||
</span>
|
||||
<span class="ntf-time"><?= e(fb_time_ago((string)$n['created_at'])) ?></span>
|
||||
</a>
|
||||
|
||||
Reference in New Issue
Block a user