From 69a2dc79fe473f0fa2be5adbedfa35d4e0e3e78b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 13 Aug 2026 20:29:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A9=E5=B1=95=20UI=20=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=99=A8=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 `Node` 添加 `id` 字段,支持更全面的节点标识。 - 在 `NodeMetadata` 中新增 `status` 和 `source` 字段,增强元数据定义。 - 调整模块定义路径,优化类型序列化支持。 - 更新 Rust 结构体的字段为 `pub`,提升数据访问灵活性。 - 整理导入路径,移除或调整重复声明。 --- .../src/ui_editor/component/image.rs | 2 +- .../src-tauri/src/ui_editor/component/text.rs | 2 +- .../src-tauri/src/ui_editor/layout/node.rs | 29 +++++++++---------- .../src-tauri/src/ui_editor/mod.rs | 2 +- .../src-tauri/src/ui_editor/resource/font.rs | 2 +- .../src/ui_editor/resource/sprite.rs | 2 +- .../src/ui_editor/resource/ui_design_image.rs | 3 +- .../src-tauri/src/ui_editor/state/mod.rs | 14 ++++----- .../src-tauri/src/ui_editor/utils.rs | 1 + .../src/features/ui-editor/types/Node.ts | 3 +- .../src/features/ui-editor/types/NodeId.ts | 3 ++ .../features/ui-editor/types/NodeMetadata.ts | 4 ++- .../features/ui-editor/types/NodeSource.ts | 3 ++ .../features/ui-editor/types/NodeStatus.ts | 3 ++ .../ui-editor/types/RecognitionDTO.ts | 4 +++ 15 files changed, 47 insertions(+), 30 deletions(-) create mode 100644 apps/ai-game-creator-shell/src/features/ui-editor/types/NodeId.ts create mode 100644 apps/ai-game-creator-shell/src/features/ui-editor/types/NodeSource.ts create mode 100644 apps/ai-game-creator-shell/src/features/ui-editor/types/NodeStatus.ts create mode 100644 apps/ai-game-creator-shell/src/features/ui-editor/types/RecognitionDTO.ts diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/component/image.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/component/image.rs index f7db00a63..1038142c6 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/component/image.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/component/image.rs @@ -3,11 +3,11 @@ use std::{error::Error, fmt}; use crate::ui_editor::component::common::error::ComponentValueError; use crate::ui_editor::layout::transform::Transform; use crate::ui_editor::resource::sprite::SpriteAsset; +use crate::ui_editor::utils::SpriteAssetId; use nalgebra::Vector2; use serde::{Deserialize, Serialize}; use ts_rs::TS; use typed_floats::tf32::StrictlyPositiveFinite; -use crate::ui_editor::utils::SpriteAssetId; #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/component/text.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/component/text.rs index b30677037..f99b7a26e 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/component/text.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/component/text.rs @@ -1,10 +1,10 @@ use crate::ui_editor::component::common::error::ComponentValueError; use crate::ui_editor::resource::sprite::{Color, WHITE}; +use crate::ui_editor::utils::FontAssetId; use serde::{Deserialize, Serialize}; use std::num::NonZeroU32; use ts_rs::TS; use typed_floats::tf32::StrictlyPositiveFinite; -use crate::ui_editor::utils::FontAssetId; #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/layout/node.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/layout/node.rs index fe5bbabfa..afd79baa6 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/layout/node.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/layout/node.rs @@ -7,34 +7,33 @@ use ts_rs::TS; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] pub struct Node { - id: NodeId, - transform: Transform, - metadata: NodeMetadata, - components: Vec, - children: Vec, + pub id: NodeId, + pub transform: Transform, + pub metadata: NodeMetadata, + pub components: Vec, + pub children: Vec, } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] pub enum NodeSource { - Human, - Llm, + Human, + Llm, } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] pub enum NodeStatus { - Passed, - NeedReview(String), // reason inside - Blocked, + Passed, + NeedReview(String), // reason inside + Blocked, } - #[derive(Clone, Debug, Deserialize, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] pub struct NodeMetadata { - name: String, - description: String, - status: NodeStatus, - source: NodeSource, + pub name: String, + pub description: String, + pub status: NodeStatus, + pub source: NodeSource, } diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/mod.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/mod.rs index 76ecab07e..55d2ae133 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/mod.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/mod.rs @@ -1,6 +1,6 @@ +pub mod commands; pub mod component; pub mod layout; pub mod resource; pub mod state; -pub mod commands; mod utils; diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/font.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/font.rs index 7328c8f4f..0c5981e76 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/font.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/font.rs @@ -1,6 +1,6 @@ +use crate::ui_editor::utils::FontAssetId; use serde::{Deserialize, Serialize}; use ts_rs::TS; -use crate::ui_editor::utils::FontAssetId; // TODO #[derive(Clone, Debug, Deserialize, PartialEq, Serialize, TS)] diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/sprite.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/sprite.rs index 8e07ff69d..abe5e171f 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/sprite.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/sprite.rs @@ -1,9 +1,9 @@ use crate::ui_editor::component::common::error::ComponentValueError; +use crate::ui_editor::utils::SpriteAssetId; use nalgebra::Vector2; use serde::{Deserialize, Serialize}; use ts_rs::TS; use typed_floats::tf32::StrictlyPositiveFinite; -use crate::ui_editor::utils::SpriteAssetId; pub type Color = [u8; 4]; diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/ui_design_image.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/ui_design_image.rs index fff90af5b..39bd272cd 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/ui_design_image.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/resource/ui_design_image.rs @@ -1,11 +1,12 @@ use crate::ui_editor::utils::UIDesignImageId; use nalgebra::Vector2; +use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use std::fmt::{Display, Formatter, Write}; use ts_rs::TS; use typed_floats::tf32::StrictlyPositiveFinite; -#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize, TS)] +#[derive(Clone, Copy, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] pub enum UIDesignImageRole { Page, diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/state/mod.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/state/mod.rs index 2e7ce6c3a..15a055a31 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/state/mod.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/state/mod.rs @@ -2,23 +2,23 @@ use crate::ui_editor::layout::node::Node; use crate::ui_editor::resource::font::FontAsset; use crate::ui_editor::resource::sprite::SpriteAsset; use crate::ui_editor::resource::ui_design_image::UIDesignImage; +use crate::ui_editor::utils::{FontAssetId, SpriteAssetId, UIDesignImageId}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use ts_rs::TS; -use crate::ui_editor::utils::{FontAssetId, SpriteAssetId, UIDesignImageId}; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] pub struct UITree { - src_ui_design: UIDesignImageId, - children: Vec, + pub src_ui_design: UIDesignImageId, + pub children: Vec, } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize, TS)] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] pub struct State { - pub(crate) ui_trees: Vec, - pub(crate) ui_design_images: HashMap, - pub(crate) sprite_assets: HashMap, - pub(crate) font_assets: HashMap, + pub ui_trees: Vec, + pub ui_design_images: HashMap, + pub sprite_assets: HashMap, + pub font_assets: HashMap, } diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/utils.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/utils.rs index d3882daea..de48e841b 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/utils.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/utils.rs @@ -12,6 +12,7 @@ macro_rules! define_id { PartialOrd, serde::Deserialize, serde::Serialize, + schemars::JsonSchema, ts_rs::TS, )] #[ts(export, export_to = concat!(env!("CARGO_MANIFEST_DIR"), "/../src/features/ui-editor/types/"))] diff --git a/apps/ai-game-creator-shell/src/features/ui-editor/types/Node.ts b/apps/ai-game-creator-shell/src/features/ui-editor/types/Node.ts index af2154061..a7d3b1032 100644 --- a/apps/ai-game-creator-shell/src/features/ui-editor/types/Node.ts +++ b/apps/ai-game-creator-shell/src/features/ui-editor/types/Node.ts @@ -1,6 +1,7 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { Component } from "./Component"; +import type { NodeId } from "./NodeId"; import type { NodeMetadata } from "./NodeMetadata"; import type { Transform } from "./Transform"; -export type Node = { transform: Transform, metadata: NodeMetadata, components: Array, children: Array, }; +export type Node = { id: NodeId, transform: Transform, metadata: NodeMetadata, components: Array, children: Array, }; diff --git a/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeId.ts b/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeId.ts new file mode 100644 index 000000000..b83e79464 --- /dev/null +++ b/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeId.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type NodeId = string; diff --git a/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeMetadata.ts b/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeMetadata.ts index 31627a3ff..012fe1fa0 100644 --- a/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeMetadata.ts +++ b/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeMetadata.ts @@ -1,3 +1,5 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { NodeSource } from "./NodeSource"; +import type { NodeStatus } from "./NodeStatus"; -export type NodeMetadata = { name: string, description: string, from: string, }; +export type NodeMetadata = { name: string, description: string, status: NodeStatus, source: NodeSource, }; diff --git a/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeSource.ts b/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeSource.ts new file mode 100644 index 000000000..edf3cae3f --- /dev/null +++ b/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeSource.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type NodeSource = "Human" | "Llm"; diff --git a/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeStatus.ts b/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeStatus.ts new file mode 100644 index 000000000..cd837ba75 --- /dev/null +++ b/apps/ai-game-creator-shell/src/features/ui-editor/types/NodeStatus.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type NodeStatus = "Passed" | { "NeedReview": string } | "Blocked"; diff --git a/apps/ai-game-creator-shell/src/features/ui-editor/types/RecognitionDTO.ts b/apps/ai-game-creator-shell/src/features/ui-editor/types/RecognitionDTO.ts new file mode 100644 index 000000000..57f9f1ea9 --- /dev/null +++ b/apps/ai-game-creator-shell/src/features/ui-editor/types/RecognitionDTO.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { UITree } from "./UITree"; + +export type RecognitionDTO = { ui_trees: Array, };