Files
ipad/API.md
2025-12-01 10:25:27 +08:00

9.6 KiB
Raw Permalink Blame History

API文档

URL 以及 接口结构仅供参考。无需完全对应

接口定义JSON 请求 / 响应)

1.1 发送验证码 POST /api/v1/auth/send-code

  • 传入 手机号
  • 请求
{
  "phone": "18888888888"
}
  • 响应
{
  "code": 200,
  "message": "验证码已发送",
  "data": {
    "expiresIn": 300
  }
}

1.2 登录 POST /api/v1/auth/login

  • 传入 手机号 验证码
  • 请求
{
  "phone": "18888888888",
  "code": "123456"
}
  • 响应
{
  "code": 200,
  "message": "登录成功",
  "data": {
    "token": "jwt-token",
    "user": {
      "id": "user_001",
      "name": "操作员",
      "role": "admin",
      "permissions": [
        "view_revenue",
        "view_exam",
        "manage_meal_status",
        "edit_notes"
      ]
    }
  }
}

2.1 获取今日体检统计 GET /api/v1/home/daily-stats

  • 获取:今日预约人数 已签到人数 在检人数 已打印导检单数量 已完成人数 已用餐人数
  • 响应
{
  "code": 200,
  "data": {
    "dailyAppointment": 80,
    "signedIn": 60,
    "inExam": 25,
    "guidePrinted": 40,
    "completed": 30,
    "meal": 15
  }
}

3.1 获取营收统计(管理员)GET /api/v1/home/revenue-stats

  • 获取:体检收入 加项收入 整体收入 目标收入
  • 响应
{
  "code": 200,
  "data": {
    "examRevenue": 86000,
    "addonRevenue": 12400,
    "totalRevenue": 98400,
    "targetRevenue": 120000,
    "gap": 21600
  }
}

4.1 获取 B1 数据 GET /api/v1/home/b1-dashboard

  • 获取:当前客户总数 待检人数 在检人数
  • 列表:科室 医生 已检人数 已检部位数 总时长 平均时长
  • 响应
{
  "code": 200,
  "data": {
    "summary": {
      "totalClients": 33,
      "waiting": 10,
      "inExam": 10
    },
    "rows": [
      {
        "department": "B超1",
        "doctor": "张医生",
        "examinedCount": 6,
        "examinedParts": 18,
        "totalDuration": 90,
        "avgDuration": 15,
        "inExam": 2,
        "waiting": 2
      }
    ]
  }
}

5.1 获取北3数据 GET /api/v1/home/north3-dashboard

  • 获取:今日家医生数 分配客户数 面诊数
  • 列表:家医 面诊率 分配客户数 面诊数
  • 响应
{
  "code": 200,
  "data": {
    "summary": {
      "totalDoctors": 3,
      "totalAssigned": 45,
      "consultations": 26
    },
    "rows": [
      {
        "doctor": "刘医生",
        "assignmentCount": 15,
        "consultations": 9,
        "consultRate": 0.6
      }
    ]
  }
}

7.1 获取体检客户列表 GET /api/v1/exam/clients

  • 条件:时间段,如 8:00 ~ 12:00 到 12:00 ~ 17:00或者上午0下午1
  • 条件:用户等级,如高客 普客 散客 团客
  • 条件:登记情况,如已登记 未登记
  • 获取:套餐名称 渠道 状态 签到时间(耗时起始时间) 是否已签到 已加项数量 是否打印体检单
  • 查询参数
{
  "timeRange": "08:00-12:00",
  "level": "高客",
  "customerType": "团客",
  "signStatus": "已登记",
  "search": "张",
  "page": 1,
  "pageSize": 20
}
  • 响应
{
  "code": 200,
  "data": {
    "total": 100,
    "page": 1,
    "pageSize": 20,
    "list": [
      {
        "id": "A001",
        "name": "张伟",
        "packageName": "高端入职体检套餐",
        "channel": "团体客户",
        "status": "体检中",
        "signedIn": true,
        "signTime": "2025-11-18 08:55",
        "elapsed": "00:45",
        "addonCount": 2,
        "guidePrinted": true,
        "timeSlot": "上午",
        "level": "VIP",
        "vipType": "高客",
        "customerType": "团客"
      }
    ]
  }
}

8.1 获取体检客户详情 GET /api/v1/exam/clients/{clientId}

  • 基础信息:姓名 身份证 手机号 性别 年龄 客户级别 渠道 婚姻 家医 团标签
  • 体检进度:已查项目 未查项目 弃检项目 延期项目
  • 历史记录
  • 加项内容
  • 该次体检是否上传身份证(或已上传的身份证信息)
  • 该次体检是否已签名(或已上传的签名图片)
  • 体检知情同意书
  • 可选的加项列表(可以用字段表明已经支付后的加项)
  • 导检单PDF
  • 响应
{
  "code": 200,
  "data": {
    "id": "A001",
    "basicInfo": {
      "name": "张伟",
      "idCard": "4401********1234",
      "mobile": "137****9988",
      "gender": "男",
      "age": 35,
      "level": "VIP",
      "channel": "团检",
      "maritalStatus": "未婚",
      "familyDoctor": "李医生",
      "groupTag": "团检"
    },
    "progress": {
      "checkedItems": ["签到", "更衣"],
      "pendingItems": ["家医面诊"],
      "abandonedItems": [],
      "deferredItems": []
    },
    "history": [],
    "addonSummary": [
      {
        "name": "肿瘤标志物筛查",
        "paid": true,
        "tags": [
          {
            "title": "热门",
            "type": 1,
          },
          {
            "title": "肺结节筛查",
            "type": 2,
          },
          {
            "title": "医生推荐",
            "type": 3,
          },
          {
            "title": "渠道八折",
            "type": 4,
          }
        ],
        "originalPrice": "320.00",
        "currentPrice": "240.00"
      }
    ],
    "idCardUploaded": true,
    "idCardImages": {
      "front": "https://...",
      "back": "https://..."
    },
    "consentSigned": true,
    "consentImage": "https://...",
    "consentDocumentUrl": "https://...",
    "addonOptions": [
      {
        "id": "addon_001",
        "name": "甲状腺彩超",
        "price": 300,
        "paid": false
      }
    ],
    "guidePdfUrl": "https://example.com/guides/A001.pdf"
  }
}

8.2 上传身份证 POST /api/v1/exam/clients/{clientId}/id-card

  • 具体用户上传身份证正面、反面
  • 请求
{
  "frontImage": "base64-front",
  "backImage": "base64-back"
}
  • 响应
{
  "code": 200,
  "message": "身份证上传成功"
}

8.5 上传体检同意书签名 POST /api/v1/exam/clients/{clientId}/consent

  • 上传体检同意书签名图片
  • 请求
{
  "signatureImage": "base64-signature",
  "documentVersion": "v1.0"
}
  • 响应
{
  "code": 200,
  "message": "签名已保存"
}

8.6 生成加项订单 POST /api/v1/exam/clients/{clientId}/addon-orders

  • 选择加项内容后获取订单号以及支付二维码
  • 请求
{
  "addonIds": ["addon_001", "addon_002"],
  "paymentMethod": "wechat_qr", // 如果是聚合码则取消
}
  • 响应
{
  "code": 200,
  "data": {
    "orderId": "order_001",
    "amount": 800,
    "qrcodeUrl": "https://example.com/pay/order_001.png",
    "expiresIn": 300
  }
}

8.7 查询订单支付状态 GET /api/v1/payments/{orderId}

  • 根据订单号查询 是否已经支付成功HTTP或SSE
  • 响应
{
  "code": 200,
  "data": {
    "orderId": "order_001",
    "status": "paid",
    "paidAt": "2025-11-18T09:20:00+08:00"
  }
}
  • SSE可选 GET /api/v1/payments/{orderId}/events
    • 服务端推送字段:event=status, data={"status":"paid"}

9.0 获取客服咨询信息 GET /api/v1/support/info

  • 获取 标题 内容 图片
  • 响应
{
  "code": 200,
  "data": {
    "title": "客服咨询 · 圆圆客服台卡",
    "content": "一站式健康服务说明",
    "imageUrl": "https://example.com/assets/support-card.png"
  }
}

9.1 获取用餐状态列表 GET /api/v1/meals

  • 条件 全部 已用餐 未用餐 姓名 体检号
  • 查询参数
{
  "status": "all",
  "clientName": "张",
  "clientId": "A001"
}
  • 响应
{
  "code": 200,
  "data": [
    {
      "id": "A001",
      "name": "张伟",
      "status": "体检中",
      "mealStatus": "done",
      "mealTime": "2025-11-18 09:30"
    }
  ]
}

9.2 更新用餐状态 POST /api/v1/meals/{clientId}

  • 更新指定用户用餐状态
  • 请求
{
  "mealStatus": "done"
}
  • 响应
{
  "code": 200,
  "message": "用餐状态已更新"
}

9.3 获取太平 VIP 认证二维码 GET /api/v1/support/taiping-vip

  • 获取 标题 内容 图片
  • 响应
{
  "code": 200,
  "data": {
    "title": "太平 VIP 认证",
    "content": "扫描二维码完成认证",
    "imageUrl": "https://example.com/assets/taiping-vip.png"
  }
}

10.1 获取报告寄送登记二维码 GET /api/v1/support/report-delivery

  • 获取 客服名称 图片
  • 响应
{
  "code": 200,
  "data": {
    "serviceName": "圆圆客服",
    "imageUrl": "https://example.com/assets/delivery-qrcode.png"
  }
}

10.2 报告寄送登记 POST /api/v1/support/report-delivery

  • 传入 收件人 手机号 地址
  • 请求
{
  "recipient": "李四",
  "phone": "13800000000",
  "address": "上海市浦东新区世纪大道100号10楼",
  "remark": "加急寄送"
}
  • 响应
{
  "code": 200,
  "message": "寄送信息已保存",
  "data": {
    "deliveryId": "delivery_001"
  }
}

10.3 保存操作员备注 POST /api/v1/notes

  • 保存操作员备注内容
  • 请求
{
  "operatorId": "user_001",
  "content": "客户希望下午完成全部项目"
}
  • 响应
{
  "code": 200,
  "message": "备注已保存"
}

10.4 获取操作员备注 GET /api/v1/notes

  • 获取操作员备注内容
  • 响应
{
  "code": 200,
  "data": [
    {
      "operatorId": "user_001",
      "content": "客户希望下午完成全部项目",
      "createdAt": "2025-11-18 10:00:00"
    }
  ]
}