Files
jiapuapp/docs/Apifox写接口字段—表单控件映射-2026-07-27.md
T
2026-07-27 17:17:46 +08:00

196 lines
14 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.
# Apifox 写接口字段—表单控件映射
## 口径与来源
- 核对时间:2026-07-27。
- 主源:桌面 Apifox 当前 `APP` 项目中的接口详情;根目录 `家谱.openapi.json` 只用于补全接口路径和没有展示在当前屏幕中的普通字段。
- `必填` 以 Apifox `必需` 标记为准;没有 `必需` 的字段均应允许不填,提交时传空值或省略由当前 API 适配器统一处理。
- `枚举选择` 只能提交下表列出的 value,不能把中文标签提交给后端。
- `候选选择` 只能从对应选项接口选取,页面不得暴露裸露的内部 ID 输入框。
- `上传` 必须先走统一上传,提交上传回执中的 `ossId`;不能让用户手输 OSS ID。
- 所有 `sortOrder` 是整数数字框;所有 `amount/giftAmount` 是金额数字框;示例为 `yyyy-MM-dd HH:mm:ss` 的时间字段用“日期 + 时间”控件拼接后提交。
## 已在 Apifox 字段详情中确认的字典
| 字段/字典 | value → 中文 | 页面控件 |
| --- | --- | --- |
| `sys_user_sex` | `0` 男;`1` 女;`2` 未知 | 单选/下拉选择 |
| `gen_number_yes_no` | `0` 否;`1` 是 | 单选/下拉选择 |
| `gen_lineage_person_status` | `0` 健在;`1` 已故;`2` 未知 | 单选/下拉选择 |
| `sys_normal_disable` | `0` 正常;`1` 停用 | 单选/开关;默认 `0` |
| `gen_genealogy_visibility` | `0` 私密;`1` 公开;`2` 成员可见 | 单选/下拉选择 |
| `gen_genealogy_join_mode` | `0` 关闭加入;`1` 申请审核;`2` 邀请加入 | 单选/下拉选择 |
| `gen_merit_type` | `donation` 捐赠;`repair` 修祠;`public` 公益;`other` 其他 | 单选/下拉选择 |
| 活动邀请响应 | `ACCEPTED` 接受;`DECLINED` 拒绝 | 二选一 |
`completed` 在 Apifox 当前详情中是 `string`,只给出示例 `0`,没有挂字典/允许值;因此不能伪造“完成/未完成”的值表。当前页面应默认省略,待后端给出该字段的字典定义后再开启开关。
## 已有页面:字段到控件映射
### M02 修改用户资料 — `PUT /genealogy/app/auth/profile`
| 字段 | 必填 | Apifox 详情 | 正确控件与提交 |
| --- | --- | --- | --- |
| `nickName` | 否 | string,用户昵称,最多 30 字 | 文本框,最多 30 字 |
| `realName` | 否 | string,真实姓名,最多 30 字 | 文本框,最多 30 字 |
| `avatar` | 否 | int64,头像文件 OSS ID | 图片上传;仅提交可安全表示的数值 OSS ID |
| `sex` | 否 | `sys_user_sex` | 枚举选择 `0/1/2` |
| `birthday` | 否 | date,生日,格式 `yyyy-MM-dd` | 日期选择器 |
| `email` | 否 | email,最多 100 字 | email 文本框 |
### G03/G11 创建、修改家谱 — `GenealogyCreateBody` / `GenealogyUpdateBody`
| 字段 | 创建必填 | 正确控件与提交 |
| --- | --- | --- |
| `genealogyName` | 是 | 文本框 |
| `surname` | 是 | 文本框 |
| `ancestralHall` | 否 | 文本框 |
| `originPlace` | 否 | 文本框 |
| `regionCode` | 是 | 省市区级联候选选择,提交行政区划 code |
| `addressDetail` | 否 | 文本框 |
| `coverOssId` | 否 | 图片上传,提交字符串 OSS ID |
| `intro` | 否 | 多行文本 |
| `visibility` | 否 | 枚举选择:私密 `0` / 公开 `1` / 成员可见 `2` |
| `joinMode` | 否 | 枚举选择:关闭加入 `0` / 申请审核 `1` / 邀请加入 `2` |
### T04/T05 录入、修改世系人物 — `LineagePersonBody`
同一 body 还用于“添加子女、父母、兄弟姐妹、配偶”。`name` 是唯一 body 必填字段;关系路径由 URL 决定,不能把中文关系标签当成接口字段替代。
| 字段 | 必填 | Apifox 详情/限制 | 正确控件与提交 |
| --- | --- | --- | --- |
| `bindingMode` | 是 | 身份认领方式:`NONE` / `SELF` / `SPECIFIED` | 固定英文枚举选择:不绑定账号 / 绑定当前账号 / 绑定指定用户;不发送中文值 |
| `appUserId` | 视 `bindingMode` 而定 | `NONE` 不绑定账号且不传;`SELF` 绑定当前登录账号且不传,后端从 Token 获取;`SPECIFIED` 绑定指定业务用户且必须传 | 仅 `SPECIFIED` 由管理员选择可信业务用户候选后提交;当前没有候选接口时禁止该选项保存,绝不手输 ID |
| `personNo` | 否 | 人物编号;不传由服务端生成 | 可选文本框;留空时省略 |
| `name` | 是 | 姓名 | 文本框 + 必填校验 |
| `aliasName` | 否 | 别名或曾用名 | 文本框 |
| `sex` | 否 | `sys_user_sex` | 枚举选择:男 `0` / 女 `1` / 未知 `2` |
| `generation` | 否 | int64,世代序号 | 正整数数字框;首位成员固定为 `1` |
| `generationName` | 否 | 字辈或辈分 | 文本框 |
| `fatherId` | 否 | 父亲人物 ID,必须属于当前家谱 | 从 `/lineage/persons/options` 选择父亲,提交人物 ID |
| `motherId` | 否 | 母亲人物 ID,必须属于当前家谱 | 从 `/lineage/persons/options` 选择母亲,提交人物 ID |
| `avatarOssId` | 否 | string/null,头像文件 OSS ID;说明明确要求统一上传组件取得,不允许手工录入 | 图片上传,提交字符串 OSS ID |
| `birthDate` | 否 | date-time/null(写接口示例为 `yyyy-MM-dd` | 日期选择;未录入不传 |
| `birthLunar` | 否 | `gen_number_yes_no` | 枚举选择:否 `0` / 是 `1` |
| `birthPlace` | 否 | 出生地 | 文本框 |
| `deathDate` | 否 | date-time/null(写接口示例为 `yyyy-MM-dd` | 日期选择;未录入不传 |
| `deathLunar` | 否 | `gen_number_yes_no` | 枚举选择:否 `0` / 是 `1` |
| `deathPlace` | 否 | 逝世地 | 文本框 |
| `burialPlace` | 否 | 安葬地 | 文本框 |
| `personStatus` | 否 | `gen_lineage_person_status` | 枚举选择:健在 `0` / 已故 `1` / 未知 `2` |
| `biography` | 否 | 人物简介 | 多行文本 |
| `sortOrder` | 否 | int64,排序值 | 整数数字框 |
| `remark` | 否 | 备注 | 多行文本 |
| `relationName` | 否 | 关系名称 | 新增亲属时由关系选择派生;编辑时可作为文本修订 |
#### 页面实测(2026-07-27
- 此接口字段标为 `date-time`,但四个写接口示例使用 `yyyy-MM-dd`。页面此前把日期追加为 `yyyy-MM-dd HH:mm:ss`,会在客户端 `normalizeLineagePersonDate` 校验阶段被拒绝,尚未发起请求;现已改为只传日期。
- 后端于 2026-07-27 明确补齐身份认领合同:`NONE``SELF` 禁止提交 `appUserId``SELF` 由后端从 Token 取当前 APP 用户;仅 `SPECIFIED` 必须提交 `appUserId`。页面默认 `NONE`,不再自动读取或提交 `profile.userId`
- 同日页面实测 `POST .../children`:请求体为 `bindingMode: "NONE"` 且不存在 `appUserId`,后端仍返回 HTTP 200 / envelope `code:500``发生未知异常,请联系管理员`;三世数据未落库,需后端确认新版写接口是否已部署并排查该业务异常。
### F02 家族圈动态 — `FamilyFeedBody`
| 字段 | 必填 | Apifox 详情 | 正确控件与提交 |
| --- | --- | --- | --- |
| `feedType` | 否 | 动态类型;未传默认 `text` | 当前页面固定传 `text`,不让用户输入代码 |
| `feedContent` | 是 | 动态内容,不允许为空 | 多行文本 + 必填校验 |
| `mediaOssIds` | 否 | 多个文件 OSS ID 用英文逗号分隔 | 多图上传;回执 ID 以 `,` 拼接 |
| `sortOrder` | 否 | int64;未传默认 `0` | 整数数字框 |
| `status` | 否 | `sys_normal_disable` | 正常 `0` / 停用 `1`;创建页默认 `0`,非管理页不暴露停用操作 |
### F06 谱文、F07 相册、F09 相册照片
| body.字段 | 必填 | 正确控件与提交 |
| --- | --- | --- |
| `ArticleBody.categoryId` | 否 | 从“谱文分类”接口候选选择;不手填分类 ID |
| `articleTitle` / `articleSummary` / `authorName` | 标题是 | 分别为文本、多行摘要、文本 |
| `articleContent` | 是 | 富文本/多行内容编辑 |
| `coverOssId` | 否 | 图片上传,字符串 OSS ID |
| `ArticleBody.sortOrder` | 否 | 整数数字框 |
| `ArticleBody.status` | 否 | `sys_normal_disable` 选择,默认 `0` |
| `AlbumBody.albumName` | 是 | 文本框 |
| `albumDesc` | 否 | 多行文本 |
| `coverOssId` | 否 | 图片上传,字符串 OSS ID |
| `AlbumBody.sortOrder` | 否 | 整数数字框 |
| `AlbumBody.status` | 否 | `sys_normal_disable` 选择,默认 `0` |
| `AlbumPhotoBody.ossId` | 是 | 图片上传;提交字符串 OSS ID |
| `photoTitle` / `photoDesc` / `photographer` | 否 | 文本、多行文本、文本 |
| `shootTime` | 否 | 拍摄时间;示例按标准时间字符串 | 日期 + 时间选择 |
| `AlbumPhotoBody.sortOrder` | 否 | 整数数字框 |
| `AlbumPhotoBody.status` | 否 | `sys_normal_disable` 选择,默认 `0` |
### R07 祭祀活动、R04 献礼
| body.字段 | 必填 | 正确控件与提交 |
| --- | --- | --- |
| `CeremonyBody.ceremonyType` | 是 | Apifox 当前为普通 string;文本框,不能自行伪造枚举 |
| `ceremonyTitle` | 是 | 文本框 |
| `ceremonyDesc` | 否 | 多行文本 |
| `ceremonyTime` | 否 | 示例为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 |
| `location` / `locationAddress` | 否 | 地点名称、详细地址文本框;两项都应保留 |
| `longitude` / `latitude` | 否 | decimal 数字框;应由地图选点回填,不能把经纬度当文本 |
| `coverOssId` | 否 | 图片上传,字符串 OSS ID |
| `sortOrder` | 否 | 整数数字框 |
| `status` | 否 | `sys_normal_disable` 选择,默认 `0` |
| `CeremonyGiftBody.giverName` | 否 | 文本框 |
| `giftAmount` | 是 | 金额数字框 |
| `giftMessage` | 否 | 多行文本 |
### R08 成长记录、R09 亲友记录、R10 备忘、R11 功德
| body.字段 | 必填 | Apifox 详情/正确控件 |
| --- | --- | --- |
| `GrowthRecordBody.lineagePersonId` | 否 | 世系人物候选选择,提交人物 ID |
| `recordType` | 否 | 当前详情为普通 string,文本框 |
| `recordTitle` | 是 | 文本框 |
| `recordContent` | 否 | 多行文本 |
| `recordDate` / `remindTime` | 否 | 示例均为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 |
| `mediaOssIds` | 否 | 多图上传,逗号分隔 OSS ID |
| `GrowthRecordBody.sortOrder` / `status` | 否 | 整数数字框;`sys_normal_disable` 选择 |
| `MemoBody.memoTitle` | 是 | 文本框 |
| `memoContent` | 否 | 多行文本 |
| `remindTime` | 否 | 示例为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 |
| `completed` | 否 | 当前仅 string 示例 `0`,无字典;默认省略,不能私设枚举 |
| `MemoBody.mediaOssIds` / `sortOrder` / `status` | 否 | 多图上传;整数数字框;`sys_normal_disable` 选择 |
| `RelativeRecordBody.relativeName` | 是 | 文本框 |
| `relationName` / `eventName` | 否 | 文本框 |
| `eventTime` | 否 | 示例为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 |
| `giftAmount` | 否 | 金额数字框 |
| `recordContent` | 否 | 多行文本 |
| `RelativeRecordBody.mediaOssIds` / `sortOrder` / `status` | 否 | 多图上传;整数数字框;`sys_normal_disable` 选择 |
| `MeritRecordBody.donorName` / `meritTitle` | 是 | 文本框 |
| `meritType` | 否 | 枚举选择:捐赠 `donation` / 修祠 `repair` / 公益 `public` / 其他 `other` |
| `meritContent` | 否 | 多行文本 |
| `amount` | 否 | 金额数字框 |
| `meritTime` | 否 | 示例为 `yyyy-MM-dd HH:mm:ss`;日期 + 时间选择 |
| `MeritRecordBody.sortOrder` / `status` | 否 | 整数数字框;`sys_normal_disable` 选择 |
## 其余写接口:同样必须按字段类型建控件
| 接口 body | 字段映射 |
| --- | --- |
| `GenealogyJoinApplyBody` | `applicantName``phone``relationDesc``applyReason` 为文本/多行文本;`inviterUserId` 必须是业务用户候选选择,当前缺候选接口时不暴露裸 ID 输入。 |
| `GenealogyJoinAuditBody` | `status` 是审核结果,必须由 Apifox 的审核状态字典提供选项后才做选择器;`auditRemark` 多行文本。 |
| `GenealogyMemberUpdateBody` | `memberName``relationName``roleType` 文本;`lineagePersonId` 为世系人物候选选择。 |
| `GenealogyOwnerTransferBody` | `targetMemberId` 必填,家谱成员候选选择。 |
| `GenerationPoemBody` | `generationNo` 必填正整数;`generationText` 必填文本;`description` 多行文本;`sortOrder` 数字;`status``sys_normal_disable`。 |
| `GenerationPoemBatchBody` | `poemText` 必填多行文本;`disableMissing` 布尔开关。 |
| `FamilyFeedCommentBody` | `parentCommentId` 为评论候选/回复上下文,不能输入 ID;`commentContent` 必填多行文本。 |
| `FeedbackBody` | `feedbackType` 当前详情为 string,待字典明确前为文本;`feedbackContent` 必填多行文本;`contactInfo` 文本。 |
| `VipOrderBody` | `packageId` 必填,VIP 套餐候选选择;`genealogyId` 为当前家谱上下文选择;`payType` 只能使用支付方式字典,不能手填代码。 |
| `VideoBody` | `videoTitle` 必填文本,`videoDesc` 多行文本,`coverOssId`/`videoOssId` 为上传,`durationSeconds`/`sortOrder` 为数字,`status``sys_normal_disable`。 |
| `CeremonyInviteesBody` | `inviteeUserIds` 必填多选业务用户候选;无候选接口不能用逗号文本代替数组。 |
| `CeremonyInvitationResponseBody` | `inviteStatus` 必填二选一:接受 `ACCEPTED`、拒绝 `DECLINED`。 |
## 非页面直接填写的底层接口
认证挑战、验证码、分片上传初始化/完成、文件引用等 body 由登录/上传流程生成,不应渲染为业务表单。`grantType``tenantId``challengeId``validToken`、文件 hash/分片大小等由对应流程拥有,不能让用户在页面中编辑。
## 当前改造判定
1. 已经可以立即改为选择控件的字段:`sex`、出生/逝世农历、`personStatus``visibility``joinMode`、所有 `status``meritType`、邀请响应。
2. 必须改为候选选择的字段:所有家谱/成员/世系人物/分类/套餐/受邀用户的 ID 字段。
3. 必须改为上传的字段:所有 `*OssId``mediaOssIds`、头像、封面、照片、视频文件。
4. `completed``feedbackType``payType`、审核 `status` 等尚未在当前 Apifox 字段详情给出允许值;在后端未提供字典或候选接口前,不增加猜测性选择项。