admin-web-test-cases.md 24 KB

管理后台 Web 页面测试用例

测试范围

模块 页面 路由 优先级
登录认证 管理员登录 /login P0
仪表盘 数据概览 /dashboard P0
用户管理 用户列表与操作 /users P0
订单管理 订单查询与筛选 /orders P1
佣金管理 佣金明细与统计 /commissions P1
提现管理 提现审核处理 /withdraw P1
系统配置 定价与佣金参数编辑 /settings P0
分析记录 命盘数据查看 /charts P2

测试环境与前置条件

  • 后端服务正常运行(num-server
  • 管理后台开发服务器正常(admin/
  • 测试数据库已初始化种子数据(包含若干用户、订单、佣金、提现记录)
  • 浏览器:Chrome / Edge 最新版
  • 屏幕分辨率:≥ 1280×720

1. 登录认证(Login)

TC-LOGIN-001:正常登录成功

字段 内容
前置 管理后台未登录,访问 /login
步骤 1. 输入有效用户名 admin
2. 输入有效密码 admin123
3. 点击「登录」按钮
预期 ① 按钮显示 loading 状态
② 请求 POST /api/admin/login 返回 code=0
③ 弹出「登录成功」提示
④ 自动跳转至 /dashboard
localStorage 中存入 admin_token
优先级 P0

TC-LOGIN-002:密码错误

字段 内容
前置 未登录状态,访问 /login
步骤 1. 输入用户名 admin
2. 输入错误密码 wrongpass
3. 点击「登录」
预期 ① 请求返回 code=1001 "Invalid admin credentials"
② 页面停留在登录页,不跳转
③ 弹出错误提示
优先级 P0

TC-LOGIN-003:用户名不存在

字段 内容
前置 未登录
步骤 1. 输入不存在的用户名 hacker
2. 输入任意密码
3. 点击「登录」
预期 同 TC-LOGIN-002,返回 code=1001,停留在登录页
优先级 P0

TC-LOGIN-004:空表单提交

字段 内容
前置 未登录
步骤 1. 用户名和密码均为空
2. 点击「登录」
预期 ① 表单校验阻止提交
② 用户名和密码输入框下方显示「请输入用户名」「请输入密码」提示
③ 不发出 API 请求
优先级 P0

TC-LOGIN-005:仅填写用户名

字段 内容
前置 未登录
步骤 1. 输入用户名 admin,密码为空
2. 点击「登录」
预期 表单校验阻止提交,密码框提示「请输入密码」,不发出 API 请求
优先级 P0

TC-LOGIN-006:密码可见切换

字段 内容
前置 未登录
步骤 1. 输入密码
2. 点击密码框右侧的「眼睛」图标切换可见性
预期 ① 密码明文/密文可正确切换
② 按钮图标同步变化
优先级 P2

TC-LOGIN-007:登录后直接访问 /login

字段 内容
前置 已登录(localStorage 有有效 token)
步骤 1. 浏览器地址栏直接输入 /login
2. 回车访问
预期 路由守卫检测到已登录,自动重定向至 /dashboard
优先级 P1

2. 仪表盘(Dashboard)

TC-DASH-001:仪表盘数据正常加载

字段 内容
前置 已登录,数据库中存在用户/订单/佣金数据
步骤 1. 登录后自动跳转至 /dashboard
2. 观察页面内容
预期 ① 请求 POST /api/admin/stats 返回 code=0
② 4个统计卡片显示正确数值(总用户数、VIP用户、订单总数、总收入)
③ 月新增用户折线图渲染(ECharts)
④ 订单状态分布饼图渲染
⑤ 最近订单表格显示最近10条订单记录
⑥ 表格含订单号、金额(¥格式化)、状态标签、创建时间列
优先级 P0

TC-DASH-002:无数据时的仪表盘

字段 内容
前置 数据库为空(无用户/订单)
步骤 同 TC-DASH-001
预期 ① 统计卡片显示为 -0
② 图表渲染空白状态
③ 订单表格显示「暂无数据」
④ 页面不报错
优先级 P1

TC-DASH-003:仪表盘数据加载失败

字段 内容
前置 已登录,后端服务异常或网络断开
步骤 1. 访问 /dashboard
预期 ① 页面显示 loading 后停止
② 弹出错误提示「网络错误」或后端返回的错误信息
③ 页面不崩溃,表格和图表区域保持空白
优先级 P1

TC-DASH-004:统计中的金额格式化

字段 内容
前置 数据库中有订单:totalFee 分别为 100(¥1.00)、131400(¥1,314.00)、0
步骤 1. 访问 /dashboard
2. 查看总收入卡片
预期 总收入显示为 ¥1,315.00(分转元,两位小数)
优先级 P1

3. 用户管理(Users)

TC-USER-001:用户列表正常加载

字段 内容
前置 已登录,数据库中有 ≥3 个用户(含普通用户、VIP用户、管理员)
步骤 1. 点击左侧菜单「用户管理」
2. 观察页面
预期 ① 请求 POST /api/admin/users 返回 code=0
② 表格显示所有用户
③ 每行包含:ID、头像、昵称、手机号、推广码、VIP标签、注册时间
④ VIP用户标签为绿色「是」,非VIP为灰色「否」
⑤ 分页组件显示总条数
优先级 P0

TC-USER-002:用户搜索功能

字段 内容
前置 用户列表已加载,存在昵称含"张三"、手机号含"138"的用户
步骤 1. 在搜索框输入 张三
2. 观察表格筛选结果
3. 清空搜索框
4. 输入 138
预期 ① 输入「张三」→ 表格仅显示昵称包含「张三」的用户
② 清空搜索 → 恢复显示全部用户
③ 输入「138」→ 表格仅显示手机号包含「138」的用户
④ 搜索无匹配时显示「暂无数据」
优先级 P0

TC-USER-003:升级 VIP(已有VIP到期)

字段 内容
前置 用户 A 的 VIP 已过期(vipEndTime < now)
步骤 1. 找到用户 A
2. 点击「升级VIP」按钮
预期 ① 请求 POST /api/admin/user/upgrade{userId: A.id}
② 返回 code=0
③ 弹出「已升级VIP」成功提示
④ 表格自动刷新,用户A的VIP标签变为绿色「是」
⑤ 升级VIP按钮变为 disabled 状态
优先级 P0

TC-USER-004:升级 VIP(已是VIP)

字段 内容
前置 用户 B 是 VIP(vipEndTime > now)
步骤 1. 找到用户 B
2. 观察「升级VIP」按钮
预期 「升级VIP」按钮为 disabled 状态,hover 提示或置灰不可点击
优先级 P0

TC-USER-005:设为管理员

字段 内容
前置 用户 C 非管理员(isAdmin=false)
步骤 1. 找到用户 C
2. 点击「设为管理」按钮
预期 ① 请求 POST /api/admin/user/set-admin{userId: C.id, isAdmin: true}
② 返回 code=0
③ 弹出「已设为管理员」成功提示
④ 表格刷新,按钮文字变为「取消管理」
优先级 P0

TC-USER-006:取消管理员

字段 内容
前置 用户 D 是管理员(isAdmin=true)
步骤 1. 找到用户 D
2. 点击「取消管理」按钮
预期 ① 请求带 {userId: D.id, isAdmin: false}
② 返回 code=0
③ 弹出「已取消管理权限」
④ 按钮文字变为「设为管理」
优先级 P0

TC-USER-007:升级不存在的用户

字段 内容
前置 手动构造请求或通过接口测试
步骤 直接调用 API POST /api/admin/user/upgrade 带不存在的 userId
预期 返回 code=1002 "User not found"
优先级 P1

TC-USER-008:分页功能

字段 内容
前置 数据库中有 >20 个用户
步骤 1. 访问用户管理
2. 点击第2页
预期 ① 分页组件跳转至第2页
② 表格显示第21-40条数据
③ URL 不变(前端分页)
优先级 P1

4. 订单管理(Orders)

TC-ORDER-001:订单列表加载

字段 内容
前置 已登录,数据库中有多种状态的订单
步骤 1. 点击左侧菜单「订单管理」
预期 ① 请求 POST /api/admin/orders 返回 code=0
② 表格显示所有订单
③ 每行包含:ID、订单号、用户ID、金额(¥x.xx)、状态标签、支付方式、创建时间、支付时间
④ 已支付订单标签为绿色,待支付为黄色
优先级 P0

TC-ORDER-002:按状态筛选

字段 内容
前置 订单列表已加载
步骤 1. 在状态筛选下拉选择「已支付」
2. 观察表格
3. 切换为「待支付」
4. 选择「全部」
预期 ① 选「已支付」→ 仅显示 status=paid 的订单
② 选「待支付」→ 仅显示 status=pending 的订单
③ 选「全部」→ 恢复显示全部订单
优先级 P0

TC-ORDER-003:金额格式化

字段 内容
前置 订单 totalFee=500(5.00元)
步骤 查看金额列
预期 显示 5.00元,两位小数,保留分精度
优先级 P1

TC-ORDER-004:空订单列表

字段 内容
前置 数据库中无订单
步骤 访问订单管理
预期 表格显示「暂无数据」,筛选下拉可用,不报错
优先级 P1

5. 佣金管理(Commissions)

TC-COMM-001:佣金列表加载与统计摘要

字段 内容
前置 数据库中有多条佣金记录(含已结算和待结算)
步骤 1. 点击左侧菜单「佣金管理」
预期 ① 请求 POST /api/admin/commissions 返回 code=0
② 顶部3个统计卡片显示正确数值:「已结算佣金」(绿色)、「待结算佣金」(黄色)、「总佣金」
③ 金额格式为 ¥x.xx(两位小数)
④ 下方表格显示佣金明细:ID、订单ID、来源用户、获得用户、级别(L1/L2)、金额、状态、时间
⑤ 已结算标签为绿色「已结算」,待结算为灰色「待结算」
优先级 P0

TC-COMM-002:分页功能

字段 内容
前置 有 >20 条佣金记录
步骤 翻页操作
预期 分页组件工作正常,每页20条
优先级 P2

TC-COMM-003:统计金额一致性

字段 内容
前置 有3条已结算各100元、2条待结算各50元
步骤 核对统计数字
预期 已结算=¥300.00、待结算=¥100.00、总佣金=¥400.00
优先级 P1

TC-COMM-004:空佣金列表

字段 内容
前置 数据库中无佣金记录
步骤 访问佣金管理
预期 统计卡片均显示 ¥0.00,表格显示「暂无数据」
优先级 P1

6. 提现管理(Withdraw)

TC-WDRAW-001:提现列表加载

字段 内容
前置 数据库中有多种状态的提现记录(待审核、已通过、已拒绝)
步骤 1. 点击左侧菜单「提现管理」
预期 ① 请求 POST /api/admin/withdraws 返回 code=0
② 表格显示 ID、用户ID、金额(¥x.xx)、状态标签、创建时间
③ 待审核=黄、已通过=绿、已拒绝=红

TC-WDRAW-002:通过提现申请

字段 内容
前置 存在一条「待审核」提现记录
步骤 1. 找到待审核记录
2. 点击「通过」按钮
预期 ① 请求 POST /api/admin/withdraw/approve{id: row.id}
② 返回 code=0
③ 弹出「提现已通过」成功提示
④ 表格自动刷新,状态变为绿色「已通过」
⑤ 通过和拒绝按钮消失

TC-WDRAW-003:拒绝提现申请

字段 内容
前置 存在一条「待审核」提现记录
步骤 1. 点击「拒绝」按钮
预期 ① 请求 POST /api/admin/withdraw/reject{id: row.id}
② 返回 code=0
③ 弹出「已拒绝该提现」
④ 表格刷新,状态变为红色「已拒绝」

TC-WDRAW-004:已处理提现的按钮状态

字段 内容
前置 存在「已通过」「已拒绝」的提现记录
步骤 观察操作列
预期 已审核的提现记录操作列不显示「通过」「拒绝」按钮

TC-WDRAW-005:刷新按钮

字段 内容
前置 提现列表已加载
步骤 1. 点击「刷新」按钮
预期 ① 表格重新加载
② 显示 loading 状态

TC-WDRAW-006:提现操作失败处理

字段 内容
前置 通过/拒绝 API 返回非0 code
步骤 模拟服务端拒绝(如重复审核)
预期 ① 弹出错误提示「操作失败」
② 页面状态不发生错误变更

7. 系统配置(Settings)

TC-SET-001:配置加载

字段 内容
前置 已登录,数据库 sys_config 表有配置数据
步骤 1. 点击左侧菜单「系统配置」
预期 ① 请求 POST /api/admin/config/list 返回 code=0
② 页面显示 6 个配置卡片组:
- 定价配置(能量师种子价/标准价/种子价上限/C端年费)
- B端佣金配置(L1能量师推荐/L1 C端推荐/L2)
- C端佣金配置(直接佣金比例/上级佣金比例)
- 人工方案配置(平台佣金率/分销占比/最低价/最高价/最大协商轮次)
- 配额配置(每日AI解读/AI问答/分享次数)
- 其他参数(推广码前缀/咨询最短间隔)
③ 每个字段显示当前值并可编辑

TC-SET-002:修改配置并保存

字段 内容
前置 配置加载完毕
步骤 1. 修改能量师种子价从 1314 改为 1500
2. 点击「保存全部配置」
预期 ① 请求 POST /api/admin/config/update 携带所有配置键值对
② 返回 code=0
③ 弹出「配置已保存,已实时生效」
④ 刷新页面后,修改值保持为 1500

TC-SET-003:配置项输入验证

字段 内容
前置 配置加载完毕
步骤 1. 尝试输入负数到「能量师种子价」
2. 尝试输入 >100 到「直接佣金比例」
3. 尝试输入小数到整数配置项
预期 ① el-input-number 阻止非法输入(min/max限制生效)
② 比例字段 max=100,不能超过
③ 整数字段不接受小数

TC-SET-004:恢复初始值

字段 内容
前置 某个配置项的值已被修改
步骤 1. 点击「定价配置」卡片右上角的「恢复初始值」
预期 ① 请求 POST /api/admin/config/reset 针对配置键
② 返回 code=0
③ 该卡片内所有字段恢复为初始默认值
④ 字段值刷新

TC-SET-005:实时比例计算

字段 内容
前置 定价配置和佣金配置已加载
步骤 修改能量师种子价或L1佣金值
预期 ① 修改种子价时,下方佣金比例提示实时更新
② 修改佣金值时,百分比提示实时更新
③ 计算公式正确(如 L1/种子价 = x%)

TC-SET-006:保存失败处理

字段 内容
前置 配置已加载
步骤 1. 修改配置
2. 服务器返回错误
预期 ① 保存按钮结束 loading
② 弹出错误提示
③ 页面保持修改后的值,不自动回滚

TC-SET-007:必填字段空值

字段 内容
前置 配置加载完毕
步骤 尝试通过手动构造将某个必填配置置空后保存
预期 后端应校验非空或保存默认值,配置不丢失

8. 分析记录(Charts)

TC-CHART-001:分析记录列表加载

字段 内容
前置 数据库中有多条命盘记录
步骤 1. 点击左侧菜单「分析记录」
预期 ① 请求 POST /api/admin/charts 返回 code=0
② 表格显示 ID、用户ID、手机号、姓名、已解读标签、创建时间
③ 已解读(difyResponse 不为空)标签为绿色「是」,否则为灰色「否」

TC-CHART-002:查看详情弹窗

字段 内容
前置 有一条包含 chartData 和 difyResponse 的记录
步骤 1. 点击某条记录的「查看」按钮
预期 ① 弹出详情弹窗
② 弹窗显示手机号、姓名、生日、创建时间的描述列表
③ 下方显示「图表数据」区域,格式化的 JSON 数据
④ 下方显示「AI 解读」区域,展示解读文本

TC-CHART-003:查看无 AI 解读的记录

字段 内容
前置 有一条有 chartData 但无 difyResponse 的记录
步骤 点击「查看」
预期 弹窗显示图表数据,AI 解读区域不显示或显示为空

TC-CHART-004:查看无图表数据的记录

字段 内容
前置 有一条 chartData 为空的记录
步骤 点击「查看」
预期 弹窗不显示图表数据区域,AI 解读区域按需显示

TC-CHART-005:分页功能

字段 内容
前置 有 >20 条记录
步骤 翻页操作
预期 分页组件工作正常

9. 公共功能与权限

TC-COMMON-001:未登录访问保护

字段 内容
前置 清除 localStorage,未登录状态
步骤 1. 直接访问 /dashboard/users/orders 等受保护路由
预期 路由守卫自动重定向至 /login,且不显示目标页面内容

TC-COMMON-002:Token 过期/无效

字段 内容
前置 localStorage 中存储过期或无效 token
步骤 1. 刷新页面
2. 访问任意受保护页面
预期 ① 请求 API 返回 code=1001
② 自动清除 localStorage 中的 token
③ 页面跳转至 /login
④ 弹出错误提示(如 Token invalid)

TC-COMMON-003:退出登录

字段 内容
前置 已登录状态
步骤 1. 点击右上角用户头像/退出按钮(如有)
预期 ① localStorage 中 token 被清除
② 跳转至 /login

TC-COMMON-004:侧边菜单导航

字段 内容
前置 已登录
步骤 1. 依次点击左侧菜单每个条目
预期 ① 每个菜单项可点击
② 当前页面对应的菜单项高亮
③ 页面内容正常加载
④ 浏览器前进后退按钮可正常工作

TC-COMMON-005:页面标题

字段 内容
前置 已登录
步骤 依次访问各页面,查看浏览器 tab 标题
预期 每个页面有正确的浏览器标题,如「数字能量学管理平台 - 用户管理」

10. 边界与异常场景

TC-EDGE-001:重复操作

字段 内容
前置 待审核的提现记录
步骤 1. 快速连续点击两次「通过」按钮
预期 ① 第二次点击不触发请求或请求被拒绝
② 不出现重复成功提示或数据不一致

TC-EDGE-002:批量修改配置后页面刷新

字段 内容
前置 配置已加载
步骤 1. 修改配置多处值
2. 修改后不保存,直接刷新页面
预期 ① 页面重新加载后,所有配置值恢复为数据库中的值
② 未保存的修改丢失

TC-EDGE-003:Token 在 localStorage 中被篡改

字段 内容
前置 已登录
步骤 1. 手动修改 localStorage 中的 admin_token 为任意字符串
2. 刷新页面
预期 API 请求返回 1001,页面跳转至登录页

TC-EDGE-004:网络超时

字段 内容
前置 已登录,网络延迟极高或断开
步骤 1. 访问任意页面
预期 ① 页面显示 loading 状态后超时
② 弹出「网络错误」提示
③ 页面不崩溃

TC-EDGE-005:空数据库状态

字段 内容
前置 数据库为空(全新安装)
步骤 依次访问所有页面
预期 每个页面均正常渲染,显示空状态(「暂无数据」/ 0值),不报错

11. 配置项完整清单校验

TC-CONFIG-ALL:全部配置字段覆盖检查

字段 内容
前置 sys_config 表有完整种子数据
步骤 1. 打开系统配置页面
2. 对照下方清单逐一核对
预期 以下所有配置项均存在且值正确:
定价配置:
  - pricing.practitioner.seed      能量师种子价 (default: 1314)
  - pricing.practitioner.standard  能量师标准价 (default: 1986)
  - pricing.practitioner.seed_limit 种子价上限 (default: 300)
  - pricing.annual                 C端年费 (default: 131)

B端佣金(固定金额):
  - commission.practitioner.l1        L1 能量师推荐 (default: 300)
  - commission.practitioner.l1_cend   L1 C端推荐 (default: 100)
  - commission.practitioner.l2        L2 (default: 50)

C端佣金(百分比):
  - commission.annual.direct_rate    直接佣金比例 (default: 40)
  - commission.annual.upstream_rate  上级佣金比例 (default: 5)

人工方案:
  - commerce.category.practitioner_plan.commission_rate  平台佣金率 (default: 10)
  - commission.practitioner_plan.referral_rate           分销直接占比 (default: 50)
  - commission.practitioner_plan.upstream_rate           分销上级占比 (default: 20)
  - plan_request.min_price   方案最低价 (default: 99)
  - plan_request.max_price   方案最高价 (default: 9999)
  - plan_request.max_rounds  最大协商轮次 (default: 3)

配额:
  - quota.chart  每日AI解读 (default: 1)
  - quota.chat   每日AI问答 (default: 3)
  - quota.share  每日分享 (default: 3)

其他参数:
  - system.referral_prefix  推广码前缀 (default: NUM)
  - system.chat_interval    咨询最短间隔(秒) (default: 5)

12. 回归测试要点

每次后端 API 或前端组件变更后,以下核心流程需回归验证:

流程 涉及页面 关键验证点
登录 → 仪表盘 Login → Dashboard token 获取、跳转、统计加载
用户操作 Users 升级VIP、设/取消管理员后数据一致
提现审核 Withdraw 通过/拒绝后状态正确,按钮消失
配置保存 Settings 修改→保存→刷新→值保持
权限拦截 全部 未登录重定向、token过期处理

附录:API 依赖关系

前端功能 依赖的后端 API 请求方式
登录 POST /api/admin/login 无 token
仪表盘 POST /api/admin/stats 需 admin token
用户列表 POST /api/admin/users 需 admin token
升级VIP POST /api/admin/user/upgrade 需 admin token
设/取消管理 POST /api/admin/user/set-admin 需 admin token
订单列表 POST /api/admin/orders 需 admin token
佣金列表 POST /api/admin/commissions 需 admin token
提现列表 POST /api/admin/withdraws 需 admin token
通过提现 POST /api/admin/withdraw/approve 需 admin token
拒绝提现 POST /api/admin/withdraw/reject 需 admin token
配置列表 POST /api/admin/config/list 需 admin token
配置保存 POST /api/admin/config/update 需 admin token
配置重置 POST /api/admin/config/reset 需 admin token
分析记录 POST /api/admin/charts 需 admin token