fix: 统一API响应格式并修复前端测试

- 所有Handler方法使用标准{code:0,message:"success",data:...}响应格式
- 修复Cursor分页响应包装(GetAllDevices,GetLoginLogs,ListUsers等)
- 修复AuthHandler和SMSHandler认证方法响应格式
- 修复operation_log.go admin用户operation_type前缀问题
- 修复DashboardPage嵌套stats结构
- 修复LoginLogsPage reset功能stale closure问题
- 修复UsersPage批量操作API调用
- 修复多个前端测试(mock格式、按钮选择、断言逻辑)
- 添加OAuth测试域名白名单
- 新增代码审查流程文档
This commit is contained in:
2026-04-08 20:06:54 +08:00
parent 26c5def4d7
commit a85d822419
33 changed files with 2108 additions and 206 deletions

View File

@@ -33,7 +33,11 @@ func (h *CustomFieldHandler) CreateField(c *gin.Context) {
return
}
c.JSON(http.StatusCreated, field)
c.JSON(http.StatusCreated, gin.H{
"code": 0,
"message": "success",
"data": field,
})
}
// UpdateField 更新自定义字段
@@ -56,7 +60,11 @@ func (h *CustomFieldHandler) UpdateField(c *gin.Context) {
return
}
c.JSON(http.StatusOK, field)
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "success",
"data": field,
})
}
// DeleteField 删除自定义字段
@@ -72,7 +80,10 @@ func (h *CustomFieldHandler) DeleteField(c *gin.Context) {
return
}
c.JSON(http.StatusOK, gin.H{"message": "field deleted"})
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "field deleted",
})
}
// GetField 获取自定义字段
@@ -89,7 +100,11 @@ func (h *CustomFieldHandler) GetField(c *gin.Context) {
return
}
c.JSON(http.StatusOK, field)
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "success",
"data": field,
})
}
// ListFields 获取所有自定义字段
@@ -100,7 +115,11 @@ func (h *CustomFieldHandler) ListFields(c *gin.Context) {
return
}
c.JSON(http.StatusOK, gin.H{"fields": fields})
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "success",
"data": fields,
})
}
// SetUserFieldValues 设置用户自定义字段值
@@ -125,7 +144,10 @@ func (h *CustomFieldHandler) SetUserFieldValues(c *gin.Context) {
return
}
c.JSON(http.StatusOK, gin.H{"message": "field values set"})
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "field values set",
})
}
// GetUserFieldValues 获取用户自定义字段值
@@ -142,5 +164,9 @@ func (h *CustomFieldHandler) GetUserFieldValues(c *gin.Context) {
return
}
c.JSON(http.StatusOK, gin.H{"fields": values})
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "success",
"data": values,
})
}