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:
2026-10-08 02:20:19 +08:00
parent 404b1afee0
commit 6852b4ee2c
19 changed files with 2273 additions and 587 deletions
+44
View File
@@ -983,6 +983,50 @@ final class Nav
['DuckGo', 'ddg', 'https://duckduckgo.com/', 'q', '', '', '#DE5833', 0],
];
/**
* **联想接口库**(v28 用户第 10 条)。
*
* 用户原话:「导航功能,联想接口还是不能用啊,需要你补充几个进去,让用户选择。
* 搜索引擎列表,联想接口,是**对所有用户可见**的。」
*
* ⇒ 提供一份**内置的、大家都能看到**的联想接口清单(不是每人各存一份)。
* 用户在「搜索引擎设置」里点一下就能把某个接口用到自己的引擎上。
*
* ⚠️ 这份清单里的每一条都必须**实测可用**(下方注释标了来源)。
* 国内网络下不可达的(谷歌 / DuckDuckGo)**放进去也没用** ——
* 用户点了发现永远空下拉,比不提供更差。所以只列走通的。
* ⚠️ `type` 决定解析方式(见 nav_suggest.php 的 nav_parse_suggest),
* 必须是那边认得的取值,加新类型要**两处一起改**。
*/
public const SUGGEST_LIBRARY = [
// [显示名, 联想地址模板, 解析类型, 说明]
['百度', 'https://www.baidu.com/sugrec?prod=pc&wd={q}', 'baidu_sugrec',
'实测最快最稳(约 0.1 秒)'],
['360', 'https://sug.so.360.cn/suggest?encodein=utf-8&encodeout=utf-8&format=json&word={q}',
'so360', '速度次之(约 0.2 秒)'],
['必应', 'https://api.bing.com/osjson.aspx?query={q}', 'bing_osjson',
'可用但偏慢(0.5~1.6 秒)'],
['搜狗', 'https://suggestion.sogou.com/suggnew/ajajjson?key={q}&type=web', 'sogou',
'备用(域名时好时坏)'],
['知乎', 'https://www.zhihu.com/api/v4/search/suggest?q={q}&token=', 'zhihu',
'内容向站点,适合当第二来源'],
['B站', 'https://s.search.bilibili.com/main/suggest?term={q}', 'bili',
'内容向站点'],
];
/**
* 某个人现在**能选**的联想接口 = 内置库里的全部(对所有用户可见)。
* @return array<int,array{name:string,url:string,type:string,note:string}>
*/
public static function suggestLibrary(): array
{
$out = [];
foreach (self::SUGGEST_LIBRARY as $row) {
$out[] = ['name' => $row[0], 'url' => $row[1], 'type' => $row[2], 'note' => $row[3]];
}
return $out;
}
/**
* 把**缺失的内置引擎**补给这个人(v24 第 26 批 用户第 4 条)。
*