Files
classhelper-island-refactor…/analysis/windows.md
T
ClassIsland Prompt Kit 22c1784bab feat: ClassIsland / ClassHelper 灵动岛提示词套件
- 重构版主提示词(14 parts,面向 ClassHelper 灵动岛重构)
- ClassIsland 全量规格提示词(20 parts,含分卷与逐章版本)
- 投喂指南、分卷、逐节文件
- 调研记录、一致性基线、生成与质检脚本
2026-11-12 21:59:58 +08:00

19 KiB
Raw Blame History

analysis/windows.md — Part 10(设置中心)与 Part 11(其它窗口)的工作底稿

负责人:windows(Part 10 / Part 11) 工作方式:只读静态分析。未构建、未运行、未截图。所有结论来自源码文本与行号。

1. 已读文件清单(含读取范围)

1.1 设置中心(Part 10 证据)

文件 行数 读取范围 用途
repos/ClassIsland/ClassIsland/Views/SettingsWindowNew.axaml 266 全量 窗口尺寸、标题栏、导航、抽屉、遮罩、菜单
repos/ClassIsland/ClassIsland/Views/SettingsWindowNew.axaml.cs 883 全量 导航构建、过滤、缓存、关闭/重启、URI、菜单动作
repos/ClassIsland/ClassIsland/Models/Settings.cs 2655 1–900 精读 + 全部字段声明 grep(32–222、1836–1875) 所有设置默认值
Views/SettingPages/GeneralSettingsPage.axaml(.cs) 315 / 100 全量 基本页
Views/SettingPages/AppearanceSettingsPage.axaml(.cs) 595 / 57 全量 外观页
Views/SettingPages/WindowSettingsPage.axaml 276 全量 窗口页
Views/SettingPages/ClockSettingsPage.axaml 95 全量 时钟页
Views/SettingPages/StorageSettingsPage.axaml 111 全量 存储页
Views/SettingPages/PrivacySettingsPage.axaml 42 全量 隐私页
Views/SettingPages/AdvancedSettingsPage.axaml 77 全量 高级页
Views/SettingPages/ErrorSettingsPage.axaml 35 全量 错误页
Views/SettingPages/TestSettingsPage.axaml 17 全量 调试测试页
Views/SettingPages/RefreshingSettingsPage.axaml 159 全量 翻新与迎新页
Views/SettingPages/ManagementSettingsPage.axaml 117 全量 集控页
Views/SettingPages/ManagementPolicySettingsPage.axaml 113 全量 集控策略页
Views/SettingPages/ManagementCredentialsSettingsPage.axaml 101 全量 集控凭据页
Views/SettingPages/AboutSettingsPage.axaml 319 全量 关于页
Views/SettingPages/WeatherSettingsPage.axaml 332 全量 天气页
Views/SettingPages/UpdateSettingsPage.axaml 403 全量 更新页
Views/SettingPages/ThemesSettingsPage.axaml 368 全量 主题页
Views/SettingPages/NotificationSettingsPage.axaml 497 全量 提醒页
Views/SettingPages/ComponentsSettingsPage.axaml 644 全量 组件页
Views/SettingPages/AutomationSettingsPage.axaml 402 全量 自动化页
Views/SettingPages/PluginsSettingsPage.axaml(.cs) 884 / 680 axaml 全量;cs 1–80 插件页
Views/SettingPages/DebugPage.axaml 133 全量 调试页
ClassIsland.Core/Abstractions/Controls/SettingsPageBase.cs 79 全量 页面基类、抽屉/重启命令
ClassIsland.Core/Extensions/Registry/SettingsWindowRegistryExtensions.cs 81 全量 页面/分组注册机制
ClassIsland.Core/Services/Registry/SettingsWindowRegistryService.cs 21 全量 注册表
ClassIsland.Core/Attributes/SettingsPageInfo.cs 47 全量 页面元数据定义
ClassIsland.Core/Enums/SettingsWindow/SettingsPageCategory.cs 24 全量 分类枚举与排序
ClassIsland.Core/Attributes/GroupAttribute.cs 13 全量 分组 id
ClassIsland.Core/StylesBase.axaml 341 1–340 settings-container、cardContainer、Slider tooltip、动画级别相关样式
ClassIsland.Core/ThemeBase.axaml 57 全量 SettingsContainerWidth=960、导航图标尺寸 20、开关默认「开/关」
ClassIsland.Core/Controls/ListDetailView.axaml(.cs) 72 / 91 全量 设置页两栏布局、压缩阈值 800
ClassIsland.Core/Controls/DrawerHost.axaml(.cs) 87 / 133 全量 设置抽屉宽度/动画/交互
ClassIsland.Core/Controls/MyWindow.cs 244 全量 窗口基类、Mica、F3/F6/F7、Toast adorner
ClassIsland/App.Services.xaml.cs 326 130–209 页面注册顺序、分组、Excel/窗口 DI
ClassIsland/ViewModels/SettingsNewViewModel.cs 207 全量 窗口 VM 字段
ClassIsland/Services/SettingsService.cs 294 100–294 即时保存、设置叠层、迁移
ClassIsland/Views/SettingPages/PluginsSettingsPage.axaml.cs 680 1–80 插件市场首次刷新策略(7 天)

1.2 其它窗口(Part 11 证据)

文件 行数 读取范围
Views/WelcomeWindow.axaml(.cs) 30 / 244 全量
Views/WelcomePages/WelcomePage.axaml(.cs) 102 / 70 全量
Views/WelcomePages/LicensePage.axaml 44 全量
Views/WelcomePages/RefreshingPage.axaml 91 全量
Views/WelcomePages/GeneralPage.axaml 50 全量
Views/WelcomePages/ColorThemePage.axaml 81 全量
Views/WelcomePages/AppearancePage.axaml 80 全量
Views/WelcomePages/SystemPage.axaml 101 全量
Views/WelcomePages/FinishPage.axaml 99 全量
Controls/OobeIntroAnimationControl.axaml(.cs) 144 / 165 全量
Views/SplashWindow.axaml(.cs) 100 / 131 全量
Services/SplashService.cs 93 全量
Views/CrashWindow.axaml(.cs) 99 / 86 全量
Views/RecoveryWindow.axaml 22 全量
Views/RecoveryPages/HomePage.axaml 85 全量
Views/RecoveryPages/RecoverBackupPage.axaml 45 全量
Views/UpdateProgressWindow.xaml 39 全量
Views/TimeAdjustmentWindow.axaml 101 全量(cs 未读)
Views/ClassChangingWindow.axaml(.cs) 273 / 193 全量
Views/ClassPlanDetailsWindow.axaml 199 全量(cs 未读)
Views/ExcelImportWindow.xaml 992 全量
Views/ExcelImportWindow.xaml.cs 824 1–45、320–429、735–824 + grep(整文件被 #if false 包裹)
Views/ExcelExportWindow.xaml 301 全量
Views/ExcelExportWindow.xaml.cs 539 1–30(#if false,未读其余)
Views/DataTransferWindow.axaml(.cs) 20 / 57 全量
Views/DataTransferPage.axaml 273 全量
Views/DataTransferPage.axaml.cs 803 1–120 + grep(ImportDescription)
Views/TutorialCenterWindow.axaml(.cs) 249 / 85 全量
Views/TutorialControllerWindow.axaml 46 全量(cs 未读)
Views/TutorialEditorWindow.axaml 378 全量(cs 未读)
Views/TutorialScriptEditWindow.axaml 29 全量(cs 未读)
Views/AuthorizeWindow.axaml 153 全量(cs 未读)
Controls/AuthorizeProvider/PasswordAuthorizeProvider.axaml 67 全量
Controls/JoinManagementDialog.axaml 64 全量
Views/AppLogsWindow.axaml 178 全量(cs 未读)
Views/ConfigErrorsWindow.xaml 106 全量
Views/InstanceExistedWindow.xaml 54 全量
Views/WindowsPicker.xaml 150 全量
Views/WallpaperPreviewWindow.xaml 74 全量
Views/TopmostEffectWindow.axaml 35 全量
Views/ClearNotificationButtonWindow.xaml 15 全量
Views/RefreshingScopesConfigDialog.axaml 60 全量
Views/WindowRuleDebugWindow.axaml 30 全量
Views/ScreenshotHelperWindow.axaml 37 全量
Views/FeatureDebugWindow.xaml 246 1–120(其余为内部测试页签)
Views/DevPortalWindow.axaml 269 全量
Views/ProfileSettingsWindow.axaml 2004 1–80(仅窗口外壳;内容归 part 06)

2. 设置页面清单(导航顺序 = 注册顺序,证据 App.Services.xaml.cs:156-184、SettingsWindowNew.axaml.cs:145-227)

# id 名称 category 分组 图标(未选/选中) 关键策略过滤
1 general 基本 Internal classisland.general(通用) EF27/EF26(默认) DisableSettingsEditing
2 clock 时钟 Internal 通用 E4C4/E4C3 同上
3 storage 存储 Internal 通用 E6B7/E6B6 同上
4 privacy 隐私 Internal 通用 EF65/EF64 同上
5 refreshing 翻新与迎新 Internal 通用 E0B8/E0B9 同上
6 advanced 高级 Internal 通用 F49F/F49E 同上
7 components 组件 Internal classisland.mainwindow(主界面) E06F/E06F 同上
8 appearance 外观 Internal 主界面 E51E/E51D 同上
9 window 窗口 Internal 主界面 F485/F484 同上
10 notification 提醒 Internal — E02B/E02A 同上
11 weather 天气 Internal — F44F/F44E 同上
12 automation 自动化 Internal — EEF1/EEF0 同上
13 update 更新 Internal — E161/E160 注册条件:AllowedPackageTypes
14 classisland.plugins 插件 External — E071/E071 FullWidthPage;DisableSettingsEditing
15 classisland.themes 主题 External — E6AF/E6AE 同上
16 test-settings-page 测试页面 Debug — 默认 DisableDebugMenu / IsDebugOptionsEnabled
17 debug 调试 Debug — E2C8/E2C7 同上
18 about 关于 ClassIsland About — E9E4/E9E3 无(始终可见)
19 management 集控 About — 默认 hideDefault
20 management.credentials 集控凭据设置 About — 默认 hideDefault
21 management.policy 集控策略 About — 默认 hideDefault
22 _error 出错啦! About — 默认 hideDefault(错误页)

设置窗口:1240×550,MinWidth=560,导航窗格 OpenPaneLength=283,内容限宽 960,压缩阈值 800,标题栏高 48(SettingsWindowNew.axaml:16-22、:52-60、:92-104、.cs:135、:437-446)。

3. 窗口清单表

窗口/页面 尺寸 (W×H) 最小/最大 模态/单例 关键样式 证据
设置窗口 SettingsWindowNew 1240×550 MinW 560 非模态单例 Mica、自定义标题栏 48、导航 283 SettingsWindowNew.axaml:16-22
欢迎向导 WelcomeWindow 800×600 不可缩放 模态(ShowAsDialog) Mica、CenterScreen WelcomeWindow.axaml:14-20
闪屏 SplashWindow 400×100 — 非模态、置顶 无边框、背景透明、Acrylic、暗色 SplashWindow.axaml:12-23
崩溃 CrashWindow 800×450 — 独立 Mica CrashWindow.axaml:13-16
恢复 RecoveryWindow 450×600 — 主窗口(-m -r) 无 Mica 声明 RecoveryWindow.axaml:14
更新进度 UpdateProgressWindow 300×100 不可缩放 置顶/手动定位 纯色 UpdateProgressWindow.xaml:9-24
对齐铃声 TimeAdjustmentWindow 600×330 不可缩放 CenterOwner Mica TimeAdjustmentWindow.axaml:11-16
换课 ClassChangingWindow 600×250(SizeToContent) Min 730×175 CenterScreen Mica ClassChangingWindow.axaml:17-26
课表详细信息 ClassPlanDetailsWindow 800×500 — 独立 Mica、三列 1*/5px/2* ClassPlanDetailsWindow.axaml:14-23
Excel 导入 最大化(设计 800×450) — 模态 源码停用,本实现 P1 重建(xlsx) ExcelImportWindow.xaml:27-34
Excel 导出 1400×700、最大化 — 独立 源码停用,本实现 P1 重建(xlsx) ExcelExportWindow.xaml:14-25
数据迁移 DataTransferWindow 800×600 不可缩放 模态(ShowAsDialog) Mica DataTransferWindow.axaml:9-18
授权 AuthorizeWindow 500×SizeToContent MinH 300 / MaxH 700 模态、置顶 — AuthorizeWindow.axaml:14-24
加入管理 JoinManagementDialog 400×Auto 不可缩放 对话框 — JoinManagementDialog.axaml:12-15
教学中心 TutorialCenterWindow 1240×550 — 非模态单例 Mica、SplitView 328 TutorialCenterWindow.axaml:14、:58-63
教程控制条 TutorialControllerWindow SizeToContent 不可缩放 置顶无边框 Acrylic、透明 TutorialControllerWindow.axaml:10-17
教程编辑器 TutorialEditorWindow 最大化 — 独立 五列 220/Auto/*/Auto/328 TutorialEditorWindow.axaml:15、:239
教程脚本编辑 TutorialScriptEditWindow 800×520 480×320 独立 深色代码编辑器 TutorialScriptEditWindow.axaml:9-11
日志 AppLogsWindow 1200×600 — 非模态单例 Mica AppLogsWindow.axaml:15
配置错误 ConfigErrorsWindow 1200×600 — 独立 纯色 ConfigErrorsWindow.xaml:18
实例已存在 InstanceExistedWindow 800×450 不可缩放 独立 纯色 InstanceExistedWindow.xaml:20-22
窗口选择 WindowsPicker 1300×600 — 对话框 MaterialDesign 混合 WindowsPicker.xaml:13
壁纸预览 WallpaperPreviewWindow 800×450 — CenterOwner 纯色 WallpaperPreviewWindow.xaml:11
顶层特效 TopmostEffectWindow 1×1(运行时全屏) 不可缩放 置顶无边框 透明 TopmostEffectWindow.axaml:8-15
清除通知按钮 ClearNotificationButtonWindow SizeToContent — 不实现(源码 #if false) 空按钮遗留 ClearNotificationButtonWindow.xaml:8-11
翻新范围 RefreshingScopesConfigDialog 400×600 不可缩放 模态 — RefreshingScopesConfigDialog.axaml:9-14
窗口规则调试 WindowRuleDebugWindow 400×Auto — 置顶 Mica WindowRuleDebugWindow.axaml:9-14
截图辅助 ScreenshotHelperWindow 未设(Auto) — 独立 — ScreenshotHelperWindow.axaml:1-10
功能调试 FeatureDebugWindow 800×450 — 独立(开发) 纯色 FeatureDebugWindow.xaml:28
DevPortal 1200×700 — 独立(开发) Mica DevPortalWindow.axaml:17-21
OOBE 各页 800×600 内 — 导航页 settings-container 限宽 600 各 WelcomePages/*.axaml
数据迁移页 800×600 内 — Carousel 5 页 限宽 600 DataTransferPage.axaml:17-23
恢复子页 450×600 内 — Frame — RecoveryPages/*.axaml

4. 关键判定与发现

  1. 设置持久化是「逐属性即时写盘」:SettingsService.SettingsChanged 在每个属性变化后调用 SaveSettings(propertyName)(Services/SettingsService.cs:261-280、:171-179);[JsonIgnore] 字段(IsSentryEnabled、ShowSellingAnnouncement)不写 Settings.json(Models/Settings.cs:518-535、:2615-2628)。
  2. 设置叠层:SettingsOverlays JSON 键名为 SettingsOverlay;叠层用 "@" 保存原始值,guid 为各写入者(Models/Settings.cs:263-273、SettingsService.cs:191-259)。用户在 UI 改任意属性会清掉该属性全部叠层。
  3. 页面缓存:SettingsPagesCachePolicy 仅在两处使用(SettingsWindowNew.axaml.cs:425-428、:513-516);0 不缓存、1 窗口内缓存、>=2 跨窗口缓存为推断。
  4. OOBE 实际为 8 页(WelcomeWindow.axaml.cs:64-73),不是任务描述中的「9 页」;页序为 欢迎/许可/翻新/基本/颜色主题/外观/系统/完成,且按 isRefreshing/isOnboarding 条件裁剪。
  5. Excel 导入/导出源码为停用遗留:两个 code-behind 文件整体被 #if false 包裹(ExcelImportWindow.xaml.cs:1、ExcelExportWindow.xaml.cs:1),DI 注册被注释(App.Services.xaml.cs:204-205),且原实现依赖 WPF/ReoGrid/System.Windows.Forms。Lead 最终裁决:本实现按 P1 必须实现(用 xlsx 重建,ReoGrid/WPF 仅作参考),与 part 06 口径一致;Part 11 已按此改写并给出 xlsx/Vue 网格技术约束。
  6. 无通知中心窗口:全仓库 Views/ 下不存在通知中心类窗口;提醒呈现依赖主界面行 + 强提醒特效(part 07 范围)。Lead 已确认该结论并在 part 01 修正提法;Part 11 明确「不得创建通知中心窗口」。 6b. ClearNotificationButtonWindow 为 #if false 遗留(内容仅空按钮):Lead 裁决不实现,清除提醒改由主界面右键菜单「清除全部提醒」承担(归 part 04/07)。Part 11 已改写为「不实现」,不再列为实现窗口。
  7. 设置抽屉:统一为右侧抽屉,动画 250ms cubic-bezier(0,0,0,1),Esc/点遮罩关闭,只有 IThemeService.AnimationLevel>=1 才启用动画(DrawerHost.axaml:42-59、.cs:70-72、:78-118)。不同页面抽屉宽度:实验性 332、城市搜索 320、主题排序 300、主题错误 450、插件源 500、插件更新 320、更新下载 450、更新日志 500、提醒源 500、规则集 600。
  8. 响应式:设置窗口 <800px 进入压缩模式;ListDetailView 自身也有 <800px(MinCompressWidth=800)压缩阈值,因此提醒/插件/自动化页在 800px 附近会二次压缩。
  9. 标题栏右侧「金刚键空位」140px 与 macOS 左侧 60px 是 FluentAvalonia AppWindow 的窗口控制区预留(SettingsWindowNew.axaml:120-126、:252)。
  10. 调试快捷键:F3/F6/F7 是窗口基类统一行为,不限于设置窗口(MyWindow.cs:115-166)。

5. 未决问题 / 缺口(交给 Lead 决策)

  1. FluentAvalonia 控件自带几何值缺失:SettingsExpander/SettingsExpanderItem 的行高、内边距、圆角、图标槽宽度来自 FluentAvalonia 主题包,仓库中只有覆盖样式(如 MinHeight 调整、CornerRadius 覆盖),没有完整数值。Part 10 中相关数值已标注【推断】(建议实现时取 min-height: 64px、padding: 16px、圆角 4–7px)。
  2. SettingsPagesCachePolicy = 2 的语义为推断(源码只区分 >=1 与 <=1)。若 Lead 有 1.x 文档可确认。
  3. 部分设置页的 .cs 行为未读(WindowSettingsPage.axaml.cs、NotificationSettingsPage.axaml.cs、UpdateSettingsPage.axaml.cs 等):其「立即生效 vs 重启」结论主要来自 XAML 绑定 + RequestRestart 调用点。已确认需重启:AnimationLevel、IsWaitForTransientDisabled;其余(渲染模式、系统标题栏、Qt 缩放)标注为推断。
  4. ProfileSettingsWindow(档案编辑,2004 行)与 EditModeView(编辑模式) 只记录了窗口外壳参数(MinWidth=750、1100×600、Mica、标题「档案编辑」),内容归 part 06 / part 04。若 Lead 希望 Part 11 覆盖其内部三栏布局,需要追加分配。
  5. TimeAdjustmentWindow 的校准数学、TopmostEffectWindow 的全屏放置逻辑、TutorialControllerWindow 的定位逻辑均在未读的 .cs 中(分别为 .cs 6173/4461/2568 字节),本文只给出 UI 规格与推断行为;如需精确算法需再读这三个文件。
  6. Excel 功能已裁决:Lead 定为 P1 必须实现(xlsx 重建;ReoGrid/WPF 仅参考),与 part 06 同步;Part 11 已删除「可选/遗留、默认不实现」措辞并补齐技术约束与验收项。
  7. 通知中心(简报 §6 中 part 11 的关键词)在源码中不存在;建议 Lead 在 part 07 中说明提醒的呈现位置,并在总纲中更正该关键词。
  8. OOBE 页数与简报不一致(8 vs 9);建议以源码为准。
  9. 「搜索设置」功能不存在:任务描述提到「设置中心:导航/搜索」,但 SettingsWindowNew 无搜索框。Part 10 已注明不得编造。
  10. 多语言/本地化:设置页与窗口文案在源码中为硬编码中文(未走 Localization 资源)。Lead 裁决:保留中文字面量作为规格,但要求集中到常量文件(Part 10 §10.5 第 8 条、Part 11 §11.1 第 6 条已写入)。