diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition_and_binding.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition_and_binding.rs index 27bf1f9f8..dee6b9573 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition_and_binding.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition_and_binding.rs @@ -595,7 +595,22 @@ pub(crate) async fn recognition_and_binding_impl_with_provider( if state.ui_design_images.len() > MAX_REFERENCES { return Err("界面图最多 4 张".to_string()); } - let context_ids = state.ui_design_images.keys().cloned().collect::>(); + let mut context_ids = state.ui_design_images.keys().cloned().collect::>(); + context_ids.sort_by(|left, right| { + let left_is_page = state + .ui_design_images + .get(left) + .and_then(|image| image.metadata.role) + == Some(crate::ui_editor::resource::ui_design_image::UIDesignImageRole::Page); + let right_is_page = state + .ui_design_images + .get(right) + .and_then(|image| image.metadata.role) + == Some(crate::ui_editor::resource::ui_design_image::UIDesignImageRole::Page); + right_is_page + .cmp(&left_is_page) + .then_with(|| left.as_str().cmp(right.as_str())) + }); let root = Path::new(project_path.trim()); let mut parts = Vec::with_capacity(state.ui_design_images.len() * 2 + state.sprite_assets.len() * 2 + 2);