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