v26 第 26 批(5 条):财务多选按集合取图 / 首页全天置顶与红线定位 / 任务复选框去提示与看板颜色 / 导航搜索引擎切换与站点复用 / 详情页去复选框
- 财务:勾选多个标签时上面那张「总金额」图按**选中集合**统计(新增 ledger/total_chart 路由 + 单一容器 data-ck-total-host,按集合现取并缓存; Ledger::timeline 第二参数放宽为 string|array) - 首页日程:全天日程移出滚动容器固定置顶;进场把当前时刻红线居中 (scrollTop 计算,不用 scrollIntoView),触发条件不绑 $showNow - 任务:复选框去除 title 提示;看板可设颜色(Task::boardColor/updateBoard), 首页任务行用该颜色显示所属看板 - 导航:展示页补回 id=engine-tabs(切换搜索引擎无效的根因);补内置引擎; 新增站点输 URL 可复用他人已加过的站点(sharedByUrl/copyIconFile/adoptSite) - 任务详情页页头去掉复选框(已有「标记完成」按钮)
This commit is contained in:
+24
-4
@@ -465,20 +465,40 @@ final class Ledger
|
||||
* 取值规则(每个时点 t):账目在 t 之后才创建 → **不计入**(那时它还不存在);
|
||||
* 在 t 之前盘点过 → 取最后一次盘点的值;从未盘点过 → 取它现在的值(一直没变过)。
|
||||
*
|
||||
* @param string $kind v24 第 23 批 用户第 2 条:**只看某一类别**时传它的 key
|
||||
* @param string|array $kind v24 第 23 批 用户第 2 条:**只看某一类别**时传它的 key
|
||||
* ('' = 整本账)。只影响"哪些账目参与累加",口径一字不改 ——
|
||||
* 所以"存款"那条线与"只记了存款这一笔的账本"完全等价。
|
||||
* 🔴 v24 第 26 批 用户第 1 条:多选之后传**类别集合**
|
||||
* (`['deposit','insurance']`)—— 语义同样是"只让这些类别的账目参与累加"。
|
||||
* ⚠️ 保持接受**字符串**(老调用点:只选了一类时仍然传字符串,见 index.php
|
||||
* 的 kindLines 预渲染),在下面统一归一成数组 ——
|
||||
* 两套参数并存是最容易漏改的那种接口。
|
||||
* @return array<int,array{date:string,net:int,asset:int,debt:int}> 空账本返回 []
|
||||
*/
|
||||
public static function timeline(int $ledgerId, string $kind = ''): array
|
||||
public static function timeline(int $ledgerId, $kind = ''): array
|
||||
{
|
||||
// 归一:'' / null → 空数组(= 全部);'deposit' → ['deposit'];数组原样
|
||||
$kinds = [];
|
||||
if (is_array($kind)) {
|
||||
foreach ($kind as $k) {
|
||||
$k = trim((string)$k);
|
||||
if ($k !== '') {
|
||||
$kinds[$k] = true;
|
||||
}
|
||||
}
|
||||
$kinds = array_keys($kinds);
|
||||
} elseif (is_string($kind) && trim($kind) !== '') {
|
||||
$kinds = [trim($kind)];
|
||||
}
|
||||
|
||||
$entries = self::entries($ledgerId);
|
||||
if ($kind !== '') {
|
||||
if ($kinds) {
|
||||
// ⚠️ 必须在**取时点之前**过滤(而不是算完再筛):
|
||||
// 时点集合里有"每条账目的创建日",包含被筛掉那些账目的创建日 →
|
||||
// 图右端就会凭空多出几个"其实什么都没变"的时点。
|
||||
// ⚠️ 多选时是**白名单**(在集合里才留);集合为空 = 不过滤 = 整本账。
|
||||
$entries = array_values(array_filter(
|
||||
$entries, static fn($e): bool => (string)$e['kind'] === $kind));
|
||||
$entries, static fn($e): bool => in_array((string)$e['kind'], $kinds, true)));
|
||||
}
|
||||
if (!$entries) {
|
||||
return [];
|
||||
|
||||
Reference in New Issue
Block a user