change - 修改界面显示效果

dev
WenJY 6 hours ago
parent a97aca845e
commit ab609394e4

@ -8,7 +8,9 @@
"Bash(dotnet --version)",
"Bash(dotnet sln *)",
"Bash(dotnet clean *)",
"Bash(cat)"
"Bash(cat)",
"Bash(sed -i '' 's|Background=\"#0F1620\" CornerRadius=\"8\" Padding=\"22\" BorderBrush=\"#1A2F4A\"|CornerRadius=\"8\" Padding=\"22\" BorderBrush=\"#1E3550\"|g' HomePageView.axaml)",
"Bash(sed -i '' 's|<Border CornerRadius=\"8\" Padding=\"22\" BorderBrush=\"#1E3550\" BorderThickness=\"1\">|<Border CornerRadius=\"8\" Padding=\"22\" BorderBrush=\"#1E3550\" BorderThickness=\"1\"><Border.Background><LinearGradientBrush StartPoint=\"0%,0%\" EndPoint=\"0%,100%\"><GradientStop Color=\"#121C29\" Offset=\"0\"/><GradientStop Color=\"#0F1620\" Offset=\"1\"/></LinearGradientBrush></Border.Background>|g' HomePageView.axaml)"
]
}
}

@ -3,26 +3,67 @@
x:Class="Sln.Wcs.UI.Views.Base.EntityEditWindow"
x:CompileBindings="False"
SizeToContent="WidthAndHeight"
MaxWidth="750" MaxHeight="700"
MaxWidth="780" MaxHeight="700"
WindowStartupLocation="CenterOwner"
Title="编辑"
Background="#0F1620"
Foreground="#BCC8D6"
Background="Transparent"
TransparencyLevelHint="AcrylicBlur"
ExtendClientAreaToDecorationsHint="True"
ExtendClientAreaChromeHints="PreferSystemChrome"
SystemDecorations="Full"
CanResize="False">
<Grid RowDefinitions="*,Auto" Margin="20,16,20,16">
<ScrollViewer Grid.Row="0">
<WrapPanel x:Name="FormPanel" />
</ScrollViewer>
<Border Background="#0F1620" CornerRadius="10" Margin="0"
BorderBrush="#1B3A5C" BorderThickness="1">
<Border.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,100%">
<GradientStop Color="#0F1620" Offset="0" />
<GradientStop Color="#0C1522" Offset="1" />
</LinearGradientBrush>
</Border.Background>
<StackPanel Grid.Row="1" Orientation="Horizontal"
HorizontalAlignment="Right" Spacing="10" Margin="0,16,0,0">
<Button x:Name="CancelBtn" Content="取消"
Background="#0F1F38" Foreground="#8B9BB5"
Padding="22,8" />
<Button x:Name="SaveBtn" Content="保存"
Background="#1565C0" Foreground="White"
Padding="22,8" />
</StackPanel>
</Grid>
<Grid RowDefinitions="Auto,*,Auto" Margin="0">
<!-- Title Bar -->
<Border Grid.Row="0" Padding="20,14" CornerRadius="10,10,0,0"
Background="#0C1622" BorderBrush="#1A2F4A" BorderThickness="0,0,0,1">
<StackPanel Orientation="Horizontal" Spacing="10">
<Rectangle Width="3" Height="18" Fill="#4FC3F7" RadiusX="2" RadiusY="2" />
<TextBlock x:Name="TitleText" Text="编辑" FontSize="15" FontWeight="SemiBold" Foreground="#DDE4F0" />
</StackPanel>
</Border>
<!-- Form Content -->
<ScrollViewer Grid.Row="1" Margin="20,14,20,10">
<WrapPanel x:Name="FormPanel" />
</ScrollViewer>
<!-- Buttons -->
<Border Grid.Row="2" Padding="20,12" CornerRadius="0,0,10,10"
Background="#0A1018" BorderBrush="#1A2F4A" BorderThickness="0,1,0,0">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Spacing="10">
<Button x:Name="CancelBtn" Content="取 消"
FontSize="12" Padding="24,8"
Background="#0F1F38" Foreground="#8B9BB5"
BorderBrush="#1A2F4A" BorderThickness="1"
CornerRadius="4" />
<Button x:Name="SaveBtn" Content="保 存"
FontSize="12" Padding="24,8"
CornerRadius="4">
<Button.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#1976D2" Offset="0" />
<GradientStop Color="#1565C0" Offset="1" />
</LinearGradientBrush>
</Button.Background>
<Button.Foreground>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#FFFFFF" Offset="0" />
<GradientStop Color="#E0E0E0" Offset="1" />
</LinearGradientBrush>
</Button.Foreground>
</Button>
</StackPanel>
</Border>
</Grid>
</Border>
</Window>

@ -24,7 +24,7 @@ public partial class EntityEditWindow : Window
public Task<bool> ShowDialog(object entity, List<FieldConfig> fields, bool isEdit, Window owner)
{
_entity = entity;
Title = isEdit ? "编辑" : "新增";
TitleText.Text = isEdit ? "编辑" : "新增";
BuildForm(fields);
_tcs = new TaskCompletionSource<bool>();
ShowDialog(owner);
@ -43,27 +43,27 @@ public partial class EntityEditWindow : Window
if (prop is null) continue;
var value = prop.GetValue(_entity);
// 每行一个字段容器: 标题 + 输入框
// 字段卡片
var cell = new Border
{
Width = 340,
Padding = new Thickness(0, 4, 10, 4),
Width = 345,
Padding = new Thickness(12, 6),
Margin = new Thickness(0, 3),
};
var row = new Grid
{
ColumnDefinitions = new ColumnDefinitions("100,*"),
};
var row = new Grid { ColumnDefinitions = new ColumnDefinitions("90,*") };
// 标签
var label = new TextBlock
{
Text = field.DisplayName + ":",
Text = field.DisplayName,
FontSize = 12,
Foreground = Brush.Parse("#8B9BB5"),
Foreground = Brush.Parse("#7B8FA8"),
VerticalAlignment = VerticalAlignment.Center,
};
row.Children.Add(label);
// 输入框
Control input;
if (field.FieldType == FieldType.CheckBox)
{
@ -71,7 +71,7 @@ public partial class EntityEditWindow : Window
{
IsChecked = value is int iv ? iv == 1 : (value as bool? ?? false),
IsEnabled = !field.IsReadOnly,
Foreground = Brush.Parse("#DDE4F0"),
Foreground = Brush.Parse("#BCC8D6"),
VerticalAlignment = VerticalAlignment.Center,
};
cb.IsCheckedChanged += (_, _) =>
@ -85,9 +85,13 @@ public partial class EntityEditWindow : Window
Text = value?.ToString() ?? "",
IsReadOnly = field.IsReadOnly,
Watermark = field.DisplayName,
Background = Brush.Parse("#0C1622"),
Background = Brush.Parse("#0A0E14"),
Foreground = Brush.Parse("#DDE4F0"),
BorderBrush = Brush.Parse("#1A2F4A"),
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(3),
Padding = new Thickness(8, 5),
FontSize = 12,
};
if (field.FieldType == FieldType.Number)
{

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Base.LocationInfoListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索库位编号/名称..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索库位编号/名称..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1*,0.8*,0.7*,0.7*,0.5*,0.5*,0.5*,0.8*,1*,0.7*,0.7*,0.8*">

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Base.MaterialInfoListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索物料编号/名称..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索物料编号/名称..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1.2*,1.3*,0.9*,1.2*,1*,1*,0.8*,0.8*">

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Base.StoreInfoListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索仓库编号/名称..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索仓库编号/名称..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1.2*,1.5*,1*,1*,1*">

@ -1,12 +1,12 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Device.DeviceHostListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索主机编号/名称..." Text="{Binding SearchText}" Width="260"
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索主机编号/名称..." Text="{Binding SearchText}" Width="220"
Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1.5*,1.5*,0.8*,1.2*,0.8*,1.2*,1*,1.2*">

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Device.DeviceInfoListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索设备编号/名称..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索设备编号/名称..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1.2*,1.2*,0.8*,0.7*,0.7*,1*,0.8*,0.8*,0.8*">

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Device.DeviceParamListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索参数编号/名称..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索参数编号/名称..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1*,1*,1.2*,1*,0.7*,0.6*,0.7*,0.7*,0.7*,0.8*">

@ -3,8 +3,15 @@
x:Class="Sln.Wcs.UI.Views.HomePageView">
<ScrollViewer Margin="20,14,20,14">
<StackPanel Spacing="14">
<!-- Intro Card -->
<Border Background="#0F1620" CornerRadius="8" Padding="22" BorderBrush="#1A2F4A" BorderThickness="1">
<Border CornerRadius="8" Padding="22" BorderBrush="#1E3550" BorderThickness="1">
<Border.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#121C29" Offset="0" />
<GradientStop Color="#0F1620" Offset="1" />
</LinearGradientBrush>
</Border.Background>
<StackPanel Spacing="10">
<StackPanel Orientation="Horizontal" Spacing="10">
<Rectangle Width="3" Height="20" Fill="#4FC3F7" RadiusX="2" RadiusY="2" />
@ -14,32 +21,31 @@
FontSize="12" Foreground="#7B8FA8" TextWrapping="Wrap" LineHeight="20" />
<WrapPanel Margin="0,4,0,0">
<Border Background="#0F1F38" CornerRadius="4" Padding="10,5" Margin="0,0,8,8" BorderBrush="#1B3A5C" BorderThickness="1">
<TextBlock Text=".NET 8.0" FontSize="11" Foreground="#64B5F6" />
</Border>
<TextBlock Text=".NET 8.0" FontSize="11" Foreground="#64B5F6" /></Border>
<Border Background="#0F1F38" CornerRadius="4" Padding="10,5" Margin="0,0,8,8" BorderBrush="#1B3A5C" BorderThickness="1">
<TextBlock Text="Avalonia UI" FontSize="11" Foreground="#64B5F6" />
</Border>
<TextBlock Text="Avalonia UI" FontSize="11" Foreground="#64B5F6" /></Border>
<Border Background="#0F1F38" CornerRadius="4" Padding="10,5" Margin="0,0,8,8" BorderBrush="#1B3A5C" BorderThickness="1">
<TextBlock Text="MVVM" FontSize="11" Foreground="#64B5F6" />
</Border>
<TextBlock Text="MVVM" FontSize="11" Foreground="#64B5F6" /></Border>
<Border Background="#0F1F38" CornerRadius="4" Padding="10,5" Margin="0,0,8,8" BorderBrush="#1B3A5C" BorderThickness="1">
<TextBlock Text="SqlSugar ORM" FontSize="11" Foreground="#64B5F6" />
</Border>
<TextBlock Text="SqlSugar ORM" FontSize="11" Foreground="#64B5F6" /></Border>
<Border Background="#0F1F38" CornerRadius="4" Padding="10,5" Margin="0,0,8,8" BorderBrush="#1B3A5C" BorderThickness="1">
<TextBlock Text="Serilog" FontSize="11" Foreground="#64B5F6" />
</Border>
<TextBlock Text="Serilog" FontSize="11" Foreground="#64B5F6" /></Border>
<Border Background="#0F1F38" CornerRadius="4" Padding="10,5" Margin="0,0,8,8" BorderBrush="#1B3A5C" BorderThickness="1">
<TextBlock Text="Apollo 配置中心" FontSize="11" Foreground="#64B5F6" />
</Border>
<TextBlock Text="Apollo 配置中心" FontSize="11" Foreground="#64B5F6" /></Border>
<Border Background="#0F1F38" CornerRadius="4" Padding="10,5" Margin="0,0,8,8" BorderBrush="#1B3A5C" BorderThickness="1">
<TextBlock Text="FusionCache" FontSize="11" Foreground="#64B5F6" />
</Border>
<TextBlock Text="FusionCache" FontSize="11" Foreground="#64B5F6" /></Border>
</WrapPanel>
</StackPanel>
</Border>
<!-- Module Card -->
<Border Background="#0F1620" CornerRadius="8" Padding="22" BorderBrush="#1A2F4A" BorderThickness="1">
<Border CornerRadius="8" Padding="22" BorderBrush="#1E3550" BorderThickness="1">
<Border.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#121C29" Offset="0" />
<GradientStop Color="#0F1620" Offset="1" />
</LinearGradientBrush>
</Border.Background>
<StackPanel Spacing="12">
<StackPanel Orientation="Horizontal" Spacing="10">
<Rectangle Width="3" Height="20" Fill="#4FC3F7" RadiusX="2" RadiusY="2" />
@ -49,57 +55,47 @@
<Border Width="240" Padding="14,12" Margin="0,0,14,14" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<TextBlock Text="Sln.Wcs" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
<TextBlock Text="主控台程序负责系统启动、配置加载、DI 容器编排" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" />
</StackPanel>
</Border>
<TextBlock Text="主控台程序负责系统启动、配置加载、DI 容器编排" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" /></StackPanel></Border>
<Border Width="240" Padding="14,12" Margin="0,0,14,14" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<TextBlock Text="Sln.Wcs.UI" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
<TextBlock Text="跨平台桌面客户端,基于 Avalonia + MVVM提供设备监控界面" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" />
</StackPanel>
</Border>
<TextBlock Text="跨平台桌面客户端,基于 Avalonia + MVVM提供设备监控界面" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" /></StackPanel></Border>
<Border Width="240" Padding="14,12" Margin="0,0,14,14" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<TextBlock Text="Sln.Wcs.Business" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
<TextBlock Text="业务逻辑层,任务创建、库位筛选、物料入库/出库策略" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" />
</StackPanel>
</Border>
<TextBlock Text="业务逻辑层,任务创建、库位筛选、物料入库/出库策略" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" /></StackPanel></Border>
<Border Width="240" Padding="14,12" Margin="0,0,14,14" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<TextBlock Text="Sln.Wcs.Repository" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
<TextBlock Text="数据访问层,基于 SqlSugar ORM多数据库连接管理" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" />
</StackPanel>
</Border>
<TextBlock Text="数据访问层,基于 SqlSugar ORM多数据库连接管理" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" /></StackPanel></Border>
<Border Width="240" Padding="14,12" Margin="0,0,14,14" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<TextBlock Text="Sln.Wcs.Strategy" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
<TextBlock Text="策略层,物料/库位分配算法,支持多种策略可配置切换" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" />
</StackPanel>
</Border>
<TextBlock Text="策略层,物料/库位分配算法,支持多种策略可配置切换" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" /></StackPanel></Border>
<Border Width="240" Padding="14,12" Margin="0,0,14,14" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<TextBlock Text="Sln.Wcs.Cache" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
<TextBlock Text="缓存层FusionCache + SQLite 分布式缓存,支持熔断" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" />
</StackPanel>
</Border>
<TextBlock Text="缓存层FusionCache + SQLite 分布式缓存,支持熔断" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" /></StackPanel></Border>
<Border Width="240" Padding="14,12" Margin="0,0,14,14" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<TextBlock Text="Sln.Wcs.Serilog" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
<TextBlock Text="日志模块,按 Info/Plc/Agv/Rfid/Alarm/Error 分类存储" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" />
</StackPanel>
</Border>
<TextBlock Text="日志模块,按 Info/Plc/Agv/Rfid/Alarm/Error 分类存储" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" /></StackPanel></Border>
<Border Width="240" Padding="14,12" Margin="0,0,14,14" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<TextBlock Text="Sln.Wcs.Common / Model" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
<TextBlock Text="公共工具层与领域模型,提供基础类型、实体定义与配置" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" />
</StackPanel>
</Border>
<TextBlock Text="公共工具层与领域模型,提供基础类型、实体定义与配置" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" /></StackPanel></Border>
</WrapPanel>
</StackPanel>
</Border>
<!-- 海康 AGV 模块 -->
<Border Background="#0F1620" CornerRadius="8" Padding="22" BorderBrush="#1A2F4A" BorderThickness="1">
<Border CornerRadius="8" Padding="22" BorderBrush="#1E3550" BorderThickness="1">
<Border.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#121C29" Offset="0" />
<GradientStop Color="#0F1620" Offset="1" />
</LinearGradientBrush>
</Border.Background>
<StackPanel Spacing="12">
<StackPanel Orientation="Horizontal" Spacing="10">
<Rectangle Width="3" Height="20" Fill="#4FC3F7" RadiusX="2" RadiusY="2" />
@ -108,39 +104,36 @@
<TextBlock Text="封装海康机器人 RCS-2000 接口,采用三层架构实现 AGV 任务下发、路径规划、状态查询与设备通知。"
FontSize="12" Foreground="#7B8FA8" TextWrapping="Wrap" />
<WrapPanel>
<Border Width="280" Padding="12,10" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<Border Width="280" Padding="14,12" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<StackPanel Orientation="Horizontal" Spacing="6">
<Border Background="#1565C0" CornerRadius="2" Width="4" Height="14" />
<TextBlock Text="HikRoBotSdk" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
</StackPanel>
<TextBlock Text="底层 HTTP 客户端,封装海康 RCS API 原始接口调用GbTaskSubmit / GenSchedulingTask / QueryStatus / CarrierBind 等)" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" />
</StackPanel>
</Border>
<Border Width="280" Padding="12,10" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<TextBlock Text="HikRoBotSdk" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" /></StackPanel>
<TextBlock Text="底层 HTTP 客户端,封装海康 RCS API 原始接口调用GbTaskSubmit / GenSchedulingTask / QueryStatus / CarrierBind 等)" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" /></StackPanel></Border>
<Border Width="280" Padding="14,12" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<StackPanel Orientation="Horizontal" Spacing="6">
<Border Background="#0277BD" CornerRadius="2" Width="4" Height="14" />
<TextBlock Text="HikRoBotAdapter" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
</StackPanel>
<TextBlock Text="适配层,将 SDK 原始 DTO 转换为业务语义模型,含 TaskType 映射、状态枚举转换、异常处理与重试" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" />
</StackPanel>
</Border>
<Border Width="280" Padding="12,10" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<TextBlock Text="HikRoBotAdapter" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" /></StackPanel>
<TextBlock Text="适配层,将 SDK 原始 DTO 转换为业务语义模型,含 TaskType 映射、状态枚举转换、异常处理与重试" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" /></StackPanel></Border>
<Border Width="280" Padding="14,12" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<StackPanel Orientation="Horizontal" Spacing="6">
<Border Background="#00838F" CornerRadius="2" Width="4" Height="14" />
<TextBlock Text="HikRoBotDispatcher" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
</StackPanel>
<TextBlock Text="调度中枢,管理多 AGV 的任务队列、防死锁、路径冲突检测、优先级调度与设备状态同步" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" />
</StackPanel>
</Border>
<TextBlock Text="HikRoBotDispatcher" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" /></StackPanel>
<TextBlock Text="调度中枢,管理多 AGV 的任务队列、防死锁、路径冲突检测、优先级调度与设备状态同步" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" /></StackPanel></Border>
</WrapPanel>
</StackPanel>
</Border>
<!-- 提升机模块 -->
<Border Background="#0F1620" CornerRadius="8" Padding="22" BorderBrush="#1A2F4A" BorderThickness="1">
<Border CornerRadius="8" Padding="22" BorderBrush="#1E3550" BorderThickness="1">
<Border.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#121C29" Offset="0" />
<GradientStop Color="#0F1620" Offset="1" />
</LinearGradientBrush>
</Border.Background>
<StackPanel Spacing="12">
<StackPanel Orientation="Horizontal" Spacing="10">
<Rectangle Width="3" Height="20" Fill="#4FC3F7" RadiusX="2" RadiusY="2" />
@ -149,45 +142,41 @@
<TextBlock Text="封装提升机 (Hoist) 控制协议,实现出入库升降控制、托盘到位检测、报警设置与状态实时监控。"
FontSize="12" Foreground="#7B8FA8" TextWrapping="Wrap" />
<WrapPanel>
<Border Width="280" Padding="12,10" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<Border Width="280" Padding="14,12" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<StackPanel Orientation="Horizontal" Spacing="6">
<Border Background="#1565C0" CornerRadius="2" Width="4" Height="14" />
<TextBlock Text="HoistSdk" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
</StackPanel>
<TextBlock Text="底层通信客户端,封装提升机原生协议(升降/取货/放货/状态查询),处理网络连接与超时" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" />
</StackPanel>
</Border>
<Border Width="280" Padding="12,10" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<TextBlock Text="HoistSdk" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" /></StackPanel>
<TextBlock Text="底层通信客户端,封装提升机原生协议(升降/取货/放货/状态查询),处理网络连接与超时" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" /></StackPanel></Border>
<Border Width="280" Padding="14,12" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<StackPanel Orientation="Horizontal" Spacing="6">
<Border Background="#0277BD" CornerRadius="2" Width="4" Height="14" />
<TextBlock Text="HoistAdapter" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
</StackPanel>
<TextBlock Text="适配层,将原始协议 DTO 转换为业务领域模型,含楼层映射、托盘状态枚举、报警码解析" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" />
</StackPanel>
</Border>
<Border Width="280" Padding="12,10" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<TextBlock Text="HoistAdapter" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" /></StackPanel>
<TextBlock Text="适配层,将原始协议 DTO 转换为业务领域模型,含楼层映射、托盘状态枚举、报警码解析" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" /></StackPanel></Border>
<Border Width="280" Padding="14,12" Margin="0,0,12,12" Background="#0C1622" CornerRadius="6" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="4">
<StackPanel Orientation="Horizontal" Spacing="6">
<Border Background="#00838F" CornerRadius="2" Width="4" Height="14" />
<TextBlock Text="HoistDispatcher" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" />
</StackPanel>
<TextBlock Text="调度中枢,管理多台提升机的任务队列、楼层协同、托盘到位逻辑、报警联动与状态同步" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" />
</StackPanel>
</Border>
<TextBlock Text="HoistDispatcher" FontSize="13" FontWeight="SemiBold" Foreground="#E1E8F0" /></StackPanel>
<TextBlock Text="调度中枢,管理多台提升机的任务队列、楼层协同、托盘到位逻辑、报警联动与状态同步" FontSize="11" Foreground="#6B8CB5" TextWrapping="Wrap" LineHeight="16" /></StackPanel></Border>
</WrapPanel>
</StackPanel>
</Border>
<!-- 调用关系 -->
<Border Background="#0F1620" CornerRadius="8" Padding="22" BorderBrush="#1A2F4A" BorderThickness="1">
<Border CornerRadius="8" Padding="22" BorderBrush="#1E3550" BorderThickness="1">
<Border.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#121C29" Offset="0" />
<GradientStop Color="#0F1620" Offset="1" />
</LinearGradientBrush>
</Border.Background>
<StackPanel Spacing="14">
<StackPanel Orientation="Horizontal" Spacing="10">
<Rectangle Width="3" Height="20" Fill="#4FC3F7" RadiusX="2" RadiusY="2" />
<TextBlock Text="调用关系" FontSize="17" FontWeight="SemiBold" Foreground="#DDE4F0" />
</StackPanel>
<Border Background="#0C1622" CornerRadius="6" Padding="16,12" BorderBrush="#1A2F4A" BorderThickness="1">
<StackPanel Spacing="8">
<TextBlock Text="Strategy → Dispatcher → Adapter → SDK → 设备"
@ -196,53 +185,39 @@
<Border Background="#6A1B9A" CornerRadius="4" Padding="14,10" Width="140">
<StackPanel HorizontalAlignment="Center" Spacing="2">
<TextBlock Text="Strategy" FontSize="12" FontWeight="SemiBold" Foreground="White" HorizontalAlignment="Center" />
<TextBlock Text="物料/库位分配" FontSize="9" Foreground="#CE93D8" HorizontalAlignment="Center" />
</StackPanel>
</Border>
<TextBlock Text="物料/库位分配" FontSize="9" Foreground="#CE93D8" HorizontalAlignment="Center" /></StackPanel></Border>
<TextBlock Text="→" FontSize="18" Foreground="#4FC3F7" VerticalAlignment="Center" Margin="8,0" />
<Border Background="#00838F" CornerRadius="4" Padding="14,10" Width="140">
<StackPanel HorizontalAlignment="Center" Spacing="2">
<TextBlock Text="Dispatcher" FontSize="12" FontWeight="SemiBold" Foreground="White" HorizontalAlignment="Center" />
<TextBlock Text="队列调度/防死锁" FontSize="9" Foreground="#B2DFDB" HorizontalAlignment="Center" />
</StackPanel>
</Border>
<TextBlock Text="队列调度/防死锁" FontSize="9" Foreground="#B2DFDB" HorizontalAlignment="Center" /></StackPanel></Border>
<TextBlock Text="→" FontSize="18" Foreground="#4FC3F7" VerticalAlignment="Center" Margin="8,0" />
<Border Background="#0277BD" CornerRadius="4" Padding="14,10" Width="140">
<StackPanel HorizontalAlignment="Center" Spacing="2">
<TextBlock Text="Adapter" FontSize="12" FontWeight="SemiBold" Foreground="White" HorizontalAlignment="Center" />
<TextBlock Text="DTO转换/重试" FontSize="9" Foreground="#B3D4FC" HorizontalAlignment="Center" />
</StackPanel>
</Border>
<TextBlock Text="DTO转换/重试" FontSize="9" Foreground="#B3D4FC" HorizontalAlignment="Center" /></StackPanel></Border>
<TextBlock Text="→" FontSize="18" Foreground="#4FC3F7" VerticalAlignment="Center" Margin="8,0" />
<Border Background="#0D47A1" CornerRadius="4" Padding="14,10" Width="140">
<StackPanel HorizontalAlignment="Center" Spacing="2">
<TextBlock Text="SDK" FontSize="12" FontWeight="SemiBold" Foreground="White" HorizontalAlignment="Center" />
<TextBlock Text="协议通信" FontSize="9" Foreground="#90CAF9" HorizontalAlignment="Center" />
</StackPanel>
</Border>
<TextBlock Text="协议通信" FontSize="9" Foreground="#90CAF9" HorizontalAlignment="Center" /></StackPanel></Border>
</StackPanel>
</StackPanel>
</Border>
<WrapPanel HorizontalAlignment="Center">
<StackPanel Orientation="Horizontal" Margin="0,0,16,8">
<Border Background="#6A1B9A" CornerRadius="2" Width="12" Height="12" Margin="0,0,6,0" />
<TextBlock Text="Strategy 策略层" FontSize="11" Foreground="#8B9BB5" />
</StackPanel>
<TextBlock Text="Strategy 策略层" FontSize="11" Foreground="#8B9BB5" /></StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,16,8">
<Border Background="#00838F" CornerRadius="2" Width="12" Height="12" Margin="0,0,6,0" />
<TextBlock Text="Dispatcher 调度层" FontSize="11" Foreground="#8B9BB5" />
</StackPanel>
<TextBlock Text="Dispatcher 调度层" FontSize="11" Foreground="#8B9BB5" /></StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,16,8">
<Border Background="#0277BD" CornerRadius="2" Width="12" Height="12" Margin="0,0,6,0" />
<TextBlock Text="Adapter 适配层" FontSize="11" Foreground="#8B9BB5" />
</StackPanel>
<TextBlock Text="Adapter 适配层" FontSize="11" Foreground="#8B9BB5" /></StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,16,8">
<Border Background="#0D47A1" CornerRadius="2" Width="12" Height="12" Margin="0,0,6,0" />
<TextBlock Text="SDK 通信层" FontSize="11" Foreground="#8B9BB5" />
</StackPanel>
<TextBlock Text="SDK 通信层" FontSize="11" Foreground="#8B9BB5" /></StackPanel>
</WrapPanel>
<TextBlock Text="Strategy 策略层根据物料属性与库位状态计算最优分配方案,将任务指令交由 Dispatcher 进行队列调度与冲突检测Dispatcher 通过 Adapter 将业务指令转换为设备协议格式,最终由 SDK 与硬件设备AGV RCS-2000 / 提升机 PLC通信执行。海康 AGV 与提升机均遵循此四层调用链仅底层通信协议不同HTTP vs TCP。"
FontSize="11" Foreground="#5B6F8A" TextWrapping="Wrap" LineHeight="18" />
</StackPanel>

@ -13,20 +13,45 @@
<Grid RowDefinitions="Auto,Auto,*">
<!-- Title Bar -->
<Border Grid.Row="0" Padding="16,10" Background="#0A0E14">
<StackPanel Orientation="Horizontal" Spacing="12" VerticalAlignment="Center">
<Canvas Width="24" Height="24">
<Rectangle Canvas.Left="1" Canvas.Top="1" Width="22" Height="18" RadiusX="2" RadiusY="2" Fill="#0F1F38" Stroke="#4FC3F7" StrokeThickness="1.2" />
<Rectangle Canvas.Left="4" Canvas.Top="4" Width="16" Height="5" RadiusX="1" RadiusY="1" Fill="#1B3A5C" />
<Line StartPoint="5,11" EndPoint="19,11" Stroke="#1B3A5C" StrokeThickness="1" />
<Ellipse Canvas.Left="5" Canvas.Top="5" Width="2" Height="2" Fill="#00E676" />
<Ellipse Canvas.Left="9" Canvas.Top="5" Width="2" Height="2" Fill="#4FC3F7" />
</Canvas>
<TextBlock Text="基于多场景应用的 WCS 通用平台" FontSize="16" FontWeight="Bold" Foreground="#E1E8F0" />
<Border Background="#1B3A5C" CornerRadius="3" Padding="6,2" VerticalAlignment="Center">
<TextBlock Text="V1.0.0" FontSize="10" Foreground="#4FC3F7" />
</Border>
</StackPanel>
<Border Grid.Row="0" Padding="16,8" Background="#0A0E14" BorderBrush="#1A2F4A" BorderThickness="0,0,0,1">
<Grid ColumnDefinitions="Auto,*,Auto">
<!-- Left: Logo + Title -->
<StackPanel Grid.Column="0" Orientation="Horizontal" Spacing="10" VerticalAlignment="Center">
<Canvas Width="22" Height="22">
<Rectangle Canvas.Left="1" Canvas.Top="1" Width="20" Height="16" RadiusX="2" RadiusY="2" Fill="#0F1F38" Stroke="#4FC3F7" StrokeThickness="1.2" />
<Rectangle Canvas.Left="3" Canvas.Top="3" Width="14" Height="5" RadiusX="1" RadiusY="1" Fill="#1B3A5C" />
<Line StartPoint="4,10" EndPoint="17,10" Stroke="#1B3A5C" StrokeThickness="1" />
<Ellipse Canvas.Left="4" Canvas.Top="4" Width="2" Height="2" Fill="#00E676" />
<Ellipse Canvas.Left="8" Canvas.Top="4" Width="2" Height="2" Fill="#4FC3F7" />
</Canvas>
<TextBlock Text="基于多场景应用的 WCS 通用平台" FontSize="15" FontWeight="Bold" Foreground="#E1E8F0" />
<Border Background="#1B3A5C" CornerRadius="3" Padding="5,2" VerticalAlignment="Center">
<TextBlock Text="V1.0.0" FontSize="10" Foreground="#4FC3F7" />
</Border>
</StackPanel>
<!-- Right: Status + Time + User -->
<StackPanel Grid.Column="2" Orientation="Horizontal" Spacing="16" VerticalAlignment="Center">
<!-- 运行状态 -->
<StackPanel Orientation="Horizontal" Spacing="6">
<Ellipse Width="8" Height="8" Fill="#00E676" VerticalAlignment="Center" />
<TextBlock x:Name="StatusText" Text="运行正常" FontSize="12" Foreground="#8B9BB5" VerticalAlignment="Center" />
</StackPanel>
<!-- 当前时间 -->
<TextBlock x:Name="ClockText" Text="2026-06-11 12:00:00" FontSize="12" Foreground="#6B8CB5" VerticalAlignment="Center" />
<!-- 登录用户 -->
<Border Background="#0F1F38" CornerRadius="3" Padding="10,4" BorderBrush="#1B3A5C" BorderThickness="1">
<StackPanel Orientation="Horizontal" Spacing="6">
<TextBlock x:Name="UserText" Text="管理员" FontSize="12" Foreground="#DDE4F0" VerticalAlignment="Center" />
</StackPanel>
</Border>
<!-- 退出 -->
<Button x:Name="LogoutBtn" Content="退出" FontSize="11"
Background="Transparent" Foreground="#8B9BB5"
BorderBrush="#1A2F4A" BorderThickness="1"
CornerRadius="3" Padding="10,4" />
</StackPanel>
</Grid>
</Border>
<!-- Menu Bar -->

@ -25,6 +25,17 @@ public partial class MainWindow : Window
_navVm.PageChanged += OnPageChanged;
BuildMenu();
_navVm.LoadDefaultPage();
// 时钟
var timer = new System.Timers.Timer(1000);
timer.Elapsed += (_, _) =>
Avalonia.Threading.Dispatcher.UIThread.Post(() =>
ClockText.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
timer.Start();
ClockText.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
// 退出按钮
LogoutBtn.Click += (_, _) => Close();
}
private void BuildMenu()

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Path.PathDetailsListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索路径编号/名称..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索路径编号/名称..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1.2*,1.3*,1.2*,1.2*,0.8*,0.8*,0.8*">

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Path.PathInfoListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索路径编号/名称..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索路径编号/名称..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1.2*,1.3*,0.8*,0.8*,1.2*,1.2*,0.8*,0.8*">

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Task.TaskDetailListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索任务编号/物料编号..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索任务编号/物料编号..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1.2*,0.9*,1*,1.1*,0.6*,0.6*,0.6*,0.9*,0.9*,0.7*,0.7*,0.7*,0.7*">

@ -1,11 +1,11 @@
<UserControl x:CompileBindings="False" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Task.TaskQueueListView">
<Grid RowDefinitions="Auto,Auto,*" Margin="4" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索任务编号/物料编号..." Text="{Binding SearchText}" Width="260" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="8,0,0,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="8,0,0,0" />
<Grid RowDefinitions="Auto,Auto,*" Margin="20,14,20,14" VerticalAlignment="Stretch">
<Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto" Margin="0,0,0,8">
<TextBox Grid.Column="0" Watermark="搜索任务编号/物料编号..." Text="{Binding SearchText}" Width="220" Background="#0C1622" Foreground="#DDE4F0" BorderBrush="#1A2F4A" />
<Button Grid.Column="1" Content="搜索" Command="{Binding SearchCommand}" Background="#0F1F38" Foreground="#8B9BB5" Padding="14,6" Margin="12,0,6,0" />
<Button Grid.Column="2" Content="新增" Command="{Binding AddCommand}" Background="#1565C0" Foreground="White" Padding="14,6" Margin="12,0,6,0" />
</Grid>
<Border Grid.Row="1" Background="#0C1622" Padding="8,6" BorderBrush="#1A2F4A" BorderThickness="1">
<Grid ColumnDefinitions="1.2*,1*,1.2*,0.6*,0.6*,0.6*,1*,1*,0.7*,0.6*,0.8*,0.7*">

Loading…
Cancel
Save