v28 第 28 批(12 条):名册分组改标签 / 资源合并为两按钮 / 首页定位与主题色 / 笔记富文本双模式
其中 4 条是**上批遗漏的真 bug**(1/4/8/9),根因已逐条定位:
1. 首页日程没定位到红线 —— 真根因:刻度区间**不含当前时刻** → $showNow=false
→ 红线**整个不渲染**,而定位脚本用同一个越界比例算目标,被 clamp 到底部。
修:把当前小时并进区间端点(现在必然落在区间内)。
2. 「看整月」→「更多日程」+ 日程主题色;3. 「手头在做」→「近期任务」、
「任务看板」→「全部任务」+ 任务主题色(注入 --hd-c,不再写死白底)。
4. 任务复选框提示还在 —— 真根因:**JS 在点击后**给状态徽标挂 title
(`badge.setAttribute('title',…)`),上批只去了静态渲染,静态断言永远抓不到。
5. 名册「分组」→「标签」(用户:一个人可能既是小学同学又是初中同学,没法分组):
新增 person_tags(每人一份、一人多标签),名册改**平铺 + 顶部标签筛选**;
🔴 迁移用**一次性哨兵**(第一版用 NOT EXISTS,实测被"用户清空标签"绕过 → 旧分组名被灌回)。
6. 名册卡片按钮加语义底色。
7. 资源四按钮 → **编辑 / 删除**两颗:三块内容进一个带页签的弹框(信息/附件/共享)。
8. 财务多选数字不变 —— 真根因:前端发 `kinds=a,b`(逗号串),服务端 `(array)` 收成
单元素 → 求交为空 → **静默回落整本账**。修:两种形状都收。
9. 微信读书偶发很慢 —— 真根因:syncNow 扫 60 本 × 每本 1~3 次网关调用(单次超时 20s),
全同步阻塞在列表页请求里。修:总时长预算 + 单次超时 8s + 自动/手动分批。
10. 新增全局可见的联想接口库(6 个实测可用来源)+ 三种新解析类型。
11. 导航右上角「设置」:默认进"添加网址 + 全部网址",四类设置收进 ?set=1 视图。
12. 笔记:段落/清单支持 Markdown(自研渲染器,**不允许原始 HTML**),
实时预览走服务端(前后端只一份规则);底部附件上传;清单多级;
列表改**定尺寸卡片网格**(溢出显示摘要、图片缩放下方);按用户要求**去掉标签侧栏**。
This commit is contained in:
+25
-4
@@ -148,7 +148,7 @@ $todayMarks = $todayMarks ?? ['tags' => [], 'line' => ''];
|
||||
首页要回答的是"我手头在做什么",所以主数字用「在做」的口径;
|
||||
排队的那些(todo)另给一个小字,不必让人点进任务页才知道还有多少。 */ ?>
|
||||
<a class="hbs" href="<?= e(url('tasks')) ?>"
|
||||
title="手头在做(进行中 + 已逾期的待办)">
|
||||
title="近期任务(进行中 + 已逾期的待办)">
|
||||
<b><?= count($tasks ?? []) ?></b> 件在做
|
||||
</a>
|
||||
<?php if ((int)($stat7['todos'] ?? 0) > 0): ?>
|
||||
@@ -208,6 +208,20 @@ if ($timed) {
|
||||
// 前后各留一小时:紧了会让人以为"到点就结束了",松了又浪费高度
|
||||
$startH = max(0, intdiv(min($mins), 60) - 1);
|
||||
$endH = min(24, intdiv(max($mins), 60) + 2); // +2 = 跨过那一小时再收尾
|
||||
/* 🔴 v28 用户第 1 条:「今天的日程,并没有定位到红线所在的位置」。
|
||||
根因:**区间里没有"现在"**,于是红线不画、定位算出来是个越界的值。
|
||||
(实测:现在 22:44、日程 09:00 与 14:00 → 区间掐成 08–17,
|
||||
`$nowPos = (22-8)/9 = 1.56` → `$showNow=false` → `class="ag-now"` 整个不渲染;
|
||||
而定位脚本用同一个越界的 RATIO 去乘网格高度,被 clamp 到最底 → 停在底部。)
|
||||
⇒ 修法不是"没红线就别定位",而是**让区间永远包含当前时刻**:
|
||||
用户要的正是"一眼看到现在处在哪儿",那就必须把"现在"纳入刻度。
|
||||
下面的 `$nowH` 是当前小时(服务端时区,与页面口径一致),
|
||||
把它并进区间端点 —— 于是红线必然落在区间内,定位也就有了正确的目标。
|
||||
⚠️ 必须在**算 $nowH 之前**完成这一步(原代码把 $nowH 放在区间之后算,
|
||||
这里把它提上来,避免"改了区间却没重新算位置"这种漏改)。 */
|
||||
$nowHNow = (int)date('G');
|
||||
if ($nowHNow < $startH) { $startH = max(0, $nowHNow - 1); }
|
||||
if ($nowHNow >= $endH) { $endH = min(24, $nowHNow + 2); }
|
||||
if ($endH <= $startH) { $endH = min(24, $startH + 2); }
|
||||
}
|
||||
$nowH = (int)date('G');
|
||||
@@ -220,7 +234,11 @@ $showNow = $nowPos >= 0 && $nowPos <= 1;
|
||||
<div class="card card-pad hd-pane" id="homeAgenda">
|
||||
<div class="hd-pane-head">
|
||||
<h2 class="cinema-h2">今天的日程</h2>
|
||||
<a class="btn btn-ghost btn-sm" href="<?= e(url('calendar')) ?>">看整月</a>
|
||||
<?php /* 🔴 v28 用户第 2 条:「看正月这个按钮,改成:更多日程,
|
||||
背景颜色和日程的主题颜色保持一致。」
|
||||
(「看正月」是用户对「看整月」的口误。) */ ?>
|
||||
<a class="btn btn-sm hd-more" href="<?= e(url('calendar')) ?>"
|
||||
style="--hd-c: <?= e(\App\Module::color('calendar', (int)\App\Auth::familyId())) ?>;">更多日程</a>
|
||||
</div>
|
||||
<?php /* 🔴 v24 第 26 批 用户第 2 条(前半):「今天的日程,除了全天日程**一直显示在上面**外,
|
||||
其他日程随着滚动」。
|
||||
@@ -286,8 +304,11 @@ $showNow = $nowPos >= 0 && $nowPos <= 1;
|
||||
<?php /* ---- 右:进行中的任务(标题 + 状态 + 看板名)---- */ ?>
|
||||
<div class="card card-pad hd-pane" id="homeTasks">
|
||||
<div class="hd-pane-head">
|
||||
<h2 class="cinema-h2">手头在做</h2>
|
||||
<a class="btn btn-ghost btn-sm" href="<?= e(url('tasks')) ?>">任务看板</a>
|
||||
<h2 class="cinema-h2">近期任务</h2>
|
||||
<?php /* 🔴 v28 用户第 3 条:「『手头在做』改成『近期任务』,『任务看板』这个按钮
|
||||
改成『全部任务』,按钮颜色和任务的主题颜色保持一致。」 */ ?>
|
||||
<a class="btn btn-sm hd-more" href="<?= e(url('tasks')) ?>"
|
||||
style="--hd-c: <?= e(\App\Module::color('tasks', (int)\App\Auth::familyId())) ?>;">全部任务</a>
|
||||
</div>
|
||||
<div class="hd-pane-body">
|
||||
<?php /* 用户第 6 条:「所有的任务,前面都带一个复选框,在任何地方,点这个复选框,
|
||||
|
||||
Reference in New Issue
Block a user