| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <UserControl x:Class="ivf_tl_Operate.View.ServiceMonitorView"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:local="clr-namespace:ivf_tl_Operate.View"
- xmlns:customControl="clr-namespace:ivf_tl_CustomControls;assembly=ivf_tl_CustomControls_Surface"
- mc:Ignorable="d"
- Height="2736" Width="1824">
- <!-- M5-03-3/4:只读「服务监控」页(需求 7/10)。
- 纯只读:除顶部「返回」外无任何按钮/输入/下发控件;所有数值由 ServiceMonitorViewModel 定时(2s)
- 从 ivf_tl_Control.AppData.Instance.GetMonitorSnapshot() 只读拉取。链路健康用颜色区分绿正常/红失联。
- 自适应套 MainWindow 的 Viewbox 等比缩放(M4-01),基准 1824×2736。 -->
- <Grid Background="White">
- <Grid.RowDefinitions>
- <RowDefinition Height="250"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <!-- 顶部横幅 + 返回(无任何控制按钮) -->
- <Grid Grid.Row="0" Background="{StaticResource BannerTopFill}">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="350"/>
- <ColumnDefinition/>
- <ColumnDefinition Width="350"/>
- </Grid.ColumnDefinitions>
- <customControl:ButtonLeftImage Grid.Column="0" Content="{DynamicResource C0044}" Click="Return_Click" Width="350" Height="250" IconWidth="46" IconHeight="46" FontSize="44" FontWeight="Medium" Foreground="#4D75AC" BorderThickness="0" Background="Transparent" IconSource="/ivf_tl_Operate;component/Resources/Image/button_return.png" IconMargin="0 0 10 0"/>
- <TextBlock Grid.Column="1" Text="服务监控" FontSize="60" VerticalAlignment="Center" HorizontalAlignment="Center"/>
- <StackPanel Grid.Column="2" Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
- <TextBlock Text="刷新时间" FontSize="30" Foreground="#4D75AC" HorizontalAlignment="Center"/>
- <TextBlock Text="{Binding SnapshotTime}" FontSize="34" Foreground="#4D75AC" HorizontalAlignment="Center"/>
- </StackPanel>
- </Grid>
- <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
- <StackPanel Margin="60 20">
- <!-- 托管状态 -->
- <Border Margin="0 10" Padding="30 20" Background="#F5F6F8" CornerRadius="10">
- <StackPanel Orientation="Horizontal">
- <Ellipse Width="36" Height="36" Fill="{Binding ControlHostedBrush}" VerticalAlignment="Center"/>
- <TextBlock Text="后台服务:" FontSize="44" VerticalAlignment="Center" Margin="20 0 0 0"/>
- <TextBlock Text="{Binding ControlHostedText}" FontSize="44" FontWeight="Bold" Foreground="{Binding ControlHostedBrush}" VerticalAlignment="Center"/>
- </StackPanel>
- </Border>
- <!-- 链路健康 -->
- <TextBlock Text="链路健康" FontSize="48" FontWeight="Bold" Foreground="#4D75AC" Margin="0 30 0 10"/>
- <!-- MQTT -->
- <Border Margin="0 8" Padding="30 18" Background="#F5F6F8" CornerRadius="10">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="60"/>
- <ColumnDefinition Width="420"/>
- <ColumnDefinition Width="320"/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <Ellipse Grid.Column="0" Width="36" Height="36" Fill="{Binding MqttBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="1" Text="MQTT(舱室态推送)" FontSize="42" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="2" Text="{Binding MqttText}" FontSize="42" FontWeight="Bold" Foreground="{Binding MqttBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="3" Text="{Binding MqttLastOk, StringFormat=最后成功 {0}}" FontSize="38" Foreground="#959596" VerticalAlignment="Center"/>
- </Grid>
- </Border>
- <!-- 服务器 HTTP -->
- <Border Margin="0 8" Padding="30 18" Background="#F5F6F8" CornerRadius="10">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="60"/>
- <ColumnDefinition Width="420"/>
- <ColumnDefinition Width="320"/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <Ellipse Grid.Column="0" Width="36" Height="36" Fill="{Binding HttpBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="1" Text="服务器通信(HTTP 轮询)" FontSize="42" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="2" Text="{Binding HttpText}" FontSize="42" FontWeight="Bold" Foreground="{Binding HttpBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="3" Text="{Binding HttpLastOk, StringFormat=最后成功 {0}}" FontSize="38" Foreground="#959596" VerticalAlignment="Center"/>
- </Grid>
- </Border>
- <TextBlock Text="{Binding ServerUrl, StringFormat=接口地址:{0}}" FontSize="34" Foreground="#959596" Margin="90 0 0 0"/>
- <!-- Kafka / 图片上传 -->
- <Border Margin="0 8" Padding="30 18" Background="#F5F6F8" CornerRadius="10">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="60"/>
- <ColumnDefinition Width="420"/>
- <ColumnDefinition Width="320"/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <Ellipse Grid.Column="0" Width="36" Height="36" Fill="{Binding KafkaBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="1" Text="Kafka(图片上传)" FontSize="42" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="2" Text="{Binding KafkaText}" FontSize="42" FontWeight="Bold" Foreground="{Binding KafkaBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="3" Text="{Binding KafkaLastOk, StringFormat=最后成功 {0}}" FontSize="38" Foreground="#959596" VerticalAlignment="Center"/>
- </Grid>
- </Border>
- <!-- 上传队列 -->
- <Border Margin="0 8" Padding="30 18" Background="#F5F6F8" CornerRadius="10">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="60"/>
- <ColumnDefinition Width="420"/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <Ellipse Grid.Column="0" Width="36" Height="36" Fill="{Binding UploadQueueBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="1" Text="上传队列" FontSize="42" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="2" Text="{Binding UploadQueueText}" FontSize="42" FontWeight="Bold" Foreground="{Binding UploadQueueBrush}" VerticalAlignment="Center"/>
- </Grid>
- </Border>
- <!-- 磁盘 -->
- <Border Margin="0 8" Padding="30 18" Background="#F5F6F8" CornerRadius="10">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="60"/>
- <ColumnDefinition Width="420"/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <Ellipse Grid.Column="0" Width="36" Height="36" Fill="{Binding DiskBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="1" Text="缓存磁盘" FontSize="42" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="2" Text="{Binding DiskText}" FontSize="42" FontWeight="Bold" Foreground="{Binding DiskBrush}" VerticalAlignment="Center"/>
- </Grid>
- </Border>
- <!-- 各舱室只读态 -->
- <TextBlock Text="舱室状态(温度 / 压力 / CCD / 通讯)" FontSize="48" FontWeight="Bold" Foreground="#4D75AC" Margin="0 30 0 10"/>
- <ItemsControl ItemsSource="{Binding Houses}">
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <Border Margin="0 6" Padding="20 14" Background="#F5F6F8" CornerRadius="8">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="180"/>
- <ColumnDefinition Width="260"/>
- <ColumnDefinition Width="240"/>
- <ColumnDefinition Width="240"/>
- <ColumnDefinition Width="240"/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <TextBlock Grid.Column="0" Text="{Binding HouseSn, StringFormat={}{0}号舱}" FontSize="38" FontWeight="Bold" VerticalAlignment="Center"/>
- <StackPanel Grid.Column="1" VerticalAlignment="Center">
- <TextBlock Text="{Binding Temperature, StringFormat=温度 {0}}" FontSize="34"/>
- <TextBlock Text="{Binding Pressure, StringFormat=压力 {0}}" FontSize="30" Foreground="#959596"/>
- </StackPanel>
- <TextBlock Grid.Column="2" Text="{Binding StateText, StringFormat=舱室 {0}}" FontSize="34" Foreground="{Binding StateBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="3" Text="{Binding ComText, StringFormat=通讯 {0}}" FontSize="34" Foreground="{Binding ComBrush}" VerticalAlignment="Center"/>
- <TextBlock Grid.Column="4" Text="{Binding CcdText, StringFormat=CCD {0}}" FontSize="34" Foreground="{Binding CcdBrush}" VerticalAlignment="Center"/>
- <StackPanel Grid.Column="5" VerticalAlignment="Center">
- <TextBlock Text="{Binding WorkingType, StringFormat=活动 {0}}" FontSize="30" Foreground="#4D75AC"/>
- <TextBlock Text="{Binding ValveState, StringFormat=排气阀 {0}}" FontSize="28" Foreground="#959596"/>
- <TextBlock Text="{Binding CapturePausedText}" FontSize="28" Foreground="{Binding CapturePausedBrush}"/>
- </StackPanel>
- </Grid>
- </Border>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
- <!-- 舱故障(H-08:读 /status 的 Faults,启动排除 + 运行期突发,红色高亮) -->
- <TextBlock Text="{Binding FaultSummaryText}" FontSize="48" FontWeight="Bold" Foreground="{Binding FaultSummaryBrush}" Margin="0 30 0 10"/>
- <!-- 无故障:绿色提示一行 -->
- <Border Margin="0 6" Padding="30 20" Background="#EAF7EE" CornerRadius="10"
- Visibility="{Binding NoFaultVisibility}">
- <TextBlock Text="未发现舱室故障,所有已连接舱室运行正常。" FontSize="36" Foreground="#2EA043" VerticalAlignment="Center"/>
- </Border>
- <!-- 有故障:逐条红底列表 -->
- <ItemsControl ItemsSource="{Binding Faults}"
- Visibility="{Binding FaultListVisibility}">
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <Border Margin="0 6" Padding="20 14" Background="#FBE9E7" CornerRadius="8" BorderBrush="#D0322D" BorderThickness="2">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="300"/>
- <ColumnDefinition Width="360"/>
- <ColumnDefinition/>
- <ColumnDefinition Width="240"/>
- </Grid.ColumnDefinitions>
- <StackPanel Grid.Column="0" VerticalAlignment="Center">
- <TextBlock Text="{Binding HouseText}" FontSize="38" FontWeight="Bold" Foreground="#D0322D"/>
- <TextBlock Text="{Binding AtText, StringFormat=时间 {0}}" FontSize="28" Foreground="#959596"/>
- </StackPanel>
- <StackPanel Grid.Column="1" VerticalAlignment="Center">
- <TextBlock Text="{Binding FaultTypeText}" FontSize="36" FontWeight="Bold" Foreground="#D0322D"/>
- <TextBlock Text="{Binding Stage, StringFormat=阶段 {0}}" FontSize="28" Foreground="#959596"/>
- </StackPanel>
- <TextBlock Grid.Column="2" Text="{Binding Reason}" FontSize="32" Foreground="#5A5A5A" VerticalAlignment="Center" TextWrapping="Wrap"/>
- <TextBlock Grid.Column="3" Text="{Binding IsolatedText}" FontSize="38" FontWeight="Bold" Foreground="{Binding IsolatedBrush}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
- </Grid>
- </Border>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
- <!-- 阶段2 §5.4 受护栏停止:二次确认 + 工程师口令 → control 安全停机(唯一写操作) -->
- <Border Margin="0 30 0 10" Padding="30 20" Background="#FBE9E7" CornerRadius="10">
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
- <Button Content="整体停止 control(受护栏)" Command="{Binding ShutdownControlCommand}"
- FontSize="40" FontWeight="Bold" Foreground="White" Background="#D0322D"
- BorderThickness="0" Padding="40 18" Cursor="Hand"/>
- <TextBlock Text="需二次确认 + 工程师口令;停止后机器不再被驱动,重启 operate 才会重新拉起。"
- FontSize="28" Foreground="#959596" VerticalAlignment="Center" Margin="30 0 0 0" TextWrapping="Wrap" Width="700"/>
- </StackPanel>
- </Border>
- <TextBlock Text="本页监控经本地 HTTP 跨进程读取独立 control 的 /status;除受护栏停止外不提供其它控制操作。" FontSize="30" Foreground="#959596" Margin="0 10 0 40" TextWrapping="Wrap"/>
- </StackPanel>
- </ScrollViewer>
- </Grid>
- </UserControl>
|