「修改编辑行程,图片和视频带进来都不全的问题。」
用户 2026-11-05 在网页端新增了图片和视频,行程列表里能看到, 但点「编辑」进去后带不全。
用真实 token 打 GET /api/v1/trips/227/nodes:
GET /api/v1/trips/227/nodes
HTTP 200 响应 4874 字节 节点数: 2 node #26 附件=9 第一条键: id, family_id, target_type, target_id, key, name, mime, size, is_image, position, uploader_id, created_at, updated_at, deleted_at id/key/is_image: 120 / 'photos/be4af2e3300c2cfcea8a33c5.jpg' / 1 node #27 附件=0
Trip::nodes()
key
id
mime
is_image
attachsOf()
this.photos = e.attachs
ForEach(this.photos)
静态排查到此为止,服务端与端上代码都看不出问题。
疑点清单:
editing
this.editNode
nodes
e.attachs.length
fbImageSrc
if (this.photos.length > 0)
onError
① 加诊断日志(DIAG-ATTACH / DIAG-FILL),已随 86de596 提交 ② 图片加载失败时显示灰色占位 + 文件名,不再"白块/看不见"
DIAG-ATTACH
DIAG-FILL
86de596
hdc shell 在本机被安全策略拦截,抓不到端上日志 ⇒ 只能靠"改代码 + 用户实测"闭环。 诊断日志保留在代码里,方便下次直接看 hilog。
hdc shell
#51 讲的是地址详细信息的 onPick 回调;本单是编辑时照片墙回填不全,属于附件链路。两者都在 FbTripNodeSheet 里但数据源不同。
@Param editing 在 ArkUI V2 里是单向同步:父组件改 editNode 后, 子组件的 editing 会更新,但 aboutToAppear 只在首次创建时跑一次。
@Param editing
editNode
aboutToAppear
⇒ 换一条行程再点编辑时,editing 变了但回填不重跑 ⇒ this.photos 保留上一次的值(可能为空)⇒ 附件带不全。
this.photos
这正是"列表里能看到、点编辑带不全"的原因:列表用的 nodes 数据是新的, 但浮层里的回填是上一次的。
加一个重建序号:
@Local nodeSheetSeq: number = 0; // 点编辑时 this.editNode = n; this.nodeSheetSeq = this.nodeSheetSeq + 1; // ← 序号 +1 this.nodeSheetTripId = this.tripId; // 组件上 FbTripNodeSheet({ ... }) .id('nodeSheet_' + this.nodeSheetSeq.toString())
.id() 变化时 ArkUI 销毁旧组件、创建新组件 ⇒ aboutToAppear 必然重跑。
.id()
⚠️ 比 if (flag) 0 : 1 那种写法简单可靠 —— 后者的时序在 V2 里不保证。
if (flag) 0 : 1
backOnce() 里只清了 nodeSheetTripId,没清 editNode —— 下次打开若走到"复用"路径就会拿到上一条的 editing。已补。
backOnce()
nodeSheetTripId
attachsOf
ForEach
提交:ffd6ac5
ffd6ac5
ForEach(this.photos, (ph: FbTripNodePhoto) => { Stack() { Image(fbImageSrc(ph.key, token)) // ← 不管图片还是视频,都用 Image
视频是 .mp4,Image 组件加载不出任何东西 ⇒ 一个空白块。 所以现象是"图片都在、视频全没"。
.mp4
Image
FbTripNodePhoto 本来就有 mime 字段(attachsOf 里解析过),完全够判断。
FbTripNodePhoto
按 mime 分流:
mime.startsWith('video/')
#2A2320
⚠️ 不在编辑浮层取视频首帧:端上解码视频首帧很卡,打开编辑会明显卡顿。 详情页也是用"深色块 + ▶"这个做法。
用户:「不光是这几个,名册、观影、旅程、日程,所有的全部都是一样的。」
新增共享组件 FbFormField.ets(5 个表单原来各写一份,改一处要改五处)。
FbFormField.ets
已改:
FbPersonEditSheet
FbEventEditSheet
FbMovieNewSheet
FbDateTimeField
FbDateTimeRow
提交:0c2cf9b
0c2cf9b
layoutWeight(1)
flexShrink(1)
No dependencies set.
The note is not visible to the blocked user.
端上编辑行程时图片/视频带不全:服务端返回9个,端上只显示部分
现象
用户 2026-11-05 在网页端新增了图片和视频,行程列表里能看到,
但点「编辑」进去后带不全。
已排除(服务端全对)
用真实 token 打
GET /api/v1/trips/227/nodes:Trip::nodes()返回 9 个附件 ✅key无一为空 ✅id/mime/is_image字段齐全 ✅attachsOf()解析逻辑正确(逐条取 key,空则跳过)✅this.photos = e.attachs回填代码存在 ✅ForEach(this.photos)渲染代码存在 ✅待定位
静态排查到此为止,服务端与端上代码都看不出问题。
疑点清单:
editing传的是旧对象(this.editNode在nodes更新后没刷新)e.attachs.lengthfbImageSrc返回的 URL 无效 ⇒ 数据在但图不显示key是否已是完整路径if (this.photos.length > 0)在 @Builder 里没触发重渲染onError显示占位本次改动(待验证)
① 加诊断日志(
DIAG-ATTACH/DIAG-FILL),已随86de596提交② 图片加载失败时显示灰色占位 + 文件名,不再"白块/看不见"
验收
备注
hdc shell在本机被安全策略拦截,抓不到端上日志 ⇒ 只能靠"改代码 + 用户实测"闭环。诊断日志保留在代码里,方便下次直接看 hilog。
为什么单独建单
#51 讲的是地址详细信息的 onPick 回调;本单是编辑时照片墙回填不全,属于附件链路。两者都在 FbTripNodeSheet 里但数据源不同。
2026-11-05 进展
已定位根因
@Param editing在 ArkUI V2 里是单向同步:父组件改editNode后,子组件的
editing会更新,但aboutToAppear只在首次创建时跑一次。⇒ 换一条行程再点编辑时,
editing变了但回填不重跑⇒
this.photos保留上一次的值(可能为空)⇒ 附件带不全。这正是"列表里能看到、点编辑带不全"的原因:列表用的
nodes数据是新的,但浮层里的回填是上一次的。
修法
加一个重建序号:
.id()变化时 ArkUI 销毁旧组件、创建新组件 ⇒aboutToAppear必然重跑。⚠️ 比
if (flag) 0 : 1那种写法简单可靠 —— 后者的时序在 V2 里不保证。顺带修的
backOnce()里只清了nodeSheetTripId,没清editNode——下次打开若走到"复用"路径就会拿到上一条的
editing。已补。验证
GET /api/v1/trips/227/nodes→ node #26 返回 9 个附件 ✅attachsOf解析、this.photos回填、ForEach渲染都正确 ✅提交:
ffd6ac52026-11-05 已修复
根因找到了:视频走的是 Image
视频是
.mp4,Image组件加载不出任何东西 ⇒ 一个空白块。所以现象是"图片都在、视频全没"。
FbTripNodePhoto本来就有mime字段(attachsOf里解析过),完全够判断。修法
按
mime分流:mime.startsWith('video/')→ 深色底#2A2320+ 白色 ▶Image(不变)⚠️ 不在编辑浮层取视频首帧:端上解码视频首帧很卡,打开编辑会明显卡顿。
详情页也是用"深色块 + ▶"这个做法。
同时做的:全局表单规范铺开
用户:「不光是这几个,名册、观影、旅程、日程,所有的全部都是一样的。」
新增共享组件
FbFormField.ets(5 个表单原来各写一份,改一处要改五处)。已改:
FbPersonEditSheetFbEventEditSheetFbMovieNewSheetFbDateTimeFieldFbDateTimeRow两排(电影+日程同时生效)提交:
0c2cf9b待用户验证
layoutWeight(1),之前flexShrink(1)划不动)