fix: restore scene preview styles
This commit is contained in:
1
.trellis/tasks/08-26-scene-preview-fix/check.jsonl
Normal file
1
.trellis/tasks/08-26-scene-preview-fix/check.jsonl
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
|
||||||
1
.trellis/tasks/08-26-scene-preview-fix/implement.jsonl
Normal file
1
.trellis/tasks/08-26-scene-preview-fix/implement.jsonl
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"_example": "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. Put spec/research files only — no code paths. Run `python3 .trellis/scripts/get_context.py --mode packages` to list available specs. Delete this line once real entries are added."}
|
||||||
15
.trellis/tasks/08-26-scene-preview-fix/prd.md
Normal file
15
.trellis/tasks/08-26-scene-preview-fix/prd.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# 修复场景效果预览
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
恢复 React 工作台的场景效果:开启后道路面显示无边线的深灰沥青效果,步行带显示灰色填充;关闭后回到编辑样式。
|
||||||
|
|
||||||
|
## Cause
|
||||||
|
|
||||||
|
`MapCanvas` 只在挂载时创建 OpenLayers 图层,其 style callback 捕获了首次渲染的 `scene` 值,后续切换无法读取当前状态。
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- 切换场景效果后,原生道路面和步行带立即切换到对应场景样式。
|
||||||
|
- 切换不重建 `Map`、图层或 feature source。
|
||||||
|
- `npm run format:check`、`npm run test:client` 和 `npm run build` 通过。
|
||||||
26
.trellis/tasks/08-26-scene-preview-fix/task.json
Normal file
26
.trellis/tasks/08-26-scene-preview-fix/task.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"id": "scene-preview-fix",
|
||||||
|
"name": "scene-preview-fix",
|
||||||
|
"title": "修复场景效果预览",
|
||||||
|
"description": "修复 React OpenLayers 图层样式捕获初始 scene 状态导致沥青场景效果未生效的问题",
|
||||||
|
"status": "in_progress",
|
||||||
|
"dev_type": null,
|
||||||
|
"scope": null,
|
||||||
|
"package": null,
|
||||||
|
"priority": "P2",
|
||||||
|
"creator": "dingkang",
|
||||||
|
"assignee": "dingkang",
|
||||||
|
"createdAt": "2026-08-26",
|
||||||
|
"completedAt": null,
|
||||||
|
"branch": null,
|
||||||
|
"base_branch": "main",
|
||||||
|
"worktree_path": null,
|
||||||
|
"commit": null,
|
||||||
|
"pr_url": null,
|
||||||
|
"subtasks": [],
|
||||||
|
"children": [],
|
||||||
|
"parent": null,
|
||||||
|
"relatedFiles": [],
|
||||||
|
"notes": "",
|
||||||
|
"meta": {}
|
||||||
|
}
|
||||||
@@ -20,13 +20,15 @@ export function MapCanvas({ state, selected, visible, scene, onSelectRoad, onFea
|
|||||||
const layersRef = useRef<ReturnType<typeof createLayers> | null>(null);
|
const layersRef = useRef<ReturnType<typeof createLayers> | null>(null);
|
||||||
const selectedRef = useRef<Road | null>(selected);
|
const selectedRef = useRef<Road | null>(selected);
|
||||||
const stateRef = useRef(state);
|
const stateRef = useRef(state);
|
||||||
|
const sceneRef = useRef(scene);
|
||||||
selectedRef.current = selected;
|
selectedRef.current = selected;
|
||||||
stateRef.current = state;
|
stateRef.current = state;
|
||||||
|
sceneRef.current = scene;
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!target.current) return;
|
if (!target.current) return;
|
||||||
const layers = createLayers(
|
const layers = createLayers(
|
||||||
() => selectedRef.current,
|
() => selectedRef.current,
|
||||||
() => scene,
|
() => sceneRef.current,
|
||||||
);
|
);
|
||||||
layersRef.current = layers;
|
layersRef.current = layers;
|
||||||
const map = new Map({
|
const map = new Map({
|
||||||
|
|||||||
Reference in New Issue
Block a user