<template> <view> <!-- 遮罩滚动锁定组件 --> <page-meta :page-style="'overflow:' + (popupShow ? 'hidden' : 'visible')"></page-meta> <uni-popup ref="upgradePopup" background-color="#fff" class="upgradePopup" @change="upgradePopupChange" :mask-click="false"> <view class="rocket-content"> <view class="rocket-img"></view> </view> <view class="content-v-des"> <view class="content-v">V{{ appUpgeadeObj.versionName }}</view> <view class='content-text'>发现新版本</view> <view class="title"> <!-- 更新内容 --> <scroll-view class="info_desc_scroll" scroll-y="true"> <rich-text v-if="appUpgeadeObj.content" class='scroll-text' :nodes="appUpgeadeObj.content"></rich-text> </scroll-view> </view> </view> <view class="update-content"> <text space="nbsp">{{ appUpgeadeObj.updateContent }}</text> </view> <view v-if="updateButtonBoolean" class="update-button"> <button class="not-updated-button" :disabled="noUpdatedDisabled" v-show="appUpgeadeObj.forceUpdate == false" type="warn" @tap.stop="noUpdate">暂不更新</button> <button v-show='appUpgeadeObj.type == "ANDROID"' class="updated-button" type="warn" @tap.stop="upgradeNowAndroid">立即升级</button> <button v-show='appUpgeadeObj.type == "IOS"' class="updated-button" type="warn" @tap.stop="upgradeNow">立即升级</button> </view> <view v-if="progressBolean" class="progress-bar"> <progress border-radius="90" font-size="24" activeColor="#DB4032" backgroundColor="#f0f0f0" show-info :percent="progressData.percent" stroke-width="15" /> </view> </uni-popup> </view> </template> <script> export default { props: { appUpgeadeObj: { type: Object, default: () => { return {} } } }, components: { }, data() { return { popupShow: false, updateButtonBoolean: true, // 按钮的显示和隐藏 // 进度条数据 progressData: { percent: 0, //百分比 }, progressBolean: false, // 进度条的显示和隐藏 noUpdatedDisabled: false, isWGT: false,// 是否wgt资源包 }; }, watch: { 'progressData.percent': { handler(newdata) { if (newdata) { this.progressBolean = true this.updateButtonBoolean = false } if (newdata == 100) { this.noUpdatedDisabled = false } }, immediate: true, }, }, beforeMount() { uni.hideTabBar() }, mounted() { this.$refs.upgradePopup.open('center') }, methods: { // 升级弹窗的change事件 upgradePopupChange(e) { this.popupShow = e.show }, // 暂不更新按钮事件 noUpdate() { this.popupShow = false uni.showTabBar() setTimeout(() => { this.$emit('pause') }, 10) }, // 立即升级事件 upgradeNow() { const that = this that.noUpdatedDisabled = true let platform = uni.getSystemInfoSync().platform const wgtType = that.containsWGTExtension(that.appUpgeadeObj.downloadUrl) that.isWGT = wgtType const index = that.appUpgeadeObj.downloadUrl.indexOf('apps.apple.com') console.log(that.isWGT, 'that.isWGT3333') if (that.isWGT == true) { that.updateWgt(that.appUpgeadeObj.downloadUrl, that.appUpgeadeObj.downloadUrl.versionName) } else { if (platform == 'ios' && index !== -1) return plus.runtime.openURL(that.appUpgeadeObj.downloadUrl); } }, upgradeNowAndroid() { let that = this that.noUpdatedDisabled = true let platform = uni.getSystemInfoSync().platform const index = that.containsApkExtension(that.appUpgeadeObj.downloadUrl) const wgtType = that.containsWGTExtension(that.appUpgeadeObj.downloadUrl) console.log(wgtType, 'that.isWGT') that.isWGT = wgtType if (index == true) { plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => { var downloadTask = uni.downloadFile({ url: that.appUpgeadeObj.downloadUrl, success: (downloadResult) => { if (downloadResult.statusCode === 200) { plus.runtime.install(downloadResult .tempFilePath, { force: false }, function () { plus.cache.clear(); plus.runtime.restart(); }, function (err) { console.log('err--------安装升级包失败', err) uni.showToast({ title: '安装升级包失败', icon: 'none' }); }); } }, }); downloadTask.onProgressUpdate((res) => { this.progressData.percent = res.progress }); }) } else { console.log(333, 'indexw') //跳转到应用商店 let appurl = "market://details?id=io.dcloud.ddh" plus.runtime.openURL(appurl) } // } }, //wgt更新 updateWgt(downloadUrl, newVersion) { uni.showModal({ title: '已发现新版本', content: '确认更新?', showCancel: false, success: function (res) { uni.setStorageSync('checkVersions', newVersion) if (res.confirm) { uni.downloadFile({ url: downloadUrl, success: (downloadResult) => { plus.runtime.install(downloadResult.tempFilePath, { force: true }, function () { //应用热重启,重新启动进入首页 plus.runtime.restart(); uni.showModal({ title: '安装成功!', content: '已重新进入应用', showCancel: false, success: function (res) { if (res.confirm) { console.log('用户点击确定'); } else if (res.cancel) { console.log('用户点击确定'); } } }) }, function (e) { console.log(e, '安装失败') uni.showModal({ title: '安装失败', icon: 'none' }) }) }, fail: (err) => { uni.showToast({ title: '下载失败', icon: 'none' }) } }) } else if (res.cancel) { uni.showToast({ title: '已取消', icon: 'none' }) } } }) }, containsApkExtension(url) { return /\.apk$/i.test(url); }, containsWGTExtension(url) { return /\.wgt$/i.test(url); } } }; </script> <style scoped lang="scss"> .upgradePopup { z-index: 999; /deep/.uni-popup__wrapper { width: 602rpx; background-image: url('./imgs/upgradeBackground.png'); background-repeat: no-repeat; background-size: 100% 100%; border-radius: 15rpx; // border: solid 1px red; position: relative; display: flex; flex-direction: column; .rocket-content { height: 368rpx; .rocket-img { background-image: url('./imgs/rocket.png'); background-repeat: no-repeat; background-size: 100% 100%; width: 152rpx; height: 212rpx; position: absolute; top: -105rpx; left: 225rpx; } } .content-v-des { position: absolute; left: 40rpx; top: 30rpx; z-index: 3; .content-v { font-size: 75rpx; color: #FFFFFF; } .content-text { padding-top: 20rpx; font-family: PingFangSC, PingFang SC; font-size: 42rpx; color: #333333; } .title { margin-top: 20rpx; display: flex; font-family: PingFangSC, PingFang SC; font-weight: 400; font-size: 16px; color: #999999; line-height: 28px; text-align: left; font-style: normal; .info_desc_scroll { width: 450rpx; height: 200rpx; box-sizing: border-box; line-height: 1.3; .scroll-text { padding-bottom: 6rpx; } } } } .update-content { margin-top: 44rpx; // border: solid 1rpx red; padding-left: 100rpx; display: flex; flex-direction: column; uni-text { font-size: 28rpx; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #989899; margin-bottom: 8rpx; } } .update-button { // border: solid 1rpx yellow; display: flex; width: 482rpx; margin: 0 auto; margin-top: 48rpx; uni-button { display: flex; justify-content: center; align-items: center; font-size: 28rpx; font-family: PingFangSC-Medium, PingFang SC; font-weight: 500; color: #FFFFFF; margin: 0rpx; flex: 1; height: 80rpx; margin-bottom: 80rpx; } .not-updated-button { margin-right: 40rpx; } } .progress-bar { width: 538rpx; // border: solid 1px red; margin: 0 auto; margin-top: 96rpx; margin-bottom: 102rpx; uni-progress { .uni-progress-bar { border-radius: 50rpx; .uni-progress-inner-bar { border-radius: 50rpx; } } } } } } </style>