网页端:保存按钮整行 + 左上角「编辑任务」+ 补回分类与循环 (#83)

用户 2026-11-05:
  「保存按钮感觉太小了。要不也像鸿蒙版一样长长的一条?」
  「最左上角也是一样,应该显示"编辑任务",而不是显示任务的标题。」
  「你倒是提醒我了,分类和重复,也就是循环,都需要加上,鸿蒙端也得加上。」

① 保存按钮 → 整行长条
   原来 `.btn-sm` 是内联宽(按文字撑),在 648px 宽的面板里又小又偏。
   ⇒ `.tk-attr-actions > .btn { width:100%; height:42px; justify-content:center }`
   实测:648 x 42,占行宽 100% ✅

② 左上角改「编辑任务」
   根因:`entry_popup.js` 的 `paintDetail()` 第 142 行永远是
     titleEl().textContent = data.title || 详情
   任务面板带 `data.panel`,它本身就是编辑面板,标题栏写任务名会让用户
   以为"这是详情页,只是恰好能改"。
   ⇒ `var headText = data.panel ? 编辑任务 : (data.title || 详情);`
   ⚠️ 其它来源(观影/旅程/日程/纪念日)**保持显示名字**:它们点开的
      确实是"这条记录的详情",显示名字才是对的。

③ 补回分类与循环
   上一轮我按「不需要额外信息」把这两项删了 —— 理解偏了:
   用户指的是"不要编辑表单里那些多余字段",不是"分类/循环不要"。
   ⇒ 补回,位置放在协作人之后(用户指定的前四项顺序不动)。
   ⚠️ `tasks/panel_save` 的 `$sd` 需要能接这两个字段 —— 见服务端那侧,
      它用 `array_key_exists` 判"传没传",所以不传时保留原值、传了就更新。

实测渲染:任务标题 → 截止 → 负责人 → 备注 → 协作人 → 分类 → 循环 ✅
This commit is contained in:
2026-11-05 20:14:43 +08:00
parent 4d04490f7f
commit 255fb8a240
3 changed files with 62 additions and 1 deletions
+12
View File
@@ -7006,6 +7006,18 @@ h6.md-h { font-size: 17px; color: var(--muted); }
现在控件占满整行,按钮左缘就是容器左缘,再加 56 会缩进去一截。 */
display: flex; align-items: center; gap: 10px;
}
/* 🔴 #83(用户 2026-11-05):「保存按钮感觉太小了。要不也像鸿蒙版一样长长的一条?」
原来 `.btn-sm` 是内联宽度(按文字撑),在 648px 宽的面板里显得又小又偏。
⇒ 面板里的保存按钮改成**整行长条**:与上面的输入框同宽、同高(42),
视觉上就是"这一列的最后一步"。
⚠️ 用 `width:100%` 而不是 `flex:1`:`.tk-attr-actions` 是 flex 容器,
`flex:1` 在有其它兄弟时会按比例分 —— 这里只有一个按钮,
`width:100%` 更直接、不受后续增删影响。 */
.tk-attr-actions > .btn {
width: 100%; height: 42px; justify-content: center;
font-size: 14px; font-weight: 500; border-radius: var(--radius-s);
}
.tk-attr-tip { font-size: 12px; color: var(--green, #2E7D4F); }
/* #82:只读态的值也做成"框"的样子(浅底圆角),
与可编辑态同宽同高 —— 否则只读用户看到的是一行裸文字,和编辑态差太多。 */
+9 -1
View File
@@ -139,7 +139,15 @@
*/
function paintDetail(data) {
var isEvent = (data.source === 'event');
if (titleEl()) { titleEl().textContent = data.title || '详情'; }
/* 🔴 #83(用户 2026-11-05):「最左上角也是一样,应该显示"编辑任务",
而不是显示任务的标题。」
任务面板(带 `data.panel`)本身就是**编辑面板** —— 标题栏写任务标题
会让用户以为"这是详情页,只是恰好能改"。
其它来源(观影/旅程/日程/纪念日)仍显示各自的标题:
它们点开的确实是"这条记录的详情",显示名字才是对的。 */
var headText = data.panel ? '编辑任务' : (data.title || '详情');
if (titleEl()) { titleEl().textContent = headText; }
if (bodyEl()) { bodyEl().innerHTML = '<dl class="kv">' + rowsHtml(data.rows) + '</dl>'; }
/* 🔴 v78:任务带 `panel`(可就地操作的那块)—— 面板比只读信息宽一号,
所以这里按**有没有 panel** 决定宽度,而不是按 source。 */
+41
View File
@@ -243,6 +243,47 @@ $tpLate = $tpDue !== '' && $tpStatus !== 'done' && \App\Task::isOverdue($tpD
<?php endif; ?>
</div>
<?php /* 🔴 #83(用户 2026-11-05):「你倒是提醒我了,分类和重复,也就是循环,
都需要加上,鸿蒙端也得加上。」
#82 里我按「不需要额外信息」把这两项删了 —— 那是我理解偏了,
用户说的是"不要编辑表单里那些额外的字段",不是"分类/循环不要"。
⇒ 补回。位置放在协作人之后:用户明确指定的前四项
(截止/负责人/备注/协作人)顺序不动,这两项作为补充排在后面。 */ ?>
<div class="tk-attr-row">
<span class="tk-attr-lb">分类</span>
<?php if ($tpCan): ?>
<select class="select" name="category_id" id="tkp-category">
<option value="0">未分类</option>
<?php foreach ($tpCats as $tpC): ?>
<?php $tpCid = (int)($tpC['id'] ?? 0); ?>
<option value="<?= $tpCid ?>"
<?= $tpCid === (int)($tpT['category_id'] ?? 0) ? ' selected' : '' ?>>
<?= e((string)($tpC['name'] ?? '')) ?>
</option>
<?php endforeach; ?>
</select>
<?php else: ?>
<span class="tk-attr-val"><?= $tpCatName !== '' ? e($tpCatName) : '未分类' ?></span>
<?php endif; ?>
</div>
<div class="tk-attr-row">
<span class="tk-attr-lb">循环</span>
<?php if ($tpCan): ?>
<select class="select" name="repeat_rule" id="tkp-repeat">
<?php foreach (\App\Task::REPEAT as $tpRk => $tpRv): ?>
<option value="<?= e($tpRk) ?>"
<?= (string)($tpT['repeat_rule'] ?? '') === (string)$tpRk ? ' selected' : '' ?>>
<?= e($tpRv) ?>
</option>
<?php endforeach; ?>
</select>
<?php else: ?>
<span class="tk-attr-val"><?= e(\App\Task::repeatWord((string)($tpT['repeat_rule'] ?? ''))) ?></span>
<?php endif; ?>
</div>
<?php if ($tpCan): ?>
<div class="tk-attr-actions">
<button type="button" class="btn btn-sm" data-tk-act="save-attrs">保存</button>