Initial commit: Receipt Studio desktop application
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
# 架构与扩展
|
||||
|
||||
应用采用“桌面界面 → 白名单 IPC → 应用服务 → 业务规则与存储”的结构。Renderer 不直接访问文件系统或数据库;主进程不接受界面传来的任意 HTML、SQL 或脚本。
|
||||
|
||||
## 模块边界
|
||||
|
||||
| 位置 | 职责 |
|
||||
| --- | --- |
|
||||
| src/shared | 接口类型、设置契约、输入校验;不依赖 Electron |
|
||||
| src/shared/receipt-groups.ts | 共用分组层级、分组摘要、勾选统计及 A4 预览选页 |
|
||||
| src/shared/file-names.ts | 文件名规则、字符处理;设置示例和正式导出共用 |
|
||||
| src/core/money.ts | 整数分、金额上限、人民币大写、金额格 |
|
||||
| src/core/date.ts | 日期与 Excel 日期制 |
|
||||
| src/core/templates.ts | 模板接口、注册器、打印页面组合;与桌面环境解耦 |
|
||||
| src/main/workbooks.ts | WorkbookReader 接口及 .xlsx 适配器 |
|
||||
| src/main/ledger.ts | 持久编号、批次快照及删除记录 |
|
||||
| src/main/settings-store.ts | 版本化设置及原子写入 |
|
||||
| src/main/confirmations.ts | 主进程确认请求、回复匹配与取消 |
|
||||
| src/renderer/components/ConfirmDialog.vue | 基于 Reka UI 的统一确认弹窗 |
|
||||
| src/renderer/components/ActionButton.vue | 操作触发、禁用及行内目标匹配 |
|
||||
| src/renderer/components/LoadingRegion.vue | 整块区域遮罩、转圈、区域错误及取消入口 |
|
||||
| src/renderer/components/ReceiptGroupTree.vue | 可折叠的整组勾选、部分选中状态及按需显示 |
|
||||
| src/renderer/loading.ts | 操作任务与板块加载状态映射 |
|
||||
| src/renderer/confirmations.ts | 界面确认状态及焦点恢复 |
|
||||
| src/main/seals.ts | 本地图片校验、缓存、快照 |
|
||||
| src/main/pdf-engine.ts | PdfEngine 接口及 Electron 渲染适配器 |
|
||||
| src/main/print-documents.ts | 内存打印页面、随机本地地址及内容释放 |
|
||||
| src/main/exporter.ts | 导出编排、批量分块、取消、清单与进度 |
|
||||
| src/main/export-layout.ts | 学校/年级/收费项目分组、目录名称及冲突处理 |
|
||||
| src/main/index.ts | 桌面生命周期、原生对话框、IPC 接线 |
|
||||
| src/renderer | Vue 页面、交互状态、收据预览及 PDF 转 PNG |
|
||||
|
||||
界面划分为工作台、印章、记录、设置。收据 HTML 不直接从 Vue 界面截图,预览与导出都使用同一模板注册器,防止两套排版逐渐分离。
|
||||
|
||||
## 操作反馈
|
||||
|
||||
操作反馈位于对应板块。LoadingRegion 通过 as 保留原表单、面板和网格结构,显示整块浅色遮罩与居中转圈。指示器按板块与视口的交集定位,长页面滚动后仍可见。加载时 region-content 使用 inert 阻止鼠标与键盘操作,完成后恢复内容;页面顶部不再显示独立成功或错误提示条。
|
||||
|
||||
usePanelState 将设置、印章、生成记录、导入数据、预览与导出六个板块映射到任务。actions.task 在启动时绑定所属板块,防止同类操作重入;操作立即执行,保存和手动刷新等反馈从首帧绘制后计时,至少可见 500 毫秒;较慢的操作显示到真实完成。loadingTasks 与 busy 分开:选择/打开文件夹、切换印章及后台同步不会产生人为等待或整块遮罩。主进程通过 onProcessing 在导入、模板保存和删除的选择/确认步骤结束后通知界面开始转圈,取消选择直接结束。错误写入 panelErrors 并显示在对应区域,可关闭;启动错误显示在启动区域。
|
||||
|
||||
ActionButton 负责事件和禁用状态,图标与文字保持稳定。导出遮罩使用 loading-actions 插槽提供取消按钮,该插槽位于 inert 内容之外。取消请求发出后显示“正在取消”,直至主进程报告结束。预览版本号保证旧请求不能关闭新请求的加载反馈。必要的进度转圈使用独立的 region-spinner 动画,在 prefers-reduced-motion 下仍旋转;其余装饰过渡遵循系统偏好。scripts/loading-test.mjs 在可见的测试窗口逐帧检查旋转角度和持续时间,使用隔离配置及文件夹验证选择器、取消和处理阶段。
|
||||
|
||||
## 确认弹窗
|
||||
|
||||
使用 Reka UI AlertDialog,并封装统一的标题、说明、详情、提示与按钮。弹窗提供焦点约束、默认聚焦取消和 Esc 取消,业务内容通过 Vue 文本绑定呈现。删除、重复生成和退出确认共用同一组件;离开未保存设置使用同一界面服务。
|
||||
|
||||
主进程通过 ConfirmationService 发送带随机 id 的请求,等待白名单 IPC 回复。仅匹配当前请求的回复有效,同时只允许一个主进程请求。页面导航、进程异常或窗口关闭会取消等待中的确认。操作执行仍保留主进程的数据校验与任务状态检查。新增主进程确认调用 confirmations.ask,新增纯界面确认调用 askConfirmation。
|
||||
|
||||
Reka UI 按需打包到本地前端,运行不依赖网络;许可声明随构建输出到 renderer/licenses/reka-ui.txt。
|
||||
|
||||
## 新增收据模板
|
||||
|
||||
实现 ReceiptTemplate 的 id、name、css、render,并在 TemplateRegistry 构造时注册。id 是持久标识,发布后保持稳定;已有模板发生版式不兼容变化时使用新 id,保留旧实现以支持历史重打。设置页自动从注册器读取可用模板。
|
||||
|
||||
模板使用物理毫米布局,单张页面与 A4 页面由 buildDocument 统一组合。render 中所有业务文字经过 escapeHtml,图片仅接受已校验本地文件转换的数据 URL。
|
||||
|
||||
## 新增导入来源
|
||||
|
||||
实现 WorkbookReader.read,将新来源映射为 ImportDraft、ImportRow 和 ReceiptInput。收据编号由 Ledger 分配,导入适配器不创建编号。导入层保留 school、grade、studentName 三个来源字段,并生成以单个空格分隔的 customer 展示文字。来源字段对旧记录为可选,历史客户名称继续按快照读取,避免升级后影响补打。CSV、旧 .xls 或其他来源都可以增加适配器,再在入口按扩展名选择。
|
||||
|
||||
## 新增导出格式
|
||||
|
||||
ExportCoordinator 只依赖 PdfEngine 接口。可以替换渲染器而不改变编号与导入。新增格式在 ExportOptions 中明确声明,输入经共享校验器校验;禁止将任意文件路径和脚本通过 IPC 暴露给网页。
|
||||
|
||||
打印 HTML 通过随机的 receipt://print/ 地址在内存中提供,避免把整页及重复印章编码进地址而触发长度限制。每次 PDF 导出完成或失败后释放页面内容;不写临时 HTML 文件。错误提示与历史摘要会省略内嵌页面内容并限制长度。
|
||||
|
||||
PNG 使用已生成 PDF 的第一页渲染,保持字体和版式一致。A4 批量打印每次最多渲染 40 张收据再合并 PDF;分块大小为偶数,以免每个分块引入额外空白半页。
|
||||
|
||||
导出目录保留现有批次外层,内部由 groupReceipts 按 school、grade、item 三个来源字段逐层规划。目录层级定义集中在 shared/receipt-groups.ts 的 receiptGroupLevels 中,导出路径、界面核对和历史分类共用这一规则。缺失的历史字段使用未分类目录,不拆解或修改旧客户名称。目录名过滤 Windows 非法字符与保留名,截断或替换后的名称加稳定摘要,并处理大小写冲突,避免不同分组合并。
|
||||
|
||||
单张 PDF/PNG 按原收据顺序写入所属目录,每组 A4 单独生成,组内仍按原顺序每 40 张分块。单组失败后继续其余分组,仅打印时按分组累计成功/失败张数。生成清单保留在批次根目录,receipts.directory、receipts.files 和 printFiles 使用相对路径;重新导出从原快照重新规划目录,沿用原编号并保留同名文件追加后缀的行为。
|
||||
|
||||
## 分组核对与历史查找
|
||||
|
||||
importGroupTree 按三级分组统计有效行、待修改行、选中张数和金额;选择学校或年级时只切换有效行。界面使用原生 details 和复选框,支持部分选中状态;多于 20 个有效分组时减少初始展开,同级每次显示 50 项,关闭节点的子树按需创建。勾选直接更新原有 selected 集合。
|
||||
|
||||
A4 预览使用 printPreviewRows 在已选同组收据中定位当前行所在页,并按全局已选顺序展示待分配编号。预览查询不修改流水号。设置页面的实时文件名示例和正式导出使用相同的 receiptFileStem,保持前缀、命名方式和字符替换一致。
|
||||
|
||||
记录列表通过 listBatchPage 传递经校验的学校、年级、项目、文本、页码和每页条数,返回当前页、真实总条数及有效页码。无筛选时使用数据库 COUNT/LIMIT/OFFSET;有筛选时逐批匹配同一张收据,统计所有匹配批次并仅构建当前页摘要,末页删除后自动钳制到有效页。学校、姓名和任意编号查找仍覆盖全库。原 listBatches 继续为已有调用提供最多 200 条摘要,bootstrap 提供全库分类选项和真实总数。
|
||||
|
||||
界面默认每页 5 条,可选 5/10/20/50;historyPageSize 在设置校验器中为旧配置补默认值,修改后持久保存。筛选或每页条数变化时回到第一页,刷新保留当前页;使用请求版本号保持最新结果。显式翻页沿用整块加载反馈,自动筛选合并短时间内的输入变化。过滤结果仍对应完整批次,重新导出维持原有批次语义。原收据预览可指定匹配编号,旧批次输出目录经过全库归属检查。
|
||||
|
||||
## 编号一致性
|
||||
|
||||
应用使用单实例锁;主进程生成任务互斥。Ledger 内部串行事务分配流水,先原子持久保存数据库,再写导出文件。编号不因取消或失败而回收。原批次重试不再次 reserve。
|
||||
|
||||
批次保存原数据、默认姓名生效后的内容、模板 id、设置及印章图片快照。更换印章或移动图片不改变历史批次。导出位置与导出选项可以变化,正式编号和内容保持原值。
|
||||
|
||||
批次记录支持删除。主进程在确认前后检查生成任务状态,Ledger 在事务中拒绝删除 reserved/running 批次,仅移除批次快照,保留 receipt_numbers 和 sequences。已导出的文件不会由此功能删除。删除后清理当前草稿对该批次的引用。
|
||||
|
||||
数据损坏时停止启动和分配编号,保留原文件,不静默创建空数据库。
|
||||
|
||||
## 设置与升级
|
||||
|
||||
设置包含 schemaVersion。增加可选字段时为共享校验器和 defaultSettings 同时补默认值,保证旧配置可加载。更改数据库结构需在 Ledger.open 中增加显式事务迁移,再写兼容性测试。不要通过删除用户数据解决升级问题。
|
||||
|
||||
设置页面保留文件、打印、印章和编号四个板块,单张文件命名方式直接显示在文件板块。独立批次目录与成功后打开目录为固定启用行为,无界面开关;SettingsStore 在读取和保存时将旧配置中的 createBatchFolder、openAfterExport 归一为 true,其余偏好保持原值。Exporter 每次都创建批次目录,包括从旧快照重新导出。备份和恢复的界面、IPC、预加载接口、状态操作及数据库合并代码已移除。
|
||||
|
||||
## 验证
|
||||
|
||||
核心测试覆盖金额边界、日期、工作簿错误、模板转义、持久编号、旧配置兼容、分块排版、取消和重试。桌面测试实际点击界面并检查 PDF 页数、A4 尺寸、PNG 分辨率、编号重启、设置持久化及自动打开目录。实际打印机的可打印边距需在交付时试打确认。
|
||||
@@ -0,0 +1,112 @@
|
||||
# 版本验证记录
|
||||
|
||||
版本:1.0.1。验证日期:2026-10-16。
|
||||
|
||||
环境:Windows 10 专业版 x64,版本 10.0.19045。开发运行时 Node.js 24.19.0。
|
||||
|
||||
- 类型检查与生产构建通过。
|
||||
- 新版 Excel 模板使用学校、年级、姓名三列;各列去除首尾空白后,以一个空格拼接收据客户名称。必填校验、列顺序调整和来源字段持久化均通过验证;旧记录仍可补打。
|
||||
- 31 项核心测试通过:金额精度和越界、金额大写、Excel 日期制、错误行、重复行、模板转义、编号持久化、旧备份合并、分块打印、取消重试、不覆盖同名文件、PNG 物理密度。
|
||||
- 实际 Electron 界面验证通过:保存偏好、绑定和选择本地印章、导出模板、导入含错误行的工作簿、独立 PDF 和 PNG、A4 一页两张、奇数张留空、原编号补打、备份与重启。
|
||||
- 三张收据输出为三份独立 PDF、三份 300 DPI PNG,以及两页 A4 打印 PDF。
|
||||
- 打包后的独立程序验证通过:不依赖项目 node_modules,启动、Excel 导入、盖章、PDF、PNG 均通过;PNG 分辨率标记为 11811 像素/米,约为 300 DPI。
|
||||
|
||||
安装包:release/ReceiptStudio-1.0.1-win-x64-setup.exe。
|
||||
免安装目录:release/win-unpacked(整个目录一起使用)。
|
||||
|
||||
尚未进行实体打印机试打。交付后请由财务使用 A4、实际大小或 100% 比例试打一页,核对印章与裁切位置。
|
||||
|
||||
当前安装包未配置代码签名证书。
|
||||
|
||||
## 本地调试版:批量打印修复(2026-10-16)
|
||||
|
||||
- 复现旧版 ERR_INVALID_URL:较大印章重复嵌入批量页面,data 地址中的内容达到约 11.7 百万个字符,打印加载失败。
|
||||
- 打印页面改用内存中的短本地地址,导出成功或失败后释放内容。类型检查、构建和 31 项测试通过。
|
||||
- 实际 Electron 验证:41 张带印章收据,跨 40 张分块边界,输出 21 页 A4;原编号重试输出 41 份单张 PDF、41 份 PNG 和 1 份 A4 PDF,下一编号保持 REG00000042。
|
||||
- 模拟页面加载失败,错误提示保留错误码、隐藏页面内容,失败不显示绿色成功提示;随后原编号重试成功。
|
||||
- 验证产物:.qa/print-regression/result.json。使用独立测试目录,未改写用户设置、记录及编号。
|
||||
- 本次修复更新源码与本地构建,未重新生成安装包。重新启动“启动本地调试.cmd”后生效。
|
||||
|
||||
## 本地调试版:记录表与批次删除(2026-10-16)
|
||||
|
||||
- 生成记录表头由 10px 调整为 12px,提高字重与文字对比度。
|
||||
- 每条批次增加删除按钮和确认对话框。删除批次快照后,导出文件、编号归属与流水保留;生成中的批次禁止删除。
|
||||
- 备份合并保留已删除批次的编号归属;删除前备份可恢复原批次,并拒绝其他批次占用同一编号。
|
||||
- 类型检查、构建和 35 项测试通过。实际 Electron 验证删除取消、删除确认、文件保留、重启后删除生效及流水继续;1920 与 1120 像素窗口均检查表头和操作布局。
|
||||
- 验证产物:.qa/history-delete-check/result.json。使用独立测试数据,未删除用户现有批次。
|
||||
- 新增桌面接口和预加载桥接,需关闭程序并重新启动本地调试后使用删除功能。本次未重新生成安装包。
|
||||
|
||||
## 本地调试版:统一确认弹窗(2026-10-16)
|
||||
|
||||
- 引入开源 Reka UI 2.11.0,统一删除、重复生成、恢复备份、未保存设置和生成中退出的确认样式;组件随应用本地打包。
|
||||
- 删除弹窗采用居中卡片、图标、批次详情、保留文件说明和明确操作按钮。取消默认聚焦,Tab 焦点保持在弹窗内,Esc 取消。
|
||||
- 主进程请求使用随机 id 匹配回复,取消不批准操作,界面重载或关闭时撤销等待中的确认,防止遗留请求。
|
||||
- 类型检查、构建和 39 项测试通过。实际 Electron 验证重复生成取消/继续、删除取消/确认、恢复备份取消/确认、未保存设置留存/放弃、界面重载后再次确认、生成中关闭窗口后继续生成。
|
||||
- 文件和编号保持验证通过,未触发业务原生提示框,无界面脚本异常。验证记录:.qa/dialogs-check/result.json;外观截图:.qa/dialogs-check/delete-dialog.png。
|
||||
- 使用独立测试配置,用户现有记录未改动。更新后需要重新启动本地调试,安装包未重新生成。
|
||||
|
||||
## 本地调试版:操作与刷新反馈(2026-10-16)
|
||||
|
||||
- 保存设置、列表刷新、Excel 导入与模板保存、印章切换、目录选择、备份恢复、批次查看/删除/重新导出均使用统一操作反馈。
|
||||
- 操作时显示旋转图标与处理中说明,禁止重复点击;成功后短暂打勾。快速操作的反馈保持可见,相同成功提示再次触发入场动画。取消和失败不显示成功。
|
||||
- 手动刷新保留原列表并淡化,完成后说明记录/印章数量;后台同步独立处理。预览显示加载覆盖层,导出取消反馈持续至任务结束。支持减少动画的系统偏好。
|
||||
- 类型检查、构建与 39 项测试通过。实际 Electron 验证保存转圈/禁用/持久化/完成打勾/重复保存提示、印章刷新计数与切换反馈、刷新失败无成功状态、生成记录刷新、取消导入无成功提示;无界面脚本异常。
|
||||
- 完整桌面操作验证通过:模板导入、错误行、选择印章、单张 PDF、300 DPI PNG、A4 排版、原编号重新导出、备份与重启。
|
||||
- 验证记录:.qa/feedback-check/result.json、.qa/result.json。使用独立测试目录,用户记录未改动。本次只更新源码与本地构建。
|
||||
|
||||
## 本地调试版:改为板块整体加载(2026-10-16)
|
||||
|
||||
- 根据使用反馈,加载动画改为整个对应板块的浅色遮罩与居中转圈,处理完成后恢复;移除页面顶部的独立成功、错误提示条及按钮成功打勾反馈。
|
||||
- 设置区域、印章区域、生成记录、收据数据、预览和导出分别关联自己的加载状态;加载内容使用 inert 阻止重复操作,错误留在对应板块内。
|
||||
- 长页面滚动后,转圈指示器保持在可见区域;导出遮罩保留可操作的取消入口,取消后等实际任务结束才恢复。
|
||||
- 类型检查与构建通过。实际 Electron 验证整块遮罩尺寸、内容不可交互、滚动后指示器可见、取消导入恢复、导出遮罩中可取消、刷新失败显示在板块内;未出现界面脚本异常。
|
||||
- 完整桌面导入/设置/PDF/PNG/A4/原编号补打/备份/重启验证通过。1920、1440、1120 像素窗口及 A4 预览的列表铺满与底部分页布局验证通过。
|
||||
- 验证记录:.qa/regions-check/result.json、.qa/result.json、.qa/layout-check/result.json。使用独立测试配置,用户记录未改动;未重新生成安装包。
|
||||
|
||||
## 本地调试版:确保转圈与合理的加载时机(2026-10-16)
|
||||
|
||||
- 使用独立的持续旋转动画,修复系统减少动态效果时进度图标停止的问题;保存、手动刷新等操作从首帧绘制后至少显示 500 毫秒。加载仍覆盖对应板块,不增加顶部提示条。
|
||||
- 选择/打开文件夹、绑定印章目录及切换印章不增加人为加载等待。预览自动更新保留短延迟以避免闪烁,工作台手动刷新直接显示完整半秒反馈。
|
||||
- 增加主进程处理阶段通知:导入、保存模板、备份、恢复和删除在选好文件或确认之后才显示加载,取消选择或确认直接结束。
|
||||
- 新增 test:loading 实际窗口逐帧验证。普通和减少动态效果两种设置下旋转角度持续改变,保存、三处刷新入口、导入、模板、备份恢复和确认删除实测约 520~534 毫秒;取消文件夹选择约 4 毫秒,未产生遮罩。
|
||||
- 构建、类型检查、39 项单元测试和完整桌面导入/PDF/PNG/A4/原编号重导出/备份/重启验证通过。删除确认后保留已分配编号;无界面脚本异常。
|
||||
- 验证记录:.qa/loading/result.json、.qa/result.json。全部使用独立测试配置,用户记录未改动。需要重新启动本地调试加载新的处理阶段接口;未重新生成安装包。
|
||||
|
||||
## 本地调试版:按学校、年级、收费项目分层导出(2026-10-19)
|
||||
|
||||
- 保留原有最外层批次目录命名,内部按“学校 → 年级 → 收费项目”创建目录;单张 PDF、PNG 和对应分组的 A4 打印版保存在项目目录,生成清单保留在批次根目录。
|
||||
- 分组打印独立排版,组内保持 Excel 顺序,非连续行可归入同组;每组仍按 40 张分块,奇数张只在本组最后一页留空半页。打印分组失败后继续其他分组,并累计正确的成功/失败张数。
|
||||
- 目录名处理非法字符、保留名、超长名称和大小写冲突。旧记录缺少学校或年级时使用未分类目录,不修改原客户名称。重新导出沿用原编号,保留同名文件追加后缀的规则。
|
||||
- 43 项测试通过,覆盖三层文件位置、混合分组、清单相对路径、旧记录、目录冲突、取消重试、分组失败与 81 张分块排版。类型检查和构建通过。
|
||||
- 实际 Electron 桌面验证导入、设置、单张 PDF、300 DPI PNG、三个独立 A4 分组、原编号分层重新导出、备份与重启通过。较大印章 41 张同组收据正确生成 21 页 A4,失败后原编号重试生成 42 个 PDF、41 个 PNG,通过错误摘要检查。
|
||||
- 验证记录:.qa/result.json、.qa/print-regression/result.json。测试使用隔离配置与目录,用户记录未改动。重启本地调试后生效;未重新生成安装包。
|
||||
|
||||
## 本地调试版:简化设置与移除备份(2026-10-19)
|
||||
|
||||
- 移除备份、恢复备份和“更多偏好与数据备份”折叠区域,同时移除预加载接口、IPC 处理、界面操作和数据库备份合并代码。单张文件命名设置移到“文件与常用选择”板块。
|
||||
- 独立批次目录和成功后自动打开输出目录改为固定启用,不再显示开关。旧配置曾保存为关闭时,读取后自动启用;其余偏好保留。下次保存设置时持久化这两项启用状态,旧记录和编号不变。
|
||||
- 从含旧关闭状态的历史快照重新导出也创建新的独立批次目录;原导出文件保留。
|
||||
- 类型检查、构建和 41 项测试通过,包含旧配置读取/保存兼容及取消后原编号独立目录重试。已移除不再适用的备份测试。
|
||||
- 实际 Electron 验证设置页面入口和开关已移除、单张命名设置直接可见、备份 API 不再暴露、旧配置自动启用、新生成与重新导出均自动打开正确批次目录、重启后设置和编号连续。完整 PDF/PNG/A4/分层导出验证通过,设置页面截图已检查。
|
||||
- 加载动画实际窗口验证通过,保存/刷新仍连续旋转半秒,选择文件夹不显示遮罩,删除确认和取消行为正常。
|
||||
- 验证记录:.qa/result.json、.qa/loading/result.json;截图:.qa/02-settings.png。测试使用隔离目录,用户记录及已有备份文件未改动;未重新生成安装包。重启本地调试后生效。
|
||||
|
||||
## 本地调试版:命名示例、分组核对与记录查找(2026-10-19)
|
||||
|
||||
- 文件命名设置改为“导出的文件叫什么名字”,三种规则用日常表述展示;按当前前缀、选中数据和格式实时给出示例,正式导出与示例共用命名和字符处理函数。
|
||||
- 导入后展示学校、年级、收费项目三级核对树。支持整组勾选、取消和部分选中状态,张数与金额实时更新;错误行单独计数且不可生成。多组数据按需展开,同级每次显示 50 项,减少初次渲染量。
|
||||
- A4 预览按已选同组收据定位当前行所在页,保持实际导出的分组、空白半页和编号顺序,不推进流水号。
|
||||
- 生成记录增加分类摘要及学校/年级/项目筛选,文本查找支持文件名、姓名和任意收据编号。组合条件匹配同一收据,最多返回 200 个匹配批次,覆盖更早记录;匹配信息显示姓名、编号和张数,预览直接显示匹配的原收据。重新导出维持完整批次语义,界面有明确说明。
|
||||
- 类型检查、构建与 45 项测试通过,覆盖非连续行分组、错误行排除、A4 预览选页、组合条件、批次中间编号、姓名及 200 批以前的旧记录和目录归属;历史查找和预览不分配新编号。
|
||||
- 实际 Electron 验证三种命名示例、分组勾选及父级部分选中、错误组禁用、分组 A4 预览、组合筛选无误命中、中间编号及姓名查找、匹配原收据预览、清空筛选、60 所学校按需加载及整组取消。完整 PDF/PNG/A4、原编号重导出和重启验证通过,无界面脚本异常。
|
||||
- 加载动画验证通过,保存与刷新继续显示半秒持续旋转,选择文件夹、导入取消及删除确认保持原交互。
|
||||
- 验证记录:.qa/result.json、.qa/loading/result.json;页面截图:.qa/02-settings.png、.qa/03-import-preview.png、.qa/05-history-filter.png。使用隔离测试配置,用户现有记录未改动;未重新生成安装包。重启本地调试后生效。
|
||||
|
||||
## 本地调试版:生成记录分页(2026-10-19)
|
||||
|
||||
- 生成记录默认每页 5 条,可选 5/10/20/50,列表底部显示真实总条数、当前条目范围、首页/上一页/页码/下一页/末页。每页条数保存在偏好设置中,切换板块或重启后继续使用上次选择。
|
||||
- 新增 listBatchPage 查询当前页及总数,分页覆盖全部历史记录;保留原 listBatches 的调用兼容。无筛选采用数据库 COUNT/LIMIT/OFFSET,有筛选按全部匹配批次计数,避免先截取 200 条再分页。侧边栏同步显示真实总数。
|
||||
- 筛选条件或每页条数改变后回到第一页;刷新保留当前页,删除末页记录后自动回到有效页。显式翻页沿用板块整体加载反馈,保留查询版本检查。
|
||||
- 类型检查、构建及 46 项测试通过,覆盖默认条数、分页不重复、每页 10/50 条、筛选总数、空结果、页码越界、删除末页、201 条记录的最后一页以及旧配置默认值与条数保存。
|
||||
- 新增隔离桌面验证 test:history,使用 13 个测试批次实际验证五条分页、范围和边界按钮、翻页、条数切换、筛选回首页、清空筛选、跨板块/重启记忆、逐条删除末页自动回退,流水号保持不变;截图已检查,无界面脚本异常。完整桌面导入/分组/PDF/PNG/A4/原编号补打/重启验证通过。
|
||||
- 验证记录:.qa/history-pagination/result.json、.qa/result.json;截图:.qa/history-pagination/pagination.png。测试使用隔离配置,用户记录未改动;未重新生成安装包。重启本地调试后生效。
|
||||
Reference in New Issue
Block a user