Files
Neo-ZQYY/docs/miniprogram-dev/api-audit/apply.md

6.2 KiB
Raw Blame History

apply 页面数据来源排查

排查日期2026-03-18 页面路径pages/apply/apply

概览

分类 数量 说明
A. Mock 数据 0 无 mock 数据
B. 硬编码数据 5 表单校验规则、延时跳转、错误提示文案
C. 已对接 API 2 /api/xcx/meGET/api/xcx/applyPOST
D. 前端计算/派生数据 2 statusBarHeight、submitting 状态
E. 路由参数 0 无路由参数
F. WXML 硬编码文案 16 标题、欢迎语、步骤条、表单标签、placeholder、提示语

一、Mock 数据

无。页面未使用任何 mock 数据或本地假数据。


二、硬编码数据

# 位置apply.ts 行号) 内容 风险等级 说明
B1 L89 !/^\d{11}$/.test(phone) 手机号正则:固定 11 位纯数字 🟡 仅适用于中国大陆手机号,若未来支持港澳台/海外号码需调整
B2 L85 maxlength="5"WXML 球房ID最大长度 5 🟡 与后端 site_code 长度约束需保持一致
B3 L113 setTimeout(() => {...}, 800) 提交成功后 800ms 延时跳转 🟢 无风险 纯 UX 延时,不影响业务逻辑
B4 L117-123 错误码映射 409 → "您已有待审核的申请"422 → "表单信息有误,请检查" 🟡 错误文案硬编码在前端,后端 detail 字段优先使用
B5 L82-96 表单校验逻辑 4 条必填校验 + 手机号格式校验 🟢 无风险 标准前端校验,后端有独立校验

三、已对接 API

API-1获取当前用户状态

项目
端点 GET /api/xcx/me
调用位置 apply.ts_checkAccess() (L30)
调用时机 onShow 生命周期
请求参数 无(仅 Authorization header
认证 needAuth: true(自动附加 Bearer token
响应字段 user_idstatusnew/pending/approved/rejected/disablednickname
响应处理 写入 app.globalData.authUser + wx.setStorageSync("userId"/"userStatus");根据 status 路由分发
错误处理 catch 静默忽略(允许用户继续填表)

路由分发逻辑:

status 行为
new 留在当前页(允许填写申请表)
rejected reLaunch → /pages/no-permission/no-permission
approved reLaunch → /pages/mvp/mvp
pending reLaunch → /pages/reviewing/reviewing
disabled reLaunch → /pages/no-permission/no-permission

API-2提交入驻申请

项目
端点 POST /api/xcx/apply
调用位置 apply.tsonSubmit() (L99)
调用时机 用户点击"提交申请"按钮
认证 needAuth: true
请求参数 见下表
成功处理 Toast "申请已提交" → 800ms 后 reLaunch → /pages/reviewing/reviewing
错误处理 优先取 err.data.detail409 → "您已有待审核的申请"422 → "表单信息有误";其他 → "提交失败,请稍后重试"

请求参数:

字段 来源 类型 必填 说明
site_code 表单输入 siteCodetrim string 球房ID
applied_role_text 表单输入 roletrim string 申请身份(自由文本)
phone 表单输入 phone string 11 位手机号
employee_number 表单输入 employeeNumbertrim空则 undefined string? 编号(选填)
nickname 表单输入 nicknametrim string 昵称

四、前端计算/派生数据

# 数据 来源 位置
D1 statusBarHeight wx.getWindowInfo().statusBarHeight onLoad() L14
D2 submitting 布尔状态锁,onSubmit 开始时设 truefinally 设 false onSubmit() L98/L126

五、路由参数

无。onLoad() 未读取 options 参数。


六、WXML 硬编码文案

# 元素 文案内容 建议
F1 navbar-title 申请访问权限 可保留
F2 welcome-title 欢迎加入球房运营助手 可保留
F3 welcome-desc 请填写申请信息,等待管理员审核 可保留
F4 step-label 1 提交申请 可保留
F5 step-label 2 等待审核 可保留
F6 step-label 3 审核通过 可保留
F7 step-label 4 开始使用 可保留
F8 form-label 球房ID 可保留
F9 form-label 申请身份 可保留
F10 form-label 手机号 可保留
F11 form-label 编号 + 选填 可保留
F12 form-label 昵称 可保留
F13 placeholder 请输入球房ID / 请输入申请身份(如:助教、店长等) / 请输入手机号 / 请输入编号 / 请输入昵称 可保留
F14 form-tip 请认真填写,信息不完整可能导致审核不通过 可保留
F15 submit-btn-text 提交申请 可保留
F16 bottom-tip 审核通常需要 1-3 个工作日 🟡 若审核时效变化需同步更新

七、联调 TODO

# 类型 描述 优先级
T1 验证 确认 GET /api/xcx/me 返回字段与前端解构一致(user_idstatusnickname P0
T2 验证 确认 POST /api/xcx/apply 请求体字段名与后端 schema 一致(site_codeapplied_role_textphoneemployee_numbernickname P0
T3 验证 确认后端 409 响应场景(重复申请)和 422 响应场景(参数校验失败)的 detail 字段格式 P1
T4 验证 确认 site_code 最大长度(前端 maxlength=5与后端约束一致 P1
T5 优化 _checkAccess 的 catch 静默忽略网络错误——考虑是否需要给用户提示网络异常 P2
T6 优化 employee_number 空值传 undefinedJSON 序列化时会被忽略)——确认后端是否接受缺省该字段 P1
T7 确认 status 枚举值完整性——前端处理了 new/rejected/approved/pending/disabled,确认后端不会返回其他值 P1