feat(workspace): 画布 2D/3D 切换与车辆相机跟随

- workspaceToolbar API 新增 view/toggle 与 camera/follow
- 画布底栏新增 2D/3D 切换、自动跟随按钮,组件卸载时自动停止跟随
- 地图监控页将选中车辆 id 透传给底栏,并接入监控配置缓存

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zhaowei.huang
2026-05-31 00:16:51 +08:00
co-authored by Cursor
parent e6c49a0d78
commit bf450e38a0
3 changed files with 144 additions and 17 deletions
@@ -45,12 +45,21 @@ export interface ToolbarLayer {
visible: boolean
}
export interface ToolbarViewState {
map2D: boolean
follow: {
enabled: boolean
carId: number | null
}
}
export interface ToolbarState {
align: { sites: boolean; cars: boolean; tracks: boolean }
select: { tracks: boolean; cars: boolean; decor: boolean; sites: boolean }
display: { labels: boolean; primitives: boolean; cars: boolean }
layers: ToolbarLayer[]
recording: ToolbarRecordingState
view?: ToolbarViewState
}
interface Envelope<T> {
@@ -109,5 +118,17 @@ export const workspaceToolbarApi = {
startPlayback: (fileName: string) =>
unwrap<ToolbarState>(http.post(`${BASE}/playback/start`, compatFilePayload(fileName))),
stopPlayback: () => unwrap<ToolbarState>(http.post(`${BASE}/playback/stop`))
stopPlayback: () => unwrap<ToolbarState>(http.post(`${BASE}/playback/stop`)),
toggleViewMode: () => unwrap<ToolbarState>(http.post(`${BASE}/view/toggle`)),
setCameraFollow: (carId: number | null, enabled: boolean) =>
unwrap<ToolbarState>(
http.post(`${BASE}/camera/follow`, {
carId: carId ?? undefined,
enabled,
CarId: carId ?? undefined,
Enabled: enabled
})
)
}