receipt-title-required

20260916-181749 轮 · 看它的历史
靶子 BASE=http://localhost:20098 clone=h8 container=wt_h8_tp8  ddnum=202608130045438700285587  ghost=E2E_NO_SUCH_DDNUM_1789555620836

[A 管理端入口 —— 凭证处理台,权限位 39]
  PASS A1) 凭证处理台上「个人抬头」下拉可见
  PASS A2) 未配置时初值 = 必须填写抬头(回落现状)  [期望 "1" / 实测 "1"]
  PASS A3) 原有「对外叫法」入口没被挤掉(同一条配置栏)
  PASS A4) 说明里点名了公司抬头不受此项影响(§1.7:两个相关设置必须互相点名)
  PASS A5) 保存后弹出成功反馈(jncAlert,非原生 alert)
  PASS A6) 重载后读回「可以不填」(真持久化,不是只改了 DOM)  [期望 "0" / 实测 "0"]
  PASS A7) DB 里确实是 0(证明写的是 corp_config 而非别处)  [期望 "0" / 实测 "0"]

[B PC 前台 UI —— 开关=可不填]
  PASS B0) 申请表单确实渲染了(否则下面的不可见断言会假绿)
  PASS B1) 个人抬头下「*」隐藏  [期望 false / 实测 false]
  PASS B2) 出现「可以不填」说明  [期望 true / 实测 true]
  PASS B3) 切到公司抬头「*」必须回来(公司恒必填)  [期望 true / 实测 true]
  PASS B4) 公司抬头下「可以不填」说明隐藏  [期望 false / 实测 false]
  PASS B5) 切回个人抬头「*」再次隐藏  [期望 false / 实测 false]
  PASS B6) 可不填档:空抬头点提交,前端放行并真的发出了请求  [期望 1 / 实测 1]

[C PC 服务端 User::receipt_apply_post —— 用不存在的 ddnum,零写库]
  PASS C0) 从页面取到 CSRF token(取不到则下面全是 CSRF 拒,与真结果同形)
  PASS C1) 开关=可不填:空抬头**越过**抬头闸(不再回「抬头必填」)
  PASS C2) 越过后落到 receiptEligible 的拒绝(证明真走到了后面,不是被别的闸挡住)

[D WxApi::receiptApply —— Bearer,独立端点各自验]
/data/AICode/e2e/ma_dev_v2/ma/bin/workspace/playwright/e2e/e2e-receipt-title-required.js:59
      if (i === 4) throw new Error('Bearer 登录失败: ' + JSON.stringify(j).slice(0, 200));
                         ^

Error: Bearer 登录失败: {"__raw":"<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>系统发生错误</title>\n    <meta name=\"robots\" content=\"noindex,nofollow\" />\n    <style>\n        /* Base */\n        
    at bearerLogin (/data/AICode/e2e/ma_dev_v2/ma/bin/workspace/playwright/e2e/e2e-receipt-title-required.js:59:26)
    at async /data/AICode/e2e/ma_dev_v2/ma/bin/workspace/playwright/e2e/e2e-receipt-title-required.js:160:19

Node.js v20.20.2