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

135 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# apply 页面数据来源排查
> 排查日期2026-03-18
> 页面路径pages/apply/apply
## 概览
| 分类 | 数量 | 说明 |
|------|------|------|
| A. Mock 数据 | 0 | 无 mock 数据 |
| B. 硬编码数据 | 5 | 表单校验规则、延时跳转、错误提示文案 |
| C. 已对接 API | 2 | `/api/xcx/me`GET`/api/xcx/apply`POST |
| 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_id``status`new/pending/approved/rejected/disabled`nickname` |
| 响应处理 | 写入 `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.ts``onSubmit()` (L99) |
| 调用时机 | 用户点击"提交申请"按钮 |
| 认证 | `needAuth: true` |
| 请求参数 | 见下表 |
| 成功处理 | Toast "申请已提交" → 800ms 后 `reLaunch → /pages/reviewing/reviewing` |
| 错误处理 | 优先取 `err.data.detail`409 → "您已有待审核的申请"422 → "表单信息有误";其他 → "提交失败,请稍后重试" |
**请求参数:**
| 字段 | 来源 | 类型 | 必填 | 说明 |
|------|------|------|------|------|
| `site_code` | 表单输入 `siteCode`trim | string | ✅ | 球房ID |
| `applied_role_text` | 表单输入 `role`trim | string | ✅ | 申请身份(自由文本) |
| `phone` | 表单输入 `phone` | string | ✅ | 11 位手机号 |
| `employee_number` | 表单输入 `employeeNumber`trim空则 undefined | string? | ❌ | 编号(选填) |
| `nickname` | 表单输入 `nickname`trim | 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_id``status``nickname` | P0 |
| T2 | 验证 | 确认 `POST /api/xcx/apply` 请求体字段名与后端 schema 一致(`site_code``applied_role_text``phone``employee_number``nickname` | P0 |
| T3 | 验证 | 确认后端 409 响应场景(重复申请)和 422 响应场景(参数校验失败)的 `detail` 字段格式 | P1 |
| T4 | 验证 | 确认 `site_code` 最大长度(前端 maxlength=5与后端约束一致 | P1 |
| T5 | 优化 | `_checkAccess` 的 catch 静默忽略网络错误——考虑是否需要给用户提示网络异常 | P2 |
| T6 | 优化 | `employee_number` 空值传 `undefined`JSON 序列化时会被忽略)——确认后端是否接受缺省该字段 | P1 |
| T7 | 确认 | `status` 枚举值完整性——前端处理了 `new/rejected/approved/pending/disabled`,确认后端不会返回其他值 | P1 |