diff --git a/docs/_sidebar.md b/docs/_sidebar.md
index ab1e68ecd7001dff155963405d6af92a30979026..cb8c77d7473ad1ca7a30ff8446f118718c07a839 100644
--- a/docs/_sidebar.md
+++ b/docs/_sidebar.md
@@ -27,6 +27,7 @@
* [混合开发](hybrid.md)
* [uni小程序sdk](https://nativesupport.dcloud.net.cn/README)
* 运营服务
+ * [App升级中心](uniCloud/upgrade-center.md)
* [uni一键登录](univerify.md)
* [统一推送uniPush](unipush.md)
* [uni统计](uni-stat.md)
@@ -80,7 +81,7 @@
官方QQ交流群
-
+
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -89,10 +90,10 @@
群30:371046920(2000人已满)
群29:202965481(2000人已满)
群28:166188776(2000人已满)
-
群27:811363410(2000人已满)
+
群26:147867597(2000人已满)
群25:165297000(2000人已满)
-
+
群24:672494800(2000人已满)
群23:599958679(2000人已满)
群22:687186952(2000人已满)
群21:717019120(2000人已满)
diff --git a/docs/api/_sidebar.md b/docs/api/_sidebar.md
index a3afca9ee044138e6b620bb5c42aa4a2a0ed1560..4b4a96aa9a197d9ac3428e6b6c6f75b4ef6086d6 100644
--- a/docs/api/_sidebar.md
+++ b/docs/api/_sidebar.md
@@ -5,6 +5,7 @@
* [uni.arrayBufferToBase64](api/arrayBufferToBase64?id=arraybuffertobase64)
* [生命周期](api/lifecycle.md)
* [应用级事件](api/application.md)
+ * [拦截器](api/interceptor.md)
* 网络
* [发起请求](api/request/request.md)
* [上传、下载](api/request/network-file.md)
@@ -123,6 +124,7 @@
* [支付](api/plugins/payment.md)
* [推送](api/plugins/push.md)
* [语音](api/plugins/voice.md)
+ * [一键生成iOS通用链接](api/plugins/universal-links.md)
* [uniCloud](api/uniCloud.md)
* 平台扩展
* [App原生插件](api/extend/native-plugin.md)
@@ -179,7 +181,7 @@
官方QQ交流群
-
+
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -188,10 +190,10 @@
群30:371046920(2000人已满)
群29:202965481(2000人已满)
群28:166188776(2000人已满)
-
群27:811363410(2000人已满)
+
群26:147867597(2000人已满)
群25:165297000(2000人已满)
-
+
群24:672494800(2000人已满)
群23:599958679(2000人已满)
群22:687186952(2000人已满)
群21:717019120(2000人已满)
diff --git a/docs/api/a-d/content-page.md b/docs/api/a-d/content-page.md
index 45b834d3ac63fa2290ed3524e82c1b5b9ca4f1e2..c1aa62f63b05cf291e10fab55f7c9b42a2b9714c 100644
--- a/docs/api/a-d/content-page.md
+++ b/docs/api/a-d/content-page.md
@@ -23,7 +23,7 @@
* App平台:[https://uniad.dcloud.net.cn/](https://uniad.dcloud.net.cn/)
2. 申请广告位id
在各位后台申请广告位id
-3. App端打包后生效,打包时必须选择要集成的广告SDK(目前仅支持快手联盟)。
+3. App端打包后生效,打包时必须选择要集成的广告SDK(目前仅支持快手内容联盟)。
### 语法
diff --git a/docs/api/a-d/full-screen-video.md b/docs/api/a-d/full-screen-video.md
index a3c3c93e793ace076de4e42d78c10f00f607c750..4ca556c148a07ebba51e937e247abeb9aa40cf75 100644
--- a/docs/api/a-d/full-screen-video.md
+++ b/docs/api/a-d/full-screen-video.md
@@ -50,92 +50,75 @@ uni.createFullScreenVideoAd(Object)
示例代码
-```
+```html
-
-
-
-
-
+
+
+
-
-
```
diff --git a/docs/api/a-d/interstitial.md b/docs/api/a-d/interstitial.md
index 87ed5df02959190eaf4adee9c9468cb472383058..18bd0a3534ffab47ec9be433e1d2d817a9c60eb4 100644
--- a/docs/api/a-d/interstitial.md
+++ b/docs/api/a-d/interstitial.md
@@ -1,31 +1,153 @@
### 插屏广告
-插屏广告组件。插屏广告组件是一个原生组件,层级比普通组件高。插屏广告组件每次创建都会返回一个全新的实例,默认是隐藏的,需要调用 InterstitialAd.show() 将其显示。
+插屏广告组件是由客户端原生的图片、文本、视频控件组成的;插屏广告与信息流或横幅广告相比展现尺寸更大,同样能够满足您对大量曝光和用户转化的需求。
+
+![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a90b5f95-90ba-4d30-a6a7-cd4d057327db/5dc1ce6b-b786-4175-aec5-dd2ab4a5e34c.png)
**平台差异说明**
|App|H5|微信小程序|支付宝小程序|百度小程序|字节跳动小程序|QQ小程序|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
-|x|x|√|x|x|x|x|
-
-uni.createInterstitialAd(Object object)
+|App 3.1.10+|x|√|x|x|x|√|
-|属性|类型|必填|说明|
-|:-:|:-:|:-:|:-:|
-|adUnitId|string|是|广告单元 id,微信小程序2.6.0+|
+- app端的广告源由腾讯优量汇、头条穿山甲、快手等广告联盟提供,DCloud负责聚合
+- 小程序端的广告由小程序平台提供
+**开通配置广告**
-#### 方法
+开通广告步骤:
+1. 开通广告
+需在广告平台后台操作:
+ * App平台:[https://uniad.dcloud.net.cn/](https://uniad.dcloud.net.cn/)
+ * 小程序平台:在各自的小程序管理后台操作。
+2. 申请广告位id
+在各位后台申请广告位id
+3. App端打包后生效,打包时必须选择要集成的广告SDK(优量汇、穿山甲)。
+
+### 语法
+
+`uni.createInterstitialAd(options)`
+
+### 参数说明
+
+`options` 为 object 类型,属性如下:
+
+|属性名 |类型 |必填 |描述 |最低支持版本 |
+|:-:|:-:|:-:|:-:|:-:|
+|adpid |string | 是|广告位 id |App 3.1.10+|
+|adUnitId |string | 是|广告位 id |微信小程序2.6.0+, QQ0.1.26+|
+
+
+HBuilder 基座的测试广告位 `adpid` 为 `1111111113`
+
+
+### 广告创建
+
+插屏广告组件默认是隐藏的,因此可以提前创建,以提前初始化组件。开发者可以在页面的 onReady 事件回调中创建广告实例,并在该页面的生命周期内重复调用该广告实例。
+
+
+### 显示/隐藏
+
+插屏广告组件默认是隐藏的,开发者需要调用 InterstitialAd.show() 进行显示。如果广告拉取失败或触发频率限制,InterstitialAd.show() 方法会返回一个rejected Promise,开发者可自行监听错误信息
+
+```js
+interstitialAd.show().catch((err) => {
+ console.error(err)
+})
+```
+
+用户可以主动关闭插屏广告。开发者不可控制插屏广告组件的隐藏。
+
+
+### 监听用户关闭广告
+
+如果广告被关闭,通过 InterstitialAd.onClose() 注册的回调函数会执行,回调函数没有参数传递。
+
+```js
+interstitialAd.onClose(res => {
+ console.log('插屏 广告关闭')
+})
+```
+
+
+示例代码
+
+```html
+
+
+
+
+
+
+
+
+
+```
-`Promise InterstitialAd.show()`
-
-显示插屏广告。
+#### 方法
`Promise InterstitialAd.load()`
加载插屏广告。
+`Promise InterstitialAd.show()`
+
+显示插屏广告。
+
`InterstitialAd.destroy()`
销毁插屏广告实例。
@@ -53,3 +175,8 @@ uni.createInterstitialAd(Object object)
`InterstitialAd.offClose(function callback)`
取消监听插屏广告关闭事件
+
+
+### 注意事项
+
+在插屏广告展示过程中如果快速切换页面,可能会出现插屏广告展示在非调用页面的情况,如有需要请在页面切换完成后进行插屏广告展示。
diff --git a/docs/api/a-d/rewarded-video.md b/docs/api/a-d/rewarded-video.md
index e705763d8762905aee8f23770be22656c9b25128..2fed9eb2cab16dec58c7d58dc00023096915cd01 100644
--- a/docs/api/a-d/rewarded-video.md
+++ b/docs/api/a-d/rewarded-video.md
@@ -124,28 +124,61 @@ options 为 object 类型,属性如下:
推荐使用此方案
```html
+
+
+
+
+
+
+
+
```
```js
// ad.js
+const ADType = {
+ RewardedVideo: "RewardedVideo",
+ FullScreenVideo: "FullScreenVideo"
+}
+
class AdHelper {
constructor() {
this._ads = {}
}
- load(adpid, onload, onerror) {
+ load(options, onload, onerror) {
+ let ops = this._fixOldOptions(options)
+ let {
+ adpid
+ } = ops
+
if (!adpid || this.isBusy(adpid)) {
return
}
- this.get(adpid).load(onload, onerror)
+ this.get(ops).load(onload, onerror)
}
- show(adpid, onsuccess, onfail) {
+ show(options, onsuccess, onfail) {
+ let ops = this._fixOldOptions(options)
+ let {
+ adpid
+ } = ops
+
if (!adpid) {
return
}
@@ -189,7 +238,7 @@ class AdHelper {
mask: true
})
- var ad = this.get(adpid)
+ var ad = this.get(ops)
ad.load(() => {
uni.hideLoading()
@@ -206,23 +255,37 @@ class AdHelper {
return (this._ads[adpid] && this._ads[adpid].isLoading)
}
- get(adpid) {
+ get(options) {
+ const {
+ adpid
+ } = options
if (!this._ads[adpid]) {
- this._ads[adpid] = new RewardedVideo({
- adpid: adpid
- })
+ this._ads[adpid] = this._createAdInstance(options)
}
return this._ads[adpid]
}
-}
-const eventNames = [
- 'load',
- 'close',
- 'verify',
- 'error'
-]
+ _createAdInstance(options) {
+ const adType = options.adType || ADType.RewardedVideo
+ delete options.adType
+
+ let ad = null;
+ if (adType === ADType.RewardedVideo) {
+ ad = new RewardedVideo(options)
+ } else if (adType === ADType.FullScreenVideo) {
+ ad = new FullScreenVideo(options)
+ }
+
+ return ad
+ }
+
+ _fixOldOptions(options) {
+ return (typeof options === "string") ? {
+ adpid: options
+ } : options
+ }
+}
const EXPIRED_TIME = 1000 * 60 * 30
const ProviderType = {
@@ -232,8 +295,8 @@ const ProviderType = {
const RETRY_COUNT = 1
-class RewardedVideo {
- constructor(options = {}) {
+class AdBase {
+ constructor(adInstance, options = {}) {
this._isLoad = false
this._isLoading = false
this._lastLoadTime = 0
@@ -244,22 +307,22 @@ class RewardedVideo {
this._closeCallback = null
this._errorCallback = null
- const rewardAd = this._rewardAd = plus.ad.createRewardedVideoAd(options)
- rewardAd.onLoad((e) => {
+ const ad = this._ad = adInstance
+ ad.onLoad((e) => {
this._isLoading = false
this._isLoad = true
this._lastLoadTime = Date.now()
this.onLoad()
})
- rewardAd.onClose((e) => {
+ ad.onClose((e) => {
this._isLoad = false
this.onClose(e)
})
- rewardAd.onVerify((e) => {
+ ad.onVerify((e) => {
// e.isValid
})
- rewardAd.onError(({
+ ad.onError(({
code,
message
}) => {
@@ -294,7 +357,7 @@ class RewardedVideo {
}
getProvider() {
- return this._rewardAd.getProvider()
+ return this._ad.getProvider()
}
load(onload, onerror) {
@@ -333,7 +396,7 @@ class RewardedVideo {
return
}
- this._rewardAd.show()
+ this._ad.show()
}
onLoad(e) {
@@ -357,14 +420,26 @@ class RewardedVideo {
}
destroy() {
- this._rewardAd.destroy()
+ this._ad.destroy()
}
_loadAd() {
this._isLoad = false
this._isLoading = true
this._lastError = null
- this._rewardAd.load()
+ this._ad.load()
+ }
+}
+
+class RewardedVideo extends AdBase {
+ constructor(options = {}) {
+ super(plus.ad.createRewardedVideoAd(options), options)
+ }
+}
+
+class FullScreenVideo extends AdBase {
+ constructor(options = {}) {
+ super(plus.ad.createFullScreenVideoAd(options), options)
}
}
diff --git a/docs/api/interceptor.md b/docs/api/interceptor.md
new file mode 100644
index 0000000000000000000000000000000000000000..df9d906332ba63de6d640ffa0c9ddd888ae56cae
--- /dev/null
+++ b/docs/api/interceptor.md
@@ -0,0 +1,62 @@
+### uni.addInterceptor(STRING, OBJECT)
+添加拦截器
+
+**STRING 参数说明**
+
+需要拦截的`api`名称,如:`uni.addInterceptor('request', OBJECT)` ,将拦截 `uni.request()`
+
+**OBJECT 参数说明**
+
+|参数名 |类型 |必填 |默认值 |说明 |平台差异说明 |
+|:- |:- |:- |:- |:- |:- |
+|invoke |Function |否 | |拦截前触发 | |
+|success |Function |否 | |成功回调拦截 | |
+|fail |Function |否 | |失败回调拦截 | |
+|complete |Function |否 | |完成回调拦截 | |
+
+
+**示例**
+
+```javascript
+uni.request({
+ url: 'request/login', //仅为示例,并非真实接口地址。
+ success: (res) => {
+ console.log(res.data);
+ // 打印: {code:1,...}
+ }
+});
+
+
+uni.addInterceptor('request', {
+ invoke(args) {
+ // request 触发前拼接 url
+ args.url = 'https://www.example.com/'+args.url
+ },
+ success(args) {
+ // 请求成功后,修改code值为1
+ args.data.code = 1
+ },
+ fail(err) {
+ console.log('interceptor-fail',err)
+ },
+ complete(res) {
+ console.log('interceptor-complete',res)
+ }
+})
+
+```
+
+### uni.removeInterceptor(STRING)
+删除拦截器
+
+**STRING 参数说明**
+
+需要删除拦截器的`api`名称
+
+**示例**
+
+```javascript
+
+uni.removeInterceptor('request')
+
+```
\ No newline at end of file
diff --git a/docs/api/media/background-audio-manager.md b/docs/api/media/background-audio-manager.md
index 994bedecc9f84d56ec2b7ff2298ce4e610e4a395..f48502701dbc668ca8f96eb1eb29e413c4169b66 100644
--- a/docs/api/media/background-audio-manager.md
+++ b/docs/api/media/background-audio-manager.md
@@ -62,7 +62,7 @@ const bgAudioMannager = uni.getBackgroundAudioManager();
bgAudioMannager.title = '致爱丽丝';
bgAudioMannager.singer = '暂无';
bgAudioMannager.coverImgUrl = 'https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/7fbf26a0-4f4a-11eb-b680-7980c8a877b8.png';
-bgAudioMannager.src = '1. https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-hello-uniapp/2cc220e0-c27a-11ea-9dfb-6da8e309e0d8.mp3';
+bgAudioMannager.src = 'https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-hello-uniapp/2cc220e0-c27a-11ea-9dfb-6da8e309e0d8.mp3';
```
diff --git a/docs/api/media/file.md b/docs/api/media/file.md
index ed7fc5d95bc8b9c9b5f76c0767774b58c80b614f..5f3c3d0c61f126e47f1385cc66fa3dcf3e4dc31d 100644
--- a/docs/api/media/file.md
+++ b/docs/api/media/file.md
@@ -20,7 +20,7 @@
|参数名|类型|默认值|必填|说明|平台差异说明|
|:-|:-|:-|:-|:-|:-|
-|count|Number|100|否|最多可以选择的图片张数|见下方说明|
+|count|Number|100|否|最多可以选择的文件数量|见下方说明|
|type|String|'all'|否|所选的文件的类型|见下方说明|
|extension|Array<String>||否|根据文件拓展名过滤,每一项都不能是空字符串。默认不过滤。|见下方说明|
|sourceType|Array<String>|['album','camera']|否|(仅在type为`image`或`video`时可用)`album` 从相册选图,`camera` 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项||
@@ -54,8 +54,8 @@
|参数|类型|说明|
|:-|:-|:-|
-|tempFilePaths|Array<String>|图片的本地文件路径列表|
-|tempFiles|Array<Object>、Array<File>|图片的本地文件列表,每一项是一个 File 对象|
+|tempFilePaths|Array<String>|文件的本地文件路径列表|
+|tempFiles|Array<Object>、Array<File>|文件的本地文件列表,每一项是一个 File 对象|
**File 对象结构如下**
diff --git a/docs/api/plugins/share.md b/docs/api/plugins/share.md
index cd18b07e72bdab7e030f589bc6fd8754581d8863..78f810f904b4ca619b7e2cb9588a598bccc80539 100644
--- a/docs/api/plugins/share.md
+++ b/docs/api/plugins/share.md
@@ -5,7 +5,8 @@
1. 使用 ``uni.share`` API方式调用社交sdk分享
2. 使用[plus.share.sendWithSystem](http://www.html5plus.org/doc/zh_cn/share.html#plus.share.sendWithSystem)呼起手机os的系统分享菜单
- 小程序:不支持API调用,只能用户主动点击触发分享。可使用自定义按钮方式 <button open-type="share"> 或监听系统右上角的分享按钮 onShareAppMessage 进行自定义分享内容
-- H5:如果是普通浏览器,浏览器自带分享按钮;如果是在微信内嵌浏览器中,可调用js-sdk进行分享,[参考](https://ask.dcloud.net.cn/article/35380)|
+- H5:如果是普通浏览器,浏览器自带分享按钮;如果是在微信内嵌浏览器中,可调用js-sdk进行分享,[参考](https://ask.dcloud.net.cn/article/35380)
+- APP:可以直接使用已经封装好的uni-share插件[详情](https://ext.dcloud.net.cn/plugin?id=4860)
### uni.share(OBJECT)
uni-app的App引擎已经封装了微信、QQ、微博的分享SDK,开发者可以直接调用相关功能。
@@ -350,7 +351,7 @@ App端可调用手机的系统分享,实现所有注册分享的应用的呼
小程序中用户点击分享后,在 js 中定义 onShareAppMessage 处理函数(和 onLoad 等生命周期函数同级),设置该页面的分享信息。
-* 用户点击分享按钮的时候会调用。这个分享按钮可能是小程序右上角原生菜单自带的分享按钮,也可能是开发者在页面中放置的分享按钮(\
+**小米:** 米家App内米家智能厨房页面,[App内H5](https://g.home.mi.com/partner/nfc/prod/index.html?m=chunmi.ihcooker.slim#/);lbs门店微信群:[微信H5](http://s1.mi.com/m/wx/lbs/#/)
+
+**携程微商城:** [微信H5](https://m.ctrip.com/webapp/hotelofficial/?#/)
+
**搜狐狐友圈:**微信、支付宝、百度、头条小程序均支持。
**中华英才网:** 百度小程序搜索“中华英才网”
@@ -255,7 +269,7 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**开源中国:** 微信小程序搜索“osc+”、百度小程序搜索“开源中国社区”
-**网易藏宝阁:** 部分栏目使用uni小程序sdk实现。[App下载](https://cbg.163.com/app/)
+**网易藏宝阁:** [uni小程序SDK](https://nativesupport.dcloud.net.cn)案例,部分栏目做成小程序形态。[App下载](https://cbg.163.com/app/)
**联想集团官方小程序:** 微信小程序搜索 “联想集团”
@@ -265,6 +279,23 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**西祠胡同:** [App官网扫码下载](https://www.xici.net/)、[H5](https://3g.xici.net/)
+**极米:** [极米官方app](https://sj.qq.com/myapp/detail.htm?apkName=com.xgimi.zhushou&info=FB45015C23ACF368D22855D6C4964312)、[官网H5版](https://m.xgimi.com/)、微信小程序搜索“极米官方商城”、微信小程序搜索“极米care+”售后服务宣传
+
+**货拉拉:** App部分栏目使用uni小程序sdk。
+
+**叮咚买菜:** 微信小程序搜索 “叮咚买菜”、[公众号H5](http://wx.m.ddxq.mobi/#/)
+
+**百度:** 众测平台用户反馈系统,[H5](http://fans.baidu.com/fanstest/wapindex?product_id=1009&version=3.2.9&client_type=iOS&contact_way=qq)
+
+**新浪健康:** 病情咨询,[H5](https://health.sina.cn/patient_consult_h5/)
+
+**爱奇艺:** i联盟,[H5](https://vip.iqiyi.com/html5VIP/activity/person-union/#/)
+
+**智联招聘:** WeTalk智能问答系统,[H5](https://special.zhaopin.com/h5/2020/sh/dhzc061717/)
+
+**金山:** WPS智能PPT,[H5](https://aippt.wps.cn/m/)
+
+
#### SaaS服务商
@@ -295,6 +326,8 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**广东汕头公交:** 广东移动出品。[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.gmcc.stgj)、[iOS](https://apps.apple.com/cn/app/%E6%B1%95%E5%A4%B4%E5%85%AC%E4%BA%A4/id1091442840)、微信小程序搜索“汕头智慧公交”
+**中国电信189福利站:** [App内福利站页面](https://www.189.cn/client/actcenter/signActivityH5/welfare2/index1.html#/)
+
**广东联通粉丝卡:**[H5(特定UA)](https://wxv.gd10010.cn/)
**云南移动微店系统:**[H5](http://wx.10086.cn/yunnan/qrcodeyn/uniapph5/h5/index.html)
@@ -334,7 +367,7 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**苍南农商银行** 丰收联盟。[H5](https://wxmapp.zjcnbank.com/)
-**平安集团:**金管家多个页面,[H5](https://laip-gbr-pai.pingan.com/static/goodStart/#/)
+**平安集团:** 智慧医疗慢病管理,[H5](https://hm.city.pingan.com/h5/);金管家多个页面,[H5](https://laip-gbr-pai.pingan.com/static/goodStart/#/);口袋合伙人,[H5](https://b.pingan.com.cn/mkt/youhui/2012/kdhhrzhjh/#/package-act21/pages/act-zhlx/index);易骑行,[H5](https://ebs.yun.city.pingan.com/pc/mini/#/)
**拉卡拉收款宝:** App部分页面使用uni-app制作
@@ -370,10 +403,14 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
+**粤苗:** 广东省疾病预防控制中心疫苗预约管理 [官网app下载](http://cdcp.gd.gov.cn/ggwsfwxx/content/post_3146600.html)
+
**广东省工会:**粤工惠,广东工友服务App,[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.gdftu.ygh)、[iOS](https://apps.apple.com/cn/app/id1464193434) 、微信小程序搜索“粤工惠”
**广东省广州民政局:**[微信H5](https://wxpt.gzmz.gov.cn/ydzw-wx/#/pagesA/login/index)
+**广东省共青团:** [12355.net](https://12355.net)
+
**广州市公安局南沙区分局:** 微警[微信H5](https://ns.weijing.gov.cn/wechat-app/)
**广州市南沙区企业综合服务平台:**[H5](https://qiye.gzns.gov.cn/m/#/)
@@ -500,27 +537,36 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**五粮液:** 内部管理系统
-#### html5游戏
+**全家超市** App部分页面使用uni-app制作
+
+#### 游戏
**信任的进化:** 曾Taptap首页推荐的益智小游戏。[Android](http://sj.qq.com/myapp/detail.htm?apkName=com.xuangames.xrdjh)、[iOS](https://itunes.apple.com/cn/app/%E4%BF%A1%E4%BB%BB%E7%9A%84%E8%BF%9B%E5%8C%96-%E5%90%88%E4%BD%9C%E8%87%AA%E7%A7%81%E7%9A%84%E5%9F%BA%E5%9B%A0/id1290206167?mt=8)
**出发吧!冒险家:** 曾Taptap首页推荐的冒险游戏。[Android](https://www.seagame.com/mxj/android1.apk)、[iOS](https://apps.apple.com/cn/app/id1367825240)
+**萌猫合成:** 网赚类合成游戏 [App](https://ext.dcloud.net.cn/plugin?id=4095)
+
+**有奖猜歌:** 猜歌有奖,激励视频变现 [App](https://ext.dcloud.net.cn/plugin?id=4826)
+
#### 创业公司
**Crimaster犯罪大师:**火爆的全球推理侦探专属社区。[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.ultron.crimaster)、[iOS](https://apps.apple.com/cn/app/crimaster%E7%8A%AF%E7%BD%AA%E5%A4%A7%E5%B8%88/id1501701702)
+**宝贝听听:** 腾讯投资的创业公司,中国最大的儿童有声早教平台。[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.kunpeng.babyting&info=A20D77EAD610031E8F8C6D1A16135ADD)、[iOS](https://apps.apple.com/cn/app/%E5%AE%9D%E8%B4%9D%E5%90%AC%E5%90%AC%E6%95%85%E4%BA%8B%E4%B9%A6-%E5%84%BF%E7%AB%A5%E7%9D%A1%E5%89%8D%E6%95%85%E4%BA%8B%E5%84%BF%E6%AD%8C%E5%A4%A7%E5%85%A8/id480111612)、微信小程序搜索“宝贝听听”
+
+**本地宝:** 本地宝(bendibao.com)是领先的便民信息服务平台。[官网App下载](http://www.bendibao.com/app/pc.html)、微信小程序搜索“本地宝”
+
+**不同:** 社交App,遇见价值观相同的知己。nvue优秀体验。[Android](https://a.app.qq.com/o/simple.jsp?pkgname=com.butongapp.butong)、[iOS](https://apps.apple.com/cn/app/%E4%B8%8D%E5%90%8C-%E4%BB%B7%E5%80%BC%E8%A7%82%E7%A4%BE%E5%8C%BA/id1476537831
+)
+
**仓鼠团:** 囤好货到仓鼠,仓鼠团您身边的购物助手。[App通用链接](http://m3w.cn/cst)
**安咕在家早教:**0-6岁宝宝能力跟踪发展工具,[iOS](https://itunes.apple.com/cn/app/%E5%AE%89%E5%92%95%E5%9C%A8%E5%AE%B6%E6%97%A9%E6%95%99/id1455168710?mt=8)、[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.angubaby.earlyeduhome)、微信小程序搜索“安咕在家早教”。
**批改网(5+App):**智能批改,辅助英文教与学,[Android](http://sj.qq.com/myapp/detail.htm?apkName=org.pigai.allround)、[iOS](https://itunes.apple.com/cn/app/id1158628103)
-
-**新疆包邮:**新疆网民的专属导购APP。[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.h5415379.wux)、[iOS](https://apps.apple.com/cn/app/%E6%96%B0%E7%96%86%E5%8C%85%E9%82%AE/id1433935701)
**蓝鲸鱼旧物回收:** 微信、支付宝搜索“蓝鲸鱼旧物回收”
@@ -532,8 +578,6 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**易学啦:**易学啦致力于为中学生提供免费的学习资料和更科学的学习方法和技巧。[App码](//m3w.cn/__uni__4af5e77)
-**小情绪:**一款随时随地分享您的心情及图片的应用。[App和小程序通用码](//m3w.cn/__uni__2d73605)
-
**纸塘日记:**一款简约的记录生活的应用。[App码和小程序通用码](//m3w.cn/__uni__55a7b4e)
**指掌短信:**App、小程序、电脑版,全平台发送短信(小程序搜“指掌短信”),**
开发者致DCloud的感谢信**。[App及H5的通用链接](//m3w.cn/__uni__7ffa4e9)
@@ -546,9 +590,15 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**壹恒出行:**共享汽车,APP内线上找到距离你最近的网点或汽车,[iOS](https://itunes.apple.com/cn/app/%E5%A3%B9%E6%81%92%E5%87%BA%E8%A1%8C/id1455172086?mt=8)、[Android](http://appstore.huawei.com/app/C100659807)
-**肆台:**看见世界,让世界看见(使用 nvue 实现的新闻 App)。[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.sitai.zlstyle)
+**律师来电:** 专业法律咨询,[H5](https://www.lvshilaidian.com)
+
+**魔叮:** 建筑制图众包平台,[H5](https://www.emoding.com)
+
+**就爱肚皮舞** 肚皮舞专业社区,[Android及iOS](http://www.92dpw.com/m.php?module=down)
+
+**新疆包邮:**新疆网民的专属导购APP。[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.h5415379.wux)、[iOS](https://apps.apple.com/cn/app/%E6%96%B0%E7%96%86%E5%8C%85%E9%82%AE/id1433935701)
-**萤火e券:**一个会省钱的购物app。[Android](http://m3w.cn/yheq)
+**萤火e券:**一个会省钱的购物app。[App、H5、小程序通用链接](http://m3w.cn/yheq)
**卷优网:**淘宝天猫优惠券,千万别错过。[Android](http://m3w.cn/jyw)
@@ -558,10 +608,6 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**蚂蚁宝充电:**海德龙新能源充电桩服务。使用微信或App扫码,均能快速充电。微信小程序搜索“蚂蚁宝充电”。
-**云省购:**导购App,集淘宝、天猫、京东等电商购物平台的优惠信息,让用户花更少的钱买同样的商品。[Android及H5](http://m3w.cn/yunshenggou)
-
-**品聚:**以艺术品为主体的高品质综合性交易平台,[Android和iOS](http://ibuying.com/download)。
-
**寻寓租房:**一个便捷省事的租房APP,[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.xunyu.io)。
**优十美:**会员尊享vip一卡通,[Android](https://android.myapp.com/myapp/detail.htm?apkName=com.youmeimall.youmeimall)、微信小程序搜索“优十美”。
@@ -584,8 +630,6 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**转门面网:**出租转让招商、开店选址、经营策略首选转门面网。[iOS、Android统一发布页](http://m3w.cn/zmmw)
-**品沉浮 • 醉一生:**评鉴好茶,[H5](https://tea.skycto.com)。
-
**闪招:**主推校园应届毕业生就业和为用人单位提供就业人才,[Android](http://appstore.huawei.com/app/C100671609)。
**晴空万里:**天气实时预报,精简小巧。[Android](https://m3w.cn/qkwl)
@@ -594,12 +638,6 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**大象优车:**为车商创造价值。[iOS](https://apps.apple.com/cn/app/%E5%A4%A7%E8%B1%A1%E4%BC%98%E8%BD%A6-%E4%B8%BA%E8%BD%A6%E5%95%86%E5%88%9B%E9%80%A0%E4%BB%B7%E5%80%BC/id1461035002)、[Android](http://a.app.qq.com/o/simple.jsp?pkgname=com.daxiangauto.apps)
-**律师来电:** 专业法律咨询,[H5](https://www.lvshilaidian.com)
-
-**魔叮:** 建筑制图众包平台,[H5](https://www.emoding.com)
-
-**就爱肚皮舞** 肚皮舞专业社区,[Android及iOS](http://www.92dpw.com/m.php?module=down)
-
**优加:** 微商分销,[Android](http://a.app.qq.com/o/simple.jsp?pkgname=com.king.youplus)
**看书阅读神器:**[H5](https://book.yw98.com/h5/#/)
@@ -642,8 +680,6 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**拾阅草堂:**网络小说。[微信小程序码](https://user-images.githubusercontent.com/12842804/61346867-371ccc00-a88d-11e9-8386-18e27677869c.png)
-**千家找房:**二手房、新房买卖租赁平台。各大应用商城搜索“千家找房”下载APP、[H5](https://m.allqj.com)、[微信小程序二维码](https://user-images.githubusercontent.com/31872878/62843602-a3081e00-bced-11e9-8a2d-3f997be6cacf.png)
-
**坤典智慧农场:**体验农村种植、养殖的生活,足不出户就可以租地种植自己的蔬菜了,养殖鸡鸭牛羊,通过视频远程查看。[iOS码](https://user-images.githubusercontent.com/29654065/63156422-3cfdfc80-c047-11e9-8c41-23d298279466.jpg)、[Android码](https://user-images.githubusercontent.com/29654065/63156422-3cfdfc80-c047-11e9-8c41-23d298279466.jpg)、[微信小程序码](https://user-images.githubusercontent.com/29654065/63156422-3cfdfc80-c047-11e9-8c41-23d298279466.jpg)、[H5码](https://user-images.githubusercontent.com/29654065/63156422-3cfdfc80-c047-11e9-8c41-23d298279466.jpg)
**指动全城:**一个为宝宝选择好产品的线上渠道。[App和小程序通用链接](https://m3w.cn/__uni__6020544)
@@ -654,8 +690,6 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
**斗豆侠:**购物App。[iOS](https://apps.apple.com/cn/app/id1395120441)、[Android](https://obs.myhwclouds.com/vipbean/xgyx_guns/APK/yq.apk)
-**RUCY:**衣着搭配。[Android](https://appstore.huawei.com/app/C101136185)、[iOS](https://apps.apple.com/cn/app/rucy/id1479275199)
-
**BookChat:**通用电子书应用。[iOS](https://apps.apple.com/cn/app/id1481932361)、[Android](https://www.pgyer.com/bookchat-app)
**稀饭旅行小程序:**微信、百度搜索 稀饭旅行
diff --git a/docs/collocation/_sidebar.md b/docs/collocation/_sidebar.md
index 0206f7ee2af990d4496ffde5df53b223aab63534..566ef20dae84adbf3e3b8c15b3f1bac72b509bbc 100644
--- a/docs/collocation/_sidebar.md
+++ b/docs/collocation/_sidebar.md
@@ -54,7 +54,7 @@
官方QQ交流群
-
+
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -63,10 +63,10 @@
群30:371046920(2000人已满)
群29:202965481(2000人已满)
群28:166188776(2000人已满)
-
群27:811363410(2000人已满)
+
群26:147867597(2000人已满)
群25:165297000(2000人已满)
-
+
群24:672494800(2000人已满)
群23:599958679(2000人已满)
群22:687186952(2000人已满)
群21:717019120(2000人已满)
diff --git a/docs/collocation/pages.md b/docs/collocation/pages.md
index 7541e82adff554ec7696e16a1d898a5e282849eb..11f22d1ac7082d6984b3763b858f1256a0e47872 100644
--- a/docs/collocation/pages.md
+++ b/docs/collocation/pages.md
@@ -416,7 +416,7 @@ uni-app 2.9+ 新增 leftWindow, topWindow, rightWindow 配置。用于解决宽
|homeButton|Boolean|false|标题栏控件是否显示Home按钮||
|autoBackButton|Boolean|true|标题栏控件是否显示左侧返回按钮|2.6.3|
|backButton|Object||返回按钮的样式,详见:[backButton](/collocation/pages?id=app-titleNView-backButtonStyles)|2.6.3|
-|backgroundImage|String||支持以下类型: 背景图片路径 - 如"./img/t.png",仅支持本地文件路径, 相对路径,相对于当前页面的host位置,根据实际标题栏宽高拉伸绘制; 渐变色 - 仅支持线性渐变,两种颜色的渐变,如“linear-gradient(to top, #a80077, #66ff00)”, 其中第一个参数为渐变方向,可取值: "to right"表示从左向右渐变, “to left"表示从右向左渐变, “to bottom"表示从上到下渐变, “to top"表示从下到上渐变, “to bottom right"表示从左上角到右下角, “to top left"表示从右下角到左上角|2.6.3|
+|backgroundImage|String||支持以下类型: 背景图片路径 - 如"/static/img.png",仅支持本地文件绝对路径,根据实际标题栏宽高拉伸绘制; 渐变色 - 仅支持线性渐变,两种颜色的渐变,如“linear-gradient(to top, #a80077, #66ff00)”, 其中第一个参数为渐变方向,可取值: "to right"表示从左向右渐变, “to left"表示从右向左渐变, “to bottom"表示从上到下渐变, “to top"表示从下到上渐变, “to bottom right"表示从左上角到右下角, “to top left"表示从右下角到左上角|2.6.3|
|backgroundRepeat|String||仅在backgroundImage设置为图片路径时有效。 可取值: "repeat" - 背景图片在垂直方向和水平方向平铺; "repeat-x" - 背景图片在水平方向平铺,垂直方向拉伸; “repeat-y” - 背景图片在垂直方向平铺,水平方向拉伸; “no-repeat” - 背景图片在垂直方向和水平方向都拉伸。 默认使用 “no-repeat"|2.6.3|
|titleAlign|String|"auto"|可取值: "center"-居中对齐; "left"-居左对齐; "auto"-根据平台自动选择(Android平台居左对齐,iOS平台居中对齐)|2.6.3|
|blurEffect|String|"none"|此效果将会高斯模糊显示标题栏后的内容,仅在type为"transparent"或"float"时有效。 可取值: "dark" - 暗风格模糊,对应iOS原生UIBlurEffectStyleDark效果; "extralight" - 高亮风格模糊,对应iOS原生UIBlurEffectStyleExtraLight效果; "light" - 亮风格模糊,对应iOS原生UIBlurEffectStyleLight效果; "none" - 无模糊效果。 注意:使用模糊效果时应避免设置背景颜色,设置背景颜色可能覆盖模糊效果。|2.4.3|
diff --git a/docs/component/_sidebar.md b/docs/component/_sidebar.md
index 1f8bdd2ce8befb9c1eba163a36cf44ec06599f88..b854f1c85b8bd0136525069fc9e701595859dd94 100644
--- a/docs/component/_sidebar.md
+++ b/docs/component/_sidebar.md
@@ -1,4 +1,5 @@
* [组件概述](component/)
+* [vue组件](component/vue-component.md)
* 视图容器
* [view](component/view.md)
* [scroll-view](component/scroll-view.md)
@@ -44,6 +45,7 @@
* 广告
* [ad](component/ad.md)
* [ad-draw](component/ad-draw.md)
+ * [Grid 广告](component/ad-grid.md)
* 页面属性配置节点
* [page-meta](component/page-meta.md)
* [navigation-bar](component/navigation-bar.md)
@@ -144,7 +146,7 @@
官方QQ交流群
-
+
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -153,10 +155,10 @@
群30:371046920(2000人已满)
群29:202965481(2000人已满)
群28:166188776(2000人已满)
-
群27:811363410(2000人已满)
+
群26:147867597(2000人已满)
群25:165297000(2000人已满)
-
+
群24:672494800(2000人已满)
群23:599958679(2000人已满)
群22:687186952(2000人已满)
群21:717019120(2000人已满)
diff --git a/docs/component/ad-grid.md b/docs/component/ad-grid.md
new file mode 100644
index 0000000000000000000000000000000000000000..9d0957e771bd15127cdf67b9e857bd7e5d11a8e9
--- /dev/null
+++ b/docs/component/ad-grid.md
@@ -0,0 +1,117 @@
+## Grid 广告
+
+### 简介
+
+开发者可以使用 ad 组件创建 Grid 广告组件,Grid 广告组件在创建后会自动拉取广告数据并显示。
+
+**平台差异说明**
+
+|App|H5|微信小程序|支付宝小程序|百度小程序|字节跳动小程序|QQ小程序|快应用|360小程序|
+|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
+|x|x|√|x|x|x|x|x|x|
+
+
+**开通配置广告**
+
+开通广告步骤:
+1. 开通广告
+需在广告平台后台操作:
+ * App平台:[https://uniad.dcloud.net.cn/](https://uniad.dcloud.net.cn/)
+ * 小程序平台:在各自的小程序管理后台操作。
+2. 申请广告位id
+在各位后台申请广告位id
+3. 在页面合适位置编写代码,放置ad组件,配上广告位id(app是adpid,微信、头条、qq小程序是unit-id,百度小程序是apid)
+4. App端打包后生效,打包时必须选择要集成的广告SDK(穿山甲、广点通、360联盟、快手)。
+
+**属性说明**
+
+|属性名|类型|默认值|说明|平台差异|
+|:-|:-|:-|:-|:-|
+|unit-id|String||广告单元id,可在小程序管理后台的流量主模块新建|微信小程序|
+|ad-type|String|grid||微信小程序|
+|@load|EventHandle||广告加载成功的回调||
+|@error|EventHandle||广告加载失败的回调||
+|@close|EventHandle||广告关闭的回调||
+
+### 广告尺寸设置
+
+Grid 广告不允许直接设置样式属性,默认宽度为100%(width: 100%),高度会自动等比例计算,因此开发者可以设置广告外层组件的宽度调整广告的尺寸。格子广告有最小尺寸限制,5个的形态为331px,8个的形态为294px。
+
+```html
+
+
+
+```
+
+```css
+
+```
\ No newline at end of file
diff --git a/docs/uniCloud/hellodb.md b/docs/uniCloud/hellodb.md
index 9fc1a9ec5e02bceafe4c3eeed3dc01cd724b81f2..953e0c967d1fcdcae32d767df2af08e620654fbd 100644
--- a/docs/uniCloud/hellodb.md
+++ b/docs/uniCloud/hellodb.md
@@ -23,7 +23,7 @@
上述数据中,每行数据表示一个用户的信息,被称之为“记录(record/doc)”。name和tel称之为“字段(field)”。而“13900000000”则是第一条记录的字段tel的值。
-每个记录,都是一个完整的json文档,获取到记录后可以使用常规json方式操作。但集合并非json文档,集合是多个json文档的汇总,获取集合需要使用专门的API。
+每行记录,都是一个完整的json文档,获取到记录后可以使用常规json方式操作。但集合并非json文档,集合是多个json文档的汇总,获取集合需要使用专门的API。
与关系型数据库的二维表格式不同,json文档数据库支持不同记录拥有不同的字段、支持多层嵌套数据。
@@ -47,6 +47,8 @@ _此处仅为举例,实际业务中,登录日志单独存放在另一个集
对于初学者,如果不了解数据库设计,可以参考[opendb](https://gitee.com/dcloud/opendb),已经预置了大量常见的数据库设计。
+对于不熟悉传统数据库,但掌握json的js工程师而言,uniCloud的云数据库更亲切,没有传统数据库高昂的学习成本。
+
在uniCloud web控制台新建表时,在下面的模板中也可以选择各种`opendb`表模板,直接创建。
**字段的值,支持以下类型:**
@@ -64,6 +66,8 @@ _此处仅为举例,实际业务中,登录日志单独存放在另一个集
* Date:时间
* Null:相当于一个占位符,表示一个字段存在但是值为空。
+DB Schema中还扩展了其他字段类型,但其实都是基本类型的扩展,比如file类型其实是一种特殊的object,而password类型是一种特殊的string类型。
+
uniCloud同时支持阿里云和腾讯云,它们的数据库大体相同,有细微差异。阿里云的数据库是mongoDB4.0,腾讯云则使用自研的文档型数据库(兼容mongoDB 4.0版本)。uniCloud基本抹平了不同云厂商的差异,有差异的部分会在文档中单独标注。
如果想在云函数连接其他数据库,如mysql/redis,用法和nodejs连接这些数据库是一样的。插件市场已经有人提供了插件,见下。但注意这些用法推荐用于数据导入,主业务开发不建议这么使用。因为其他服务器上的数据库和云函数环境物理上不在一起,连接会比较慢。
@@ -113,15 +117,15 @@ const db = uniCloud.database({
## 创建一个集合/数据表@createCollection
-新建的服务空间,没有一个集合。需要首先创建集合。
+新建的服务空间,没有数据表。需要首先创建集合/数据表。
-可以在uniCloud的web控制台([https://unicloud.dcloud.net.cn](https://unicloud.dcloud.net.cn))在web页面创建集合,也可以通过代码创建集合。
+可以在uniCloud的web控制台([https://unicloud.dcloud.net.cn](https://unicloud.dcloud.net.cn))在web页面创建数据表,也可以通过代码创建数据表。
-通过代码创建集合的方式,阿里云和腾讯云有差别:
+通过代码创建数据表的方式,阿里云和腾讯云有差别:
- 阿里云
-调用add方法,给某集合新增数据记录时,如果该集合不存在,会自动创建该集合。如下代码给table1集合新增了一条数据,如果table1不存在,会自动创建。
+调用add方法,给某数据表新增数据记录时,如果该数据表不存在,会自动创建该数据表。如下代码给table1数据表新增了一条数据,如果table1不存在,会自动创建。
```js
const db = uniCloud.database();
@@ -130,7 +134,7 @@ db.collection("table1").add({name: 'Ben'})
- 腾讯云
-腾讯云提供了专门的创建集合的API,此API仅支持云函数内运行,不支持clientDB调用。
+腾讯云提供了专门的创建数据表的API,此API仅支持云函数内运行,不支持clientDB调用。
```js
const db = uniCloud.database();
@@ -138,18 +142,18 @@ db.createCollection("table1")
```
**注意**
-* 如果集合已存在,腾讯云调用createCollection方法会报错
-* 腾讯云调用collection的add方法不会自动创建集合,不存在的集合会报错
+* 如果数据表已存在,腾讯云调用createCollection方法会报错
+* 腾讯云调用collection的add方法不会自动创建数据表,不存在的数据表会报错
* 阿里云没有createCollection方法
-## 集合的3个组成部分
+## 集合/数据表的3个组成部分
-每个集合,其实包含3个部分:
+每个数据表,其实包含3个部分:
- data:数据内容
-- index:数据库索引
+- index:索引
- schema:数据表格式定义
-在uniCloud的web控制台可以看到一个集合的3部分内容。
+在uniCloud的web控制台可以看到一个数据表的3部分内容。
### 数据内容@dbdata
@@ -157,63 +161,40 @@ data很简单,就是存放的数据记录(record)。
实际上,创建一条新记录,是不管在web控制台创建,还是通过API创建,每条记录都会自带一个`_id`字段用以作为该记录的唯一标志。
-`_id`字段是每个集合默认自带且不可删除的字段。同时,它也是集合的索引。
+`_id`字段是每个数据表默认自带且不可删除的字段。同时,它也是数据表的索引。
+
+`_id`长度是12位,它是自增的,后创建的记录的`_id`总是大于先生成的`_id`。传统数据库的自然数自增字段在多物理机的大型数据库下很难保持同步,大型数据库均使用`_id`这种长度较长、不会重复且仍然保持自增规律的方式。
### 数据库索引@dbindex
-所谓索引,是指在集合的众多字段中挑选一个或多个字段,让数据库引擎优先处理这些字段。设置为索引的字段,在通过该字段查询记录时可以获得更快的查询速度。
+所谓索引,是指在数据表的众多字段中挑选一个或多个字段,让数据库引擎优先处理这些字段。设置为索引的字段,在通过该字段查询记录时可以获得更快的查询速度。但设置过多索引也不合适,会造成数据新增和删除变慢。
-一个集合可以有多个字段被设为索引。
+一个数据表可以有多个字段被设为索引。
索引分唯一型和非唯一型。
-唯一型索引要求整个集合多个记录的该字段的值不能重复。比如`_id`就是唯一型索引。
+唯一型索引要求整个数据表多个记录的该字段的值不能重复。比如`_id`就是唯一型索引。
-假使有2个人都叫“张三”,那么他们在user集合里的区分就是依靠不同的`_id`来区分。
+假使有2个人都叫“张三”,那么他们在user数据表里的区分就是依靠不同的`_id`来区分。
如果我们要根据name字段来查询,为了提升查询速度,此时可以把name字段设为非唯一索引。
-还有“组合索引”的概念,可以把多个字段组合成一个“组合索引”。例如一个文章点赞记录明细表,设置文章id和用户id为组合索引,且将此组合索引设为唯一型索引,就可以限制同一用户对一篇文章多次点赞。
+索引内容较多,还有“组合索引”、“稀疏索引”、“地理位置索引”、“TTL索引”等概念。有单独的文档详细讲述索引,另见:[数据库索引](/uniCloud/db-index)
+
**在web控制台添加上述索引**
![](https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-dc-site/fca53140-1d91-11eb-880a-0db19f4f74bb.jpg)
-**在db_init.json内添加上述索引**
-
-```json
-{
- "opendb-news-article": {
- "data": [],
- "index":[{
- "IndexName": "user_article_", // 索引名称
- "MgoKeySchema": { // 索引规则
- "MgoIndexKeys": [{
- "Name": "user_id", // 索引字段
- "Direction": "1" // 索引方向,1:ASC-升序,-1:DESC-降序,2dsphere:地理位置
- },{
- "Name": "article_id", // 索引字段
- "Direction": "1" // 索引方向,1:ASC-升序,-1:DESC-降序,2dsphere:地理位置
- }],
- "MgoIsUnique": false // 索引是否唯一
- }
- }]
- }
-}
-```
-
**注意**
- 如果记录中已经存在多个记录某字段相同的情况,那么将该字段设为唯一型索引会失败。
- 如果已经设置某字段为唯一索引,在新增和修改记录时如果该字段的值之前在其他记录已存在,会失败。
-- 假如记录中不存在某个字段,则对索引字段来说其值默认为 null,如果该索引字段设为唯一型索引,则不允许存在两个或以上的该字段为null或不存在该字段的记录。
-
-#### 稀疏索引
+- 假如记录中不存在某个字段,则对索引字段来说其值默认为 null,如果该索引字段设为唯一型索引,则不允许存在两个或以上的该字段为null或不存在该字段的记录。此时需要设置稀疏索引来解决多个null重复的问题
-[文档已移至](uniCloud/db-index.md?id=sparse)
### 数据表格式定义@dbschema
-`DB Schema`是集合的表结构描述。描述集合有哪些字段、值域类型是什么、是否必填、数据操作权限等很多内容。
+`DB Schema`是集合的表结构描述。描述数据表有哪些字段、值域类型是什么、是否必填、数据操作权限等很多内容。
因为json文档数据库的灵活性,data数据的字段可以不在schema的描述范围内。
@@ -224,23 +205,23 @@ data很简单,就是存放的数据记录(record)。
## 获取集合/数据表对象
-创建好集合后,可以通过API获取集合对象。
+创建好数据表后,可以通过API获取数据表对象。
```js
const db = uniCloud.database();
-// 获取名为 `table1` 集合的引用
+// 获取名为 `table1` 数据表的引用
const collection = db.collection('table1');
```
-**集合 Collection 的方法**
+**集合/数据表 Collection 的方法**
-通过 `db.collection(name)` 可以获取指定集合的引用,在集合上可以进行以下操作
+通过 `db.collection(name)` 可以获取指定数据表的引用,在数据表上可以进行以下操作
| 类型 | 接口 | 说明 |
| -------- | ------- | ---------------------------------------------------------------------------------- |
| 写 | add | 新增记录(触发请求) |
| 计数 | count | 获取符合条件的记录条数 |
-| 读 | get | 获取集合中的记录,如果有使用 where 语句定义查询条件,则会返回匹配结果集 (触发请求) |
-| 引用 | doc | 获取对该集合中指定 id 的记录的引用 |
+| 读 | get | 获取数据表中的记录,如果有使用 where 语句定义查询条件,则会返回匹配结果集 (触发请求) |
+| 引用 | doc | 获取对该数据表中指定 id 的记录的引用 |
| 查询条件 | where | 通过指定条件筛选出匹配的记录,可搭配查询指令(eq, gt, in, ...)使用 |
| | skip | 跳过指定数量的文档,常用于分页,传入 offset。clientDB组件有封装好的更易用的分页,[另见](uniCloud/uni-clientdb-component) |
| | orderBy | 排序方式 |
@@ -284,7 +265,7 @@ uniCloud数据库提供了多种数据导入导出和备份方案。
- db_init.json位置由`cloudfunctions/db_init.json`移至`uniCloud/database/db_init.json`
- schema不再放在db_init.json内,每个表都有一个单独的schema文件,比如news表对应的schema为`uniCloud/database/news.schema.json`
- schema可以在`uniCloud/database`目录上右键创建
-- db_init.json文件右键初始化云数据库时依然会带上schema进行数据库的初始化,除schema外HBuilderX3.0.0以上版本使用db_init.json初始化数据库还会带上扩展校验函数,扩展校验函数位于`uniCloud/database/validateFunction`目录下,扩展校验函数文档详见:[validateFunction](https://uniapp.dcloud.net.cn/uniCloud/schema?id=validatefunction)
+- `db_init.json`文件右键初始化云数据库时依然会带上schema进行数据库的初始化,除schema外HBuilderX3.0.0以上版本使用db_init.json初始化数据库还会带上扩展校验函数,扩展校验函数位于`uniCloud/database/validateFunction`目录下,扩展校验函数文档详见:[validateFunction](https://uniapp.dcloud.net.cn/uniCloud/schema?id=validatefunction)
**HBuilderX 3.0.0版本之前的db_init.json示例**
@@ -356,6 +337,16 @@ uniCloud数据库提供了多种数据导入导出和备份方案。
- 如果表名与opendb中任意表名相同,web控制台导出时将不会带上schema和index。
- web控制台导出时默认不包括`_id`字段,在导入时,数据库插入新记录时会自动补`_id`字段。如果需要指定`_id`,需要手工补足数据。
+在db_init.json内可以使用以下形式定义Date类型的数据:
+
+```js
+{
+ "dateObj": { // dateObj字段就是日期类型的数据
+ "$date": "2020-12-12T00:00:00.000Z" // ISO标准日期字符串
+ }
+}
+```
+
### 数据库回档备份和恢复@backup
**此功能暂时只有腾讯云支持**
diff --git a/docs/uniCloud/hosting.md b/docs/uniCloud/hosting.md
index 5179086e38f26d556eb10b2d34e8788a770ffd2a..5cffa80ae38255f6b496c38516df135ef0d15dea 100644
--- a/docs/uniCloud/hosting.md
+++ b/docs/uniCloud/hosting.md
@@ -102,7 +102,9 @@ DCloud为开发者提供了`uni发布平台`,包括网站发布、App发布和
阿里云现已支持http强制跳转https,在上述添加界面打开对应开关即可
-如果你已经有备案过的域名,直接解析过来即可;如果你要新注册域名,首先自行在网上购买,然后注意域名如果想在国内正常绑定阿里云或腾讯云,需要域名备案。这里的备案流程和传统云主机略有不同,涉及一个uniCloud没有固定ip的问题。此时可以去买花生壳的备案服务;也可以临时买一个短期固定ip,走固定ip备案。这里有开发者分享的[经验贴](https://uniapp.dcloud.io/uniCloud/cf-functions?id=eip)
+**域名备案**
+
+如果你已经有备案过的域名,直接解析过来即可;如果你要新注册域名,首先自行在网上购买,然后注意域名如果想在国内正常绑定阿里云或腾讯云,需要域名备案。这里的备案流程和传统云主机略有不同,涉及一个uniCloud没有固定ip的问题。此时可以去买花生壳的备案服务;也可以临时买一个短期传统云,走传统备案;还有授权码方案,这里有开发者分享的经验贴:[https://ask.dcloud.net.cn/article/38116](https://ask.dcloud.net.cn/article/38116)
**关于证书内容与私钥**
@@ -247,6 +249,7 @@ uni-app项目根据路由模式不同需要做不同的配置
- 资源统计页面展示的数据可能会有延迟
- 读次数、写次数、回源流量为系统限制,在现有套餐的容量、流量限制下一般不会超出
- 腾讯云前端网页部署套餐到期之后会保留7天,超过7天将会销毁
+- 如果服务空间是包月套餐,在服务空间到期但是前端网页托管未到期的情况下,前端网页托管也会随服务空间销毁,请注意给服务空间续费
## 阿里云使用限制
diff --git a/docs/uniCloud/jql-runner.md b/docs/uniCloud/jql-runner.md
index 73e16c9a156d0319844fe9420179664f26793bd4..e11581e4a3779d8e75e169e73c0495003d6a1e31 100644
--- a/docs/uniCloud/jql-runner.md
+++ b/docs/uniCloud/jql-runner.md
@@ -10,12 +10,11 @@
**注意**
-// 本文件用于,使用JQL语法操作项目关联的uniCloud空间的数据库,方便开发调试和远程数据库管理
-// 编写clientDB的js API(也支持常规js语法,比如var),可以对云数据库进行增删改查操作。不支持uniCloud-db组件写法
-// 可以全部运行,也可以选中部分代码运行。点击工具栏上的运行按钮或者按下【F5】键运行代码
-// 如果文档中存在多条JQL语句,只有最后一条语句生效
-// 如果混写了普通js,最后一条语句需是数据库操作语句
-// 此处代码运行不受DB Schema的权限控制,移植代码到实际业务中注意在schema中配好permission
-// 不支持clientDB的action
-// 数据库查询有最大返回条数限制,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-database?id=limit
-// 详细JQL语法,请参考 https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=jsquery
\ No newline at end of file
+- 编写clientDB的js API(也支持常规js语法,比如var),可以对云数据库进行增删改查操作。不支持uniCloud-db组件写法
+- 可以全部运行,也可以选中部分代码运行。点击工具栏上的运行按钮或者按下【F5】键运行代码
+- 如果文档中存在多条JQL语句,只有最后一条语句生效
+- 如果混写了普通js,最后一条语句需是数据库操作语句
+- 此处代码运行不受DB Schema的权限控制,移植代码到实际业务中注意在schema中配好permission
+- 不支持clientDB的action
+- 数据库查询有最大返回条数限制,详见:[limit](https://uniapp.dcloud.net.cn/uniCloud/cf-database?id=limit)
+- 详细JQL语法,请参考:[JQL](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=jsquery)
\ No newline at end of file
diff --git a/docs/uniCloud/learning.md b/docs/uniCloud/learning.md
index c53b3abab38988fe2c393c94c849640ec102fc4b..7d4981b5d157ccce52c2c263f06c8e6c4e28ab61 100644
--- a/docs/uniCloud/learning.md
+++ b/docs/uniCloud/learning.md
@@ -3,7 +3,7 @@
只需熟悉js即可,然后阅读uniCloud的文档,就像学习一个js框架。
-#### dcloud出品的视频教程:
+#### DCloud出品的视频教程:
- [更多视频教程](https://ke.qq.com/course/3416784?taid=11123338234831568&tuin=4025c735)
diff --git a/docs/uniCloud/price.md b/docs/uniCloud/price.md
index 35861b718bf9b97b2c0d9b94110f7dc933d1add5..f5155a33b29b0b09027d8c15ecadbecc1b064109 100644
--- a/docs/uniCloud/price.md
+++ b/docs/uniCloud/price.md
@@ -22,7 +22,7 @@ uniCloud提供包月、按量计费两种计费方式(仅腾讯云),具体
|资源类目 |限制 |说明 |
|:-: |:-: |:-: |
-|云函数并发限制 |1000个/服务空间 |实际普通项目很难达到这个并发数 |
+|云函数并发限制 |1000个实例/服务空间 |实际普通项目很难达到这个并发数,阿里云可以设置单实例多并发单实例最多100,理论最大并发量1000*100=100000 |
|每个服务空间的云函数数量 |48个 |实际项目中由于clientDB和单路由云函数,只会用到几个云函数,达不到限制数字。[详见](https://uniapp.dcloud.net.cn/uniCloud/faq?id=merge-functions) |
尤其注意阿里云的cdn确实是全免费的,这些免费资源可用于正常公司业务,阿里云不允许开发者使用这些免费的存储及CDN资源来开展图床类业务。
diff --git a/docs/uniCloud/release.md b/docs/uniCloud/release.md
index d6c28b90dcd941b6d4a0bf385c5ef0e40572c4cb..a0c06b6d461cf55c7b7fb64a9117efeb537a3052 100644
--- a/docs/uniCloud/release.md
+++ b/docs/uniCloud/release.md
@@ -1,3 +1,25 @@
+#### 2021-04-30
+ + 【重要】clientDB联表查询策略调整,请参考此文档进行进行排查并调整:[clientDB联表查询策略调整](https://ask.dcloud.net.cn/article/38966)
+ + clientDB 新增 联表查询支持副表foreignKey联查,即副表字段的foreignKey指向主表,把副表数据挂在主表下面 [详情](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=st-foreign-key)
+ + uniCloud本地调试插件 修复 阿里云偶发启动时多请求并发报错的Bug
+
+#### 2021-04-16
+ + 【重要】clientDB联表查询策略调整,请参考此文档进行进行排查并调整:[clientDB联表查询策略调整](https://ask.dcloud.net.cn/article/38966)
+ + unicloud-db组件 新增 loadtime 属性,替代 manual 属性 [详情](https://uniapp.dcloud.net.cn/uniCloud/unicloud-db?id=props)
+ + unicloud-db组件 新增 foreignKey 属性,用于存在多个foreignKey关系时指定要使用的foreignKey [详情](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=lookup-foreign-key)
+ + uniCloud.mixinDataCom 新增 foreignKey 属性,用途同上 [详情](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=lookup-foreign-key)
+ + uni-id 修复 3.0.7 版本引出的多个用户访问时可能出现30201报错的Bug
+ + uni-id 新增 bindMobile 接口支持通过一键登录的方式绑定 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=bind-mobile)
+ + uni-id 调整 bindTokenToDevice 选项默认值改为 false,即默认不再与设备绑定,方便多设备登录
+ + 修复 uniCloud.chooseAndUploadFile 在iOS微信小程序真机无法唤起选择文件的Bug
+ + uniCloud admin 优化错误提示、键盘响应等众多细节,更新uni-id等众多依赖 [详情](https://ext.dcloud.net.cn/plugin?id=3268)
+
+#### 2021-04-07
+ + 新增 [uni-upgrade-center](https://uniapp.dcloud.io/uniCloud/upgrade-center),提供了简单、易用、统一的App管理、App版本管理、安装包发布管理,升级检测更新管理。
+ + uniCloud本地调试插件 修复 3.1.5 版本引出的腾讯云连接本地云函数运行一段时间后报错的Bug [详情](https://ask.dcloud.net.cn/question/119089)
+ + 阿里云 新增 支持对云函数设置单实例并发度 [详情](https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=concurrency)
+ + 阿里云 新增 支持TTL索引 [详情](https://uniapp.dcloud.net.cn/uniCloud/db-index?ttl)
+
#### 2021-03-16
+ unicloud-db组件 add、update、remove方法新增可选参数needConfirm、needLoading、loadingTitle [详情](https://uniapp.dcloud.net.cn/uniCloud/unicloud-db?id=add)
+ unicloud-db组件 新增 load 事件支持 pagination [详情](https://uniapp.dcloud.net.cn/uniCloud/unicloud-db?id=loadevent)
diff --git a/docs/uniCloud/schema.md b/docs/uniCloud/schema.md
index 11130f9d5ebc1f48c213ac6d86cd88ad2ed93d62..b0a4776a466dfbfe81f256646ff5cfb62f9e260c 100644
--- a/docs/uniCloud/schema.md
+++ b/docs/uniCloud/schema.md
@@ -4,7 +4,7 @@
它有很多重要的作用:
-- 描述现有的数据格式。可以一目了然的阅读每个表、每个字段的用途。
+- 描述现有的数据含义。可以一目了然的阅读每个表、每个字段的用途。
- 设定数据操作权限(permission)。什么样的角色可以读/写哪些数据,都在这里配置。
- 设定字段值域能接受的格式(validator),比如不能为空、需符合指定的正则格式。
- 设定字段之间的约束关系(fieldRules),比如字段结束时间需要晚于字段开始时间。
@@ -97,6 +97,8 @@ properties里的字段列表,每个字段都有很多可以设置的属性,
|enum|Array|字段值枚举范围,数组中至少要有一个元素,且数组内的每一个元素都是唯一的。|
|enumType|String|字段值枚举类型,可选值tree。设为tree时,代表enum里的数据为树形结构。此时schema2code可生成多级级联选择组件|
|arrayType|String|数组项类型,bsonType="array" 时有效,HBuilderX 3.1.0+ 支持,具体见下表arrayType可用类型|
+|fileMediaType|String|文件类型,可选值 all|image|video 默认值为all,表示所有文件,image表示图片类型文件,video表示视频类型文件,详情参考[文件上传示例](https://uniapp.dcloud.net.cn/uniCloud/schema?id=filepicker) HBuilderX 3.1.0+ 支持|
+|fileExtName|String|文件扩展名过滤,多个用 "," 分割,例如: jpg,png,HBuilderX 3.1.0+ 支持|
|maximum|number|如果bsonType为数字时,可接受的最大值|
|exclusiveMaximum|boolean|是否排除 maximum|
|minimum|number|如果bsonType为数字时,可接受的最小值|
@@ -116,15 +118,14 @@ properties里的字段列表,每个字段都有很多可以设置的属性,
|label|string|字段标题。schema2code生成前端代码时,渲染表单项前面的label标题|
|group|string|分组id。schema2code生成前端代码时,多个字段对应的表单项可以合并显示在一个uni-group组件中|
|order|int|表单项排序序号。schema2code生成前端代码时,默认是以schema中的字段顺序从上到下排布表单项的,但如果指定了order,则按order规定的顺序进行排序。如果表单项被包含在uni-group中,则同组内按order排序|
-|component|Object|Array|schema2code生成前端代码时,使用什么组件渲染这个表单项。比如使用input输入框。详见下方示例|
+|component|Object|Array|schema2code生成前端代码时,使用什么组件渲染这个表单项。已废弃。请使用下面的componentForEdit和componentForShow|
|componentForEdit|Object|Array|HBuilderX 3.1.0+, 生成前端编辑页面文件时(add.vue、edit.vue),使用什么组件渲染这个表单项。比如使用input输入框。|
|componentForShow|Object|Array|HBuilderX 3.1.0+, 生成前端展示页面时(list.vue、detail.vue),使用什么组件渲染。比如使用uni-dateformat格式化日期。|
**注意:**
-1. `DB Schema`的各种功能均只支持`clientDB`。如果使用云函数操作数据库,schema的作用仅仅是描述字段信息。同时强烈推荐使用HBuilderX 2.9.5以上版本使用`clientDB`。
-2. schema2code,入口在uniCloud web控制台的数据库schema界面,注意该功能需搭配HBuilderX 2.9.5+版本。
+1. `DB Schema`的各种功能均只支持`clientDB`。如果使用云函数操作数据库,schema的作用仅仅是描述字段信息。同时强烈推荐使用HBuilderX 3.0以上版本使用`clientDB`。
+2. schema2code,是根据scheme自动生成数据的增删改查页面的功能。入口1在uniCloud web控制台的数据库schema界面,入口2在HBuilderX中点击schema右键菜单。[详见](https://ext.dcloud.net.cn/plugin?id=4684)
3. 暂不支持子属性校验
-4. HBuilderX 3.1.0+ `component` 属性升级为 `componentForEdit`,以支持更灵活的配置不同类型的页面使用的组件,仍然兼容`component`
**一个带有字段的schema基本示例**
@@ -187,7 +188,7 @@ uniCloud推出了`openDB`开源数据库规范,包括用户表、文章表、
- timestamp (时间戳)
- date (日期)
- file 云存储文件的信息体。不直接存储文件,而是一个json object,包括云存储文件的名称、路径、文件体积等信息。
-- password (所有用户都不能通过clientDB读写,即使是admin管理员)
+- password (一种特殊的string。这类字段不会通过clientDB传递给前端,所有用户都不能通过clientDB读写,即使是admin管理员)
注意:
- timestamp是一串数字的时间戳,一般通过如下js获取`var timestamp = new Date().getTime();`。它的好处是屏蔽了时区差异。阿里云和腾讯云的云端时区是0,但在HBuilderX本地运行云函数时,如果是中国的电脑,时区则会变成8,导致显示错乱。所以推荐使用时间戳。但时间戳是一串记录毫秒的数字,不合适直接渲染到前端界面上。推荐的做法是在前端渲染时使用[`
`组件](https://ext.dcloud.net.cn/plugin?id=3279)。
@@ -1011,9 +1012,11 @@ permission的字段级控制,包括读写两种权限,分别称为:read、
**注意**
+- `auth.xxx`均由uni-id提供,依赖于[uni-id公共模块](uniCloud/uni-id.md)
+- `doc.xxx`表示将要查询/修改/删除的每条数据,如果将要访问的数据不满足permission规则将会拒绝执行
- `uni-id`的角色和权限,也即auth.role和auth.permission是不一样的概念。注意阅读[uni-id 角色权限](/uniCloud/uni-id?id=rbac)
- 如果想支持使用多个`action`的用法,可以通过`"'actionRequired' in action"`的形式配置权限,限制客户端使用的action内必须包含名为`actionRequired`的action
-- doc是有客户端条件里面提取的变量,因此create权限内不可使用doc变量,建议使用forceDefaultValue或自定义校验函数实现插入数据的校验。
+- doc是由客户端条件里面提取的变量,可以理解为将要访问的数据,因此create权限内不可使用doc变量,建议使用forceDefaultValue或自定义校验函数实现插入数据的校验。
**权限规则内可以使用的运算符**
@@ -1041,7 +1044,7 @@ permission的字段级控制,包括读写两种权限,分别称为:read、
"permission": {
"read": "doc.status==true", // 任何用户都可以读status字段的值为true的记录,其他记录不可读
"create": false, // 禁止新增数据记录(admin权限用户不受限)
- "update": false, // 禁止更新数据(admin权限用户不受限)
+ "update": "'updateuser' in auth.permission", // 权限标记为updateuser的用户,和admin管理员,可以更新数据,其他人无权更新数据
"delete": false // 禁止删除数据(admin权限用户不受限)
},
"properties": {
@@ -1086,6 +1089,14 @@ forceDefaultValue属于数据校验的范畴,在数据插入时生效,但是
例如在news表新增一条记录,权限需求是“未登录用户不能创建新闻”,其实不需要在news表的create权限里写`auth.uid != null`。只需把news表的uid字段的forceDefaultValue设为`"$env": "uid"`,create权限配置为true即可,未登录用户自然无法创建。当然实际使用时你可能需要更复杂的权限,直接使用true作为权限规则时务必注意
+**permission和role的使用注意**
+
+在schema中使用uni-id的permission和role,首先需要在uniCloud admin中创建好权限,然后创建角色并给该角色分配权限,最后创建用户并授权角色。
+
+这样用户登录后,uniCloud会自动分析它的permission和role,在schema里编写的关于permission和role的限制也可以一一对应上,进行有效管理。
+
+admin中创建权限、角色和用户授权,另见[文档](/uniCloud/admin?id=mutiladmin)
+
**变量action的说明**
action是`clientDB`的一个配套功能。它的作用是在前端发起数据操作请求时,附带一个action的name,则会同时执行一个`uni-clientDB-action`的云函数。[详见](/uniCloud/database?id=action)
@@ -1206,14 +1217,26 @@ DCloud提供了`uni-forms`前端组件,该组件的表单校验规范完全符
#### 快速上手schema2code生成“通讯录”
> 成品演示地址:[http://contacts-demo.dcloud.net.cn/](http://contacts-demo.dcloud.net.cn/)
+##### 首先创建“带schema的通讯录”数据表
1. 登录 [uniCloud控制台](https://unicloud.dcloud.net.cn),选中“云数据库”
2. 点击新建数据表
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/1ef863ed-d919-46f3-bd01-6092f2ed1e21.jpg)
3. 使用[OpenDB](https://gitee.com/dcloud/opendb)表模板创建: `opendb-contacts` 通讯录表
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/0e2ee195-05ae-4445-af41-45c41b2da70a.jpg)
-4. 选中刚创建好的数据表`opendb-contacts`,点击进入表结构schema界面,点击按钮 “schema2code”
+
+##### schema2code有两种方式
+- 方式1:在HBuilderX中操作
+1.1 下载刚刚创建的通讯录表的schema
+![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/c2ea33f4-8619-41a6-bd14-5f9ce044985d.jpg)
+1.2 项目根目录的 `uniCloud/database/opendb-contacts.schema.json` 文件上点击右键,或者在已打开的 Schema 编辑器点击右键.如果没有该菜单,请在插件市场安装插件:[https://ext.dcloud.net.cn/plugin?id=4684](https://ext.dcloud.net.cn/plugin?id=4684)
+![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/82f69a99-c652-4cbc-a96b-1cfbe3d40529.jpg)
+1.3 弹出一个对话框 `schema2code`,选择要导出的项目类型(uni-app用户端项目还是admin管理端项目),以及表字段名(去掉不需要在前端展现或编辑的字段)
+![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/fb49118b-364e-412b-9900-f275803cce37.jpg)
+1.4 点击对话框右下角的确定按钮,将执行导入动作,如果导入的文件和工程中的文件有差异将弹出文件对比框,继续操作并确认导入
+- 方式2:在uniCloud web控制台操作
+2.1 选中刚创建好的数据表`opendb-contacts`,点击进入表结构schema界面,点击按钮 “schema2code”
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/3f93a350-2d13-4b8e-afb6-7dc367437b49.jpg)
-5. 点击“导入HBuilderX”或“下载zip”按钮,将生成的代码合并到自己的项目中
+2.2 点击“导入HBuilderX”或“下载zip”按钮,将生成的代码合并到自己的项目中
![](https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/ba87a6b0-1519-11eb-81ea-f115fe74321c.png)
上图每个区域的解释如下:
@@ -1253,7 +1276,7 @@ DCloud提供了`uni-forms`前端组件,该组件的表单校验规范完全符
**全程演示视频**:
+ poster="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/a04e1d03-6d9f-43bf-a74b-80e9a5c31d7f.mp4?x-oss-process=video/snapshot,t_1000,f_jpg" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/a04e1d03-6d9f-43bf-a74b-80e9a5c31d7f.mp4">
@@ -1269,7 +1292,7 @@ const dbOrderBy = 'register_date desc' // 排序字段,asc(升序)、desc(降
const dbSearchFields = ['username', 'role_name', 'mobile', 'email'] // 模糊搜索字段,支持模糊搜索的字段列表
```
-`schema2code`是一个代码辅助生成工具,生成后的代码,经常会有二次开发需求。如果二次开发后又变动schema,建议使用Git等工具管理源码,进行差异比对。
+`schema2code`是一个代码辅助生成工具。
#### 生成页面控件的默认策略
@@ -1278,7 +1301,8 @@ const dbSearchFields = ['username', 'role_name', 'mobile', 'email'] // 模糊搜
- 如果配置了字段的component属性,则严格按component的配置执行。
- 如果没有配置component属性,那么默认有如下策略:
* 字段类型为bool时,默认使用switch组件
- * 字段类型为Array时,默认使用uni-data-checkbox组件
+ * 字段类型为Array时,默认使用uni-data-checkbox组件(显示为多选框)
+ * 字段类型为int且使用enum时,默认使用uni-data-checkbox组件(显示为单选框)
* 字段类型为int时,满足以下2个条件时,使用slider组件
- 必填字段
- 配置 `minimum` 或 `maximum`
@@ -1578,6 +1602,31 @@ const dbSearchFields = ['username', 'role_name', 'mobile', 'email'] // 模糊搜
> HBuilderX 3.1.0+ 支持
+单个文件上传示例
+
+```json
+{
+ "schema": {
+ "bsonType": "object",
+ "required": [],
+ "properties": {
+ "_id": {
+ "description": "ID,系统自动生成"
+ },
+ "image": {
+ "bsonType": "file",
+ "title": "图片",
+ "description": "图片",
+ "fileMediaType": "image", // 可选值 all|image|video 默认值为all,表示所有文件,image表示图片类型文件,video表示视频类型文件
+ "fileExtName": "jpg,png", // 扩展名过滤,多个用 , 分割
+ }
+ }
+ }
+}
+```
+
+多个文件上传示例
+
```json
{
"schema": {
@@ -1592,14 +1641,13 @@ const dbSearchFields = ['username', 'role_name', 'mobile', 'email'] // 模糊搜
"title": "图片",
"description": "图片",
"arrayType": "file",
- "fileMediaType":"image", // 可选值 all|image|video 默认值为all,表示所有文件,image表示图片类型文件,video表示视频类型文件
- "fileExtName":"jpg,png", // 扩展名过滤,多个用 , 分割
- "maxLength": 3, // 限制最大数量
+ "fileMediaType": "image", // 可选值 all|image|video 默认值为all,表示所有文件,image表示图片类型文件,video表示视频类型文件
+ "fileExtName": "jpg,png", // 扩展名过滤,多个用 , 分割
+ "maxLength": 3 // 限制最大数量
}
}
}
}
-
```
上传后的file对象
diff --git a/docs/uniCloud/send-sms.md b/docs/uniCloud/send-sms.md
index ec26c0bd26347de0f9c46b4436725e22737a70aa..8441a7dc1b37e2e1bd8936f713f0d984d6eb4b7f 100644
--- a/docs/uniCloud/send-sms.md
+++ b/docs/uniCloud/send-sms.md
@@ -16,10 +16,11 @@
|参数名 |类型 |必填 |说明 |
|:-: |:-: |:-: |:-: |
+|appid |String |是 |DCloud appid,可以在项目manifest.json内看到 |
|smsKey |String |是 |调用短信接口的密钥key,从 dev.dcloud.net.cn/uniSms 后台获取 |
|smsSecret |String |是 |调用短信接口的密钥secret,从 dev.dcloud.net.cn/uniSms 后台获取 |
|phone |String |是 |发送目标手机号,暂仅支持中国大陆手机号,不能填写多个手机号|
-|templateId |String |是 |模版Id,短信内容为固定模板,详见下方说明 |
+|templateId |String |是 |模版Id,短信内容为固定模板,详见下方说明(应用开发阶段,可以使用 DCloud 提供的测试模板) |
|data |Object |是 |模版里的各个变量字段,json格式 |
@@ -57,6 +58,15 @@
- 短信类别:
分为3类,即验证码类短信、通知类短信、营销类短信。验证码类短信,其模板审核简单快速,只能单次发送。
+**短信测试模板说明**
+
+运营商目前审核比较严格,处于开发阶段的应用可能无法通过运营商的审核。为方便开发者测试短信功能,DCloud 提供了一个测试模板,该模板的templateId为:uni_sms_test,内容为:`【DC】尊敬的用户,您的验证码是:${code}。5分钟内有效,请尽快验证。请勿泄漏您的验证码。`
+
+使用该模板的限制:
+
+1. 每日最多给10个手机号发送不超过100条短信;
+2. 使用该模板也会正常收取费用,请保证账户有充足余额。
+
+ {{ message.split('').reverse().join('') }}
+
+
+
+```
+
+
+
+```html
+
+
+
+
+ {{index%2}}
+
+
+
+
+
+```
+
+
+这些表达式会在所属 Vue 实例的数据作用域下作为 `JavaScript` 被解析。有个限制就是,每个绑定都只能包含单个表达式,所以下面的例子都不会生效。
+
+
+```html
+
+
+
+ {{ var a = 1 }}
+
+ {{ if (ok) { return message } }}
+
+
+
+```
+
+
+> 模板表达式都被放在沙盒中,只能访问**全局变量的一个白名单**:
+> - `Infinity`
+> - `undefined`
+> - `NaN`
+> - `isFinite`
+> - `isNaN`
+> - `parseFloat`
+> - `parseInt`
+> - `decodeURI`
+> - `decodeURIComponent`
+> - `encodeURI`
+> - `encodeURIComponent`
+> - `Math`
+> - `Number`
+> - `Date`
+> - `Array`
+> - `Object`
+> - `Boolean`
+> - `String`
+> - `RegExp`
+> - `Map`
+> - `Set`
+> - `JSON`
+> - `Intl`
+>
+> 你不应该在模板表达式中试图访问用户定义的全局变量。
+
+
+
+
### 指令
@@ -299,7 +413,7 @@ vue 是单页面应用,使页面局部刷新,不用每次跳转页面都要
#### v-on
-v-on 指令,它用于监听 DOM 事件。v-on缩写为‘ @ ’
+v-on 指令,它用于监听 DOM 事件。v-on缩写为‘ @ ’,下文简称为 @事件
```html
@@ -856,12 +970,12 @@ v-for 指令可以实现基于一个数组来渲染一个列表。
### 监听事件
-可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 `JavaScript` 代码。
+可以用@事件监听 DOM 事件,并在触发时运行一些 `JavaScript` 代码。
```html
- Add 1
+ Add 1
The button above has been clicked {{ counter }} times.
@@ -879,7 +993,7 @@ v-for 指令可以实现基于一个数组来渲染一个列表。
### 事件处理方法
-然而许多事件处理逻辑会更为复杂,所以直接把 `JavaScript` 代码写在 `v-on` 指令中是不可行的。因此 `v-on` 还可以接收一个需要调用的方法名称。
+然而许多事件处理逻辑会更为复杂,所以直接把 `JavaScript` 代码写在@事件中是不可行的。因此@事件还可以接收一个需要调用的方法名称。
示例:
@@ -887,7 +1001,7 @@ v-for 指令可以实现基于一个数组来渲染一个列表。
- Greet
+ Greet