diff --git a/docs/api/canvas/CanvasContext.md b/docs/api/canvas/CanvasContext.md
index 51b782d2a82309c291f20be8b7e92b0e2bb92ecb..808098ff4b8800285932348b709100999d823d79 100644
--- a/docs/api/canvas/CanvasContext.md
+++ b/docs/api/canvas/CanvasContext.md
@@ -79,7 +79,7 @@ App-nvue下如需使用canvas,暂未封装为uni API,可参考[文档](https
### CanvasContext.arc
-画一条弧线。创建一个圆可以用 ```arc()``` 方法指定其实弧度为0,终止弧度为 ```2 * Math.PI```。用 ```stroke()``` 或者 ```fill()``` 方法来在 ```canvas``` 中画弧线。
+画一条弧线。创建一个圆可以用 ```arc()``` 方法指定起始弧度为0,终止弧度为 ```2 * Math.PI```。用 ```stroke()``` 或者 ```fill()``` 方法来在 ```canvas``` 中画弧线。
**参数**
diff --git a/docs/api/location/open-location.md b/docs/api/location/open-location.md
index 088876e0bd948965091dad53040223539fd877f0..d81de4c25edc4ae42fe4b75e1a5b1ccbe8b5f954 100644
--- a/docs/api/location/open-location.md
+++ b/docs/api/location/open-location.md
@@ -14,8 +14,8 @@
|latitude|Float|是|纬度,范围为-90~90,负数表示南纬,使用 gcj02 国测局坐标系||
|longitude|Float|是|经度,范围为-180~180,负数表示西经,使用 gcj02 国测局坐标系||
|scale|Int|否|缩放比例,范围5~18,默认为18|微信小程序|
-|name|String|否|位置名||
-|address|String|否|地址的详细说明||
+|name|String|否|位置名||支付宝必填
+|address|String|否|地址的详细说明|| 支付宝必填
|success|Function|否|接口调用成功的回调函数||
|fail|Function|否|接口调用失败的回调函数||
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| |
diff --git a/docs/api/media/record-manager.md b/docs/api/media/record-manager.md
index 7405d921ecc0b92c9e28ebe0605f1fe0b366bc57..1c90900eba6bdacc48da9ca07b5e635e0c3cfee5 100644
--- a/docs/api/media/record-manager.md
+++ b/docs/api/media/record-manager.md
@@ -29,7 +29,7 @@
|sampleRate|Number|否|采样率,有效值 8000/16000/44100|
|numberOfChannels|Number|否|录音通道数,有效值 1/2|
|encodeBitRate|Number|否|编码码率,有效值见下表格|
-|format|String|否|音频格式,有效值 aac/mp3|
+|format|String|否|音频格式,有效值 aac/mp3/wav/PCM|
|frameSize|String|否|指定帧大小,单位 KB。传入 frameSize 后,每录制指定帧大小的内容后,会回调录制的文件内容,不指定则不会回调。暂仅支持 mp3 格式。|
其中,采样率和码率有一定要求,具体有效值如下:
diff --git a/docs/api/other/authorize.md b/docs/api/other/authorize.md
index dc05fce9497b24f27f36ff014b030d536703c498..931fe83cb4269b1bcdfa4beab872c825c83ede39 100644
--- a/docs/api/other/authorize.md
+++ b/docs/api/other/authorize.md
@@ -34,6 +34,7 @@
|scope.invoiceTitle|[uni.chooseInvoiceTitle](/api/other/invoice-title) |发票抬头|微信小程序、百度小程序、QQ小程序|
|scope.werun |[wx.getWeRunData](https://developers.weixin.qq.com/miniprogram/dev/api/wx.getWeRunData.html) |微信运动步数 |微信小程序|
+注意:scope.userLocation 权限需要在 manifest.json 配置 permission, 详见:[https://uniapp.dcloud.io/collocation/manifest](https://uniapp.dcloud.io/collocation/manifest)
**代码示例**
diff --git a/docs/api/plugins/provider.md b/docs/api/plugins/provider.md
index ad51f8f1a2c3d48e62f04fa3765fcc5c0cd2f172..ed1ef0f7fea0ff17faa6301e9c6242c274c50656 100644
--- a/docs/api/plugins/provider.md
+++ b/docs/api/plugins/provider.md
@@ -7,9 +7,9 @@
**平台差异说明**
-|App|H5|微信小程序|支付宝小程序|百度小程序|字节跳动小程序|QQ小程序|
-|:-|:-|:-|:-|:-|:-|:-|
-|√|x|√|√|√|√|√|
+|App|H5|微信小程序|企业微信小程序|支付宝小程序|百度小程序|字节跳动小程序|QQ小程序|
+|:-|:-|:-|:-|:-|:-|:-|:-|
+|√|x|√|x|√|√|√|√|
**OBJECT 参数说明**
diff --git a/docs/api/system/barcode.md b/docs/api/system/barcode.md
index a31cf71c3470847d5c3d3b1c3816595e311d4093..a0f560612d873a1f3e21df7f24d7e266805c2b67 100644
--- a/docs/api/system/barcode.md
+++ b/docs/api/system/barcode.md
@@ -60,6 +60,7 @@ uni.scanCode({
- App-vue如果想自定义扫码,可参考[uni-app中如何使用5+的原生界面控件](http://ask.dcloud.net.cn/article/35036)和[plus.barcode API](https://www.html5plus.org/doc/zh_cn/barcode.html)
- App-nvue,支持barcode组件,可自定义扫码界面。[详见](https://uniapp.dcloud.io/component/barcode)。App端自定义扫码界面,建议使用nvue方式。
+- App的扫码引擎,使用业内开源的通用扫码库,扫码效率比不过微信、支付宝等商业扫码库。如需更强的扫码效果,请使用支付宝提供的扫码插件:[https://ext.dcloud.net.cn/plugin?id=2636](https://ext.dcloud.net.cn/plugin?id=2636)
- 微信小程序自定义扫码界面,可使用camera组件。[详见](https://uniapp.dcloud.io/component/camera)
- 微信内嵌浏览器运行H5版时,可通过js sdk实现扫码,需要引入一个单独的js,[详见](https://ask.dcloud.net.cn/article/35380)
- 在扫码界面点击返回也会进入 `fail` 回调中
diff --git a/docs/case.md b/docs/case.md
index ade8edeba1860018a5a129fe87bf9c05545d5aaa..598f9daceff412dde31e44ba20223b19ff642518 100644
--- a/docs/case.md
+++ b/docs/case.md
@@ -255,6 +255,8 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**香橙:** 餐馆SaaS服务,为餐馆提供多端的手机点餐、下单、排队叫号、营销推广解决方案。[官网](http://ivcvc.com)
+**大商创:** 全渠道多用户商城解决方案。[https://www.dscmall.cn](https://www.dscmall.cn)
+
#### 国企
**中国移动咪咕商城:**[H5](https://mgmall.migudm.cn/)
@@ -734,7 +736,7 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**大丰收农资优选:**优质农资商品购物。[安卓](https://www.dfs168.com/market/viewapp.html?id=503)、[iOS](https://apps.apple.com/cn/app/id1489907205)、[H5](http://wechat.dfs168.com)、微信小程序搜索:大丰收农资优选
-
+**迷上我** 恋爱学习App,[Android及iOS](https://a.app.qq.com/o/simple.jsp?pkgname=com.mishangwo)
#### 更多小程序案例(可在微信小程序中搜索)@wx-more
diff --git a/docs/casecode.md b/docs/casecode.md
index 7f731363f2868a4ddbc25108def4b96001fce40d..0347a88a0eb2e5edf24ac409d551bf9a7a0c73df 100644
--- a/docs/casecode.md
+++ b/docs/casecode.md
@@ -22,6 +22,8 @@
- [直播模板](https://ext.dcloud.net.cn/plugin?id=226):直播推流、拉流、镜头切换、美颜等常用功能 -- by 1262880469
+- [仿豆瓣影视项目示例](https://ext.dcloud.net.cn/plugin?id=1839):基于uni-app的风格简约的影视项目,功能齐全完善 -- by Tz张无忌
+
- [得推B2C商城](https://ext.dcloud.net.cn/plugin?id=187):一套简洁的B2C商城,全部功能完善,用户、下单、注册 -- by 得推网络科技
- [商城类项目模版](https://ext.dcloud.net.cn/plugin?id=200):漂亮的商城前端模板,可变背景导航栏、购物车、详情模板 -- by MixR
diff --git a/docs/collocation/_sidebar.md b/docs/collocation/_sidebar.md
index 6033d144531776786c18493d4fa2cbe7eb0c194c..6e1ddc3d44602d82a8957be65764dc8d5f6f44dd 100644
--- a/docs/collocation/_sidebar.md
+++ b/docs/collocation/_sidebar.md
@@ -53,7 +53,7 @@
官方QQ交流群
-
+
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -67,13 +67,13 @@
群25:165297000(2000人已满)
群24:672494800(2000人已满)
群23:599958679(2000人已满)
-
群22:687186952(2000人已满)
+
群21:717019120(2000人已满)
群20:165796402(2000人已满)
群19:165657124(2000人已满)
群18:698592271(2000人已满)
群17:951348804(2000人已满)
-
+
群16:719211033(2000人已满)
群15:516984120(2000人已满)
群14:465953250(2000人已满)
群13:699478442(2000人已满)
diff --git a/docs/collocation/manifest.md b/docs/collocation/manifest.md
index 546c91327f4a41883dfdc2721d5f270457f13190..81145cd1b2daa4d92bbbfae484e2df71080dd786 100644
--- a/docs/collocation/manifest.md
+++ b/docs/collocation/manifest.md
@@ -207,14 +207,12 @@ splash(启动封面)是App必然存在的、不可取消的。
-
<%= htmlWebpackPlugin.options.title %>
@@ -265,8 +263,8 @@ Tips:`uni-app` 中 `manifest.json->h5->devServer` 实际上对应 `webpack`
#### publicPath
配置 publicPath 为 cdn 资源地址前缀,这样编译出来的 html 文件,引用的 js,css 路径会自动变成 cdn 上的地址。
-
-注意:如果想对图片生效,image组件的图片地址需要使用相对路径
+
+注意:如果想对图片生效,image组件的图片地址需要使用相对路径
**示例**
diff --git a/docs/component/_sidebar.md b/docs/component/_sidebar.md
index 35a4ecbd9284b9ebaa0e8e7244372293240321dd..4d182455b51499bbd5481e11c113c338590cad8e 100644
--- a/docs/component/_sidebar.md
+++ b/docs/component/_sidebar.md
@@ -6,7 +6,6 @@
* [movable-view](component/movable-view.md?id=movable-view)
* [cover-view](/component/cover-view?id=cover-view)
* [cover-image](/component/cover-view?id=cover-image)
- * [match-media](/component/match-media.md)
* 基础内容
* [icon](component/icon.md)
* [text](component/text.md)
@@ -89,86 +88,86 @@
* [配置小程序插件](component/mp-weixin-plugin.md)
* [原生组件说明](component/native-component.md)
-
+
diff --git a/docs/component/editor.md b/docs/component/editor.md
index 710c213332222527491a9c641eafe4dd2b217d2c..ef2acb13683525eff5fcfdfdc3dd82e59ca516f9 100644
--- a/docs/component/editor.md
+++ b/docs/component/editor.md
@@ -20,7 +20,7 @@
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|2.0+,app-vue|2.4.5+|基础库 2.7.0+|x|x|x|x|
-editor组件目前只有H5、App的vue页面和微信支持,其他端平台自身为提供editor组件,只能使用web-view加载web页面,也可搜索[插件市场](https://ext.dcloud.net.cn/search?q=%E5%AF%8C%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91) 获取简单的markdown富文本编辑器
+editor组件目前只有H5、App的vue页面和微信支持,其他端平台自身未提供editor组件,只能使用web-view加载web页面,也可搜索[插件市场](https://ext.dcloud.net.cn/search?q=%E5%AF%8C%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91) 获取简单的markdown富文本编辑器
| 属性 | 类型 | 默认值 | 必填 | 说明 |
| --- | --- | --- | --- | --- |
diff --git a/docs/component/form.md b/docs/component/form.md
index 840c768541dc67ea2677e547f5fe0cdae727c9ae..26f4c9bee3b5350baa921ae732e9aceee0587c91 100644
--- a/docs/component/form.md
+++ b/docs/component/form.md
@@ -97,9 +97,26 @@
![uniapp](https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/img/form.png?t=201857)
-**小程序端注意事项**
+**使用内置 behaviors**
-小程序端在`form`内的自定义组件内有`input`等表单控件时,无法在`form`的`submit`事件内获取组件内表单控件值,此时可以使用`behaviors`,示例如下:
+小程序端在`form`内的自定义组件内有`input`表单控件时,或者用普通标签实现表单控件,例如``评分``等,无法在`form`的`submit`事件内获取组件内表单控件值,此时可以使用`behaviors`。
+
+对于 form 组件,目前可以自动识别下列内置 behaviors:
+
+uni://form-field
+
+> 目前仅支持 微信小程序、QQ小程序、百度小程序、h5。
+
+**uni://form-field**
+
+使自定义组件有类似于表单控件的行为。 form 组件可以识别这些自定义组件,并在 submit 事件中返回组件的字段名及其对应字段值。这将为它添加以下两个属性。
+
+|属性名|类型|描述|
+|:-|:-|:-|
+|name|String|在表单中的字段名|
+|value|任意|在表单中的字段值|
+
+示例如下:
```html
diff --git a/docs/component/input.md b/docs/component/input.md
index 9b0bd3f41c55e07ea420afa6edc3296fb92fb250..b34e44afe863be4429fd56943cdac8983238587f 100644
--- a/docs/component/input.md
+++ b/docs/component/input.md
@@ -7,7 +7,7 @@
|属性名|类型|默认值|说明|平台差异说明|
|:-|:-|:-|:-|:-|
|value|String||输入框的初始内容||
-|type|String|text|input 的类型||
+|type|String|text|input 的类型|H5 暂未支持动态切换请使用 v-if 进行整体切换|
|password|Boolean|false|是否是密码类型||
|placeholder|String||输入框为空时占位符||
|placeholder-style|String||指定 placeholder 的样式||
diff --git a/docs/component/page-meta.md b/docs/component/page-meta.md
index dfbb63ae9dc824f0cb349ac61e93d7edd132d018..a79cf523c76e474f4e220bbd945624d6d10e1f70 100644
--- a/docs/component/page-meta.md
+++ b/docs/component/page-meta.md
@@ -26,8 +26,8 @@
|background-color-bottom|string||否|底部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持|微信基础库 2.9.0|
|scroll-top|string|""|否|滚动位置,可以使用 px 或者 rpx 为单位,在被设置时,页面会滚动到对应位置|微信基础库 2.9.0|
|scroll-duration|number|300|否|滚动动画时长|微信基础库 2.9.0|
-|page-style|string|""|否|页面根节点样式,页面根节点是所有页面节点的祖先节点,相当于 HTML 中的 body 节点|微信基础库 2.9.0|
-|root-font-size|string|""|否|页面的根字体大小,页面中的所有 rem 单位,将使用这个字体大小作为参考值,即 1rem 等于这个字体大小|微信基础库 2.9.0|
+|page-style|string|""|否|页面根节点样式,页面根节点是所有页面节点的祖先节点,相当于 HTML 中的 body 节点|微信基础库 2.9.0、H5 2.6.7、App 2.6.7|
+|root-font-size|string|""|否|页面的根字体大小,页面中的所有 rem 单位,将使用这个字体大小作为参考值,即 1rem 等于这个字体大小|微信基础库 2.9.0、H5 2.6.7、App 2.6.7|
|enable-pull-down-refresh|Boolean|""|否|是否开启下拉刷新|App 2.6.7|
|@resize|eventhandle||否|页面尺寸变化时会触发 resize 事件, event.detail = { size: { windowWidth, windowHeight } }|微信基础库 2.9.0|
|@scroll|eventhandle||否|页面滚动时会触发 scroll 事件, event.detail = { scrollTop }|微信基础库 2.9.0|
diff --git a/docs/component/picker.md b/docs/component/picker.md
index 054039a962de497a4a8380495b8fdfede306aaa8..5dbd3bebeb62f089f91f6543d425e9128204a20b 100644
--- a/docs/component/picker.md
+++ b/docs/component/picker.md
@@ -89,7 +89,7 @@
|value|String|0|表示选中的日期,格式为"YYYY-MM-DD"||
|start|String||表示有效日期范围的开始,字符串格式为"YYYY-MM-DD"||
|end|String||表示有效日期范围的结束,字符串格式为"YYYY-MM-DD"||
-|fields|String|day|有效值 year,month,day,表示选择器的粒度|H5、App 2.6.3+、微信小程序、百度小程序、字节跳动小程序|
+|fields|String|day|有效值 year、month、day,表示选择器的粒度,默认为 day,App 端未配置此项时使用系统 UI|H5、App 2.6.3+、微信小程序、百度小程序、字节跳动小程序|
|@change|EventHandle||value 改变时触发 change 事件,event.detail = {value: value}||
|@cancel|EventHandle||取消选择时触发||
|disabled|Boolean|false|是否禁用| |
diff --git a/docs/component/web-view.md b/docs/component/web-view.md
index 343bcc36349639201d652a4dabcc2c6e6f031e01..137d41f29cfbc679a523d339262d1e0427c8ad52 100644
--- a/docs/component/web-view.md
+++ b/docs/component/web-view.md
@@ -11,7 +11,7 @@
|src|String|webview 指向网页的链接| |
|allow|String|用于为 [iframe](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe) 指定其[特征策略](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/策略特征)|H5|
|sandbox|String|该属性对呈现在 [iframe](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe) 框架中的内容启用一些额外的限制条件。|H5|
-|webview-styles|Object|webview 的样式|App|
+|webview-styles|Object|webview 的样式|App-vue|
|@message|EventHandler|网页向应用 `postMessage` 时,会在特定时机(后退、组件销毁、分享)触发并收到消息。|H5 暂不支持|
|@onPostMessage|EventHandler|网页向应用实时 `postMessage`|App-nvue|
diff --git a/docs/matter.md b/docs/matter.md
index 03e01362c88722e91dbd926b53d65de226f06054..368b4d4aca7e4de3b34d6ef42db9800da6ed6eb9 100644
--- a/docs/matter.md
+++ b/docs/matter.md
@@ -282,3 +282,7 @@ pages 配置
- 暂不支持 支付,支付依赖`uni.login(OBJECT)`
- 页面有滚动条时 canvas 组件不会跟随页面滚动
- rich-text 组件某些情况下显示异常
+
+
+##### sign 证书配置
+sign放到项目根目录,编译后自动拷贝到 .quickapp/sign,每次编译完成时会删除.quickapp,避免证书丢失
diff --git a/docs/release-note-alpha.md b/docs/release-note-alpha.md
index 9767c84d055bb73b5fcc4c5cfdd0bbf948b71864..1bedb3f31b5f4779753f591b99d4bba7944f3044 100755
--- a/docs/release-note-alpha.md
+++ b/docs/release-note-alpha.md
@@ -1,3 +1,50 @@
+#### 2.8.11.20200904-alpha
+* 【uni-app插件】
+ + App-Android 修复 2.8.9版引出的 uni-AD 小概率出现获取广告配置数据失败导致无法显示开屏广告的Bug
+* 【App插件(含5+App和uni-app的App端)】
+ + iOS平台 修复 2.8.9版升级 QQ SDK引出的 在部分手机上无法正常分享到 QQ 的Bug [详情](https://ask.dcloud.net.cn/question/103383)
+
+#### 2.8.10.20200903-alpha
+* 【uni-app插件】
+ + App-Android平台 修复 2.8.4版引出的 uni.request 请求默认超时时间过长的Bug
+* 【uniCloud】
+ + 修复 某些情况下,上传公共模块,UI卡顿的Bug
+ + 调整 阿里云放开文件上传类型限制
+
+#### 2.8.9.20200829-alpha
+* 【uni-app插件】
+ + 新增 uni.navigateTo 增加参数 events 支持页面间通信 [详情](https://uniapp.dcloud.net.cn/api/router?id=navigateto)
+ + App平台、H5平台 优化 image 组件支持 mode="heightFix"
+ + App平台 优化 uni.canvasToTempFilePath 提高执行速度
+ + App平台 修复 app.vue 生命周期 onshow 某些情况下无参数的Bug [详情](https://ask.dcloud.net.cn/question/103903)
+ + App平台 修复 input 组件修改 password 属性后 adjust-position 配置失效的Bug [详情](https://ask.dcloud.net.cn/question/103435)
+ + App平台 修复 临时文件未清理的Bug [详情](https://ask.dcloud.net.cn/question/103456)
+ + App平台 修复 nvue refresh 组件偶现下拉刷新结束后不复位的Bug [详情](https://github.com/dcloudio/uni-app/issues/1107)
+ + App-Android平台 修复 Android11 设备运行白屏的Bug [详情](https://ask.dcloud.net.cn/question/105319)
+ + App-Android平台 修复 2.8.4版引出的 uni.request 请求 cookie 与 webview 页面没有同步共享的Bug [详情](https://ask.dcloud.net.cn/question/103956)
+ + App-Android平台 修复 2.8.4版引出的 nvue 无法加载网络字体图标文件 iconfont 的Bug [详情](https://ask.dcloud.net.cn/question/104655)
+ + App-Android平台 修复 调用监听加速度、陀螺仪等 API 可能报`e.setInterval is not a function`错误的Bug [详情](https://ask.dcloud.net.cn/question/105584)
+ + App-Android平台 修复 没有获取到位置权限时,调用 uni.chooseLocation 可能导致应用闪退的Bug [详情](https://ask.dcloud.net.cn/question/105312)
+ + App-iOS平台 修复 scroll-view 组件在 iOS13 触摸交互卡顿的Bug [详情](https://ask.dcloud.net.cn/question/98881)
+ + App-iOS平台 修复 nvue map 组件 controltap 事件返回数据参数名不正确的Bug [详情](https://ask.dcloud.net.cn/question/99769)
+ + H5平台 优化 uni.previewImage 支持手势缩放
+ + H5平台 修复 多个 editor 组件会重复加载依赖的Bug
+ + H5平台 修复 从首页调用 uni.redirectTo 切换其他页面后首页未销毁的Bug [详情](https://ask.dcloud.net.cn/question/103503)
+ + H5平台 修复 切换页面导致 textarea 组件 auto-height 属性失效的Bug
+ + 小程序平台 修复 v-for 遍历复杂表达式不显示的Bug [#2012](https://github.com/dcloudio/uni-app/issues/2012)
+* 【uniCloud】
+ + 新增 本地运行 加入显示调试行号等信息
+ + 修复 当npm镜像源为淘宝源时,某些云函数或公共模块上传失败的Bug
+* 【App插件(含5+App和uni-app的App端)】
+ + 新增 uni-AD 支持快手联盟的开屏和激励视频广告
+ + 修复 下载文件设置的临时存储文件名过长时无法正常下载的Bug [详情](https://ask.dcloud.net.cn/question/103336)
+ + Android平台 修复 UniPush 在部分魅族手机可能无法获取cid的Bug [详情](https://ask.dcloud.net.cn/question/102774)
+ + Android平台 修复 设置targetversion为29时,从相册选择图片返回路径不正确的Bug [详情](https://ask.dcloud.net.cn/question/105269)
+ + Android平台 修复 设置targetversion为29时,在部分 Android10 设备无法正常定位的Bug
+ + iOS平台 更新 QQ 分享、登录SDK版本为3.3.9-Lite,解决分享到 QQ 显示未授权应用的问题
+ + iOS平台 修复 设置页面横屏 landscape 显示时,在 iPad 设备上不显示状态栏的Bug [详情](https://ask.dcloud.net.cn/question/103386)
+ + iOS平台 修复 视频播放控件 VideoPlayer 动态修改 objectFit 属性不生效的Bug
+
#### 2.8.7.20200820-alpha
* 【uni-app插件】
+ App-Android平台 修复 调用 plus.io.requestFileSystem 概率性出现`Failed to find taskCenter`错误信息的Bug [详情](https://ask.dcloud.net.cn/question/103902)
@@ -13,7 +60,8 @@
+ web控制台 腾讯云 新增 资源概况页面
+ 短信发送 新增 3个通知类短信模板 [详情](https://uniapp.dcloud.net.cn/uniCloud/send-sms)
* 【App插件(含5+App和uni-app的App端)】
- + uni-AD 新增 设置开屏全屏显示、广告源权重功能
+ + uni-AD 新增 信息流和激励视频的多广告源在App同次启动时随机穿插,可提升广告收益
+ + uni-AD 新增 设置开屏全屏显示
+ Android平台 修复 uni-AD 开屏显示穿山甲广告点击跳过按钮后,再点击splash页面可能导致应用闪退的Bug [详情](https://ask.dcloud.net.cn/question/103601)
+ iOS平台 更新 UniPush 使用的个推SDK版本为2.4.5.1,解决在部分设备上获取唯一标识可能重复的问题
+ iOS平台 更新 uni-AD 腾讯广点通SDK版本为4.11.10,今日头条穿山甲SDK版本为3.1.0.5
diff --git a/docs/release.md b/docs/release.md
index 0f89dd9fec8a4101a174aac7e6f0d2e5a50b3f44..30f75e118a36d7a8c19973f389c84f1d9fff5739 100755
--- a/docs/release.md
+++ b/docs/release.md
@@ -1,3 +1,40 @@
+#### 2.8.11.20200907
+* 【uni-app插件】
+ + 新增 uni.navigateTo 增加参数 events 支持页面间通信 [详情](https://uniapp.dcloud.net.cn/api/router?id=navigateto)
+ + 修复 编译时提示 caniuse-lite 过期的Bug
+ + App平台、H5平台 优化 image 组件支持 mode="heightFix"
+ + App平台 优化 uni.canvasToTempFilePath 提高执行速度
+ + App平台 修复 app.vue 生命周期 onshow 某些情况下无参数的Bug [详情](https://ask.dcloud.net.cn/question/103903)
+ + App平台 修复 input 组件修改 password 属性后 adjust-position 配置失效的Bug [详情](https://ask.dcloud.net.cn/question/103435)
+ + App平台 修复 临时文件未清理的Bug [详情](https://ask.dcloud.net.cn/question/103456)
+ + App平台 修复 nvue refresh 组件偶现下拉刷新结束后不复位的Bug [详情](https://github.com/dcloudio/uni-app/issues/1107)
+ + App-Android平台 修复 Android11 设备运行白屏的Bug [详情](https://ask.dcloud.net.cn/question/105319)
+ + App-Android平台 修复 2.8.4版引出的 uni.request 请求 cookie 与 webview 页面没有同步共享的Bug [详情](https://ask.dcloud.net.cn/question/103956)
+ + App-Android平台 修复 2.8.4版引出的 uni.request 请求默认超时时间过长的Bug
+ + App-Android平台 修复 2.8.4版引出的 nvue 无法加载网络字体图标文件 iconfont 的Bug [详情](https://ask.dcloud.net.cn/question/104655)
+ + App-Android平台 修复 调用监听加速度、陀螺仪等 API 可能报`e.setInterval is not a function`错误的Bug [详情](https://ask.dcloud.net.cn/question/105584)
+ + App-Android平台 修复 没有获取到位置权限时,调用 uni.chooseLocation 可能导致应用闪退的Bug [详情](https://ask.dcloud.net.cn/question/105312)
+ + App-iOS平台 修复 scroll-view 组件在 iOS13 触摸交互卡顿的Bug [详情](https://ask.dcloud.net.cn/question/98881)
+ + App-iOS平台 修复 nvue map 组件 controltap 事件返回数据参数名不正确的Bug [详情](https://ask.dcloud.net.cn/question/99769)
+ + H5平台 优化 uni.previewImage 支持手势缩放
+ + H5平台 修复 多个 editor 组件会重复加载依赖的Bug
+ + H5平台 修复 从首页调用 uni.redirectTo 切换其他页面后首页未销毁的Bug [详情](https://ask.dcloud.net.cn/question/103503)
+ + H5平台 修复 切换页面导致 textarea 组件 auto-height 属性失效的Bug
+ + 小程序平台 修复 v-for 遍历复杂表达式不显示的Bug [#2012](https://github.com/dcloudio/uni-app/issues/2012)
+* 【uniCloud】
+ + 新增 本地运行 加入显示调试行号等信息
+ + 修复 当npm镜像源为淘宝源时,某些云函数或公共模块上传失败的Bug
+ + 修复 某些情况下,上传公共模块,UI卡顿的Bug
+* 【App插件(含5+App和uni-app的App端)】
+ + 新增 uni-AD 支持快手联盟的开屏和激励视频广告
+ + 修复 下载文件设置的临时存储文件名过长时无法正常下载的Bug [详情](https://ask.dcloud.net.cn/question/103336)
+ + Android平台 修复 UniPush 在部分魅族手机可能无法获取cid的Bug [详情](https://ask.dcloud.net.cn/question/102774)
+ + Android平台 修复 设置targetversion为29时,从相册选择图片返回路径不正确的Bug [详情](https://ask.dcloud.net.cn/question/105269)
+ + Android平台 修复 设置targetversion为29时,在部分 Android10 设备无法正常定位的Bug
+ + iOS平台 更新 QQ 分享、登录SDK版本为3.3.9-Lite,解决分享到 QQ 显示未授权应用的问题
+ + iOS平台 修复 设置页面横屏 landscape 显示时,在 iPad 设备上不显示状态栏的Bug [详情](https://ask.dcloud.net.cn/question/103386)
+ + iOS平台 修复 视频播放控件 VideoPlayer 动态修改 objectFit 属性不生效的Bug
+
#### 2.8.8.20200820
* 【uni-app插件】
+ App-Android平台 修复 调用 plus.io.requestFileSystem 概率性出现`Failed to find taskCenter`错误信息的Bug [详情](https://ask.dcloud.net.cn/question/103902)
diff --git a/docs/uniCloud/_sidebar.md b/docs/uniCloud/_sidebar.md
index ac274bea48f11330f508c5a3ca4ad7416110439f..f91baf2f6428866cb696ca54dda6dce2b651b62c 100644
--- a/docs/uniCloud/_sidebar.md
+++ b/docs/uniCloud/_sidebar.md
@@ -1,5 +1,6 @@
* [什么是uniCloud](uniCloud/README.md)
* [快速上手](uniCloud/quickstart.md)
+* [购买指南](uniCloud/price.md)
* 基本概念
* [服务空间](uniCloud/concepts/space.md)
* [数据库](uniCloud/concepts/database.md)
diff --git a/docs/uniCloud/cf-database.md b/docs/uniCloud/cf-database.md
index 53a887cd7a212a76e0c192280da6090abc56bb3b..8277b4f7e062ee19206df0c487359755f473fed3 100644
--- a/docs/uniCloud/cf-database.md
+++ b/docs/uniCloud/cf-database.md
@@ -4133,7 +4133,7 @@ let res = await db.collection('todos').where({
age: dbCmd.lt(2),
}),
dbCmd.elemMatch({
- name: 'mall',
+ type: 'mall',
age: dbCmd.gt(5),
}),
]),
diff --git a/docs/uniCloud/faq.md b/docs/uniCloud/faq.md
index fc9eb42e04d8c75b129a23b4dccb2cb4fe39d627..1fccd09b2c09f3acf452816428d85fc427ce9056 100644
--- a/docs/uniCloud/faq.md
+++ b/docs/uniCloud/faq.md
@@ -70,6 +70,8 @@ websocket的实时特性导致serverless化比较复杂。还需要继续寻找
同时一些三方专业的websocket服务也可以使用,比如:[https://ext.dcloud.net.cn/plugin?id=1334](https://ext.dcloud.net.cn/plugin?id=1334)
+如果是im方面的需求,那么基于uniPush的im服务是非常推荐的选择:[https://ext.dcloud.net.cn/plugin?id=2670](https://ext.dcloud.net.cn/plugin?id=2670)
+
### 如何导入老数据库的数据?
- 方式1:可以在HBuilderX里用db_init.json来批量创建云数据库和插入表内容,[详见](https://uniapp.dcloud.io/uniCloud/cf-database?id=%e4%bd%bf%e7%94%a8db_initjson%e5%88%9d%e5%a7%8b%e5%8c%96%e9%a1%b9%e7%9b%ae%e6%95%b0%e6%8d%ae%e5%ba%93)
- 方式2:阿里云支持在uniCloud web控制台界面直接导入导出数据
@@ -132,15 +134,10 @@ uniCloud.httpclient.request('https://example.com',{
### uniCloud费用贵不贵?
-目前uniCloud计费系统还未开发完毕,开发者目前可以免费使用uniCloud。未来uniCloud的商用定价,也会低于租用传统云主机的费用。
-
-开发者无需顾忌DCloud会先免费后收割:
-1. DCloud提供uniCloud的目标,就是给开发者更低门槛、更便宜的云开发能力,未来商用时的定价一定比传统云主机便宜,否则就失去做这个产品的意义;
-2. serverLess的成本天然低于传统云主机;
-3. DCloud是有信誉的大厂,拥有500万开发者和十亿手机活跃用户,多年来一直给开发者提供良心产品,从不失信。
-4. 即便uniCloud计费后,也会长期给开发者提供2个免费的服务空间。
+uniCloud的阿里云目前是完全免费的。
+uniCloud的腾讯云免费提供一个服务空间,更多服务空间或更多资源消耗需要付费。付费价格同微信云开发定价。整体成本远低于传统服务器租用成本。详见:[https://uniapp.dcloud.io/uniCloud/price](https://uniapp.dcloud.io/uniCloud/price)
-uniCloud免费期间,为避免资源滥用,有使用限制,见下。
+uniCloud的免费服务空间,为避免资源滥用,有使用限制,见下。
**阿里云免费版限制如下**
@@ -168,11 +165,10 @@ uniCloud免费期间,为避免资源滥用,有使用限制,见下。
**关于数据库读写次数:**修改或读取条数为0时也计算一次读写,即只要调用接口就计算一次。
-无论阿里云或腾讯云,如有需求突破资源限制,请发邮件到service@dcloud.io请求协助。如果属于标杆案例,可以申请特批免费;其他情况,可以手工付费。
+阿里云如有需求突破资源限制,请发邮件到service@dcloud.io请求协助。如果属于标杆案例,可以特批扩大免费资源。
-腾讯云目前已经可以在uniCloud web控制台查看资源用量,需要注意的是资源用量并非是从当月月初到月末进行统计的,而是由服务空间创建日期往后推算的
-### 如何控制云函数数量?云函数是否可以按多级目录整理
+### 如何控制云函数数量?云函数是否可以按多级目录整理@merge-functions
每个云函数是一个独立进程,不存在云函数级别的多级目录概念。
diff --git a/docs/uniCloud/hosting.md b/docs/uniCloud/hosting.md
index 85406765c966efd5675dc2dcfd913467e39fb854..2479a7f62b05667c795971f96e6fd8c7785b0589 100644
--- a/docs/uniCloud/hosting.md
+++ b/docs/uniCloud/hosting.md
@@ -229,7 +229,8 @@ uni-app项目根据路由模式不同需要做不同的配置
## 阿里云使用限制
-目前阿里云目前端网页部署限制为最大存储空间用量2GB
+- 前端网页部署限制为最大存储空间用量2GB
+- 单文件最大限制为50MB
### 名词解释
diff --git a/docs/uniCloud/http.md b/docs/uniCloud/http.md
index 8bc9af682cada38f107c16d123b464f3971a54eb..7de25ccc1a87322246d2e2419b2b13ddd02dfaa7 100644
--- a/docs/uniCloud/http.md
+++ b/docs/uniCloud/http.md
@@ -11,6 +11,10 @@
本文档主要指导您如何在uniCloud web控制台管理和使用云函数URL化。
+**使用限制**
+
+- 腾讯云免费服务空间最多只支持配置10个云函数URL化地址
+
## 操作步骤
### 设置云函数 HTTP 访问地址
diff --git a/docs/uniCloud/price.md b/docs/uniCloud/price.md
new file mode 100644
index 0000000000000000000000000000000000000000..071176b0e8ede388b5a812bb55692ac2636047b5
--- /dev/null
+++ b/docs/uniCloud/price.md
@@ -0,0 +1,70 @@
+## 概述
+
+使用阿里云作为服务商时,服务空间资源完全免费
+
+使用腾讯云作为服务商时可以购买两种类型的服务空间,后付费和预付费,具体说明如下:
+
+**腾讯云购买付费服务空间的功能正在灰度发布中,如因资源消耗过大,希望付费购买更多CDN、数据库资源的,可以发邮件到service@dcloud.io,邮件请说明希望开通付费功能的uniCloud web控制台登录账号。目前企业认证用户支持后付费模式,个人用户暂时仅支持预付费的套餐模式。**
+
+|计费方式 |付费方式 |计费单位 |资源配置调整 |
+|:-: |:-: |:-: |:-: |
+|预付费 |预付费 |元/月 |暂时只能使用免费服务空间 |
+|后付费 |结算时冻结费用,每日结算 |具体请参见 [产品定价](uniCloud/price?id=price-info) |按量使用,无需手动调整配置 |
+
+**腾讯云注意事项**
+
+- 腾讯云云开发为用户提供一定的免费额度,如果有多个腾讯云服务空间仅有一个可以享受免费额度,具体规则如下:
+
+预付费:如果已经开通了预付费的免费版服务空间,则表示免费额度已被占用。已升级配置的用户会自动设置为到期自动降配,这时候也是占用免费资源名额的(并不是在所开通的套餐上添加免费额度)
+
+后付费:后付费服务空间在开通时可以手动指定是否占用免费额度(如果还有免费额度的话)。如果后付费服务空间已经占用免费额度,则不可开通预付费免费版。
+
+**免费额度**
+
+|资源类别 |子类目 |免费额度 |说明 |
+|:-: |:-: |:-: |:-: |
+|云函数 |硬件资源用量 |4万GBs/月 |腾讯云最小计费粒度为256MB*100ms,即使用内存固定为256MB,运行时间以100ms为阶梯计算|
+| |外网出流量 |1GB/月 |- |
+| |云函数并发限制 |1000个/云函数|超出此连接数的请求会直接失败。如有需求突破此限制,请发邮件到service@dcloud.io申请|
+| |云函数数目 |50个 |如何合并云函数见:[控制云函数数量](uniCloud/faq?id=merge-functions) |
+|云存储 |容量 |3GB |- |
+| |下载操作次数 |150万/月 |- |
+| |上传操作次数 |60万/月 |- |
+| |CDN回源流量 |5GB/月 |- |
+|CDN |CDN流量 |4GB/月 |- |
+|云数据库 |容量 |2GB |- |
+| |读操作数 |5万次/天 |- |
+| |写操作数 |3万次/天 |- |
+
+- 后付费服务空间开通时会自动开通前端网页托管
+- 后付费服务空间删除有次数限制,每个月最多删除一次,每个账号一共可以删除4次,删除之前需要关闭前端网页托管服务并删除所有云端资源(包括云函数、数据库、云存储)
+
+## 定价说明@price-info
+
+目前仅支持腾讯云后付费服务空间(暂定为仅企业认证用户可以开通),其他类型的服务空间暂不收费。腾讯云后付费服务空间定价如下:
+
+|资源分类 |资源细项 |售价(元) |
+|:-: |:-: |:-: |
+|云存储 |容量(GB/天) |0.0043 |
+| |下载操作次数(万次) |0.01 |
+| |上传操作次数(万次) |0.01 |
+| |CDN 回源流量(GB) |0.15 |
+|CDN |CDN 流量(GB) |0.18 |
+|云函数 |资源使用量(GBs) |0.00011108 |
+| |外网出流量(GB) |0.8 |
+| |函数数量限制150个 | |
+|数据库 |容量(GB/天) |0.07 |
+| |读操作数(万次) |0.015 |
+| |写操作数(万次) |0.05 |
+| |同时连接数1000个 | |
+| |集合限制800个 | |
+| |备份保留天数14天 | |
+| |支持指定回档时间 | |
+|前端网站托管 |容量(GB/天) |0.0043 |
+| |流量(GB) |0.21 |
+
+**注意**
+
+- 如果之前没有开通免费版腾讯云服务空间,则新开通的一个后付费服务空间可以选择是否占用免费资源。如果选择了占用免费资源将无法创建预付费免费版。
+- 如果后付费服务空间拥有免费额度,会默认赠送一个月前端网站托管(容量1GB、流量5GB),一个月之后会正常按量收费。
+- 由于存在余额超支的情况,使用后付费需要支付1000元保证金
diff --git a/docs/uniCloud/resource.md b/docs/uniCloud/resource.md
index 4b545415468ffb7afe32beaf6c4fb1383cbc2767..b489561bef456b1f70a12f3a7185a64f62b85da5 100644
--- a/docs/uniCloud/resource.md
+++ b/docs/uniCloud/resource.md
@@ -5,6 +5,7 @@
- [Hello uniCloud]:在HBuilderX 2.6+版本,新建uni-app项目的项目模板中有 hello unicloud模板,展示了uniCloud的云函数基本用法、cdn使用方式。它对应的H5演示地址是:[https://hellounicloud.m3w.cn/](https://hellounicloud.m3w.cn/)
- [uni抗疫开源项目汇总](https://gitee.com/dcloud/xinguan2020):这是一个项目集合汇总,里面有大量与抗疫项目的开源项目,均基于uniCloud。包括外来人员登记系统、学生健康报备系统、员工疫情筛查工具、消毒检查登记系统、物资管理系统等。这些项目具备一定通用性,可以稍加改造用于其他行业应用。
- [uniPush之unicloud版](https://ext.dcloud.net.cn/plugin?id=1680): 封装好的云函数,直接在服务器端发送push消息。
+- [uniLogin](https://ext.dcloud.net.cn/plugin?id=1918): 跨h5、app、小程序统一登录,统一返回一样格式的userInfo,统一安全验证。
更多项目源码,见**插件市场**:[https://ext.dcloud.net.cn/?cat1=7](https://ext.dcloud.net.cn/?cat1=7)
diff --git a/docs/uniCloud/send-sms.md b/docs/uniCloud/send-sms.md
index 02a715e9be46302b19ba4c11c7d51a848fac201b..35978ba02bccefa38df00e8a2b8b931a21183c8e 100644
--- a/docs/uniCloud/send-sms.md
+++ b/docs/uniCloud/send-sms.md
@@ -2,9 +2,9 @@
从HBuilderX 2.8.1起,uniCloud内置了短信发送API。给开发者提供更方便、更便宜的短信发送能力。
-目前仅提供短信发送验证码能力,提供了2个模板可选,类似小程序的模板消息,在一个固定模板格式的文字里自定义某些字段,而不是所有文字都可以随便写。
+该服务类似小程序的模板消息,在一个固定模板格式的文字里自定义某些字段,而不是所有文字都可以随便写。
-后续视需求提供自助申请更多短信模板。
+后续视需求提供自定义短信模板功能。
使用本功能需要在[DCloud开发者中心](https://dev.dcloud.net.cn/uniSms)开通并充值,教程参考[短信服务开通指南](https://ask.dcloud.net.cn/article/37534)
@@ -22,10 +22,52 @@
|smsSecret |String |是 |调用短信接口的密钥secret,从 dev.dcloud.net.cn/uniSms 后台获取 |
|phone |String |是 |发送目标手机号,暂仅支持中国大陆手机号,不能填写多个手机号|
|templateId |String |是 |模版Id,短信内容为固定模板,详见下方说明 |
-|data |Object |是 |模版里的各个字段,json格式 |
+|name |String |- |使用自行申请的模板是必填此字段,值为报备时填写的`应用名称` |
+|data |Object |是 |模版里的各个变量字段,json格式 |
-**参数templateId说明**
+#### 参数templateId说明@smstemplate
+按照国家法律和运营商要求,每个要发送短信的应用,需要备案其短信模板,并且经过运营商的审核。通过审核的模板,会得到一个templateId。
+
+短信内容规范:
+1. 不能包含涉政、黄赌毒、暴力、房产、移民、贷款、代开发票等违法内容
+2. 不能包含运营商禁止发送的内容
+3. 不能包含侵犯第三方权益的内容(如侵犯他人商标或冒名行为)
+4. 营销类短信不能违法广告法
+5. 不能利用短信骚扰或诈骗用户
+
+报备模板的方式:使用开发者账号邮箱发送标题为“短信服务模板报备”的邮件至 service@dcloud.io,邮件中注明应用的 appid、应用名称、短信签名、模板内容、短信类别。
+
+另:近期会开通线上自助报备功能。
+
+- 短信签名:
+即短信内容开头的【xxx】,可选内容为App或小程序名称、网站名称、企业名称(可使用简称,但需具备辨识度)、商标名称。如`【DCloud】`,即是DCloud官方发送短信的签名。签名的作用是明确告知用户该短信由什么样的主体发送。签名内容只允许包含中文、英文、数字,签名的长度限制为2-8位。
+
+- 模板内容:
+短信模板必然以短信签名作为开头,其内容中允许有一定的变量,以满足灵活性需求。变量用${}包裹。
+
+例如:【hello uni-app】验证码:${code},用于${action},${expMinute}分钟内有效,请勿泄露并尽快验证。
+
+在实际发送短信时,在短信API中传入该模板ID,然后传入合适的变量,最终发送的短信将变为:
+`【hello uni-app】验证码:123465,用于注册,15分钟内有效,请勿泄露并尽快验证。`
+
+- 短信类别:
+分为3类,即验证码类短信、通知类短信、营销类短信。验证码类短信,其模板审核简单快速,只能单次发送。
+
+**示例报备邮件**
+```
+DCloud公司:
+我的应用appid为xxx、应用名称为xxx。
+下载地址/官网地址:xxx
+短信使用场景:xxx
+我已开通uniCloud短信服务,现申请为此应用报备短信模板,该模板为验证类短信模板,其内容如下:
+【这里填短信签名】验证码:${code},用于${action},${expMinute}分钟内有效,请勿泄露并尽快验证。
+```
+短信模板一般在0-2个工作日内完成审核。在工作日工作时间提交模板的,审核速度会更快些。
+
+审核通过后,DCloud将会回邮件告知该模板对应的templateId。后续会上线自助短信模板报备系统。
+
+
+
**返回值**
接口调用失败时会直接抛出错误,调用成功时才会有返回值。
@@ -85,6 +134,7 @@
'use strict';
exports.main = async (event, context) => {
try {
+ // 请注意使用自行申请的模板时必须传name字段,值为报备时填写的应用名称
const res = await uniCloud.sendSms({
smsKey: '****************',
smsSecret: '****************',
@@ -112,6 +162,11 @@ exports.main = async (event, context) => {
```
+本示例使用的模板为:
+```
+【uniID】“${name}”验证码:${code},用于${action},${expMinute}分钟内有效,请勿泄露并尽快验证。
+```
+
本示例发送的短信,在手机上将显示为:
```
【uniID】“DCloud”验证码:123456,用于注册,3分钟内有效,请勿泄露并尽快验证。
diff --git a/docs/uniCloud/storage.md b/docs/uniCloud/storage.md
index bf3ca3faa483fd3dcda1e559b4602d45e5b24710..1cae95ea8f6d8823edcfd42884440a1cdc3ee80f 100644
--- a/docs/uniCloud/storage.md
+++ b/docs/uniCloud/storage.md
@@ -31,7 +31,7 @@
**各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。[参考](https://uniapp.dcloud.io/uniCloud/quickstart?id=%e5%b0%8f%e7%a8%8b%e5%ba%8f%e4%b8%ad%e4%bd%bf%e7%94%a8unicloud%e7%9a%84%e7%99%bd%e5%90%8d%e5%8d%95%e9%85%8d%e7%bd%ae)**
-阿里云uploadFile API方式只允许上传以下文件类型(后续可能会调整),如果要上传其他类型可以通过web控制台上传。腾讯云没有文件类型限制。
+阿里云uploadFile API方式只允许上传以下文件类型(后续可能会调整),如果要上传其他类型可以通过web控制台上传(HBuilderX 2.8.10-alpha及以后版本已去除此限制)。腾讯云没有文件类型限制。
```js
{
diff --git a/docs/uniCloud/trigger.md b/docs/uniCloud/trigger.md
index aad78896702e2c08ca7d2b7083b8552337db603f..65174fa6828274cfbfe90a605a4e3612fb58ddb1 100644
--- a/docs/uniCloud/trigger.md
+++ b/docs/uniCloud/trigger.md
@@ -48,7 +48,7 @@ Cron 表达式有七个字段,按空格分隔。其中,每个字段都有相
|第四位| 日 | 1 - 31的整数(需要考虑月的天数) | , - * / |
|第五位| 月 | 1 - 12的整数或 JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV和DEC | , - * / |
|第六位| 星期 | 0 - 6的整数或 MON、TUE、WED、THU、FRI、SAT和SUN,其中0指星期一,1指星期二,以此类推 | , - * / |
-|第七位| 年 | 1970 - 2099的整数 | , - * / |
+|第七位| 年 | 1970 - 2099的整数(阿里云不支持第七位) | , - * / |
### 通配符
@@ -67,6 +67,7 @@ Cron 表达式有七个字段,按空格分隔。其中,每个字段都有相
下面列举一些 Cron 表达式和相关含义:
```
+// 需要注意的是阿里云不支持第七位,请自行去除代表年的位置
*/5 * * * * * * 表示每5秒触发一次
0 0 2 1 * * * 表示在每月的1日的凌晨2点触发
0 15 10 * * MON-FRI * 表示在周一到周五每天上午10:15触发
diff --git a/docs/uniCloud/uni-id.md b/docs/uniCloud/uni-id.md
index b685379946760169579cba11a5d1590406423d82..5aa3d57c11b1a28f765bbca7c1774f072daf0dc8 100644
--- a/docs/uniCloud/uni-id.md
+++ b/docs/uniCloud/uni-id.md
@@ -1,51 +1,94 @@
-# 简介
-
-99%的应用,都要开发用户注册、登录、密码加密保存、修改密码、token管理等功能,从前端到后端都需要。
-
-为什么不能有一个开源的通用项目,避免大家的重复开发呢?
-
-`uni-id`应需而生。
-
-`uni-id`为`uniCloud`开发者提供了统一、简单、可扩展的用户管理能力封装。推荐每个`uniCloud`开发者使用。
-
-`uni-id`可成为开发者应用的用户中心,在插件市场获取更多基于`uni-id`的业务模板,集成到你的应用中。
-
-# uni-id组成部分
-
-`uni-id`包括如下组成部分:
-
-1. 云数据库
-
- 主表为 `uni-id-users` 表,保存用户的基本信息。
-
- 扩展字段有很多,如实名认证数据、工作履历数据,开发者可以自由扩展。
-
-2. 云函数
-
- 提供一个名为`uni-id`的公共模块,该模块封装了一系列API,包括注册、登录、修改密码、设置头像等。
-
- [插件市场](https://ext.dcloud.net.cn/plugin?id=2116)的示例工程中还提供了一个`user-center`的云函数,演示在云函数中如何调用`uni-id`公共模块。
-
-3. 前端调用
-
- 前端示例通过callfunction调用云函数`user-center`,在注册和登录时保存token。
-
- uniCloud框架底层,会自动在callfunction时传递`uni-id`的token(uni-app 2.7.13+版本)。在云函数的event中可直接拿到`uni-id`的token。也就是说开发者无需自己管理token了。
-
-对于`uni-id`还未封装的能力,欢迎大家在开源项目上提交 pr,共同完善这个开源项目,[uni-id git仓库](https://gitee.com/dcloud/uni-id.git)。
-
-# 快速上手
-
-使用uni-id需要按照以下步骤操作
-
-1. 准备2.7.14或以上版本的HBuilderX
-2. 插件市场导入`uni-id`公用模块,[插件市场 uni-id](https://ext.dcloud.net.cn/plugin?id=2116)
-3. 修改公用模块`uni-id`下的`config.json`内所需参数(请参考下面config.json的说明)
-4. 上传`cloudfunctions/common`下的`uni-id`模块
+# 需求背景
+
+99%的应用,都要开发用户注册、登录、发送短信验证码、密码加密保存、修改密码、token管理等功能,从前端到后端都需要。
+
+为什么不能有一个开源的通用项目,避免大家的重复开发呢?
+
+`uni-id`应需而生。
+
+`uni-id`为`uniCloud`开发者提供了简单、统一、可扩展的用户管理能力封装。
+
+# 组成部分
+`uni-id`包括如下组成部分:
+1. 云数据库
+
+主表为 `uni-id-users` 表,保存用户的基本信息。
+
+扩展字段有很多,如实名认证数据、工作履历数据,开发者可以自由扩展。
+
+2. 云函数
+
+提供一个名为`uni-id`的公共模块,该模块封装了一系列API,包括注册、登录、修改密码、设置头像等。
+
+示例工程中还提供了一个`user-center`的云函数,演示在云函数中如何调用`uni-id`公共模块。
+
+3. 前端调用
+
+前端示例通过callfunction调用云函数`user-center`,在注册和登录时保存token。
+
+uniCloud框架底层,会自动在callfunction时传递`uni-id`的token(uni-app 2.7.13+版本)。在云函数的event中可直接拿到`uni-id`的token。也就是说开发者无需自己管理token了。
+
+# uni-id 对开发者的价值
+1. 节省了大量重复劳动
+2. 降低门槛,前端开发者无需纠结怎样设计数据库设计才更合理
+3. 多系统打通用户和上下游协同
+
+关于第三点,着重强调下。
+
+一个应用,往往需要集成多个功能模块。比如一个电商应用,需要一个基本电商模板,还需要客服聊天模板,甚至还需要用户交流社区。
+
+在插件市场,每类模板插件都能找到,但他们如果不是基于同一套用户体系设计,就很难整合。
+
+DCloud推荐所有uniCloud的应用,都基于`uni-id`来做。
+
+有了统一的账户规范,并且围绕这套账户规范,有各种各样插件,那么开发者可以随意整合这些插件,让数据连同。
+
+规范,还可以让上下游充分协同。插件市场会出现各种数据迁移插件,比如把从discuz里把用户迁移到`uni-id`中的插件,相信围绕这套规范的产业链会非常活跃。
+
+# 现状和未来
+
+`uni-id`已完整的内容:
+
+- 注册、登录、发送短信验证码、密码加密保存、修改密码、token管理(短信验证码功能需要HBuilderX 2.8.3+)
+- 三方登录:App中的微信登录、微信小程序中的微信登录、支付宝小程序中的支付宝账户登录
+
+关于还缺少的部分,哪些DCloud在完善,哪些希望开发者给共同完善开源项目,计划与边界公布如下:
+
+1. 部分社交账户登录
+
+DCloud暂无计划开发百度、头条、QQ等小程序的登录,以及Apple ID、微博、QQ等App端的登录。欢迎其他开发者在开源项目上提交pr,共同完善`uni-id`。
+
+2. 邮箱验证和手机号一键认证sdk集成
+
+手机号一键认证sdk,目前插件市场里已经有不少相关插件,未来DCloud会整合到`uni-id`中。邮箱验证,DCloud暂无计划开发,有需求的开发者欢迎提供pr。
+
+3. 实名认证、活体检测
+
+目前插件市场里已经有不少相关插件,未来DCloud会整合到`uni-id`中。
+
+4. 权限管理ACL
+
+这部分欢迎开发者参与完善。
+
+其他方面,各种常见开源项目如discuz、wordPress、ecshop的用户导入插件,不属于`uni-id`主工程,欢迎开发者单独提交插件到插件市场。
+
+`uni-id`的git仓库:[https://gitee.com/dcloud/uni-id.git](https://gitee.com/dcloud/uni-id.git)
+
+
+# 快速上手
+
+使用uni-id需要按照以下步骤操作
+
+1. 准备2.7.14或以上版本的HBuilderX
+2. 插件市场导入`uni-id`公用模块,[插件市场 uni-id](https://ext.dcloud.net.cn/plugin?id=2116)
+3. 修改公用模块`uni-id`下的`config.json`内所需参数(请参考下面config.json的说明)
+4. 上传`cloudfunctions/common`下的`uni-id`模块
5. 按照[公用模块使用说明](https://uniapp.dcloud.io/uniCloud/cf-common)在云函数下安装`uni-id`模块
-6. 创建`uni-id-users`、`uni-verify`集合(可以直接使用示例项目里面的db_init.json进行初始化)
-
-或者直接导入[uni-id在插件市场的示例工程](https://ext.dcloud.net.cn/plugin?id=2116)
+6. 创建`uni-id-users`、`uni-verify`集合(可以直接使用示例项目里面的db_init.json进行初始化)
+
+或者直接导入[uni-id在插件市场的示例工程](https://ext.dcloud.net.cn/plugin?id=2116)
+
+导入示例项目时,如果选择腾讯云,在HBuilderX2.7及以下版本中,需要进入项目目录,手动将目录`cloudfunctions-aliyun`改名为`cloudfunctions-tcb`,然后在HBuilderX中右键cloudfunctions绑定服务空间。
**config.json的说明**
@@ -68,8 +111,8 @@
```json
// 如果拷贝此内容切记去除注释
{
- "passwordSecret": "passwordSecret-demo", // 加密密码所用的密钥,注意修改为自己的
- "tokenSecret": "tokenSecret-demo", // 生成token所用的密钥,注意修改为自己的
+ "passwordSecret": "passwordSecret-demo", // 加密密码所用的密钥,注意修改为自己的,使用一个较长的字符串即可
+ "tokenSecret": "tokenSecret-demo", // 生成token所用的密钥,注意修改为自己的,使用一个较长的字符串即可
"tokenExpiresIn": 7200, // 全平台token过期时间,未指定过期时间的平台会使用此值
"bindTokenToDevice": true, // 是否将token和设备绑定,设置为true会进行ua校验,默认为true
"passwordErrorLimit": 6, // 密码错误最大重试次数
@@ -219,12 +262,14 @@ uniCloud.callFunction({
**响应参数**
-| 字段 | 类型 | 必填 | 说明 |
-| --- | --- | --- | --- |
-| code | Number| 是 |错误码,0表示成功 |
-| msg | String| 是 |详细信息 |
-| token | String| - |登录成功之后返回的token信息|
-| tokenExpired | String| - |token过期时间|
+| 字段 | 类型 | 必填| 说明 |
+| --- | --- | --- | --- |
+| uid | String| 是 |用户Id |
+| userInfo | Object| 是 |用户全部信息 |
+| code | Number| 是 |错误码,0表示成功 |
+| msg | String| 是 |详细信息 |
+| token | String| - |登录成功之后返回的token信息|
+| tokenExpired| String| - |token过期时间 |
**示例代码**
@@ -586,6 +631,7 @@ exports.main = async function(event,context) {
| msg | String| 是 |详细信息 |
| uid | String| 是 |用户uid |
| type | String| 是 |操作类型,`login`为登录、`register`为注册|
+| userInfo | Object| 是 |用户全部信息 |
| token | String| - |登录成功之后返回的token信息 |
| tokenExpired| String| - |token过期时间 |
@@ -715,6 +761,7 @@ exports.main = async function(event,context) {
| code | Number| 是 |错误码,0表示成功 |
| msg | String| 是 |详细信息 |
| uid | String| 是 |用户uid |
+| userInfo | Object| 是 |用户全部信息 |
| type | String| 是 |操作类型,`login`为登录、`register`为注册|
| token | String| - |登录成功之后返回的token信息|
| tokenExpired| String| - |token过期时间 |
@@ -865,7 +912,7 @@ exports.main = async function(event,context) {
- 需要在config.json内使用微信登录的平台下配置appid和appsecret
- uniId会自动判断客户端平台
-- 登录成功之后应持久化存储token,键值为:uniIdToken,`uni.removeStorageSync('uniIdToken')`
+- 登录成功之后应持久化存储token,键值为:uniIdToken,`uni.setStorageSync('uniIdToken', res.result.token)`
- App端获取code不可直接调用`uni.login`,详细用法可以看下面示例
**参数说明**
@@ -878,16 +925,19 @@ exports.main = async function(event,context) {
**响应参数**
-| 字段 | 类型 | 必填| 说明 |
-| --- | --- | --- | --- |
-| code | Number| 是 |错误码,0表示成功 |
-| msg | String| 是 |详细信息 |
-| uid | String| 是 |用户uid |
-| type | String| 是 |操作类型,`login`为登录、`register`为注册|
-| openid | String| 是 |用户openid |
-| unionid | String| 否 |用户unionid,能取到此参数时会返回 |
-| token | String| - |登录成功之后返回的token信息 |
-| tokenExpired| String| - |token过期时间 |
+| 字段 | 类型 | 必填| 说明 |
+| --- | --- | --- | --- |
+| code | Number | 是 |错误码,0表示成功 |
+| msg | String | 是 |详细信息 |
+| uid | String | 是 |用户uid |
+| type | String | 是 |操作类型,`login`为登录、`register`为注册|
+| openid | String | 是 |用户openid |
+| unionid | String | 否 |用户unionid,能取到此参数时会返回 |
+| token | String | 是 |登录成功之后返回的token信息 |
+| userInfo | Object| 是 |用户全部信息 |
+| tokenExpired | String | 是 |token过期时间 |
+| mobileConfirmed | Boolean | 是 |是否已验证手机号 |
+| emailConfirmed | Boolean | 是 |是否已验证邮箱 |
**示例代码**
@@ -976,6 +1026,41 @@ export default {
```
+## 获取微信openid
+
+用法:`uniID.code2SessionWeixin(Object Code2SessionWeixinParams);`
+
+**参数说明**
+
+| 字段 | 类型 | 必填| 说明 |
+| --- | --- | --- | --- |
+| code | String| 是 |微信登录返回的code |
+|platform |String |否 |客户端类型:`mp-weixin`、`app-plus`,默认uni-id会自动取客户端类型,但是在云函数url化等场景无法取到客户端类型,可以使用此参数指定 |
+
+**响应参数**
+
+| 字段 | 类型 | 必填| 说明 |
+| --- | --- | --- | --- |
+| code | Number| 是 |错误码,0表示成功 |
+| msg | String| 是 |详细信息 |
+| openid | String| - |用户openid |
+| unionid | String| - |用户unionid,可以取到此值时返回 |
+| sessionKey | String| - |客户端为微信小程序时返回 |
+| accessToken | String| - |客户端为APP时返回 |
+| expiresIn | String| - |客户端为APP时返回,accessToken 接口调用凭证超时时间,单位(秒)|
+| refreshToken| String| - |客户端为APP时返回,用于刷新accessToken |
+
+```js
+// 云函数代码
+const uniID = require('uni-id')
+exports.main = async function(event,context) {
+ const res = await uniID.code2SessionWeixin({
+ code: event.code
+ })
+ return res
+}
+```
+
## 绑定微信
用法:`uniID.bindWeixin(Object weixinInfo);`
@@ -1050,7 +1135,7 @@ exports.main = async function(event,context) {
**注意**
- 需要在config.json内支付宝平台下配置appid和privateKey(应用私钥)
-- 登录成功之后应持久化存储token,键值为:uniIdToken,`uni.removeStorageSync('uniIdToken')`
+- 登录成功之后应持久化存储token,键值为:uniIdToken,`uni.setStorageSync('uniIdToken', res.result.token)`
**参数说明**
@@ -1062,15 +1147,18 @@ exports.main = async function(event,context) {
**响应参数**
-| 字段 | 类型 | 必填| 说明 |
-| --- | --- | --- | --- |
-| code | Number| 是 |错误码,0表示成功 |
-| msg | String| 是 |详细信息 |
-| uid | String| 是 |用户uid |
-| type | String| 是 |操作类型,`login`为登录、`register`为注册|
-| openid | String| 是 |用户openid |
-| token | String| - |登录成功之后返回的token信息 |
-| tokenExpired| String| - |token过期时间 |
+| 字段 | 类型 | 必填| 说明 |
+| --- | --- | --- | --- |
+| code | Number | 是 |错误码,0表示成功 |
+| msg | String | 是 |详细信息 |
+| uid | String | 是 |用户uid |
+| type | String | 是 |操作类型,`login`为登录、`register`为注册|
+| openid | String | 是 |用户openid |
+| token | String | 是 |登录成功之后返回的token信息 |
+| userInfo | Object| 是 |用户全部信息 |
+| tokenExpired | String | 是 |token过期时间 |
+| mobileConfirmed | Boolean | 是 |是否已验证手机号 |
+| emailConfirmed | Boolean | 是 |是否已验证邮箱 |
**示例代码**
@@ -1086,6 +1174,41 @@ exports.main = async function(event,context) {
return res
}
```
+
+
+## 获取微信openid
+
+用法:`uniID.code2SessionWeixin(Object Code2SessionWeixinParams);`
+
+**参数说明**
+
+| 字段 | 类型 | 必填| 说明 |
+| --- | --- | --- | --- |
+| code | String| 是 |微信登录返回的code |
+|platform |String |否 |客户端类型:`mp-weixin`、`app-plus`,默认uni-id会自动取客户端类型,但是在云函数url化等场景无法取到客户端类型,可以使用此参数指定 |
+
+**响应参数**
+
+| 字段 | 类型 | 必填| 说明 |
+| --- | --- | --- | --- |
+| code | Number| 是 |错误码,0表示成功 |
+| msg | String| 是 |详细信息 |
+| openid | String| - |用户openid |
+| accessToken | String| - |客户端为APP时返回 |
+| expiresIn | String| - |客户端为APP时返回,accessToken 接口调用凭证超时时间,单位(秒)|
+| refreshToken| String| - |客户端为APP时返回,用于刷新accessToken |
+| reExpiresIn | String| - |refreshToken超时时间,单位(秒) |
+
+```js
+// 云函数代码
+const uniID = require('uni-id')
+exports.main = async function(event,context) {
+ const res = await uniID.code2SessionWeixin({
+ code: event.code
+ })
+ return res
+}
+```
## 绑定支付宝
@@ -1382,11 +1505,12 @@ exports.main = async function(event,context) {
**分享邀请码/邀请链接**
-![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1b181d40-e377-11ea-b680-7980c8a877b8.jpeg)
+
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1b181d40-e377-11ea-b680-7980c8a877b8.jpeg)
+
**受邀者注册**
-![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1b12c610-e377-11ea-b997-9918a5dda011.jpeg)
+
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1b12c610-e377-11ea-b997-9918a5dda011.jpeg)
# 数据库结构
@@ -1544,6 +1668,10 @@ exports.main = async function(event,context) {
|填写邀请人邀请码 |805 |01 |邀请码无效(邀请码存在且唯一时才算有效) |
| | |02 |uid错误,用户不存在 |
| | |03 |邀请码不可修改 |
+|获取微信openid |806 |01 |未能获取openid |
+| | |02 |调用获取openid接口失败 |
+|获取支付宝openid |807 |01 |未能获取openid |
+| | |02 |调用获取openid接口失败 |
|公用码 |900 |01 |数据库读写异常 |
# FAQ
@@ -1552,7 +1680,7 @@ exports.main = async function(event,context) {
+ 每次登录成功都会新增一个token,并且检查所有token的有效期删除过期token。正常情况下客户端应该判断持久化存储的token是否还在有效期内,如果还有效就直接进入应用,不再执行登录。这样相当于用户的每个设备上都存在一个有效期内的token,云端也是。
- 复制token到其他环境校验不通过
- + uni-id内会校验客户端ua,如果是在本地调试可以在云函数内修改`context.CLIENTUA`为生成token的设备ua,切记上线删除此逻辑
+ + uni-id内会校验客户端ua,如果是在本地调试可以在云函数内修改`context.CLIENTUA`为生成token的设备ua,切记上线删除此逻辑。如果不需要设备和token绑定,可以在config内配置`bindTokenToDevice: false`来关闭绑定
- username、email、mobile三个字段
+ 三个字段均可能为空,但是建议限制一下插入数据库三个字段的格式,比如username不应是邮箱格式或手机号格式,因为登录时可以选择使用username或mobile或email+密码的方式
diff --git a/docs/uniCloud/unipay.md b/docs/uniCloud/unipay.md
index 75202e0ff984ae4418eba17626e0d5f5441d8d17..3136b96ed0f0eb91fd24011912a5edd782f4944d 100644
--- a/docs/uniCloud/unipay.md
+++ b/docs/uniCloud/unipay.md
@@ -8,13 +8,15 @@
`unipay`是开源 sdk,可放心使用。本插件还包含示例工程,配置自己在微信和支付宝申请的相关配置后即可运行。
-为了更好的体验支付流程可以在插件市场导入`unipay`的示例项目快速体验,[插件市场 unipay](https://ext.dcloud.net.cn/plugin?id=1835)
+为了更好的体验支付流程可以在插件市场导入`unipay`的示例项目快速体验,[插件市场 unipay](https://ext.dcloud.net.cn/plugin?id=1835)。
+
+插件市场还有基于uniPay再次封装的模板,前端支付、管理端订单管理均已写好,拿去就用,见:[BaseCloud - 统一下单支付业务模块](https://ext.dcloud.net.cn/plugin?id=2668)
**须知**
- unipay 对入参和返回值均做了驼峰转化,开发者在对照微信支付或者支付宝支付对应的文档时需要注意。
- 特殊参数`appId`、`mchId`需注意大小写
-- 所有金额被统一为以分为单位
+- 所有金额被统一为以分为单位(避免浮点误差)
- 为避免无关参数干扰此文档仅列举必填参数,其余参数请参照[微信支付-小程序](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1)、[微信支付-App](https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1)、[支付宝支付-小程序](https://opendocs.alipay.com/apis/api_1/alipay.trade.create)、[支付宝支付-App](https://opendocs.alipay.com/apis/api_1/alipay.trade.app.pay)
- 微信支付沙箱环境不支持小程序支付,另外此沙箱环境只可以跑微信提供的测试用例不可以随意测试
- 无论是微信还是支付宝,沙箱环境都不确保稳定,如果使用沙箱的过程中遇到疑难问题建议切换成正式环境测试
@@ -73,8 +75,8 @@ const unipayIns = unipay.initWeixin({
| 参数名 | 类型 | 必填| 默认值 | 说明 |
| :-------------: | :-----: | :--:| :--------------------------------------------------:| :------------------------------------:|
-| appId | String | 是 | - | 当前应用在对应支付平台的 appId |
-| mchId | String | 是 | - | 商户号 |
+| appId | String | 是 | - | 当前应用在对应支付平台的 appId |
+| mchId | String | 是| - | 商户号 |
| privateKey | String | 是 | - | 应用私钥字符串 |
| alipayPublicKey | String | 否 | - | 支付宝公钥,验签使用 |
| keyType | String | 否 | PKCS8 | 应用私钥字符串类型 |
diff --git a/docs/use-html5plus.md b/docs/use-html5plus.md
index 4c4ce54af0205b9131d10ac9d895d1a25ff9ecc8..acfcbe53e3e5033160a4f8d115417d84f6b2bceb 100644
--- a/docs/use-html5plus.md
+++ b/docs/use-html5plus.md
@@ -1,6 +1,6 @@
`uni-app` App 端内置 [HTML5+](https://www.html5plus.org/doc/) 引擎,让 js 可以直接调用丰富的原生能力。
-- 条件编译调用 HTML5+
+#### 条件编译调用 HTML5+
小程序及 H5 等平台是没有 HTML5+ 扩展规范的,因此在 `uni-app` 调用 HTML5+ 的扩展规范时,需要注意使用条件编译。否则运行到h5、小程序等平台会出现 `plus is not defined`错误。
@@ -11,12 +11,12 @@ console.log('应用的 appid 为:' + appid);
// #endif
```
-- `uni-app`不需要 `plus ready`
+#### `uni-app`不需要 `plus ready`
在html中使用plus的api,需要等待plus ready。
而`uni-app`不需要等,可以直接使用。而且如果你调用plus ready,反而不会触发。
-- `uni-app` 中的事件监听
+#### `uni-app` 中的事件监听
在普通的 H5+ 项目中,需要使用 `document.addEventListener` 监听原生扩展的事件。
diff --git a/docs/use-weex.md b/docs/use-weex.md
index 5078f9f9cb2af78c58006233340729dff18f883b..3735889c4f5b9235c0734077da57153eec00bd9c 100644
--- a/docs/use-weex.md
+++ b/docs/use-weex.md
@@ -413,7 +413,8 @@ BindingX类似一种强化版的css,运行性能高,但没有js那样足够
}, function(res) {
if (res.state === 'exit') {
Binding.unbind({
- token: main_binding
+ token: main_binding.token,
+ eventType: 'timing'
})
}
});
@@ -436,7 +437,8 @@ BindingX类似一种强化版的css,运行性能高,但没有js那样足够
}, function(res) {
if (res.state === 'exit') {
Binding.unbind({
- token: btn_binding
+ token: btn_binding.token,
+ eventType: 'timing'
})
}
})
@@ -462,7 +464,8 @@ BindingX类似一种强化版的css,运行性能高,但没有js那样足够
}, function(res) {
if (res.state === 'exit') {
Binding.unbind({
- token: main_binding
+ token: main_binding.token,
+ eventType: 'timing'
})
}
});
@@ -485,7 +488,8 @@ BindingX类似一种强化版的css,运行性能高,但没有js那样足够
}, function(res) {
if (res.state === 'exit') {
Binding.unbind({
- token: btn_binding
+ token: btn_binding.token,
+ eventType: 'timing'
})
}
})
diff --git a/lerna.json b/lerna.json
index e89b5ab72e6c1d3f43980c55e52ee025a3090b62..b2c6feefcfb81ab32ddb8491112137ef2f2e06e9 100644
--- a/lerna.json
+++ b/lerna.json
@@ -12,5 +12,5 @@
"message": "chore(release): publish %s"
}
},
- "version": "2.0.0-28720200819002"
+ "version": "2.0.0-28920200907001"
}
diff --git a/packages/uni-app-plus-nvue/package.json b/packages/uni-app-plus-nvue/package.json
index c9579bce80ad74bc7df1e29b05d13c7d09a0ab41..1f914453b2d55454bc0f4091284b240e1b3e32b4 100644
--- a/packages/uni-app-plus-nvue/package.json
+++ b/packages/uni-app-plus-nvue/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-app-plus-nvue",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app app-plus-nvue",
"main": "dist/index.js",
"repository": {
@@ -13,5 +13,5 @@
},
"author": "fxy060608",
"license": "Apache-2.0",
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-app-plus/dist/index.js b/packages/uni-app-plus/dist/index.js
index c1b2db5724fc40c2208ed0653c2080517a5d095e..2d00f4ede1e9bb532a17a9aab68c478c362d9161 100644
--- a/packages/uni-app-plus/dist/index.js
+++ b/packages/uni-app-plus/dist/index.js
@@ -1429,7 +1429,10 @@ function getEventChannel (id) {
function createApp (vm) {
Vue.prototype.getOpenerEventChannel = function () {
- return this.__eventChannel__ || new EventChannel()
+ if (!this.__eventChannel__) {
+ this.__eventChannel__ = new EventChannel();
+ }
+ return this.__eventChannel__
};
const callHook = Vue.prototype.__call_hook;
Vue.prototype.__call_hook = function (hook, args) {
diff --git a/packages/uni-app-plus/package.json b/packages/uni-app-plus/package.json
index 921d886a0ca0d458b2433fa99a2666d20355485e..4adf96326110d1efd548d160f7845c3b897a502a 100644
--- a/packages/uni-app-plus/package.json
+++ b/packages/uni-app-plus/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-app-plus",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app app-plus",
"main": "dist/index.js",
"repository": {
@@ -17,5 +17,5 @@
"name": "app-plus",
"title": "APP-PLUS"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-automator/package.json b/packages/uni-automator/package.json
index 6d507df80da8076ec4f8ac21213bff810a11d9b5..27a44d53f09d917a50645b3bf1679f49115699f4 100644
--- a/packages/uni-automator/package.json
+++ b/packages/uni-automator/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-automator",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app automator",
"main": "dist/index.js",
"repository": {
@@ -29,5 +29,6 @@
"jimp": "^0.10.1",
"node-simctl": "^6.1.0",
"puppeteer": "^3.0.1"
- }
+ },
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-cli-shared/package.json b/packages/uni-cli-shared/package.json
index 3263853d0cf29e3344ac0e4ee45c06d8793059ff..ffe4cc0fcb0d1063e0f15041d8679c824997acea 100644
--- a/packages/uni-cli-shared/package.json
+++ b/packages/uni-cli-shared/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-cli-shared",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-cli-shared",
"main": "lib/index.js",
"repository": {
@@ -23,5 +23,5 @@
"postcss-urlrewrite": "^0.2.2",
"strip-json-comments": "^2.0.1"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-h5-ui/package.json b/packages/uni-h5-ui/package.json
index 20fa203cb5135592df38cc8011b9b933bf2cb5d7..872b65f54cba3826b187baa8bac530777bf48d31 100644
--- a/packages/uni-h5-ui/package.json
+++ b/packages/uni-h5-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-h5-ui",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app h5 ui",
"main": "dist/index.umd.min.js",
"repository": {
@@ -13,5 +13,5 @@
},
"author": "fxy060608",
"license": "Apache-2.0",
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-h5/package.json b/packages/uni-h5/package.json
index 0e7829d86bb30a7115c9925eff1e35600ae11bed..70cbfcb9ac1dae45881c0d88e58c9bee694f4fc1 100644
--- a/packages/uni-h5/package.json
+++ b/packages/uni-h5/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-h5",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app h5",
"main": "dist/index.umd.min.js",
"repository": {
@@ -23,5 +23,5 @@
"title": "H5",
"main": "lib/h5/uni.config.js"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-migration/package.json b/packages/uni-migration/package.json
index 425bcb3db41c5f14e8574fe95028e216dee693db..e2c6513b491be08b4bd3538b71b09921edd7ae14 100644
--- a/packages/uni-migration/package.json
+++ b/packages/uni-migration/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-migration",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app migration",
"main": "lib/index.js",
"repository": {
@@ -20,7 +20,7 @@
},
"author": "fxy060608",
"license": "Apache-2.0",
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d",
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380",
"dependencies": {
"commander": "^4.0.1",
"fs-extra": "^8.1.0",
diff --git a/packages/uni-mp-alipay/dist/index.js b/packages/uni-mp-alipay/dist/index.js
index 38b1b8da2b3390e4328998cb3c0e5c2f9b7a3be1..2e2d94e5a7a9c9ffa04148cd9af4b0f9245eda4a 100644
--- a/packages/uni-mp-alipay/dist/index.js
+++ b/packages/uni-mp-alipay/dist/index.js
@@ -430,11 +430,13 @@ const eventChannelStack = [];
let id = 0;
-function initEventChannel (events) {
+function initEventChannel (events, cache = true) {
id++;
const eventChannel = new EventChannel(id, events);
- eventChannels[id] = eventChannel;
- eventChannelStack.push(eventChannel);
+ if (cache) {
+ eventChannels[id] = eventChannel;
+ eventChannelStack.push(eventChannel);
+ }
return eventChannel
}
@@ -2186,7 +2188,10 @@ function parseApp (vm) {
function createApp (vm) {
Vue.prototype.getOpenerEventChannel = function () {
- return this.__eventChannel__ || new EventChannel()
+ if (!this.__eventChannel__) {
+ this.__eventChannel__ = new EventChannel();
+ }
+ return this.__eventChannel__
};
const callHook = Vue.prototype.__call_hook;
Vue.prototype.__call_hook = function (hook, args) {
diff --git a/packages/uni-mp-alipay/package.json b/packages/uni-mp-alipay/package.json
index 3e966aa908207a7e756751959b1e4cd0784fdca7..797bda419df3109ed6fb80bbb8f6e6efb4049257 100644
--- a/packages/uni-mp-alipay/package.json
+++ b/packages/uni-mp-alipay/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-alipay",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app mp-alipay",
"main": "dist/index.js",
"repository": {
@@ -17,5 +17,5 @@
"name": "mp-alipay",
"title": "支付宝小程序"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-mp-baidu/dist/index.js b/packages/uni-mp-baidu/dist/index.js
index 8717ac122b339d99c9758bacccca5b68751355cc..5ac51b5c8c93de83494b0e2750fd68f54c3cf5ed 100644
--- a/packages/uni-mp-baidu/dist/index.js
+++ b/packages/uni-mp-baidu/dist/index.js
@@ -430,11 +430,13 @@ const eventChannelStack = [];
let id = 0;
-function initEventChannel (events) {
+function initEventChannel (events, cache = true) {
id++;
const eventChannel = new EventChannel(id, events);
- eventChannels[id] = eventChannel;
- eventChannelStack.push(eventChannel);
+ if (cache) {
+ eventChannels[id] = eventChannel;
+ eventChannelStack.push(eventChannel);
+ }
return eventChannel
}
@@ -1626,7 +1628,10 @@ function parseApp (vm) {
function createApp (vm) {
Vue.prototype.getOpenerEventChannel = function () {
- return this.__eventChannel__ || new EventChannel()
+ if (!this.__eventChannel__) {
+ this.__eventChannel__ = new EventChannel();
+ }
+ return this.__eventChannel__
};
const callHook = Vue.prototype.__call_hook;
Vue.prototype.__call_hook = function (hook, args) {
diff --git a/packages/uni-mp-baidu/package.json b/packages/uni-mp-baidu/package.json
index 5072931ec77a2e1ee81cb9ca7c25769d7a34313a..cfb9def4bfb0919b3a540c684c55425cab683461 100644
--- a/packages/uni-mp-baidu/package.json
+++ b/packages/uni-mp-baidu/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-baidu",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app mp-baidu",
"main": "dist/index.js",
"repository": {
@@ -17,5 +17,5 @@
"name": "mp-baidu",
"title": "百度小程序"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-mp-kuaishou/dist/index.js b/packages/uni-mp-kuaishou/dist/index.js
index e6b7bea879f051f5cadcfef3e5cd0be73d223387..984f60d1483d504fdd168afbfb3b49e23b882971 100644
--- a/packages/uni-mp-kuaishou/dist/index.js
+++ b/packages/uni-mp-kuaishou/dist/index.js
@@ -356,6 +356,143 @@ var baseApi = /*#__PURE__*/Object.freeze({
interceptors: interceptors
});
+class EventChannel {
+ constructor (id, events) {
+ this.id = id;
+ this.listener = {};
+ this.emitCache = {};
+ if (events) {
+ Object.keys(events).forEach(name => {
+ this.on(name, events[name]);
+ });
+ }
+ }
+
+ emit (eventName, ...args) {
+ const fns = this.listener[eventName];
+ if (!fns) {
+ return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args)
+ }
+ fns.forEach(opt => {
+ opt.fn.apply(opt.fn, args);
+ });
+ this.listener[eventName] = fns.filter(opt => opt.type !== 'once');
+ }
+
+ on (eventName, fn) {
+ this._addListener(eventName, 'on', fn);
+ this._clearCache(eventName);
+ }
+
+ once (eventName, fn) {
+ this._addListener(eventName, 'once', fn);
+ this._clearCache(eventName);
+ }
+
+ off (eventName, fn) {
+ const fns = this.listener[eventName];
+ if (!fns) {
+ return
+ }
+ if (fn) {
+ for (let i = 0; i < fns.length;) {
+ if (fns[i].fn === fn) {
+ fns.splice(i, 1);
+ i--;
+ }
+ i++;
+ }
+ } else {
+ delete this.listener[eventName];
+ }
+ }
+
+ _clearCache (eventName) {
+ const cacheArgs = this.emitCache[eventName];
+ if (cacheArgs) {
+ for (; cacheArgs.length > 0;) {
+ this.emit.apply(this, [eventName].concat(cacheArgs.shift()));
+ }
+ }
+ }
+
+ _addListener (eventName, type, fn) {
+ (this.listener[eventName] || (this.listener[eventName] = [])).push({
+ fn,
+ type
+ });
+ }
+}
+
+const eventChannels = {};
+
+const eventChannelStack = [];
+
+let id = 0;
+
+function initEventChannel (events, cache = true) {
+ id++;
+ const eventChannel = new EventChannel(id, events);
+ if (cache) {
+ eventChannels[id] = eventChannel;
+ eventChannelStack.push(eventChannel);
+ }
+ return eventChannel
+}
+
+function getEventChannel (id) {
+ if (id) {
+ const eventChannel = eventChannels[id];
+ delete eventChannels[id];
+ return eventChannel
+ }
+ return eventChannelStack.shift()
+}
+
+var navigateTo = {
+ args (fromArgs, toArgs) {
+ const id = initEventChannel(fromArgs.events).id;
+ if (fromArgs.url) {
+ fromArgs.url = fromArgs.url + (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + '__id__=' + id;
+ }
+ },
+ returnValue (fromRes, toRes) {
+ fromRes.eventChannel = getEventChannel();
+ }
+};
+
+function findExistsPageIndex (url) {
+ const pages = getCurrentPages();
+ let len = pages.length;
+ while (len--) {
+ const page = pages[len];
+ if (page.$page && page.$page.fullPath === url) {
+ return len
+ }
+ }
+ return -1
+}
+
+var redirectTo = {
+ name (fromArgs) {
+ if (fromArgs.exists === 'back' && fromArgs.delta) {
+ return 'navigateBack'
+ }
+ return 'redirectTo'
+ },
+ args (fromArgs) {
+ if (fromArgs.exists === 'back' && fromArgs.url) {
+ const existsPageIndex = findExistsPageIndex(fromArgs.url);
+ if (existsPageIndex !== -1) {
+ const delta = getCurrentPages().length - 1 - existsPageIndex;
+ if (delta > 0) {
+ fromArgs.delta = delta;
+ }
+ }
+ }
+ }
+};
+
var previewImage = {
args (fromArgs) {
let currentIndex = parseInt(fromArgs.current);
@@ -390,7 +527,9 @@ var previewImage = {
}
};
-const protocols = {
+const protocols = {
+ navigateTo,
+ redirectTo,
previewImage
};
const todos = [
@@ -464,12 +603,17 @@ function wrapper (methodName, method) {
}
arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
-
- const args = [arg1];
- if (typeof arg2 !== 'undefined') {
- args.push(arg2);
+
+ const args = [arg1];
+ if (typeof arg2 !== 'undefined') {
+ args.push(arg2);
}
- const returnValue = ks[options.name || methodName].apply(ks, args);
+ if (isFn(options.name)) {
+ methodName = options.name(arg1);
+ } else if (isStr(options.name)) {
+ methodName = options.name;
+ }
+ const returnValue = ks[methodName].apply(ks, args);
if (isSyncApi(methodName)) { // 同步 api
return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName))
}
@@ -1137,10 +1281,10 @@ function handleEvent (event) {
eventArray[2],
isCustom,
methodName
- ) || [];
+ );
// 参数尾部增加原始事件对象用于复杂表达式内获取额外数据
// eslint-disable-next-line no-sparse-arrays
- ret.push(handler.apply(handlerCtx, params.concat([, , , , , , , , , , event])));
+ ret.push(handler.apply(handlerCtx, (Array.isArray(params) ? params : []).concat([, , , , , , , , , , event])));
}
});
}
@@ -1316,6 +1460,20 @@ function parseApp (vm) {
}
function createApp (vm) {
+ Vue.prototype.getOpenerEventChannel = function () {
+ if (!this.__eventChannel__) {
+ this.__eventChannel__ = new EventChannel();
+ }
+ return this.__eventChannel__
+ };
+ const callHook = Vue.prototype.__call_hook;
+ Vue.prototype.__call_hook = function (hook, args) {
+ if (hook === 'onLoad' && args && args.__id__) {
+ this.__eventChannel__ = getEventChannel(args.__id__);
+ delete args.__id__;
+ }
+ return callHook.call(this, hook, args)
+ };
App(parseApp(vm));
return vm
}
diff --git a/packages/uni-mp-kuaishou/package.json b/packages/uni-mp-kuaishou/package.json
index b2099d1879a212962575002479f6ddb17b4a1541..bf9498b5893f1dfa3c0ea4104d91a8fe2180b4cc 100644
--- a/packages/uni-mp-kuaishou/package.json
+++ b/packages/uni-mp-kuaishou/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-kuaishou",
- "version": "2.0.0-alpha-28920200821002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app mp-kuaishou",
"main": "dist/index.js",
"repository": {
diff --git a/packages/uni-mp-qq/dist/index.js b/packages/uni-mp-qq/dist/index.js
index 5235c9a378a1da312d57efc8f32fcc72c7424a38..1880b8c006ac333857ead904e991df65570de1aa 100644
--- a/packages/uni-mp-qq/dist/index.js
+++ b/packages/uni-mp-qq/dist/index.js
@@ -430,11 +430,13 @@ const eventChannelStack = [];
let id = 0;
-function initEventChannel (events) {
+function initEventChannel (events, cache = true) {
id++;
const eventChannel = new EventChannel(id, events);
- eventChannels[id] = eventChannel;
- eventChannelStack.push(eventChannel);
+ if (cache) {
+ eventChannels[id] = eventChannel;
+ eventChannelStack.push(eventChannel);
+ }
return eventChannel
}
@@ -1540,7 +1542,10 @@ function parseApp$1 (vm) {
function createApp (vm) {
Vue.prototype.getOpenerEventChannel = function () {
- return this.__eventChannel__ || new EventChannel()
+ if (!this.__eventChannel__) {
+ this.__eventChannel__ = new EventChannel();
+ }
+ return this.__eventChannel__
};
const callHook = Vue.prototype.__call_hook;
Vue.prototype.__call_hook = function (hook, args) {
diff --git a/packages/uni-mp-qq/package.json b/packages/uni-mp-qq/package.json
index f0df2e4a923225dbd5d3dfbbbaf1512557902d66..8402a4f6e4f248e8bbfa654d08cd30be727d0ffe 100644
--- a/packages/uni-mp-qq/package.json
+++ b/packages/uni-mp-qq/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-qq",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app mp-qq",
"main": "dist/index.js",
"repository": {
@@ -17,5 +17,5 @@
"name": "mp-qq",
"title": "QQ小程序"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-mp-toutiao/dist/index.js b/packages/uni-mp-toutiao/dist/index.js
index 4b6e2a088e35bb65d7852014e492b4c0f022babb..09fa3f20aa6114176713ea8680a6a396f0e643dc 100644
--- a/packages/uni-mp-toutiao/dist/index.js
+++ b/packages/uni-mp-toutiao/dist/index.js
@@ -430,11 +430,13 @@ const eventChannelStack = [];
let id = 0;
-function initEventChannel (events) {
+function initEventChannel (events, cache = true) {
id++;
const eventChannel = new EventChannel(id, events);
- eventChannels[id] = eventChannel;
- eventChannelStack.push(eventChannel);
+ if (cache) {
+ eventChannels[id] = eventChannel;
+ eventChannelStack.push(eventChannel);
+ }
return eventChannel
}
@@ -1712,7 +1714,10 @@ function parseApp (vm) {
function createApp (vm) {
Vue.prototype.getOpenerEventChannel = function () {
- return this.__eventChannel__ || new EventChannel()
+ if (!this.__eventChannel__) {
+ this.__eventChannel__ = new EventChannel();
+ }
+ return this.__eventChannel__
};
const callHook = Vue.prototype.__call_hook;
Vue.prototype.__call_hook = function (hook, args) {
diff --git a/packages/uni-mp-toutiao/package.json b/packages/uni-mp-toutiao/package.json
index d86fa39853fcfb2533ab70863cfcfe40e657daa5..24cf0afaa33870087ee32d0de797520c08c6bd4e 100644
--- a/packages/uni-mp-toutiao/package.json
+++ b/packages/uni-mp-toutiao/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-toutiao",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app mp-toutiao",
"main": "dist/index.js",
"repository": {
@@ -17,5 +17,5 @@
"name": "mp-toutiao",
"title": "字节跳动小程序"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-mp-vue/package.json b/packages/uni-mp-vue/package.json
index d390ba44f0284f154b5b5b5eb6352af26a55d6f8..513eb78ef994e45d9b95d2c01227ff35e7b1e45a 100644
--- a/packages/uni-mp-vue/package.json
+++ b/packages/uni-mp-vue/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-vue",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "@dcloudio/uni-mp-vue",
"main": "dist/vue.runtime.esm.js",
"module": "dist/vue.runtime.esm.js",
@@ -22,5 +22,6 @@
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/dcloudio/uni-app/issues"
- }
+ },
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-mp-weixin/dist/index.js b/packages/uni-mp-weixin/dist/index.js
index 3c62ba816acec5276af2b474595f833c8c5f05bb..d9a6178bdb895f923e57db7379ffa59283dbb5a3 100644
--- a/packages/uni-mp-weixin/dist/index.js
+++ b/packages/uni-mp-weixin/dist/index.js
@@ -430,11 +430,13 @@ const eventChannelStack = [];
let id = 0;
-function initEventChannel (events) {
+function initEventChannel (events, cache = true) {
id++;
const eventChannel = new EventChannel(id, events);
- eventChannels[id] = eventChannel;
- eventChannelStack.push(eventChannel);
+ if (cache) {
+ eventChannels[id] = eventChannel;
+ eventChannelStack.push(eventChannel);
+ }
return eventChannel
}
@@ -1493,7 +1495,10 @@ function parseApp (vm) {
function createApp (vm) {
Vue.prototype.getOpenerEventChannel = function () {
- return this.__eventChannel__ || new EventChannel()
+ if (!this.__eventChannel__) {
+ this.__eventChannel__ = new EventChannel();
+ }
+ return this.__eventChannel__
};
const callHook = Vue.prototype.__call_hook;
Vue.prototype.__call_hook = function (hook, args) {
diff --git a/packages/uni-mp-weixin/package.json b/packages/uni-mp-weixin/package.json
index 4eff0faa648b4eacef2280db1b582b209199d264..be7c55a690ccbce33a90cf3fd9143aba732bcc80 100644
--- a/packages/uni-mp-weixin/package.json
+++ b/packages/uni-mp-weixin/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-mp-weixin",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app mp-weixin",
"main": "dist/index.js",
"repository": {
@@ -17,5 +17,5 @@
"name": "mp-weixin",
"title": "微信小程序"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-quickapp-native/package.json b/packages/uni-quickapp-native/package.json
index 75730f15634016ed699b071e58235a9b5e02e9ab..dab6e3a2fdfdd55a9458d880256ee65cc694f0f0 100644
--- a/packages/uni-quickapp-native/package.json
+++ b/packages/uni-quickapp-native/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-quickapp-native",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app quickapp-native",
"main": "dist/vue.prod.js",
"repository": {
@@ -19,7 +19,7 @@
},
"author": "fxy060608",
"license": "Apache-2.0",
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d",
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380",
"uni-app": {
"name": "quickapp-native",
"title": "快应用(Native)版"
diff --git a/packages/uni-quickapp-webview/dist/index.js b/packages/uni-quickapp-webview/dist/index.js
index 07fb23f8b68ef709dc81c0e582baf114bf8109f9..5eec8463ba9d7610a94aa66e4b58523fac344995 100644
--- a/packages/uni-quickapp-webview/dist/index.js
+++ b/packages/uni-quickapp-webview/dist/index.js
@@ -430,11 +430,13 @@ const eventChannelStack = [];
let id = 0;
-function initEventChannel (events) {
+function initEventChannel (events, cache = true) {
id++;
const eventChannel = new EventChannel(id, events);
- eventChannels[id] = eventChannel;
- eventChannelStack.push(eventChannel);
+ if (cache) {
+ eventChannels[id] = eventChannel;
+ eventChannelStack.push(eventChannel);
+ }
return eventChannel
}
@@ -1543,7 +1545,10 @@ function parseApp (vm) {
function createApp (vm) {
Vue.prototype.getOpenerEventChannel = function () {
- return this.__eventChannel__ || new EventChannel()
+ if (!this.__eventChannel__) {
+ this.__eventChannel__ = new EventChannel();
+ }
+ return this.__eventChannel__
};
const callHook = Vue.prototype.__call_hook;
Vue.prototype.__call_hook = function (hook, args) {
diff --git a/packages/uni-quickapp-webview/package.json b/packages/uni-quickapp-webview/package.json
index c1609ec17b4e066c9e0659ee42c4cb4a050eff45..84bba8b4f8fb0a86217313308aa837f16136fc68 100644
--- a/packages/uni-quickapp-webview/package.json
+++ b/packages/uni-quickapp-webview/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-quickapp-webview",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app quickapp-webview",
"main": "dist/index.js",
"repository": {
@@ -17,5 +17,5 @@
"name": "quickapp-webview",
"title": "快应用(Webview)版"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-stat/dist/index.js b/packages/uni-stat/dist/index.js
index e4fc3e81edb0f33b020307f0917794a4c6701271..4dc5e3595e9fee69e353ef5d35eae248ba03020c 100644
--- a/packages/uni-stat/dist/index.js
+++ b/packages/uni-stat/dist/index.js
@@ -78,7 +78,8 @@ const getPlatformName = () => {
'mp-alipay': 'ali',
'mp-baidu': 'bd',
'mp-toutiao': 'tt',
- 'mp-qq': 'qq'
+ 'mp-qq': 'qq',
+ 'mp-kuaishou': 'ks'
};
return platformList[process.env.VUE_APP_PLATFORM];
};
@@ -380,12 +381,9 @@ const requestData = (done) => {
if (report_status_code === '') {
report_status_code = 1;
}
- if (report_status_code === 1) {
- typeof done === 'function' && done({
- enable: res.enable
- });
- }
- // console.error('统计请求错误');
+ typeof done === 'function' && done({
+ enable: report_status_code
+ });
}
});
};
diff --git a/packages/uni-stat/package.json b/packages/uni-stat/package.json
index 7b4c1b4443d3803f36c7432b473a5ec90c815e1d..532fee027f33181c903c64094b0f57b274fb2a12 100644
--- a/packages/uni-stat/package.json
+++ b/packages/uni-stat/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-stat",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "",
"main": "dist/index.js",
"repository": {
@@ -34,5 +34,5 @@
"rollup-plugin-replace": "^2.2.0",
"rollup-plugin-uglify": "^6.0.2"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/uni-template-compiler/package.json b/packages/uni-template-compiler/package.json
index bd8d5d8db2d297380be4705e943329a1ba3504b6..ff8bd0ca312b019bc56777c4581a7dea3d55b921 100644
--- a/packages/uni-template-compiler/package.json
+++ b/packages/uni-template-compiler/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/uni-template-compiler",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-template-compiler",
"main": "lib/index.js",
"repository": {
@@ -22,5 +22,5 @@
"@babel/types": "^7.3.3",
"vue-template-compiler": "^2.6.10"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/vue-cli-plugin-hbuilderx/package.json b/packages/vue-cli-plugin-hbuilderx/package.json
index 4cc24be8e90c89ed4a2bc290552e0e69fede6ecf..12091e8f6849b00b8dd76e943f3bda2e991c441b 100644
--- a/packages/vue-cli-plugin-hbuilderx/package.json
+++ b/packages/vue-cli-plugin-hbuilderx/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/vue-cli-plugin-hbuilderx",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "HBuilderX plugin for vue-cli 3",
"main": "index.js",
"repository": {
@@ -18,5 +18,5 @@
"css": "~2.2.1",
"escodegen": "^1.8.1"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/vue-cli-plugin-uni-optimize/package.json b/packages/vue-cli-plugin-uni-optimize/package.json
index dcd3d8e6496edb1a69534c6713af5645a987790e..7540729707f0a5e54f98c8f8fb1d6e6387ccd73b 100644
--- a/packages/vue-cli-plugin-uni-optimize/package.json
+++ b/packages/vue-cli-plugin-uni-optimize/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/vue-cli-plugin-uni-optimize",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app optimize plugin for vue-cli 3",
"main": "index.js",
"repository": {
@@ -13,5 +13,5 @@
},
"author": "fxy060608",
"license": "Apache-2.0",
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/vue-cli-plugin-uni/package.json b/packages/vue-cli-plugin-uni/package.json
index 333cbbc992b7660b65dc419417b8662faa87ba81..9d4a300317338db4f06c41ee246ccb9a61f2caca 100644
--- a/packages/vue-cli-plugin-uni/package.json
+++ b/packages/vue-cli-plugin-uni/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/vue-cli-plugin-uni",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app plugin for vue-cli 3",
"main": "index.js",
"repository": {
@@ -17,7 +17,7 @@
"author": "fxy060608",
"license": "Apache-2.0",
"dependencies": {
- "@dcloudio/uni-stat": "^2.0.0-28720200819002",
+ "@dcloudio/uni-stat": "^2.0.0-28920200907001",
"buffer-json": "^2.0.0",
"copy-webpack-plugin": "^5.1.1",
"cross-env": "^5.2.0",
@@ -37,5 +37,5 @@
"wrap-loader": "^0.2.0",
"xregexp": "4.0.0"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/webpack-uni-mp-loader/package.json b/packages/webpack-uni-mp-loader/package.json
index 431df5fd7f4fa72449dde219478c6039e95d1dd0..f8294aa8c88495ca5f007c5d1bdd1a0449d83927 100644
--- a/packages/webpack-uni-mp-loader/package.json
+++ b/packages/webpack-uni-mp-loader/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/webpack-uni-mp-loader",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "webpack-uni-mp-loader",
"main": "index.js",
"repository": {
@@ -16,5 +16,5 @@
},
"author": "fxy060608",
"license": "Apache-2.0",
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/packages/webpack-uni-pages-loader/package.json b/packages/webpack-uni-pages-loader/package.json
index abcfd37aa9c2b8c506da10bf1078963fdd523ab5..c310d33987e83895e3ff9a3f3689db246c78aec2 100644
--- a/packages/webpack-uni-pages-loader/package.json
+++ b/packages/webpack-uni-pages-loader/package.json
@@ -1,6 +1,6 @@
{
"name": "@dcloudio/webpack-uni-pages-loader",
- "version": "2.0.0-28720200819002",
+ "version": "2.0.0-28920200907001",
"description": "uni-app pages.json loader",
"main": "lib/index.js",
"repository": {
@@ -21,7 +21,7 @@
"strip-json-comments": "^2.0.1"
},
"uni-app": {
- "compilerVersion": "2.8.7"
+ "compilerVersion": "2.8.11"
},
- "gitHead": "e62f0398362f2f9de0bf5726046d7951c88d6b1d"
+ "gitHead": "e51484a49748f7bff86bb833763e5dff1522d380"
}
diff --git a/src/platforms/mp-baidu/runtime/wrapper/util.js b/src/platforms/mp-baidu/runtime/wrapper/util.js
index c429e6c108ae8da245c1e1458afd604fa987d6b3..17ed556440f275657b2559b7792358127cc8e943 100644
--- a/src/platforms/mp-baidu/runtime/wrapper/util.js
+++ b/src/platforms/mp-baidu/runtime/wrapper/util.js
@@ -1,9 +1,11 @@
export const mocks = ['nodeId', 'componentName', '_componentId', 'uniquePrefix']
export function isPage () {
- return !this.ownerId
+ // 百度小程序组件的id,某些情况下可能是number类型的0,不能直接return !this.ownerId 判断当前组件是否是Page
+ // 否则会导致mounted不执行
+ return typeof this.ownerId === 'undefined'
}
export function initRelation (detail) {
this.dispatch('__l', detail)
-}
+}