# 修复加载用户数据失败问题

## 问题分析

### 错误信息
- "加载用户数据失败: Unexpected non-whitespace character after JSON at position 4 (line 1 column 5)"

### 根本原因
1. **客户端**：UserForm.vue调用`fetchUser(userId)`函数，尝试访问`GET /admin/users/:id`接口获取用户详情
2. **服务器端**：在main.go中缺少`GET /users/:id`路由，导致请求被错误处理
3. **响应格式**：服务器返回非JSON格式响应（可能是HTML错误页面），客户端尝试解析为JSON导致解析错误

### 检查结果
- 服务器端存在`adminGetUsers`、`adminCreateUser`、`adminUpdateUser`、`adminDeleteUser`函数
- 缺少`adminGetUser`函数用于处理单个用户详情请求
- 路由配置中缺少`GET /users/:id`路由

## 解决方案

### 修复步骤

1. **创建adminGetUser函数**：
   - 在server/main.go中添加获取单个用户详情的处理函数
   - 调用repositories层的GetUserByID函数（需要检查是否存在）
   - 返回JSON格式的用户详情响应

2. **添加GET /users/:id路由**：
   - 在server/main.go的authAdmin路由组中添加`GET /users/:id`路由
   - 绑定到adminGetUser函数
   - 添加适当的中间件（如RoleMiddleware）

3. **检查repositories层**：
   - 检查是否存在GetUserByID函数
   - 如果不存在，需要创建该函数

4. **测试验证**：
   - 重启服务器
   - 测试编辑用户功能，确保能正确加载用户数据

### 预期效果

- 客户端能成功获取用户详情数据
- 不再出现JSON解析错误
- 用户编辑表单能正确填充现有数据

## 实现细节

### 1. 检查并创建GetUserByID函数

- 检查repositories/user_repository.go是否存在GetUserByID函数
- 如果不存在，创建该函数：
  ```go
  func GetUserByID(id uint) (*models.User, error) {
      // 实现逻辑
  }
  ```

### 2. 创建adminGetUser函数

- 在server/main.go中添加：
  ```go
  // 获取单个用户详情
  func adminGetUser(c *gin.Context) {
      id, err := strconv.ParseUint(c.Param("id"), 10, 32)
      if err != nil {
          c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid user ID"})
          return
      }
      
      user, err := repositories.GetUserByID(uint(id))
      if err != nil {
          c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
          return
      }
      
      c.JSON(http.StatusOK, repositories.BuildUserResponse(user))
  }
  ```

### 3. 添加GET /users/:id路由

- 在server/main.go的authAdmin路由组中添加：
  ```go
  authAdmin.GET("/users/:id", middleware.RoleMiddleware("admin"), adminGetUser)
  ```

### 4. 重启服务器并测试

- 重启服务器使新路由生效
- 访问编辑用户页面，验证能正确加载用户数据

## 风险评估

- 修复后对现有功能无影响
- 仅添加新功能，不修改现有逻辑
- 遵循现有的代码架构和风格
- 与其他资源的详情API保持一致的实现方式