170 lines
8.5 KiB
Markdown
170 lines
8.5 KiB
Markdown
|
|
# 积分模块新增页面 — 测试报告
|
|||
|
|
|
|||
|
|
> 执行时间: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` 前缀匹配。
|
|||
|
|
|
|||
|
|
**修改方案**:
|
|||
|
|
```js
|
|||
|
|
// permission.js 第 21 行
|
|||
|
|
const whiteList = ['/login', '/auth-redirect', '/integral-external'];
|
|||
|
|
|
|||
|
|
// 第 59 行
|
|||
|
|
if (whiteList.some(path => to.path.startsWith(path))) {
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## B 组:积分订单页面测试
|
|||
|
|
|
|||
|
|
> 参考文件:`src/views/order/index.vue`(1182 行)
|
|||
|
|
|
|||
|
|
| 编号 | 测试场景 | 结果 | 详情 |
|
|||
|
|
|------|---------|------|------|
|
|||
|
|
| 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.vue`(1079 行)
|
|||
|
|
|
|||
|
|
| 编号 | 测试场景 | 结果 | 详情 |
|
|||
|
|
|------|---------|------|------|
|
|||
|
|
| 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.vue`(241 行)
|
|||
|
|
|
|||
|
|
| 编号 | 测试场景 | 结果 | 详情 |
|
|||
|
|
|------|---------|------|------|
|
|||
|
|
| D-01 | 带 uid 参数加载 | ⚠️ **PRE-CHECK** | 原页面 `searchForm.uid` 已存在,只需在 `mounted()` 从 `$route.query.uid` 注入即可 |
|
|||
|
|
| D-02 | 概览卡片数据验证 | ⚠️ **PRE-CHECK** | 积分来自 `eb_user.integral` ✅;个人奖金来自 `wa_users.selfBonus`(admin 端无现成 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 组关键发现**:
|
|||
|
|
- 后端 `WebSecurityConfig` 的 `permitAll` 白名单**不包含** `/api/admin/user/integral/**`
|
|||
|
|
- 需后端在 `WebSecurityConfig` 第 121 行附近新增:
|
|||
|
|
```java
|
|||
|
|
.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*
|