use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; use chrono::{DateTime, Utc}; #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] #[sea_orm(table_name = "menus")] pub struct Model { #[sea_orm(primary_key)] pub id: i32, pub parent_id: Option, pub name: String, pub path: Option, pub component: Option, pub icon: Option, pub sort_order: i32, pub menu_type: i8, // 0: 目录, 1: 菜单, 2: 按钮 pub visible: i8, // 0: 隐藏, 1: 显示 pub status: i8, // 0: 禁用, 1: 启用 pub permission_key: Option, pub created_at: DateTime, pub updated_at: DateTime, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] pub enum Relation { #[sea_orm( belongs_to = "Entity", from = "Column::ParentId", to = "Column::Id" )] Parent, #[sea_orm( has_many = "Entity", from = "Column::Id", to = "Column::ParentId" )] Children, } impl Related for Entity { fn to() -> RelationDef { Relation::Parent.def() } } impl ActiveModelBehavior for ActiveModel {} // 菜单创建请求 #[derive(Debug, Deserialize)] pub struct CreateMenuRequest { pub parent_id: Option, pub name: String, pub path: Option, pub component: Option, pub icon: Option, pub sort_order: i32, pub menu_type: i8, pub visible: i8, pub permission_key: Option, } // 菜单更新请求 #[derive(Debug, Deserialize)] pub struct UpdateMenuRequest { pub parent_id: Option, pub name: Option, pub path: Option, pub component: Option, pub icon: Option, pub sort_order: Option, pub menu_type: Option, pub visible: Option, pub status: Option, pub permission_key: Option, } // 菜单树响应 #[derive(Debug, Serialize, Clone)] pub struct MenuTreeResponse { pub id: i32, pub parent_id: Option, pub name: String, pub path: Option, pub component: Option, pub icon: Option, pub sort_order: i32, pub menu_type: i8, pub visible: i8, pub status: i8, pub permission_key: Option, pub children: Vec, pub created_at: DateTime, pub updated_at: DateTime, }