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

304 lines
8.5 KiB
Vue
Raw Normal View History

2025-04-07 17:34:20 +08:00
<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
},
2025-07-09 17:35:13 +08:00
updatebusiness: function(that){ //具体升级的业务逻辑 https://www.focusnu.com/opeapi
2025-04-07 17:34:20 +08:00
uni.request({
2025-07-09 17:35:13 +08:00
url: `https://www.focusnu.com/devopsapi/api/pad/versionUpdate?platform=1&version=${that.currentversion}`,
2025-04-07 17:34:20 +08:00
method: 'GET',
dataType:'json',
success: (res) => {
2025-07-09 17:35:13 +08:00
console.log("?????",res)
2025-07-07 17:35:35 +08:00
if(res.statusCode===404){
return
}
2025-04-07 17:34:20 +08:00
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({
2025-07-07 17:35:35 +08:00
title: '请求升级出错:'+ data.msg,
2025-04-07 17:34:20 +08:00
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;
2025-07-09 17:35:13 +08:00
let targetUrl = "https://www.focusnu.com/devopsapi/sys/common/static/" + downloadurl
2025-04-16 17:32:42 +08:00
// console.log("下载地址:"+targetUrl)
2025-04-07 17:34:20 +08:00
this.update_confirm = true
this.downloadTask = uni.downloadFile({
url: targetUrl,
header:this.header,
success:function(res){
2025-04-09 17:20:13 +08:00
// console.log("!!!",res)
2025-04-07 17:34:20 +08:00
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){
2025-04-09 17:20:13 +08:00
// console.log("99999",res)
2025-04-07 17:34:20 +08:00
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>