编辑 | blame | 历史 | 原始文档

功能测试报告:数据导入页“清空数据”增强(按类型清空 + 按钮移出刷新行防误触) 2026-09-10

功能说明

  • 数据导入页右侧“导入进度”侧栏在原“刷新”旁去掉“清空”,改为在侧栏标题行下方新增独立危险操作区(浅红底 + 边框),内含 el-button type="danger" plain 的“清空数据…”按钮与说明“按报表期清库,用于整月重导”,与“刷新”物理分开,降低误触。
  • 新增清空弹窗:显示当前报表期,选择“清空该报表期全部已导入数据”或“只清空指定类型”;选类型时用 el-select multiple filterable,按分组列出可选类型并标注“(已导入 N 行/未导入)”;底部红色警示语说明会同步删除审核结果、已审核标记与导入批次(投资项目主档保留)且不可撤销。
  • 后端 POST /api/import/clear 增加可选参数 types(逗号分隔):为空 = 清空该报表期全部类型(原行为不变);非空 = 只清空指定数据类型,并同步清理其关联的 audit_result / audit_run / import_batch。

涉及改动

  • 后端 DataImportService:clearPeriod(period, types) 重载;新增静态映射 CLEAR_TYPE_TO_OP(类型→数据表操作键,同表归并去重)、CLEAR_TYPE_TO_AUDIT(类型→审核规则类型)、CLEAR_TYPE_TO_BATCH(类型→importType);新增 clearTypeData(op, period) 分派与 deleteInvestmentMonthly(period, category)(投资月度按项目类别过滤,仅删本期明细,投资主档保留)。返回值新增 scope 与 types,便于前端提示清空范围。
  • 后端 DataImportController:clearData 增加 types 参数解析(空串/空项忽略)。
  • 前端 DataImport.vue:移除 .side-head-btns 与旧 clearPeriodData();新增 .side-danger 危险操作区、清空弹窗、openClearDialog()/clearableGroups()/confirmClear() 与 clearDialog/clearScope/clearTypes 状态;确认后再走一次 $confirm 二次确认,成功提示带删除行数。

测试环境

  • 后端:traffic-audit-server 8090(含本次改动;start-dev.ps1 启动,PID 21884,启动时间 2026-09-10 08:54:02,加载 target/classes 最新编译产物)。
  • 前端:traffic-audit-web 8080 dev,frontend.log 最近一次 Compiled successfully in 347ms(08:53:29),热更新已生效。
  • 数据库:本机 MySQL localhost:3308/traffic_audit,mysql CLI 直查核对;登录账号 admin/123456。
  • 测试数据:一次性测试期 2099-01 / 2099-02,使用 docs/货运需导入的数据/货运/2026年1-7月报/道路货物运输月度生产情况(2026年6月).xls(636 行)与 2026-07 城市公交样本;真实月份仅做回归对比,不被写入或删除。

用例表

# 用例 输入 预期 实际 结论
1 编译 mvn -o -q compile 通过 无报错 通过
2 正向-按类型清空 POST /import/clear?period=2099-01&types=h2032 只删 h2032 及其 H2032 审核结果/批次 dataRows=636、auditRows=31、auditRunRows=1、batchRows=1;DB 核对 h2032=0、H2032 规则审核结果=0、audit_run(H2032)=0、批次(H2032)=0 通过
3 隔离性-其它类型不受影响 同上,清 h2032 后查 cityBus cityBus 数据与审核/批次保留 cityBus 业务 142 行、CITY_BUS 审核 53 行、audit_run(CITY_BUS)=1、批次(CITY_BUS)=1 均保留 通过
4 隔离性-其它报表期不受影响 同上,查 2099-02 2099-02 数据不受影响 2099-02 数据完好 通过
5 负向-非法类型 types=notAType 拒绝并提示 HTTP 500,清空失败: 未指定有效的数据类型 通过
6 边界-有效+未知混合 types=cityBus,notAType 忽略未知、按有效类型执行 成功,返回 scope=types, types=[cityBus,notAType],删除 0 行(该期无数据) 通过
7 边界-空类型列表 不传 types 按全部类型清空(原行为) 成功,scope=all 通过
8 投资按类别 插入 2099-01 客运站场/物流园区测试行后分别清空 只删对应类别,投资主档保留 types=investment 只删客运站场、types=investmentLogistics 只删物流园区,investment_project 主档保留 通过
9 UI-按钮位置 打开数据导入页,展开“导入进度” “刷新”旁无清空;清空按钮在独立红色危险区 与预期一致(可访问性树可读到“清空数据…”按钮与提示文案) 通过
10 UI-弹窗选项 点“清空数据…” 弹窗含报表期、全部/指定类型单选、类型下拉带导入状态 选中“道路货物运输月度生产情况(已导入 636 行)”,选项标签与状态一致 通过
11 UI-确认清空 选中 h2032 后点“确认清空” 二次确认 → 成功提示含行数、进度回“未导入” 提示“已清空 2099-01 数据:业务数据 636 行、审核结果 0 行、导入批次 1 条,可以重新导入”,进度回“未导入” 通过
12 回归-真实月份 清空前后对比 无变化 2099-01 残留=0;2026-09=636、2026-07=636、2025-07=664 未变;真实批次总数 239 未变 通过

发现的问题与处置

  • 无功能性缺陷。测试期数据在验证结束后已全部清除,未残留。
  • 说明(保留特性):一次清空会删除该报表期“全部类型”的业务数据及审核结果/已审核标记/导入批次,弹窗已用红色文案提示不可撤销;只想清单一类型时使用“只清空指定类型”,未导入的类型仍可勾选但不产生删除。
  • 环境备注:本机库 admin 密码为 123456(admin123 在本机不匹配)。

结论

  • 通过。“清空数据…”已从“刷新”旁移出并做视觉隔离,弹窗支持按整期或按类型清空,接口按范围精确删除业务数据、审核结果、已审核标记与导入批次,且对其它类型、其它报表期与真实月份零影响。
  • 待用户在自己浏览器验收一次按钮位置与弹窗文案。