Procházet zdrojové kódy

refactor(ui): 移除网卡推荐面板,新增手动刷新按钮

简化界面布局,移除自动推荐逻辑,改为通过“刷新”按钮手动更新网卡列表及状态。
yangkaixiang před 1 měsícem
rodič
revize
ab2efaa5be

+ 22 - 39
windows/QuickIP.Client/MainWindow.xaml

@@ -45,32 +45,23 @@
                         <TextBlock FontSize="13"
                                    Foreground="#374151"
                                    Text="本机有线网卡" />
-                        <ComboBox x:Name="AdapterComboBox"
-                                  Margin="0,8,0,0"
-                                  MinHeight="36"
-                                  DisplayMemberPath="DisplayName"
-                                  SelectionChanged="AdapterComboBox_OnSelectionChanged" />
-                        <Border Margin="0,12,0,0" Padding="12" Background="#F9FAFB" CornerRadius="10">
-                            <StackPanel>
-                                <TextBlock FontSize="12" Foreground="#6B7280" Text="建议选择" />
-                                <TextBlock x:Name="RecommendedAdapterTextBlock"
-                                           Margin="0,8,0,0"
-                                           FontSize="14"
-                                           FontWeight="SemiBold"
-                                           Foreground="#111827"
-                                           Text="-" />
-                                <TextBlock x:Name="RecommendedReasonTextBlock"
-                                           Margin="0,8,0,0"
-                                           FontSize="12"
-                                           Foreground="#4B5563"
-                                           Text="-" />
-                                <TextBlock x:Name="ProbeReasonTextBlock"
-                                           Margin="0,8,0,0"
-                                           FontSize="12"
-                                           Foreground="#4B5563"
-                                           Text="尚未对 169.254.100.2 进行可达性探测。" />
-                            </StackPanel>
-                        </Border>
+                        <Grid Margin="0,8,0,0">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="*" />
+                                <ColumnDefinition Width="Auto" />
+                            </Grid.ColumnDefinitions>
+                            <ComboBox x:Name="AdapterComboBox"
+                                      MinHeight="36"
+                                      DisplayMemberPath="DisplayName"
+                                      SelectionChanged="AdapterComboBox_OnSelectionChanged" />
+                            <Button x:Name="RefreshAdaptersButton"
+                                    Grid.Column="1"
+                                    Margin="8,0,0,0"
+                                    MinHeight="36"
+                                    Padding="14,0"
+                                    Click="RefreshAdaptersButton_OnClick"
+                                    Content="刷新" />
+                        </Grid>
                     </StackPanel>
 
                     <Border Grid.Row="2" Margin="0,24,0,0" Padding="16" Background="#ECFDF5" CornerRadius="10" VerticalAlignment="Top">
@@ -86,19 +77,11 @@
                     </Border>
 
                     <Border Grid.Row="3" Margin="0,24,0,0" Padding="16" Background="#EEF2FF" CornerRadius="10">
-                        <StackPanel>
-                            <TextBlock x:Name="StatusTextBlock"
-                                       FontSize="13"
-                                       Foreground="#3730A3"
-                                       TextWrapping="Wrap"
-                                       Text="请选择一块有线网卡。" />
-                            <TextBlock x:Name="DiscoveredDeviceTextBlock"
-                                       Margin="0,10,0,0"
-                                       FontSize="12"
-                                       Foreground="#4B5563"
-                                       TextWrapping="Wrap"
-                                       Text="尚未发现设备。" />
-                        </StackPanel>
+                        <TextBlock x:Name="StatusTextBlock"
+                                   FontSize="13"
+                                   Foreground="#3730A3"
+                                   TextWrapping="Wrap"
+                                   Text="请选择一块有线网卡。" />
                     </Border>
                 </Grid>
             </Border>

+ 26 - 20
windows/QuickIP.Client/MainWindow.xaml.cs

@@ -21,6 +21,7 @@ public partial class MainWindow : Window
     private bool _configValidated;
     private bool _suppressConfigChangeHandling;
     private bool _isShowingPassword;
+    private bool _isBusy;
     private bool _suppressPasswordSync;
 
     public MainWindow()
@@ -49,18 +50,6 @@ public partial class MainWindow : Window
         AdapterComboBox.ItemsSource = _adapters;
 
         var recommendedAdapter = _networkAdapterService.GetRecommendedAdapter(_adapters);
-        if (recommendedAdapter is not null)
-        {
-            RecommendedAdapterTextBlock.Text = $"{recommendedAdapter.Name} ({recommendedAdapter.RecommendationLabel})";
-            RecommendedReasonTextBlock.Text = recommendedAdapter.RecommendationReason;
-            ProbeReasonTextBlock.Text = recommendedAdapter.ProbeReason;
-        }
-        else
-        {
-            RecommendedAdapterTextBlock.Text = "未检测到可用有线网卡";
-            RecommendedReasonTextBlock.Text = "请确认本机是否存在可用的以太网适配器。";
-            ProbeReasonTextBlock.Text = "当前没有可探测的网卡。";
-        }
 
         var savedPassword = _passwordStoreService.LoadPassword();
         if (!string.IsNullOrWhiteSpace(savedPassword))
@@ -149,6 +138,26 @@ public partial class MainWindow : Window
         }
     }
 
+    private async void RefreshAdaptersButton_OnClick(object sender, RoutedEventArgs e)
+    {
+        var selectedAdapterId = (AdapterComboBox.SelectedItem as AdapterInfo)?.Id;
+        SetBusyState(true);
+        try
+        {
+            await RefreshAdaptersAsync(selectedAdapterId);
+            SetStatus("已刷新本机网卡和管理口探测结果。", true);
+        }
+        catch (Exception ex)
+        {
+            SetStatus($"刷新本机网卡失败:{ex.Message}", true);
+            MessageBox.Show(this, ex.Message, "刷新失败", MessageBoxButton.OK, MessageBoxImage.Error);
+        }
+        finally
+        {
+            SetBusyState(false);
+        }
+    }
+
     private async void DiscoverConnectButton_OnClick(object sender, RoutedEventArgs e)
     {
         if (string.IsNullOrWhiteSpace(GetCurrentPassword()))
@@ -161,7 +170,6 @@ public partial class MainWindow : Window
         PersistPasswordIfNeeded();
         SetBusyState(true);
         SetStatus("正在检查当前网卡是否可直接访问管理口。", true);
-        DiscoveredDeviceTextBlock.Text = "尚未发现设备。";
         await Dispatcher.InvokeAsync(() => { }, System.Windows.Threading.DispatcherPriority.Render);
 
         try
@@ -173,7 +181,6 @@ public partial class MainWindow : Window
                 {
                     _connectedBaseAddress = "http://169.254.100.2:48888";
                     _connectedLocalIPv4 = adapter.IPv4Address;
-                    DiscoveredDeviceTextBlock.Text = $"已直接访问管理口:169.254.100.2 / {adapter.Name}";
                     SetStatus("连接成功,无需切换本机网卡。", true);
                     OpenDeviceDetailsWindow(_connectedBaseAddress, _connectedLocalIPv4);
                     return;
@@ -205,7 +212,6 @@ public partial class MainWindow : Window
                 return;
             }
 
-            DiscoveredDeviceTextBlock.Text = $"已发现设备:{device.Hostname} / {device.Lan2Ip} / Agent {device.AgentVersion}";
             SetStatus("已发现设备,正在验证连接。", true);
 
             var discoveredResult = await _agentApiService.CheckHealthAsync($"http://{device.Lan2Ip}:48888", GetCurrentPassword(), selectedAdapter?.IPv4Address ?? string.Empty);
@@ -252,8 +258,9 @@ public partial class MainWindow : Window
     {
         var adapter = AdapterComboBox.SelectedItem as AdapterInfo;
         var hasAdapter = adapter is not null;
-        SwitchMaintenanceButton.IsEnabled = hasAdapter;
-        DiscoverConnectButton.IsEnabled = hasAdapter && adapter!.HasLink;
+        RefreshAdaptersButton.IsEnabled = !_isBusy;
+        SwitchMaintenanceButton.IsEnabled = !_isBusy && hasAdapter;
+        DiscoverConnectButton.IsEnabled = !_isBusy && hasAdapter && adapter!.HasLink;
         ReloadInterfaceConfigButton.IsEnabled = RemoteTargetInterfaceComboBox.SelectedItem is RemoteInterfaceInfo;
         ValidateConfigButton.IsEnabled = RemoteTargetInterfaceComboBox.SelectedItem is RemoteInterfaceInfo;
         ApplyConfigButton.IsEnabled = _configValidated && RemoteTargetInterfaceComboBox.SelectedItem is RemoteInterfaceInfo;
@@ -277,9 +284,6 @@ public partial class MainWindow : Window
         {
             AdapterComboBox.SelectedItem = selected;
             UpdateAdapterDetails(selected);
-            RecommendedAdapterTextBlock.Text = $"{selected.Name} ({selected.RecommendationLabel})";
-            RecommendedReasonTextBlock.Text = selected.RecommendationReason;
-            ProbeReasonTextBlock.Text = selected.ProbeReason;
         }
     }
 
@@ -645,7 +649,9 @@ public partial class MainWindow : Window
 
     private void SetBusyState(bool isBusy)
     {
+        _isBusy = isBusy;
         AdapterComboBox.IsEnabled = !isBusy;
+        RefreshAdaptersButton.IsEnabled = !isBusy;
         PasswordBox.IsEnabled = !isBusy;
         PasswordTextBox.IsEnabled = !isBusy;
         TogglePasswordVisibilityButton.IsEnabled = !isBusy;