鸿蒙任务面板:看板平铺、截止负责人备注可改、文案与图标 (#77)

用户 2026-11-05 对鸿蒙端首页任务弹窗提了 12 项,本批完成 9 项
(附件预览/下载单独做)。

① 看板平铺,不再左右滑
   参考 FbTripNodeSheet 的做法:≤6 项 Flex(wrap) 换行平铺,>6 项才横滑。
   当前家庭 4 个看板(默认 + 正在进列/等待反馈/等待结果)⇒ 走平铺。
   ⚠️ 平铺必须用 Flex(wrap),ArkUI 的 Row 不换行,塞不下会横向溢出
      父容器(v76 真机踩过:最后一个 chip 被裁掉且点不到)。
   ⚠️ Row 的 space 在 Flex 里不生效 ⇒ chip 补了 margin 做间距。

② 删掉截止下面重复的「看板」行
   上面 boardChips() 已经把当前看板高亮出来了,再列一行纯属重复,
   而且两处都要同步才不出错。

③ 截止日期可改
   点整行 → FbDateTimePicker(与编辑表单同一个组件,交互一致)。
   改完立刻保存,不设保存按钮 —— 与状态/看板/子任务同一套交互。

④ 负责人可改 + 头像
   点头像/名字 → FbPersonPickSheet 单选。
   头像来源:服务端 Task::find 的 SQL 里**一直有** a.avatar AS assignee_avatar
   (实测 #49 返回 avatars/2026xxx.jpg),只是端上 parseTaskItem 从没解析
   ⇒ 补 RawTask 字段 + FbTaskItem.assigneeAvatar/assigneeColor + 解析。
   没头像时用首字色块兜底(与留言区同一手法)。

⑤ 备注可改
   点一下变输入框,回车或失焦自动保存(等用户去找"保存"按钮
   就会以为没存上)。

⑥ 「共享给谁」→「协作人」(标题与弹层标题都改)

⑦ 「+ 加图片」→「+ 添加附件」,**行为也跟着改**:
   原来 pickAttach 用 PhotoViewPicker + IMAGE_TYPE 只能选相册图片,
   改叫"添加附件"却选不了 PDF/Word,用户会以为功能坏了
   ⇒ 换成 DocumentViewPicker(系统文件选择器),能选任意文件。

⑧ 留言区标题加 💬 图标

⑨ 「回车发送」从 placeholder 挪到下方独立小字
   (塞 placeholder 里一打字就看不见,而且 placeholder 该放"填什么"不是"怎么操作")

⑩ 发送按钮显示不全
   根因:写死 width(56) + textAlign(Center),Text 默认内边距吃掉两侧空间,
   56 减去内边距 + 两个汉字正好压线,字体缩放或不同机型就截掉半个字。
   ⇒ 改 constraintSize({minWidth:60}) + 水平 padding,按文字实际宽度自适应。

⚠️ 另一个必须同步的地方:FbTasksPage 里改状态时会**整条替换** FbTaskItem,
   新加的两个字段漏了就会被抹掉(改一次状态头像就没了)——已补。

编译通过。
This commit is contained in:
2026-11-05 19:12:24 +08:00
parent 5fba8c4eda
commit 4e2fbb04b7
5 changed files with 442 additions and 58 deletions
+5
View File
@@ -150,6 +150,8 @@ interface RawTask {
id?: number; title?: string; status?: string; board_id?: number; category_id?: number | null;
note?: string | null; due_at?: string | null; done_at?: string | null;
assignee_id?: number | null; assignee_name?: string | null;
/* #77:负责人头像(服务端 Task::find 的 SQL 里一直有 a.avatar AS assignee_avatar) */
assignee_avatar?: string | null; assignee_color?: string | null;
avatar?: string | null; avatar_color?: string | null;
category_name?: string | null; child_total?: number; child_done?: number;
comment_count?: number; attach_count?: number;
@@ -486,6 +488,9 @@ function taskRow(t: RawTask, boardName: string, boardColor: string): FbTaskItem
dueText: due !== '' ? datePart(due) : '',
overdue: due !== '' && s(t.status) !== 'done' && isBeforeToday(due),
assignee: s(t.assignee_name),
/* #77:负责人头像(服务端一直有,端上原来没解析) */
assigneeAvatar: s(t.assignee_avatar),
assigneeColor: s(t.assignee_color),
childDone: n(t.child_done),
childTotal: n(t.child_total),
/* v65:新建/编辑/搬看板要用到的三个**原始**字段(原来只派生了显示文案) */