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

功能测试报告_数据导入页空白修复_2026-09-11

一、功能说明

用户反馈:登录后点「数据导入」,界面变成一片空白。

排查与根因:用无头 Chrome(CDP 远程调试)复现后,控制台报:

[Vue warn]: Failed to mount component: template or render function not defined.
found in
---> <DataImport> at src/views/DataImport.vue

traffic-audit-web/src/views/DataImport.vue 缺少最外层的 <template> 开标签,文件直接从 <el-container> 开始。SFC 没有 template 块 → vue-loader 编不出 render 函数 → 组件挂载失败 → 整页空白(#app 只剩 78 字符)。

历史沿革(git log -S "SKIP/CHECK"):

提交 文件首行 状态
0f7b7d1^ <template> 正常
0f7b7d1 SKIP/CHECK (0): TYPE_LABELS upper <template> 首行被标记文字覆盖 → 已损坏
da614c0 <el-container direction="vertical"> 标记行被删掉,<template> 仍未补回 → 仍损坏
本次修复 <template>(已补回) 正常

修复:在文件首行补回 <template>(一行改动,未动其余内容)。

二、测试环境

  • 前端 http://localhost:8080(vue-cli-service 开发服务器,改后 17:44:48 重新编译成功)。
  • 复现/验证方式:无头 Chrome --remote-debugging-port=9222 + CDP(Page.navigate / Runtime.evaluate / 控制台事件捕获),先在 sessionStorage 写入登录 token 再访问受保护路由。
  • 测试时间:2026-09-11。

三、用例表

编号 输入 预期 实际 结论
TC-1 修复前访问 #/import(登录态) 复现用户问题 控制台 Failed to mount component … <DataImport>;#app innerHTML 长度 78,页面无文字 复现成功
TC-2 修复后访问 #/import 页面正常渲染 #app innerHTML 长度 20,821;可见「导入业务数据 / 报表期 / 选择数据类型(道路货运 公路旅客 城市客运 站场投资 货运能耗季报)/ 模板:模板_交企统H203-2表… / 导入结果(2026-09)/ 导入进度」 通过
TC-3 修复后控制台 无 Vue/JS 错误 错误事件数 0(含 Runtime.exceptionThrown、console.error) 通过
TC-4 全量路由扫描 #/dashboard、#/import、#/data、#/explain、#/audit、#/report、#/rules、#/users 8 个页面都能渲染、无报错 8/8 渲染成功(innerHTML 长度 4,409~293,029),每个页面错误数均为 0 通过
TC-5 静态检查所有 .vue 是否以 <template> 开头 无同类问题 13 个 .vue 文件中仅 DataImport.vue 异常,修复后全部 OK 通过
TC-N1 负向:用带 hash 查询串的地址访问 #/import?t=… 说明路由不匹配时的表现(辅助定位) 路由无匹配 → 空白且无报错(与本次 bug 现象不同,据此排除了缓存假象) 通过(定位用)

四、发现的问题与处置

  1. 首行被工具写入的标记文字覆盖:0f7b7d1 那次的补丁把 <template> 换成了 SKIP/CHECK (0): TYPE_LABELS upper <template> 这样的说明文字。提示:以后改 SFC 首行要复核首行是否仍是 <template>。
  2. 同一文件近期被改名/改动多次:本次仅补首行,未做其它改动,避免引入新风险。
  3. 复现过程中发现无头浏览器会缓存旧 bundle,需要 Page.reload({ignoreCache:true}) 才能拿到新编译结果(测试方法记录,非产品问题)。

五、结论

  • 「数据导入」白屏已修复,页面与其余 7 个路由均正常渲染、控制台 0 报错。
  • 前端开发服务器已热编译生效,用户刷新页面(Ctrl+F5)即可恢复使用。