任务面板:加保存按钮,负责人和分类可修改 #76

Open
opened 2026-11-05 10:05:21 +00:00 by laoyang · 0 comments
Owner

任务面板:加保存按钮,负责人/分类可改

用户(2026-11-05)

「时间控件是对的,但是现在没有保存按钮,只有下面一个评论的发表按钮。
另外,负责人和分类都没法修改,按道理讲都应该可以修改才对。」

三个问题

① 截止时间没有保存按钮

上一轮(#74/#75)我做成了选完立即保存,用户不认可 —— 他要一颗明确的「保存」按钮。

回想上下文:用户前面说的是「这些操作全部都在这一个页面完成」,
他期待的是"填完点保存"这种确定感,不是"改一下发一次请求"。

⇒ 改成:截止时间 / 负责人 / 分类 三项一起,底部一颗「保存」。

② 负责人只读

<?php if (!empty($tpT['assignee_name'])): ?>
  <div class="kv-row"><dt>负责人</dt><dd>…</dd></div>
<?php endif; ?>

只读,而且没负责人时整行不显示。

③ 分类只读

<?php if ($tpCatName !== ''): ?>
  <div class="kv-row"><dt>分类</dt><dd><?= e($tpCatName) ?></dd></div>
<?php endif; ?>

同上,未分类时连行都不显示。

改法

在面板里加一个「更多信息」小节,把三项做成可编辑控件 + 一颗「保存」:

┌ 更多信息 ────────────────────────┐
│ 截止    [ 2026-11-10 18:00    ] │
│ 负责人  [ 杨老师 ▾ ]             │
│ 分类    [ 家务 ▾ ]               │
│         [ 保存 ]                 │
└──────────────────────────────────┘

为什么负责人用 select 而不是弹窗选人

_edit_form.php 用的是 _person_picker.php(弹窗 + 拼音联想)。但在面板里:

  1. 面板本身已经在浮层里,弹窗里再弹一层模态 = 两层遮罩,手机上很容易点错
  2. _person_picker.php 需要 fbInitPickers() 初始化,loadPanel() 现在没有调
  3. 家庭成员通常 3~10 人,select 足够;名字长也能放下

⚠️ 如果以后家里人多到 select 不好用,再换成弹窗 —— 那时要把 fbInitPickers
也补进 loadPanel()。

保存动作

新路由 tasks/panel_save(只收 id / due_at / assignee_id / category_id),
只写这三个字段,不碰 title/note/status 等(避免 #74 记过的
"Task::update() 全字段覆盖把没交的字段抹成空"那个坑)。

复用 Task::setDue() 的思路,新增 Task::setAttrs() 或直接在路由里写一条
只更新这三列的 UPDATE。

顺带

  • 面板底部现在只有评论的「发表」;「保存」放在「更多信息」小节里,
    与「发表」不在一处,不会混淆。
  • 截止时间的 change 监听(#74 加的 bindDue)要移除 —— 改成按钮保存后,
    再自动保存会导致"改一次发一次请求 + 还要点保存"两次动作。

验收

  • 面板里有「更多信息」小节:截止 / 负责人 / 分类 三个可编辑控件
  • 已有值都带出来(负责人、分类即使为空也显示控件,不是整行消失)
  • 改完点「保存」→ 三项一起生效
  • 保存后不刷新页面,面板就地更新
  • 状态 / 看板 / 子任务 / 评论 / 附件 仍正常

为什么单独建单

#74 把只读截止行改成控件;#75 修那个控件的 AntD 没挂上。本单按用户新要求改交互:取消立即保存、加显式保存按钮,并把负责人/分类也从只读改成可编辑。

# 任务面板:加保存按钮,负责人/分类可改 ## 用户(2026-11-05) > 「时间控件是对的,但是现在没有保存按钮,只有下面一个评论的发表按钮。 > 另外,负责人和分类都没法修改,按道理讲都应该可以修改才对。」 ## 三个问题 ### ① 截止时间没有保存按钮 上一轮(#74/#75)我做成了**选完立即保存**,用户不认可 —— 他要一颗明确的「保存」按钮。 回想上下文:用户前面说的是「这些操作全部都在这一个页面完成」, 他期待的是"填完点保存"这种确定感,不是"改一下发一次请求"。 ⇒ 改成:截止时间 / 负责人 / 分类 **三项一起**,底部一颗「保存」。 ### ② 负责人只读 ```php <?php if (!empty($tpT['assignee_name'])): ?> <div class="kv-row"><dt>负责人</dt><dd>…</dd></div> <?php endif; ?> ``` 只读,而且**没负责人时整行不显示**。 ### ③ 分类只读 ```php <?php if ($tpCatName !== ''): ?> <div class="kv-row"><dt>分类</dt><dd><?= e($tpCatName) ?></dd></div> <?php endif; ?> ``` 同上,未分类时连行都不显示。 ## 改法 在面板里加一个「**更多信息**」小节,把三项做成可编辑控件 + 一颗「保存」: ``` ┌ 更多信息 ────────────────────────┐ │ 截止 [ 2026-11-10 18:00 ] │ │ 负责人 [ 杨老师 ▾ ] │ │ 分类 [ 家务 ▾ ] │ │ [ 保存 ] │ └──────────────────────────────────┘ ``` ### 为什么负责人用 `select` 而不是弹窗选人 `_edit_form.php` 用的是 `_person_picker.php`(弹窗 + 拼音联想)。但在**面板**里: 1. 面板本身已经在浮层里,弹窗里再弹一层模态 = 两层遮罩,手机上很容易点错 2. `_person_picker.php` 需要 `fbInitPickers()` 初始化,`loadPanel()` 现在**没有调** 3. 家庭成员通常 3~10 人,`select` 足够;名字长也能放下 ⚠️ 如果以后家里人多到 `select` 不好用,再换成弹窗 —— 那时要把 `fbInitPickers` 也补进 `loadPanel()`。 ### 保存动作 新路由 `tasks/panel_save`(只收 `id` / `due_at` / `assignee_id` / `category_id`), **只写这三个字段**,不碰 title/note/status 等(避免 #74 记过的 "`Task::update()` 全字段覆盖把没交的字段抹成空"那个坑)。 复用 `Task::setDue()` 的思路,新增 `Task::setAttrs()` 或直接在路由里写一条 只更新这三列的 UPDATE。 ### 顺带 - 面板底部现在只有评论的「发表」;「保存」放在「更多信息」小节里, 与「发表」不在一处,不会混淆。 - 截止时间的 change 监听(#74 加的 bindDue)要**移除** —— 改成按钮保存后, 再自动保存会导致"改一次发一次请求 + 还要点保存"两次动作。 ## 验收 - [ ] 面板里有「更多信息」小节:截止 / 负责人 / 分类 三个可编辑控件 - [ ] 已有值都带出来(负责人、分类即使为空也显示控件,不是整行消失) - [ ] 改完点「保存」→ 三项一起生效 - [ ] 保存后不刷新页面,面板就地更新 - [ ] 状态 / 看板 / 子任务 / 评论 / 附件 仍正常 --- ### 为什么单独建单 #74 把只读截止行改成控件;#75 修那个控件的 AntD 没挂上。本单按用户新要求改交互:取消立即保存、加显式保存按钮,并把负责人/分类也从只读改成可编辑。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: laoyang/FamilyBook#76