hldy_app/component/zy-upgrade/zy-upgrade.vue

301 lines
8.4 KiB
Vue
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.

<template>
<view class="zy-modal" :class="dshow?'show':''">
<view class="zy-dialog" style="background-color: transparent;">
<view class="padding-top text-white" :class="'zy-upgrade-topbg-'+theme">
<view>
<text class="zy-upgrade-title">
发现新版本
</text>
</view>
<text class="flex-wrap">{{version}}</text>
</view>
<view class="padding-xl bg-white text-left">
<scroll-view style="max-height: 200rpx;" scroll-y="auto" v-if="!update_flag">
<text>{{update_tips}}</text>
</scroll-view>
<view class="zy-progress radius striped active" v-if="update_flag">
<view :class="'bg-'+theme" :style="'width: '+update_process+'%;'">
{{update_process}}
</view>
</view>
</view>
<view class="zy-bar bg-white justify-end">
<view class="action" v-if="!update_flag">
<button class="zy-btn" :class="'bg-'+theme" @click="upgrade_checked">确认升级</button>
<button class="zy-btn margin-left" :class="'line-'+theme"
v-if="!forceupgrade"
@click="upgrade_cancel">取消升级</button>
</view>
<view class="action text-center" v-if="update_flag&&!forceupgrade">
<button class="zy-btn" :class="'bg-'+theme" @click="upgrade_break">中断升级</button>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
name: 'ZyUpgrade',
props: {
theme: { //主题目前支持green,pink,blue,yellow,red
type: String,
default: 'green'
},
updateurl: { //升级检测url全路径
type:String,
default: ''
},
h5preview:{ //H5界面下是否预览升级
type: Boolean,
default: false
},
oldversion: { //如果是H5为了方便测试可以传入一个旧版本号进来。
type: String,
default: ''
},
oldcode: { //如果是H5为了方便测试可以传一个旧版本的code进来。
type: Number,
default: 0
},
appstoreflag: { //是否启用appstore升级如果启用由服务端返回appstore的地址
type: Boolean,
default: false
},
noticeflag:{ //是否通知主界面无需更新
type:Boolean,
default: false
},
autocheckupdate:{ //是否页面截入时就判断升级
type:Boolean,
default: true
}
},
data() {
return {
update_flag: false, //点击升级按钮后,显示进度条
dshow: false,
update_process: 0,
downloadTask: [],
updated2version: '',
version_url: '',
update_tips: '',
forceupgrade: false,
currentversion: this.oldversion,
versionname: '',
vesioncode: this.oldcode,
wgt_flag: 0,
wgt_url: '',
size: 0 ,//开启gzip等情形下获取不到安装包大小可以服务端返回安装包大小
header:{Authorization:uni.getStorageSync('token')||"token"}
}
},
mounted() {
let app_flag = false
// #ifdef APP-PLUS
app_flag = true
// #endif
if((this.h5preview || app_flag) && this.autocheckupdate){
this.check_update()
}
},
computed:{
version(){
let retversion = ''
retversion = this.currentversion + (this.currentversion!=''&&this.updated2version!=''?'->':'')+this.updated2version
return retversion
}
},
methods:{
//检测升级
check_update(){
let that = this
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
that.currentversion = widgetInfo.version
that.versionname = widgetInfo.name
that.versioncode = widgetInfo.versionCode
that.updatebusiness(that)
});
// #endif
// #ifdef H5
if(this.h5preview){
this.updatebusiness(that)
}
// #endif
},
updatebusiness: function(that){ //具体升级的业务逻辑
uni.request({
url: `http://121.36.88.64/nursing-unit/api/pad/versionUpdate?platform=1&version=${that.currentversion}`,
method: 'GET',
dataType:'json',
success: (res) => {
console.log("?????",res)
if(res.data.code==100){
//提示升级
if(res.data.data.update_url){
that.dshow = true;
that.update_tips = res.data.data.update_tips;
that.forceupgrade = res.data.data.forceupdate==1;
that.version_url = res.data.data.update_url;
that.updated2version = res.data.data.version;
that.wgt_flag = res.data.data.wgt_flag;
that.wgt_url = res.data.data.wgt_url;
that.size = res.data.data.size;
that.getnewbanben();
}else{
// if(that.noticeflag){
// //通知父组件,当前版为最新版本
// that.$emit("showupdateTips",0)
// }
}
}else{
uni.showToast({
title: '请求升级出错:'+data.msg,
icon:'none'
});
}
},
fail() {
this.loading = false;
}
});
},
getnewbanben:function(){
this.$emit('chuandinew',this.updated2version)
},
//点击开始升级按钮,开始升级
upgrade_checked:function(){
uni.removeStorageSync('token')
this.update_flag = true
this.updateversion()
},
//点击取消升级按钮,取消升级
upgrade_cancel:function(){
this.dshow = false
},
//升级过程中,点击中断升级按钮,中断升级
upgrade_break: function(){
this.downloadTask.abort()
this.update_flag = false
},
//升级下载apk安装包的具体处理业务逻辑
updateversion: function(){
//console.log("检查升级方法")
let platform = uni.getSystemInfoSync().platform
let that = this
//console.log("操作系统:",platform)
if(platform == 'ios' && this.appstoreflag && that.wgt_flag!=1){
//如果启用ios appstore升级则打开appstore
that.dshow = false
//console.log("跳转至appstore")
plus.runtime.launchApplication({
action: that.version_url
}, function(e) {
uni.showToast({
title: '打开appstore失败',
icon:'none'
});
});
}else{
let that = this
//console.log("升级参数:"+that.wgt_flag+" "+that.wgt_url+" "+that.version_url)
let downloadurl = that.wgt_flag==1?that.wgt_url:that.version_url;
let targetUrl = "http://121.36.88.64/nursing-unit/sys/common/static/" + downloadurl
// console.log("下载地址:"+targetUrl)
this.update_confirm = true
this.downloadTask = uni.downloadFile({
url: targetUrl,
header:this.header,
success:function(res){
// console.log("!!!",res)
if(res.statusCode == 200){
//开始安装
plus.runtime.install(res.tempFilePath, {
force: false
}, function() {
//console.log('install success...');
plus.runtime.restart();
}, function(e) {
console.error('install fail...',JSON.stringify(e));
uni.showToast({
title: '升级失败',
icon:'none'
});
});
}else{
uni.showToast({
title: '下载失败,网络错误',
icon:'none'
});
}
},
fail:function(e) {
//console.log("下载失败",e)
uni.showToast({
title: '下载失败:'+e.errMsg,
icon:'none'
});
this.update_flag = false
},
complete:function(){
}
})
this.downloadTask.onProgressUpdate(function(res){
// console.log("99999",res)
that.update_process = res.progress
if(res.progress == Infinity){
//使用size计算
//console.log("计算size");
let progress = (res.totalBytesWritten / that.size)*100
if(progress>100){
progress = 100
}
that.update_process = progress
}
})
}
},
}
}
</script>
<style scoped>
@import url("static/css/main.css");
.zy-upgrade-topbg-green {
background-image: url('static/images/green.png');
background-size: 100% 100%;
background-repeat: no-repeat;
height: 290rpx;
}
.zy-upgrade-topbg-red {
background-image: url('static/images/red.png');
background-size: 100% 100%;
background-repeat: no-repeat;
height: 290rpx;
}
.zy-upgrade-topbg-pink {
background-image: url('static/images/pink.png');
background-size: 100% 100%;
background-repeat: no-repeat;
height: 290rpx;
}
.zy-upgrade-topbg-yellow {
background-image: url('static/images/yellow.png');
background-size: 100% 100%;
background-repeat: no-repeat;
height: 290rpx;
}
.zy-upgrade-topbg-blue {
background-image: url('static/images/blue.png');
background-size: 100% 100%;
background-repeat: no-repeat;
height: 290rpx;
}
.zy-upgrade-title {
font-size: 50rpx;
color: white;
}
</style>