uni-ui 版本升级提示做个记录

appUpdate.js

var _maskView, _contentView, _downloadTask, _loadingProgress, _screenHeight, _screenWidth, _config = {
        forceUpgrade: false,
        titleText: "版本更新",
        content: "",
        contentAlign: "left",
        loadingColor: "#329EEE",
        cancelText: "暂不升级",
        cancelColor: "#666",
        confirmText: "立即升级",
        confirmColor: "#329EEE",
        windowHeight: 380,
        packageUrl: "",
        browser: false,
        maskColor: "rgba(0,0,0,0.3)"
    },
    _calculatePosition = function() {
        return {
            top: (_screenHeight - _config.windowHeight) / 2,
            left: _screenWidth * .05,
            width: _screenWidth * .9,
            right: _screenWidth * .05,
            height: _config.windowHeight
        }
    },
    _createMask = function() {
        _maskView = new plus.nativeObj.View("maskView", {
            top: "0px",
            left: "0px",
            width: "100%",
            height: "100%",
            backgroundColor: _config.maskColor
        })
    },
    _createContentView = function() {
        var calculatePosition = _calculatePosition();
        _contentView = new plus.nativeObj.View("contentView", {
            top: calculatePosition.top + "px",
            left: calculatePosition.left + "px",
            height: _config.windowHeight + "px",
            width: calculatePosition.width + "px",
            overflow: "auto"
        });
        _contentView.drawRect({
            color: "#ffffff",
            radius: "20px"
        }, {
            width: "100%",
            height: "100%"
        }, "roundedRect");
        _contentView.drawText(_config.titleText, {
            top: "20px",
            height: "20px",
        }, {
            size: "16px",
            color: "#333",
            align: "center",
        }, "titleText");
        _contentView.drawText(_config.content, {
            top: "60px",
            left: "20px",
            right: "20px",
            height: _config.windowHeight - 120 + "px",
        }, {
            size: "16px",
            color: "#666",
            align: _config.contentAlign,
            verticalAlign: "top",
            whiteSpace: "normal",
            overflow: "ellipsis"
        }, "UpdaterContent");
        _createLoading(-2);
        var top = _config.windowHeight - 60 + 15;
        var fontSize = '16px';
        if (!_config.forceUpgrade) {
            _contentView.drawRichText("<font style=\"font-size:" + fontSize + ";\" color=\"" + _config.cancelColor +
                "\">" + _config
                .cancelText + "</font>", {
                    width: "50%",
                    top: top + "px",
                    left: "0px"
                }, {
                    align: "center",
                    onClick: function() {
                        close()
                    }
                }, "cancel");
            _contentView.drawRichText("<font color=\"" + _config.confirmColor +
                "\" style=\"font-size:" + fontSize + ";\">" +
                _config.confirmText + "</font>", {
                    width: "50%",
                    right: "0px",
                    top: top + "px"
                }, {
                    align: "center",
                    onClick: function() {
                        _config.packageUrl ? "android" === plus.os.name.toLowerCase() ? _config.browser ? (plus
                            .runtime.openURL(_config.packageUrl)) : _createTask() : plus.runtime.openURL(
                            _config.packageUrl) : uni.showToast({
                            title: "安装包地址为空",
                            icon: "none"
                        })
                    }
                }, "submit")
        } else {
            _contentView.drawRichText("<font color=\"" + _config.confirmColor + "\" style=\"font-size:" + fontSize +
                ";\">" +
                _config.confirmText + "</font>", {
                    width: "100%",
                    right: "0px",
                    top: top + "px"
                }, {
                    align: "center",
                    onClick: function() {
                        _config.packageUrl ? "android" === plus.os.name.toLowerCase() ? _config.browser ? (plus
                            .runtime.openURL(_config.packageUrl)) : _createTask() : plus.runtime.openURL(
                            _config.packageUrl) : uni.showToast({
                            title: "安装包地址为空",
                            icon: "none"
                        })
                    }
                }, "submit")
        }
    },
    _createLoading = function(progress) {
        var calculatePosition = _calculatePosition();
        var top = _config.windowHeight - 65;
        var width = 0 <= progress ? (calculatePosition.width - 100) / 100 * progress : 0;
        width = parseInt(width);
        var text = 100 <= progress ? "下载完成" : "下载中...";
        var loadingText = "";
        loadingText = -1 == progress ? "资源加载中..." : 0 <= progress ? text + "(" + progress + "%)" : "";
        _contentView.drawRect({
            color: _config.loadingColor
        }, {
            width: width + "px",
            height: "3px",
            left: "20px",
            top: top + "px"
        }, "loading");
        _contentView.drawRichText("<font color=\"" + _config.loadingColor + "\">" + loadingText + "</font>", {
            width: "100px",
            top: top + "px",
            left: width + "px"
        }, {
            align: "center"
        }, "loadingText")
    },
    _createTask = function() {
        return _downloadTask ? void console.log("正在下载中") : void(_createLoading(-1),
            _downloadTask =
            uni.downloadFile({
                url: _config.packageUrl,
                success: function(res) {
                    if (200 === res.statusCode) {
                        var tempFilePath = res.tempFilePath;
                        uni.saveFile({
                            tempFilePath: tempFilePath,
                            success: function(res) {
                                plus.runtime.install(res.savedFilePath, {
                                    force: true
                                }, function(res) {
                                    console.log('安装包信息' + JSON.stringify(res))
                                }, function(res) {
                                    uni.showToast({
                                        title: '安装失败,请检查下载链接',
                                        icon: 'none',
                                        duration: 3000
                                    });
                                });
                                close();
                            }
                        })
                    }
                }
            }), _downloadTask.onProgressUpdate(function(res) {
                _loadingProgress != res.progress && (_loadingProgress = res.progress, _createLoading(res
                    .progress));
            }))
    },
    init = function(option) {
        _screenHeight = plus.screen.resolutionHeight;
        _screenWidth = plus.screen.resolutionWidth;
        _downloadTask = null;
        option.titleText && (_config.titleText = option.titleText);
        option.windowHeight && (_config.windowHeight = option.windowHeight);
        option.forceUpgrade && (_config.forceUpgrade = option.forceUpgrade);
        option.content && (_config.content = option.content);
        option.contentAlign && (_config.contentAlign = option.contentAlign);
        option.loadingColor && (_config.loadingColor = option.loadingColor);
        option.cancelText && (_config.cancelText = option.cancelText);
        option.cancelColor && (_config.cancelColor = option.cancelColor);
        option.confirmText && (_config.confirmText = option.confirmText);
        option.confirmColor && (_config.confirmColor = option.confirmColor);
        option.packageUrl && (_config.packageUrl = option.packageUrl);
        option.browser && (_config.browser = option.browser);
        option.maskColor && (_config.maskColor = option.maskColor);
        _createMask();
        _createContentView();
    },
    show = function() {
        _maskView && _maskView.show();
        _contentView && _contentView.show();
    },
    close = function() {
        _downloadTask && (_downloadTask.abort(), _downloadTask = null, _createLoading(-2));
        _maskView && _maskView.hide();
        _contentView && _contentView.hide();
    };
export default {
    init: init,
    show: show,
    close: close
}
 

app.vue

引入

    import appUpgrade from '@/common/appUpgrade.js';

使用

//升级检测
            uni.getSystemInfo({
                success: (res)=> {
                    uni.setStorageSync('device', res.platform);
                    plus.runtime.getProperty(plus.runtime.appid, (widgetInfo)=> {
                        uni.setStorageSync('version', widgetInfo.version);
                        this.$http.request({
                            url: '/common/getVersion',
                            success: (res) => {
                                if(res.data.data.upgrade=='Y'){
                                    appUpgrade.init({
                                        titleText: '版本更新'+res.data.data.version,
                                        packageUrl:res.data.data.url,
                                        content: res.data.data.content,
                                        forceUpgrade:res.data.data.forceUpgrade=='Y' ? true : false
                                    });
                                    appUpgrade.show();
                                }
                            }
                        });
                    });
                }
            });
            uni.onNetworkStatusChange( (res)=> {
                if(res.isConnected){
                    this.$store.dispatch('get_UserInfo')
                }
            });
            // #endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程笔记 html5cssjs 027 HTML输入属性(1/2)

[TOC](编程笔记 html5&css&js 027 HTML输入属性(1/2)) <input>元素除了type属性表示输入类型&#xff0c;后面还跟上其他属性&#xff0c;叫输入属性。 value 属性 value 属性规定输入字段的初始值&#xff1a; <form action"">First name:<…

2024年AMC8竞赛真题模拟比赛做一做(25题40分钟,含答案)

这两天陆续有家长朋友问我是否有2024年AMC8比赛的模拟题&#xff0c;有一些家长是想通过做模拟题来检查孩子的学习和备考情况&#xff0c;另外一些家长式准备“谋定而后动”&#xff0c;想让孩子先做一做&#xff0c;看看难不难&#xff0c;如果还可以再报名2024年的AMC8竞赛。…

芯课堂 | LVG免费开源GUI图形库

概述 本文介绍目前LVGL的应用小知识&#xff0c;希望对采用MCU设计UI界面的用户有所启发&#xff0c;开发出界面更友好的消费品或者工业产品&#xff0c;造福大众。 01.LVGL系统架构 LVGL系统框架 应用程序创建GUI并处理特定任务的应用程序。 LVGL本身是一个图形库。我们的…

Python Selenium如何下载网页中的图片到本地?(Base64编码的图片下载)

前言&#xff1a; 在网页上&#xff0c;图片有时会以Base64编码的形式嵌入在HTML中&#xff0c;而不是作为单独的文件提供。这种方式的优点是可以减少HTTP请求的数量&#xff0c;因为图片数据直接包含在HTML中&#xff0c;不需要额外的请求来获取图片文件。这对于小图片…

【TC3xx芯片】TC3xx芯片的GTM模块详解

目录 前言 正文 1.GTM模块功能概述 1.1 GTM具体功能 1.2 GTM架构 2. GTM模块输入时钟 2.1.fGTM的值怎么计算 3. CMU 3.1 CMU功能 3.2 CMU时钟的计算 3..2.1 CLS0_CLK怎么计算 3.2.1 GTM Global Clock时钟计算 3.2.2 分频时钟的计算 4. CCM 4.1 CCM功能 4.2 CCM…

SpringMVC-视图

SpringMVC中的视图实现了View接口&#xff0c;作用是渲染数据&#xff0c;将Model中的数据展示给用户。render是渲染方法&#xff0c;可以看到渲染的视图是一个View类型的对象。 SpringMVC视图的种类有很多&#xff0c;默认有转发视图和重定向视图。 如果配置了Thymeleaf视图解…

使用Docker方式安装Artifactory

1、安装前环境准备 首先要关闭防火墙&#xff0c;关闭Selinux&#xff0c;准备好安装好的docker。以下安装版本&#xff1a;7.19.10 ##关闭防火墙&#xff0c;并设置开机自关闭 systemctl stop firewalld.service systemctl disable firewalld.service ##查看防火墙状态 sy…

Zookeeper相关问题及答案(2024)

1、ZooKeeper是什么&#xff1f;它的主要用途是什么&#xff1f; ZooKeeper 是一个由 Apache 预先开发和维护的开源服务器&#xff0c;用于协调分布式应用程序。它是一个集中式服务&#xff0c;为分布式应用提供一致性保障&#xff0c;配置管理&#xff0c;命名&#xff0c;同…

SpringCloud Alibaba之Nacos配置中心配置详解

目录 Nacos配置中心数据模型Nacos配置文件加载Nacos配置 Nacos配置中心数据模型 Nacos 数据模型 Key 由三元组唯一确定&#xff0c;三元组分别是Namespace、Group、DataId&#xff0c;Namespace默认是公共命名空间&#xff08;public&#xff09;&#xff0c;分组默认是 DEFAUL…

『年度总结』逐梦编程之始:我的2023学习回顾与展望

目录 前言 我与Python 我与C语言 第一篇正式博客&#xff1a; 第二篇正式博客&#xff08;扫雷&#xff09;&#xff1a; 指针学习笔记: C语言学习笔记&#xff1a; 我与数据结构&#xff1a; yuan 这篇博客&#xff0c;我将回顾2023年编程之旅的起点&#xff0c;同时展…

SpringCloud Alibaba

服务治理Spring Cloud落地技术Spring Cloud Alibaba落地技术服务注册与发现Eureka、ZookeeperNacos服务调用Feign、OpenFeignDubbo&#xff08;HSF&#xff09;负载均衡RibbonRibbon网关SpringCloud ZuulGetway服务容错HystrixSentinel分布式调度--&#xff08;替代方案&#x…

Flowable中6种部署方式

1. addClasspathResource src/main/resources/processes/LeaveProcess.bpmn20.xml Deployment deploy repositoryService.createDeployment().name("请假审批").addClasspathResource("processes/LeaveProcess.bpmn20.xml").deploy();2. addInputStream…

pandas.DataFrame() 数据自动写入Excel

DataFrame 表格数据格式 &#xff1b; to_excel 写入Excel数据&#xff1b; read_excel 阅读 Excel数据函数 import pandas as pd#df2 pd.DataFrame({neme: [zhangsan, lisi, 3]}) df1 pd.DataFrame({One: [1, 2, 3],name: [zhangsan, lisi, 3]})#One是列明&#xff0c;123是…

vue3.0与vue2.0-prop

在Vue 3.0中&#xff0c;与Vue 2.0相比&#xff0c;有一些改变和新的特性涉及到props。 Composition API: Vue 3.0引入了Composition API&#xff0c;它提供了一种新的方式来组织和重用组件的逻辑。在Composition API中&#xff0c;props可以通过使用setup函数中的props参数来…

分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程…

计算机基础面试题 |09.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

面试算法89:房屋偷盗

题目 输入一个数组表示某条街道上的一排房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取到多少财产。例如&#xff0c;街道上5幢房屋内的财产用数组[2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;3]表示…

http 503 错误

503错误是一种HTTP状态码&#xff0c;表示你请求的网站或服务暂时不可用&#xff0c;通常是因为服务器过载或维护&#xff0c;你可能会看到类似这样的提示&#xff1a;503 Service Unavailable、503 Service Temporarily Unavailable、HTTP Server Error 503、HTTP Error 503 I…

论文管理器

论文管理器 这个论文管理器仍然存在许多漏洞。目前&#xff0c;通过按照一些例行程序操作&#xff0c;它可以正常工作。我将在有时间的时候改进代码&#xff0c;提供详细说明&#xff0c;并添加新功能。当该管理器的代码进行优化后&#xff0c;我会上传到github上。 一个建立…