laoyang
|
ad25792732
|
选人改「只留搜索框」+ 附件用系统打开 + 留言头像与主题色 (#77)
用户 2026-11-05 五项。
① 选人慢 → 未输入关键词时不渲染任何人
用户:「实在不行,我们就不把人列出来了,只留搜索框…输入拼音首字母就可以找到这个人」
慢的根因(不只是节点多):
· 名册 **800 人**(不是 8 个);
· 每人一个 FbAvatar,而它内部调 fbImageSrc(avatar, token) ——
那是**同步**查本地缓存 + 拼 URL,800 次全在打开弹窗那一帧跑完;
· 再加 800 个 Column/Text 节点参与布局。
⇒ 未输入时一个候选都不渲染,只显示"输入名字或拼音首字母找人"。
只有真打了字才过滤、才渲染(结果通常 1~20 个,瞬间出来)。
⚠️ 没改成"只显示前 N 个":800 人里翻前 20 个没用,用户还是得搜。
⚠️ 暂存区(已选那几个)不受影响:数量极少且必须一直可见
(否则用户忘记选了谁)。多选 + 多次搜索的流程因此保持完整:
搜一个 → 点选进暂存 → 改关键词再搜 → 再点选 → 确定。
② 附件:Word 等非图片文件交给系统应用打开
用户:「应该打开本机上默认能够打开这个文件的应用,让它把文件打开才对。」
项目里**已经有** common/FbAttachOpen.ets(下载明文到 cacheDir +
隐式 Want + action.viewData 交给系统「打开方式」),只是任务面板没调用。
⇒ 附件缩略图挂上 onClick:
· 图片 → 就地全屏预览(新加浮层,ImageFit.Contain 看全图不裁边)
· 其它 → fbAttachOpen(),系统自己找能打开 .docx 的应用
⚠️ 不能用「显式 Want + 包名」:不知道用户装的是 WPS 还是 Office。
⚠️ 预览用 Contain 而非 Cover —— 缩略图用 Cover 对,预览裁边就错了。
③ 留言人头像
服务端 Task::comments() 的 SQL 里**一直有** `p.avatar`,
端上 parseTaskComment 只取了 name/color ⇒ 头像从没显示过。
补 RawTaskComment.avatar + FbTaskComment.avatar + 解析,
UI 换成公共 FbAvatar(有图用图、没图退回首字色块)。
④ 留言标题/发言人用模块主题色加粗
原来发言人是 muted 灰、常规字重 —— 漏了全站「以模块色标识」的规矩
(观影紫 / 旅程绿 / 任务赭红)。改成 this.accent + FontWeight.Medium。
同时把「附件」「留言」「子任务」三个小节标题也从 ink 改成主题色。
⚠️ 正文**没有**跟着改主题色:整段上色会掉可读性(色彩需要留白)。
如果用户要求正文也变色,改一行即可(已在代码注释里标了位置)。
⑤ 编译通过,已装真机。
|
2026-11-05 19:19:57 +08:00 |
|
laoyang
|
4e2fbb04b7
|
鸿蒙任务面板:看板平铺、截止负责人备注可改、文案与图标 (#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,
新加的两个字段漏了就会被抹掉(改一次状态头像就没了)——已补。
编译通过。
|
2026-11-05 19:12:24 +08:00 |
|
laoyang
|
86de59616c
|
端上:#47~#55 打包 —— 行程双轨、动态类型、表单全局规范 (#53)
#48 计划/实际双轨:nodeAction(start/done/cancel),完成即转实际行程,
实际行程不再显示状态;新增 actualStartedAt/actualEndedAt
#49 类型/出行方式/车辆 chip 改内部读状态(@Builder 值传参不刷新)
#50 类型点击立即变色、出行方式平铺、参与人显示已选头像
#51 节点类型动态加载(原硬编码5种)、地址 onPick 拿详细地址与坐标
#52 标签改主题色 Bold、必填红无星号、编辑行程标题同步
#53 表单两排版式(标签独占一行解决左右对不齐);电影弹层 layoutWeight 修滚动
#54 地址联想框加时间窗抑制(600ms 内不搜)、候选限高 180
含附件回填诊断日志(DIAG-ATTACH/FILL),待真机确认后移除
|
2026-11-05 12:41:04 +08:00 |
|
laoyang
|
59a9d3df39
|
任务共享:面板补「共享给谁」区块 laoyang/FamilyBook#26
用户原话(2026-10-28):「鸿蒙端对齐网页端」。任务面板原来没有共享入口,现在:
1) FbTaskShare 类型 + parseTaskDetail 解析 Task::find 已带的 shares
2) FbTaskRepo 补 fetchTaskShares/shareTask/unshareTask(删除走 query)
3) FbTaskPanel 加「共享给谁」区块:列表(可改/只看)+ 逐条取消 +
「+ 共享」复用选人组件(与资源/财务共享同一套)
编译 BUILD SUCCESSFUL;服务端冒烟 _i26_task_share_api.py 13/0 + 反证命中。
|
2026-10-28 22:10:15 +08:00 |
|
laoyang
|
1c6af8ac56
|
v79b 任务面板:补「看板」一行 + boardOf 反查兜底
真机验收时发现 boardOf() 定义了却从没被渲染,面板上看不出这条任务
属于哪个看板 —— 而「挪看板」正是 v79 新做的动作,做完看不见结果等于没做。
- infoRows() 增加 kvRow('看板', boardOf())
- boardOf() 在 base.board 为空时按 boardId 反查 boards,最后回落到「默认看板」
验证:静态守卫 1068/0(新增 ⑰ 三条)· 反向验证 222/0(新增 2 条注入)
真机探针 _fb_v79_verify.py 57/0
|
2026-10-22 18:46:04 +08:00 |
|
laoyang
|
559d79b2e2
|
v79b 端上:修 ForEach 键——改完状态卡片还显示旧状态
自查发现的隐患,**编译通过、静态断言全绿、节点也都在**,只是内容陈旧:
任务行是 `@Builder taskRow(t: FbTaskItem, …)` / `taskCard(t)` —— 入参按值传递、
不参与状态观察(本仓库文件头第 A 条反模式)。而 `ForEach` 的生成键只有
`'htk_' + t.id` ⇒ 改了状态 → 重拉列表 → `this.tasks` 换成新对象,但**键没变**
⇒ ArkUI 按 key 复用旧节点、不重跑生成器 ⇒ 卡片仍显示旧状态。
用户会看到:「面板里改成已完成了,关掉面板那张卡还是待办。」
修法:新增 `model/Types.taskKey(t)`,键里带**所有会被画到行上的字段**
(status / boardId / dueAt / overdue / childDone+childTotal / title),
首页与任务页两处 ForEach 都改用它;面板里子任务行的键也补上 `k.status`。
⚠️ 代价是状态一变这一行会重建(丢的是这一行的局部动画,不是滚动位置)。
这是刻意的取舍:**宁可重画,也不要不刷新**。
新增守卫 ⑯ 组 10 条(计数/关系型:
「键生成器必须调 taskKey」「taskKey 必须含这 6 个字段」「子任务键要带 status」),
并补 5 条反向验证注入(退回只拼 id / 漏 status / 漏 boardId / 子任务键缺 status)。
守卫 1064/0 · 反向 220/0 · 编译 BUILD SUCCESSFUL。
|
2026-10-22 17:33:32 +08:00 |
|
laoyang
|
25a0797a74
|
v79 端上:任务面板(首页/任务页共用)+ 任务模块功能补齐
用户原话:「鸿蒙端的功能,也需要同样适配,在首页上可以直接修改编辑任务,
另外任务模块的功能需要完善。」
端上原来只有"看列表 / 勾完成 / 新建改标题",网页 v78 那套「就地处理」
(改状态、挪分组、子任务、附件、留言、删除)一件都没有;首页点任务
弹的还是 v73 的只读卡。
一、新增 FbTaskPanel(首页与任务页共用同一组件)
· 改状态三段(待办/进行中/已完成)+ 标题左侧状态圈
· 挪看板 chips、勾/加子任务、加图片附件并删、发留言
· 编辑 → 交给宿主开 FbTaskEditSheet;删除要**点两次**(端上没有 undo)
· 每个动作成功后再 getTask() 重拉一次:一次动作会牵动子任务计数、
附件张数、看板色,逐处同步 DOM 必然漏一处
二、退役 FbTaskDetailSheet(v73 只读卡,387 行)
⚠️ 它已无人挂载,而守卫还在逐条"通过" —— 等于给死代码盖章。
三、任务模块补齐
· 卡片点击 → 面板(不再直接进编辑表单:误触一下就开始改标题,
且子任务/附件/留言没地方放)
· 「只看已完成」改真打 ?view=done:看板视图服务端就写死
status <> 'done',在客户端筛永远是空
· 看板列表改走 ?view=boards:原来从任务反推 ⇒ 空看板永远选不到
· 编辑表单补分类/循环两排
四、顺带修掉一个自查发现的真 bug
任务页里 sheetCount 有**两个** @Monitor 都监听 boardSheetOpen、都写同一个值
⇒ 关掉设置浮层时谁最后执行不确定,会把还开着的面板"顺便让位结束",
底部悬浮栏浮上来盖住面板按钮。已并成一个取并集的 monitor。
服务端(另一仓):新增 GET /tasks?view=boards、POST/DELETE /tasks/<id>/attach,
详情补 board_name/board_color_calc,越权删别条任务的附件 → 404。
验证:静态守卫 1055/0(新增 v79 一组,含"全页只许一个 sheetCount 赋值点")、
反向验证 215/0(新增 15 条注入,逐条证明新断言会红)、
服务端 e2e 1558/0、_fb_v79_api.py 26/0、编译通过并已装机。
|
2026-10-22 16:40:44 +08:00 |
|