逐行精读源码生成。行号基于当前工作区版本,仅用于快速定位。
文件职责:应用「设置」路由页(/settings)的全部 UI 与状态管理。呈现通用偏好、外观、开发者模式开关、更新与关于信息,并负责把偏好写入配置服务(configService)或后端状态,附带三个确认对话框与更新对话框;Windows 额外显示游戏启动设置卡,macOS/Linux 隐藏该卡。
导出:export default function SettingsPage()(settings.tsx:43),仅此一个导出。
主要依赖:react-i18next(useTranslation)、@/components/ui/glass(GlassAlertDialog/GlassButton/GlassCard/GlassSelect/GlassSkeleton/GlassSwitch)、@/components/game-launch-settings(GameLaunchSettings)、@/components/appearance-settings(AppearanceSettings)、react(useState/useEffect/useRef/useCallback)、react-dom(createPortal)、@tauri-apps/api/app(getVersion/getTauriVersion/getIdentifier)、@/utils/configService(getConfig/setConfig)、@/utils/roleDetailService、@/utils/trayService(setTrayUser)、@/components/ui/settings-row(SettingsDivider)、@/utils/updateService(fetchRemoteVersion/getRemoteVersion/subscribeRemoteVersion/getChannel/setChannel/getSource/setSource/initializeChannel)、@/components/ui/global-alert(pushGlobalAlert)、@/components/update-dialog(UpdateDialog)、@/utils/platform(isWindowsPlatform)。
托盘相关的
invoke(set_tray_user/update_tray_user_data)与roleDataService.queryData组装已迁到@/utils/trayService(见 utils_services_a.md),本文件因此不再直接依赖@tauri-apps/api/core与@/utils/roleDataService;账号列表只在loadConfig里动态import("@/utils/accountService")。
| 区间 | 内容 |
|---|---|
| settings.tsx:1-41 | import 区(UI 组件、子设置组件、Tauri API、配置/更新/托盘服务、对话框) |
| settings.tsx:43-81 | SettingsPage 组件开头:t/i18n 解构、supportsLauncher 与全部 useState(语言下拉、6 个偏好、版本/更新状态、对话框可见性) |
| settings.tsx:83-86 | languages 常量(en / zh 两个选项) |
| settings.tsx:88-156 | 挂载 effect:loadConfig()(89-142)并行读取 9 项配置与应用版本信息 → 动态 import 载入账号列表 → initializeChannel() 后 fetchRemoteVersion();并 subscribeRemoteVersion 订阅更新状态 |
| settings.tsx:158-172 | 语言下拉的外点/滚动关闭 effect(mousedown + 捕获阶段 scroll) |
| settings.tsx:174-201 | 5 个轻量 handler:语言切换、刷新开关、懒加载、Wiki 预加载、关闭行为 |
| settings.tsx:203-207 | handleTrayUserChange:写 state + setConfig("tray_user_role_id") → setTrayUser(value)(@/utils/trayService,内部完成 set_tray_user + 查 char_detail 汇总等级/体力/活跃/周分/BP + update_tray_user_data) |
| settings.tsx:209-228 | 开发者模式:handleDevModeToggle(开启先弹警告)与 confirmDevMode,均派发 developerModeChange 自定义事件 |
| settings.tsx:230-262 | handleCheckUpdate:拉取远端版本并用 pushGlobalAlert 反馈三种结果 |
| settings.tsx:264-326 | 更新通道/更新源切换与二次确认:handleChannelChange、handleSourceChange、confirmPreviewChannel、confirmGithubSource(stable→preview、mirror→github 各需确认) |
| settings.tsx:328-333 | effect:监听全局 openUpdateDialog 事件以打开更新对话框 |
| settings.tsx:335-341 | platformInfo IIFE:按 UA 推断 Windows x64 / macOS / Linux |
| settings.tsx:343-352 | 页头(settings.title + common.managePreferences) |
| settings.tsx:355-675 | 通用设置卡 #settings-general:加载骨架屏 375-416;语言下拉 420-521(按钮 + portal 菜单);切换刷新 525-549;懒加载 553-575;Wiki 预加载 579-603;关闭行为 608-647;托盘用户 652-672。代理设置已迁出至独立「网络」卡 |
| settings.tsx:677-704 | 网络设置卡 #settings-network(标题「网络」+ 副标题 settings.network.desc,整卡委托给 NetworkSettings,settings.tsx:703) |
| settings.tsx:706-738 | Windows 上显示游戏启动设置卡 #settings-game-launch(整卡委托给 GameLaunchSettings,settings.tsx:736) |
| settings.tsx:741-761 | 外观设置卡 #settings-appearance(整卡委托给 AppearanceSettings,settings.tsx:760) |
| settings.tsx:763-784 | 系统资源默认值卡 #settings-system-resource(委托 SystemResourceSettings,settings.tsx:783) |
| settings.tsx:786-807 | To-Do 默认值卡 #settings-todo(委托 TodoSettings,settings.tsx:806) |
| settings.tsx:809-863 | 开发者模式卡 #settings-developer:骨架屏 814 起,开关 851-858 |
| settings.tsx:865-1425 | 更新与关于卡 #settings-about:应用头像/更新状态徽标;更新通道;更新源;版本四宫格;发布日期;「更新到 vX」;「检查更新」;identifier;License;开源致谢列表(20 项);特别鸣谢列表(2 项:Xel-Launcher / Better-Endfield);GitHub/License 链接 |
| settings.tsx:1428-1460 | 开发者模式警告对话框(GlassAlertDialog) |
| settings.tsx:1462-1528 | 测试版通道警告对话框(内容为内联中英双语) |
| settings.tsx:1530-1601 | GitHub 源警告对话框(内容为内联中英双语) |
| settings.tsx:1603-1607 | <UpdateDialog> 更新安装对话框 |
| 符号 | 位置 | 说明 |
|---|---|---|
SettingsPage(default) |
settings.tsx:43 | 页面根组件,返回 7 张卡片 + 3 个警告对话框 + UpdateDialog |
languages |
settings.tsx:83-86 | 语言选项常量:{key:"en",label:"English"}、{key:"zh",label:"简体中文"} |
refreshOnSwitch 等偏好 state |
settings.tsx:55-59 | refreshOnSwitch、lazyLoadEnabled、wikiDetailPreload、closeAction、trayUserRoleId(代理配置已不在本文件,见 NetworkSettings) |
accounts |
settings.tsx:60-62 | 托盘角色下拉用的账号列表(id/nickname/avatar) |
developerMode / showDevWarning |
settings.tsx:64-65 | 开发者模式开关与警告弹窗可见性 |
isConfigLoading / appVersion / tauriVersion / appId |
settings.tsx:66-69 | 加载态与 @tauri-apps/api/app 三元信息 |
isCheckingUpdate / remoteVersion / updateChannel / updateSource |
settings.tsx:70-74 | 更新检查状态、远端版本状态、通道与来源 |
showUpdateDialog / showPreviewWarning / showGithubWarning / pendingChannel / pendingSource |
settings.tsx:75-81 | 对话框可见性与待确认的通道/来源 |
isLangDropdownOpen / langDropdownPos + 三个 ref |
settings.tsx:46-54 | 语言下拉的开关、portal 定位与 DOM 引用 |
loadConfig(effect 内部 async) |
settings.tsx:89-142 | Promise.all 读 9 项;随后动态 import 账号、初始化更新通道/来源 |
| 初始化 effect | settings.tsx:88-156 | 调 loadConfig,完成后 fetchRemoteVersion();订阅远端版本并清理 |
| 下拉关闭 effect | settings.tsx:158-172 | 菜单/按钮外点击或任意滚动(捕获)时关闭语言下拉 |
handleLanguageChange |
settings.tsx:174-177 | i18n.changeLanguage(langKey) 并关闭下拉 |
handleRefreshOnSwitchChange |
settings.tsx:179-182 | state + setConfig("refresh_on_account_switch") |
handleLazyLoadChange |
settings.tsx:184-191 | 调 roleDetailService.setLazyLoadEnabled,失败回滚 state |
handleWikiDetailPreloadChange |
settings.tsx:193-196 | state + setConfig("wiki_detail_preload") |
handleCloseActionChange |
settings.tsx:198-201 | state + setConfig("close_action") |
handleTrayUserChange |
settings.tsx:203-207 | 写 state + setConfig("tray_user_role_id") → setTrayUser(value)(@/utils/trayService:invoke("set_tray_user") + refreshTrayUserData(),本文件不再直接查 char_detail 或拼 userInfo) |
handleDevModeToggle |
settings.tsx:209-219 | 开启弹警告;关闭直接写 developer_mode=false 并派发 developerModeChange 事件 |
confirmDevMode |
settings.tsx:221-228 | 写 developer_mode=true、关警告、派发 developerModeChange |
handleCheckUpdate |
settings.tsx:230-262 | fetchRemoteVersion() 后按 hasUpdate/error/正常三路 pushGlobalAlert |
handleChannelChange |
settings.tsx:264-280 | stable→preview 先挂起 pendingChannel 并弹警告,否则直接 setChannel |
handleSourceChange |
settings.tsx:282-298 | mirror→github 先挂起 pendingSource 并弹警告,否则直接 setSource |
confirmPreviewChannel |
settings.tsx:300-312 | 确认后执行 setChannel(pendingChannel) 并清空挂起值 |
confirmGithubSource |
settings.tsx:314-326 | 确认后执行 setSource(pendingSource) 并清空挂起值 |
openUpdateDialog effect |
settings.tsx:328-333 | 监听全局 openUpdateDialog 事件打开更新对话框 |
platformInfo |
settings.tsx:335-341 | UA 推断平台字符串(Windows x64 / macOS / Linux / navigator.platform) |
| 设置项 | 存储位置(配置键/state) | 控件 | 默认值 | 行号 |
|---|---|---|---|---|
| 界面语言 | i18next 运行时 i18n.language(本文件未写入配置;app.language 由 src/main.tsx 读取、src/components/language-switch.tsx 写入) |
自定义下拉:GlassButton + createPortal 浮层菜单 |
en(i18n.ts 初始值) |
state 46-54;选项 83-86;handler 174-177;UI 420-521 |
| 切换账户时刷新数据 | 配置键 refresh_on_account_switch(state refreshOnSwitch) |
GlassSwitch |
false |
state 55;读 102/112;写 181;UI 525-549 |
| 懒加载模式 | 后端持久状态,经 roleDetailService:invoke is_lazy_load_enabled / set_lazy_load_enabled(不走 configService) |
GlassSwitch |
true(读取失败时后端兜底 true) |
state 56;读 103/113;写 187;UI 553-575 |
| 启动时预加载 Wiki 详情 | 配置键 wiki_detail_preload(state wikiDetailPreload) |
GlassSwitch |
false |
state 57;读 105/114;写 195;UI 579-603 |
| 关闭窗口行为 | 配置键 close_action(state closeAction,取值 close/minimize_to_tray/ask);托盘不可用(isTrayAvailable() 为 false)时选项里不出现 minimize_to_tray,并在描述下显示「无系统托盘」提示 |
文字按钮组(2 或 3 段) | ask |
state 59;读 110/120;写 199-202;UI 612-651 |
| 托盘显示角色 | 配置键 tray_user_role_id;invoke set_tray_user、update_tray_user_data 经 @/utils/trayService 的 setTrayUser 触发(state trayUserRoleId) |
GlassSelect(选项来自动态 import 的 getAccounts() 账号昵称) |
空串(未选择) | state 59;读 110/120;写 203-207;UI 652-672 |
| 开发者模式 | 配置键 developer_mode + 窗口事件 developerModeChange(state developerMode) |
GlassSwitch + GlassAlertDialog 二次确认 |
false |
state 64-65;读 104/115;写 214/223;UI 851-858;对话框 1428-1460 |
| 更新通道 | 配置键 update_channel(由 updateService.getChannel/setChannel 读写;state updateChannel) |
双卡片单选按钮(stable / preview) | stable |
state 73;读 140;写 264-280、300-312;UI 922-992;警告框 1462-1528 |
| 更新源 | 配置键 update_source(由 updateService.getSource/setSource 读写;state updateSource) |
双卡片单选按钮(github / mirror) | github |
state 74;读 141;写 282-298、314-326;UI 996-1066;警告框 1530-1601 |
| 代理设置(整卡委托) | 子组件 NetworkSettings:配置键 proxy_config(经 proxyService 的 get_proxy_settings / save_proxy_settings / clear_proxy_settings 读写),本文件不读写 |
子组件 NetworkSettings(开关 + 协议单选组 + 字段表单 + 系统代理读取 + 连通性测试) |
{enabled:false,type:"http",host:"",port:8080} |
677-704(渲染 703) |
| 游戏启动设置(整卡委托) | 子组件内:@/stores/launcherMode(zustand)与 localStorage 键(如 CANCEL_BEHAVIOR_KEY、VERIFY_THREADS_KEY),本文件不读写 |
子组件 GameLaunchSettings |
见子组件 | 706-738(渲染 736) |
| 外观设置(整卡委托) | 子组件内配置键:theme_mode、theme_color、theme_custom_colors、bg_image_path、bg_image_opacity、bg_blur |
子组件 AppearanceSettings |
见子组件 | 741-761(渲染 760) |
备注:
- invoke 命令名(本文件直接调用):无。托盘相关的
set_tray_user/update_tray_user_data已随数据组装逻辑迁到@/utils/trayService(见 utils_services_a.md 的trayService一节)。 - invoke 命令名(经服务间接触发):
set_tray_user、update_tray_user_data、query_role_data(setTrayUser→refreshTrayUserData→roleDataService.queryData)、is_lazy_load_enabled/set_lazy_load_enabled(roleDetailService)、fetch_url(updateService 内部拉取更新元数据);代理相关命令全部由NetworkSettings经proxyService触发(见components_settings_panels.md)。 - 配置键:
refresh_on_account_switch、wiki_detail_preload、close_action、tray_user_role_id、developer_mode(本文件直接读写);update_channel、update_source(经 updateService 间接读写);委托组件另用proxy_config、app.language、theme_mode、theme_color、theme_custom_colors、bg_image_path、bg_image_opacity、bg_blur。 - i18n key 前缀:
settings.title、common.managePreferences、settings.general.*(含language、close_action*、tray_user*、title)、settings.network.*(title/desc,网络卡标题)、settings.game_launch.title、settings.appearance.title、settings.system_resource.title、settings.todo.title、settings.developer.*(title/enable/enable_desc/warning_*)、settings.update_channel.*、settings.update_source.*、settings.update.*(app_version/tauri_version/platform/latest_version/release_date/license*/open_source_credits/special_thanks/xel_launcher_desc/better_endfield_desc)。 - 窗口事件:
openUpdateDialog(监听,settings.tsx:331)、developerModeChange(派发两次,settings.tsx:216、:226,detail 为{enabled:boolean};@/utils/logSettings监听后同步前后端日志级别,关闭时回到 INFO)。 - DOM 锚点 id:
settings-general、settings-language、settings-refresh-on-switch、settings-lazy-load、settings-wiki-detail-preload、settings-close-action、settings-tray-user、settings-network、settings-game-launch、settings-appearance、settings-system-resource、settings-todo、settings-developer、settings-about。 - 非持久化展示项:远端版本徽标、版本四宫格、发布日期、identifier、License、20 条开源致谢(内联数组)、2 条特别鸣谢(Xel-Launcher / Better-Endfield,内联数组,说明文案走 i18n)、GitHub/License 外链、「检查更新」与「更新到 vX」按钮。
文件职责:应用「开发者」路由页(/developer)。自上而下提供三块能力:图片缓存调优(模式/容量/统计/逐项浏览)、网络请求录制与会话回放(启动停止、分页读取、请求/响应详情)、前后端合并日志查看器(来源与级别过滤、日志级别调整、轮询刷新)。
导出:export default function DeveloperPage()(developer.tsx:142),仅此一个导出;其余接口/常量/辅助函数均为模块内私有。
主要依赖:react-i18next、@/components/ui/glass(GlassButton/GlassCard/GlassLabel/GlassMeter/GlassNumberField/GlassSelect/GlassSkeleton/GlassSwitch/GlassTable)、react(useState/useEffect/useRef/useMemo/useCallback)、@/utils/configService(getConfig/setConfig)、@/utils/imageCacheManager(cacheManager、CacheMode)、@tauri-apps/plugin-opener(revealItemInDir)、@/utils/logger(logger、LogEntry、LogLevel、parseLogLevel、logError)、@/utils/logSettings(setLogLevel)、@tauri-apps/api/core(invoke)、morphicons/react(MorphIcon)、lucide(FileText、Settings)。
| 区间 | 内容 |
|---|---|
| developer.tsx:1-20 | import 区 |
| developer.tsx:22-65 | 录制相关类型:CaptureBody、CaptureEntry、CaptureSession、CaptureStatusInfo、CapturePage |
| developer.tsx:67-68 | 常量 CAPTURE_PAGE_SIZE = 100、MAX_BODY_VIEW = 50000 |
| developer.tsx:70-95 | 模块级辅助:formatBytes、formatBodyText(JSON 美化 + 截断 + base64 标注) |
| developer.tsx:97-130 | 日志级别样式映射:LOG_LEVEL_NAMES、LEVEL_BADGE_BG、LEVEL_TEXT、LEVEL_BG_SOFT、LEVEL_BORDER |
| developer.tsx:132-136 | MAX_VISIBLE_LOGS = 500、MAX_MESSAGE_LENGTH = 300、类型 LogFilter / LogLevelFilter |
| developer.tsx:142-171 | DeveloperPage state:缓存、日志过滤与级别、录制会话与详情、cacheEntries useMemo |
| developer.tsx:169-283 | 录制相关 handler:refreshCapture、loadCaptureEntries、handleCaptureStart/Stop、handleViewSession、handleCloseSession、handleDeleteSession、handleOpenCaptureDir、handleAutoStartChange |
| developer.tsx:285-296 | 两个录制 effect:初始化(刷新 + 读 capture_autostart)、录制中每 2s 轮询状态 |
| developer.tsx:298-326 | 缓存与日志级别配置加载 effect:读 cache_mode/cache_max_entries/cache_max_size_mb/log_level 并 cacheManager.configure |
| developer.tsx:328-371 | fetchBackendLogs(invoke 拉后端日志、按 timestamp 去重、超量裁剪)与 3s 轮询 effect |
| developer.tsx:373-383 | 日志容器贴近底部时自动滚底 effect |
| developer.tsx:385-403 | filteredLogs useMemo:合并前后端 → 按来源/级别过滤 → 按时间排序 → 取末 500 条 |
| developer.tsx:405-449 | 缓存与日志操作:handleCacheModeChange、handleCacheMaxEntriesChange、handleCacheMaxSizeMBChange、refreshCacheStats、cleanInactive、clearLogs、handleLogLevelChange |
| developer.tsx:451-456 | truncateMessage:超 300 字符截断加省略号 |
| developer.tsx:458-465 | 页头(settings.developer.title + settings.developer.enable_desc) |
| developer.tsx:467-663 | 图片缓存卡 #developer-cache:骨架屏;模式开关;manual 模式下条数/容量输入;统计/清理;缓存明细表折叠 |
| developer.tsx:665-1055 | 网络录制卡 #developer-capture:标题与开始/停止/目录/刷新按钮;功能说明;启动自动录制开关;错误提示;状态条;会话表;会话内条目表;单条详情面板 |
| developer.tsx:1056-1185 | 日志卡 #developer-logs:标题与导出诊断/刷新/清除;日志级别选择 1084-1104;来源 tabs 1106-1130;级别过滤 chips 1132-1155;日志列表 1157-1207 |
| 符号 | 位置 | 说明 |
|---|---|---|
CaptureBody(interface) |
developer.tsx:22-27 | 请求/响应体:encoding/size/truncated/data |
CaptureEntry(interface) |
developer.tsx:29-42 | 单条请求记录:index、timestamp、method、url、请求头/体、status、响应头/体、duration_ms、error、note |
CaptureSession(interface) |
developer.tsx:44-52 | 录制会话:id、起止时间、status、count、size_bytes、path |
CaptureStatusInfo(interface) |
developer.tsx:54-60 | 录制状态:recording、session_id、started_at、count、size_bytes |
CapturePage(interface) |
developer.tsx:62-65 | 分页结果:total + entries |
CAPTURE_PAGE_SIZE |
developer.tsx:67 | 100,每页读取条数 |
MAX_BODY_VIEW |
developer.tsx:68 | 50000,详情面板正文字节上限 |
formatBytes |
developer.tsx:70-74 | B / KB / MB 三档格式化 |
formatBodyText |
developer.tsx:76-95 | note 兜底、base64 标注为 [binary]、JSON pretty-print、超长截断与 truncated 标注 |
LOG_LEVEL_NAMES |
developer.tsx:97-102 | LogLevel → 显示名 DEBUG/INFO/WARN/ERROR |
LEVEL_BADGE_BG |
developer.tsx:104-109 | 级别徽标底色(bg-secondary/success/warning/danger) |
LEVEL_TEXT |
developer.tsx:111-116 | 级别文字色 |
LEVEL_BG_SOFT |
developer.tsx:118-123 | 级别浅底色(/15 透明度) |
LEVEL_BORDER |
developer.tsx:125-130 | 级别过滤 chip 边框色 |
MAX_VISIBLE_LOGS / MAX_MESSAGE_LENGTH |
developer.tsx:132-133 | 500(列表上限)/ 300(单条消息截断长度) |
LogFilter / LogLevelFilter(type) |
developer.tsx:135-136 | "all" | "frontend" | "backend";LogLevel | "all" |
DeveloperPage(default) |
developer.tsx:142 | 页面根组件 |
logLevel / setLogLevelState |
developer.tsx:154 | 当前日志级别(开发者模式内可调,默认 DEBUG) |
cacheEntries(useMemo) |
developer.tsx:161 | 依赖 cacheStats 重算 cacheManager.getEntries() |
refreshCapture |
developer.tsx:169-180 | 并行 capture_status + capture_list_sessions,失败静默(非 Tauri 环境) |
loadCaptureEntries |
developer.tsx:182-200 | capture_read_entries(offset/limit=100),按 replace 决定覆盖或追加,失败写 captureError |
handleCaptureStart |
developer.tsx:202-214 | capture_start 后刷新状态 |
handleCaptureStop |
developer.tsx:216-231 | capture_stop 后刷新状态;若正在浏览该会话则重载第一页 |
handleViewSession |
developer.tsx:233-239 | 进入会话浏览,清空后加载首页 |
handleCloseSession |
developer.tsx:241-246 | 退出会话浏览并清空条目/选中项 |
handleDeleteSession |
developer.tsx:248-260 | capture_delete_session;删除的是当前会话则先关闭,再刷新 |
handleOpenCaptureDir |
developer.tsx:262-270 | capture_dir 取目录后 revealItemInDir 在文件管理器中显示 |
handleAutoStartChange |
developer.tsx:272-280 | 写配置 capture_autostart,失败回滚入 captureError |
| 初始化/轮询 effect | developer.tsx:282-293 | 挂载刷新录制状态并读 capture_autostart;recording 时每 2000ms 轮询 |
| 缓存与日志级别配置加载 effect | developer.tsx:298-326 | 读四键(回退 smart/200/100/DEBUG)→ cacheManager.configure → 刷新统计 |
fetchBackendLogs |
developer.tsx:328-365 | get_backend_logs → level 字符串映射 → 按 timestamp 去重累入 backendLogsRef,超过 MAX_VISIBLE_LOGS*2 裁剪并重建去重集合 → 递增 displayKey 触发重渲染 |
| 后端日志轮询 effect | developer.tsx:367-371 | 立即拉取一次,之后每 3000ms |
| 自动滚底 effect | developer.tsx:373-383 | 距底部 <80px 时 requestAnimationFrame 滚到底 |
filteredLogs(useMemo) |
developer.tsx:385-403 | 前端 logger.getLogs() + backendLogsRef 合并 → 来源/级别过滤 → timestamp 升序 → 末 500 条 |
handleCacheModeChange |
developer.tsx:405-410 | cacheManager.configure({mode}) + 写 cache_mode + 刷新统计 |
handleCacheMaxEntriesChange |
developer.tsx:412-418 | 夹取 10–5000 → configure + 写 cache_max_entries |
handleCacheMaxSizeMBChange |
developer.tsx:420-426 | 夹取 10–10000 → configure + 写 cache_max_size_mb |
refreshCacheStats |
developer.tsx:428-430 | 重取 cacheManager.getStats() |
cleanInactive |
developer.tsx:432-435 | cacheManager.evictInactive() 后刷新统计 |
clearLogs |
developer.tsx:437-442 | 清前端日志 + 空置后端缓存与去重集合 + 递增 displayKey |
handleLogLevelChange |
developer.tsx:444-449 | parseLogLevel → 本地 state → logSettings.setLogLevel(持久化 log_level 并同步前后端)→ 递增 displayKey |
handleExportDiagnostics |
developer.tsx:451-478 | exportDiagnostics("Developer log export") → revealDiagnostics(path) → 成功/失败 pushGlobalAlert |
truncateMessage |
developer.tsx:480-485 | 消息超 300 字符截断 |
备注:
- invoke 命令名(全部):
capture_status、capture_list_sessions、capture_read_entries(参数id/offset/limit)、capture_start、capture_stop、capture_delete_session(参数id)、capture_dir、get_backend_logs;日志级别变更经@/utils/logSettings间接 invokeset_log_level。 - 诊断导出:日志卡「导出诊断日志」经
@/utils/diagnostics(export_diagnostics)打包前后端日志、崩溃报告与系统信息,成功后用revealItemInDir定位 zip;失败通过pushGlobalAlert提示。 - 配置键:
capture_autostart、cache_mode、cache_max_entries、cache_max_size_mb、log_level。缓存参数同步下发给cacheManager.configure,改完立即刷新getStats();log_level经logSettings.setLogLevel持久化并同步到后端set_log_level。 - i18n key 前缀:
settings.cache.*(title/mode/mode_smart_desc/mode_manual_desc/max_entries*/max_size_mb*/current_cache/clean_inactive/entries_count/size_usage/cached_resources/filename/size/status/status_pinned/status_active/status_inactive/open_file_location/no_cached)、settings.logs.title、settings.developer.title、settings.developer.enable_desc、common.refresh。 - 未走 i18n 的文案:网络录制整卡(标题、按钮、说明、表头、详情面板,:650-1016)与日志卡的清除按钮、tabs、级别 chips、空态(:1031-1131)均使用
i18n.language === "zh"三元硬编码中英双语,未接入翻译资源。 - DOM 锚点 id:
developer-cache、developer-capture、developer-logs。 - 轮询周期:录制状态 2000ms(仅
recording时)、后端日志 3000ms;常量 100(分页)、50000(正文上限)、500(日志条数)、300(消息截断)。 - 外部交互:
revealItemInDir用于打开缓存文件(:618)与录制会话文件(:826)所在目录;缓存明细行点击、会话行的浏览/目录/删除、条目行选中展开详情均为内联事件。