meta { name: 页内批量编辑 type: http seq: 3 tags: [ generated ] } post { url: {{baseUrl}}/api/customer/contact/batchEdit body: formUrlEncoded auth: inherit } body:form-urlencoded { rows[0].id: 753314906073202688 rows[0].jobTitleCode: chairman } docs { # 页内批量编辑 `POST /api/customer/contact/batchEdit`(本行兼作对账钥匙,勿手改) 原子批:任一行校验失败零落库并返回失败明细(前端定位首个错误行);字段 null=不改;phone 脱敏回显形态(含*)提交=不修改,要改号先 reveal 明文;职务变更按 D2 联动 level(字典跟随重算/手工锁定不动)+ bump 图谱版本。「只改当前页」由前端提交集合表达,后端无页语义。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | rows[i].id | string | 是 | - | 联系人 id | | rows[i].name | string | 否 | - | 姓名(null=不改;提交则须非空) | | rows[i].jobTitleCode | string | 否 | - | 标准职务字典 code(null=不改;变更走 D2 联动重算 level) | | rows[i].phone | string | 否 | - | 手机号:null=不改;脱敏形态(含*)=不改(回显原样提交);明文=修改;空串=清空 | | rows[i].source | string | 否 | - | 来源字典 code(null=不改) | | rows[i].isKeyContact | number | 否 | - | 是否关键联系人(null=不改) | ## 请求示例 请求头:Authorization: Bearer {{token}} Content-Type: application/x-www-form-urlencoded POST /api/customer/contact/batchEdit rows[0].id=753314906073202688&rows[0].jobTitleCode=chairman ## 响应 data 结构 | 字段 | 类型 | 说明 | | --- | --- | --- | | successCount | number | 成功行数(原子批:全过=N,任一失败=0) | | failedRows | array | 失败行明细(空=全部成功) | | failedRows[].rowIndex | number | 行号(提交数组下标,从 0 计) | | failedRows[].reason | string | 失败原因(行级校验/查重提示) | ## 错误码 - 67008 联系人入参非法/不存在或不属于该客户 - 67022 页内批量编辑整批不可用(行集空;行级失败走结果明细零落库) ## 响应示例 // 示例数据(E2E 实测真值),字段结构以上表为准 ```json { "code": 0, "success": true, "message": "success", "data": { "successCount": 1, "failedRows": [] } } ``` }