版本:v1.0
日期:2026-07-25
目标项目:/Users/yuxin/local/code/celestia-trace/frontend
网页端当前左侧仅实现了“看起来像播放器和事件列表”的基础框架,尚未与 iOS 回放页功能等价。必须重做为真实数据驱动版本:
用户在网页端打开一条已同步现场记录后,能够在左侧完成与 iOS SessionDetailView 相同的查看、回放、定位和事件编辑任务;同一条记录在网页与 iOS 之间应保持数据、时间位置和操作结果一致。
以当前工作区源码为准:
SessionDetailView.swiftMultiTrackTimeline.swiftPlaybackViewModel.swiftChronoFeedRow.swiftImagePicker.swiftTimelineLocationPicker.swiftCelestiaSession.swiftCelestiaTimelineEvent.swiftRemoteNetworkService.swift注意:审计时 iOS 工作区的 SessionDetailView.swift 和 MultiTrackTimeline.swift 存在未提交修改,本 PRD按当前文件内容而非仅按 master 最新提交定义功能。
网页详情页继续保留左右双栏:
左侧内容从上到下固定为:
顶部或标题区同时提供:
不得继续在左侧增加“与 iOS App 保持一致”等自我说明标签,也不得用独立的“添加网页端标记”表单替代轨道点击交互。
GET /sessions/{id},不得只依赖列表页传入的旧对象。session / events / assets / revision 页面状态。relativeTimeMs 升序排列。验收:
assets 中筛选 kind=AUDIO 的资源。验收:
revision,不能只修改前端内存对象。Info 面板必须展示:
MARKER 计入,续录标记不计入。视觉要求:
/:\?%*|"<>、控制字符和换行,清除尾部句点与空白。状态至少包括:
行为:
展示:
v{revision}。baseRevision 触发 409 保护,不做最后写入者静默覆盖。时间线包含:
轨道左侧保留约 24–30px 图标区,分别使用波形、相机、文档图标。
m:ss。-50dB → 0...1 线性规则归一化。0...实际音频时长。MARKER 显示警示/标记图标。MARKER 显示在音频轨,使用续录图标。MM:SS;达到一小时为 H:MM:SS。<audio> 双向同步。relativeTimeMs 升序。卡片展示:
点击卡片:
NOTE 事件、更新版本、刷新时间线和事件列表。数据要求:
relativeTimeMs 相同。PHOTO 事件和独立照片资产。clientId 必须与事件稳定关联,遵循 {eventClientId}-photo。网页适配:
locationName / locationAddress / latitude / longitude。eventType=MARKERrelativeTimeMs=原音频时长textContent=续录时间:yyyy年M月d日 HH:mm:ss平台限制:
systemBackground。secondarySystemBackground,主内容使用约 15%–50% 的轻透明层级。#E6C687,只用于已同步、选中位置等强调状态。#E53935。aria-live 或等价方式通知。createSyntheticFieldAudio() 在无音频或下载失败时生成假音频。Math.sin() 生成,与真实录音无关。session.title 内存对象,不写后端。RecordDetailModal 调用不存在的 sessionAPI.addEvent;并且 App.jsx 未传入 onEventAdded。现有后端已具备:
POST /sessions 全量幂等 Upsert,支持 baseRevision 和 deletedEventClientIds。为了稳定完成网页/iOS 双端编辑,建议:
getSessionDetailsyncSessionuploadAssetaddEvent(若仍保留单事件接口)DELETE /sessions/{sessionId}/assets/{assetId}。clientId 对应 {clientId}-photo 资产。event.asset 或 event.assetId,减少前端猜测。POST /sessions/{id}/events 新增事件后应同步更新 photoCount / noteCount / updatedAt / revision。POST /sessions Upsert;不要两套写入语义混用。完成标准:用户看到和听到的内容全部来自真实记录。
完成标准:网页编辑后 iOS 同步能得到完全相同的事件、照片、备注和位置。
完成标准:长录音、大照片批次、续录与冲突场景可可靠完成。
只有同时满足以下条件,才能宣称“网页左侧与 iOS 回放页功能统一”:
本 PRD完成了当前 iOS 与网页源码、数据模型、同步逻辑和后端路由的逐项核对。当前已启动模拟器停在麦克风权限请求,未在未获授权的情况下改变权限,因此本轮没有取得回放详情页的完整运行截图。视觉尺寸以 SwiftUI 当前源码为基准,实施时仍需用包含真实音频、照片、笔记、位置和续录标记的测试记录,分别在 iOS 和网页逐状态截图对照验收。