<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') {
						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: 256rpx;
			height: 194rpx;
		}

		.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>