|
| 1 | +/** |
| 2 | + * SettingsPage — 设置页(2026-08-21 用户需求:课堂助手设置类面板迁出,与课堂助手同级导航)。 |
| 3 | + * |
| 4 | + * @ai-context: 布局定稿(市场调研 + 用户裁决)= 单页滚动 + 分组标题(方案 A): |
| 5 | + * 模型 / 音频 / AI 服务 / 数据 / 词表 五组,共 9 个面板; |
| 6 | + * 组标题仅视觉分组,面板均为自包含组件(各自 invoke 后端配置)。 |
| 7 | + * @ai-context: 状态联动设计——设置页改动后端配置(OCR 设备/预处理链/密钥/模型下载)后, |
| 8 | + * 课堂助手下次 invoke 自然读取最新值,无需共享前端状态; |
| 9 | + * 模型下载等全局事件(model:download-*)由 ClassroomPage 保留挂载的 |
| 10 | + * 监听器接收(TD-004:display:none 不卸载),开始按钮就绪状态自动刷新。 |
| 11 | + * @ai-context: 升级路径预留——面板数 >15 时组标题行可平滑改为左侧导航键(数据模型不变)。 |
| 12 | + */ |
| 13 | +import { OcrDeviceSetting } from "../components/OcrDeviceSetting"; |
| 14 | +import { AudioPreprocSetting } from "../components/AudioPreprocSetting"; |
| 15 | +import AudioStoragePanel from "../components/AudioStoragePanel"; |
| 16 | +import BackupPanel from "../components/BackupPanel"; |
| 17 | +import { VocabManager } from "../components/VocabManager"; |
| 18 | +import ModelManagementPanel from "../components/ModelManagementPanel"; |
| 19 | +import ModelDiskPanel from "../components/ModelDiskPanel"; |
| 20 | +import AiServicePanel from "../components/AiServicePanel"; |
| 21 | +import AiTaskPanel from "../components/AiTaskPanel"; |
| 22 | + |
| 23 | +const panel: React.CSSProperties = { border: "1px solid #e5e7eb", borderRadius: 8, padding: 12 }; |
| 24 | +const groupTitle: React.CSSProperties = { |
| 25 | + fontSize: 12, |
| 26 | + fontWeight: 600, |
| 27 | + color: "#6b7280", |
| 28 | + margin: "14px 0 8px", |
| 29 | + letterSpacing: 0.5, |
| 30 | +}; |
| 31 | + |
| 32 | +/** 组标题(视觉分组;面板自包含,无组级状态) */ |
| 33 | +function GroupTitle({ children }: { children: React.ReactNode }) { |
| 34 | + return <div style={groupTitle}>{children}</div>; |
| 35 | +} |
| 36 | + |
| 37 | +export default function SettingsPage() { |
| 38 | + return ( |
| 39 | + <div style={{ height: "calc(100vh - 56px)", overflowY: "auto" }}> |
| 40 | + <div style={{ maxWidth: 720, padding: "12px 16px 24px" }}> |
| 41 | + <div style={{ fontSize: 13, color: "#6b7280", marginBottom: 4 }}> |
| 42 | + 应用配置与管理。改动即时生效,课堂助手下次使用时读取最新值。 |
| 43 | + </div> |
| 44 | + |
| 45 | + {/* ── 模型(下载/磁盘/OCR 设备) ── */} |
| 46 | + <GroupTitle>模型</GroupTitle> |
| 47 | + <div style={{ ...panel, marginBottom: 4 }}> |
| 48 | + <ModelManagementPanel /> |
| 49 | + <div style={{ marginTop: 8 }}> |
| 50 | + <ModelDiskPanel /> |
| 51 | + </div> |
| 52 | + <div style={{ marginTop: 8 }}> |
| 53 | + <OcrDeviceSetting /> |
| 54 | + </div> |
| 55 | + </div> |
| 56 | + |
| 57 | + {/* ── 音频(预处理链/落盘管理) ── */} |
| 58 | + <GroupTitle>音频</GroupTitle> |
| 59 | + <div style={{ ...panel, marginBottom: 4 }}> |
| 60 | + <AudioPreprocSetting /> |
| 61 | + <div style={{ marginTop: 8 }}> |
| 62 | + <AudioStoragePanel /> |
| 63 | + </div> |
| 64 | + </div> |
| 65 | + |
| 66 | + {/* ── AI 服务(密钥授权/任务中心) ── */} |
| 67 | + <GroupTitle>AI 服务</GroupTitle> |
| 68 | + <div style={{ ...panel, marginBottom: 4 }}> |
| 69 | + <AiServicePanel /> |
| 70 | + <div style={{ marginTop: 8 }}> |
| 71 | + <AiTaskPanel /> |
| 72 | + </div> |
| 73 | + </div> |
| 74 | + |
| 75 | + {/* ── 数据(备份/恢复) ── */} |
| 76 | + <GroupTitle>数据</GroupTitle> |
| 77 | + <div style={{ ...panel, marginBottom: 4 }}> |
| 78 | + <BackupPanel /> |
| 79 | + </div> |
| 80 | + |
| 81 | + {/* ── 词表(热词/替换词闭环) ── */} |
| 82 | + <GroupTitle>词表</GroupTitle> |
| 83 | + <div style={{ ...panel, marginBottom: 4 }}> |
| 84 | + <VocabManager /> |
| 85 | + </div> |
| 86 | + </div> |
| 87 | + </div> |
| 88 | + ); |
| 89 | +} |
0 commit comments