diff --git a/src/apis.js b/src/apis.js index 6d2b0c8..5e38eb0 100644 --- a/src/apis.js +++ b/src/apis.js @@ -25,6 +25,7 @@ try { const ADDONS_BASE_URL = BASE_URL.replace(/\/api\/shoot$/, "/api/shoot"); +// 统一处理业务接口请求,包含登录态、业务错误和 WiFi 连接空响应兼容。 function request(method, url, data = {}, baseUrl = BASE_URL) { const token = uni.getStorageSync( `${uni.getAccountInfoSync().miniProgram.envVersion}_token` @@ -39,6 +40,10 @@ function request(method, url, data = {}, baseUrl = BASE_URL) { data, timeout: 10000, success: (res) => { + if (url === "/user/hardwareBox/connectWifi" && res.statusCode === 200 && res.data && Object.keys(res.data).length === 0) { + resolve({}); + return; + } if (res.data) { const {code, data, message} = res.data; if (code === 0) resolve(data); @@ -473,6 +478,26 @@ export const getDeviceBatteryAPI = async () => { return request("GET", "/user/device/battery"); }; +// 设备连接指定 WiFi,只下发 WiFi 凭证,不触发 OTA 升级。 +export const connectDeviceWifiAPI = async (ssid, password) => { + return request("POST", "/user/hardwareBox/connectWifi", {ssid, password}); +}; + +// 获取硬件盒子版本信息,用于判断当前设备是否需要 OTA 升级。 +export const getHardwareBoxVersionAPI = async () => { + return request("GET", "/user/hardwareBox/version"); +}; + +// 发送硬件盒子 OTA 更新指令,服务端会返回后续轮询使用的任务 ID。 +export const sendHardwareBoxUpdateAPI = async (data) => { + return request("POST", "/user/hardwareBox/sendUpdate", data); +}; + +// 根据任务 ID 获取硬件盒子 OTA 更新状态。 +export const getHardwareBoxTaskStatusAPI = async (taskId) => { + return request("GET", `/user/hardwareBox/taskStatus?taskId=${taskId}`); +}; + export const addNoteAPI = async (id, remark) => { return request("POST", "/user/score/sheet/remark", {id, remark}); }; diff --git a/src/pages/index.vue b/src/pages/index.vue index abc3f6a..b3035ee 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -198,7 +198,7 @@ const startHomeOtaUpdate = async () => { } }; -// 点击立即更新时先判断设备是否已通过 WiFi 联网,已联网则首页直接更新,否则跳转 WiFi 页面。 +// 点击立即更新时先判断设备是否在线并已通过 WiFi 联网,已联网则首页直接更新,否则跳转 WiFi 页面。 const handleOtaUpdate = async () => { if (isStartingOta.value) return; isStartingOta.value = true; @@ -214,6 +214,15 @@ const handleOtaUpdate = async () => { return; } + if (deviceStatus?.online !== true) { + isStartingOta.value = false; + uni.showToast({ + title: "请先开启智能弓", + icon: "none", + }); + return; + } + if (String(deviceStatus?.netType || "").toLowerCase() === "wifi") { startHomeOtaUpdate(); return; diff --git a/src/pages/ota-wifi.vue b/src/pages/ota-wifi.vue index aca5089..38663c4 100644 --- a/src/pages/ota-wifi.vue +++ b/src/pages/ota-wifi.vue @@ -436,7 +436,7 @@ const pollUpdateTaskStatus = (taskId) => { // 判断设备是否满足 OTA 更新条件,不满足时返回精确提示文案。 const getUpdateDisabledReason = (deviceStatus) => { - if (deviceStatus?.online !== true) return "设备已离线,请先开启设备并保持在线"; + if (deviceStatus?.online !== true) return "请先开启智能弓"; if (Number(deviceStatus?.battery) <= 20) return "设备电量不足,请充电至 20% 以上后再更新"; if (String(deviceStatus?.netType || "").toLowerCase() !== "wifi") return "设备当前未连接 WiFi,请先连接 WiFi 后再更新"; return "";