笔记端上只支持纯文本:FbNoteSheet 头部注释写明「端上只支持纯文本(服务端 body → 一个 text 块);网页那边可以图文混排(note_blocks 有 image 块),端上先不做」。已有笔记里的图片块在端上显示成「[图片]」,编辑保存还会把图片块弄丢风险。
FbNoteSheet
Note::BLOCK_KINDS = ['text', 'image']
note_blocks
imageKey()
blocks()
parseNotes
TextArea
fbImageSrc
terminal/harmony · 纯端上
本单由需求拆解生成,主单 laoyang/FamilyBook #22。
两端都已提交并推送,服务端已部署上线。
盘点时发现「显示成 [图片]」只是表象,更糟的是:端上 updateNote 原来只传 body, 服务端 noteBlocksIn() 会把它折成单个 text 块并整组替换(先 DELETE 再 INSERT)⇒ 端上编辑一条带图笔记、点保存,图片块会被静默删光。这是 P0 数据丢失,一并修了。
updateNote
body
noteBlocksIn()
服务端(commit cd56a9d):
cd56a9d
POST /api/v1/notes/upload
notes()
$id>0
target_id=0
blocks
Note::claimUploads
notes/upload
notes
notes($id, $sub, $method)
$sub='upload'
鸿蒙端(commit 9784602,7 文件):
9784602
FbNoteItem
fbUploadKey
saveNoteWithBlocks
fbUpload
_i23_note_image_api.py
_i23_falsify.py
_fb_arkts_guard.js
服务端 20261028-213517,线上 app/ApiHandler.php md5 与本地一致。两仓库均已 push。
20261028-213517
app/ApiHandler.php
⚠️ 真机点验待设备恢复(USB 物理层断开,hdc list targets 长期 [Empty]): 插图 → 保存 → 看图片 → 重开不丢,这几步的手感要等设备连上再点。
hdc list targets
[Empty]
No dependencies set.
The note is not visible to the blocked user.
现象
笔记端上只支持纯文本:
FbNoteSheet头部注释写明「端上只支持纯文本(服务端 body → 一个 text 块);网页那边可以图文混排(note_blocks 有 image 块),端上先不做」。已有笔记里的图片块在端上显示成「[图片]」,编辑保存还会把图片块弄丢风险。现状与依据
Note::BLOCK_KINDS = ['text', 'image'],note_blocks表按块存(text/image),imageKey()/blocks()已能下发 image 块内容。parseNotes把 image 块折叠成「[图片]」字样;FbNoteSheet编辑用的是单个TextArea,只认一个 text 块。要做的(纯鸿蒙端)
parseNotes/FbNoteSheet能展示 image 块(fbImageSrc加载附件图,或用已有图片加载链路)。note_blocks的 position)。验收
标签
terminal/harmony · 纯端上
收尾:已修完、已验证、已部署
两端都已提交并推送,服务端已部署上线。
一个比标题更严重的问题(顺带修了)
盘点时发现「显示成 [图片]」只是表象,更糟的是:端上
updateNote原来只传body,服务端
noteBlocksIn()会把它折成单个 text 块并整组替换(先 DELETE 再 INSERT)⇒端上编辑一条带图笔记、点保存,图片块会被静默删光。这是 P0 数据丢失,一并修了。
改了什么
服务端(commit
cd56a9d):POST /api/v1/notes/upload—— 笔记图片上传,返回附件 key。放
notes()的$id>0分支之前(上传是草稿态,不依赖笔记 id——新建笔记插图时还没有 id)。图片先挂
target_id=0,等blocks带 key 提交时由Note::claimUploads认领(与 Web 端notes/upload同一套)。notescase 改成notes($id, $sub, $method),否则$sub='upload'传不进去(405)。鸿蒙端(commit
9784602,7 文件):FbNoteItem加blocks字段,parseNotes把原始块带进来;FbNoteSheet里 image 块真画图,不再显示「[图片]」。fbUploadKey上传拿 key → 加入待保存列表;每张图带「×」可删。saveNoteWithBlocks(正文 text 块 + 图片 image 块整组提交),修掉上面的丢块问题。fbUploadKey是fbUpload抽出的第二出口,复用同一 multipart 核心,不复制实现。验证
_i23_note_image_api.py11/0:上传返 key · 带 blocks 新建后 text+image 两块都在 · PATCH 后图片块不被删。_i23_falsify.py:注掉 upload 分支 → ①② 变红(命中 2/2)。_fb_arkts_guard.js1324/0。部署
服务端
20261028-213517,线上app/ApiHandler.phpmd5 与本地一致。两仓库均已 push。⚠️ 真机点验待设备恢复(USB 物理层断开,
hdc list targets长期[Empty]):插图 → 保存 → 看图片 → 重开不丢,这几步的手感要等设备连上再点。