diff --git a/docs/api/README.md b/docs/api/README.md
index b4117fc85cfc40190eeb0de13371e9fd2de4f5d6..4b4693168f5fae2a4e96d9188c956b003bfa5957 100644
--- a/docs/api/README.md
+++ b/docs/api/README.md
@@ -202,50 +202,50 @@ uni.addInterceptor({
|API|说明|
|:-|:-|
-|[uni.request](request/request.html#request)|发起网络请求|
+|[uni.request](request/request?id=request)|发起网络请求|
##### 上传、下载
|API|说明|
|:-|:-|
-|[uni.uploadFile](request/network-file.html#uploadfile)|上传文件|
-|[uni.downloadFile](request/network-file.html#downloadfile)|下载文件|
+|[uni.uploadFile](request/network-file?id=uploadfile)|上传文件|
+|[uni.downloadFile](request/network-file?id=downloadfile)|下载文件|
##### WebSocket
|API|说明|
|:-|:-|
-|[uni.connectSocket](request/websocket.html#connectsocket)|创建 WebSocket 连接|
-|[uni.onSocketOpen](request/websocket.html#onsocketopen)|监听 WebSocket 打开|
-|[uni.onSocketError](request/websocket.html#onsocketerror)|监听 WebSocket 错误|
-|[uni.sendSocketMessage](request/websocket.html#sendsocketmessage)|发送 WebSocket 消息|
-|[uni.onSocketMessage](request/websocket.html#onsocketmessage)|接受 WebSocket 消息|
-|[uni.closeSocket](request/websocket.html#closesocket)|关闭 WebSocket 连接|
-|[uni.onSocketClose](request/websocket.html#onsocketclose)|监听 WebSocket 关闭|
+|[uni.connectSocket](request/websocket?id=connectsocket)|创建 WebSocket 连接|
+|[uni.onSocketOpen](request/websocket?id=onsocketopen)|监听 WebSocket 打开|
+|[uni.onSocketError](request/websocket?id=onsocketerror)|监听 WebSocket 错误|
+|[uni.sendSocketMessage](request/websocket?id=sendsocketmessage)|发送 WebSocket 消息|
+|[uni.onSocketMessage](request/websocket?id=onsocketmessage)|接受 WebSocket 消息|
+|[uni.closeSocket](request/websocket?id=closesocket)|关闭 WebSocket 连接|
+|[uni.onSocketClose](request/websocket?id=onsocketclose)|监听 WebSocket 关闭|
##### SocketTask
|API|说明|
|---|---|
-|[SocketTask.send](/api/request/socket-task.html#sockettasksend) |通过 WebSocket 连接发送数据 |
-|[SocketTask.close](/api/request/socket-task.html#sockettaskclose) |关闭 WebSocket 连接 |
-|[SocketTask.onOpen](/api/request/socket-task.html#sockettaskonopen) |监听 WebSocket 连接打开事件 |
-|[SocketTask.onClose](/api/request/socket-task.html#sockettaskonclose) |监听 WebSocket 连接关闭事件 |
-|[SocketTask.onError](/api/request/socket-task.html#sockettaskonerror) |监听 WebSocket 错误事件 |
-|[SocketTask.onMessage](/api/request/socket-task.html#sockettaskonmessage) |监听 WebSocket 接受到服务器的消息事件 |
+|[SocketTask.send](/api/request/socket-task?id=sockettasksend) |通过 WebSocket 连接发送数据 |
+|[SocketTask.close](/api/request/socket-task?id=sockettaskclose) |关闭 WebSocket 连接 |
+|[SocketTask.onOpen](/api/request/socket-task?id=sockettaskonopen) |监听 WebSocket 连接打开事件 |
+|[SocketTask.onClose](/api/request/socket-task?id=sockettaskonclose) |监听 WebSocket 连接关闭事件 |
+|[SocketTask.onError](/api/request/socket-task?id=sockettaskonerror) |监听 WebSocket 错误事件 |
+|[SocketTask.onMessage](/api/request/socket-task?id=sockettaskonmessage) |监听 WebSocket 接受到服务器的消息事件 |
#### 媒体
##### 图片
|API|说明|
|:-|:-|
-|[uni.chooseImage](media/image.html#chooseimage)|从相册选择图片,或者拍照|
-|[uni.previewImage](media/image.html#unipreviewimageobject)|预览图片|
-|[uni.closePreviewImage](media/image.html#closepreviewimage)|关闭预览图片|
-|[uni.getImageInfo](media/image.html#getimageinfo)|获取图片信息|
-|[uni.saveImageToPhotosAlbum](media/image.html#saveimagetophotosalbum)|保存图片到系统相册|
+|[uni.chooseImage](media/image?id=chooseimage)|从相册选择图片,或者拍照|
+|[uni.previewImage](media/image?id=unipreviewimageobject)|预览图片|
+|[uni.closePreviewImage](media/image?id=closepreviewimage)|关闭预览图片|
+|[uni.getImageInfo](media/image?id=getimageinfo)|获取图片信息|
+|[uni.saveImageToPhotosAlbum](media/image?id=saveimagetophotosalbum)|保存图片到系统相册|
##### 文件
|API|说明|
|:-|:-|
-|[uni.chooseFile](media/file.html#chooseFile)|从本地选择文件|
+|[uni.chooseFile](media/file?id=chooseFile)|从本地选择文件|
##### 录音管理
|API|说明|
@@ -265,48 +265,48 @@ uni.addInterceptor({
|API|说明|
|:-|:-|
-|[uni.chooseVideo](media/video.html#choosevideo)|从相册选择视频,或者拍摄|
-|[uni.chooseMedia](media/video.html#choosemedia)|拍摄或从手机相册中选择图片或视频。|
-|[uni.saveVideoToPhotosAlbum](media/video.html#savevideotophotosalbum)|保存视频到系统相册|
-|[uni.createVideoContext](/api/media/video-context.html#createvideocontext)|视频组件管理|
+|[uni.chooseVideo](media/video?id=choosevideo)|从相册选择视频,或者拍摄|
+|[uni.chooseMedia](media/video?id=choosemedia)|拍摄或从手机相册中选择图片或视频。|
+|[uni.saveVideoToPhotosAlbum](media/video?id=savevideotophotosalbum)|保存视频到系统相册|
+|[uni.createVideoContext](/api/media/video-context?id=createvideocontext)|视频组件管理|
##### 相机组件管理
|API|说明|
|:-|:-|
-|[uni.createCameraContext](media/camera-context.html)|相机组件管理|
+|[uni.createCameraContext](media/camera-context.md)|相机组件管理|
##### 直播组件管理
|API|说明|
|:-|:-|
-|[uni.createLivePlayerContext](media/live-player-context.html)|直播组件管理|
+|[uni.createLivePlayerContext](media/live-player-context.md)|直播组件管理|
#### 文件
|API|说明|
|:-|:-|
-|[uni.saveFile](file/file.html#savefile)|保存文件|
-|[uni.getSavedFileList](file/file.html#getsavedfilelist)|获取已保存的文件列表|
-|[uni.getSavedFileInfo](file/file.html#getsavedfileinfo)|获取已保存的文件信息|
-|[uni.removeSavedFile](file/file.html#removesavedfile)|删除已保存的文件信息|
-|[uni.getFileInfo](/api/file/file.html#getfileinfo)|获取文件信息|
-|[uni.openDocument](file/file.html#opendocument)|打开文件|
+|[uni.saveFile](file/file?id=savefile)|保存文件|
+|[uni.getSavedFileList](file/file?id=getsavedfilelist)|获取已保存的文件列表|
+|[uni.getSavedFileInfo](file/file?id=getsavedfileinfo)|获取已保存的文件信息|
+|[uni.removeSavedFile](file/file?id=removesavedfile)|删除已保存的文件信息|
+|[uni.getFileInfo](/api/file/file?id=getfileinfo)|获取文件信息|
+|[uni.openDocument](file/file?id=opendocument)|打开文件|
#### 数据缓存
|API|说明|
|:-|:-|
-|[uni.getStorage](storage/storage.html#setstorage)|获取本地数据缓存|
-|[uni.getStorageSync](storage/storage.html#setstoragesync)|获取本地数据缓存|
-|[uni.setStorage](storage/storage.html#getstorage)|设置本地数据缓存|
-|[uni.setStorageSync](storage/storage.html#getstoragesync)|设置本地数据缓存|
-|[uni.getStorageInfo](storage/storage.html#getstorageinfo)|获取本地缓存的相关信息|
-|[uni.getStorageInfoSync](storage/storage.html#getstorageinfosync)|获取本地缓存的相关信息|
-|[uni.removeStorage](storage/storage.html#removestorage)|删除本地缓存内容|
-|[uni.removeStorageSync](storage/storage.html#removestoragesync)|删除本地缓存内容|
-|[uni.clearStorage](storage/storage.html#clearstorage)|清理本地数据缓存|
-|[uni.clearStorageSync](storage/storage.html#clearstoragesync)|清理本地数据缓存|
+|[uni.getStorage](storage/storage?id=setstorage)|获取本地数据缓存|
+|[uni.getStorageSync](storage/storage?id=setstoragesync)|获取本地数据缓存|
+|[uni.setStorage](storage/storage?id=getstorage)|设置本地数据缓存|
+|[uni.setStorageSync](storage/storage?id=getstoragesync)|设置本地数据缓存|
+|[uni.getStorageInfo](storage/storage?id=getstorageinfo)|获取本地缓存的相关信息|
+|[uni.getStorageInfoSync](storage/storage?id=getstorageinfosync)|获取本地缓存的相关信息|
+|[uni.removeStorage](storage/storage?id=removestorage)|删除本地缓存内容|
+|[uni.removeStorageSync](storage/storage?id=removestoragesync)|删除本地缓存内容|
+|[uni.clearStorage](storage/storage?id=clearstorage)|清理本地数据缓存|
+|[uni.clearStorageSync](storage/storage?id=clearstoragesync)|清理本地数据缓存|
#### 位置
@@ -314,18 +314,18 @@ uni.addInterceptor({
|API|说明|
|:-|:-|
-|[uni.getLocation](location/location.html#getlocation)|获取当前位置|
-|[uni.chooseLocation](location/location.html#chooselocation)|打开地图选择位置|
+|[uni.getLocation](location/location?id=getlocation)|获取当前位置|
+|[uni.chooseLocation](location/location?id=chooselocation)|打开地图选择位置|
##### 查看位置
|API|说明|
|:-|:-|
-|[uni.openLocation](location/open-location.html#openlocation)|打开内置地图|
+|[uni.openLocation](location/open-location?id=openlocation)|打开内置地图|
##### 地图组件控制
|API|说明|
|:-|:-|
-|[uni.createMapContext](location/map.html#createmapcontext)|地图组件控制|
+|[uni.createMapContext](location/map?id=createmapcontext)|地图组件控制|
#### 设备
@@ -333,67 +333,67 @@ uni.addInterceptor({
|API|说明|
|:-|:-|
-|[uni.getSystemInfo](system/info.html#getsysteminfo)|获取系统信息|
-|[uni.getSystemInfoSync](system/info.html#getsysteminfosync)|获取系统信息|
-|[uni.canIUse](/api/system/info.html#caniuse)|判断应用的 API,回调,参数,组件等是否在当前版本可用|
+|[uni.getSystemInfo](system/info?id=getsysteminfo)|获取系统信息|
+|[uni.getSystemInfoSync](system/info?id=getsysteminfosync)|获取系统信息|
+|[uni.canIUse](/api/system/info?id=caniuse)|判断应用的 API,回调,参数,组件等是否在当前版本可用|
##### 内存
|API|说明|
|:-|:-|
-|[uni.onMemoryWarning](/api/system/memory.html#wxonmemorywarning)|监听内存不足告警事件|
+|[uni.onMemoryWarning](/api/system/memory?id=wxonmemorywarning)|监听内存不足告警事件|
##### 网络状态
|API|说明|
|:-|:-|
-|[uni.getNetworkType](system/network.html#getnetworktype)|获取网络类型|
-|[uni.onNetworkStatusChange](system/network.html#onnetworkstatuschange)|监听网络状态变化|
-|[uni.offNetworkStatusChange](system/network.html#offnetworkstatuschange)|取消监听网络状态变化|
+|[uni.getNetworkType](system/network?id=getnetworktype)|获取网络类型|
+|[uni.onNetworkStatusChange](system/network?id=onnetworkstatuschange)|监听网络状态变化|
+|[uni.offNetworkStatusChange](system/network?id=offnetworkstatuschange)|取消监听网络状态变化|
##### 加速度计
|API|说明|
|:-|:-|
-|[uni.onAccelerometerChange](system/accelerometer.html#onaccelerometerchange)|监听加速度数据|
-|[uni.offAccelerometerChange](system/accelerometer.html#offaccelerometerchange)|取消监听加速度数据|
-|[uni.startAccelerometer](system/accelerometer.html#startaccelerometer)|开始监听加速度数据|
-|[uni.stopAccelerometer](system/accelerometer.html#stopaccelerometer)|停止监听加速度数据|
+|[uni.onAccelerometerChange](system/accelerometer?id=onaccelerometerchange)|监听加速度数据|
+|[uni.offAccelerometerChange](system/accelerometer?id=offaccelerometerchange)|取消监听加速度数据|
+|[uni.startAccelerometer](system/accelerometer?id=startaccelerometer)|开始监听加速度数据|
+|[uni.stopAccelerometer](system/accelerometer?id=stopaccelerometer)|停止监听加速度数据|
##### 罗盘
|API|说明|
|:-|:-|
-|[uni.onCompassChange](system/compass.html#oncompasschange)|监听罗盘数据|
-|[uni.offCompassChange](system/compass.html#offcompasschange)|取消监听罗盘数据|
-|[uni.startCompass](system/compass.html#startcompass)|开始监听罗盘数据|
-|[uni.stopCompass](system/compass.html#stopcompass)|停止监听罗盘数据|
+|[uni.onCompassChange](system/compass?id=oncompasschange)|监听罗盘数据|
+|[uni.offCompassChange](system/compass?id=offcompasschange)|取消监听罗盘数据|
+|[uni.startCompass](system/compass?id=startcompass)|开始监听罗盘数据|
+|[uni.stopCompass](system/compass?id=stopcompass)|停止监听罗盘数据|
##### 陀螺仪
|API|说明|
|:-|:-|
-|[uni.onGyroscopeChange](/api/system/gyroscope.html#ongyroscopechange)|监听陀螺仪数据|
-|[uni.startGyroscope](/api/system/gyroscope.html#startgyroscope)|开始监听陀螺仪数据|
-|[uni.stopGyroscope](/api/system/gyroscope.html#stopgyroscope)|停止监听陀螺仪数据|
+|[uni.onGyroscopeChange](/api/system/gyroscope?id=ongyroscopechange)|监听陀螺仪数据|
+|[uni.startGyroscope](/api/system/gyroscope?id=startgyroscope)|开始监听陀螺仪数据|
+|[uni.stopGyroscope](/api/system/gyroscope?id=stopgyroscope)|停止监听陀螺仪数据|
##### 拨打电话
|API|说明|
|:-|:-|
-|[uni.makePhoneCall](system/phone.html#makephonecall)|拨打电话|
+|[uni.makePhoneCall](system/phone?id=makephonecall)|拨打电话|
##### 扫码
|API|说明|
|:-|:-|
-|[uni.scanCode](system/barcode.html#scancode)|扫码|
+|[uni.scanCode](system/barcode?id=scancode)|扫码|
##### 剪切板
|API|说明|
|:-|:-|
-|[uni.setClipboardData](system/clipboard.html#setclipboarddata)|设置剪贴板内容|
-|[uni.getClipboardData](system/clipboard.html#getclipboarddata)|获取剪贴板内容|
+|[uni.setClipboardData](system/clipboard?id=setclipboarddata)|设置剪贴板内容|
+|[uni.getClipboardData](system/clipboard?id=getclipboarddata)|获取剪贴板内容|
##### 屏幕亮度
|API|说明|
|:-|:-|
-|[uni.setScreenBrightness](system/brightness.html#setscreenbrightness)|设置屏幕亮度|
-|[uni.getScreenBrightness](system/brightness.html#getscreenbrightness)|获取屏幕亮度|
-|[uni.setKeepScreenOn](system/brightness.html#setkeepscreenon)|设置是否保持常亮状态|
+|[uni.setScreenBrightness](system/brightness?id=setscreenbrightness)|设置屏幕亮度|
+|[uni.getScreenBrightness](system/brightness?id=getscreenbrightness)|获取屏幕亮度|
+|[uni.setKeepScreenOn](system/brightness?id=setkeepscreenon)|设置是否保持常亮状态|
##### 用户截屏事件
|API|说明|
@@ -403,107 +403,107 @@ uni.addInterceptor({
|API|说明|
|:-|:-|
-|[uni.vibrate](system/vibrate.html#vibrate)|使手机发生振动|
-|[uni.vibrateLong](system/vibrate.html#vibratelong)|使手机发生较长时间的振动|
-|[uni.vibrateShort](system/vibrate.html#vibrateshort)|使手机发生较短时间的振动|
+|[uni.vibrate](system/vibrate?id=vibrate)|使手机发生振动|
+|[uni.vibrateLong](system/vibrate?id=vibratelong)|使手机发生较长时间的振动|
+|[uni.vibrateShort](system/vibrate?id=vibrateshort)|使手机发生较短时间的振动|
##### 手机联系人
|API|说明|
|:-|:-|
-|[uni.addPhoneContact](system/contact.html#addphonecontact)|添加手机通讯录|
+|[uni.addPhoneContact](system/contact?id=addphonecontact)|添加手机通讯录|
##### 蓝牙
|API|说明|
|:-|:-|
-|[uni.openBluetoothAdapter](/api/system/bluetooth.html#openbluetoothadapter)|初始化蓝牙模块|
-|[uni.startBluetoothDevicesDiscovery](/api/system/bluetooth.html#startbluetoothdevicesdiscovery)|搜寻附近的蓝牙外围设备|
-|[uni.onBluetoothDeviceFound](/api/system/bluetooth.html#onbluetoothdevicefound)|监听寻找到新设备的事件 |
-|[uni.stopBluetoothDevicesDiscovery](/api/system/bluetooth.html#stopbluetoothdevicesdiscovery)|停止搜寻|
-|[uni.onBluetoothAdapterStateChange](/api/system/bluetooth.html#onbluetoothadapterstatechange)|监听蓝牙适配器状态变化事件|
-|[uni.getConnectedBluetoothDevices](/api/system/bluetooth.html#getconnectedbluetoothdevices)|根据 uuid 获取处于已连接状态的设备|
-|[uni.getBluetoothDevices](/api/system/bluetooth.html#getbluetoothdevices)|获取已发现的蓝牙设备|
-|[uni.getBluetoothAdapterState](/api/system/bluetooth.html#getbluetoothadapterstate)|获取本机蓝牙适配器状态|
-|[uni.closeBluetoothAdapter](/api/system/bluetooth.html#closebluetoothadapter)|关闭蓝牙模块|
+|[uni.openBluetoothAdapter](/api/system/bluetooth?id=openbluetoothadapter)|初始化蓝牙模块|
+|[uni.startBluetoothDevicesDiscovery](/api/system/bluetooth?id=startbluetoothdevicesdiscovery)|搜寻附近的蓝牙外围设备|
+|[uni.onBluetoothDeviceFound](/api/system/bluetooth?id=onbluetoothdevicefound)|监听寻找到新设备的事件 |
+|[uni.stopBluetoothDevicesDiscovery](/api/system/bluetooth?id=stopbluetoothdevicesdiscovery)|停止搜寻|
+|[uni.onBluetoothAdapterStateChange](/api/system/bluetooth?id=onbluetoothadapterstatechange)|监听蓝牙适配器状态变化事件|
+|[uni.getConnectedBluetoothDevices](/api/system/bluetooth?id=getconnectedbluetoothdevices)|根据 uuid 获取处于已连接状态的设备|
+|[uni.getBluetoothDevices](/api/system/bluetooth?id=getbluetoothdevices)|获取已发现的蓝牙设备|
+|[uni.getBluetoothAdapterState](/api/system/bluetooth?id=getbluetoothadapterstate)|获取本机蓝牙适配器状态|
+|[uni.closeBluetoothAdapter](/api/system/bluetooth?id=closebluetoothadapter)|关闭蓝牙模块|
##### 低耗蓝牙
|API|说明|
|:-|:-|
-|[uni.writeBLECharacteristicValue](/api/system/ble.html#writeblecharacteristicvalue)|向低功耗蓝牙设备特征值中写入二进制数据|
-|[uni.readBLECharacteristicValue](/api/system/ble.html#readblecharacteristicvalue)|读取低功耗蓝牙设备的特征值的二进制数据值|
-|[uni.onBLEConnectionStateChange](/api/system/ble.html#onbleconnectionstatechange)|监听低功耗蓝牙连接状态的改变事件|
-|[uni.onBLECharacteristicValueChange](/api/system/ble.html#onblecharacteristicvaluechange)|监听低功耗蓝牙设备的特征值变化事件|
-|[uni.notifyBLECharacteristicValueChange](/api/system/ble.html#notifyblecharacteristicvaluechange)|启用蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征|
-|[uni.getBLEDeviceServices](/api/system/ble.html#getbledeviceservices)|获取蓝牙设备所有服务(service)|
-|[uni.getBLEDeviceCharacteristics](/api/system/ble.html#getbledevicecharacteristics)|获取蓝牙设备某个服务中所有特征值(characteristic)|
-|[uni.createBLEConnection](/api/system/ble.html#createbleconnection)|连接低功耗蓝牙设备|
-|[uni.closeBLEConnection](/api/system/ble.html#closebleconnection)|断开与低功耗蓝牙设备的连接|
+|[uni.writeBLECharacteristicValue](/api/system/ble?id=writeblecharacteristicvalue)|向低功耗蓝牙设备特征值中写入二进制数据|
+|[uni.readBLECharacteristicValue](/api/system/ble?id=readblecharacteristicvalue)|读取低功耗蓝牙设备的特征值的二进制数据值|
+|[uni.onBLEConnectionStateChange](/api/system/ble?id=onbleconnectionstatechange)|监听低功耗蓝牙连接状态的改变事件|
+|[uni.onBLECharacteristicValueChange](/api/system/ble?id=onblecharacteristicvaluechange)|监听低功耗蓝牙设备的特征值变化事件|
+|[uni.notifyBLECharacteristicValueChange](/api/system/ble?id=notifyblecharacteristicvaluechange)|启用蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征|
+|[uni.getBLEDeviceServices](/api/system/ble?id=getbledeviceservices)|获取蓝牙设备所有服务(service)|
+|[uni.getBLEDeviceCharacteristics](/api/system/ble?id=getbledevicecharacteristics)|获取蓝牙设备某个服务中所有特征值(characteristic)|
+|[uni.createBLEConnection](/api/system/ble?id=createbleconnection)|连接低功耗蓝牙设备|
+|[uni.closeBLEConnection](/api/system/ble?id=closebleconnection)|断开与低功耗蓝牙设备的连接|
##### iBeacon
|API|说明|
|:-|:-|
-|[uni.onBeaconServiceChange](/api/system/ibeacon.html#onbeaconservicechange)|监听 iBeacon 服务状态变化事件|
-|[uni.onBeaconUpdate](/api/system/ibeacon.html#onbeaconupdate)|监听 iBeacon 设备更新事件|
-|[uni.getBeacons](/api/system/ibeacon.html#getbeacons)|获取所有已搜索到的 iBeacon 设备|
-|[uni.startBeaconDiscovery](/api/system/ibeacon.html#startbeacondiscovery)|停止搜索附近的 iBeacon 设备|
-|[uni.stopBeaconDiscovery](/api/system/ibeacon.html#stopbeacondiscovery)|开始搜索附近的 iBeacon 设备|
+|[uni.onBeaconServiceChange](/api/system/ibeacon?id=onbeaconservicechange)|监听 iBeacon 服务状态变化事件|
+|[uni.onBeaconUpdate](/api/system/ibeacon?id=onbeaconupdate)|监听 iBeacon 设备更新事件|
+|[uni.getBeacons](/api/system/ibeacon?id=getbeacons)|获取所有已搜索到的 iBeacon 设备|
+|[uni.startBeaconDiscovery](/api/system/ibeacon?id=startbeacondiscovery)|停止搜索附近的 iBeacon 设备|
+|[uni.stopBeaconDiscovery](/api/system/ibeacon?id=stopbeacondiscovery)|开始搜索附近的 iBeacon 设备|
##### 生物认证
|API|说明|
|:-|:-|
-|[uni.startSoterAuthentication](/api/system/authentication.html#startsoterauthentication)|开始生物认证|
-|[uni.checkIsSupportSoterAuthentication](/api/system/authentication.html#checkissupportsoterauthentication)|获取本机支持的生物认证方式|
-|[uni.checkIsSoterEnrolledInDevice](/api/system/authentication.html#checkissoterenrolledindevice)|获取设备内是否录入如指纹等生物信息的接口|
+|[uni.startSoterAuthentication](/api/system/authentication?id=startsoterauthentication)|开始生物认证|
+|[uni.checkIsSupportSoterAuthentication](/api/system/authentication?id=checkissupportsoterauthentication)|获取本机支持的生物认证方式|
+|[uni.checkIsSoterEnrolledInDevice](/api/system/authentication?id=checkissoterenrolledindevice)|获取设备内是否录入如指纹等生物信息的接口|
#### 界面
##### 交互反馈
|API|说明|
|:-|:-|
-|[uni.showToast](ui/prompt.html#showtoast)|显示提示框|
-|[uni.showLoading](ui/prompt.html#showloading)|显示加载提示框|
-|[uni.hideToast](ui/prompt.html#hidetoast)|隐藏提示框|
-|[uni.hideLoading](ui/prompt.html#hideloading)|隐藏加载提示框|
-|[uni.showModal](ui/prompt.html#showmodal)|显示模态弹窗|
-|[uni.showActionSheet](ui/prompt.html#showactionsheet)|显示菜单列表|
+|[uni.showToast](ui/prompt?id=showtoast)|显示提示框|
+|[uni.showLoading](ui/prompt?id=showloading)|显示加载提示框|
+|[uni.hideToast](ui/prompt?id=hidetoast)|隐藏提示框|
+|[uni.hideLoading](ui/prompt?id=hideloading)|隐藏加载提示框|
+|[uni.showModal](ui/prompt?id=showmodal)|显示模态弹窗|
+|[uni.showActionSheet](ui/prompt?id=showactionsheet)|显示菜单列表|
##### 设置导航条
|API|说明|
|:-|:-|
-|[uni.setNavigationBarTitle](ui/navigationbar.html#setnavigationbartitle)|设置当前页面标题|
-|[uni.setNavigationBarColor](/api/ui/navigationbar.html#setnavigationbarcolor)|设置页面导航条颜色|
-|[uni.showNavigationBarLoading](ui/navigationbar.html#shownavigationbarloading)|显示导航条加载动画|
-|[uni.hideNavigationBarLoading](ui/navigationbar.html#hidenavigationbarloading)|隐藏导航条加载动画|
+|[uni.setNavigationBarTitle](ui/navigationbar?id=setnavigationbartitle)|设置当前页面标题|
+|[uni.setNavigationBarColor](/api/ui/navigationbar?id=setnavigationbarcolor)|设置页面导航条颜色|
+|[uni.showNavigationBarLoading](ui/navigationbar?id=shownavigationbarloading)|显示导航条加载动画|
+|[uni.hideNavigationBarLoading](ui/navigationbar?id=hidenavigationbarloading)|隐藏导航条加载动画|
##### 设置TabBar
|API|说明|
|:-|:-|
-|[uni.setTabBarItem](/api/ui/tabbar.html#settabbaritem)|动态设置 tabBar 某一项的内容|
-|[uni.setTabBarStyle](/api/ui/tabbar.html#settabbarstyle)|动态设置 tabBar 的整体样式|
-|[uni.hideTabBar](/api/ui/tabbar.html#hidetabbar)|隐藏 tabBar|
-|[uni.showTabBar](/api/ui/tabbar.html#showtabbar)|显示 tabBar|
-|[uni.setTabBarBadge](/api/ui/tabbar.html#settabbarbadge)|为 tabBar 某一项的右上角添加文本|
-|[uni.removeTabBarBadge](/api/ui/tabbar.html#removetabbarbadge)|移除 tabBar 某一项右上角的文本|
-|[uni.showTabBarRedDot](/api/ui/tabbar.html#showtabbarreddot)|显示 tabBar 某一项的右上角的红点|
-|[uni.hideTabBarRedDot](/api/ui/tabbar.html#hidetabbarreddot)|隐藏 tabBar 某一项的右上角的红点|
+|[uni.setTabBarItem](/api/ui/tabbar?id=settabbaritem)|动态设置 tabBar 某一项的内容|
+|[uni.setTabBarStyle](/api/ui/tabbar?id=settabbarstyle)|动态设置 tabBar 的整体样式|
+|[uni.hideTabBar](/api/ui/tabbar?id=hidetabbar)|隐藏 tabBar|
+|[uni.showTabBar](/api/ui/tabbar?id=showtabbar)|显示 tabBar|
+|[uni.setTabBarBadge](/api/ui/tabbar?id=settabbarbadge)|为 tabBar 某一项的右上角添加文本|
+|[uni.removeTabBarBadge](/api/ui/tabbar?id=removetabbarbadge)|移除 tabBar 某一项右上角的文本|
+|[uni.showTabBarRedDot](/api/ui/tabbar?id=showtabbarreddot)|显示 tabBar 某一项的右上角的红点|
+|[uni.hideTabBarRedDot](/api/ui/tabbar?id=hidetabbarreddot)|隐藏 tabBar 某一项的右上角的红点|
##### 背景
|API|说明|
|:-|:-|
-|[uni.setBackgroundColor](/api/ui/bgcolor.html#setbackgroundcolor)|动态设置窗口的背景色。|
-|[uni.setBackgroundTextStyle](/api/ui/bgcolor.html#setbackgroundtextstyle)|动态设置下拉背景字体、loading 图的样式。|
+|[uni.setBackgroundColor](/api/ui/bgcolor?id=setbackgroundcolor)|动态设置窗口的背景色。|
+|[uni.setBackgroundTextStyle](/api/ui/bgcolor?id=setbackgroundtextstyle)|动态设置下拉背景字体、loading 图的样式。|
##### 动画
|API|说明|
|:-|:-|
-|[uni.createAnimation](/api/ui/animation.html#createanimation)|创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。|
+|[uni.createAnimation](/api/ui/animation?id=createanimation)|创建一个动画实例 animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。|
##### 滚动
|API|说明|
|:-|:-|
-|[uni.pageScrollTo](/api/ui/scroll.html#pagescrollto)|将页面滚动到目标位置。|
+|[uni.pageScrollTo](/api/ui/scroll?id=pagescrollto)|将页面滚动到目标位置。|
##### 绘画
@@ -517,41 +517,41 @@ uni.addInterceptor({
|API|说明|
|:-|:-|
-|[onPullDownRefresh](/api/ui/pulldown.html#onpulldownrefresh)|监听该页面用户下拉刷新事件|
-|[uni.startPullDownRefresh](/api/ui/pulldown.html#startpulldownrefresh)|开始下拉刷新|
-|[uni.stopPullDownRefresh](/api/ui/pulldown.html#stoppulldownrefresh)|停止当前页面下拉刷新|
+|[onPullDownRefresh](/api/ui/pulldown?id=onpulldownrefresh)|监听该页面用户下拉刷新事件|
+|[uni.startPullDownRefresh](/api/ui/pulldown?id=startpulldownrefresh)|开始下拉刷新|
+|[uni.stopPullDownRefresh](/api/ui/pulldown?id=stoppulldownrefresh)|停止当前页面下拉刷新|
##### 节点信息
|API|说明|
|:-|:-|
-|[uni.createSelectorQuery](ui/nodes-info.html#createselectorquery)|创建查询请求|
-|[selectorQuery.select](/api/ui/nodes-info.html#selectorquery-对象的方法列表)|根据选择器选择单个节点|
-|[selectorQuery.selectAll](/api/ui/nodes-info.html#selectorquery-对象的方法列表)|根据选择器选择全部节点|
-|[selectorQuery.selectViewport](/api/ui/nodes-info.html#selectorquery-对象的方法列表)|选择显示区域|
-|[selectorQuery.exec](/api/ui/nodes-info.html#selectorquery-对象的方法列表)|执行查询请求|
-|[nodesRef.boundingClientRect](/api/ui/nodes-info.html#nodesref-对象的方法列表)|获取布局位置和尺寸|
-|[nodesRef.scrollOffset](/api/ui/nodes-info.html#nodesref-对象的方法列表)|获取滚动位置|
-|[nodesRef.fields](/api/ui/nodes-info.html#nodesref-对象的方法列表)|获取任意字段|
+|[uni.createSelectorQuery](ui/nodes-info?id=createselectorquery)|创建查询请求|
+|[selectorQuery.select](/api/ui/nodes-info?id=selectorquery-对象的方法列表)|根据选择器选择单个节点|
+|[selectorQuery.selectAll](/api/ui/nodes-info?id=selectorquery-对象的方法列表)|根据选择器选择全部节点|
+|[selectorQuery.selectViewport](/api/ui/nodes-info?id=selectorquery-对象的方法列表)|选择显示区域|
+|[selectorQuery.exec](/api/ui/nodes-info?id=selectorquery-对象的方法列表)|执行查询请求|
+|[nodesRef.boundingClientRect](/api/ui/nodes-info?id=nodesref-对象的方法列表)|获取布局位置和尺寸|
+|[nodesRef.scrollOffset](/api/ui/nodes-info?id=nodesref-对象的方法列表)|获取滚动位置|
+|[nodesRef.fields](/api/ui/nodes-info?id=nodesref-对象的方法列表)|获取任意字段|
##### 节点布局相交状态
|API|说明|
|:-|:-|
-|[uni.createIntersectionObserver](ui/intersection-observer.html#createintersectionobserver)|创建 IntersectionObserver 对象|
-|[intersectionObserver.relativeTo](/api/ui/intersection-observer.html#intersectionobserver-对象的方法列表)|指定参照节点|
-|[intersectionObserver.relativeToViewport](/api/ui/intersection-observer.html#intersectionobserver-对象的方法列表)|指定页面显示区域作为参照区域|
-|[intersectionObserver.observe](/api/ui/intersection-observer.html#intersectionobserver-对象的方法列表)|指定目标节点并开始监听|
-|[intersectionObserver.disconnect](/api/ui/intersection-observer.html#intersectionobserver-对象的方法列表)|停止监听|
+|[uni.createIntersectionObserver](ui/intersection-observer?id=createintersectionobserver)|创建 IntersectionObserver 对象|
+|[intersectionObserver.relativeTo](/api/ui/intersection-observer?id=intersectionobserver-对象的方法列表)|指定参照节点|
+|[intersectionObserver.relativeToViewport](/api/ui/intersection-observer?id=intersectionobserver-对象的方法列表)|指定页面显示区域作为参照区域|
+|[intersectionObserver.observe](/api/ui/intersection-observer?id=intersectionobserver-对象的方法列表)|指定目标节点并开始监听|
+|[intersectionObserver.disconnect](/api/ui/intersection-observer?id=intersectionobserver-对象的方法列表)|停止监听|
#### 路由
|API|说明|
|:-|:-|
-|[uni.navigateTo](/api/router.html#navigateto)|保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面|
-|[uni.redirectTo](/api/router.html#redirectto)|关闭当前页面,跳转到应用内的某个页面|
-|[uni.reLaunch](/api/router.html#relaunch)|关闭所有页面,打开到应用内的某个页面|
-|[uni.switchTab](/api/router.html#switchtab)|跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面|
-|[uni.navigateBack](/api/router.html#navigateback)|关闭当前页面,返回上一页面或多级页面|
+|[uni.navigateTo](/api/router?id=navigateto)|保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面|
+|[uni.redirectTo](/api/router?id=redirectto)|关闭当前页面,跳转到应用内的某个页面|
+|[uni.reLaunch](/api/router?id=relaunch)|关闭所有页面,打开到应用内的某个页面|
+|[uni.switchTab](/api/router?id=switchtab)|跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面|
+|[uni.navigateBack](/api/router?id=navigateback)|关闭当前页面,返回上一页面或多级页面|
@@ -559,85 +559,85 @@ uni.addInterceptor({
|API|说明|
|:-|:-|
-|[uni.getProvider](plugins/provider.html#getprovider)|获取服务供应商|
-|[uni.login](plugins/login.html#login)|登录|
-|[uni.getUserInfo](plugins/login.html#getuserinfo)|获取用户信息|
-|[uni.getuserprofile](plugins/login.html#getuserprofile)|获取用户信息。每次请求都会弹出授权窗口,用户同意后返回 userInfo|
-|[uni.checkSession](plugins/login.html#checkSession)|检查登录状态是否过期|
-|[uni.preLogin](plugins/login.html#prelogin)|预登录|
-|[uni.closeAuthView](plugins/login.html#closeauthview)|关闭一键登录页面|
-|[uni.getCheckBoxState](plugins/login.html#getcheckboxstate)|获取一键登录条款勾选框状态|
-|[uni.getUniverifyManager](plugins/login.html#getUniverifyManager)|获取全局唯一的一键登录管理器 univerifyManager|
-|[uni.share](plugins/share.html#share)|分享|
-|[uni.shareWithSystem](plugins/share.html#sharewithsystem)|使用系统分享|
-|[uni.requestPayment](plugins/payment.html#requestpayment)|支付|
-|[uni.subscribePush](plugins/push.html#subscribepush)|开启推送|
-|[uni.unsubscribePush](plugins/push.html#unsubscribepush)|关闭推送|
-|[uni.onPush](plugins/push.html#onpush)|监听透传数据|
-|[uni.offPush](plugins/push.html#offpush)|移除监听透传数据|
+|[uni.getProvider](plugins/provider?id=getprovider)|获取服务供应商|
+|[uni.login](plugins/login?id=login)|登录|
+|[uni.getUserInfo](plugins/login?id=getuserinfo)|获取用户信息|
+|[uni.getuserprofile](plugins/login?id=getuserprofile)|获取用户信息。每次请求都会弹出授权窗口,用户同意后返回 userInfo|
+|[uni.checkSession](plugins/login?id=checkSession)|检查登录状态是否过期|
+|[uni.preLogin](plugins/login?id=prelogin)|预登录|
+|[uni.closeAuthView](plugins/login?id=closeauthview)|关闭一键登录页面|
+|[uni.getCheckBoxState](plugins/login?id=getcheckboxstate)|获取一键登录条款勾选框状态|
+|[uni.getUniverifyManager](plugins/login?id=getUniverifyManager)|获取全局唯一的一键登录管理器 univerifyManager|
+|[uni.share](plugins/share?id=share)|分享|
+|[uni.shareWithSystem](plugins/share?id=sharewithsystem)|使用系统分享|
+|[uni.requestPayment](plugins/payment?id=requestpayment)|支付|
+|[uni.subscribePush](plugins/push?id=subscribepush)|开启推送|
+|[uni.unsubscribePush](plugins/push?id=unsubscribepush)|关闭推送|
+|[uni.onPush](plugins/push?id=onpush)|监听透传数据|
+|[uni.offPush](plugins/push?id=offpush)|移除监听透传数据|
#### 平台扩展
|API|说明|
|:-|:-|
-|[uni.requireNativePlugin](/api/extend/native-plugin.html#requirenativeplugin)|引入 App 原生插件|
+|[uni.requireNativePlugin](/api/extend/native-plugin?id=requirenativeplugin)|引入 App 原生插件|
#### 其他
##### 授权
|API|说明|
|:-|:-|
-|[uni.authorize](/api/other/authorize.html#authorize)|提前向用户发起授权请求|
+|[uni.authorize](/api/other/authorize?id=authorize)|提前向用户发起授权请求|
##### 设置
|API|说明|
|:-|:-|
-|[uni.openSetting](/api/other/setting.html#opensetting)|调起客户端小程序设置界面,返回用户设置的操作结果。|
-|[uni.getSetting](/api/other/setting.html#getsetting)|获取用户的当前设置。|
+|[uni.openSetting](/api/other/setting?id=opensetting)|调起客户端小程序设置界面,返回用户设置的操作结果。|
+|[uni.getSetting](/api/other/setting?id=getsetting)|获取用户的当前设置。|
##### 收货地址
|API|说明|
|:-|:-|
-|[uni.chooseAddress](/api/other/choose-address.html#chooseaddress)|获取用户收货地址|
+|[uni.chooseAddress](/api/other/choose-address?id=chooseaddress)|获取用户收货地址|
##### 获取发票抬头
|API|说明|
|:-|:-|
-|[uni.chooseInvoiceTitle](/api/other/invoice-title.html#chooseinvoicetitle)|选择用户的发票抬头,需要用户授权 scope.invoiceTitle。|
+|[uni.chooseInvoiceTitle](/api/other/invoice-title?id=chooseinvoicetitle)|选择用户的发票抬头,需要用户授权 scope.invoiceTitle。|
##### 小程序跳转
|API|说明|
|:-|:-|
-|[uni.navigateToMiniProgram](/api/other/open-miniprogram.html#navigatetominiprogram)|打开另一个小程序。|
-|[uni.navigateBackMiniProgram](/api/other/open-miniprogram.html#navigatebackminiprogram)|跳转回上一个小程序,只有当另一个小程序跳转到当前小程序时才会能调用成功。|
+|[uni.navigateToMiniProgram](/api/other/open-miniprogram?id=navigatetominiprogram)|打开另一个小程序。|
+|[uni.navigateBackMiniProgram](/api/other/open-miniprogram?id=navigatebackminiprogram)|跳转回上一个小程序,只有当另一个小程序跳转到当前小程序时才会能调用成功。|
##### 模板消息
|API|说明|
|:-|:-|
-|[addTemplate](/api/other/template.html#addtemplate)|组合模板并添加至帐号下的个人模板库。|
-|[deleteTemplate](/api/other/template.html#deletetemplate)|删除帐号下的某个模板。|
-|[getTemplateLibraryById](/api/other/template.html#gettemplatelibrarybyid)|获取模板库某个模板标题下关键词库。|
-|[getTemplateLibraryList](/api/other/template.html#gettemplatelibrarylist)|获取APP模板库标题列表|
-|[getTemplateList](/api/other/template.html#gettemplatelist)|获取帐号下已存在的模板列表。|
-|[sendTemplateMessage](/api/other/template.html#sendtemplatemessage)|发送模板消息|
-|[alipay.open.app.mini.templatemessage.send](/api/other/template.html#alipayopenappminitemplatemessagesend)|支付宝小程序通过 openapi 给用户触达消息,主要为支付后的触达(通过消费id)和用户提交表单后的触达(通过formId)。|
+|[addTemplate](/api/other/template?id=addtemplate)|组合模板并添加至帐号下的个人模板库。|
+|[deleteTemplate](/api/other/template?id=deletetemplate)|删除帐号下的某个模板。|
+|[getTemplateLibraryById](/api/other/template?id=gettemplatelibrarybyid)|获取模板库某个模板标题下关键词库。|
+|[getTemplateLibraryList](/api/other/template?id=gettemplatelibrarylist)|获取APP模板库标题列表|
+|[getTemplateList](/api/other/template?id=gettemplatelist)|获取帐号下已存在的模板列表。|
+|[sendTemplateMessage](/api/other/template?id=sendtemplatemessage)|发送模板消息|
+|[alipay.open.app.mini.templatemessage.send](/api/other/template?id=alipayopenappminitemplatemessagesend)|支付宝小程序通过 openapi 给用户触达消息,主要为支付后的触达(通过消费id)和用户提交表单后的触达(通过formId)。|
##### 小程序更新
|API|说明|
|:-|:-|
-|[uni.getUpdateManager](/api/other/update.html#getupdatemanager)|返回全局唯一的版本更新管理器对象: updateManager,用于管理小程序更新。|
+|[uni.getUpdateManager](/api/other/update?id=getupdatemanager)|返回全局唯一的版本更新管理器对象: updateManager,用于管理小程序更新。|
##### 调试
|API|说明|
|:-|:-|
-|[uni.setEnableDebug](/api/other/set-enable-debug.html#setenabledebug)|设置是否打开调试开关。此开关对正式版也能生效。|
+|[uni.setEnableDebug](/api/other/set-enable-debug?id=setenabledebug)|设置是否打开调试开关。此开关对正式版也能生效。|
##### 获取第三方平台数据
|API|说明|
|:-|:-|
-|[uni.getExtConfig](/api/other/get-extconfig.html#getextconfig)|获取第三方平台自定义的数据字段。|
-|[uni.getExtConfigSync](/api/other/get-extconfig.html#getextconfigsync)|uni.getExtConfig 的同步版本。|
+|[uni.getExtConfig](/api/other/get-extconfig?id=getextconfig)|获取第三方平台自定义的数据字段。|
+|[uni.getExtConfigSync](/api/other/get-extconfig?id=getextconfigsync)|uni.getExtConfig 的同步版本。|
diff --git a/docs/api/location/map.md b/docs/api/location/map.md
index 4ecbd95053be5db18cb4b9de48a442db063edb28..a66be62edf868f4dcafa1da490b0df9823f2acf4 100644
--- a/docs/api/location/map.md
+++ b/docs/api/location/map.md
@@ -49,6 +49,7 @@ mapContext
- nvue没有`$getAppMap()`,请使用`createMapContext`
- `uni-app`中使用原生地图无需提供占位div,得到`$getAppMap()`后直接js使用即可。
+
**getCenterLocation 的 OBJECT 参数列表**
|参数|类型|必填|说明|
@@ -185,6 +186,20 @@ mapContext
|complete |function | |否 |接口调用结束的回调函数(调用成功、失败都会执行) |
+**mapContext (地图服务商差异)**
+
+|属性 |说明 |高德是否支持 |google地图是否支持 |
+|:---- |:---- |:---- |:---- |
+|setLocMarkerIcon |设置定位点图标,支持网络路径、本地路径、代码包路径 |已支持 |不支持 |
+|moveAlong |沿指定路径移动 marker,用于轨迹回放等场景 |已支持(不支持autoRotate属性) |已支持 |
+|addCustomLayer |添加个性化图层 |不支持 |不支持 |
+|removeVisualLayer |移除可视化图层 |不支持 |不支持 |
+|fromScreenLocation |获取屏幕上的点对应的经纬度,坐标原点为地图左上角 |不支持 |不支持 |
+|removeCustomLayer |移除个性化图层 |不支持 |不支持 |
+|setCenterOffset |设置地图中心点偏移,向后向下为增长,屏幕比例范围(0.25~0.75) |不支持 |不支持 |
+|toScreenLocation |获取经纬度对应的屏幕坐标,坐标原点为地图左上角。 |不支持 |不支持 |
+
+
**MapContext.on()** (app-nvue、微信小程序支持)
`markerClusterCreate`
diff --git a/docs/collocation/package.md b/docs/collocation/package.md
index 15b9f5a19d8be27460ff9d030593570e50cd72eb..ae992692a5dca22ed64238f444c606df72626412 100644
--- a/docs/collocation/package.md
+++ b/docs/collocation/package.md
@@ -44,7 +44,7 @@ package.json扩展配置用法:
Tips:
- `UNI_PLATFORM`仅支持填写`uni-app`默认支持的基准平台,目前仅限如下枚举值:`h5`、`mp-weixin`、`mp-alipay`、`mp-baidu`、`mp-toutiao`、`mp-qq`
-- `browser` 仅在`UNI_PLATFORM`为`h5`时有效,目前仅限如下枚举值:`chrome`、`firefox`、`id`、`edge`、`safari`、`hbuilderx`
+- `browser` 仅在`UNI_PLATFORM`为`h5`时有效,目前仅限如下枚举值:`chrome`、`firefox`、`ie`、`edge`、`safari`、`hbuilderx`
- `package.json`文件中不允许出现注释,否则扩展配置无效
- `vue-cli`需更新到最新版,HBuilderX需升级到 2.1.6+ 版本
diff --git a/docs/component/map.md b/docs/component/map.md
index aa17d13726350bea62ad3ad805cef99231149754..ab290d77c18ca7ec8bc3d125692bb740c988ddf2 100644
--- a/docs/component/map.md
+++ b/docs/component/map.md
@@ -237,7 +237,48 @@ export default {
}
```
-map 组件相关操作的 JS API:[uni.createMapContext](/api/location/map?id=createmapcontext)
+
+## 地图服务商差异
+
+### Map 地图组件
+
+|属性 |说明 |高德是否支持 |google地图是否支持 |
+|:---- |:---- |:---- |:---- |
+|subkey |个性化地图使用的key |不支持 |不支持 |
+|show-scale |显示比例尺 |已支持 |不支持 |
+|enable-poi |是否展示 POI 点 |已支持 |不支持 |
+|labeltap |点击label时触发 |已支持 |Android支持iOS不支持 |
+|poitap |点击地图poi点时触发 |已支持 |Android不支持 iOS支持 |
+
+### marker
+
+|属性 |说明 |高德是否支持 |google地图是否支持 |
+|:---- |:---- |:---- |:---- |
+|label |为标记点旁边增加标签 |已支持 |Android支持 iOS不支持 |
+
+### marker 上的气泡 callout
+
+|属性 |说明 |高德是否支持 |google地图是否支持 |
+|:---- |:---- |:---- |:---- |
+|display |'BYCLICK':点击显示; 'ALWAYS':常显 |已支持 |Android支持iOS只支持 'BYCLICK' |
+
+### marker 上的自定义气泡 customCallout
+
+|属性 |说明 |高德是否支持 |google地图是否支持 |
+|:---- |:---- |:---- |:---- |
+|display|'BYCLICK':点击显示; 'ALWAYS':常显 |已支持 |Android支持iOS只支持 'BYCLICK' |
+
+### polyline
+
+|属性 |说明 |高德是否支持 |google地图是否支持 |
+|:---- |:---- |:---- |:---- |
+|colorList |彩虹线 |已支持 |Android不支持 iOS支持 |
+|dottedLine |是否虚线 |已支持 |Android已支持 iOS不支持 |
+|arrowLine |带箭头的线 |已支持 |Android不支持 iOS支持 |
+|arrowIconPath|更换箭头图标 |已支持 |Android不支持 iOS支持 |
+
+
+map 组件相关操作的 JS API:[uni.createMapContext](api/location/map?id=createmapcontext)
nvue map 更换箭头图标格式参考: [https://ask.dcloud.net.cn/article/37901](https://ask.dcloud.net.cn/article/37901)
**注意事项**
diff --git a/docs/component/uniui/uni-popup.md b/docs/component/uniui/uni-popup.md
index 4c24fd81db57c65a9af53838734c61f22da9f00c..f90336f8c341439cf5a0f9f45e0431679f05fbb1 100644
--- a/docs/component/uniui/uni-popup.md
+++ b/docs/component/uniui/uni-popup.md
@@ -1,312 +1,312 @@
-
-> **组件名:uni-popup**
-> 代码块: `uPopup`
-> 关联组件:`uni-popup-dialog`,`uni-popup-message`,`uni-popup-share`,`uni-transition`
->
-> [点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uni-popup)
-
-弹出层组件,在应用中弹出一个消息提示窗口、提示框等
-
-
-> **注意事项**
-> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
-> - 组件需要依赖 `sass` 插件 ,请自行手动安装
-> - `uni-popup-message` 、 `uni-popup-dialog` 等扩展ui组件,需要和 `uni-popup` 配套使用,暂不支持单独使用
-> - `nvue` 中使用 `uni-popup` 时,尽量将组件置于其他元素后面,避免出现层级问题
-> - `uni-popup` 并不能完全阻止页面滚动,可在打开 `uni-popup` 的时候手动去做一些处理,禁止页面滚动
-> - 如果想在页面渲染完毕后就打开 `uni-popup` ,请在 `onReady` 或 `mounted` 生命周期内调用,确保组件渲染完毕
-> - 在微信小程序开发者工具中,启用真机调试,popup 会延时出现,是因为 setTimeout 在真机调试中的延时问题导致的,预览和发布小程序不会出现此问题
-> - 使用 `npm` 方式引入组件,如果确认引用正确,但是提示未注册组件或显示不正常,请尝试重新编译项目
-> - `uni-popup` 中尽量不要使用 `scroll-view` 嵌套过多的内容,可能会影响组件的性能,导致组件无法打开或者打开卡顿
-> - `uni-popup` 不会覆盖原生 tabbar 和原生导航栏
-> - app-vue 中组件无法遮盖 video ,ad 等原生组件 ,建议使用 nvue
-> - 组件支持 nvue ,需要在 `manifest.json > app-plus` 节点下配置 `"nvueStyleCompiler" : "uni-app"`
-
-### 基本用法
-
-**示例**
-
-```html
-
-底部弹出 Popup
-```
-
-```javascript
-export default {
- methods:{
- open(){
- // 通过组件定义的ref调用uni-popup方法 ,如果传入参数 ,type 属性将失效 ,仅支持 ['top','left','bottom','right','center']
- this.$refs.popup.open('top')
- }
- }
-}
-
-```
-
-### 设置主窗口背景色
-
-在大多数场景下,并不需要设置 `background-color` 属性,因为`uni-popup`的主窗口默认是透明的,在向里面插入内容的时候 ,样式完全交由用户定制,如果设置了背景色 ,例如 `uni-popup-dialog` 中的圆角就很难去实现,不设置背景色,更适合用户去自由发挥。
-
-而也有特例,需要我们主动去设置背景色,例如 `type = 'bottom'` 的时候 ,在异型屏中遇到了底部安全区问题(如 iphone 11),因为 `uni-popup`的主要内容避开了安全区(设置`safe-area:true`),导致底部的颜色我们无法自定义,这时候使用 `background-color` 就可以解决这个问题。
-
-**示例**
-
-```html
-
-底部弹出 Popup
-```
-
-### 禁用打开动画
-在某些场景 ,可能不希望弹层有动画效果 ,只需要将 `animation` 属性设置为 `false` 即可以关闭动画。
-
-**示例**
-
-```html
-
-中间弹出 Popup
-```
-
-### 禁用点击遮罩关闭
-默认情况下,点击遮罩会自动关闭`uni-popup`,如不想点击关闭,只需将`mask-click`设置为`false`,这时候要关闭`uni-popup`,只能手动调用 `close` 方法。
-
-**示例**
-
-```html
-
-
- Popup
-
-
-```
-
-```javascript
-export default {
- data() {
- return {}
- },
- onReady() {},
- methods: {
- open() {
- this.$refs.popup.open('top')
- },
- close() {
- this.$refs.popup.close()
- }
- }
-}
-
-```
-
-## API
-
-### Popup Props
-
-|属性名|类型|默认值|说明|
-|:-:|:-:|:-:|:-:|
-|animation|Boolean|true|是否开启动画|
-|type|String|'center'|弹出方式|
-|mask-click **[即将废弃]**|Boolean|true|蒙版点击是否关闭弹窗|
-|is-mask-click **[1.7.4新增]**|Boolean|true|蒙版点击是否关闭弹窗|
-|mask-background-color **[1.7.4新增]**|rgba|rgba(0,0,0,0.4)|蒙版颜色,建议使用 rgba 颜色值|
-|background-color|String|'none'|主窗口背景色|
-|safe-area|Boolean|true|是否适配底部安全区|
-
-#### Type Options
-
-|属性名|说明|
-|:-:| :-:|
-|top|顶部弹出 |
-|center|居中弹出|
-|bottom|底部弹出|
-|left|左侧弹出|
-|right|右侧弹出|
-|message|预置样式 :消息提示|
-|dialog|预置样式 :对话框|
-|share|预置样式 :底部弹出分享示例 |
-
-
-### Popup Methods
-
-|方法称名 |说明|参数|
-|:-:|:-:|:-:|
-|open|打开弹出层|open(String:type) ,如果参数可代替 type 属性|
-|close|关闭弹出层 |-|
-
-
-### Popup Events
-
-|事件称名|说明|返回值|
-|:-:|:-:|:-:|
-|change|组件状态发生变化触发|e={show: true|false,type:当前模式}|
-|maskClick|点击遮罩层触发|-|
-
-
-## 扩展组件说明
-`uni-popup` 其实并没有任何样式,只提供基础的动画效果,给用户一个弹出层解决方案,仅仅是这样并不能满足开发需求,所以我们提供了三种基础扩展样式
-
-### uni-popup-message 提示信息
-
-将 `uni-popup` 的`type`属性改为 `message`,并引入对应组件即可使用消息提示 ,*该组件不支持单独使用*
-
-**示例**
-
-```html
-
-
-
-```
-
-### PopupMessage Props
-
-|属性名|类型|默认值|说明|
-|:-:|:-:|:-:|:-:|
-|type|String|success|消息提示主题|
-|message|String|-|消息提示文字|
-|duration|Number|3000|消息显示时间,超过显示时间组件自动关闭,设置为0 将不会关闭,需手动调用 close 方法关闭|
-
-#### Type Options
-
-|属性名|说明|
-|:-:| :-:|
-|success|成功|
-|warn|警告|
-|error|失败|
-|info|消息|
-
-### PopupMessage Slots
-
-|名称|说明|
-|:-:|:-:|
-|default|消息内容,会覆盖 message 属性|
-
-### uni-popup-dialog 对话框
-
-将 `uni-popup` 的`type`属性改为 `dialog`,并引入对应组件即可使用对话框 ,*该组件不支持单独使用*
-
-**示例**
-
-```html
-
-
-
-
-```
-
-```javascript
-export default {
- methods: {
- open() {
- this.$refs.popup.open()
- },
- /**
- * 点击取消按钮触发
- * @param {Object} done
- */
- close() {
- // TODO 做一些其他的事情,before-close 为true的情况下,手动执行 close 才会关闭对话框
- // ...
- this.$refs.popup.close()
- },
- /**
- * 点击确认按钮触发
- * @param {Object} done
- * @param {Object} value
- */
- confirm(value) {
- // 输入框的值
- console.log(value)
- // TODO 做一些其他的事情,手动执行 close 才会关闭对话框
- // ...
- this.$refs.popup.close()
- }
- }
-}
-```
-
-### PopupDialog Props
-
-|属性名|类型|默认值|说明|
-|:-:|:-:|:-:|:-:|
-|type|String|success|对话框标题主题,可选值: success/warn/info/error|
-|mode|String|base| 对话框模式,可选值:base(提示对话框)/input(可输入对话框)|
-|title|String|-|对话框标题|
-|content|String|-|对话框内容,base模式下生效|
-|confirmText **[1.7.4新增]**|String|-|定义确定按钮文本|
-|cancelText **[1.7.4新增]**|String|-|定义取消按钮文本|
-|value| String\Number|-|输入框默认值,input模式下生效|
-|placeholder|String|-|输入框提示文字,input模式下生效|
-|before-close|Boolean|false | 是否拦截按钮事件,如为true,则不会关闭对话框,关闭需要手动执行 uni-popup 的 close 方法|
-
-#### PopupDialog Events
-
-|事件称名 |说明|返回值|
-|:-:|:-:|:-:|
-|close|点击dialog取消按钮触发|-|
-|confirm|点击dialog确定按钮触发|e={value:input模式下输入框的值}|
-
-### PopupDialog Slots
-
-|名称|说明|
-|:-:|:-:|
-|default|自定义内容,回覆盖原有的内容显示|
-
-### uni-popup-share 分享示例
-
-分享示例,不作为最终可使用的组件,只做为样式组件,供用户自行修改,`后续的开发计划是实现实际的分享逻辑,参数可配置`。
-
-将 `uni-popup` 的 `type` 属性改为 `share`,并引入对应组件即可使用 ,*该组件不支持单独使用*
-
-**示例**
-
-```html
-
-
-
-```
-
-### PopupShare Props
-
-|属性名|类型|默认值|说明|
-|:-:|:-:|:-:| :-: |
-|title|String|-|分享弹窗标题|
-|before-close|Boolean|false | 是否拦截按钮事件,如为true,则不会关闭对话框,关闭需要手动执行 uni-popup 的 close 方法|
-
-### PopupShare Events
-
-|事件称名|说明|返回值|
-|:-:|:-:|:-:|
-|select|选择触发|e = {item,index}:所选参数|
-
-**Tips**
-- share 分享组件,只是作为一个扩展示例,如果需要修改数据源,请到组件内修改
-
-
-
-## 禁止滚动穿透
-
-使用组件时,会发现内容部分滚动到底时,继续划动会导致底层页面的滚动,这就是滚动穿透。
-
-但由于平台自身原因,除了h5平台外 ,其他平台都不能在在组件内禁止滚动穿透,所以在微信小程序、App 平台,页面内需要用户特殊处理一下
-
-### 微信小程序/App
-在 `微信小程序/App` 平台可使用 `page-meta` 组件动态修改页面样式 ,
-
-需要在 data 中定义一个变量,用来表示 `uni-popup` 的开启关闭状态,并通过这个变量修改 `page-meta` 的 `overflow` 属性。
-
-在 `uni-popup` 的 `@change` 事件中可以接受到 `uni-popup` 的开启关闭状态 ,并赋值给上面的变量
-
-**下面是关键代码片段:**
-
-```html
-
+
+> **组件名:uni-popup**
+> 代码块: `uPopup`
+> 关联组件:`uni-popup-dialog`,`uni-popup-message`,`uni-popup-share`,`uni-transition`
+>
+> [点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uni-popup)
+
+弹出层组件,在应用中弹出一个消息提示窗口、提示框等
+
+
+> **注意事项**
+> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
+> - 组件需要依赖 `sass` 插件 ,请自行手动安装
+> - `uni-popup-message` 、 `uni-popup-dialog` 等扩展ui组件,需要和 `uni-popup` 配套使用,暂不支持单独使用
+> - `nvue` 中使用 `uni-popup` 时,尽量将组件置于其他元素后面,避免出现层级问题
+> - `uni-popup` 并不能完全阻止页面滚动,可在打开 `uni-popup` 的时候手动去做一些处理,禁止页面滚动
+> - 如果想在页面渲染完毕后就打开 `uni-popup` ,请在 `onReady` 或 `mounted` 生命周期内调用,确保组件渲染完毕
+> - 在微信小程序开发者工具中,启用真机调试,popup 会延时出现,是因为 setTimeout 在真机调试中的延时问题导致的,预览和发布小程序不会出现此问题
+> - 使用 `npm` 方式引入组件,如果确认引用正确,但是提示未注册组件或显示不正常,请尝试重新编译项目
+> - `uni-popup` 中尽量不要使用 `scroll-view` 嵌套过多的内容,可能会影响组件的性能,导致组件无法打开或者打开卡顿
+> - `uni-popup` 不会覆盖原生 tabbar 和原生导航栏
+> - app-vue 中组件无法遮盖 video ,ad 等原生组件 ,建议使用 nvue
+> - 组件支持 nvue ,需要在 `manifest.json > app-plus` 节点下配置 `"nvueStyleCompiler" : "uni-app"`
+
+### 基本用法
+
+**示例**
+
+```html
+
+底部弹出 Popup
+```
+
+```javascript
+export default {
+ methods:{
+ open(){
+ // 通过组件定义的ref调用uni-popup方法 ,如果传入参数 ,type 属性将失效 ,仅支持 ['top','left','bottom','right','center']
+ this.$refs.popup.open('top')
+ }
+ }
+}
+
+```
+
+### 设置主窗口背景色
+
+在大多数场景下,并不需要设置 `background-color` 属性,因为`uni-popup`的主窗口默认是透明的,在向里面插入内容的时候 ,样式完全交由用户定制,如果设置了背景色 ,例如 `uni-popup-dialog` 中的圆角就很难去实现,不设置背景色,更适合用户去自由发挥。
+
+而也有特例,需要我们主动去设置背景色,例如 `type = 'bottom'` 的时候 ,在异型屏中遇到了底部安全区问题(如 iphone 11),因为 `uni-popup`的主要内容避开了安全区(设置`safe-area:true`),导致底部的颜色我们无法自定义,这时候使用 `background-color` 就可以解决这个问题。
+
+**示例**
+
+```html
+
+底部弹出 Popup
+```
+
+### 禁用打开动画
+在某些场景 ,可能不希望弹层有动画效果 ,只需要将 `animation` 属性设置为 `false` 即可以关闭动画。
+
+**示例**
+
+```html
+
+中间弹出 Popup
+```
+
+### 禁用点击遮罩关闭
+默认情况下,点击遮罩会自动关闭`uni-popup`,如不想点击关闭,只需将`mask-click`设置为`false`,这时候要关闭`uni-popup`,只能手动调用 `close` 方法。
+
+**示例**
+
+```html
+
+
+ Popup
+
+
+```
+
+```javascript
+export default {
+ data() {
+ return {}
+ },
+ onReady() {},
+ methods: {
+ open() {
+ this.$refs.popup.open('top')
+ },
+ close() {
+ this.$refs.popup.close()
+ }
+ }
+}
+
+```
+
+## API
+
+### Popup Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:|:-:|
+|animation|Boolean|true|是否开启动画|
+|type|String|'center'|弹出方式|
+|mask-click **[即将废弃]**|Boolean|true|蒙版点击是否关闭弹窗|
+|is-mask-click **[1.7.4新增]**|Boolean|true|蒙版点击是否关闭弹窗|
+|mask-background-color **[1.7.4新增]**|rgba|rgba(0,0,0,0.4)|蒙版颜色,建议使用 rgba 颜色值|
+|background-color|String|'none'|主窗口背景色|
+|safe-area|Boolean|true|是否适配底部安全区|
+
+#### Type Options
+
+|属性名|说明|
+|:-:| :-:|
+|top|顶部弹出 |
+|center|居中弹出|
+|bottom|底部弹出|
+|left|左侧弹出|
+|right|右侧弹出|
+|message|预置样式 :消息提示|
+|dialog|预置样式 :对话框|
+|share|预置样式 :底部弹出分享示例 |
+
+
+### Popup Methods
+
+|方法称名 |说明|参数|
+|:-:|:-:|:-:|
+|open|打开弹出层|open(String:type) ,如果参数可代替 type 属性|
+|close|关闭弹出层 |-|
+
+
+### Popup Events
+
+|事件称名|说明|返回值|
+|:-:|:-:|:-:|
+|change|组件状态发生变化触发|e={show: true|false,type:当前模式}|
+|maskClick|点击遮罩层触发|-|
+
+
+## 扩展组件说明
+`uni-popup` 其实并没有任何样式,只提供基础的动画效果,给用户一个弹出层解决方案,仅仅是这样并不能满足开发需求,所以我们提供了三种基础扩展样式
+
+### uni-popup-message 提示信息
+
+将 `uni-popup` 的`type`属性改为 `message`,并引入对应组件即可使用消息提示 ,*该组件不支持单独使用*
+
+**示例**
+
+```html
+
+
+
+```
+
+### PopupMessage Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:|:-:|
+|type|String|success|消息提示主题|
+|message|String|-|消息提示文字|
+|duration|Number|3000|消息显示时间,超过显示时间组件自动关闭,设置为0 将不会关闭,需手动调用 close 方法关闭|
+
+#### Type Options
+
+|属性名|说明|
+|:-:| :-:|
+|success|成功|
+|warn|警告|
+|error|失败|
+|info|消息|
+
+### PopupMessage Slots
+
+|名称|说明|
+|:-:|:-:|
+|default|消息内容,会覆盖 message 属性|
+
+### uni-popup-dialog 对话框
+
+将 `uni-popup` 的`type`属性改为 `dialog`,并引入对应组件即可使用对话框 ,*该组件不支持单独使用*
+
+**示例**
+
+```html
+
+
+
+
+```
+
+```javascript
+export default {
+ methods: {
+ open() {
+ this.$refs.popup.open()
+ },
+ /**
+ * 点击取消按钮触发
+ * @param {Object} done
+ */
+ close() {
+ // TODO 做一些其他的事情,before-close 为true的情况下,手动执行 close 才会关闭对话框
+ // ...
+ this.$refs.popup.close()
+ },
+ /**
+ * 点击确认按钮触发
+ * @param {Object} done
+ * @param {Object} value
+ */
+ confirm(value) {
+ // 输入框的值
+ console.log(value)
+ // TODO 做一些其他的事情,手动执行 close 才会关闭对话框
+ // ...
+ this.$refs.popup.close()
+ }
+ }
+}
+```
+
+### PopupDialog Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:|:-:|
+|type|String|success|对话框标题主题,可选值: success/warn/info/error|
+|mode|String|base| 对话框模式,可选值:base(提示对话框)/input(可输入对话框)|
+|title|String|-|对话框标题|
+|content|String|-|对话框内容,base模式下生效|
+|confirmText **[1.7.4新增]**|String|-|定义确定按钮文本|
+|cancelText **[1.7.4新增]**|String|-|定义取消按钮文本|
+|value| String\Number|-|输入框默认值,input模式下生效|
+|placeholder|String|-|输入框提示文字,input模式下生效|
+|before-close|Boolean|false | 是否拦截按钮事件,如为true,则不会关闭对话框,关闭需要手动执行 uni-popup 的 close 方法|
+
+#### PopupDialog Events
+
+|事件称名 |说明|返回值|
+|:-:|:-:|:-:|
+|close|点击dialog取消按钮触发|-|
+|confirm|点击dialog确定按钮触发|e={value:input模式下输入框的值}|
+
+### PopupDialog Slots
+
+|名称|说明|
+|:-:|:-:|
+|default|自定义内容,会覆盖原有的内容显示|
+
+### uni-popup-share 分享示例
+
+分享示例,不作为最终可使用的组件,只做为样式组件,供用户自行修改,`后续的开发计划是实现实际的分享逻辑,参数可配置`。
+
+将 `uni-popup` 的 `type` 属性改为 `share`,并引入对应组件即可使用 ,*该组件不支持单独使用*
+
+**示例**
+
+```html
+
+
+
+```
+
+### PopupShare Props
+
+|属性名|类型|默认值|说明|
+|:-:|:-:|:-:| :-: |
+|title|String|-|分享弹窗标题|
+|before-close|Boolean|false | 是否拦截按钮事件,如为true,则不会关闭对话框,关闭需要手动执行 uni-popup 的 close 方法|
+
+### PopupShare Events
+
+|事件称名|说明|返回值|
+|:-:|:-:|:-:|
+|select|选择触发|e = {item,index}:所选参数|
+
+**Tips**
+- share 分享组件,只是作为一个扩展示例,如果需要修改数据源,请到组件内修改
+
+
+
+## 禁止滚动穿透
+
+使用组件时,会发现内容部分滚动到底时,继续划动会导致底层页面的滚动,这就是滚动穿透。
+
+但由于平台自身原因,除了h5平台外 ,其他平台都不能在在组件内禁止滚动穿透,所以在微信小程序、App 平台,页面内需要用户特殊处理一下
+
+### 微信小程序/App
+在 `微信小程序/App` 平台可使用 `page-meta` 组件动态修改页面样式 ,
+
+需要在 data 中定义一个变量,用来表示 `uni-popup` 的开启关闭状态,并通过这个变量修改 `page-meta` 的 `overflow` 属性。
+
+在 `uni-popup` 的 `@change` 事件中可以接受到 `uni-popup` 的开启关闭状态 ,并赋值给上面的变量
+
+**下面是关键代码片段:**
+
+```html
+
-
+
-
-
+
+
-
+
-
-
-```
-
-**Tips**
+
+
+
+```
+
+**Tips**
- h5 滚动穿透不需要处理
-- wx、app 需要 使用 page-meta 组件配合阻止滚动穿透
+- wx、app 需要 使用 page-meta 组件配合阻止滚动穿透
- 注意 page-meta 组件,一个页面只能存在一个
-- 其他平台无法阻止滚动穿透,建议使用 scroll-view 滚动 ,手动设置 overflow:hidden,同 page-meta 方法一致
-
-## 组件示例
-
+- 其他平台无法阻止滚动穿透,建议使用 scroll-view 滚动 ,手动设置 overflow:hidden,同 page-meta 方法一致
+
+## 组件示例
+
点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/popup/popup](https://hellouniapp.dcloud.net.cn/pages/extUI/popup/popup)
\ No newline at end of file
diff --git a/docs/component/video.md b/docs/component/video.md
index ccde93cfb3187a295fe04efbd0bb579f2dc6f0e0..1a464b14c9b4751792a0f010cdab30902364c0b2 100644
--- a/docs/component/video.md
+++ b/docs/component/video.md
@@ -31,8 +31,8 @@
|enable-play-gesture|Boolean|false|是否开启播放手势,即双击切换播放/暂停|微信小程序、快手小程序|
|auto-pause-if-navigate|Boolean|true|当跳转到其它小程序页面时,是否自动暂停本页面的视频|微信小程序|
|auto-pause-if-open-native|Boolean|true|当跳转到其它微信原生页面时,是否自动暂停本页面的视频|微信小程序|
-|vslide-gesture|Boolean|false|在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture)|微信小程序、快手小程序|
-|vslide-gesture-in-fullscreen|Boolean|true|在全屏模式下,是否开启亮度与音量调节手势|微信小程序、快手小程序|
+|vslide-gesture|Boolean|false|在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture)|微信小程序、App(3.4.0+)、快手小程序|
+|vslide-gesture-in-fullscreen|Boolean|true|在全屏模式下,是否开启亮度与音量调节手势|微信小程序、App(3.4.0+)、快手小程序|
|ad-unit-id|String||视频前贴广告单元ID,更多详情可参考开放能力[视频前贴广告](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/ad/video-patch-ad.html)|微信小程序|
|poster-for-crawler|String||用于给搜索等场景作为视频封面展示,建议使用无播放 icon 的视频封面图,只支持网络地址|微信小程序|
|codec|String|hardware|解码器选择,hardware:硬解码(硬解码可以增加解码算力,提高视频清晰度。少部分老旧硬件可能存在兼容性问题);software:ffmpeg 软解码;|App-Android 3.1.0+|
diff --git a/docs/uniCloud/cf-functions.md b/docs/uniCloud/cf-functions.md
index 0f816bfe00e2b39513648610ed010fb8e914e9b6..554a17abf308d46d6fed7aac5cd11ff4351e93dd 100644
--- a/docs/uniCloud/cf-functions.md
+++ b/docs/uniCloud/cf-functions.md
@@ -459,7 +459,9 @@ uniCloud.callFunction({
## 云函数中调用云函数@callbyfunction
-用法同客户端调用云函数,不支持callback形式。**云函数本地运行时使用callFunction会调用云端的云函数而不是本地云函数,连接本地云函数调试时云函数内的callFunction会调用本地云函数**
+用法同客户端调用云函数,不支持callback形式。
+
+`HBuilderX 3.4.0`版本之前**云函数右键本地运行时使用callFunction会调用云端的云函数而不是本地云函数,连接本地云函数调试时云函数内的callFunction会调用本地云函数**,`HBuilderX 3.4.0`及之后的版本**连接本地云函数或运行本地云函数时,如果在云函数内调用同一服务空间下的云函数会直接调用本地云函数。**
#### 请求参数
diff --git a/docs/uniCloud/cloud-obj.md b/docs/uniCloud/cloud-obj.md
index 1639c94d5681194800bbd1ecc9e032aa250cbc6d..6eb72a7dd30e757ee2d7a173c3f489e89fbc2c8a 100644
--- a/docs/uniCloud/cloud-obj.md
+++ b/docs/uniCloud/cloud-obj.md
@@ -10,7 +10,7 @@
```js
// 传统方式调用云函数-云函数代码
-// 云函数名:user-center
+// 云函数名:todo
// 云函数入口index.js内容如下
'use strict';
exports.main = async (event, context) => {
@@ -19,22 +19,23 @@ exports.main = async (event, context) => {
params
} = event
switch(method) {
- case 'login': {
- const {
- username,
- password
+ case 'add': {
+ let {
+ title,
+ content
} = params
- // 简化演示逻辑,此处不演示token校验
- if(!username) {
+ title = title.trim()
+ content = content.trim()
+ if(!title || !content) {
return {
- errCode: 'INVALID_USERNAME',
- errMsg: '用户名不正确'
+ errCode: 'INVALID_TODO',
+ errMsg: 'TODO标题或内容不可为空'
}
}
// ...省略其他逻辑
return {
errCode: 0,
- errMsg: '登录成功'
+ errMsg: '创建成功'
}
}
}
@@ -45,15 +46,15 @@ exports.main = async (event, context) => {
};
// 传统方式调用云函数-客户端代码
-async function login () {
+async function addToDo () {
try {
const res = uniCloud.callFunction({
- name: 'user-center',
+ name: 'todo',
data: {
- method: 'login',
+ method: 'add',
params: {
- username: 'dc',
- password: '123456'
+ title: 'title demo',
+ content: 'content demo'
}
}
})
@@ -63,18 +64,18 @@ async function login () {
} = res.result
if(errCode) {
uni.showModal({
- title: '登录失败',
+ title: '创建失败',
content: errMsg,
showCancel: false
})
return
}
uni.showToast({
- title: '登录成功'
+ title: '创建成功'
})
} catch (e) {
uni.showModal({
- title: '登录失败',
+ title: '创建失败',
content: e.message,
showCancel: false
})
@@ -86,40 +87,42 @@ async function login () {
```js
// 使用云对象的写法-云对象代码
-// 云对象名:user-center
+// 云对象名:todo
// 云对象入口index.obj.js内容如下
module.exports = {
- login(username, password) {
- if (!username) {
+ add(title, content) {
+ title = title.trim()
+ content = content.trim()
+ if(!title || !content) {
return {
- errCode: 'INVALID_USERNAME',
- errMsg: '用户名不正确'
+ errCode: 'INVALID_TODO',
+ errMsg: 'TODO标题或内容不可为空'
}
}
- // ...登录逻辑
+ // ...其他逻辑
return {
errCode: 0,
- errMsg: '登录成功'
+ errMsg: '创建成功'
}
}
}
// 使用云对象的写法-客户端代码
-const userCenter = uniCloud.importObject('user-center')
-async function login () {
+const todo = uniCloud.importObject('todo')
+async function addTodo () {
try {
- const res = await userCenter.login('dc', '123456')
+ const res = await todo.add('title demo', 'content demo')
uni.showToast({
- title: '登录成功'
+ title: '创建成功'
})
} catch (e) {
// 此形式响应符合uniCloud响应体规范中的错误响应,自动抛出此错误
// {
- // errCode: 'INVALID_USERNAME',
- // errMsg: '用户名不正确'
+ // errCode: 'INVALID_TODO',
+ // errMsg: 'TODO标题或内容不可为空'
// }
uni.showModal({
- title: '登录失败',
+ title: '创建失败',
content: e.errMsg,
showCancel: false
})
@@ -129,59 +132,233 @@ async function login () {
可以看到大量的业务无关代码被简化掉,开发效率UP。此外通过`ObjectName.MethodName`的方式调用云函数和云端写法完全一致,心智负担大幅减小。请阅读以下内容深入了解云对象
-## 规范
+## 快速上手
-云对象和云函数都在cloudfunctions目录下,但是不同于云函数,云对象的入口为`index.obj.js`,而云函数则是`index.js`。**为正确区分两者uniCloud做出了限制,云函数内不可存在index.obj.js,云对象内也不可存在index.js。**一个标准的云对象入口应导出一个对象,如下:
+### 创建云对象
-对象内每个键值对是一个处理方法
+和创建云函数一样,在`cloudfunctions`目录右键即可输入云对象名称创建云对象,此处以云对象todo为例,创建的云对象包含一个`index.obj.js`。内容如下
```js
-// user-center/index.obj.js
+// cloudfunctions/todo/index.obj.js
module.exports = {
- login: async function(username, password) {
- console.log(username, password)
- } // login方法
+
}
```
-云对象也可以引用公共模块或者npm上的包,引用方式和云函数完全一致。
+默认云对象模板是不包含任何方法的,我们为此对象添加一个add方法作为示例。
-### 客户端调用@call-by-client
+```js
+// cloudfunctions/todo/index.obj.js
+module.exports = {
+ add: function(title = '', content = '') {
+ title = title.trim()
+ content = content.trim()
+ if(!title || !content) {
+ return {
+ errCode: 'INVALID_TODO',
+ errMsg: 'TODO标题或内容不可为空'
+ }
+ }
+ // ...其他逻辑
+ return {
+ errCode: 0,
+ errMsg: '创建成功'
+ }
+ }
+}
+```
-客户端通过`uniCloud.importObject`方法获取云对象的实例。用法如下
+至此云对象todo已经有了一个可以访问的方法了。接下来看如何使用客户端调用此云对象内的方法
+
+### 客户端调用
+
+客户端通过`uniCloud.importObject`方法获取云对象的实例,并可以通过此实例调用云对象内的方法。用法如下
```js
-const userCenter = uniCloud.importObject('user-center')
-const res = await userCenter.login('dc', '123456') // 传入参数 username 和 password,参数和云对象内的方法完全一致
+const todo = uniCloud.importObject('todo')
+const res = await todo.add('title demo', 'content demo')
```
-### 云函数或云对象内调用@call-by-cloud
+## 云对象的API@api
-云函数或云对象内也可以调用同一服务空间内的云对象,用法和客户端调用云对象一致
+云对象的方法内可以通过this上的一些接口获取一些信息
+
+### 获取客户端信息@get-client-info
+
+**接口形式**
+
+`this.getClientInfo()`
+
+**示例:**
```js
-const userCenter = uniCloud.importObject('user-center')
-const res = await userCenter.login('dc', '123456') // 传入参数 username 和 password,参数和云对象内的方法完全一致
+module.exports = {
+ add: function() {
+ const clientInfo = this.getClientInfo()
+ // clientInfo = {
+ // os,
+ // appId,
+ // locale,
+ // clientIP,
+ // userAgent,
+ // platform,
+ // deviceId,
+ // uniIdToken
+ // }
+ }
+}
```
-### 跨服务空间调用云对象@call-by-cloud-cross-space
+**返回值**
-云端或者客户端均有uniCloud.init方法可以获取其他服务空间的uniCloud实例,使用此实例的importObject可以调用其他服务空间的云对象,参考:[](uniCloud/concepts/space.md?id=multi-space)
+|参数名 |类型 |必备 |说明 |
+|-- |-- |-- |-- |
+|os |string |是 |客户端系统 |
+|appId |string |是 |客户端DCloud AppId |
+|locale |string |是 |客户端语言 |
+|clientIP |string |是 |客户端ip |
+|userAgent |string |是 |客户端ua |
+|platform |string |是 |客户端平台,app,mp-weixin等 |
+|deviceId |string |是 |客户端deviceId,目前同getSystemInfo内的deviceId|
+|uniIdToken |string |是 |客户端用户token |
-客户端无论腾讯阿里均支持。云端`uniCloud.init`方法仅腾讯云支持,且仅能获取同账号下的腾讯云服务空间的uniCloud实例。
+**注意**
-**示例代码**
+- 与云函数内获取客户端platform稍有不同,云函数未拉齐vue2、vue3版本app平台的platform值,vue2为`app-plus`,vue3为`app`。云对象无论客户端是vue2还是vue3,在app平台获取的platform均为`app`。这一点在使用uni-id时需要特别注意,详情见:[uni-id文档 preferedAppPlatform](uniCloud/uni-id.md?id=prefered-app-platform)
+
+### 获取云端信息@get-cloud-info
+
+**接口形式**
+
+`this.getCloudInfo()`
+
+**示例**
```js
-const mycloud = uniCloud.init({
- provider: 'tencent',
- spaceId: 'xxx'
-})
-const userCenter = mycloud.importObject('user-center')
-const loginRes = await mycloud.login('dc', '123456')
+module.exports = {
+ add: function(){
+ const cloudInfo = this.getCloudInfo()
+ // cloudInfo = {
+ // provider,
+ // spaceId
+ // }
+ }
+}
+```
+
+**返回值**
+
+|参数名 |类型 |必备 |说明 |
+|-- |-- |-- |-- |
+|provider |string |是 |服务空间供应商 |
+|spaceId |string |是 |服务空间Id |
+
+### 获取客户端token@get-uni-id-token
+
+**接口形式**
+
+`this.getUniIdToken()`
+
+**示例**
+
+```js
+module.exports = {
+ add: function(){
+ const token = this.getUniIdToken()
+ }
+}
```
-### 云对象的返回值@return-value
+### 获取当前调用的方法名@get-method-name
+
+**接口形式**
+
+`this.getMethodName()`
+
+**示例**
+
+```js
+module.exports = {
+ _before: function() { // _before的用法请看后续章节
+ const methodName = this.getMethodName() // add
+ }
+}
+```
+
+### 获取当前参数列表@get-params
+
+**接口形式**
+
+`this.getParams()`
+
+**示例**
+
+```js
+module.exports = {
+ _before: function() { // _before的用法请看后续章节
+ const params = this.getParams() // ['title demo', 'content demo']
+ }
+}
+```
+
+## 预处理与后处理@before-and-after
+
+### 预处理 _before@before
+
+云对象内可以创建一个特殊的方法_after用来在调用方法之前进行一些额外的操作
+
+请看以下示例:
+
+```js
+// todo/index.obj.js
+module.exports = {
+ _before: function(){
+ const methodName = this.getMethodName()
+ if(methodName === 'add' && !this.getUniIdToken()) {
+ throw new Error('token不存在')
+ }
+ },
+ add: function(title = '', content = '') {
+ return {
+ errCode: 0,
+ errMsg: '创建成功'
+ }
+ }
+}
+```
+
+### 后处理 _after@after
+
+云对象内可以创建一个特殊的方法_after用来处理本次调用方法的返回结果或者抛出的错误
+
+请看以下示例:
+
+```js
+// todo/index.obj.js
+module.exports = {
+ _before: function(){
+ this.startTime = Date.now() // 在before内记录开始时间并在this上挂载,以供后续流程使用
+ },
+ add: function(title = '', content = '') {
+ if(title === 'abc') {
+ throw new Error('abc不是一个合法的todo标题')
+ }
+ return {
+ errCode: 0,
+ errMsg: '创建成功'
+ }
+ },
+ _after(error, result) {
+ if(error) {
+ throw error // 如果方法抛出错误,也直接抛出不处理
+ }
+ result.timeCost = Date.now() - this.startTime
+ return result
+ }
+}
+```
+
+## 云对象的返回值@return-value
客户端拿到云对象的响应结果后,会自动进行结果的处理。
@@ -201,40 +378,88 @@ const loginRes = await mycloud.login('dc', '123456')
详见以下示例:
```js
-// user-center/index.obj.js
+// todo/index.obj.js
module.exports = {
- login: async function(username, password) {
- if(!username) {
+ add: async function(title = '', content = '') {
+ title = title.trim()
+ content = content.trim()
+ if(!title || !content) {
return {
- errCode: 'INVALID_USERNAME',
- errMsg: '登录失败'
+ errCode: 'INVALID_TODO',
+ errMsg: 'TODO标题或内容不可为空'
}
}
+ // ...其他逻辑
return {
errCode: 0,
- errMsg: '登录成功'
+ errMsg: '创建成功'
}
}
}
// 客户端代码
-const userCenter = uniCloud.importObject('user-center')
+const todo = uniCloud.importObject('todo')
try {
- // 不传username,云函数返回错误的响应
- await userCenter.login()
+ // 不传title、content,云函数返回错误的响应
+ await todo.add()
} catch (e) {
- // e.errCode === 'INVALID_USERNAME'
- // e.errMsg === '登录失败'
- // e.detail === {errCode: 'INVALID_USERNAME',errMsg: '登录失败'}
+ // e.errCode === 'INVALID_TODO'
+ // e.errMsg === 'TODO标题或内容不可为空'
+ // e.detail === {errCode: 'INVALID_TODO',errMsg: 'TODO标题或内容不可为空'}
// e.requestId === 'xxxx'
}
try {
- const res = await userCenter.login('dc', '123456')
- // res = {errCode: 0,errMsg: '更新成功'}
+ const res = await todo.add('title demo', 'content demo')
+ // res = {errCode: 0,errMsg: '创建成功'}
} catch (e) {}
```
+
+## 调用云对象
+
+### 客户端调用@call-by-client
+
+客户端通过`uniCloud.importObject`方法获取云对象的实例。用法如下
+
+```js
+const todo = uniCloud.importObject('todo')
+const res = await todo.add('title demo', 'content demo')
+```
+
+### 云函数或云对象内调用@call-by-cloud
+
+云函数或云对象内也可以调用同一服务空间内的云对象,用法和客户端调用云对象一致
+
+```js
+const todo = uniCloud.importObject('todo')
+const res = await todo.add('title demo', 'content demo')
+```
+
+### 跨服务空间调用云对象@call-by-cloud-cross-space
+
+云端或者客户端均有uniCloud.init方法可以获取其他服务空间的uniCloud实例,使用此实例的importObject可以调用其他服务空间的云对象,参考:[](uniCloud/concepts/space.md?id=multi-space)
+
+客户端无论腾讯阿里均支持。云端`uniCloud.init`方法仅腾讯云支持,且仅能获取同账号下的腾讯云服务空间的uniCloud实例。
+
+**示例代码**
+
+```js
+const mycloud = uniCloud.init({
+ provider: 'tencent',
+ spaceId: 'xxx'
+})
+const todo = mycloud.importObject('todo')
+const res = await todo.add('title demo', 'content demo')
+```
+
+
+## 注意事项
+
+- 云对象和云函数都在cloudfunctions目录下,但是不同于云函数,云对象的入口为`index.obj.js`,而云函数则是`index.js`。**为正确区分两者uniCloud做出了限制,云函数内不可存在index.obj.js,云对象内也不可存在index.js。**
+- 所有`_`开头的方法都是私有方法,客户端不可访问
+- 云对象也可以引用公共模块或者npm上的包,引用方式和云函数完全一致。
+
## 本地运行@run-local
云对象无法直接本地运行,可以通过其他云函数调用本地云对象(在调用云对象的云函数右键本地运行),或者客户端调用本地云对象的方式来实现云对象的本地运行。
\ No newline at end of file
diff --git a/docs/uniCloud/jql.md b/docs/uniCloud/jql.md
index cfab63831b9880639f57a8f2216d0411b66c918b..5191fada6c9f8995ca072b07afcd404fcb199aa7 100644
--- a/docs/uniCloud/jql.md
+++ b/docs/uniCloud/jql.md
@@ -695,6 +695,9 @@ limit
foreignKey // foreignKey自 HBuilderX 3.3.7版本支持
where
field // 关于field的使用限制见下方说明
+groupBy // HBuilderX 3.4.0起支持
+groupField // HBuilderX 3.4.0起支持
+distinct // HBuilderX 3.4.0起支持
orderBy
skip
limit
diff --git a/docs/uniCloud/send-sms.md b/docs/uniCloud/send-sms.md
index 442566fb1dd56b5ba55a69358d56e982c7eee6a6..8f3134a93737e948d1321b328890e3df45d0073a 100644
--- a/docs/uniCloud/send-sms.md
+++ b/docs/uniCloud/send-sms.md
@@ -7,6 +7,8 @@ keyword: 短信,sms
> 自`HBuilderX 3.3.0`起,本接口支持传入phoneList参数批量发送短信,其他参数均于发送单条短信相同
+> 自`HBuilderX 3.4.0`起云函数需启用uni-cloud-sms之后才可以调用sendSms接口,详细说明见:[云函数使用短信扩展库](#extension)
+
自HBuilderX 2.8.1起,uniCloud内置了短信发送API。给开发者提供更方便、更便宜的短信发送能力。
该服务类似小程序的模板消息,在一个固定模板格式的文字里自定义某些字段,而不是所有文字都可以随便写。
@@ -36,6 +38,23 @@ keyword: 短信,sms
- 如果使用uni-id发送短信,请参考[uni-id发送短信验证码](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=sendsmscode)
+#### 云函数使用短信扩展库@extension
+
+自HBuilderX 3.4.0起,短信相关功能移至扩展库`uni-cloud-sms`内。在一段时间内无论开发者是否使用扩展库云函数都可以正常使用`uniCloud.sendSms`。预计于2022年3月初发布的HBuilderX内强制使用扩展库,即使用在此时间点后发布的HBuilderX上传云函数时如果没有指定使用`uni-cloud-sms`扩展库的云函数将无法调用uniCloud.sendSms接口。
+
+关于扩展库的说明见:[云函数扩展库](uniCloud/cf-functions.md?id=extension)
+
+在云函数的package.json内添加`uni-cloud-sms`的引用即可为云函数启用此扩展,无需做其他调整,完整的package.json示例如下:
+
+```js
+{
+ "name": "uni-sms",
+ "extensions": {
+ "uni-cloud-sms": {} // 启用uni-cloud-jql扩展,值为空对象即可
+ }
+}
+```
+
#### 参数templateId说明@smstemplate
按照国家法律和运营商要求,每个要发送短信的应用,需要备案其短信模板,并且经过运营商的审核。通过审核的模板,会得到一个templateId。
diff --git a/docs/uniCloud/uni-id.md b/docs/uniCloud/uni-id.md
index 2003dd147769fbd7cf2bc1548d06626329894b3e..51dcb4f82bb3b41733e78458c0f758598967f2c7 100644
--- a/docs/uniCloud/uni-id.md
+++ b/docs/uniCloud/uni-id.md
@@ -467,15 +467,15 @@ function hasPermission(token, permission) {
用法:`uniID.createInstance(Object CreateInstanceParams);`
-CreateInstanceParams内可以传入云函数context
+CreateInstanceParams内可以传入云函数context,自`uni-id 3.3.13`起,也可以传入clientInfo参数,作用和context类似。方便在云对象内获取clientInfo后直接传入,[什么是云对象?](uniCloud/cloud-obj.md)。
```js
-// 云函数代码
+// 云函数代码,传入context
const uniID = require('uni-id')
exports.main = async function(event,context) {
- context.APPID = '__UNI__xxxxxxx' // 替换为当前客户端的APPID,通过客户端callFunction请求的场景可以使用context.APPID获取
- context.PLATFORM = 'h5' // 替换为当前客户端的平台类型,通过客户端callFunction请求的场景可以使用context.PLATFORM获取
- context.LOCALE = 'zh-Hans' // 替换为当前客户端的语言代码,通过客户端callFunction请求的场景可以使用context.LOCALE获取
+ context.APPID = '__UNI__xxxxxxx' // 替换为当前客户端的APPID,通过客户端callFunction请求的场景可以使用context.APPID获取
+ context.PLATFORM = 'h5' // 替换为当前客户端的平台类型,通过客户端callFunction请求的场景可以使用context.PLATFORM获取
+ context.LOCALE = 'zh-Hans' // 替换为当前客户端的语言代码,通过客户端callFunction请求的场景可以使用context.LOCALE获取
const uniIDIns = uniID.createInstance({ // 创建uni-id实例,其上方法同uniID
context: context,
// config: {} // 完整uni-id配置信息,使用config.json进行配置时无需传此参数
@@ -484,11 +484,26 @@ exports.main = async function(event,context) {
if (payload.code) {
return payload
}
- const res = await uniIDIns.updateUser({
+ const res = await uniIDIns.updateUser({
uid: payload.uid,
nickname: 'user nickname'
})
- return res
+ return res
+}
+
+// 云对象代码传入clientInfo
+const uniID = require('uni-id')
+module.exports = {
+ _before() {
+ const clientInfo = this.getClientInfo()
+ this.uniID = uniID.createInstance({ // 创建uni-id实例,其上方法同uniID
+ clientInfo
+ })
+ },
+ login() {
+ // ...
+ // this.uniID.login()
+ }
}
```
diff --git a/docs/uniCloud/univerify.md b/docs/uniCloud/univerify.md
index 5d45dc14a7ce72b19115a7486c170876b46c35f2..6b31983f1f0efd33793ed56b9069422a4abcd4a7 100644
--- a/docs/uniCloud/univerify.md
+++ b/docs/uniCloud/univerify.md
@@ -9,12 +9,33 @@ univerify 是DCloud 推出的一键登录产品,通过与运营商深度合作
univerify是替代短信验证登录的下一代登录验证方式,能消除现有短信验证模式等待时间长、操作繁琐和容易泄露的痛点。
+## 重要调整
+
+### 云函数使用一键登录扩展库@extension
+
+自`HBuilderX 3.4.0`起,一键登录相关功能移至扩展库`uni-cloud-verify`内。在一段时间内无论开发者是否使用扩展库云函数都可以正常使用`uniCloud.getPhoneNumber`。预计于2022年3月初发布的HBuilderX内强制使用扩展库,即使用在此时间点后发布的HBuilderX上传云函数时如果没有指定使用`uni-cloud-verify`扩展库的云函数将无法调用uniCloud.getPhoneNumber接口。
+
+关于扩展库的说明见:[云函数扩展库](uniCloud/cf-functions.md?id=extension)
+
+在云函数的package.json内添加`uni-cloud-verify`的引用即可为云函数启用此扩展,无需做其他调整,完整的package.json示例如下:
+
+```js
+{
+ "name": "univerify",
+ "extensions": {
+ "uni-cloud-verify": {} // 启用uni-cloud-jql扩展,值为空对象即可
+ }
+}
+```
+
## 客户端@client
客户端如何使用一键登录请参考此文档:[univerify 使用指南](/univerify)
## 云函数@cloud
+> 自`HBuilderX 3.4.0`起云函数需启用uni-cloud-verify之后才可以调用getPhoneNumber接口,详细说明见:[云函数使用一键登录扩展库](#extension)
+
客户端调用一键登录接口会获取如下结果
```js