工作手机模式切换
需求文档 v1.1 · 2026-05-21
概述与功能
实现工作手机解绑与恢复普通设备功能。服务端通过 code 或 status 下发指令,客户端执行相应操作。
状态定义
设备状态用 status 表示,取值范围 1-4:
| 状态 | 说明 | 客户端动作 |
|---|---|---|
| 1 | 工作手机模式 | 保持当前状态,正常工作 |
| 2 | 需要卸载工作APP | 卸载APP及相关配置,转为普通手机 |
| 3 | 普通手机模式 | 保持当前状态,正常工作 |
| 4 | 需要安装工作APP | 退出App,等待重新安装 |
核心流程
流程一:工作手机 → 普通设备
管理后台点击「恢复普通设备」→ 服务端下发 status=2 → 客户端卸载SCRM/CRM等应用 → 清理配置 → 上报 status=3 → 退出登录。
- 操作入口:WEB管理后台 → 设备详情 → 「恢复普通设备」按钮
- 下发指令:
status=2(需要卸载工作APP) - 客户端执行:卸载SCRM/CRM/拨号应用、关闭号码隐藏/GPS/录音/应用双开/工厂模式、开启原生拨号、停用黑名单/WIFI白名单
- 上报结果:卸载完成后调用
reportResult上报status=3(普通手机模式),随后登出
流程二:普通设备 → 工作手机
管理后台点击「恢复工作手机」→ 服务端下发 status=4 → 客户端上报 status=1 → 退出App → 重新进入后走正常工作手机流程。
- 操作入口:WEB管理后台 → 设备详情 → 「恢复工作手机」按钮
- 下发指令:
status=4(需要安装工作APP) - 客户端执行:本地缓存设为1,直接退出App(
App.exit()) - 上报结果:退出前调用
reportResult上报status=1(工作手机模式) - 恢复完成:App重新启动后走正常登录流程(本地缓存已是1,不进入重置流程)
解绑(独立功能)
解绑是不管当前设备状态如何,直接解除工作手机与设备的绑定关系。与上述两个流程独立。
- 解绑后设备需要登出
- 任意接口请求返回
code=3 - 必须删除 session
服务端解绑/恢复流程(管理后台操作)
flowchart TD
subgraph flow1[工作手机 → 普通设备]
A1["status=1
工作手机模式"] --> A2["管理员点击
恢复普通设备"] A2 --> A3["下发 status=2
需要卸载APP"] A3 --> A4["卸载SCRM/CRM
清理配置"] A4 --> A5["上报 status=3
reportResult"] A5 --> A6["status=3
普通手机模式"] end subgraph flow2[普通设备 → 工作手机] B1["status=3
普通手机模式"] --> B2["管理员点击
恢复工作手机"] B2 --> B3["下发 status=4
需要安装APP"] B3 --> B4["上报 status=1
退出App"] B4 --> B5["重新登录"] B5 --> B6["status=1
工作手机模式"] end
工作手机模式"] --> A2["管理员点击
恢复普通设备"] A2 --> A3["下发 status=2
需要卸载APP"] A3 --> A4["卸载SCRM/CRM
清理配置"] A4 --> A5["上报 status=3
reportResult"] A5 --> A6["status=3
普通手机模式"] end subgraph flow2[普通设备 → 工作手机] B1["status=3
普通手机模式"] --> B2["管理员点击
恢复工作手机"] B2 --> B3["下发 status=4
需要安装APP"] B3 --> B4["上报 status=1
退出App"] B4 --> B5["重新登录"] B5 --> B6["status=1
工作手机模式"] end
API 接口
3.1 查询设备状态
POST /service/bill/checkPending
{
"imei": "864379040123456"
}
| 字段 | 类型 | 说明 |
|---|---|---|
| imei | string | 设备IMEI |
响应
{
"status": 1,
"success": true
}
| 字段 | 类型 | 说明 |
|---|---|---|
| status | int | 期望状态(1/2/3/4) |
| success | boolean | 是否成功 |
3.2 上报设备状态
POST /service/bill/reportResult
{
"imei": "864379040123456",
"status": 3
}
| 字段 | 类型 | 说明 |
|---|---|---|
| imei | string | 设备IMEI |
| status | int | 已完成状态:工作→普通设备上报3,普通→工作手机上报1 |
响应
{
"success": true
}
WEB端改动
4.1 设备列表解绑
功能:在设备列表中对工作手机进行解绑操作
- 设备列表增加"解绑"按钮
- 点击后弹出确认框
- 解绑成功后设备状态变更
4.2 设备详情恢复普通设备
功能:在设备详情页将工作手机恢复为普通设备
- 设备详情页增加"恢复普通设备"按钮
- 点击后下发
status=2指令 - 客户端完成卸载后上报
status=3
4.3 设备详情恢复工作手机
功能:在设备详情页将普通手机恢复为工作手机
- 设备详情页增加"恢复工作手机"按钮(设备状态为3时显示)
- 点击后下发
status=4指令 - 客户端上报
status=1后退出App重新进入
4.4 账号设置中批量操作
功能:在账号设置中支持批量解绑和批量恢复
| 功能 | 说明 |
|---|---|
| 全部解绑 | 将该账号下所有工作手机解绑 |
| 全部恢复普通设备 | 将该账号下所有工作手机恢复为普通设备 |
开发任务清单
APP端
| 任务 | 优先级 | 说明 |
|---|---|---|
| checkPending接口调用 | P0 | 查询设备状态 |
| reportResult接口调用 | P0 | 上报设备状态 |
| status=2时处理 | P0 | 卸载APP删除Session |
| status=4时处理 | P0 | 退出App等待安装 |
| code=3时处理 | P0 | 清除本地登录状态跳转登录页 |
Service端
| 任务 | 优先级 | 说明 |
|---|---|---|
| checkPending接口 | P0 | POST /service/bill/checkPending |
| reportResult接口 | P0 | POST /service/bill/reportResult |
| 解绑后返回code=3 | P0 | 任意接口返回code=3 |
| 删除session | P0 | 解绑和恢复时删除 |
| IMEI维度状态查询 | P0 | 支持IMEI维度的状态查询 |
| 上报接口幂等 | P0 | 上报接口支持幂等 |
WEB端
| 任务 | 优先级 | 说明 |
|---|---|---|
| 设备列表解绑按钮 | P0 | 设备列表增加"解绑"按钮 |
| 解绑确认弹窗 | P0 | 点击后弹出确认框 |
| 设备状态变更 | P0 | 解绑成功后设备状态变更 |
| 设备详情恢复按钮 | P0 | 设备详情页增加"恢复普通设备"按钮 |
| 下发status=2指令 | P0 | 点击后下发status=2指令 |
| 下发status=4指令 | P0 | 普通手机恢复工作手机,下发status=4 |
| 客户端回调处理 | P0 | 客户端完成操作后回调 |
| 账号设置全部解绑 | P0 | 批量解绑该账号下所有工作手机 |
| 账号设置全部恢复 | P0 | 批量恢复为普通设备 |
验收标准
| 验收项 |
|---|
| 提供 POST /service/bill/checkPending 接口 |
| 提供 POST /service/bill/reportResult 接口 |
| 解绑接口返回 code=3 时必须删除 session |
| 解绑后任意接口返回 code=3 |
| 恢复普通设备时删除 session |
| 状态值定义符合预期(1/2/3/4) |
| 工作→普通设备流程:status 2→卸载→reportResult 3 |
| 普通→工作手机流程:status 4→reportResult 1→退出App |
| 上报接口支持幂等 |
| 支持 IMEI 维度的状态查询 |
| WEB端 - 设备列表解绑功能 |
| WEB端 - 设备详情恢复普通设备 |
| WEB端 - 账号设置全部解绑 |
| WEB端 - 账号设置全部恢复普通设备 |
交互式 Demo
📱 设备列表
iPhone 12 Pro 1
工作手机模式
iPhone 13 3
普通手机模式
Samsung S21 1
工作手机模式
📋 操作日志
[00:00:00] Demo 已初始化