You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
3.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<u-modal v-model="show" :show-cancel-button="true" confirm-text="升级" title="发现新版本" @cancel="cancel"
@confirm="confirm">
<view class="u-update-content">
<view class="row-item">
<text>版本号:</text>
<text class="iten-value">{{info.buildVersion}}</text>
</view>
<view class="row-item">
<text>软件体积:</text>
<text class="iten-value">{{info.buildFileSize}}MB</text>
</view>
<view class="row-item">
<text class="iten-value">{{info.buildUpdateDescription}}</text>
</view>
<view class="progress" v-show="show2">
<text class="progress-num">{{progressWidth}}</text>
<view :style="{width:progressWidth}"></view>
</view>
</view>
</u-modal>
</template>
<script>
import {
getAppInfo
} from '@/api/pgy.js'
import {
mapGetters
} from 'vuex'
export default {
data() {
return {
show: false,
content: `
`,
progressWidth: '0%',
show2: false,
info: {},
}
},
onReady() {
//获取版本信息
this.appInfo()
},
computed: {
...mapGetters([
'appCheck',
])
},
methods: {
async appInfo() {
const appKey = 'e4c51352c1a5a46cb49b44ae24edea32'
const res = await getAppInfo({
appKey: appKey,
buildKey: this.appCheck.buildKey
})
const buildFileSize = res.data.buildFileSize / (1024 * 1024);
res.data.buildFileSize = buildFileSize.toFixed(1)
this.info = res.data
this.show = true;
},
cancel() {
this.closeModal();
},
confirm() {
// this.closeModal();
this.show = true
this.downloadAPK()
},
closeModal() {
uni.navigateBack();
},
downloadAPK() {
this.show2 = true
let _this = this
var apkUrl = this.appCheck.downloadURL // 替换为你的APK文件URL
var apkFileName = '_downloads/taicang-population.apk' // 目标文件路径_downloads为H5+预定义目录
// 创建下载任务
var dtask = plus.downloader.createDownload(
apkUrl, {
filename: apkFileName,
},
function(d, status) {
if (status === 200) {
// 下载成功+ d.filename
_this.installAPK(d.filename)
uni.showToast({
icon: 'success',
title: '下载成功'
})
} else {
// 下载失败 + status
uni.showToast({
icon: 'error',
title: '下载失败'
})
}
}
)
// 监听下载任务的状态变化和进度
dtask.addEventListener('statechanged', function(download, status) {
// 下载状态变化时的处理
switch (download.state) {
case 3: // 下载中
// console.log('已下载大小:' + download.downloadedSize + ' bytes')
// console.log('总大小:' + download.totalSize + ' bytes')
_this.progressWidth = Math.round((download.downloadedSize / download.totalSize) *
100) + '%'
break
}
})
// 启动下载任务
dtask.start()
},
installAPK(filePath) {
plus.runtime.install(
filePath, {},
function() {
console.log('Install success')
},
function(e) {
console.log('Install failed: ' + e.message)
}
)
}
}
}
</script>
<style scoped lang="scss">
@import "../../libs/css/style.components.scss";
.u-full-content {
background-color: #00C777;
}
.u-update-content {
font-size: 26rpx;
color: $u-content-color;
line-height: 1.8;
padding: 30rpx;
}
.row-item {
font-size: 29rpx;
font-weight: 500;
}
.progress {
position: relative;
background-color: #e6effb;
height: 40rpx;
.progress-num {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
text-align: center;
line-height: 40rpx;
font-size: 28rpx;
font-weight: 500;
color: #fff;
}
&>view {
width: 0;
height: 100%;
background-color: #2d8cf0;
}
}
</style>