Files
integral-shop/docs/integral-pages-test-report-v2.md
scott ee0886b800 feat: 新增积分外部页面(免认证三页 + 配套基础设施)
前端:
- 新增 EmptyLayout 空壳布局(无侧边栏/导航)
- 新增 requestNoAuth Axios 实例(不注入 token)
- 新增 integralExternal 路由模块(/integral-external/*)
- permission.js 加入 whiteListPrefixes 前缀白名单跳过登录
- 新增 phoneDesensitize 手机号脱敏过滤器
- 新增三个免认证页面:
  · 积分订单页(/integral-external/order)
  · 用户积分页(/integral-external/user,手机号脱敏)
  · 用户积分明细子页(/integral-external/user/integral-detail)

后端:
- 新增 ExternalIntegralController(无 @PreAuthorize)
  · GET  /api/external/integral/order/list
  · GET  /api/external/integral/user/list
  · POST /api/external/integral/log/list
- WebSecurityConfig 加入 /api/external/integral/** permitAll

文档与工具:
- 新增 coding plan、schedule、测试报告
- 新增 start-backend.sh / start-frontend.sh 本地启动脚本
- 新增 .mvn/wrapper/maven-wrapper.properties

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 10:41:30 +08:00

5.3 KiB
Raw Permalink Blame History

积分模块新增页面 — 功能测试报告 v2

测试时间: 2026-03-31 测试范围: Coding Plan 交付清单功能验证(静态分析 + 结构检查) 测试结果: 全部通过11/11 项)


T01 — 交付文件存在性检查

文件 结果
src/layout/EmptyLayout.vue PASS
src/utils/requestNoAuth.js PASS
src/router/modules/integralExternal.js PASS
src/router/index.js(已注册) PASS
src/api/integralExternal.js PASS
src/permission.js(已修改) PASS
src/filters/user.js(已修改) PASS
src/views/integral-external/order/index.vue PASS
src/views/integral-external/user/index.vue PASS
src/views/integral-external/user-integral-detail/index.vue PASS
ExternalIntegralController.java PASS

11/11 文件存在


T02 — permission.js 白名单前缀检查

const whiteList = ['/login', '/auth-redirect'];
const whiteListPrefixes = ['/integral-external'];
// ...
if (whiteList.indexOf(to.path) !== -1
    || whiteListPrefixes.some(prefix => to.path.startsWith(prefix))) {
  next();
}
  • whiteListPrefixes 已定义并包含 /integral-external
  • 使用 startsWith 前缀匹配(支持所有子路径)

T03 — router/index.js 注册检查

  • import integralExternalRouter from './modules/integralExternal' 已添加
  • integralExternalRouter 已加入 constantRoutes

T04 — 新页面无权限指令检查

页面 v-hasPermi checkPermi
order/index.vue
user/index.vue
user-integral-detail/index.vue

三个页面均不含任何权限指令,符合免认证要求。


T05 — phoneDesensitize 过滤器链路

  1. filters/user.js 导出 phoneDesensitize 函数
  2. filters/index.js 通过 export * from './user' 自动 re-export
  3. main.js 通过 Object.keys(filters).forEach 全局注册所有过滤器
  4. user/index.vue 正确使用 {{ scope.row.phone | phoneDesensitize }}

T06 — API 函数与后端路径一致性

API 函数 前端 URL HTTP 方法
getExternalOrderList external/integral/order/list GET
getExternalUserList external/integral/user/list GET
getExternalIntegralLog external/integral/log/list POST

所有 URL 与 ExternalIntegralController 中的映射路径完全一致。


T07 — 文件语法结构检查

文件 template script name 属性 括号平衡
EmptyLayout.vue
order/index.vue
user/index.vue
user-integral-detail/index.vue

T08 — 路由路径一致性

路由定义(子路径) 完整路径 跳转来源
order /integral-external/order 默认 redirect
user /integral-external/user
user/integral-detail /integral-external/user/integral-detail user/index.vue $router.push
  • user/index.vue 导航路径 /integral-external/user/integral-detail 与路由定义一致

T09 — EmptyLayout 引用链

  • integralExternal.js 动态引入 EmptyLayout
  • EmptyLayout.vue 包含 <router-view />(子页面正确渲染)

T10 — requestNoAuth 免认证验证

  • api/integralExternal.js 使用 requestNoAuth 实例(非 request
  • requestNoAuth.js 请求拦截器中任何 Authorization Header 注入逻辑
  • requestNoAuth.js 响应拦截器中 401 重定向到登录页逻辑

T11 — 后端 Java 检查

检查项 结果
@RestController 注解 PASS
@RequestMapping("api/external/integral") PASS
/order/list@GetMapping PASS与前端 GET 一致)
/user/list@GetMapping PASS与前端 GET 一致)
/log/list@PostMapping PASS与前端 POST 一致)
@PreAuthorize PASS
WebSecurityConfig permitAll 白名单 PASS

汇总

测试项 通过 失败
T01 文件存在性11项 11 0
T02 路由白名单前缀 1 0
T03 路由注册 1 0
T04 无权限指令3页 3 0
T05 过滤器链路4环节 4 0
T06 API 路径一致性3接口 3 0
T07 文件语法结构4文件 4 0
T08 路由路径一致性 1 0
T09 EmptyLayout 引用链 2 0
T10 免认证验证3项 3 0
T11 后端 Java7项 7 0
合计 40 0

40/40 全部通过 — 交付物满足 Coding Plan 所有功能需求,可进入联调阶段。


待联调验证(需运行环境)

以下项目需在实际启动前后端后验证:

  • 浏览器访问 /integral-external/order 不跳转登录页
  • 订单列表数据正确渲染(含商品图片)
  • 用户列表手机号脱敏显示138****5678
  • 点击"查看积分明细"正确传参 uid 并跳转
  • 积分明细页概览卡片显示正确的积分 & 个人奖金
  • 返回按钮回到用户积分列表