本文记录导游端前端所需接口。登录模块已经接入后端,其他业务模块仍按功能逐步替换 services/ 层中的本地 mock,不要在页面中直接写请求。
/api/guide/**
前端请求层通过 VITE_API_BASE_URL 配置后端地址,默认值为 https://www.mingdao123.com/api。
{
"code": 0,
"message": "success",
"data": {}
}
分页响应:
{
"list": [],
"pageNum": 1,
"pageSize": 20,
"total": 0
}
登录后前端保存后端返回 token。后续请求通过请求头携带:
Authorization: Bearer <token>
当前 mock 登录态保存在本地 storage:mingdao_guide_login_state。
| 值 | 说明 | 首页表现 |
|---|---|---|
pending |
资料已提交,等待平台审核 | 首页显示“资料已提交,请耐心等待审核”;抽屉只显示设置 |
approved |
审核通过 | 首页显示“开始接单”;抽屉显示完整菜单 |
rejected |
审核未通过 | 首页显示“审核未通过,请修改资料并重新提交。”和重新提交按钮;抽屉只显示设置 |
| 值 | 说明 |
|---|---|
offline |
离线 |
online |
在线接单 |
serving |
讲解中 |
busy |
忙碌 |
disabled |
禁用 |
| 值 | 说明 | 前端操作 |
|---|---|---|
pending |
待接单 | 接单 |
accepted |
已接单,待确认客户 | 确认客户到场 |
arrived |
客户已到场 | 开始讲解 |
serving |
讲解中 | 结束讲解 |
completed |
已完成 | 查看详情 |
canceled |
已取消 | 查看详情 |
POST /api/guide/auth/login
请求:
{
"phone": "13800000000",
"code": "123456"
}
响应:
{
"code": 0,
"message": "success",
"data": {
"token": "xxx",
"expiresIn": 604800,
"user": {
"id": 1,
"username": "13800000000",
"realName": "赵明",
"mobile": "13800000000",
"rating": 4.9,
"acceptedOrderCount": 286,
"teamName": "都江堰精讲一团"
}
}
}
前端对接:services/auth.js 的 loginByPhone()。
POST /api/guide/auth/sms-code
请求:
{
"phone": "13800000000",
"scene": "login"
}
响应:
{
"expireSeconds": 300,
"resendSeconds": 30
}
开发环境固定验证码为 123456,无需先发送即可登录;生产环境接入短信供应商后必须清空固定验证码配置,恢复验证码发送、校验和一次性消费流程。
POST /api/guide/registration/sms-code
请求:
{
"phone": "13800000000"
}
POST /api/guide/registration/verify-phone
请求:
{
"phone": "13800000000",
"code": "123456"
}
成功后返回有效期 30 分钟的 registrationToken,后续上传和提交通过请求头携带:
X-Registration-Token: <registrationToken>
GET /api/guide/registration/cities
仅返回后台已启用的运营城市。
POST /api/guide/registration/documents
Content-Type: multipart/form-data
表单文件字段名为 file,支持 JPG、PNG、WebP,单张不超过 5MB。身份证等注册证件仅允许后台管理员鉴权访问。
POST /api/guide/registration/applications
请求:
{
"realName": "赵明",
"gender": 1,
"ageRange": "26-35岁",
"workYearRange": "3-5年",
"guideType": "personal",
"idCardNo": "11010519491231002X",
"idCardFrontUrl": "/uploads/guide-applications/front.jpg",
"idCardBackUrl": "/uploads/guide-applications/back.jpg",
"guideCertificateUrl": "/uploads/guide-applications/guide.jpg",
"qualificationCertificateUrl": "/uploads/guide-applications/qualification.jpg",
"certificateValidUntil": "2027-12-31",
"bankCardNo": "6222021234567890123",
"bankCityId": 1
}
响应数据:
{
"id": 10,
"applicationNo": "GA20260729143000ABC123",
"auditStatus": "pending"
}
手机号或身份证存在待审核/已通过申请时会拒绝重复提交。审核通过后后台创建正式导游账号,申请人再使用手机号验证码登录。
GET /guide/profile
响应字段参考 3.1 登录响应中的 guide。
当前 mock:services/guide.js 的 getGuideProfile()。
PUT /guide/profile
请求:
{
"avatar": "file_avatar_001"
}
响应:
{
"id": "guide_001",
"name": "赵明",
"phone": "13600004562",
"avatar": "https://..."
}
当前 mock:services/guide.js 的 updateGuideProfile(),头像使用 uni.chooseImage() 本地临时路径保存。
POST /guide/profile/change-phone/verify-old
POST /guide/profile/change-phone/confirm-new
旧手机号验证请求:
{
"phone": "13600004562",
"code": "123456"
}
确认新手机号请求:
{
"phone": "13900001111",
"code": "123456"
}
响应:
{
"phone": "13900001111"
}
当前 mock:页面内验证码倒计时和本地资料更新。
PUT /guide/status
请求:
{
"onlineStatus": "online",
"scenicId": "dujiangyan",
"meetingPointId": "south_gate",
"meetingPointLatitude": 31.001472,
"meetingPointLongitude": 103.648278,
"meetingPointAddress": "四川省成都市都江堰市公园路都江堰景区南门",
"serviceIds": ["quick"]
}
响应:
{
"onlineStatus": "online"
}
当前 mock:services/guide.js 的 updateGuideOnlineStatus()。
当 onlineStatus=online 时,前端首页展示接单中状态,读取 receivingConfig.meetingPointName 作为右侧汇合点名称;当 onlineStatus=serving 时,首页展示讲解中状态;当 onlineStatus=offline 时,首页恢复“开始接单”。
首页接单中和讲解中状态需要展示倒计时,前端展示格式为“分钟数:秒数”。正式接口建议由后端返回 countdownSeconds 或基于服务端时间的开始 / 结束时间,避免前端刷新后重置倒计时。
GET /guide/receiving/services
查询参数:
| 参数 | 说明 |
|---|---|
scenicId |
景区 ID |
meetingPointId |
汇合点 ID |
响应:
[
{
"id": "quick",
"title": "快讲",
"duration": "30分钟",
"groupPeople": "20-25人",
"groupPrice": "¥36/人",
"privatePeople": "6人(含)内",
"privatePrice": "¥536/团",
"enabled": true
},
{
"id": "deep",
"title": "精讲",
"duration": "30分钟",
"enabled": false,
"unlockOrderCount": 10,
"unlockRating": 4.5,
"unlockText": "总接单数≥10团,总平均评分 ≥4.5分,可解锁精讲"
}
]
unlockOrderCount、unlockRating 和 unlockText 由后台配置,前端只负责展示;若后端只返回数字,前端可按统一模板拼接文案。
当前 mock:pages/receiving/index.vue 内本地服务类型数组,后续建议下沉到 services/guide.js。
GET /guide/workbench/summary
响应:
{
"todayOrderCount": 6,
"todayPeopleCount": 156,
"pendingCount": 1,
"activeCount": 1,
"completedCount": 1,
"todayIncomeCent": 10080
}
当前 mock:services/order.js 的 getWorkbenchSummary(),页面会按本地订单数量兜底展示。
GET /guide/scenics
响应:
[
{
"id": "dujiangyan",
"name": "都江堰景区",
"city": "成都",
"meetingPoints": [
{
"id": "south_gate",
"name": "都江堰南门",
"guideCount": 6,
"latitude": 31.001472,
"longitude": 103.648278,
"address": "四川省成都市都江堰市公园路都江堰景区南门"
}
]
}
]
当前 mock:services/guide.js 的 getScenics()。
正式接口建议在汇合点配置中始终返回 latitude、longitude、address,前端接单选择页和汇合点详情页都直接依赖这组字段进行地图展示。
GET /guide/orders
查询参数:
| 参数 | 说明 |
|---|---|
status |
可选,订单状态;历史订单页使用 all / accepted / serving / completed 对应全部讲解、接单中、讲解中、已完成 |
pageNum |
页码 |
pageSize |
每页数量 |
列表项建议字段:
{
"id": "MJ20260608001",
"serviceName": "精讲",
"durationMinutes": 30,
"scenicName": "青城山",
"receiveTime": "2026-06-08 16:34:33",
"quantity": 14,
"status": "accepted"
}
当前 mock:services/order.js 的 getGuideOrders(filter)。
GET /guide/orders/pending
当前 mock:services/order.js 的 getPendingOrders()。
GET /guide/orders/current-receiving
用于首页接单中状态展示游客/家庭列表。
响应:
{
"serviceName": "精讲",
"durationMinutes": 30,
"meetingPointName": "青城山-前门",
"lectureStartTime": "15:00",
"countdownSeconds": 900,
"serverTime": "2026-06-17 10:15:00",
"lectureStartAt": "2026-06-17 10:30:00",
"lectureEndAt": "2026-06-17 11:00:00",
"customers": [
{
"groupNo": 1,
"phone": "13600004568",
"peopleCount": 3
}
]
}
字段说明:
| 字段 | 说明 |
|---|---|
countdownSeconds |
当前状态剩余秒数;接单中表示距离开始讲解的剩余时间,讲解中表示距离讲解结束的剩余时间。 |
serverTime |
后端当前时间,用于前端做时间差校准。 |
lectureStartAt |
预计开始讲解时间。 |
lectureEndAt |
预计结束讲解时间。 |
当前 mock:pages/workbench/index.vue 从 getGuideOrders('all') 中临时组装展示数据;正式联调后建议替换为本接口。
GET /guide/orders/{orderId}
当前 mock:services/order.js 的 getOrderDetail(orderId)。
POST /guide/orders/{orderId}/accept
POST /guide/orders/{orderId}/arrive
POST /guide/orders/{orderId}/start
POST /guide/orders/{orderId}/finish
当前 mock:services/order.js 的 updateOrderStatus(orderId, status)。
首页当前讲解中状态暂由 services/guide.js 的 updateGuideOnlineStatus('serving') 驱动;正式联调时应由订单开始 / 结束接口返回最新订单与导游状态。
GET /guide/earnings
查询参数:
| 参数 | 说明 |
|---|---|
orderType |
可选,订单类型,如 quick / deep。 |
scenicId |
可选,景区 ID。 |
date |
可选,日期,格式 YYYY-MM-DD。 |
响应:
{
"todayIncomeCent": 10080,
"monthIncomeCent": 69000,
"withdrawableCent": 59080,
"rows": [
{
"id": "E20260617001",
"scenicName": "青城山",
"serviceName": "精讲",
"orderNo": "MJ20260617001",
"amountCent": 10080,
"status": "待结算",
"time": "2026-06-08 16:43:42"
}
]
}
当前 mock:services/order.js 的 getEarnings(),页面内临时补齐为原型所需展示字段。
GET /api/guide/ratings
查询参数:
| 参数 | 说明 |
|---|---|
date |
可选,日期,格式 YYYY-MM-DD。 |
pageNum |
页码。 |
pageSize |
每页数量。 |
响应:
{
"score": 5.0,
"total": 1,
"pageNum": 1,
"pageSize": 20,
"rows": [
{
"id": "R20260608001",
"dateText": "2026年6月8日",
"score": 5,
"comment": "感觉导游很不错",
"images": ["https://..."]
}
]
}
当前实现:services/rating.js 调用导游评分接口,页面按接口返回的综合评分、评价日期、单条评分、评价内容和图片列表展示。评价图片字段当前返回空数组,待游客端评价图片完成上传及持久化后复用该字段。
POST /guide/files/upload
表单字段:
| 字段 | 说明 |
|---|---|
file |
图片文件 |
bizType |
id_front / id_back / guide_license / guide_cert |
响应:
{
"fileId": "file_001",
"url": "https://..."
}
当前 mock:注册资料页使用 uni.chooseImage() 本地临时路径预览,未上传。
GET /guide/agreements
响应:
[
{
"type": "user",
"title": "用户协议",
"url": "https://...",
"content": ""
},
{
"type": "service",
"title": "讲解服务合作协议",
"url": "https://..."
},
{
"type": "reward",
"title": "平台奖惩机制",
"url": "https://..."
}
]
协议内容可由后端返回 content 富文本 / Markdown,或返回 url 由前端打开 H5/PDF 页面。当前 mock:pages/agreement-detail/index.vue 内本地协议正文。
POST /api/guide/feedback
请求:
{
"content": "希望增加订单消息声音提醒"
}
反馈提交人 ID、姓名和手机号从当前 GUIDE Token 对应的导游账号读取,前端不传用户身份字段。反馈保存到 user_feedback,feedbackType 固定为 GUIDE,可在管理后台意见反馈中查询和处理。
响应:
{
"id": 1,
"feedbackNo": "FB20260729143000123ABCDE",
"feedbackType": "GUIDE",
"content": "希望增加订单消息声音提醒",
"status": 0,
"feedbackAt": "2026-07-29T14:30:00"
}
当前 mock:pages/feedback/index.vue 做本地空内容校验和提交提示。
POST /guide/account/cancel
当前 mock:设置页仅 Toast 占位;退出登录复用本地 services/auth.js 的 logout()。
接口变更时在本节追加,保留日期和变更原因。
| 日期 | 变更 |
|---|---|
| 2026-06-17 | 建立导游端接口文档初版,按当前 mock service 和页面状态整理。 |
| 2026-06-17 | 首页当前接单接口补充倒计时字段,支持接单中 / 讲解中以“分钟数:秒数”展示剩余时间。 |
| 2026-06-17 | 收益接口补充订单类型、景区、日期筛选参数和业绩明细展示字段。 |
| 2026-06-17 | 订单列表接口补充历史订单页筛选值和列表展示字段。 |
| 2026-06-17 | 新增我的评分接口草案,支持综合评分、日期筛选、评价文字和图片列表。 |
| 2026-06-17 | 新增个人资料更新和更换手机号接口草案,支持头像更新和旧号/新号两步验证。 |
| 2026-06-17 | 新增协议列表、意见反馈、注销账户接口草案,对应个人中心抽屉入口。 |
| 2026-06-17 | 协议接口补充正文内容说明,前端新增本地协议详情 mock。 |