373 lines
8.5 KiB
JavaScript
373 lines
8.5 KiB
JavaScript
// checkappupdate.js
|
||
import config from '../config/common.js'
|
||
const $iconUrl = "/static/huojian2.png";
|
||
const $closeUrl = "/static/modalclose1.png";
|
||
const $mainColor = "#FF5B78";
|
||
|
||
function check(param = {}) {
|
||
if (!param.appurl) return false;
|
||
let datass = {
|
||
versionContent: param.versionContent,
|
||
versionNumber: param.versionNumber,
|
||
versionNow:param.versionNow,
|
||
updateType: 'solicit', //solicity
|
||
appurl: param.appurl,
|
||
apk:param.apk
|
||
}
|
||
updatePopup(datass, '')
|
||
}
|
||
|
||
function updatePopup(data, callback) {
|
||
// 弹窗遮罩层
|
||
let maskLayer = new plus.nativeObj.View("maskLayer", { //先创建遮罩层
|
||
top: '0px',
|
||
left: '0px',
|
||
height: '100%',
|
||
width: '100%',
|
||
backgroundColor: 'rgba(0,0,0,0.5)'
|
||
});
|
||
// 以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心
|
||
const screenWidth = plus.screen.resolutionWidth;
|
||
const screenHeight = plus.screen.resolutionHeight;
|
||
|
||
//弹窗容器宽度
|
||
const popupViewWidth = screenWidth * 0.7;
|
||
// 弹窗容器的Padding
|
||
const viewContentPadding = 20;
|
||
// 弹窗容器的宽度
|
||
const viewContentWidth = parseInt(popupViewWidth - (viewContentPadding * 2));
|
||
// 描述的列表
|
||
const descriptionList = drawtext(data.versionContent, viewContentWidth);
|
||
// 弹窗容器高度
|
||
let popupViewHeight = 80 + 20 + 20 + 90 + 10 + 60 + 40;
|
||
let popupViewContentList = [{
|
||
src: $iconUrl,
|
||
id: "logo",
|
||
tag: "img",
|
||
position: {
|
||
top: "-70px",
|
||
left: "0px",
|
||
width: popupViewWidth + 'px',
|
||
height: (screenHeight / 3) + "px",
|
||
}
|
||
},
|
||
{
|
||
tag: 'font',
|
||
id: 'title',
|
||
text: "发现新版本",
|
||
textStyles: {
|
||
size: '22px',
|
||
color: "#5F94F9",
|
||
// weight: "bold",
|
||
whiteSpace: "normal"
|
||
},
|
||
position: {
|
||
top: '140px',
|
||
left: (viewContentPadding * 2) + "px",
|
||
width: viewContentWidth - viewContentPadding * 2 + "px",
|
||
height: "30px",
|
||
}
|
||
}
|
||
];
|
||
popupViewContentList.push({
|
||
tag: 'rect', //绘制版本号
|
||
rectStyles: {
|
||
radius: "3px",
|
||
color: "#5F94F9"
|
||
},
|
||
position: {
|
||
top: '180px',
|
||
left: ((viewContentWidth - 150) / 2 + viewContentPadding) + "px",
|
||
width: 150 + "px",
|
||
height: "20px"
|
||
}
|
||
})
|
||
popupViewContentList.push({
|
||
tag: 'font',
|
||
id: 'versionText',
|
||
text: 'V' + data.versionNow+ ' -> ' +'V' + data.versionNumber,
|
||
textStyles: {
|
||
size: '14px',
|
||
color: "#FFF",
|
||
lineSpacing: "0%",
|
||
},
|
||
position: {
|
||
top: '180px',
|
||
left: ((viewContentWidth - 150) / 2 + viewContentPadding) + "px",
|
||
width: 150 + "px",
|
||
height: "20px"
|
||
}
|
||
})
|
||
const textHeight = 18;
|
||
let contentTop = 190;
|
||
descriptionList.forEach((item, index) => {
|
||
if (index > 0) {
|
||
popupViewHeight += textHeight;
|
||
contentTop += textHeight;
|
||
}
|
||
popupViewContentList.push({
|
||
tag: 'font',
|
||
id: 'content' + index + 1,
|
||
text: item.content,
|
||
textStyles: {
|
||
size: '15px',
|
||
color: "#666",
|
||
lineSpacing: "50%",
|
||
align: "left",
|
||
},
|
||
position: {
|
||
top: (contentTop + 30) + "px",
|
||
left: viewContentPadding + "px",
|
||
width: viewContentWidth + "px",
|
||
height: textHeight + "px",
|
||
}
|
||
});
|
||
if (item.type == "break") {
|
||
contentTop += 10;
|
||
popupViewHeight += 10;
|
||
}
|
||
});
|
||
popupViewContentList.push({ // 立即升级按钮
|
||
// src: $gotoUrl,
|
||
id: "gotos",
|
||
// tag: "rect",
|
||
tag: 'rect',
|
||
rectStyles: {
|
||
radius: "20px",
|
||
color: "#5F94F9"
|
||
},
|
||
position: {
|
||
bottom: (viewContentPadding) + 'px',
|
||
left: (viewContentPadding * 2) + "px",
|
||
width: (viewContentWidth - viewContentPadding * 2) + "px",
|
||
height: "35px"
|
||
},
|
||
})
|
||
popupViewContentList.push({ // 立即升级按钮
|
||
// src: $gotoUrl,
|
||
id: "gotoText",
|
||
// tag: "rect",
|
||
tag: 'font',
|
||
text: '立即升级',
|
||
textStyles: {
|
||
size: '14px',
|
||
color: "#FFF",
|
||
lineSpacing: "0%",
|
||
},
|
||
position: {
|
||
bottom: (viewContentPadding) + 'px',
|
||
left: (viewContentPadding * 2) + "px",
|
||
width: (viewContentWidth - viewContentPadding * 2) + "px",
|
||
height: "35px"
|
||
},
|
||
})
|
||
// 弹窗内容
|
||
let popupView = new plus.nativeObj.View("popupView", { //创建底部图标菜单
|
||
tag: "rect",
|
||
top: (screenHeight - popupViewHeight) / 2 + "px",
|
||
left: '15%',
|
||
height: popupViewHeight + "px",
|
||
width: "70%"
|
||
});
|
||
// 绘制白色背景
|
||
popupView.drawRect({
|
||
color: "#ffffff",
|
||
radius: "8px"
|
||
}, {
|
||
top: "40px",
|
||
height: (popupViewHeight - 40) + "px",
|
||
});
|
||
|
||
popupView.draw(popupViewContentList);
|
||
|
||
// 绘制关闭按钮
|
||
const errViewWidth = screenWidth * 0.8;
|
||
let errViewHeight = 80 + 20 + 20 + 90 + 10 + 60;
|
||
let errTop = (screenHeight - errViewHeight) / 3.3 + "px"
|
||
let errView = new plus.nativeObj.View('errView', {
|
||
top: errTop,
|
||
left: errViewWidth,
|
||
height: '40px',
|
||
width: '100%'
|
||
},
|
||
[{
|
||
tag: 'img',
|
||
id: 'img',
|
||
src: $closeUrl,
|
||
position: {
|
||
top: '0px',
|
||
left: '0px',
|
||
width: '40px',
|
||
height: '40px'
|
||
},
|
||
}],
|
||
);
|
||
|
||
popupView.addEventListener("click", function(e) {
|
||
let maxTop = popupViewHeight - viewContentPadding;
|
||
let maxLeft = popupViewWidth - viewContentPadding;
|
||
let buttonWidth = (viewContentWidth - viewContentPadding) / 2;
|
||
if (e.clientY > maxTop - 30 && e.clientY < maxTop) {
|
||
if (e.clientX > viewContentPadding && e.clientX < maxLeft) {
|
||
maskLayer.hide();
|
||
popupView.hide();
|
||
errView.hide();
|
||
newUpdateDownload(data)
|
||
}
|
||
}
|
||
});
|
||
|
||
errView.addEventListener("click", function() { //处理点击关闭按钮点击
|
||
maskLayer.hide();
|
||
popupView.hide();
|
||
errView.hide();
|
||
});
|
||
|
||
// 显示弹窗
|
||
maskLayer.show();
|
||
popupView.show();
|
||
errView.show();
|
||
}
|
||
|
||
// 文字换行
|
||
function drawtext(text, maxWidth) {
|
||
let textArr = text.split("");
|
||
let len = textArr.length;
|
||
// 上个节点
|
||
let previousNode = 0;
|
||
// 记录节点宽度
|
||
let nodeWidth = 0;
|
||
// 文本换行数组
|
||
let rowText = [];
|
||
// 如果是字母,侧保存长度
|
||
let letterWidth = 0;
|
||
// 汉字宽度
|
||
let chineseWidth = 15;
|
||
// otherFont宽度
|
||
let otherWidth = 7;
|
||
for (let i = 0; i < len; i++) {
|
||
if (/[\u4e00-\u9fa5]|[\uFE30-\uFFA0]/g.test(textArr[i])) {
|
||
if (letterWidth > 0) {
|
||
if (nodeWidth + chineseWidth + letterWidth * otherWidth > maxWidth) {
|
||
rowText.push({
|
||
type: "text",
|
||
content: text.substring(previousNode, i)
|
||
});
|
||
previousNode = i;
|
||
nodeWidth = chineseWidth;
|
||
letterWidth = 0;
|
||
} else {
|
||
nodeWidth += chineseWidth + letterWidth * otherWidth;
|
||
letterWidth = 0;
|
||
}
|
||
} else {
|
||
if (nodeWidth + chineseWidth > maxWidth) {
|
||
rowText.push({
|
||
type: "text",
|
||
content: text.substring(previousNode, i)
|
||
});
|
||
previousNode = i;
|
||
nodeWidth = chineseWidth;
|
||
} else {
|
||
nodeWidth += chineseWidth;
|
||
}
|
||
}
|
||
} else {
|
||
if (/\n/g.test(textArr[i])) {
|
||
rowText.push({
|
||
type: "break",
|
||
content: text.substring(previousNode, i)
|
||
});
|
||
previousNode = i + 1;
|
||
nodeWidth = 0;
|
||
letterWidth = 0;
|
||
} else if (textArr[i] == "\\" && textArr[i + 1] == "n") {
|
||
rowText.push({
|
||
type: "break",
|
||
content: text.substring(previousNode, i)
|
||
});
|
||
previousNode = i + 2;
|
||
nodeWidth = 0;
|
||
letterWidth = 0;
|
||
} else if (/[a-zA-Z0-9]/g.test(textArr[i])) {
|
||
letterWidth += 1;
|
||
if (nodeWidth + letterWidth * otherWidth > maxWidth) {
|
||
rowText.push({
|
||
type: "text",
|
||
content: text.substring(previousNode, i + 1 - letterWidth)
|
||
});
|
||
previousNode = i + 1 - letterWidth;
|
||
nodeWidth = letterWidth * otherWidth;
|
||
letterWidth = 0;
|
||
}
|
||
} else {
|
||
if (nodeWidth + otherWidth > maxWidth) {
|
||
rowText.push({
|
||
type: "text",
|
||
content: text.substring(previousNode, i)
|
||
});
|
||
previousNode = i;
|
||
nodeWidth = otherWidth;
|
||
} else {
|
||
nodeWidth += otherWidth;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (previousNode < len) {
|
||
rowText.push({
|
||
type: "text",
|
||
content: text.substring(previousNode, len)
|
||
});
|
||
}
|
||
return rowText;
|
||
}
|
||
|
||
// 新的下载
|
||
function newUpdateDownload(data) {
|
||
if (data.apk == 'true') {
|
||
var appurl = ''
|
||
if (plus.os.name === 'Android') {
|
||
appurl = data.appurl;
|
||
} else {
|
||
// 其它平台
|
||
// appurl = versionInfo.pathIos;
|
||
}
|
||
plus.runtime.openURL(appurl); // 跳转应用发布平台
|
||
}else{
|
||
uni.showLoading({
|
||
title: "下载资源包",
|
||
mask: true,
|
||
})
|
||
uni.downloadFile({ // 下载资源包
|
||
url: data.appurl,
|
||
success: (downloadResult) => {
|
||
uni.hideLoading()
|
||
if (downloadResult.statusCode ===
|
||
200) {
|
||
plus.runtime.install(downloadResult
|
||
.tempFilePath, { // 安装资源包
|
||
force: false
|
||
},
|
||
function() {
|
||
console.log(
|
||
'install success...'
|
||
);
|
||
plus.runtime
|
||
.restart(); // 重启APP
|
||
},
|
||
function(e) {
|
||
console.error(e,
|
||
'install fail...'
|
||
);
|
||
})
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
}
|
||
|
||
export default {
|
||
check
|
||
} |