import request, { baseURL } from '@/utils/request.js' /** * 检查并执行wgt热更新 * @param {String} updateUrl - 检查更新的接口地址 */ function checkAndUpdateWgt(updateUrl) { if (!plus) { return; } // 显示加载提示 let urls = ['https://dmsapp.skf.com.cn/HummerService/app/CheckUpdate']; // 1. 获取当前应用版本信息 plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => { const currentVersion = widgetInfo.version; console.log("当前版本:" + currentVersion); let callbck = (res) => { let flag = false; uni.hideLoading(); console.log("检查更新成功=", res) if (res.statusCode === 200) { const updateInfo = res.data.data; if (!updateInfo.hasUpdate) { return true; } flag = true; // 3. 显示更新提示 uni.showModal({ title: '检测到更新', content: updateInfo.description || '有新版本可用,是否立即更新?', confirmText: '立即更新', cancelText: '稍后更新', success: (modalRes) => { if (modalRes.confirm) { downloadAndInstallWgt(updateInfo.downloadUrl); } } }); } else { console.log('当前已是最新版本'); } return flag; }; let Update = (url) => { console.log("url=", url); return new Promise((resolve, reject) => { uni.request({ url: url, method: 'GET', data: { currentVersion: currentVersion, platform: uni.getSystemInfoSync().platform, appId: "xhyc" }, success: (res) => { // console.log("res=>",res)//坑,404居然进success if (res.statusCode === 200) { res.type = '1'; resolve(res); } else { reject(res); } }, fail: (err) => { console.log("err=", err); reject(err); }, complete: () => { console.log("complete"); } }); }); } let Callback1 = (res) => { console.log("检查版本更新:", res); let os = plus.os.name.toLowerCase(); let flag = false; if (res.code != 200) { return flag; } let f = res.data.find(v => { if (v.dictLabel.toLowerCase() == os) { return true; } return false; }); console.log("f=", f) if (f) { if (f.dictValue == currentVersion) { flag = false; return flag; } if(!f.dictValue || !f.remark){ flag=false; return; } flag = true; uni.showModal({ title: '检测到更新', content: '当前版本“' + currentVersion + '”,发现新版本“' + f.dictValue + '”,是否立即更新?', confirmText: '立即更新', cancelText: '稍后更新', success: (modalRes) => { if (modalRes.confirm) { downloadAndInstallWgt(f.remark); } } }); } else { flag = false; } return flag; } let Update1 = () => { return request({ url: '/app/auth/version', method: 'get' }); } let promises = []; for (var i = 0; i < urls.length; i++) { promises.push(Update(urls[i])); } promises.push(Update1()); Promise.allSettled(promises).then(results => { let length = results.length; let flag = false; for (var i = 0; i < length; i++) { console.log('results[' + i + ']=', results[i]); if (results[i].status == 'fulfilled' && results[i].value.type === '1' && !flag) { if (results[i].value.statusCode === 200) { flag = callbck(results[i].value) } // break; } if (results[i].status == 'fulfilled' && results[i].value.type !== '1' && !flag) { flag = Callback1(results[i].value); // break; } } if (!flag) { console.log("检查更新失败了"); } else { console.log("检查更新成功"); } }); }); } /** * 下载并安装wgt更新包 * @param {String} wgtUrl - wgt包下载地址 */ function downloadAndInstallWgt(wgtUrl) { // 显示下载进度 var wating = plus.nativeUI.showWaiting({ title: "下载中0%" }); // uni.showLoading({ // title: '更新下载中...', // mask: true // }); // 1. 下载wgt包 const downloadTask = uni.downloadFile({ url: wgtUrl, success: (downloadRes) => { wating.setTitle("下载完成,正在安装"); if (downloadRes.statusCode === 200) { // 2. 安装wgt包 plus.runtime.install(downloadRes.tempFilePath, { force: true // 是否强制安装 }, () => { uni.removeSavedFile({ filePath: downloadRes.tempFilePath, success() { console.log("临时文件已删除"); }, fail() { console.log("无法删除临时文件"); }, complete() { wating.close(); uni.showModal({ title: '更新完成', content: '应用已更新,是否重启应用?', showCancel: false, success: () => { // 3. 重启应用 plus.runtime.restart(); } }); } }); }, (error) => { wating.close(); uni.showToast({ title: '安装失败: ' + error.message, icon: 'none', duration: 3000 }); console.error('wgt安装失败:', error); }); } else { wating.close(); uni.showToast({ title: '下载失败', icon: 'none', duration: 2000 }); } }, fail: (err) => { uni.hideLoading(); uni.showToast({ title: '下载失败: ' + err.errMsg, icon: 'none', duration: 2000 }); console.error('wgt下载失败:', err); } }); // 监听下载进度 downloadTask.onProgressUpdate((progress) => { console.log('下载进度: ' + progress.progress + '%'); wating.setTitle("下载中" + progress.progress + '%'); // 可以在这里更新自定义进度条 }); } export default { checkAndUpdateWgt };