Преглед изворни кода

style(ui): 统一将“接口”术语调整为“网口”

优化设备详情页文案与标签显示,提升用户认知一致性。
yangkaixiang пре 1 месец
родитељ
комит
650a89607c

+ 5 - 5
windows/NetworkTool.Client/DeviceDetailsWindow.xaml

@@ -1,7 +1,7 @@
 <Window x:Class="NetworkTool.Client.DeviceDetailsWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-        Title="设备信息与口配置"
+        Title="设备信息与口配置"
         Height="760"
         Width="960"
         MinHeight="680"
@@ -131,7 +131,7 @@
                         <TextBlock Margin="8,2,0,0"
                                    FontSize="12"
                                    Foreground="#6B7280"
-                                   Text="{Binding ElementName=InterfacesItemsControl, Path=Items.Count, StringFormat=({0} 个口)}" />
+                                   Text="{Binding ElementName=InterfacesItemsControl, Path=Items.Count, StringFormat=({0} 个口)}" />
                     </StackPanel>
 
                     <Button x:Name="ReloadInterfaceConfigButton"
@@ -140,7 +140,7 @@
                             Padding="12,0"
                             VerticalAlignment="Center"
                             Click="ReloadInterfaceConfigButton_OnClick"
-                            Content="刷新全部口配置" />
+                            Content="刷新全部口配置" />
 
                     <ItemsControl x:Name="InterfacesItemsControl" Grid.Row="1" Grid.ColumnSpan="2" Margin="0,12,0,0">
                         <ItemsControl.ItemTemplate>
@@ -148,7 +148,7 @@
                                  <Border Margin="0,0,0,14" Padding="14" Background="#F8FAFC" BorderBrush="#D8DEE9" BorderThickness="1" CornerRadius="12">
                                      <StackPanel>
                                         <StackPanel Orientation="Horizontal">
-                                             <TextBlock FontSize="15" FontWeight="SemiBold" Foreground="#0F172A" Text="{Binding SystemName}" />
+                                             <TextBlock FontSize="15" FontWeight="SemiBold" Foreground="#0F172A" Text="{Binding DisplayLabel}" />
                                             <TextBlock Margin="10,2,0,0" FontSize="12" Text="{Binding StatusSummary}">
                                                 <TextBlock.Style>
                                                     <Style TargetType="TextBlock">
@@ -368,7 +368,7 @@
                                    VerticalAlignment="Center"
                                    FontSize="12"
                                    Foreground="#6B7280"
-                                   Text="先确认所有口配置,再校验新配置,最后一次性应用。" />
+                                   Text="先确认所有口配置,再校验新配置,最后一次性应用。" />
 
                         <StackPanel Grid.Column="1" Margin="12,0,0,0" Orientation="Horizontal">
                             <Button x:Name="ValidateConfigButton"

+ 20 - 18
windows/NetworkTool.Client/DeviceDetailsWindow.xaml.cs

@@ -66,22 +66,22 @@ public partial class DeviceDetailsWindow : Window
         var interfaces = await _serverApiService.GetInterfacesAsync(_baseAddress, _password, _localIPv4);
         if (interfaces is null)
         {
-            ShowStatusMessage("设备已连接,但暂时无法读取 Linux 口列表。", StatusMessageType.Warning);
+            ShowStatusMessage("设备已连接,但暂时无法读取 Linux 口列表。", StatusMessageType.Warning);
             return;
         }
 
-        SetConfigStateMessage($"当前管理接口:{interfaces.ManagementInterface}。正在读取全部接口配置。", false);
-        foreach (var info in interfaces.Interfaces)
+        SetConfigStateMessage($"当前管理网口:{interfaces.ManagementInterface}。正在读取全部网口配置。", false);
+        for (var i = 0; i < interfaces.Interfaces.Count; i++)
         {
-            var editor = new InterfaceEditor(info);
+            var editor = new InterfaceEditor(interfaces.Interfaces[i], i + 1);
             _interfaces.Add(editor);
             await LoadRemoteInterfaceConfigAsync(editor);
         }
 
         _configValidated = false;
         _configDirty = false;
-        SetConfigStateMessage("已读取全部口配置。", false);
-        ShowStatusMessage("已读取全部口配置。", StatusMessageType.Success);
+        SetConfigStateMessage("已读取全部口配置。", false);
+        ShowStatusMessage("已读取全部口配置。", StatusMessageType.Success);
     }
 
     private void ClearDetails()
@@ -96,7 +96,7 @@ public partial class DeviceDetailsWindow : Window
     {
         var hostPart = string.IsNullOrWhiteSpace(hostname) ? _remoteHost : $"{hostname} ({_remoteHost})";
         var versionPart = string.IsNullOrWhiteSpace(serverVersion) ? string.Empty : $" - Server {serverVersion}";
-        Title = string.IsNullOrWhiteSpace(hostPart) ? $"设备信息与接口配置{versionPart}" : $"设备信息与接口配置 - {hostPart}{versionPart}";
+        Title = string.IsNullOrWhiteSpace(hostPart) ? $"设备信息与网口配置{versionPart}" : $"设备信息与网口配置 - {hostPart}{versionPart}";
     }
 
     private static string GetRemoteHost(string baseAddress)
@@ -116,7 +116,7 @@ public partial class DeviceDetailsWindow : Window
             var result = await _serverApiService.GetInterfaceConfigAsync(_baseAddress, _password, _localIPv4, editor.SystemName);
             if (!result.Success || result.Data is null)
             {
-                ShowStatusMessage($"读取目标接口 {editor.SystemName} 配置失败:{result.Message}", StatusMessageType.Error);
+                ShowStatusMessage($"读取目标网口 {editor.DisplayLabel} 配置失败:{result.Message}", StatusMessageType.Error);
                 return;
             }
 
@@ -173,7 +173,7 @@ public partial class DeviceDetailsWindow : Window
             return;
         }
 
-        SetBusyState(true, "正在刷新全部口配置...");
+        SetBusyState(true, "正在刷新全部口配置...");
         try
         {
             foreach (var editor in _interfaces)
@@ -183,8 +183,8 @@ public partial class DeviceDetailsWindow : Window
 
             _configValidated = false;
             _configDirty = false;
-            SetConfigStateMessage("已刷新全部口配置。", false);
-            ShowStatusMessage("已刷新全部口配置。", StatusMessageType.Success);
+            SetConfigStateMessage("已刷新全部口配置。", false);
+            ShowStatusMessage("已刷新全部口配置。", StatusMessageType.Success);
         }
         finally
         {
@@ -229,7 +229,7 @@ public partial class DeviceDetailsWindow : Window
                 var errors = result.Data.Errors.Count > 0 ? $" 错误:{string.Join(";", result.Data.Errors)}" : string.Empty;
                 SetConfigStateMessage(_configValidated ? "配置已校验通过,可以应用。" : "配置校验未通过,请修正后重新校验。", !_configValidated);
                 ShowStatusMessage(
-                    _configValidated ? $"全部口校验通过,可应用配置。{warnings}" : $"校验失败。{errors}{warnings}",
+                    _configValidated ? $"全部口校验通过,可应用配置。{warnings}" : $"校验失败。{errors}{warnings}",
                     _configValidated ? StatusMessageType.Success : StatusMessageType.Error);
             }
             else
@@ -256,7 +256,7 @@ public partial class DeviceDetailsWindow : Window
 
         var changeSummary = FormatChangeSummary();
         var confirmMessage = string.IsNullOrWhiteSpace(changeSummary)
-            ? "将要一次性应用以下口配置:\n\n" + FormatConfigSummary(request) + "\n\n请确认是否继续。"
+            ? "将要一次性应用以下口配置:\n\n" + FormatConfigSummary(request) + "\n\n请确认是否继续。"
             : "将要一次性应用以下已修改配置:\n\n" + changeSummary + "\n\n完整目标配置:\n\n" + FormatConfigSummary(request) + "\n\n请确认是否继续。";
         if (MessageBox.Show(this, confirmMessage, "确认应用配置", MessageBoxButton.OKCancel, MessageBoxImage.Question) != MessageBoxResult.OK)
         {
@@ -492,7 +492,7 @@ public partial class DeviceDetailsWindow : Window
 
         if (result.Count == 0)
         {
-            ShowStatusMessage("口配置不能为空。", StatusMessageType.Error);
+            ShowStatusMessage("口配置不能为空。", StatusMessageType.Error);
             return null;
         }
 
@@ -579,7 +579,7 @@ public partial class DeviceDetailsWindow : Window
     private static string FormatConfigSummary(IReadOnlyList<RemoteInterfaceConfig> configs)
     {
         return string.Join(Environment.NewLine + Environment.NewLine, configs.Select(item =>
-            $"口:{item.Interface}\n" +
+            $"口:{item.Interface}\n" +
             $"模式:{(item.Dhcp4 ? "DHCP 自动获取" : "静态 IPv4")}\n" +
             $"IP:{(item.Dhcp4 ? "自动获取" : FormatAddresses(item.Addresses))}\n" +
             $"路由:{(item.Dhcp4 ? "自动获取" : FormatRoutes(item.Routes))}\n" +
@@ -995,7 +995,7 @@ public partial class DeviceDetailsWindow : Window
 
     private string FormatChangedFields()
     {
-        var fields = _interfaces.Where(item => item.HasChanges).Select(item => $"{item.SystemName} 的 {item.ChangedFieldsText}");
+        var fields = _interfaces.Where(item => item.HasChanges).Select(item => $"{item.DisplayLabel} 的 {item.ChangedFieldsText}");
         return string.Join(";", fields);
     }
 
@@ -1148,14 +1148,16 @@ public partial class DeviceDetailsWindow : Window
         private string[] _originalGatewayKeys = [];
         private string[] _originalDnsKeys = [];
 
-        public InterfaceEditor(RemoteInterfaceInfo info)
+        public InterfaceEditor(RemoteInterfaceInfo info, int displayIndex)
         {
             SystemName = info.SystemName;
+            DisplayLabel = $"网口{displayIndex}:{SystemName}";
             StatusSummary = info.StatusSummary;
             LinkUp = info.LinkUp;
         }
 
         public string SystemName { get; }
+        public string DisplayLabel { get; }
         public string StatusSummary { get; }
         public bool LinkUp { get; }
         public ObservableCollection<EditableAddress> Addresses { get; } = [];
@@ -1218,7 +1220,7 @@ public partial class DeviceDetailsWindow : Window
 
         public string FormatChangeSummary()
         {
-            var lines = new List<string> { $"接口:{SystemName}" };
+            var lines = new List<string> { DisplayLabel };
             if (IsAddressModified)
             {
                 lines.Add($"IP:{FormatKeys(_originalAddressKeys)} -> {FormatKeys(GetAddressKeys())}");

+ 1 - 1
windows/NetworkTool.Client/Models/RemoteInterfaceInfo.cs

@@ -53,7 +53,7 @@ public sealed class RemoteInterfaceInfo
         : string.Join("; ", IPv4.Select(item => $"{item.Address}/{item.Prefix}"));
 
     public string StatusSummary => IsManagementInterface
-        ? $"管理口 / {(LinkUp ? "已连接" : "未连接")}"
+        ? $"管理口 / {(LinkUp ? "已连接" : "未连接")}"
         : LinkUp ? "已连接" : "未连接";
 
     public string DisplayName => $"{SystemName} / {StatusSummary}";