MooTool Next Flutter 逐工具功能规格
日期:2026-09-08。参考
next/Electron 1.1.4 当前源码。
所有条目都是待开发要求;没有任何一项在本文中标记为已实现。
工具入口、布局关系与实际操作优先对齐;Flutter 的现代化视觉按 主指南 执行。
1. 入口、顺序与计数
保留以下 ID 和顺序:26 个入口 = 1 个首页 + 25 个工具。分组顺序为 text、dev、network、encode、daily、system。classic 模式可以隐藏内置分组标题,不能改变实际工具次序。
| 编号 | Tool ID | 名称 | 分组 | 源码入口(相对 next/src/features/) |
|---|---|---|---|---|
| F00 | mootool |
首页 | home | home/HomePage.tsx |
| F01 | quickNote |
随手记 | text | quickNote/QuickNoteTool.tsx |
| F02 | textDiff |
文本对比 | text | diff/TextDiffTool.tsx |
| F03 | reformat |
格式化 | text | reformat/ReformatTool.tsx |
| F04 | json |
JSON | dev | json/JsonTool.tsx |
| F05 | java |
代码运行 | dev | runtime/RuntimeTool.tsx |
| F06 | ymlProperties |
配置文件转换 | dev | config/ConfigConvertTool.tsx |
| F07 | protobuf |
Protobuf | dev | protobuf/ProtobufTool.tsx |
| F08 | variables |
环境变量 | dev | variables/VariablesTool.tsx |
| F09 | http |
HTTP 请求 | network | http/HttpTool.tsx |
| F10 | host |
Host | network | host/HostTool.tsx |
| F11 | net |
网络/IP | network | net/NetTool.tsx |
| F12 | uaParse |
UA 分析 | network | ua/UaParseTool.tsx |
| F13 | encode |
编码解码 | encode | encode/EncodeTool.tsx |
| F14 | crypto |
加解密/随机 | encode | crypto/CryptoTool.tsx |
| F15 | regex |
正则 | encode | regex/RegexTool.tsx |
| F16 | cron |
Cron | encode | cron/CronTool.tsx |
| F17 | qrCode |
二维码 | encode | qrcode/QrCodeTool.tsx |
| F18 | timeConvert |
时间转换 | daily | time/TimeConvertTool.tsx |
| F19 | messageBoard |
留言板 | daily | messageBoard/MessageBoardTool.tsx |
| F20 | translation |
翻译 | daily | translation/TranslationTool.tsx |
| F21 | calculator |
计算器 | daily | calculator/CalculatorTool.tsx |
| F22 | colorBoard |
调色板 | daily | color/ColorBoardTool.tsx |
| F23 | image |
图片助手 | daily | image/ImageTool.tsx |
| F24 | pdf |
daily | pdf/PdfTool.tsx |
|
| F25 | hardware |
系统信息 | system | hardware/HardwareTool.tsx |
当前 Electron 注册表中,mootool/hardware/messageBoard 不声明通用历史;其余入口声明支持历史。通用收藏标志仅为 regex/cron/colorBoard;HTTP 集合、翻译单词本、文档库等属于各自业务实体,不要混成同一种收藏。
2. 所有工具的共同要求
每个工具必须具备适用的空态、加载态、成功态、输入错误、IO/网络错误、取消、无权限或缺少运行环境状态。纯本地同步运算不强行添加假进度条。
切页保留输入、输出、选项、Tab、选区和滚动;多个工具输入不得互相覆盖。有效结果支持选择和复制;涉及文件时使用真实文件,失败时保留输入及上次有效结果并清楚标记。
每个页面实施时都读取对应 *Tools.ts、*.test.ts、相关 main service 和 Electron E2E,补充按钮/Tab/选项的细粒度清单。以下规格定义必须覆盖的范围,不代表可跳过源码中未逐字枚举的参数。
图标和间距可以现代化,功能方向、Tab 顺序、主要操作位置及默认含义尽量不变。每一项开发状态按“未开始 / 开发中 / 待验收 / 已验收 / 明确差异”记录在 验收文档。
3. 逐项规格
F00 首页
- 布局:居中限制内容宽度,品牌/产品版本在前,其后为简介、贡献者、赞赏、源码、帮助和其他作品;允许纵向滚动。
- 使用本产品版本,不显示 Electron 的 1.1.4,也不把 MooTool Next Flutter 写成另一产品更新。
- 官网、GitHub、Gitee、Issues、贡献者及其他作品通过明确的外部链接打开。
- 资源复制进 Flutter assets 并记录来源;不在运行时从
../next加载赞赏图。 - 验收:离线可显示本地内容;点击链接有真实去向;三语言、窄窗口、深色下内容完整。
F01 随手记
布局:左文档库,中间编辑/预览,右侧可折叠快速替换;顶部紧凑工具栏,底部文件与保存状态。
- 文档库顺序:搜索 → 正文检索/排序 → 新建文件/文件夹/更多/打开目录 → 树 → 路径/状态。支持嵌套、创建、重命名、复制、移动、删除、拖放、展开/折叠及选中恢复。
- 标题/路径/正文搜索;名称、创建、修改排序;
.gitignore过滤和树默认展开策略。正文搜索不逐帧同步遍历全目录。 - 按文档保存语法、字体、字号、颜色、换行及元数据;读取 Electron
quickNoteVaultRepository.ts的 frontmatter 语义,不把元数据展示成正文。 - 编辑 / 分栏 / 预览三模式;Markdown 标题、列表、表格、任务列表、代码块、链接和图片。预览不执行原始脚本。
- 撤销/重做、查找替换、字体/语法、列表操作、复制/导入/导出、保存、统计;以源码工具栏顺序建立控件清单。
- 列编辑必做:矩形选择、多行输入/删除/粘贴、undo/redo;混合中文、emoji、tab 的列语义必须有测试和说明。
- 快速替换优先作用于选区,否则全文;一次操作一次可撤销事务。共 24 项,见下表。
- 自动保存不重置选区;切笔记先完成保存或明确保存失败;视图模式切换保持 undo。
- 插入本地图片、图片剪贴板粘贴、外部图片文件拖入,写入自有附件并插入相对 Markdown 引用;连续粘贴保持顺序,不要求用户先手动换行;普通文本粘贴不能被拦截为图片。
- 附件读取、导出、孤立附件清理;有引用的附件不删除。处理失败不能留下失效引用或覆盖原附件。
- Git 和 watcher 行为遵循主指南。重启恢复当前文档、展开树、布局、搜索和文本,undo 不要求跨重启。
| 快速替换 ID | 语义 |
|---|---|
trim |
每行去首尾空白 |
removeBlankLines |
移除空白行 |
removeTabs |
移除 tab |
scientificToNormal |
科学计数转普通数字 |
normalToScientific |
普通数字转科学计数 |
thousandsToNormal |
移除千分位 |
normalToThousands |
添加千分位 |
underscoreToCamel |
下划线转驼峰 |
camelToUnderscore |
驼峰转下划线 |
uppercase / lowercase |
大小写转换 |
linesToComma |
多行转逗号分隔 |
linesToSingleQuoted / linesToDoubleQuoted |
多行转引号包裹列表 |
commaToLines / tabsToLines |
分隔符转行 |
clearNewlines |
移除换行 |
deduplicateLines / deduplicateWithCount |
去重 / 去重附次数 |
escape / unescape |
字符串转义 / 还原 |
reverseLines |
行序反转 |
sortAscending / sortDescending |
行升序 / 降序 |
验收重点:列编辑、分栏预览后仍可撤销、双击选词后自动保存不丢选区、连续图片粘贴、附件重命名/移动、5 MiB 文本及冲突保护。
F02 文本对比
- 布局:上方模式与选项,左右可编辑文本区;Unified 模式按 Electron 保留相应双栏与统一差异区。
- 行级与字符级差异、三种高亮模式、忽略空白、同步滚动、上/下差异导航、差异数量、历史。
- 保留输入、文件导入、复制/清空等对应操作;比较结果必须来自实际 Diff,不能只按同行字符串判断。
- 大文本异步计算;连续编辑后只应用最新 revision 的结果。
- Unicode、CRLF/LF、末尾换行、插入/删除连续行、重复行都有 fixtures。
- 验收:跳转定位真实差异,双栏同步滚动稳定;无差异与空输入可区分;统一差异可复制;切换模式不丢输入。
F03 格式化
- 文本 / 文件 Tab,Nginx、Java、XML、HTML 类型,以及缩进选项;按当前 UI 实际可选值建立快照。
- 保留源输入、执行、结果布局及快捷格式化;支持打开文件、结果复制/导出、历史。
- Nginx 需识别引号、注释、转义和花括号;XML/HTML 保持文本节点语义;Java 使用真正语法处理器。
- 不能用“遇到花括号换行”覆盖所有语言,也不能调用未声明的系统 Node 来承接所有格式化。
- 验收:复杂字符串/注释不会被拆坏;格式化幂等;语法错误保留原文;文件原件默认不覆盖。
F04 JSON
布局:左 JSON Vault,中主编辑器,右格式/转换/JSONPath 检查器;窄窗口右侧按需覆盖。
主工具栏顺序以 JsonToolbar.tsx 为准:格式化 → 压缩 → 字体 → 换行 → 复制 → 查找 → 导入 → 导出 → 历史 → 更多工具 → 清空。布局空白可为拖动区,但不能吞掉按钮点击或文本选择。
必须覆盖:
- 校验、2/4 空格格式化、压缩、实时错误及结构摘要。
- 递归 Key 排序、忽略大小写选项、解析前可检测重复 Key;只用 jsonDecode 后 Map 检测不可能找回重复项。
- JSON ↔ XML、JSON ↔ JavaBean,类名、嵌套类、数组和类型推断;保留实际方向和结果弹窗行为。
- Key/Value 互换、JSON 字符串转义/还原、普通字符串转义/反转义,区分操作语义。
- JSONPath 输入、查询结果、可视化树选择、路径/值预览和双击行为。
- 查找替换(大小写、全词、正则、计数、前后导航),字体和换行。
- 文件导入/导出、操作历史、复制、清空可撤销。
- Vault CRUD、文件夹、重命名、复制、移动、拖放、排序、忽略文件、展开状态、当前文件恢复和外部监视。
- Git 全流程,包括冲突处理、丢弃、更改操作继续/中止及自动提交。
- 大 JSON,输入/格式化/查询失败不会清空正文。
语义要求:
- JSONPath 的递归、数组索引/切片、联合、筛选及转义路径按实际库与 fixtures 对齐;仅支持
$.a.b的实现不能称完整。 - 不执行任意嵌入的 JS 表达式;将支持的 filter 语法显式解析,对超出范围返回可理解错误。
- 大整数、浮点、重复 Key 的保真度和 Electron 差异需明确;对字面量保留可使用 token/AST,不能先转换 double 再宣称无损。
- JavaBean 转换不是 Java 编译器;继承、泛型、注解等支持范围按现有测试冻结,未知语法不能凭正则随意吞掉。
验收样例:含中文/emoji/嵌套数组/重复 Key 的输入,排序及压缩往返,JSONPath 真实筛选,错误行定位,Vault 移动后重启,分离/收回保存同一会话。
F05 代码运行
- 序列化 Tool ID 仍为
java,显示名是“代码运行”,不能误删 Python/Node。 - 主 Tab:Java/Groovy、Python、Node.js;第一项内部选择 Java 或 Groovy。
- 每运行时独立代码草稿、格式化、命令参数、工作目录和路径设置;本机探测版本,缺失时引导配置。
- 上方编辑及运行/停止,下方 stdout/stderr、退出码、耗时和命令摘要;支持历史恢复。
- 受控子进程传递参数数组,流式输出;保留源上限约 1 MiB、输出上限约 2 MiB 的基线意识,精确数值由源码核对并在 Flutter 常量统一。
- 停止须终止整个进程树;超时、非零退出、启动失败、中文路径和临时文件清理都要覆盖。
- 验收:实际运行
40 + 2结果;参数/目录影响真实进程;无限循环可停止;切工具和分离窗口不导致重复运行。
F06 配置文件转换
- Properties ↔ YAML,以及 YAML 校验/格式化;保留左输入、中操作、右输出关系。
- 支持点路径、数组路径、嵌套、字符串/布尔/数字、空值和转义;键冲突不能静默丢失。
- 读取
configTools.ts对默认值、排序和输出风格建立 fixtures;不声称所有注释、锚点和复杂 YAML 类型无损往返。 - 未支持语法显示具体边界,不用空对象替代。
- 验收:嵌套列表/特殊字符可转换,冲突有明确结果;导入、复制、历史和格式化幂等通过。
F07 Protobuf
- Tab 顺序:JSON/Binary、Wire、Hex/Base64。
- 输入 proto 定义和 message 名;运行时动态解析;JSON ↔ bytes,Hex/Base64 输出切换,proto 格式化及历史。
- Wire 展示字段号、wire type 和真实值;varint、64-bit、length-delimited、32-bit、异常长度和越界处理。
- 兼容样本包含嵌套、repeated、enum、map、oneof、64 位数、bytes 和缺省字段;按 Electron 实际支持情况定义要求。
- Electron 输出转换会设置 defaults、longs 为 String、enums 为 String、bytes 为 String;Flutter 必须明确对应映射。
protobuf生成式 Dart 运行库不能单独满足动态定义;需要动态解析器/descriptor 解释器或随本产品打包的可验证 helper。- 验收:用户临时粘贴的新 message,无需重编译应用即可真实往返;未识别 schema/字段类型清楚报错;恶意/截断二进制不崩溃。
F08 环境变量
- 用户/系统变量的新增、编辑、删除;当前进程和本产品运行属性的只读查看;保留搜索、刷新、复制、完整导出。
- Electron 运行属性在 Flutter 中替换为 Flutter/Dart/OS 运行信息,属于技术路线等价差异。
- OS 持久环境在平台上有不同实现:不能用修改当前 Dart Map 冒充系统修改。
- 写入前显示目标作用域和变更,所需提权通过受限服务;说明新进程何时生效,不承诺已运行其他程序立即更新。
- Unix 若实现受支持的环境文件编辑,必须保留其他配置并记录支持范围,不能盲目重写 shell 配置。
- 验收:在隔离用户/虚拟机实际新增→新进程读取→编辑→删除;普通运行信息刷新不触发写入。
F09 HTTP 请求
布局:左请求集合;右顶部 Method + URL + 发送/取消;请求编辑在上,响应区在下,均可调整高度。
- 请求 Tab 顺序 Params、Headers、Cookies、Body;Body 支持 Electron 已有的 raw/text、JSON、URL 编码表单等实际类型,按源码列明。
- 参数表开关、新增、删除、重复键、空值及顺序;不能用 Map 吞掉重复 Query。
- URL 内已有参数与表格参数合并;Header 名大小写和重复字段按 HTTP 语义处理。
- 超时、重定向、代理/认证、取消;响应 Body、Headers、Cookies 三 Tab,状态码、耗时、大小、复制和导出。
- 响应大小限制约 10 MiB,以源代码核实的字节值实现,解压后也受限;二进制不强行 UTF-8 乱码展示。
- 集合新建、搜索、保存/覆盖/删除;保存所有请求字段和需要的响应快照;历史能回填。
- cURL 导入/导出仅解析支持的参数,不能执行 cURL 文本;不支持选项给出说明,不能悄悄忽略请求体/认证。
- 请求归属 session;切页后可继续/取消,旧响应不覆盖新请求编辑。
- 验收:本地测试服务器确认 method、query 重复顺序、headers、cookies、body、重定向和取消;重启恢复集合;失败不显示 200 假结果。
F10 Host
- 左方案列表,右编辑工具栏和 hosts 文本;系统 hosts 使用独立查看入口。
- 方案新增、复制/重命名、保存、删除、导入/导出;查找替换,系统读取、应用与 DNS 刷新。
- 区分“保存方案”和“应用到系统”;系统改动前显示差异并保存可恢复副本。
- 校验 NUL、格式、编码/换行;普通写入和提权失败清楚提示,不要求长期以管理员身份运行主应用。
- 方案存储属于 Flutter,系统 hosts 是全局资源,可能影响所有应用;不会因应用关闭而自动替换回另一产品方案。
- 验收:临时文件模拟全部错误;真实提权/恢复在隔离系统执行;拒绝授权不标记应用成功。
F11 网络/IP
- 左命令输出、右功能区;IPv4 ↔ Long、ping、DNS、地址解析、WHOIS、本机地址。
- 输出可选择复制;命令流式显示并可停止。主机名、IP、参数校验后以固定命令和 argv 执行。
- IPv4 0/最大值、非法段和溢出;IPv6 作为本机地址/DNS 结果保留,不能放进 IPv4 数值转换。
- WHOIS 来源不可用和未安装系统命令时显示实际原因;不返回示例 IP 充数。
- 验收:localhost、本机地址、受控 DNS 响应及 ping 停止;无网/超时与空结果明确区分。
F12 UA 分析
- 输入、样例/预设、解析动作与结构化结果;浏览器、引擎、OS、设备、移动端/Bot 分类、历史。
- 使用可维护的数据和解析规则;不能只判断是否包含 Chrome。
- 未知字段显示未知,区分解析失败;可复制原文及结果。
- 验收:桌面 Chrome/Safari/Firefox、Android/iPhone、bot、未知及空字符串;允许不同库的名称归一差异但记录原因。
F13 编码解码
- 保留 Unicode、URL(UTF-8/GB2312)、UTF-8 Hex、ASCII 十进制/十六进制转换的顺序和输入/操作/输出布局。
- Base64/Base32 在 Crypto 也有独立入口,不因本工具名叫编码就挪走原位置。
- 明确 URL 百分号、加号、空格和字符集语义;UTF-8 bytes 与 Unicode code point 不混用。
- 输入中非法 Hex、截断字节、非法 Unicode escape 应报可理解错误并保留原文。
- 验收:中文、emoji、换行、百分号、空格和空字符串往返;GB2312 非可表示字符不静默替换为问号。
F14 加解密/随机
- Tab 顺序:对称、非对称、摘要、Base64/Base32、随机。
- 对称 AES/DES/SM4;非对称 RSA/SM2,包括密钥生成、加解密、签名/验签,RSA 私钥操作/公钥还原等已有入口。
- 摘要 MD5、SHA-1、SHA-256、SHA-384、SHA-512、SM3;文本和文件摘要。
- 随机 UUID、数字、字符串、密码,长度选项和历史;安全随机源,不能使用固定种子作为正式实现。
- 兼容必须落到字节级:当前对称路径采用 ECB + PKCS#7、Hex 密文,key 经字符级截断/补零再 UTF-8 编码;不能换成默认 CBC 就说 AES 已对齐。
- 源实现 key 字符数与 UTF-8 字节数可能产生边界差异;非 ASCII/过长 key 用样本判断,Flutter 可严格校验并记录差异,不能假装所有输入都兼容。
- RSA DER/Base64、PKCS#1 v1.5 加密、SHA-256 签名,SM2 C1C3C2/DER 签名等按
cryptoTools.ts逐项冻结。 - 工具保留兼容算法并清楚显示模式;不要把此兼容路径用于产品自身凭据加密。增加其他模式时作为明确新选项。
- 验收:固定样本跨实现解密/验签;错误密钥、空内容、非法编码、大文件取消;不能仅测试“Flutter 自己加密自己解密”。
F15 正则
- 表达式、flags、测试文本、匹配/分组结果;常用模式和收藏/历史入口。
- 21 个现有常用模式按源码清单复制语义;名称、样例和说明三语言。
- 使用 Dart/所选引擎真实语法;显式说明与 JS/Java 引擎差异,支持范围以内用 fixtures 固定。
- 零长度匹配前进、命名/捕获分组、Unicode offset 和替换引用要定义;不能无限循环或高亮到错误字符。
- 匹配 worker 支持超时/取消;将模式限制为小子集则必须列为差异,不能忽略不支持 flag。
- 验收:捕获组结果、中文和 emoji 范围、非法表达式、灾难性回溯取消、收藏重启。
F16 Cron
- 保留秒至年字段构建、表达式反向解析、预设、时区、自然语言、后续 10 次执行、收藏/历史。
- 对齐当前 Quartz 风格能力和
cronTools.ts的实际实现,包含?、范围、步长、L、#等。 - 明确表达式 5/6/7 字段的解析规则,不用 5 字段 Unix cron 替代所有输入。
- 时区采用 IANA 规则;跨 DST、闰年、无下一次运行的表达式有明确结果。
- 验收:构建与反向解析保持含义,未来时间真实计算且有上限;未知语法不输出伪自然语言解释。
F17 二维码
- 生成 / 识别 Tab;内容、尺寸、纠错级别 L/M/Q/H、Logo、预览、PNG 保存和历史。
- 识别来自文件/系统图片剪贴板,普通与纯码处理按源码提供;保留可识别的内容展示、复制。
- 默认尺寸 300、纠错 M,接入工具设置;不同背景、透明图和 DPI 的实际像素正确。
- 使用真正二维码编码/解码库;生成图片中不得只是画方格或渲染文本。
- 验收:生成→保存→从文件识别;生成→复制图片→剪贴板识别;中文 URL、Logo 和坏图;跨平台图片回读无黑图。
F18 时间转换
- 秒/毫秒时间戳与日期时间双向转换,时区、当前/快捷时间、历史、全屏时钟。
- 明确时间单位,不用长度猜测覆盖显式选择;日期校验、负时间戳、夏令时、闰年和时区转换。
- 全屏时钟退出恢复原布局;定时刷新只在需要的会话活跃时运行。
- 验收:epoch、负值、毫秒、DST 边界;同一瞬间跨时区一致,非法日期不自动进位成另一天。
F19 留言板
- 这是本地大字展示牌;左编辑控制、右预览,演示时隐藏不需要的控制。
- 最长 80 的现有输入限制、8 个预设、6 种主题、左/居中对齐、字号比例、自动适配。
- 文案、主题、对齐、比例持久化;Unicode 计数如采用更合理的字素规则需记录与 JS length 的差异。
- 演示模式保持显示器唤醒;退出、失活、关闭及异常释放 token,不能影响其他工具的持有者。
- Esc 先退出演示,不立即隐藏主应用;拖动区域不覆盖演示按钮。
- 验收:短句/长中文/多行在窗口缩小时完整显示,预设切换和重启恢复,演示退出后恢复休眠策略。
F20 翻译
- Tab 顺序:翻译、单词本、历史;源/目标语言、Google/Bing 选择、交换、自动翻译、复制/清空。
- 自动翻译约 500 ms debounce;手动运行立即发送;旧响应不能覆盖新输入;回填历史/单词本不重复自动发送。
- 统一代理、15 秒默认翻译超时(以设置为准)、取消、长文本分段和 fallback;fallback 状态可辨认。
- 单词本新增、编辑、删除、搜索和重译;历史持久化。
- 在线服务实现依据当前可用接口,不能把 mock 翻译当正式功能;不可用时显示真实失败。
- 验收:受控 HTTP fixture 验证流程与取消;真实联网额外标记服务、日期和结果;无网仍能查看单词本和历史。
F21 计算器
- 表达式输入与等号按钮,进制转换、GCD/LCM、排列组合及本地记录。
- 等号只显示
=,高度和左输入框一致,这是 Electron 1.1.4 的明确调整。 - 真正表达式解析器,支持范围参考
calculatorTools.ts;不能调用 shell 或任意 eval。 - 运算优先级、一元符号、括号、精度、除零、阶乘/组合参数边界可解释。
- 验收:
2*(3+4)=14、负数、进制、大整数范围、非法表达式;再次编辑不被旧结果覆盖。
F22 调色板
- 当前/对比色、主题色、标准色、屏幕取色、格式转换、主/对比色及六类颜色运算。
- HTML 大/小写 Hex、RGB 等实际格式按
colorTools.ts冻结;收藏和历史。 - 屏幕取色隐藏自身影响区域,显示像素预览/位置/颜色,Esc 取消并恢复窗口。
- 宽色域/ICC 和屏幕像素到输出 sRGB 的处理需声明,不能假设屏幕物理 RGB 与所有颜色格式直接相等。
- 验收:格式往返、边界颜色、收藏持久化、实际取色、拒绝权限、多屏/DPI。
F23 图片助手
- 布局:顶部完整工具栏,左本地图片库,中间画布,底部缩放;列表可折叠、多选批处理。
- 截图/自选区域、剪贴板、文件导入、Base64 导入导出;图片名、尺寸、大小和缩略图。
- 缩放/适配、复制、保存、重命名、删除、批量导出、压缩、水印和输出方式。
- 转 SVG 必须纳入:读取
ImageDialogs.tsx与imageVectorizationService.ts,保留参数/批量/导出语义;不能在 SVG 内嵌原 bitmap 冒充矢量化。 - 压缩、水印和转换默认创建结果,覆盖模式需明确;保持透明度及正确方向,处理结果写本产品图片库/用户目标。
- 图片最大像素/总内存/批量限制、任务取消和临时文件清理;避免无限解码消耗。
- 不加入 OCR;截图需真实权限和多屏坐标处理。
- 验收:重启图片库仍在,改名/批量选择有效,PNG 透明区正确,水印可见、压缩真实改变输出、SVG 真正包含矢量路径。
F24 PDF
- Tab 顺序拆分、合并;任务表、文件选择、页数/大小、页码范围、规则、状态和最近输出。
- 同批最多 20 项,奇/偶/自定义拆分,按指定文件顺序及页码范围合并。
- 页码支持范围及分隔符,具体去重/排序/顺序行为对齐
pageRanges.ts和pdfService.ts;不要自行排序破坏用户指定顺序。 - 能读取已有 PDF 并保留页面内容;页数、输出文件名、冲突策略和取消状态准确。
- 加密/损坏/越界/空范围/写失败给出具体错误。书签、表单、签名等特殊对象的保留范围需实测并记录,不笼统承诺完整保真。
- 验收:真实多页 PDF 拆出正确页→重合并→检查页数、顺序及文字可提取;取消不留半成品;不是把页面截图成新 PDF。
F25 系统信息
- 系统、CPU、内存、存储、网络五 Tab;结构化键值/表格、刷新、复制、序列号脱敏。
- 使用真实系统 API 或受控采集服务;平台不提供的字段显示“不支持/不可用”,不填固定样例。
- 占用率、容量单位、时间和刷新周期有清晰定义;页面失活暂停无用轮询。
- 验收:与本机基本信息交叉核对,刷新真实发生;无权限不崩溃;未实现字段不冒充 0。
4. 应用级功能规格
A01 设置
当前 Electron 设置分类共 11 项,顺序保留:
| 分类 ID | 必须覆盖 |
|---|---|
| general | 语言、自动检查/下载更新、启动最大化、关闭策略、托盘 |
| appearance | 六种风格、system/light/dark、六种强调色、字体/字号、统一背景 |
| layout | 最近显示、紧凑导航、分隔线、隐藏标题、三种导航、自定义组/隐藏工具 |
| editor | SQL 方言、JSON/随手记字体和字号、自动换行 |
| network | 代理开关/地址/端口/用户名/密码、HTTP/翻译超时 |
| data | 实际路径、打开目录、备份/恢复、显式导入、迁移报告 |
| vault | JSON/随手记路径、Git remote/用户名/token、自动提交/拉取、忽略规则、展开策略 |
| runtime | Java/Groovy/Python/Node 路径、检测和独立参数/目录 |
| tools | QR 尺寸/纠错、随机长度、导出目录、默认翻译器和语言 |
| shortcuts | 搜索、设置快捷键及完整帮助;编辑器快捷键按平台显示 |
| about | Flutter 产品名/版本、更新检查/进度/结果、Release notes、许可证及帮助 |
Flutter 设置 schema 独立。不能保留有效外观按钮却忽略设置;无效值归一和新 schema 补默认值需测试。跨窗口同步后不打断编辑。
A02 历史、收藏与命令搜索
- 历史支持工具过滤、搜索、查看详情、恢复输入/结果、删除/清空;限制统一在仓库层,不每页各自裁剪。
- 通用历史以 Electron 200 条限制作为首轮参考,按真实 repository 确认作用域;HTTP/翻译专用历史单独核对。
- Regex/Cron/颜色收藏具有真实新增、命名、查询、恢复及删除;重复项策略清楚。
- 搜索匹配翻译名、ID、关键词,中/英/日;↑↓/Enter/Esc 可完成全流程。
- 工具隐藏只影响导航显示;窗口分离只影响显示位置,均不删除会话和数据。
A03 文件、备份、Git、窗口、更新
按主指南第 7–10 节完整实现。它们不额外计入 25 个工具,但同样属于完整产品范围。仅把各工具页面实现完而没有数据与桌面生命周期闭环,不能标记总体完成。
5. 兼容样本的记录方法
每个跨语言算法 fixture 至少包含:caseId、toolId、源提交/文件、输入、选项、期望输出或期望错误、比较方式、已知差异。样本存入本产品 test/fixtures/,CI 不运行 Electron 获取期望值。
| 比较方式 | 适用 |
|---|---|
| 精确文本/字节 | 编解码、摘要、固定对称密文、Protobuf bytes、明确格式化规则 |
| 结构比较 | JSON/XML/YAML、HTTP 字段等允许可说明的非语义顺序差异 |
| 跨实现消费 | Crypto 加密/解密/验签、QR 生成/识别、PDF 拆合 |
| 不变量与范围 | 随机值、系统信息、时间、网络响应 |
| 人工视觉和交互 | 输入法、光标、窗口、屏幕权限、DPI、原生菜单 |
源实现不正确时单独保留 sourceObserved 和 flutterExpected,解释修复原因;不能通过不断改期望值让测试迎合当前错误实现。