Files
MrleeAdmin/frontend/scanapp/api/app-update.js
T
2026-08-31 11:33:59 +08:00

85 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const GITEE_LATEST_RELEASE_API = 'https://gitee.com/api/v5/repos/li-hua-88/scanapp/releases/latest'
const AUTO_UPDATE_CHECK_DATE_KEY = 'scanapp_auto_update_check_date'
export function getCurrentAppVersion() {
// #ifdef APP-PLUS
return plus.runtime.version || '1.0.0'
// #endif
try {
return uni.getSystemInfoSync().appVersion || '1.0.0'
} catch (error) {
return '1.0.0'
}
}
export function compareVersions(leftVersion, rightVersion) {
const left = String(leftVersion || '0').replace(/^v/i, '').split('.')
const right = String(rightVersion || '0').replace(/^v/i, '').split('.')
const length = Math.max(left.length, right.length)
for (let index = 0; index < length; index += 1) {
const leftPart = Number(left[index] || 0)
const rightPart = Number(right[index] || 0)
if (leftPart > rightPart) return 1
if (leftPart < rightPart) return -1
}
return 0
}
export function getReleaseUpdateInfo(release) {
const latestVersion = String(release?.tag_name || release?.name || '').replace(/^v/i, '')
if (!latestVersion) throw new Error('未获取到有效的版本号')
const apkAsset = (release.assets || []).find((asset) => /\.apk(?:\?|$)/i.test(asset.name || asset.browser_download_url || ''))
return {
latestVersion,
apkUrl: apkAsset?.browser_download_url || '',
releaseUrl: release.html_url || 'https://gitee.com/li-hua-88/scanapp/releases/latest',
updateNote: String(release.body || '修复已知问题并优化使用体验').replace(/\r?\n/g, '\n').trim()
}
}
export function getTodayUpdateCheckKey() {
const now = new Date()
const year = now.getFullYear()
const month = String(now.getMonth() + 1).padStart(2, '0')
const day = String(now.getDate()).padStart(2, '0')
return `${year}-${month}-${day}`
}
export function shouldAutoCheckForUpdate() {
return uni.getStorageSync(AUTO_UPDATE_CHECK_DATE_KEY) !== getTodayUpdateCheckKey()
}
export function markAutoUpdateChecked() {
uni.setStorageSync(AUTO_UPDATE_CHECK_DATE_KEY, getTodayUpdateCheckKey())
}
export function getLatestRelease() {
return new Promise((resolve, reject) => {
uni.request({
url: GITEE_LATEST_RELEASE_API,
method: 'GET',
timeout: 15000,
header: {
Accept: 'application/json'
},
success: (res) => {
let release = res.data
if (typeof release === 'string') {
try {
release = JSON.parse(release)
} catch (error) {
release = null
}
}
if (res.statusCode >= 200 && res.statusCode < 300 && release && typeof release === 'object') {
resolve(release)
return
}
reject(new Error(`更新服务请求失败(HTTP ${res.statusCode || 0})`))
},
fail: () => reject(new Error('无法连接更新服务,请检查网络后重试'))
})
})
}