v71c:首页「通知消息」改成正规卡片,样式直接复用通知页
用户 2026-10-21:
「先把web端的首页修一下,通知消息这个,也是首页的卡片,可以调整顺序和大小。
另外,这个样式也不好看,我看个人头像点击后,通知消息那个页面的样式就不错,
直接复用就可以了。」
① 卡片化(HomeCards 注册表 + 默认布局 + 取数)
· TYPES 新增 'notif'(w4/h4,route=notifications,more=全部通知)
· DEFAULT_LAYOUT 钉在 brief 之后,与 days 并一行(宽 4)——
若插在 brief 与 agenda 之间,agenda/tasks 会被挤成一上一下(实测 C13 顶边 407 vs 751)
· data() 加 case 'notif' → 新增 notifData():最新 10 条 + 未读数,
与原来的取数口径一字不差;关掉卡片就不查这两条 SQL
· templates/home.php 删掉网格前那块写死区块(v30 第 5 条「必须在往年的今天前面」
这条约束作废 —— 那时还没有卡片体系);index.php 不再单独传 notifs/notifUnread
② 样式复用 templates/notifications/index.php
· 结构与通知页完全一致:头像在前 → 正文 → kind 图标在右(带 ntf-kind-{kind})
(旧首页那块是"图标在前、头像第二",正是用户说不好看的那一版)
· 新增 .hc-ntf 作用域只补"卡片比整页小"的三条差异:正文允许折两行(宽 2 时
单行省略会把正文全吃掉)、时间挪到正文下一行、未读数做小注脚
· 不带每条右侧「删除」按钮(4×4 的卡里塞两个按钮会把正文挤成两三个字),
删除在通知页做,卡片右上角有「全部通知」
③ 顺带修掉 v63 A1 抓住的一处:'notif' 的 mod 给 'home' 而不是空串
(通知不在 Module::LIST,但它是首页自己的卡片;空串会让「全部通知」成为
一排同色模块按钮里唯一白底 ghost 的那个)
⇒ TYPES docstring 立规矩:route 非空就必须有 mod,认不出归哪个模块就归 home
验证(familybook_push.sh 第 6 轮全绿,PUSH_RC=0,2h11m)
v62 首页卡片 56/0 · v62 反向验证 14/0(新增 M8–M12 五条注入)
b30 通知 16/0 · b30 反向验证 18/0
v63 40/0 · v63 反向验证 51/0 · e2e 1523/0 · 部署静态断言空跑 RC=0
同批带上上一轮 v70/v71 的日历修复(已单独验过,本轮流水线一并回归):
· v70 日历导入后条目不显示:+N 条从纯文本 span 改成真按钮,点开是当天全部
条目浮层;AJAX 新建后就地插入与服务端同形(回 entry,不让前端自己拼)
· v71 ICS 导入顺序:主事件 → 覆盖行 → EXDATE 由 Calendar::importIcs() 统一保证
This commit is contained in:
+65
-2
@@ -2724,7 +2724,45 @@ body[class] .semi-datepicker-day-inhover { background-color: color-mix(in srgb,
|
||||
}
|
||||
.cal-ev:hover { text-decoration: none; filter: brightness(1.08); }
|
||||
.cal-ev.is-allday { font-weight: 500; }
|
||||
.cal-more { font-size: 11px; color: var(--faint); padding-left: 2px; }
|
||||
/* 🔴 v70(用户 2026-10-20 第 2 条):「日历导入进去了,但是不显示」。
|
||||
原来这里是 `.cal-more` 一颗**纯文本 <span>** —— 点不动,于是被它折叠掉的条目
|
||||
(用户自己导入的日程全在里面)**永远看不到**。
|
||||
现在改成真正的按钮:可点、有热区、有 hover 反馈,点开是"当天全部条目"浮层。 */
|
||||
.cal-more {
|
||||
display: block; width: 100%; margin: 0; padding: 1px 4px;
|
||||
border: 0; border-radius: 5px; background: transparent;
|
||||
font: inherit; font-size: 11px; line-height: 1.5; text-align: left;
|
||||
color: var(--faint); cursor: pointer;
|
||||
}
|
||||
.cal-more:hover { background: var(--hov-veil); color: var(--brand); }
|
||||
.cal-more:focus-visible { outline: 2px solid var(--brand); outline-offset: 1px; }
|
||||
|
||||
/* ---- 当天全部条目浮层(v70)----
|
||||
⚠️ 复用 `.cal-modal` 那一套(遮罩 / 居中面板 / 头尾不滚动),
|
||||
只补列表本身。为什么还要独立一份而不是套用条目详情层:
|
||||
那是"一条"的详情,这是"一天"的清单 —— 两者可以叠用(清单 → 某条详情)。 */
|
||||
.cal-day-modal .cal-modal-panel { width: min(460px, 100%); max-height: calc(100vh - 80px); }
|
||||
.cal-day-body { padding: 8px 10px 10px; }
|
||||
.cal-day-item {
|
||||
display: flex; align-items: baseline; gap: 10px; width: 100%;
|
||||
padding: 9px 10px; margin: 0; border: 0; border-radius: 8px;
|
||||
background: transparent; font: inherit; text-align: left; cursor: pointer;
|
||||
color: var(--ink);
|
||||
}
|
||||
.cal-day-item + .cal-day-item { margin-top: 2px; }
|
||||
.cal-day-item:hover { background: var(--hov-veil); }
|
||||
.cal-day-when {
|
||||
flex: 0 0 auto; min-width: 74px; font-size: 12px; color: var(--muted);
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
.cal-day-name { flex: 1 1 auto; font-size: 13.5px; line-height: 1.45; word-break: break-word; }
|
||||
/* 派生条目(农历/节气/节假日)略淡:它们天天都有、信息密度低,
|
||||
视觉上让位给用户自己填的日程 */
|
||||
.cal-day-item.is-derived .cal-day-name { color: var(--muted); }
|
||||
/* 底栏三样:左「加一条」、中提示、右「在日视图里看」。
|
||||
名单长的时候底栏会被挤 → 允许换行,别让 HarfBuzz 把按钮压扁。 */
|
||||
.cal-day-foot { flex-wrap: wrap; gap: 8px; }
|
||||
.cal-day-foot .cal-modal-tip { flex: 1 1 auto; }
|
||||
.ev-del { margin-top: 16px; }
|
||||
.cal-share-name { font-size: 13px; color: var(--muted); }
|
||||
|
||||
@@ -5414,9 +5452,34 @@ h5.md-h, h6.md-h { font-size: 14px; }
|
||||
.ntf-time { flex: 0 0 auto; font-size: 12px; color: var(--faint); font-variant-numeric: tabular-nums; }
|
||||
.ntf-kind { flex: 0 0 auto; font-size: 15px; line-height: 1; }
|
||||
.ntf-del { flex: 0 0 auto; }
|
||||
/* 首页那块:行距紧一点(它只是"瞥一眼",不是消息中心) */
|
||||
/* 旧首页那块用的紧凑行距类 —— v71c 之后**没人用了**(通知已改成卡片,走 `.hc-ntf`)。
|
||||
留着这条是为了让"线上老页面截屏/老缓存"不突然变松;**新代码不要再挂这个类**。 */
|
||||
.ntf-list-home .ntf-row { padding: 6px 8px; }
|
||||
|
||||
/* ---- v71c(用户 2026-10-21):通知消息变成首页卡片 ----
|
||||
用户原话:「通知消息这个,也是首页的卡片,可以调整顺序和大小。另外,这个样式也
|
||||
不好看,我看个人头像点击后,通知消息那个页面的样式就不错,直接复用就可以了。」
|
||||
⇒ 结构与 `.ntf-*` **完全复用**(头像在前、kind 图标在右),这里只补"卡片比整页小"
|
||||
带来的三条差异:
|
||||
① `.hc-ntf` 的作用域里**允许正文折行** —— 卡片可能只有 2 格宽(一排四张里的一张),
|
||||
单行省略会把「有人把你加进了观影「…」」全吃掉,只剩一个名字(那就是"不好看");
|
||||
② 时间挪到正文下面自己一行(窄卡里横着排会把正文挤没);
|
||||
③ 未读数做成一条小注脚(原来它挂在卡片外的 `<h1>` 上,卡片里没有那个位置)。
|
||||
⚠️ 只在 `.hc-ntf` 下改,**不影响**通知页那一整页(那里宽度足够,单行更好读)。 */
|
||||
.hc-ntf .ntf-row { align-items: flex-start; }
|
||||
.hc-ntf .ntf-main { flex-direction: column; align-items: stretch; gap: 1px; }
|
||||
.hc-ntf .ntf-title {
|
||||
white-space: normal;
|
||||
display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
|
||||
line-height: 1.4; word-break: break-word;
|
||||
}
|
||||
.hc-ntf .ntf-time { font-size: 11.5px; }
|
||||
.hc-ntf .ntf-kind { margin-top: 2px; }
|
||||
.hc-ntf-note {
|
||||
margin: 0 0 6px; font-size: 12px; color: var(--brand-ink, var(--brand));
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
/* 窄屏把时间挪到下一行,别把标题挤成两三个字 */
|
||||
.ntf-main { flex-wrap: wrap; gap: 2px 10px; }
|
||||
|
||||
Reference in New Issue
Block a user