提交 5e5ca708 编写于 作者: L linju

123

import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import baseappConfig from '@/baseapp.config.json';
import baseappConfig from '@/baseapp.config.json';
// #ifdef APP-PLUS
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import callCheckVersion from '@/uni_modules/uni-upgrade-center-app/utils/call-check-version';
// #endif
export default function() {
// 初始化appVersion
initAppVersion();
// 检查更新
checkUpdate();
//自定义路由拦截
const {"router":{needLogin}} = baseappConfig //需要登陆的页面
......@@ -61,17 +61,29 @@ function initAppVersion() {
// #ifdef APP-PLUS
let appid = plus.runtime.appid;
plus.runtime.getProperty(appid, (wgtInfo) => {
wgtInfo.version
let appVersion = plus.runtime;
let appVersion = plus.runtime;
let currentVersion = appVersion.versionCode > wgtInfo.versionCode ? appVersion : wgtInfo;
getApp({
allowDefault: true
}).appVersion = {
}).appVersion = {
...currentVersion,
appid,
version: appVersion,
wgtVersion: wgtInfo,
finall: appVersion.versionCode > wgtInfo.versionCode ? appVersion : wgtInfo
}
});
hasNew:true
}
// 检查更新小红点
callCheckVersion()
.then(res=>{
if(res.result.code>0){
// 有新版本
getApp({
allowDefault: true
}).appVersion.hasNew = true;
}
})
});
// 检查更新
checkUpdate();
// #endif
}
......
......@@ -6,7 +6,8 @@
<title>隐私政策</title>
<style type="text/css">
#wrap {
padding: 10px;
padding: 10px;
padding-top: 0;
white-space-collapse: discard;
}
......@@ -16,7 +17,9 @@
.title {
text-align: center;
text-indent: 0;
text-indent: 0;
font-size: 0.8em;
color: #9f9f9f;
}
</style>
</head>
......@@ -30,7 +33,8 @@
<p>
1.适用范围
</p>
<p>a.在您注册我们帐号时,您根据我们要求提供的个人注册信息;<br>
<p>
a.在您注册我们帐号时,您根据我们要求提供的个人注册信息;<br>
b.在您使用我们网络服务,或访问我们平台网页时,我们自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据;<br>
c.我们通过合法途径从商业伙伴处取得的用户个人数据。
</p>
......
<template>
<view>
<text class="content">更新日期(2021-04-09)
dcloud(以下简称我们)尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,我们会按照本隐私权政策的规定使用和披露您的个人信息。但我们将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,我们不会将这些信息对外披露或向第三方提供。我们会不时更新本隐私权政策。
您在同意我们服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于我们服务使用协议不可分割的一部分。
1.适用范围
a.在您注册我们帐号时,您根据我们要求提供的个人注册信息;
b.在您使用我们网络服务,或访问我们平台网页时,我们自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据;
c.我们通过合法途径从商业伙伴处取得的用户个人数据。
您了解并同意,以下信息不适用本隐私权政策:
a.您在使用我们平台提供的搜索服务时输入的关键字信息;
b.我们收集到的您在我们发布的有关信息数据,包括但不限于参与活动、成交信息及评价详情;
c.违反法律规定或违反我们规则行为及我们已对您采取的措施。
2.信息使用
a.在您注册我们帐号时,您根据我们要求提供的个人注册信息;
b.在您使用我们网络服务,或访问我们平台网页时,我们自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据;
c.我们通过合法途径从商业伙伴处取得的用户个人数据。
您了解并同意,以下信息不适用本隐私权政策:
a.您在使用我们平台提供的搜索服务时输入的关键字信息;
b.我们收集到的您在我们发布的有关信息数据,包括但不限于参与活动、成交信息及评价详情;
c.违反法律规定或违反我们规则行为及我们已对您采取的措施。
</text>
<web-view src="http://static-f184e7c3-1912-41b2-b81f-435d1b37c7b4.bspapp.com/baseApp/privacy.html"></web-view>
</view>
</template>
......
......@@ -6,7 +6,8 @@
<title>服务协议</title>
<style type="text/css">
#wrap {
padding: 10px;
padding: 10px;
padding-top: 0;
white-space-collapse: discard;
}
......@@ -16,7 +17,9 @@
.title {
text-align: center;
text-indent: 0;
text-indent: 0;
font-size: 0.8em;
color: #9f9f9f;
}
</style>
</head>
......@@ -36,8 +39,8 @@
条款如下:
</p>
<p>
一、定义条款 接受并同意本服务协议全部条款及发布的其他各类规则,通过网站注册成为会员,且具备完全民事行为能力或者获经法定代理人同意的限制民事行为能力的自然人、法人、个体工商户或者其他组织。
用户分为商家用户和普通用户。 1.1.1 商家用户 指通过注册成为的会员,并发布商家及其产品或者服务信息的法人、个体工商户或者其他组织,即为本服务协议文中“商家”。 1.1.2 普通用户 指享受服务的普通用户,即为本服务协议文中“用户”。 
一、定义条款 接受并同意本服务协议全部条款及发布的其他各类规则,通过网站注册成为会员,且具备完全民事行为能力或者获经法定代理人同意的限制民事行为能力的自然人、法人、个体工商户或者其他组织。<br>
用户分为商家用户和普通用户。 1.1.1 商家用户 指通过注册成为的会员,并发布商家及其产品或者服务信息的法人、个体工商户或者其他组织,即为本服务协议文中“商家”。 1.1.2 普通用户 指享受服务的普通用户,即为本服务协议文中“用户”。
</p>
<p>
二、用户注册  2.1 注册资格 用户保证,其具有完全民事权利能力和行为能力或虽不具有完全民事权利能力和行为能力但经其法定代理人同意享用服务。否则,其与之间的服务协议自始无效,一经发现,有权立即注销该用户,并追究其使用提供服务的一切法律责任。 2.2 注册流程 2.2.1 用户同意根据用户注册页面要求提供有效电子邮箱、联系电话等信息,设置账号及密码,用户应确保所提供全部信息的真实性、完整性和准确性。 2.2.2 用户合法、完整并有效提供注册所需信息的,有权获得账号和密码,账号和密码用于用户在进行会员登录。同时用户应当对以其账号进行的所有活动和事件负法律责任。 2.2.3 用户获得账号及密码时视为用户注册成功,用户同意接收发送的与管理、运营相关的电子邮件和/或短消息。 2.3 税费承担 用户通过购销产品或服务而发生的全部应纳税赋,均由用户自行支付。 "
......
<template>
<view>
<text class="content">更新日期(2021-04-09)
尊敬的用户,欢迎阅读dcloud服务协议(以下简称“本服务协议”)。 与用户共同确认: 
1. 用户点击本服务协议正本下方的“确认”按钮并完成注册程序、获得账号和密码时,则视为用户与已达成本服务协议。本服务协议即在用户和之间产生法律效力。 
2. 本服务协议内容包括协议正文及所有已经发布的或将来可能发布的各类规则。用户在使用提供的各项服务的同时,承诺接受并遵守相关的各类规则。 
3. 有权根据需要不时地制定、修改本服务协议正文或各类规则,如本服务协议有任何变更,将在网站上刊载公告,予以公示。经修订的协议一经在网站公布后,立即自动生效。各类规则在网站发布后立即生效,亦成为本服务协议的一部分。若用户登录或继续使用提供服务的,将表示用户接受经修订的协议。若用户不同意相关变更,必须停止使用提供的服务。 
4. 及用户均已认真阅读本服务协议中的全部条款(特别是以黑体字或下划线标示出的有关及用户重大权益的条款)及发布的其他各类规则的内容,对协议正文及各类规则均以知晓、理解并接受,同意将其作为确定双方权利、义务的依据。  
条款如下:
一、定义条款 接受并同意本服务协议全部条款及发布的其他各类规则,通过网站注册成为会员,且具备完全民事行为能力或者获经法定代理人同意的限制民事行为能力的自然人、法人、个体工商户或者其他组织。
用户分为商家用户和普通用户。 1.1.1 商家用户 指通过注册成为的会员,并发布商家及其产品或者服务信息的法人、个体工商户或者其他组织,即为本服务协议文中“商家”。 1.1.2 普通用户 指享受服务的普通用户,即为本服务协议文中“房客”。  
二、用户注册  2.1 注册资格 用户保证,其具有完全民事权利能力和行为能力或虽不具有完全民事权利能力和行为能力但经其法定代理人同意享用服务。否则,其与之间的服务协议自始无效,一经发现,有权立即注销该用户,并追究其使用提供服务的一切法律责任。 2.2 注册流程 2.2.1 用户同意根据用户注册页面要求提供有效电子邮箱、联系电话等信息,设置账号及密码,用户应确保所提供全部信息的真实性、完整性和准确性。 2.2.2 用户合法、完整并有效提供注册所需信息的,有权获得账号和密码,账号和密码用于用户在进行会员登录。同时用户应当对以其账号进行的所有活动和事件负法律责任。 2.2.3 用户获得账号及密码时视为用户注册成功,用户同意接收发送的与管理、运营相关的电子邮件和/或短消息。 2.3 税费承担 用户通过购销产品或服务而发生的全部应纳税赋,均由用户自行支付。 "
</text>
<web-view src="http://static-f184e7c3-1912-41b2-b81f-435d1b37c7b4.bspapp.com/baseApp/service.html"></web-view>
</view>
</template>
......
......@@ -20,7 +20,12 @@
:clickable="true"
:to="item.to"
@click="ucenterListClick(item)"
></uni-list-item>
>
<view v-if="item.showBadge" class="item-footer" slot="footer">
<text class="item-footer-text">{{item.rightText}}</text>
<view class="item-footer-badge"></view>
</view>
</uni-list-item>
</uni-list>
</view>
</template>
......@@ -74,8 +79,9 @@
//#ifdef APP-PLUS
{
title: '检查更新',
rightText: `V${getApp().appVersion.finall.version}_${getApp().appVersion.finall.versionCode}`,
event:'checkVersion'
rightText: `V${getApp().appVersion.version}_${getApp().appVersion.versionCode}`,
event:'checkVersion',
showBadge:true
}
//#endif
],
......@@ -250,6 +256,26 @@
-webkit-transform: scaleY(0.2);
transform: scaleY(0.2);
}
/* #endif */
/* #endif */
.item-footer{
flex-direction: row;
align-items: center;
}
.item-footer-text{
color: #999;
font-size: 24rpx;
padding-right: 10rpx;
}
.item-footer-badge{
width: 20rpx;
height: 20rpx;
/* #ifndef APP-NVUE */
border-radius: 50%;
/* #endif */
/* #ifdef APP-NVUE */
border-radius: 10rpx;
/* #endif */
background-color: #DD524D;
}
</style>
static/tabbar/grid.png

11.1 KB | W: | H:

static/tabbar/grid.png

5.1 KB | W: | H:

static/tabbar/grid.png
static/tabbar/grid.png
static/tabbar/grid.png
static/tabbar/grid.png
  • 2-up
  • Swipe
  • Onion skin
static/tabbar/grid_active.png

5.9 KB | W: | H:

static/tabbar/grid_active.png

4.6 KB | W: | H:

static/tabbar/grid_active.png
static/tabbar/grid_active.png
static/tabbar/grid_active.png
static/tabbar/grid_active.png
  • 2-up
  • Swipe
  • Onion skin
static/tabbar/list.png

8.2 KB | W: | H:

static/tabbar/list.png

6.0 KB | W: | H:

static/tabbar/list.png
static/tabbar/list.png
static/tabbar/list.png
static/tabbar/list.png
  • 2-up
  • Swipe
  • Onion skin
static/tabbar/list_active.png

4.9 KB | W: | H:

static/tabbar/list_active.png

5.1 KB | W: | H:

static/tabbar/list_active.png
static/tabbar/list_active.png
static/tabbar/list_active.png
static/tabbar/list_active.png
  • 2-up
  • Swipe
  • Onion skin
static/tabbar/me.png

11.6 KB | W: | H:

static/tabbar/me.png

6.6 KB | W: | H:

static/tabbar/me.png
static/tabbar/me.png
static/tabbar/me.png
static/tabbar/me.png
  • 2-up
  • Swipe
  • Onion skin
static/tabbar/me_active.png

6.9 KB | W: | H:

static/tabbar/me_active.png

5.8 KB | W: | H:

static/tabbar/me_active.png
static/tabbar/me_active.png
static/tabbar/me_active.png
static/tabbar/me_active.png
  • 2-up
  • Swipe
  • Onion skin
## 0.1.4(2021-04-13)
- 更新文档。明确云函数调用结果
## 0.1.3(2021-04-13)
- 解耦云函数与弹框处理。utils中新增 call-check-version.js,可用于单独检测是否有更新
## 0.1.2(2021-04-07)
- 更新版本对比函数 compare
## 0.1.1(2021-04-07)
......
{
"id": "uni-upgrade-center-app",
"displayName": "升级中心 uni-upgrade-center - App",
"version": "0.1.2",
"version": "0.1.4",
"description": "升级中心前台检查更新",
"keywords": [
"uniCloud",
......
......@@ -71,25 +71,46 @@
6. 检查更新前端使用示例:`uni_modules/uni-upgrade-center-app/utils/check-update.js`,在要检查更新的地方导入调用即可
**Tips**
1. `check-version`云函数内部有版本对比函数(compare)。
- 使用多段式版本格式(如:"3.0.0.0.0.1.0.1", "3.0.0.0.0.1")。如果不满足对比规则,请自行修改。
- 如果修改,请将*pages/upgrade-popup.vue**compare*函数一并修改
## 项目代码说明
### 更新弹框
- `upgrade-popup.vue` - 更新应用:
- 如果`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面
- 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包)
- 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除
- 如果本地没有包或者包不符合安装条件,则进行下载安装包
- 点击下载会有进度条、已下载大小和下载包的大小
- 下载完成会提示安装:
- 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启
- 如果是 原生安装包,则直接跳出去覆盖安装
- 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出
- 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中
- 如果云函数`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面
- 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包)
- 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除
- 如果本地没有包或者包不符合安装条件,则进行下载安装包
- 点击下载会有进度条、已下载大小和下载包的大小
- 下载完成会提示安装:
- 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启
- 如果是 原生安装包,则直接跳出去覆盖安装
- 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出
- 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中
### 工具类 utils
- `call-check-version`
- 请求云函数`check-version`拿取版本检测结果
- `check-update`
- 调用`call-check-version`并根据结果判断是否显示更新弹框
### 云函数
- `check-version` - 检查应用更新:
- 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传
- 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新
- 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新
- 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新
- 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion
\ No newline at end of file
- 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传
- 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新
- 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新
- 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新
- 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion
- 返回结果:
|code|message|
|:-:|:-:|
|0|当前版本已经是最新的,不需要更新|
|101|wgt更新|
|102|整包更新|
|-101|暂无更新或检查appid是否填写正确|
|-102|请检查传参是否填写正确|
\ No newline at end of file
export default function() {
// #ifdef APP-PLUS
return new Promise((resolve, reject) => {
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
uniCloud.callFunction({
name: 'check-version',
data: {
appid: plus.runtime.appid,
appVersion: plus.runtime.version,
wgtVersion: widgetInfo.version
},
success: (e) => {
resolve(e)
},
fail: (error) => {
reject(error)
}
})
})
})
// #endif
// #ifndef APP-PLUS
return new Promise((resolve, reject) => {
reject({
message: '请在App中使用'
})
})
// #endif
}
import callCheckVersion from './call-check-version'
// 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__'
export default function() {
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
uniCloud.callFunction({
name: 'check-version',
data: {
appid: plus.runtime.appid,
appVersion: plus.runtime.version,
wgtVersion: widgetInfo.version
},
success: async (e) => {
if (!e.result) return;
const {
code,
message,
is_silently, // 是否静默更新
url, // 安装包下载地址
platform, // 安装包平台
type // 安装包类型
} = e.result;
callCheckVersion().then(async (e) => {
if (!e.result) return;
const {
code,
message,
is_silently, // 是否静默更新
url, // 安装包下载地址
platform, // 安装包平台
type // 安装包类型
} = e.result;
// 此处逻辑仅为实例,可自行编写
if (code > 0) {
// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
const {
fileList
} = await uniCloud.getTempFileURL({
fileList: [url]
});
e.result.url = fileList[0].tempFileURL
// 此处逻辑仅为实例,可自行编写
if (code > 0) {
// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
const {
fileList
} = await uniCloud.getTempFileURL({
fileList: [url]
});
e.result.url = fileList[0].tempFileURL
// 静默更新,只有wgt有
if (is_silently) {
uni.downloadFile({
url: e.result.url,
success: res => {
if (res.statusCode == 200) {
// 下载好直接安装,下次启动生效
plus.runtime.install(res.tempFilePath, {
force: false
});
}
}
});
return;
// 静默更新,只有wgt有
if (is_silently) {
uni.downloadFile({
url: e.result.url,
success: res => {
if (res.statusCode == 200) {
// 下载好直接安装,下次启动生效
plus.runtime.install(res.tempFilePath, {
force: false
});
}
}
});
return;
}
/**
* 提示升级一
* 使用 uni.showModal
*/
// return updateUseModal(e.result)
/**
* 提示升级一
* 使用 uni.showModal
*/
// return updateUseModal(e.result)
/**
* 提示升级二
* 官方适配的升级弹窗,可自行替换资源适配UI风格
*/
uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
uni.navigateTo({
url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
fail: (err) => {
console.error('更新弹框跳转失败', err)
uni.removeStorageSync(PACKAGE_INFO_KEY)
}
})
} else if (code < 0) {
// TODO 云函数报错处理
console.error(message)
/**
* 提示升级二
* 官方适配的升级弹窗,可自行替换资源适配UI风格
*/
uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
uni.navigateTo({
url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
fail: (err) => {
console.error('更新弹框跳转失败', err)
uni.removeStorageSync(PACKAGE_INFO_KEY)
}
},
fail: (err) => {
// TODO 云函数报错处理
console.error(err.message)
}
})
});
})
} else if (code < 0) {
// TODO 云函数报错处理
console.error(message)
}
}).catch(err => {
// TODO 云函数报错处理
console.error(err.message)
})
// #endif
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册