From 4ef77c2e72f0150cbf53a36ac63ad0141b190f23 Mon Sep 17 00:00:00 2001 From: CJK_mkp <113243675+CJKmkp@users.noreply.github.com> Date: Sun, 2 Nov 2025 09:41:53 +0800 Subject: [PATCH] =?UTF-8?q?add:Dlass=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/Resources/Settings.cs | 3 + Ink Canvas/Windows/DlassSettingsWindow.xaml | 32 +++++ .../Windows/DlassSettingsWindow.xaml.cs | 127 +++++++++++++++++- 3 files changed, 160 insertions(+), 2 deletions(-) diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index ccb2615f..4ec614da 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -735,6 +735,9 @@ namespace Ink_Canvas [JsonProperty("savedTokens")] public List SavedTokens { get; set; } = new List(); + [JsonProperty("selectedClassName")] + public string SelectedClassName { get; set; } = string.Empty; + [JsonProperty("apiBaseUrl")] public string ApiBaseUrl { get; set; } = "https://dlass.tech"; } diff --git a/Ink Canvas/Windows/DlassSettingsWindow.xaml b/Ink Canvas/Windows/DlassSettingsWindow.xaml index 0ec103df..a8e998ee 100644 --- a/Ink Canvas/Windows/DlassSettingsWindow.xaml +++ b/Ink Canvas/Windows/DlassSettingsWindow.xaml @@ -280,6 +280,38 @@ Margin="0,4,0,0"/> + + + + + + + + + + _currentWhiteboards = new List(); + private UserInfo _currentUser; public DlassSettingsWindow(MainWindow mainWindow = null) { InitializeComponent(); + // 初始化班级下拉框 + CmbClassSelection.Items.Clear(); + CmbClassSelection.Items.Add("(等待连接)"); + CmbClassSelection.SelectedIndex = 0; + CmbClassSelection.IsEnabled = false; + // 加载保存的token LoadUserToken(); @@ -184,6 +193,85 @@ namespace Ink_Canvas.Windows } } + /// + /// 加载班级列表到下拉框 + /// + private void LoadClasses(List whiteboards, UserInfo user = null) + { + CmbClassSelection.Items.Clear(); + + if (whiteboards != null && whiteboards.Count > 0) + { + var teacherName = user?.Username ?? "未知教师"; + var classGroups = whiteboards + .Where(w => !string.IsNullOrEmpty(w.ClassName)) + .GroupBy(w => w.ClassName) + .OrderBy(g => g.Key) + .ToList(); + + foreach (var group in classGroups) + { + var className = group.Key; + var displayText = $"{teacherName} - {className}"; + CmbClassSelection.Items.Add(new ClassSelectionItem + { + DisplayText = displayText, + ClassName = className, + TeacherName = teacherName + }); + } + + var savedClassName = MainWindow.Settings?.Dlass?.SelectedClassName ?? string.Empty; + if (!string.IsNullOrEmpty(savedClassName)) + { + var savedItem = CmbClassSelection.Items.Cast() + .FirstOrDefault(item => item.ClassName == savedClassName); + if (savedItem != null) + { + CmbClassSelection.SelectedItem = savedItem; + } + else if (CmbClassSelection.Items.Count > 0) + { + CmbClassSelection.SelectedIndex = 0; + } + } + else if (CmbClassSelection.Items.Count > 0) + { + CmbClassSelection.SelectedIndex = 0; + } + + CmbClassSelection.IsEnabled = true; + } + else + { + CmbClassSelection.Items.Add("(无可用班级)"); + CmbClassSelection.SelectedIndex = 0; + CmbClassSelection.IsEnabled = false; + } + } + + /// + /// 班级选择改变事件 + /// + private void CmbClassSelection_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) + { + try + { + if (CmbClassSelection.SelectedItem is ClassSelectionItem selectedItem) + { + if (MainWindow.Settings?.Dlass != null) + { + MainWindow.Settings.Dlass.SelectedClassName = selectedItem.ClassName; + MainWindow.SaveSettingsToFile(); + } + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"选择班级时出错: {ex.Message}", LogHelper.LogType.Error); + } + } + /// /// 标题栏拖动事件 /// @@ -292,6 +380,13 @@ namespace Ink_Canvas.Windows LoadUserToken(); + CmbClassSelection.Items.Clear(); + CmbClassSelection.Items.Add("(等待连接)"); + CmbClassSelection.SelectedIndex = 0; + CmbClassSelection.IsEnabled = false; + _currentWhiteboards.Clear(); + _currentUser = null; + TxtConnectionStatus.Text = "未连接"; TxtConnectionStatus.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(161, 161, 170)); } @@ -380,12 +475,18 @@ namespace Ink_Canvas.Windows if (result != null && result.Success) { - var whiteboardCount = result.Whiteboards?.Count ?? 0; + var whiteboards = result.Whiteboards ?? new List(); + _currentWhiteboards = whiteboards; + _currentUser = result.User; + var whiteboardCount = whiteboards.Count; Dispatcher.Invoke(() => { TxtConnectionStatus.Text = $"已连接 (找到 {whiteboardCount} 个白板)"; TxtConnectionStatus.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(34, 197, 94)); + + // 加载班级列表 + LoadClasses(whiteboards, result.User); }); } else @@ -411,7 +512,14 @@ namespace Ink_Canvas.Windows Dispatcher.Invoke(() => { TxtConnectionStatus.Text = "连接失败"; - TxtConnectionStatus.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(239, 68, 68)); // 红色 + TxtConnectionStatus.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(239, 68, 68)); + + // 清空班级列表 + CmbClassSelection.Items.Clear(); + CmbClassSelection.Items.Add("(无可用班级)"); + CmbClassSelection.SelectedIndex = 0; + CmbClassSelection.IsEnabled = false; + _currentWhiteboards.Clear(); }); } } @@ -485,6 +593,21 @@ namespace Ink_Canvas.Windows public string Email { get; set; } } + /// + /// 班级选择项 + /// + public class ClassSelectionItem + { + public string DisplayText { get; set; } + public string ClassName { get; set; } + public string TeacherName { get; set; } + + public override string ToString() + { + return DisplayText; + } + } + #endregion }