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:
@@ -30,14 +30,22 @@ $categories = $categories ?? [];
|
||||
$colList = [];
|
||||
foreach ($boards as $b) {
|
||||
$bid = (int)$b['id'];
|
||||
$colList[] = ['id' => $bid, 'name' => (string)$b['name'], 'rows' => $cols[$bid] ?? []];
|
||||
/* 🔴 v24 第 26 批 用户第 3 条:列头带上**看板色**。
|
||||
用户要的是"一眼看出属于哪个看板" —— 列头本身就是一个看板,
|
||||
给它一个色点,比只在卡片上标色更直观(卡片散落各处,列头是它们的归属地)。 */
|
||||
$colList[] = [
|
||||
'id' => $bid,
|
||||
'name' => (string)$b['name'],
|
||||
'color' => \App\Task::boardColor($b['color'] ?? null, (string)$b['name']),
|
||||
'rows' => $cols[$bid] ?? [],
|
||||
];
|
||||
}
|
||||
if (!empty($cols[0])) {
|
||||
$colList[] = ['id' => 0, 'name' => '其他', 'rows' => $cols[0]];
|
||||
$colList[] = ['id' => 0, 'name' => '其他', 'color' => '', 'rows' => $cols[0]];
|
||||
}
|
||||
// 一个看板都没有(也不该发生:ensureDefaultBoard 保证至少一个)→ 给一句人话
|
||||
if (!$colList) {
|
||||
$colList[] = ['id' => 0, 'name' => '任务', 'rows' => $cols[0] ?? []];
|
||||
$colList[] = ['id' => 0, 'name' => '任务', 'color' => '', 'rows' => $cols[0] ?? []];
|
||||
}
|
||||
$firstColId = (int)($colList[0]['id'] ?? 0);
|
||||
$lastColIdx = count($colList) - 1;
|
||||
@@ -208,6 +216,9 @@ $lastColIdx = count($colList) - 1;
|
||||
<?php foreach ($colList as $ci => $col): $cid = (int)$col['id']; ?>
|
||||
<section class="kb-col" data-board="<?= $cid ?>">
|
||||
<header class="kb-head">
|
||||
<?php if ((string)($col['color'] ?? '') !== ''): ?>
|
||||
<i class="kb-dot" style="--bc: <?= e((string)$col['color']) ?>;" aria-hidden="true"></i>
|
||||
<?php endif; ?>
|
||||
<b><?= e((string)$col['name']) ?></b>
|
||||
<span class="kb-n"><?= count($col['rows']) ?></span>
|
||||
</header>
|
||||
@@ -244,10 +255,16 @@ $lastColIdx = count($colList) - 1;
|
||||
?>
|
||||
<div class="kb-meta">
|
||||
<?php if ($canWrite): ?>
|
||||
<?php /* ⚠️ v24 第 26 批 用户第 3 条:这里原来有 `title="现在:待办;点一下改成「进行中」"`。
|
||||
那串提示在卡片里离**完成复选框**很近(kb-top 下一行),鼠标一停就弹出来压住它
|
||||
—— 用户报的正是「提示把复选框都盖住了」。
|
||||
去掉 title:状态**已经写在按钮文字上**(待办/进行中),
|
||||
点一下会变成下一档这件事由按钮的样式(可点)表达,不需要再弹一段长文。
|
||||
`aria-label` 也一并去掉 —— 它同样会生成浮层;无障碍改用 visually-hidden 文本。 */ ?>
|
||||
<button class="kb-st is-<?= e($stNow) ?>" type="button"
|
||||
data-st-id="<?= $tid ?>" data-st="<?= e($stNow) ?>" data-next="<?= e($stNext) ?>"
|
||||
title="现在:<?= e(\App\Task::statusWord($stNow)) ?>;点一下改成「<?= e(\App\Task::statusWord($stNext)) ?>」">
|
||||
data-st-id="<?= $tid ?>" data-st="<?= e($stNow) ?>" data-next="<?= e($stNext) ?>">
|
||||
<?= e(\App\Task::statusWord($stNow)) ?>
|
||||
<span class="visually-hidden">,点一下改成「<?= e(\App\Task::statusWord($stNext)) ?>」</span>
|
||||
</button>
|
||||
<?php else: ?>
|
||||
<span class="kb-st is-<?= e($stNow) ?> is-static"><?= e(\App\Task::statusWord($stNow)) ?></span>
|
||||
|
||||
@@ -32,14 +32,26 @@ $canWrite = \App\Auth::canWrite();
|
||||
看板是「分开看几摊事」用的(家务 / 装修 / 旅行准备 …)。任务看板顶上可以切换。
|
||||
删掉一个看板时,里面的任务不会被删,会挪到默认看板。
|
||||
</p>
|
||||
<?php /* 🔴 v24 第 26 批 用户第 3 条:「任务在设置看板的时候,可以选择颜色,
|
||||
这样在首页列表中显示的时候,就可以更加直观的看到他属于哪个看板。」
|
||||
⇒ 每行给一个**颜色选择器**,与改名在**同一份表单**里一起提交
|
||||
(用户改色时不该被迫把名字重打一遍)。
|
||||
⚠️ 用 `<input type="color">` 而不是自绘色块:原生控件在手机上直接唤起系统取色器,
|
||||
自绘的做不到这一点;代价是桌面端样式朴素 —— 但"能用"优先于"好看"。
|
||||
⚠️ 旁边那颗小圆点显示**当前最终色**(没选过色时是按名字派生的那个),
|
||||
不然用户看到取色器里是黑的、而列表里是蓝的,会以为没生效。 */ ?>
|
||||
<div class="set-list">
|
||||
<?php foreach ($boards as $b): ?>
|
||||
<?php $bColor = \App\Task::boardColor($b['color'] ?? null, (string)$b['name']); ?>
|
||||
<form class="inline-form set-row" method="post" action="<?= e(url('tasks/board_update')) ?>">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="id" value="<?= (int)$b['id'] ?>">
|
||||
<span class="kb-dot" style="background: <?= e($bColor) ?>;" aria-hidden="true"></span>
|
||||
<input type="color" class="input-color" name="color" value="<?= e($bColor) ?>"
|
||||
aria-label="看板颜色">
|
||||
<input class="input" name="name" value="<?= e((string)$b['name']) ?>" required>
|
||||
<span class="small muted"><?= (int)($b['open_count'] ?? 0) ?> 件未完成</span>
|
||||
<button class="btn btn-sm" type="submit">改名</button>
|
||||
<button class="btn btn-sm" type="submit">保存</button>
|
||||
</form>
|
||||
<?php if (count($boards) > 1): ?>
|
||||
<form class="inline-form" method="post" action="<?= e(url('tasks/board_del')) ?>">
|
||||
|
||||
@@ -24,13 +24,12 @@ $isChild = !empty($t['parent_id']);
|
||||
?>
|
||||
<div class="page-head">
|
||||
<h1>
|
||||
<?php /* 用户第 6 条:「所有的任务,前面都带一个复选框,在任何地方,点这个复选框,
|
||||
这个任务就完成了。」→ 详情页也算"任何地方",标题前也给它一颗。 */ ?>
|
||||
<?php
|
||||
$tkId = (int)$t['id']; $tkStatus = (string)$t['status'];
|
||||
$tkBack = 'show'; $tkStatic = !$canWrite;
|
||||
require __DIR__ . '/../_task_check.php';
|
||||
?>
|
||||
<?php /* 🔴 v24 第 26 批 用户第 5 条:**详情页页头不再放复选框**。
|
||||
用户原话:「任务详情页面,就不需要复选框了,因为有标记完成这个按钮。」
|
||||
⇒ 右侧 actions 里那颗「标记完成 / 重新打开」已经把这个动作表达得很清楚,
|
||||
标题前再挂一颗是重复的(同一页两个入口做同一件事,还容易看不出区别)。
|
||||
⚠️ **子任务列表里的复选框保留**(见文件下面)—— 那条需求说的是"详情页",
|
||||
而子任务**没有**自己的「标记完成」按钮,去掉它子任务就没法在列表里勾了。 */ ?>
|
||||
<?= e((string)$t['title']) ?>
|
||||
</h1>
|
||||
<span class="sub"><?= e(\App\Task::statusWord((string)$t['status'])) ?></span>
|
||||
|
||||
Reference in New Issue
Block a user