突眼日记接口文档
一、接口概览
1.1 基本信息
- 模块名称: 突眼日记
- 控制器路径: modules\xd_frontend\controllers\ProtrusionController
- 接口前缀: ?r=xd/protrusion
- 请求方式: 需要登录(Header中传入loginState)
1.2 响应格式
// 成功响应
{
"code": 0,
"data": {
// 业务数据
}
}
// 失败响应
{
"code": 1,
"msg": "错误信息"
}
二、接口详情
2.1 获取基准照状态
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/baseline-status |
| 请求方式 |
GET |
| 是否需要登录 |
是 |
响应示例
{
"code": 0,
"data": {
"hasBaseline": true,
"baselineRecordId": 1
}
}
返回字段说明
| 字段名 |
类型 |
说明 |
| hasBaseline |
bool |
是否已设置基准照 |
| baselineRecordId |
int |
基准照记录ID(无则为0) |
2.2 获取记录列表
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/record-list |
| 请求方式 |
GET |
| 是否需要登录 |
是 |
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| page |
int |
否 |
页码,默认1 |
| pageSize |
int |
否 |
每页数量,默认10 |
响应示例
{
"code": 0,
"data": {
"list": [
{
"recordId": 1,
"recordDate": "2026-04-10",
"isBaseline": 1,
"treatmentCount": 3,
"leftEye": 18.5,
"rightEye": 19.0,
"interorbitalDistance": 95.0,
"photoCount": 8,
"firstPhoto": "http://example.com/photo1.jpg",
"uploadCompleted": 0
}
],
"pages": 2,
"count": 15,
"page": 1
}
}
返回字段说明
| 字段名 |
类型 |
说明 |
| recordId |
int |
记录ID |
| recordDate |
string |
记录日期 |
| isBaseline |
int |
是否为基准照(0-否 1-是) |
| treatmentCount |
int |
替妥尤单抗使用次数 |
| leftEye |
float |
左眼凸眼度(mm) |
| rightEye |
float |
右眼凸眼度(mm) |
| interorbitalDistance |
float |
框间距(mm) |
| photoCount |
int |
已上传照片数量 |
| firstPhoto |
string |
第一张图片URL |
| uploadCompleted |
int |
记录完整性(0-未完成 1-已完成) |
| pages |
int |
总页数 |
| count |
int |
总记录数 |
| page |
int |
当前页码 |
2.3 新增记录
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/record-add |
| 请求方式 |
POST |
| 是否需要登录 |
是 |
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| recordDate |
string |
是 |
记录日期,格式YYYY-MM-DD |
| isBaseline |
int |
否 |
是否为基准照(0-否 1-是),默认0 |
| treatmentCount |
int |
否 |
替妥尤单抗使用次数(0-9),默认0 |
| leftEye |
float |
否 |
左眼凸眼度(mm) |
| rightEye |
float |
否 |
右眼凸眼度(mm) |
| interorbitalDistance |
float |
否 |
框间距(mm) |
| frontOpen |
string |
否 |
正面睁眼照片URL |
| frontClose |
string |
否 |
正面闭眼照片URL |
| frontUp |
string |
否 |
正面仰头照片URL |
| sideLeft90 |
string |
否 |
90°左侧照片URL |
| sideRight90 |
string |
否 |
90°右侧照片URL |
| sideLeft45 |
string |
否 |
45°左侧照片URL |
| sideRight45 |
string |
否 |
45°右侧照片URL |
| eyeUpLeft |
string |
否 |
左上眼球照片URL |
| eyeUp |
string |
否 |
向上眼球照片URL |
| eyeUpRight |
string |
否 |
右上眼球照片URL |
| eyeLeft |
string |
否 |
向左眼球照片URL |
| eyeRight |
string |
否 |
向右眼球照片URL |
| eyeDownLeft |
string |
否 |
左下眼球照片URL |
| eyeDown |
string |
否 |
向下眼球照片URL |
| eyeDownRight |
string |
否 |
右下眼球照片URL |
响应示例
{
"code": 0,
"data": {
"recordId": 1
}
}
返回字段说明
| 字段名 |
类型 |
说明 |
| recordId |
int |
新增记录的ID |
2.4 更新记录
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/record-update |
| 请求方式 |
POST |
| 是否需要登录 |
是 |
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| recordId |
int |
是 |
记录ID |
| recordDate |
string |
否 |
记录日期,格式YYYY-MM-DD |
| isBaseline |
int |
否 |
是否为基准照(0-否 1-是) |
| treatmentCount |
int |
否 |
替妥尤单抗使用次数(0-9) |
| leftEye |
float |
否 |
左眼凸眼度(mm) |
| rightEye |
float |
否 |
右眼凸眼度(mm) |
| interorbitalDistance |
float |
否 |
框间距(mm) |
| frontOpen |
string |
否 |
正面睁眼照片URL |
| frontClose |
string |
否 |
正面闭眼照片URL |
| frontUp |
string |
否 |
正面仰头照片URL |
| sideLeft90 |
string |
否 |
90°左侧照片URL |
| sideRight90 |
string |
否 |
90°右侧照片URL |
| sideLeft45 |
string |
否 |
45°左侧照片URL |
| sideRight45 |
string |
否 |
45°右侧照片URL |
| eyeUpLeft |
string |
否 |
左上眼球照片URL |
| eyeUp |
string |
否 |
向上眼球照片URL |
| eyeUpRight |
string |
否 |
右上眼球照片URL |
| eyeLeft |
string |
否 |
向左眼球照片URL |
| eyeRight |
string |
否 |
向右眼球照片URL |
| eyeDownLeft |
string |
否 |
左下眼球照片URL |
| eyeDown |
string |
否 |
向下眼球照片URL |
| eyeDownRight |
string |
否 |
右下眼球照片URL |
响应示例
{
"code": 0,
"data": {
"success": true
}
}
2.5 获取记录详情
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/record-detail |
| 请求方式 |
GET |
| 是否需要登录 |
是 |
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| recordId |
int |
是 |
记录ID |
响应示例
{
"code": 0,
"data": {
"recordId": 1,
"recordDate": "2026-04-10",
"isBaseline": 1,
"treatmentCount": 3,
"leftEye": 18.5,
"rightEye": 19.0,
"interorbitalDistance": 95.0,
"photoCount": 15,
"uploadCompleted": 1,
"frontOpen": "http://example.com/photo1.jpg",
"frontClose": "http://example.com/photo2.jpg",
"frontUp": "http://example.com/photo3.jpg",
"sideLeft90": "http://example.com/photo4.jpg",
"sideRight90": "http://example.com/photo5.jpg",
"sideLeft45": "http://example.com/photo6.jpg",
"sideRight45": "http://example.com/photo7.jpg",
"eyeUpLeft": "http://example.com/photo8.jpg",
"eyeUp": "http://example.com/photo9.jpg",
"eyeUpRight": "http://example.com/photo10.jpg",
"eyeLeft": "http://example.com/photo11.jpg",
"eyeRight": "http://example.com/photo12.jpg",
"eyeDownLeft": "http://example.com/photo13.jpg",
"eyeDown": "http://example.com/photo14.jpg",
"eyeDownRight": "http://example.com/photo15.jpg",
"frontOpenName": "正面睁眼",
"frontCloseName": "正面闭眼",
"frontUpName": "正面仰头",
"sideLeft90Name": "90°左侧",
"sideRight90Name": "90°右侧",
"sideLeft45Name": "45°左侧",
"sideRight45Name": "45°右侧",
"eyeUpLeftName": "左上",
"eyeUpName": "向上",
"eyeUpRightName": "右上",
"eyeLeftName": "向左",
"eyeRightName": "向右",
"eyeDownLeftName": "左下",
"eyeDownName": "向下",
"eyeDownRightName": "右下",
"createdAt": "2026-04-10 10:00:00"
}
}
返回字段说明
| 字段名 |
类型 |
说明 |
| recordId |
int |
记录ID |
| recordDate |
string |
记录日期 |
| isBaseline |
int |
是否为基准照 |
| treatmentCount |
int |
替妥尤单抗使用次数 |
| leftEye |
float |
左眼凸眼度 |
| rightEye |
float |
右眼凸眼度 |
| interorbitalDistance |
float |
框间距 |
| photoCount |
int |
已上传照片数量 |
| uploadCompleted |
int |
记录完整性 |
| frontOpen |
string |
正面睁眼照片URL |
| frontClose |
string |
正面闭眼照片URL |
| frontUp |
string |
正面仰头照片URL |
| sideLeft90 |
string |
90°左侧照片URL |
| sideRight90 |
string |
90°右侧照片URL |
| sideLeft45 |
string |
45°左侧照片URL |
| sideRight45 |
string |
45°右侧照片URL |
| eyeUpLeft |
string |
左上眼球照片URL |
| eyeUp |
string |
向上眼球照片URL |
| eyeUpRight |
string |
右上眼球照片URL |
| eyeLeft |
string |
向左眼球照片URL |
| eyeRight |
string |
向右眼球照片URL |
| eyeDownLeft |
string |
左下眼球照片URL |
| eyeDown |
string |
向下眼球照片URL |
| eyeDownRight |
string |
右下眼球照片URL |
| frontOpenName |
string |
正面睁眼名称 |
| frontCloseName |
string |
正面闭眼名称 |
| frontUpName |
string |
正面仰头名称 |
| sideLeft90Name |
string |
90°左侧名称 |
| sideRight90Name |
string |
90°右侧名称 |
| sideLeft45Name |
string |
45°左侧名称 |
| sideRight45Name |
string |
45°右侧名称 |
| eyeUpLeftName |
string |
左上名称 |
| eyeUpName |
string |
向上名称 |
| eyeUpRightName |
string |
右上名称 |
| eyeLeftName |
string |
向左名称 |
| eyeRightName |
string |
向右名称 |
| eyeDownLeftName |
string |
左下名称 |
| eyeDownName |
string |
向下名称 |
| eyeDownRightName |
string |
右下名称 |
| createdAt |
string |
创建时间 |
2.6 删除记录
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/record-delete |
| 请求方式 |
POST |
| 是否需要登录 |
是 |
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| recordId |
int |
是 |
记录ID |
响应示例
{
"code": 0,
"data": {
"success": true
}
}
注意: 删除为软删除,仅更新状态,不实际删除数据
2.7 获取可对比记录列表
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/compare-date-list |
| 请求方式 |
GET |
| 是否需要登录 |
是 |
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| angle |
string |
是 |
照片角度标识 |
响应示例
{
"code": 0,
"data": {
"angleName": "正面睁眼",
"recordList": [
{
"recordId": 5,
"recordDate": "2026-04-10"
},
{
"recordId": 8,
"recordDate": "2026-05-15"
}
]
}
}
返回字段说明
| 字段名 |
类型 |
说明 |
| angleName |
string |
当前角度中文名称 |
| recordList |
array |
记录列表(不包含基准照) |
| recordId |
int |
记录ID |
| recordDate |
string |
记录日期 |
2.8 获取对比详情
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/compare-detail |
| 请求方式 |
GET |
| 是否需要登录 |
是 |
请求参数
| 参数名 |
类型 |
必填 |
说明 |
| angle |
string |
是 |
照片角度标识 |
| recordIds |
string |
是 |
记录ID,多个用逗号分隔 |
响应示例
{
"code": 0,
"data": {
"angleName": "正面睁眼",
"baselineRecord": {
"recordId": 1,
"recordDate": "2026-01-01",
"treatmentCount": 0,
"leftEye": 20.0,
"rightEye": 20.5,
"interorbitalDistance": 100.0,
"photoUrl": "http://example.com/baseline.jpg"
},
"compareRecords": [
{
"recordId": 5,
"recordDate": "2026-04-10",
"treatmentCount": 3,
"leftEye": 18.5,
"rightEye": 19.0,
"interorbitalDistance": 95.0,
"photoUrl": "http://example.com/compare1.jpg"
},
{
"recordId": 8,
"recordDate": "2026-05-15",
"treatmentCount": 5,
"leftEye": 17.5,
"rightEye": 18.0,
"interorbitalDistance": 92.0,
"photoUrl": "http://example.com/compare2.jpg"
}
]
}
}
返回字段说明
| 字段名 |
类型 |
说明 |
| angleName |
string |
当前角度中文名称 |
| baselineRecord |
object |
基准照记录 |
| compareRecords |
array |
对比记录列表 |
2.9 获取角度选项
| 项目 |
内容 |
| 接口路径 |
?r=xd/protrusion/angle-options |
| 请求方式 |
GET |
| 是否需要登录 |
否 |
响应示例
{
"code": 0,
"data": {
"frontOpen": "正面睁眼",
"frontClose": "正面闭眼",
"frontUp": "正面仰头",
"sideLeft90": "90°左侧",
"sideRight90": "90°右侧",
"sideLeft45": "45°左侧",
"sideRight45": "45°右侧",
"eyeUpLeft": "左上",
"eyeUp": "向上",
"eyeUpRight": "右上",
"eyeLeft": "向左",
"eyeRight": "向右",
"eyeDownLeft": "左下",
"eyeDown": "向下",
"eyeDownRight": "右下"
}
}
三、错误码说明
| 错误码 |
说明 |
| 0 |
成功 |
| 1 |
通用错误 |
| 403 |
需要登录 |
四、注意事项
- UserId获取: 用户ID从登录上下文中自动获取,无需传入
- 基准照唯一性: 设置新基准照时,系统会自动取消之前的基准照
- 照片上传: 照片为URL链接,物理文件存储在其他服务器
- 软删除: 删除记录采用软删除方式
- 记录完整性: 当photoCount达到15时,uploadCompleted自动变为1