Files
integral-shop/docs/integral-pages-test-report.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

8.5 KiB
Raw Blame History

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

执行时间2026-03-30 测试类型:静态代码分析(新增页面尚未开发,针对现有代码库做预检) 测试依据integral-pages-coding-plan.md § 8 测试方案


总体结论

维度 状态 说明
新增页面文件 未创建 三个新页面均未开发,开发尚未启动
免登录基础设施 未实现 permission.js / EmptyLayout / requestNoAuth 均未修改
参考页面可裁剪性 可行 原页面结构清晰,具备裁剪条件
后端接口认证机制 ⚠️ 有阻塞 积分接口有 @PreAuthorize 强认证,需后端配合新增免认证路径

A 组:免登录访问测试

前提:EmptyLayout.vue / requestNoAuth.js / 路由 / permission.js 白名单均尚未修改

编号 测试场景 结果 详情
A-01 无 token 访问积分订单页 FAIL permission.js 白名单仅含 ['/login', '/auth-redirect'],精确 indexOf 匹配,/integral-external/order 会被重定向至 /login
A-02 无 token 访问用户积分页 FAIL 同 A-01无对应白名单条目
A-03 无 token 访问积分明细页 FAIL 同 A-01
A-04 免登录页面不影响原有认证 PASS 原有 /order/index 等路径未做变更,仍需登录
A-05 已登录用户访问免登录页面 ⏭️ SKIP 新页面路由未注册,无法访问

A 组结论:需在 permission.js 第 21 行修改白名单,并将第 59 行 indexOf 改为 startsWith 前缀匹配。

修改方案

// permission.js 第 21 行
const whiteList = ['/login', '/auth-redirect', '/integral-external'];

// 第 59 行
if (whiteList.some(path => to.path.startsWith(path))) {

B 组:积分订单页面测试

参考文件:src/views/order/index.vue1182 行)

编号 测试场景 结果 详情
B-01 默认加载 ⏭️ SKIP 页面未创建
B-02 按订单状态筛选 ⏭️ SKIP 页面未创建
B-03 按时间范围筛选 ⏭️ SKIP 页面未创建
B-04 按订单号搜索 ⏭️ SKIP 页面未创建
B-05 重置筛选条件 ⏭️ SKIP 页面未创建
B-06 分页切换 ⏭️ SKIP 页面未创建
B-07 空数据状态 ⏭️ SKIP 页面未创建
B-08 无操作列 ⚠️ PRE-CHECK 原页面含 11 处 v-hasPermi发货/退款/出库 操作按钮、导出功能,裁剪时需逐一清理

B 组预检发现

  • v-hasPermi 出现 11 次,需全部移除
  • 导出按钮在第 79 行:<el-button @click="exports" v-hasPermi="['admin:export:excel:order']">导出</el-button>
  • exports() 方法在第 896 行,需连同方法一起删除
  • 原页面无 Vuex store 直接依赖,裁剪负担较轻

C 组:用户积分页面测试

参考文件:src/views/user/list/index.vue1079 行)

编号 测试场景 结果 详情
C-01 默认加载 ⏭️ SKIP 页面未创建
C-02 wa_users 字段展示 ⏭️ SKIP 页面未创建
C-03 积分字段来源验证 ⚠️ PRE-CHECK integral 字段已在原 user/list 表格中(第 227 行),eb_user.integral 字段存在(User.java 第 98 行),来源正确
C-04 wa_users 无关联数据 ⚠️ PRE-CHECK admin 端无现成的 wa_users API需前端补充处理空值逻辑
C-05 用户搜索 ⏭️ SKIP 页面未创建
C-06 跳转积分明细 ⏭️ SKIP 页面未创建
C-07 分页功能 ⏭️ SKIP 页面未创建
C-08 无权限指令残留 ⚠️ PRE-CHECK 原页面含 15 处 v-hasPermi,裁剪时均需移除

C 组预检发现

  • integral 字段已在原用户列表接口中返回,无需后端改动
  • admin 端无独立的 wa_users 查询 API,需新增或复用 consignment.js 中的 selfBonusLogListApi 辅助拼合
  • 需删除的高级筛选项:等级、分组、标签、国家/省份、消费情况、访问情况、性别、身份(共 8 个筛选项)

D 组:用户积分明细子页面测试

参考文件:src/views/user/integral/index.vue241 行)

编号 测试场景 结果 详情
D-01 带 uid 参数加载 ⚠️ PRE-CHECK 原页面 searchForm.uid 已存在,只需在 mounted()$route.query.uid 注入即可
D-02 概览卡片数据验证 ⚠️ PRE-CHECK 积分来自 eb_user.integral ;个人奖金来自 wa_users.selfBonusadmin 端无现成 API⚠️
D-03 无 uid 参数访问 ⚠️ PRE-CHECK 原页面无 uid 校验逻辑,需在 mounted() 添加 fallback 处理
D-04 无效 uid 访问 ⚠️ PRE-CHECK 后端返回空列表即可,前端需处理空状态显示
D-05 时间范围筛选 PRE-PASS 原页面已有完整 DateRangePicker 实现,直接复用
D-06 积分变动显示 PRE-PASS 原页面已实现 type===1 绿色 +、否则红色 - 逻辑(第 65-66 行)
D-07 状态与关联类型 PRE-PASS linkTypeFilter / statusFilter / statusTypeFilter 三个方法完整(第 196-223 行)
D-08 返回按钮 ⚠️ PRE-CHECK 原页面无返回按钮,需手动添加
D-09 分页功能 PRE-PASS [15, 30, 45, 60] 分页完整实现,直接复用

D 组结论:参考页面仅 241 行复用度最高5/9 项可直接复用),是三个页面中风险最低的。


E 组:接口与后端认证测试

编号 测试场景 结果 详情
E-01 免认证接口可达性 FAIL UserIntegralController.getList()@PreAuthorize("hasAuthority('admin:user:integral:list')"),无 token 必返回 401
E-02 原认证接口不受影响 PASS 原接口认证逻辑未变动
E-03 接口仅读不写 PASS 积分 list 接口为 POST 查询,无写操作
E-04 大数据量分页 ⏭️ SKIP 待联调时测试
E-05 边界参数 ⏭️ SKIP 待联调时测试
E-06 数据脱敏验证 FAIL 当前 admin 接口无脱敏处理,用户手机号明文返回

E 组关键发现

  • 后端 WebSecurityConfigpermitAll 白名单不包含 /api/admin/user/integral/**
  • 需后端在 WebSecurityConfig 第 121 行附近新增:
    .antMatchers("/api/admin/user/integral/list").permitAll()
    
    或新建 ExternalIntegralController 映射至免认证路径

F 组:兼容性与 UI 测试

编号 测试场景 结果
F-01 ~ F-07 全部兼容性测试 ⏭️ SKIP — 页面未创建,待开发完成后执行

问题汇总(需在开发中修复)

优先级 问题 影响范围 解决方案
🔴 P0 permission.js 白名单未更新 A 组全部 FAIL 修改白名单为前缀匹配
🔴 P0 后端积分接口有 @PreAuthorize 强认证 E-01 FAIL 后端新增免认证路径或 controller
🟠 P1 admin 端无独立 wa_users 查询 API C-04、D-02 阻塞 复用寄卖模块的 selfBonusLogListApi 或后端新增聚合接口
🟠 P1 用户手机号无脱敏处理 E-06 FAIL 后端接口或前端 filter 处理 138****8888
🟡 P2 原订单页 11 处权限指令需清理 B-08 开发时逐一删除
🟡 P2 原用户列表页 15 处权限指令需清理 C-08 开发时逐一删除
🟡 P2 积分明细页缺少 uid 空值校验和返回按钮 D-03、D-08 开发时添加

测试覆盖统计

组别 总用例 PASS FAIL PRE-CHECK SKIP
A 组(免登录) 5 1 3 0 1
B 组(订单页) 8 0 0 1 7
C 组(用户积分页) 8 0 0 3 5
D 组(积分明细页) 9 4 0 5 0
E 组(接口) 6 2 2 0 2
F 组(兼容性) 7 0 0 0 7
合计 43 7 5 9 22

PASS = 代码层面已满足条件FAIL = 存在明确问题需修复PRE-CHECK = 有条件可实现开发时需注意SKIP = 页面未创建,待开发完成后执行


报告生成时间2026-03-30