2026-03-24 11:45:13 +08:00
|
|
|
|
import request from "./request";
|
|
|
|
|
|
let version_number;
|
|
|
|
|
|
|
|
|
|
|
|
function getVersionNum() {
|
|
|
|
|
|
// 获取当前app的版本
|
|
|
|
|
|
const systemInfo = uni.getSystemInfoSync();
|
|
|
|
|
|
// 应用程序版本号
|
|
|
|
|
|
// 条件编译,只在APP渲染
|
|
|
|
|
|
// #ifdef APP
|
|
|
|
|
|
version_number = systemInfo.appWgtVersion;
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
// #ifdef H5
|
|
|
|
|
|
version_number = systemInfo.appVersion;
|
|
|
|
|
|
console.log(systemInfo.appVersion, '版本号');
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
// #ifdef MP-WEIXIN
|
|
|
|
|
|
const accountInfo = uni.getAccountInfoSync();
|
|
|
|
|
|
version_number = accountInfo.miniProgram.version // 小程序 版本号
|
|
|
|
|
|
console.log(accountInfo.miniProgram.version, '小程序版本号')
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
|
|
return version_number;
|
|
|
|
|
|
}
|
|
|
|
|
|
// 检查版本自动更新
|
|
|
|
|
|
function getUpdateInfo() {
|
|
|
|
|
|
return new Promise(async (resolve, reject) => {
|
|
|
|
|
|
const systemInfo = await uni.getSystemInfoSync();
|
|
|
|
|
|
// 获取手机型号
|
|
|
|
|
|
const deviceBrand = systemInfo.deviceBrand;
|
|
|
|
|
|
console.log('deviceBrand', deviceBrand)
|
|
|
|
|
|
let type = deviceBrand == 'apple' ? '1' : deviceBrand == 'huawei' ? '2' : deviceBrand == 'honor' ?
|
|
|
|
|
|
'3' : deviceBrand == 'xiaomi' ? '4' : deviceBrand == 'oppo' ? '5' : deviceBrand == 'vivo' ?
|
|
|
|
|
|
'6' : '';
|
|
|
|
|
|
if (!type) return;
|
2026-03-25 13:29:04 +08:00
|
|
|
|
const response = await request.post('/sj/getAppVersion', {
|
2026-03-24 11:45:13 +08:00
|
|
|
|
type
|
|
|
|
|
|
});
|
|
|
|
|
|
console.log('response', response)
|
|
|
|
|
|
resolve({
|
|
|
|
|
|
version: response.data.version,
|
|
|
|
|
|
downloadUrl: response.data.url // APK下载地址
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function installApp(downloadUrl) {
|
|
|
|
|
|
// 下载APK
|
|
|
|
|
|
const downloadTask = uni.downloadFile({
|
|
|
|
|
|
url: 'https://app.mrrweb.com.cn/mrrapp.com.1.1.4.apk',
|
|
|
|
|
|
success: (downloadResult) => {
|
|
|
|
|
|
console.log('downloadResult', downloadResult)
|
|
|
|
|
|
if (downloadResult.statusCode === 200) {
|
|
|
|
|
|
// 安装APK
|
|
|
|
|
|
plus.runtime.install(downloadResult.tempFilePath, {
|
|
|
|
|
|
force: false
|
|
|
|
|
|
}, () => {
|
|
|
|
|
|
console.log('安装成功')
|
|
|
|
|
|
// plus.runtime.restart();
|
|
|
|
|
|
}, (err) => {
|
|
|
|
|
|
console.log('err', err)
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '安装失败',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail(err) {
|
|
|
|
|
|
console.log('err', err)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
// 监听下载进度
|
|
|
|
|
|
downloadTask.onProgressUpdate((res) => {
|
|
|
|
|
|
console.log('下载进度:', res.progress)
|
|
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
// 建议的版本比较函数
|
|
|
|
|
|
function compareVersion(current, latest) {
|
|
|
|
|
|
const curParts = current.split('.').map(Number);
|
|
|
|
|
|
const latParts = latest.split('.').map(Number);
|
|
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < Math.max(curParts.length, latParts.length); i++) {
|
|
|
|
|
|
const cur = curParts[i] || 0;
|
|
|
|
|
|
const lat = latParts[i] || 0;
|
|
|
|
|
|
if (cur < lat) return true;
|
|
|
|
|
|
if (cur > lat) return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
// app内跟新下载
|
|
|
|
|
|
function uploadAppDowlond(url) {
|
|
|
|
|
|
const downloadTask = uni.downloadFile({
|
|
|
|
|
|
url: 'http://app.mrrweb.com.cn/mrrapp.com.1.1.4.apk',
|
|
|
|
|
|
success: downloadResult => {
|
|
|
|
|
|
if (downloadResult.statusCode === 200) {
|
|
|
|
|
|
plus.runtime.install(
|
|
|
|
|
|
downloadResult.tempFilePath, {
|
|
|
|
|
|
force: false
|
|
|
|
|
|
},
|
|
|
|
|
|
function() {
|
|
|
|
|
|
// 下载资源成功,重启应用
|
|
|
|
|
|
plus.runtime.restart()
|
|
|
|
|
|
},
|
|
|
|
|
|
function(e) {
|
|
|
|
|
|
// 下载资源失败
|
|
|
|
|
|
}
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
downloadTask.onProgressUpdate((res) => {
|
|
|
|
|
|
console.log('下载进度' + res.progress);
|
|
|
|
|
|
console.log('已经下载的数据长度' + res.totalBytesWritten);
|
|
|
|
|
|
console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite);
|
|
|
|
|
|
|
|
|
|
|
|
// 满足测试条件,取消下载任务。
|
|
|
|
|
|
// if (res.progress > 50) {
|
|
|
|
|
|
// downloadTask.abort();
|
|
|
|
|
|
// }
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function showUpdateDialog(updateInfo) {
|
|
|
|
|
|
uni.showModal({
|
|
|
|
|
|
title: `发现新版本`,
|
|
|
|
|
|
content: '是否更新最新版本?',
|
|
|
|
|
|
confirmText: '立即更新',
|
|
|
|
|
|
cancelText: '稍后再说',
|
|
|
|
|
|
success: (res) => {
|
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
|
// #ifdef APP-PLUS
|
|
|
|
|
|
// if (plus.os.name === 'iOS') {
|
|
|
|
|
|
// plus.runtime.openURL(updateInfo.downloadUrl)
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// installApp(updateInfo.downloadUrl)
|
|
|
|
|
|
// }
|
|
|
|
|
|
plus.runtime.openURL(updateInfo.downloadUrl)
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
export default {
|
|
|
|
|
|
async uploadApp(type) {
|
|
|
|
|
|
// uploadAppDowlond()
|
|
|
|
|
|
try {
|
|
|
|
|
|
const currentVersion = getVersionNum();
|
|
|
|
|
|
if (!currentVersion) return
|
|
|
|
|
|
|
|
|
|
|
|
let updateInfo
|
|
|
|
|
|
// #ifdef APP-PLUS
|
|
|
|
|
|
updateInfo = await getUpdateInfo()
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
console.log('updateInfo', updateInfo)
|
|
|
|
|
|
if (compareVersion(currentVersion, updateInfo.version)) {
|
|
|
|
|
|
showUpdateDialog(updateInfo)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
if (type == 'onLaunch') return;
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '当前已是最新版本',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error('检查更新失败:', error)
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '检查更新失败',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|