DeviceDetailsWindow.xaml 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. <Window x:Class="NetworkTool.Client.DeviceDetailsWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title="设备信息与接口配置"
  5. Height="760"
  6. Width="960"
  7. MinHeight="680"
  8. MinWidth="900"
  9. ShowInTaskbar="False"
  10. WindowStartupLocation="CenterOwner">
  11. <Grid Background="#F5F7FB">
  12. <ScrollViewer x:Name="ContentScrollViewer"
  13. Margin="20"
  14. VerticalScrollBarVisibility="Auto"
  15. HorizontalScrollBarVisibility="Disabled"
  16. CanContentScroll="True">
  17. <Grid MaxWidth="940" HorizontalAlignment="Center">
  18. <Grid.RowDefinitions>
  19. <RowDefinition Height="Auto" />
  20. <RowDefinition Height="Auto" />
  21. </Grid.RowDefinitions>
  22. <Border Grid.Row="0" Padding="14" Background="White" CornerRadius="10">
  23. <Grid>
  24. <Grid.RowDefinitions>
  25. <RowDefinition Height="Auto" />
  26. <RowDefinition Height="Auto" />
  27. <RowDefinition Height="Auto" />
  28. <RowDefinition Height="Auto" />
  29. <RowDefinition Height="Auto" />
  30. </Grid.RowDefinitions>
  31. <Grid.ColumnDefinitions>
  32. <ColumnDefinition Width="*" />
  33. <ColumnDefinition Width="Auto" />
  34. </Grid.ColumnDefinitions>
  35. <TextBlock FontSize="13"
  36. FontWeight="SemiBold"
  37. Foreground="#111827"
  38. Text="网络配置" />
  39. <Button x:Name="ReloadInterfaceConfigButton"
  40. Grid.Column="1"
  41. MinHeight="32"
  42. Padding="12,0"
  43. VerticalAlignment="Center"
  44. Click="ReloadInterfaceConfigButton_OnClick"
  45. Content="刷新全部接口配置" />
  46. <ItemsControl x:Name="InterfacesItemsControl" Grid.Row="1" Grid.ColumnSpan="2" Margin="0,12,0,0">
  47. <ItemsControl.ItemTemplate>
  48. <DataTemplate>
  49. <Border Margin="0,0,0,12" Padding="14" Background="#F9FAFB" BorderBrush="#D1D5DB" BorderThickness="1" CornerRadius="10">
  50. <StackPanel>
  51. <StackPanel Orientation="Horizontal">
  52. <TextBlock FontSize="15" FontWeight="SemiBold" Foreground="#111827" Text="{Binding SystemName}" />
  53. <TextBlock Margin="10,2,0,0" FontSize="12" Foreground="#6B7280" Text="{Binding StatusSummary}" />
  54. </StackPanel>
  55. <CheckBox Margin="0,12,0,0" VerticalContentAlignment="Center" IsChecked="{Binding Dhcp4, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Checked="ConfigModeChanged_OnChanged" Unchecked="ConfigModeChanged_OnChanged" Content="使用 DHCP 自动获取 IPv4 配置" />
  56. <Grid Margin="0,12,0,0">
  57. <Grid.RowDefinitions>
  58. <RowDefinition Height="Auto" />
  59. <RowDefinition Height="Auto" />
  60. <RowDefinition Height="Auto" />
  61. </Grid.RowDefinitions>
  62. <Border Padding="10" Background="White" BorderBrush="#E5E7EB" BorderThickness="1" CornerRadius="8">
  63. <Grid>
  64. <Grid.RowDefinitions>
  65. <RowDefinition Height="Auto" />
  66. <RowDefinition Height="*" />
  67. <RowDefinition Height="Auto" />
  68. </Grid.RowDefinitions>
  69. <TextBlock FontSize="13" FontWeight="SemiBold" Foreground="#111827" Text="IP 地址" />
  70. <DataGrid Grid.Row="1" Margin="0,8,0,0" ItemsSource="{Binding Addresses}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
  71. <DataGrid.Style>
  72. <Style TargetType="DataGrid">
  73. <Setter Property="IsEnabled" Value="True" />
  74. <Style.Triggers>
  75. <DataTrigger Binding="{Binding Dhcp4}" Value="True">
  76. <Setter Property="IsEnabled" Value="False" />
  77. </DataTrigger>
  78. </Style.Triggers>
  79. </Style>
  80. </DataGrid.Style>
  81. <DataGrid.Columns>
  82. <DataGridTextColumn Header="IP 地址" Binding="{Binding IP, UpdateSourceTrigger=PropertyChanged}" Width="*" />
  83. <DataGridTextColumn Header="子网掩码" Binding="{Binding Mask, UpdateSourceTrigger=PropertyChanged}" Width="120" />
  84. <DataGridTemplateColumn Header="操作" Width="58">
  85. <DataGridTemplateColumn.CellTemplate>
  86. <DataTemplate>
  87. <Button Padding="8,0" Click="DeleteAddressButton_OnClick" Content="删除" />
  88. </DataTemplate>
  89. </DataGridTemplateColumn.CellTemplate>
  90. </DataGridTemplateColumn>
  91. </DataGrid.Columns>
  92. </DataGrid>
  93. <Button Grid.Row="2" Margin="0,10,0,0" HorizontalAlignment="Left" MinHeight="30" Padding="12,0" Click="AddAddressButton_OnClick" Content="+ 添加 IP">
  94. <Button.Style>
  95. <Style TargetType="Button">
  96. <Setter Property="IsEnabled" Value="True" />
  97. <Style.Triggers>
  98. <DataTrigger Binding="{Binding Dhcp4}" Value="True">
  99. <Setter Property="IsEnabled" Value="False" />
  100. </DataTrigger>
  101. </Style.Triggers>
  102. </Style>
  103. </Button.Style>
  104. </Button>
  105. </Grid>
  106. </Border>
  107. <Border Grid.Row="1" Margin="0,12,0,0" Padding="10" Background="White" BorderBrush="#E5E7EB" BorderThickness="1" CornerRadius="8">
  108. <Grid>
  109. <Grid.RowDefinitions>
  110. <RowDefinition Height="Auto" />
  111. <RowDefinition Height="Auto" />
  112. <RowDefinition Height="*" />
  113. <RowDefinition Height="Auto" />
  114. </Grid.RowDefinitions>
  115. <StackPanel>
  116. <TextBlock FontSize="13" FontWeight="SemiBold" Foreground="#111827" Text="网关" />
  117. <StackPanel Margin="0,8,0,12" Orientation="Horizontal">
  118. <TextBlock VerticalAlignment="Center" FontSize="12" Foreground="#6B7280" Text="默认网关:" />
  119. <CheckBox Margin="8,0,0,0" VerticalContentAlignment="Center" IsChecked="{Binding DefaultGatewayEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Checked="GatewayOrRouteModeChanged_OnChanged" Unchecked="GatewayOrRouteModeChanged_OnChanged" Content="启用" />
  120. <TextBox Margin="12,0,0,0" MinWidth="220" MinHeight="30" VerticalContentAlignment="Center" Text="{Binding DefaultGateway, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextChanged="ConfigInputChanged_OnChanged">
  121. <TextBox.Style>
  122. <Style TargetType="TextBox">
  123. <Setter Property="IsEnabled" Value="True" />
  124. <Style.Triggers>
  125. <DataTrigger Binding="{Binding Dhcp4}" Value="True">
  126. <Setter Property="IsEnabled" Value="False" />
  127. </DataTrigger>
  128. <DataTrigger Binding="{Binding DefaultGatewayEnabled}" Value="False">
  129. <Setter Property="IsEnabled" Value="False" />
  130. </DataTrigger>
  131. </Style.Triggers>
  132. </Style>
  133. </TextBox.Style>
  134. </TextBox>
  135. </StackPanel>
  136. </StackPanel>
  137. <StackPanel Grid.Row="1" Margin="0,0,0,8" Orientation="Horizontal">
  138. <TextBlock VerticalAlignment="Center" FontSize="12" Foreground="#6B7280" Text="自定义路由:" />
  139. <CheckBox Margin="8,0,0,0" VerticalContentAlignment="Center" IsChecked="{Binding CustomRoutesEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Checked="GatewayOrRouteModeChanged_OnChanged" Unchecked="GatewayOrRouteModeChanged_OnChanged" Content="启用" />
  140. </StackPanel>
  141. <DataGrid Grid.Row="2" Margin="0,8,0,0" ItemsSource="{Binding Routes}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
  142. <DataGrid.Style>
  143. <Style TargetType="DataGrid">
  144. <Setter Property="Visibility" Value="Collapsed" />
  145. <Style.Triggers>
  146. <DataTrigger Binding="{Binding CustomRoutesEnabled}" Value="True">
  147. <Setter Property="Visibility" Value="Visible" />
  148. </DataTrigger>
  149. </Style.Triggers>
  150. </Style>
  151. </DataGrid.Style>
  152. <DataGrid.Columns>
  153. <DataGridTextColumn Header="目标网段" Binding="{Binding To, UpdateSourceTrigger=PropertyChanged}" Width="*" />
  154. <DataGridTextColumn Header="子网掩码" Binding="{Binding Mask, UpdateSourceTrigger=PropertyChanged}" Width="120" />
  155. <DataGridTextColumn Header="网关地址" Binding="{Binding Via, UpdateSourceTrigger=PropertyChanged}" Width="*" />
  156. <DataGridTemplateColumn Header="操作" Width="58">
  157. <DataGridTemplateColumn.CellTemplate>
  158. <DataTemplate>
  159. <Button Padding="8,0" Click="DeleteRouteButton_OnClick" Content="删除" />
  160. </DataTemplate>
  161. </DataGridTemplateColumn.CellTemplate>
  162. </DataGridTemplateColumn>
  163. </DataGrid.Columns>
  164. </DataGrid>
  165. <Button Grid.Row="3" Margin="0,10,0,0" HorizontalAlignment="Left" MinHeight="30" Padding="12,0" Click="AddRouteButton_OnClick" Content="+ 添加路由">
  166. <Button.Style>
  167. <Style TargetType="Button">
  168. <Setter Property="Visibility" Value="Collapsed" />
  169. <Style.Triggers>
  170. <DataTrigger Binding="{Binding CustomRoutesEnabled}" Value="True">
  171. <Setter Property="Visibility" Value="Visible" />
  172. </DataTrigger>
  173. </Style.Triggers>
  174. </Style>
  175. </Button.Style>
  176. </Button>
  177. </Grid>
  178. </Border>
  179. <Border Grid.Row="2" Margin="0,12,0,0" Padding="10" Background="White" BorderBrush="#E5E7EB" BorderThickness="1" CornerRadius="8">
  180. <Grid>
  181. <Grid.RowDefinitions>
  182. <RowDefinition Height="Auto" />
  183. <RowDefinition Height="*" />
  184. <RowDefinition Height="Auto" />
  185. </Grid.RowDefinitions>
  186. <TextBlock FontSize="13" FontWeight="SemiBold" Foreground="#111827" Text="DNS" />
  187. <DataGrid Grid.Row="1" Margin="0,8,0,0" ItemsSource="{Binding Dns}" AutoGenerateColumns="False" CanUserAddRows="False" HeadersVisibility="Column" CellEditEnding="ConfigGrid_OnCellEditEnding" PreviewMouseWheel="DataGrid_OnPreviewMouseWheel">
  188. <DataGrid.Columns>
  189. <DataGridTextColumn Header="DNS 地址" Binding="{Binding Address, UpdateSourceTrigger=PropertyChanged}" Width="*" />
  190. <DataGridTemplateColumn Header="操作" Width="58">
  191. <DataGridTemplateColumn.CellTemplate>
  192. <DataTemplate>
  193. <Button Padding="8,0" Click="DeleteDnsButton_OnClick" Content="删除" />
  194. </DataTemplate>
  195. </DataGridTemplateColumn.CellTemplate>
  196. </DataGridTemplateColumn>
  197. </DataGrid.Columns>
  198. </DataGrid>
  199. <Button Grid.Row="2" Margin="0,10,0,0" HorizontalAlignment="Left" MinHeight="30" Padding="12,0" Click="AddDnsButton_OnClick" Content="+ 添加 DNS" />
  200. </Grid>
  201. </Border>
  202. </Grid>
  203. </StackPanel>
  204. </Border>
  205. </DataTemplate>
  206. </ItemsControl.ItemTemplate>
  207. </ItemsControl>
  208. <Grid Grid.Row="3" Grid.ColumnSpan="2" Margin="0,12,0,0">
  209. <Grid.ColumnDefinitions>
  210. <ColumnDefinition Width="*" />
  211. <ColumnDefinition Width="Auto" />
  212. </Grid.ColumnDefinitions>
  213. <TextBlock VerticalAlignment="Center"
  214. FontSize="12"
  215. Foreground="#6B7280"
  216. Text="先确认所有接口配置,再校验新配置,最后一次性应用。" />
  217. <StackPanel Grid.Column="1" Margin="12,0,0,0" Orientation="Horizontal">
  218. <Button x:Name="ValidateConfigButton"
  219. MinHeight="36"
  220. Padding="14,0"
  221. Click="ValidateConfigButton_OnClick"
  222. Content="校验全部配置" />
  223. <Button x:Name="ApplyConfigButton"
  224. Margin="10,0,0,0"
  225. MinHeight="36"
  226. Padding="14,0"
  227. FontWeight="SemiBold"
  228. Click="ApplyConfigButton_OnClick"
  229. Content="应用全部配置">
  230. <Button.Style>
  231. <Style TargetType="Button">
  232. <Setter Property="Background" Value="#2563EB" />
  233. <Setter Property="Foreground" Value="White" />
  234. <Setter Property="BorderBrush" Value="#2563EB" />
  235. <Style.Triggers>
  236. <Trigger Property="IsEnabled" Value="False">
  237. <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
  238. <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
  239. <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" />
  240. </Trigger>
  241. </Style.Triggers>
  242. </Style>
  243. </Button.Style>
  244. </Button>
  245. </StackPanel>
  246. </Grid>
  247. </Grid>
  248. </Border>
  249. <Border Grid.Row="1" Margin="0,12,0,0" Padding="14" Background="#FEF2F2" CornerRadius="10">
  250. <Grid>
  251. <Grid.RowDefinitions>
  252. <RowDefinition Height="Auto" />
  253. <RowDefinition Height="Auto" />
  254. </Grid.RowDefinitions>
  255. <TextBlock FontSize="13"
  256. FontWeight="SemiBold"
  257. Foreground="#991B1B"
  258. Text="高级操作" />
  259. <StackPanel Grid.Row="1" Margin="0,12,0,0">
  260. <TextBlock FontSize="12"
  261. Foreground="#991B1B"
  262. TextWrapping="Wrap"
  263. Text="重启或关闭设备会立即影响远端设备。执行后,当前连接可能马上断开。" />
  264. <StackPanel Margin="0,12,0,0" Orientation="Horizontal">
  265. <Button x:Name="RebootButton"
  266. MinHeight="36"
  267. Padding="14,0"
  268. FontWeight="SemiBold"
  269. Background="#FFF7ED"
  270. Foreground="#9A3412"
  271. BorderBrush="#FDBA74"
  272. Click="RebootButton_OnClick"
  273. Content="重启设备" />
  274. <Button x:Name="ShutdownButton"
  275. Margin="10,0,0,0"
  276. MinHeight="36"
  277. Padding="14,0"
  278. FontWeight="SemiBold"
  279. Background="#DC2626"
  280. Foreground="White"
  281. BorderBrush="#DC2626"
  282. Click="ShutdownButton_OnClick"
  283. Content="关闭设备" />
  284. </StackPanel>
  285. </StackPanel>
  286. </Grid>
  287. </Border>
  288. </Grid>
  289. </ScrollViewer>
  290. <Border x:Name="BusyOverlay"
  291. Visibility="Collapsed"
  292. Panel.ZIndex="90"
  293. Background="#80F5F7FB">
  294. <Border HorizontalAlignment="Center"
  295. VerticalAlignment="Center"
  296. Padding="18,16"
  297. Background="White"
  298. CornerRadius="12">
  299. <StackPanel>
  300. <ProgressBar Width="220"
  301. Height="6"
  302. IsIndeterminate="True" />
  303. <TextBlock x:Name="BusyMessageTextBlock"
  304. Margin="0,12,0,0"
  305. HorizontalAlignment="Center"
  306. FontSize="13"
  307. FontWeight="SemiBold"
  308. Foreground="#111827"
  309. Text="正在处理,请稍候..." />
  310. </StackPanel>
  311. </Border>
  312. </Border>
  313. <Border x:Name="StatusMessageBorder"
  314. Visibility="Collapsed"
  315. Panel.ZIndex="100"
  316. HorizontalAlignment="Center"
  317. VerticalAlignment="Top"
  318. Margin="24,12,24,0"
  319. MaxWidth="860"
  320. Padding="14,10"
  321. Background="#111827"
  322. CornerRadius="10">
  323. <TextBlock x:Name="StatusMessageTextBlock"
  324. FontSize="13"
  325. Foreground="White"
  326. TextWrapping="Wrap"
  327. Text="" />
  328. </Border>
  329. </Grid>
  330. </Window>