前端: - 新增 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>
5.3 KiB
5.3 KiB
积分模块新增页面 — 功能测试报告 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 过滤器链路
- ✅
filters/user.js导出phoneDesensitize函数 - ✅
filters/index.js通过export * from './user'自动 re-export - ✅
main.js通过Object.keys(filters).forEach全局注册所有过滤器 - ✅
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请求拦截器中无任何AuthorizationHeader 注入逻辑 - ✅
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 后端 Java(7项) | 7 | 0 |
| 合计 | 40 | 0 |
✅ 40/40 全部通过 — 交付物满足 Coding Plan 所有功能需求,可进入联调阶段。
待联调验证(需运行环境)
以下项目需在实际启动前后端后验证:
- 浏览器访问
/integral-external/order不跳转登录页 - 订单列表数据正确渲染(含商品图片)
- 用户列表手机号脱敏显示(138****5678)
- 点击"查看积分明细"正确传参 uid 并跳转
- 积分明细页概览卡片显示正确的积分 & 个人奖金
- 返回按钮回到用户积分列表