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.
xuan-pay-cweb/components/downloadUp.vue

323 lines
7.4 KiB

<template>
<view class="content" v-if="bannerShow">
<!-- 弹出层 -->
<view class="uni-banner">
<!-- <image src="../static/logo.png" class="startUpHeaderLogo" /> -->
<view class="banner_box">
<view class="startUpHeaderBox h6">发现新版本</view>
<view class="conter">{{ msg }}</view>
<view class="banner_foot"><button @click="goUpdate()" class="banner_foot_button">前往升级</button></view>
</view>
</view>
<view class="uni-mask"></view>
</view>
</template>
<script>
// import {
// getUpgrade
// } from '@/common/js/apis';
import {
queryVersion
} from '../Utils/Api.js'
export default {
data() {
return {
bannerShow: false, // 是否需要強制更新app
msg: '', // 更新描述
type: '', // 设备类型 android:2, ios:1
updateApkObj: null // 后台数据
};
},
created() {
const appUpdate = uni.getStorageSync('platform');
// #ifdef APP-PLUS
this.checkUpdate();
// #endif
},
methods: {
checkUpdate() {
let that = this;
let localAppVersonName = uni.getStorageSync('version');
// #ifdef APP-PLUS
let datas = {
termType: "APP"
}
queryVersion(datas).then(res => {
if (res.return_code == '000000') {
that.msg = res.return_data.content;
if (res.return_data.versionType == 1 && that.comparisonVersionHandler(localAppVersonName,
res.return_data.version)) {
that.downloadWgt(res.return_data.fileUrl);
return;
}
if (res.return_data.versionType == 2 && that.comparisonVersionHandler(localAppVersonName,
res.return_data.version)) {
that.updateApkObj = res.return_data;
that.bannerShow = true; // 显示弹窗
return;
}
}
})
// #endif
},
downloadWgt(updateWgtUrl) {
// 热更新
// 下载wgt方法
const that = this;
// 更新文件 wgt 文件地址
plus.nativeUI.showWaiting('正在更新...');
plus.downloader.createDownload(
updateWgtUrl, {
filename: '_doc/update/'
},
function(d, status) {
if (status == 200) {
that.installWgt(d.filename); // 安装wgt方法
}
plus.nativeUI.closeWaiting();
}
).start();
},
installWgt(path) {
// 安装wgt方法
plus.nativeUI.showWaiting('安装文件...');
plus.runtime.install(
path, {
force: true
},
function() {
plus.nativeUI.closeWaiting();
plus.nativeUI.alert('应用资源更新完成!', function() {
plus.runtime.restart();
});
},
function(e) {
plus.nativeUI.closeWaiting();
}
);
},
goUpdate() {
// if (this.type == 2) {
// 弹出系统等待对话框
var dtask = plus.downloader.createDownload(
this.updateApkObj.fileUrl, {},
function(d, status) {
this.bannerShow = false;
// 下载完成
if (status == 200) {
plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename), {}, {}, function(
error) {
uni.showToast({
title: '安装失败',
mask: false,
duration: 1500
});
});
} else {
uni.showToast({
title: '更新失败',
mask: false,
duration: 1500
});
}
});
try {
dtask.start(); // 开启下载的任务
let prg = 0;
const showLoading = plus.nativeUI.showWaiting('正在下载'); //创建一个showWaiting对象
dtask.addEventListener('statechanged', function(task, status) {
// 给下载任务设置一个监听 并根据状态 做操作
switch (task.state) {
case 1:
showLoading.setTitle('正在下载');
break;
case 2:
showLoading.setTitle('已连接到服务器');
break;
case 3:
prg = parseInt((parseFloat(task.downloadedSize) / parseFloat(task.totalSize)) *
100);
showLoading.setTitle(' 正在下载' + prg + '% ');
break;
case 4:
plus.nativeUI.closeWaiting();
//下载完成
break;
}
});
} catch (err) {
plus.nativeUI.closeWaiting();
uni.showToast({
title: '更新失败-03',
mask: false,
duration: 1500
});
}
// } else if (this.type == 1) { // ios跳转到app store
// plus.runtime.openURL(updateApkObj.downloadUrl);
// }
},
//判断是否升级
comparisonVersionHandler(reqV, curV) {
/*
curV string :当前最新
reqV string :之前
返回 true 表示需要升级
*/
if (curV && reqV) {
curV = String(curV);
reqV = String(reqV);
//将两个版本号拆成数字
let arr1 = curV.split('.'), //當前
arr2 = reqV.split('.');
let minLength = Math.min(arr1.length, arr2.length),
position = 0,
diff = 0;
//依次比较版本号每一位大小,当对比得出结果后跳出循环
while (position < minLength && ((diff = parseInt(arr1[position]) - parseInt(arr2[position])) == 0)) {
position++;
}
diff = (diff != 0) ? diff : (arr1.length - arr2.length);
//若curV大于reqV,则返回true
return diff > 0;
} else {
//输入为空
return false;
}
}
}
};
</script>
<style lang="scss" scoped>
.content,
#img {
width: 100%;
height: 100%;
}
.content .con {
font-size: 0;
display: flex;
align-items: center;
}
#info {
position: absolute;
top: 0;
left: 0;
width: 72rpx;
height: 72rpx;
line-height: 72rpx;
border-radius: 50%;
background-color: rgba(0, 0, 0, 0.3);
text-align: center;
color: #fff;
font-size: 24rpx;
}
.wrapper {
width: 36rpx;
height: 72rpx;
position: absolute;
top: 0;
overflow: hidden;
}
.right {
right: 0;
}
.left {
left: 0;
}
/* 弹出层形式的广告 */
.uni-banner {
display: flex;
align-items: center;
flex-direction: column;
position: fixed;
left: 50%;
top: 50%;
z-index: 1000;
transform: translate(-50%, -50%);
width: 80%;
.startUpHeaderLogo {
width: 200rpx;
height: 200rpx;
}
.banner_box {
width: 100%;
background: #fff;
border-radius: 20rpx;
}
.startUpHeaderBox {
width: 100%;
height: 96rpx;
background-image: url('/static/logo.png');
background-position: left top;
background-repeat: no-repeat;
background-size: cover;
}
}
.banner_box .h6 {
text-align: center;
line-height: 96rpx;
font-size: 36rpx;
color: #fff;
font-weight: bold;
}
.banner_box .conter {
font-size: 28rpx;
color: #333;
margin: 48rpx;
}
.banner_foot {
width: 238rpx;
margin: 48rpx auto;
}
.banner_foot_button {
background-image: linear-gradient(to right, #3aaf7a, #41bf7f);
line-height: 72rpx;
height: 72rpx;
font-size: 30rpx;
color: #fff;
font-weight: bold;
border-radius: 40rpx;
border: none;
box-shadow: 0 8rpx 20rpx 0 rgba(46, 189, 88, 0.36);
}
.banner_foot_button:active {
background-image: linear-gradient(to right, #41bf7f, #3aaf7a);
}
.uni-mask {
background: rgba(0, 0, 0, 0.6);
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 2;
}
</style>