From 263177911b5dc88a552089404f181ea0b3cd2c7b Mon Sep 17 00:00:00 2001 From: wny <1665951082@qq.com> Date: Fri, 25 Nov 2022 15:26:35 +0800 Subject: [PATCH] 1 --- scr/wechat-weapp-mapdemo-master/.gitignore | 19 - scr/wechat-weapp-mapdemo-master/README.md | 24 - scr/wechat-weapp-mapdemo-master/app.js | 30 - scr/wechat-weapp-mapdemo-master/app.json | 42 - scr/wechat-weapp-mapdemo-master/app.wxss | 10 - .../image/arrowright.png | Bin 1363 -> 0 bytes .../image/icon64_appwx_logo.png | Bin 3542 -> 0 bytes .../image/locate.png | Bin 5623 -> 0 bytes .../image/locateHL.png | Bin 4825 -> 0 bytes .../image/location-control.png | Bin 3531 -> 0 bytes .../image/location.png | Bin 2479 -> 0 bytes .../image/logo.png | Bin 9407 -> 0 bytes scr/wechat-weapp-mapdemo-master/image/map.png | Bin 5623 -> 0 bytes .../image/map_active.png | Bin 4825 -> 0 bytes .../image/navigator.jpg | Bin 60012 -> 0 bytes .../image/pause.png | Bin 3760 -> 0 bytes .../image/play.png | Bin 4420 -> 0 bytes .../image/plus.png | Bin 1252 -> 0 bytes .../image/record.png | Bin 5801 -> 0 bytes .../image/screenshot-marker.png | Bin 160241 -> 0 bytes .../image/screenshot1.png | Bin 23836 -> 0 bytes .../image/screenshot2.png | Bin 177323 -> 0 bytes .../image/stop.png | Bin 2539 -> 0 bytes .../image/trash.png | Bin 2656 -> 0 bytes .../image/wechat.png | Bin 1241 -> 0 bytes .../image/wechatHL.png | Bin 1241 -> 0 bytes scr/wechat-weapp-mapdemo-master/images/dh.jpg | Bin 117351 -> 0 bytes .../images/gps.jpg | Bin 19587 -> 0 bytes .../images/hxLocation.png | Bin 1171 -> 0 bytes .../images/logo1.png | Bin 9354 -> 0 bytes .../images/sxaubg.jpg | Bin 102455 -> 0 bytes scr/wechat-weapp-mapdemo-master/images/xm.jpg | Bin 142047 -> 0 bytes scr/wechat-weapp-mapdemo-master/package.json | 25 - .../pages/Find directions/Find directions.js | 26 - .../Find directions/Find directions.json | 3 - .../Find directions/Find directions.wxml | 10 - .../Find directions/Find directions.wxss | 21 - .../pages/ManageAccount/ManageAccount.js | 23 - .../pages/ManageAccount/ManageAccount.json | 3 - .../pages/ManageAccount/ManageAccount.wxml | 5 - .../pages/ManageAccount/ManageAccount.wxss | 1 - .../ModifyInformation/ModifyInformation.js | 23 - .../ModifyInformation/ModifyInformation.json | 3 - .../ModifyInformation/ModifyInformation.wxml | 5 - .../ModifyInformation/ModifyInformation.wxss | 1 - .../pages/ModifyMap/ModifyMap.js | 23 - .../pages/ModifyMap/ModifyMap.json | 3 - .../pages/ModifyMap/ModifyMap.wxml | 5 - .../pages/ModifyMap/ModifyMap.wxss | 1 - .../pages/location/location.js | 727 - .../pages/location/location.json | 3 - .../pages/location/location.wxml | 417 - .../pages/location/location.wxss | 62 - .../pages/login/login.js | 28 - .../pages/login/login.json | 3 - .../pages/login/login.wxml | 32 - .../pages/login/login.wxss | 20 - .../pages/logs/logs.js | 66 - .../pages/logs/logs.wxml | 2 - .../pages/map/map.js | 77 - .../pages/map/map.json | 3 - .../pages/map/map.wxml | 1 - .../pages/map/map.wxss | 0 .../pages/text/text.js | 66 - .../pages/text/text.json | 3 - .../pages/text/text.wxml | 2 - .../pages/text/text.wxss | 1 - .../project.config.json | 29 - .../project.private.config.json | 7 - .../resources/gis-school.js | 1118 - .../style/weui.wxss | 6 - scr/wechat-weapp-mapdemo-master/utils/util.js | 21 - scr/weichat_work/.eslintrc.js | 31 - scr/weichat_work/miniprogram/app.json | 14 - scr/weichat_work/miniprogram/app.ts | 18 - scr/weichat_work/miniprogram/app.wxss | 10 - .../miniprogram/pages/index/index.json | 3 - .../miniprogram/pages/index/index.ts | 49 - .../miniprogram/pages/index/index.wxml | 23 - .../miniprogram/pages/index/index.wxss | 19 - .../miniprogram/pages/logs/logs.json | 4 - .../miniprogram/pages/logs/logs.ts | 19 - .../miniprogram/pages/logs/logs.wxml | 6 - .../miniprogram/pages/logs/logs.wxss | 8 - scr/weichat_work/miniprogram/sitemap.json | 7 - scr/weichat_work/miniprogram/utils/util.ts | 19 - scr/weichat_work/package.json | 15 - scr/weichat_work/project.config.json | 30 - scr/weichat_work/project.private.config.json | 7 - scr/weichat_work/tsconfig.json | 30 - scr/weichat_work/typings/index.d.ts | 8 - scr/weichat_work/typings/types/index.d.ts | 1 - scr/weichat_work/typings/types/wx/index.d.ts | 134 - .../typings/types/wx/lib.wx.api.d.ts | 28852 ---------------- .../typings/types/wx/lib.wx.app.d.ts | 270 - .../typings/types/wx/lib.wx.behavior.d.ts | 68 - .../typings/types/wx/lib.wx.cloud.d.ts | 979 - .../typings/types/wx/lib.wx.component.d.ts | 676 - .../typings/types/wx/lib.wx.event.d.ts | 1435 - .../typings/types/wx/lib.wx.page.d.ts | 263 - 100 files changed, 35998 deletions(-) delete mode 100644 scr/wechat-weapp-mapdemo-master/.gitignore delete mode 100644 scr/wechat-weapp-mapdemo-master/README.md delete mode 100644 scr/wechat-weapp-mapdemo-master/app.js delete mode 100644 scr/wechat-weapp-mapdemo-master/app.json delete mode 100644 scr/wechat-weapp-mapdemo-master/app.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/image/arrowright.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/icon64_appwx_logo.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/locate.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/locateHL.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/location-control.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/location.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/logo.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/map.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/map_active.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/navigator.jpg delete mode 100644 scr/wechat-weapp-mapdemo-master/image/pause.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/play.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/plus.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/record.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/screenshot-marker.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/screenshot1.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/screenshot2.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/stop.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/trash.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/wechat.png delete mode 100644 scr/wechat-weapp-mapdemo-master/image/wechatHL.png delete mode 100644 scr/wechat-weapp-mapdemo-master/images/dh.jpg delete mode 100644 scr/wechat-weapp-mapdemo-master/images/gps.jpg delete mode 100644 scr/wechat-weapp-mapdemo-master/images/hxLocation.png delete mode 100644 scr/wechat-weapp-mapdemo-master/images/logo1.png delete mode 100644 scr/wechat-weapp-mapdemo-master/images/sxaubg.jpg delete mode 100644 scr/wechat-weapp-mapdemo-master/images/xm.jpg delete mode 100644 scr/wechat-weapp-mapdemo-master/package.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/Find directions/Find directions.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/Find directions/Find directions.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/Find directions/Find directions.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/Find directions/Find directions.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/location/location.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/location/location.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/location/location.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/location/location.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/login/login.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/login/login.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/login/login.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/login/login.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/logs/logs.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/logs/logs.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/map/map.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/map/map.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/map/map.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/map/map.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/text/text.js delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/text/text.json delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/text/text.wxml delete mode 100644 scr/wechat-weapp-mapdemo-master/pages/text/text.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/project.config.json delete mode 100644 scr/wechat-weapp-mapdemo-master/project.private.config.json delete mode 100644 scr/wechat-weapp-mapdemo-master/resources/gis-school.js delete mode 100644 scr/wechat-weapp-mapdemo-master/style/weui.wxss delete mode 100644 scr/wechat-weapp-mapdemo-master/utils/util.js delete mode 100644 scr/weichat_work/.eslintrc.js delete mode 100644 scr/weichat_work/miniprogram/app.json delete mode 100644 scr/weichat_work/miniprogram/app.ts delete mode 100644 scr/weichat_work/miniprogram/app.wxss delete mode 100644 scr/weichat_work/miniprogram/pages/index/index.json delete mode 100644 scr/weichat_work/miniprogram/pages/index/index.ts delete mode 100644 scr/weichat_work/miniprogram/pages/index/index.wxml delete mode 100644 scr/weichat_work/miniprogram/pages/index/index.wxss delete mode 100644 scr/weichat_work/miniprogram/pages/logs/logs.json delete mode 100644 scr/weichat_work/miniprogram/pages/logs/logs.ts delete mode 100644 scr/weichat_work/miniprogram/pages/logs/logs.wxml delete mode 100644 scr/weichat_work/miniprogram/pages/logs/logs.wxss delete mode 100644 scr/weichat_work/miniprogram/sitemap.json delete mode 100644 scr/weichat_work/miniprogram/utils/util.ts delete mode 100644 scr/weichat_work/package.json delete mode 100644 scr/weichat_work/project.config.json delete mode 100644 scr/weichat_work/project.private.config.json delete mode 100644 scr/weichat_work/tsconfig.json delete mode 100644 scr/weichat_work/typings/index.d.ts delete mode 100644 scr/weichat_work/typings/types/index.d.ts delete mode 100644 scr/weichat_work/typings/types/wx/index.d.ts delete mode 100644 scr/weichat_work/typings/types/wx/lib.wx.api.d.ts delete mode 100644 scr/weichat_work/typings/types/wx/lib.wx.app.d.ts delete mode 100644 scr/weichat_work/typings/types/wx/lib.wx.behavior.d.ts delete mode 100644 scr/weichat_work/typings/types/wx/lib.wx.cloud.d.ts delete mode 100644 scr/weichat_work/typings/types/wx/lib.wx.component.d.ts delete mode 100644 scr/weichat_work/typings/types/wx/lib.wx.event.d.ts delete mode 100644 scr/weichat_work/typings/types/wx/lib.wx.page.d.ts diff --git a/scr/wechat-weapp-mapdemo-master/.gitignore b/scr/wechat-weapp-mapdemo-master/.gitignore deleted file mode 100644 index 11e612e..0000000 --- a/scr/wechat-weapp-mapdemo-master/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Build and Release Folders -bin/ -bin-debug/ -bin-release/ -[Oo]bj/ # FlashDevelop obj -[Bb]in/ # FlashDevelop bin - -# Other files and folders -.settings/ - -# Executables -*.swf -*.air -*.ipa -*.apk - -# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` -# should NOT be excluded as they contain compiler settings and other important -# information for Eclipse / Flash Builder. diff --git a/scr/wechat-weapp-mapdemo-master/README.md b/scr/wechat-weapp-mapdemo-master/README.md deleted file mode 100644 index eefda45..0000000 --- a/scr/wechat-weapp-mapdemo-master/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# wechat-weapp-mapdemo - -微信小程序开发mapdemo,地图导航、marker标注 - -版本信息: -微信web开发者工具 `v0.15.152900` - - -## Screenshot - - -![](./image/screenshot1.png) - -![](./image/screenshot2.png) - -![](./image/navigator.jpg) - -![](./image/screenshot-marker.png) - ---- - -## License - -MIT \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/app.js b/scr/wechat-weapp-mapdemo-master/app.js deleted file mode 100644 index 51ce356..0000000 --- a/scr/wechat-weapp-mapdemo-master/app.js +++ /dev/null @@ -1,30 +0,0 @@ -//app.js -App({ - onLaunch: function () { - //调用API从本地缓存中获取数据 - var logs = wx.getStorageSync('logs') || [] - logs.unshift(Date.now()) - wx.setStorageSync('logs', logs) - }, - getUserInfo:function(cb){ - var that = this; - if(this.globalData.userInfo){ - typeof cb == "function" && cb(this.globalData.userInfo) - }else{ - //调用登录接口 - wx.login({ - success: function () { - wx.getUserInfo({ - success: function (res) { - that.globalData.userInfo = res.userInfo; - typeof cb == "function" && cb(that.globalData.userInfo) - } - }) - } - }); - } - }, - globalData:{ - userInfo:null - } -}) diff --git a/scr/wechat-weapp-mapdemo-master/app.json b/scr/wechat-weapp-mapdemo-master/app.json deleted file mode 100644 index 365e62f..0000000 --- a/scr/wechat-weapp-mapdemo-master/app.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "pages":[ - "pages/login/login", - "pages/location/location", - "pages/Find directions/Find directions", - "pages/text/text", - "pages/ModifyMap/ModifyMap", - "pages/ModifyInformation/ModifyInformation", - "pages/ManageAccount/ManageAccount" - ], - "window":{ - "backgroundTextStyle":"light", - "navigationBarBackgroundColor": "#fff", - "navigationBarTitleText": "login", - "navigationBarTextStyle":"black" - }, - "tabBar": { - "color": "#dddddd", - "selectedColor": "#3cc51f", - "borderStyle": "black", - "backgroundColor": "#ffffff", - "list": [{ - "pagePath": "pages/location/location", - "iconPath": "image/wechat.png", - "selectedIconPath": "image/locate.png", - "text": "导航" - },{ - "pagePath": "pages/Find directions/Find directions", - "iconPath": "image/map.png", - "selectedIconPath": "image/map_active.png", - "text": "查询路线" - },{ - "pagePath": "pages/text/text", - "iconPath": "image/locate.png", - "selectedIconPath": "image/locateHL.png", - "text": "信息栏" - } - ] - }, - "debug": true - } - diff --git a/scr/wechat-weapp-mapdemo-master/app.wxss b/scr/wechat-weapp-mapdemo-master/app.wxss deleted file mode 100644 index 1d3b114..0000000 --- a/scr/wechat-weapp-mapdemo-master/app.wxss +++ /dev/null @@ -1,10 +0,0 @@ -/**app.wxss**/ -.container { - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-between; - padding: 200rpx 0; - box-sizing: border-box; -} diff --git a/scr/wechat-weapp-mapdemo-master/image/arrowright.png b/scr/wechat-weapp-mapdemo-master/image/arrowright.png deleted file mode 100644 index 109f4fe96d16a62f7f84f53271140777bc7dd96c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1363 zcmV-Z1+4msP)Px)4M{{nRA>d&SzB)!M-<*&mf*XAWsPIU#$0NO!A__zYEr3EU-AzeRh4r2DgGsS zuH+xkS3fy+ZIsFijTGUCs1BrH!y4OM?A@831D*(3m4Mk@Xy<|1Iqb}Q-<+9q&YTs5 z|9Nrn;17parrhqy$lTn_b)itG^Ne9tAF0=Ywzjq;U9YbihBRNP=ud*dgumA@tbAYO z87vr#{b(3;^0qIPB*$SkoBqNxmf1c%YXB$odPfcgL9E?QE)rs_MWfLfvtW4obDe>F zK7X^c^iBTqvIg5nyayADx-QQ6eABgZxlrK&!rO<708Vyta-w@Y%XvY#U?c=W$h6n1 zHZ<+@oEK29{kRF>M4Fb>RdpjzsismYxKIYQ-|bdz&d<*@Y};K-5kPRIQpT8__2&&k zKoUbOz~YpuP8+3Cq5PjGfB=idq7e=Ua@8tPKnKGpGYq0Cicct)PtUMzS23*t1`G~1 zNhaetO}q4hYy{s_PoMsj%jF6lXf{buN|eb-zkGgP zELsg7$K!Hjoq%j^ZaNMQ(raLqrr5i(EM$+5-@g+@kusSTHJ2mnH1YQKw(;uKvjbTs zU%j)g3k#u8bcIrC>7rRW*j-{6H@$xSYZByNy|gGwClGf0VU;FqC4hu*#TORhkKimk zU<92`A@}_G&u@VsVKUy@b^-_tNrXb*E*pjzU_fzuy?F6U$}EY#5MZFg;aKA4h6Y(% zlBB}=di)U243qU*TWUr-O%6`2fF>1mg1!PZGm0iRnM`~^6Wpo)zy04=0tf*80XjGI z54V6u%H<0snOx5Ekmx%B1dX0qQB;baxl;S0h*2_Qhc zHzu(!@a5ynnuQ$G9;31oGH9M>9rc$XYo7{@p z7C!(VKmzaqWQ73)YjYvX!8e)AZw)51swB3@#&YmDhoxI6 z9F9lY!GqC(P{Y9A#A<+J`+47Z&@9B^n3>60vshq9~k& zLh7E~;Bi?@6Np5X;*{zUw#Jeq7B@DQ_jh)7bSAU2=H5c!m_$reVbYcXbT}M;udOYm z%p|JVSl!lK8bI(69z1LZFUvIl^5v$fEL*pr+u!5T0OmQ{!NX1Jb2j_uTdOk8?EpJH z_pAX-nM0Cxo(&9N>HiuOc*MY^fnYGYLWuML?0ojqr+4oMvGQyIxobQJ+?_4#_z#kL V4A&`M9h(3E002ovPDHLkV1mUVe~kbD diff --git a/scr/wechat-weapp-mapdemo-master/image/icon64_appwx_logo.png b/scr/wechat-weapp-mapdemo-master/image/icon64_appwx_logo.png deleted file mode 100644 index 91a38f9a2951c7e8fe8a01bb0c7adbbe16f7c5b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3542 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 N+T0#@+tmNe{{bqI5`X{z diff --git a/scr/wechat-weapp-mapdemo-master/image/locate.png b/scr/wechat-weapp-mapdemo-master/image/locate.png deleted file mode 100644 index 0ac1474fbc02605b8dba3164a582bf058a6f3d57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5623 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 diff --git a/scr/wechat-weapp-mapdemo-master/image/locateHL.png b/scr/wechat-weapp-mapdemo-master/image/locateHL.png deleted file mode 100644 index 119c93431bf8dd203be5952f14ccfd9ec6c74521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4825 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 JwT4s7{{c-sx>x`J diff --git a/scr/wechat-weapp-mapdemo-master/image/location-control.png b/scr/wechat-weapp-mapdemo-master/image/location-control.png deleted file mode 100644 index a76333c2ec578a5502734036bb7b2204b0a805de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3531 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 I#U9W8Kk>&OmH+?% diff --git a/scr/wechat-weapp-mapdemo-master/image/location.png b/scr/wechat-weapp-mapdemo-master/image/location.png deleted file mode 100644 index 045971e4134a7804ff0d7f13be2ab0a4b676a8e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2479 zcmZWrc{~(a8$K9g7|W3CYC<8O*)Ya5S*Ofg#*M7uifM+CF_w{CW2aJ43O7?psnFCd z%6e54g5|pg^UN z-Nar~Y-ku%JgYqm>=ipmupP|~fIFw)-vgz^dnBFWMgt&W2LQYb0G7oe-a7zdFaUfw z2mrAN0QHCq^{ymw0vhDxNCxX0<5E+_8F560OQr3Rc>`BfL#sP9;77y}B$aIE?)|v> zyw3?gFXgOtV(fcfD~DYv6F<_6gH%9C~A7V|N^>c;@~1x26U6Rg#b|Ub7Ob%FFd@x~p%_ zzKZ%NRO7ba$+kIOZtUIk8o>3{>AKr4ZpzOteVmM_OAnQDr`h@;<9TBN(%*w`;w?e1+V~E&bbv?XIioBJea0eba``5`X2gUGVSe~9x-Sp`|%Z#GlQa(J*v8~RofTwv~ZemMk zG$JEI*+3pdA|yh>N(NmxDJxkX&ri+#PD-^yEUc{>NPD8*QLsNYeud87M(p60|KxCluX^Y060hN8HsKBecl7Q%V&R8_?O)4FY{smJL^d0UU7g$5kwXQk}$sc-X@%A~p@ znl2VS4@X}lKet-QfCSpkw;2!dUzrpfNK3ey`ovj^s-KzQfPhBaGBW7`uvTf_2mc_v z)$mX24ORK$fm2T2npb13+TZG_oPkbA^9*{J$CkOe)?Y9d*EK0+eUz6~_iu-dBc7#i zhk5ts+LD8mt(!@T!#PPw{kqhh!bI6IkLA3k>AC3y6sPyKgO()xcM-*6FoUHh?#^iv-Z}= z&U;3KL+j+~$LL|=~cPV+A6XWRmKqW^* zezz)j{@%cppdBV#=q}kMX)aK2Rd(L&KPt=H(<5#CHSvM1zbriZie=PJ#FA}=J%I%A zkm{?KFV*O*Uoe0n6qLZbVMCwKh!`q{hH68xisnSK^jgw#@OB* zkxs2_*p>q?_R-qGH?_EMJWcvCQ}d@vFJvh{b-ek?W614z9^B!qm#LKR8vyprC5fuX zpOmo7D)PRC8j&}TTT~(x6(Cm@BI_JhQvl0lDobq1fs(}ns6=_}=uDAMP{N$@&PY!LN zm+5$kz6MPPQsK>RcD4>A_r39L7|}zVq)M~fv<$DH;=nbpr73;+$Uv3e_>|RJ0!f3o zv?x-OtL~EvUy(el4qG)aRCHkwGmrO1^v_XAN2BHvm?WNdE@iepwVWx#-(?o5s}!Db zMqr(tEI4X&I6>PZN`5xo$m-nnyyh=Mvy8dtKl$l$*f?9UZ$C{L_o?jEq?Y{(&t~w zKDB%OPE#pV0qnVC8#8)yjl$&Cg&fs*pE`#_}gt&gwLI0ARHE`^Vxnsl;J`*-GWy zg^TFEc=pza8Ci)0RBlS9;fOC2ZT(4LW^3-48=Y4()eoo2t zpL~?aUfu#P(@}4+aN3T<=QT(z^@BE(<-pr;yR+yVlzm`f+c{vVD-@_4vN@!ifR$ zQjeZ7-C_Eae&57^rbpfdA<^LQdUD*vV&QUJ$*kv`-)MdRLhC^8tJ$@V8@WU<_QW^4 zQ}_Nde3v_$AAWNhf{C5p5xPsM>t6S#S4SF(mFkKgRZXpYe}WcTBi5hgYkv`5Y%Ci4 zD6$9Qd5LFW<}D`SJuLtsw2KDl@MyS#&!*X%y>#`OMtv3B z5kH^XxqH01hXT0_B0Y*Bb^wRL;!QDDrdUgNtOXHkMZ^(IFa#n7bJaD>`hN&)&LI{v zeuH3Uip84ZFzz@U(cF@VGy8{tt)wlA3A7D`XbzJb8yLj^RCZu6gBBRfq8~>whM z%%R7y8R1+aai16(4X_pK4QMe&{Rhn7(nKPK!3qxH0t++Q8=NsQMD70}UaUjh5P%~X z7mkQOB|!5B1dYXJaN{Ew;P0N$5#hl$zj{YU5o-)GlIF51%Y60R=X8HB!;N` zP-j0YfdR}>7FZ|yy7&8B#o2%#vL0?!z+{Cn#OFtcaM+BETZrOtxaepW_wNmg5f~lM zqI1Gg;S4UCekk0O#SZ>ANDoIxN72z(EY6DX&x|La#Jxt56OW6f0CkTG`Ih~`wEqHH CE-H)w diff --git a/scr/wechat-weapp-mapdemo-master/image/logo.png b/scr/wechat-weapp-mapdemo-master/image/logo.png deleted file mode 100644 index 76e8095ca7ac49b43c38de3118b4c4e0ceac2ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9407 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 diff --git a/scr/wechat-weapp-mapdemo-master/image/map_active.png b/scr/wechat-weapp-mapdemo-master/image/map_active.png deleted file mode 100644 index 119c93431bf8dd203be5952f14ccfd9ec6c74521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4825 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 JwT4s7{{c-sx>x`J diff --git a/scr/wechat-weapp-mapdemo-master/image/navigator.jpg b/scr/wechat-weapp-mapdemo-master/image/navigator.jpg deleted file mode 100644 index ffbc1cf71b78e172a79fda573bf5783096861fdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60012 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 KMNUMnLSTYGxfN3Y diff --git a/scr/wechat-weapp-mapdemo-master/image/plus.png b/scr/wechat-weapp-mapdemo-master/image/plus.png deleted file mode 100644 index 73ddfe38b3506689a58960ac244a04b871f90074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 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

d0sn9=}W}ClfgA z7Wk!wiA`PN1vHUm}$nx}rTpgImB*b84G~C|?UoP`E zZh^J{n_$*}o&k{Bdk#Wo0wCUu$9v$m{B1}J3vdv^J|MeRo{}#hqy_+DH$0Ys&GZco z5^So1cpL?Dkm)&j)+ekhxuwuxxO1Y@P;f24^5Hz7F94(&d;=jfgJPWE9132=--ZHb z0hS9_LR_1OPDVptK}dn1AeVYZg8v1~T^NS4ZvmDA%Y$pdt}Ml+qLOcYLYYwLCvtV= zb@0_Pf8*wh1-KuOQ!wnWXN9r~LTU^kcEDo}*zCZeLHs2)zx=RGM*9IX71{UZxURsK z0oXkM9Bd9x)isbeziDUMo6T=l0Z8?-UK3IXn@}sVHhdM_-F7oi*Db(fnLHK8S}+il z^_no&3YKB|!tEcyJjrj!JqysDv}@lW0g&niswSjBHlbGJq&9DL8fUwiXWAB6fSA0X zs4DFgJd7Av5ZXEejAQZ6J3G4AZswV^1$H6i;{e~Hq+?_uVBkSWn*fM8c<^ev>EKX) z1|532NxUJI7n{Be0G@F(VK36s0))2W0AnuRr-Gjace35hGirf7c;g-8uK|3#VOI;% z3WT;r0mi0yp8|dk+|_n(z)yZBgg0T$1o*Vuzo{h%ZLk51P4Ipn_-SxM`~=#1==~D- zEr2iMqnAi0E2K3DV=V?i_P}q}j+4M)ZmQYj&H}U6+lHt16dDlPB>^yU?z0$7K=PbR z3$X5V5(;p4`b=;sz;{u1g<|Co9SCEU10eJ8oAZp^C@}(D0M>=7AZQ7g8w(Zyc%hxV z4>btuq79%dgd4#~9u95~4hkKFAn$_-yb^$}GAM$1Ek}a_VO?Vals(}#1kAN+9zP&= z0dv6P6>$K;No4L^CUY%!4M10hXM>~$4MJIo1DMU=UIey5*%|LG!TAd2+$HDaY86}q n_uXI{bQJ*HIs7(cS>XQwhK9E2fZzcZNPyr3cS`~U2<{Nv-GjUP5}e@f?(VR-yTjtXxbtuB=l!aF zYN?$%GjnE6cTZp4SNCj~ysS6|8ZjCS3=D>(gs3764D2Zk4E$#lIOxdKrGOUn3)N0S z!x07sv+v(OYytx&2@K3f7)jA@%C5^N>FAySo>*+l6vxT*j&#gl` zwfyYoqx|grZ~N(z4N~sechrYhPi-=$rt5##PHZ}^QcW}N+-N>4(Bh$SW^kfzz~P|< zeFtV5Ka5L&?52p4$PGww8wJ*1bzPmiUC76(RhL1fs`Nx z+8rL~CO|y<4|KF3!FJAd+f`qGYZ#2)K=E(yy;u*#@Jlp2u+o$N(|?CMc$PUnBXl19 zb@cT3_$RZIugdG@lRE8Ud}gjV;m(59FCvuRrcY^^!XT9|o2%q{N)A?p%%i)jTO>;Ctk8658l# z7VBs+h?sD>+3`2Goy()+eqcnjbbfTM_~uzaH#74GZ0HZxAOcK?`Q|RA zzD*80kKpddf!8jy7)UF>jA6MRFT?x!J0&m+reIl#&!>HTC~aIQ(~LateYgXE-SU@2 ze0&3a%^PnYngQax$C0oxzZ4Wi9!EdRA+ihP`{>afNdcCR)2jy_@`|abh&leSUsYtu zMdO=bzI6KK3vtYFh7Y2VOS!%-EA>i0Q>d&e8g9HO(5Riq(?BbT;`_XlVO!AsP+&2J z>OI4$a?$1pbU}!Wj%E@TLYt4!Em`W|+c>DLI2c02VnUp0tkC#$GvVW`vRjL?JmeXhe$T&!y$h+EhbCA6S6C;?-yrw8vs*U zUTI=$J0()uh)lmJ!izvYF{me4;53~9}sxvBcXv3)_{Xgc-m>c@2 z`-W8EaLKp=I}ym5+iS*226Z1TjHg6;3A_&rYUZ#I+fD}_!}s;t?+{)H8P}8_rWH38 zYPl~ae})(uci41Cqb%Ogvu}nB^km*$?v7k-ln6g>VeOwTp>vT=Z;)3)reF%-VF?W2 z0&R8MKi*NGKHq1{Am;ir;i{XyIPzLMXZnKm^cE(DX555YNYu~GuOeWVVJri{perzF z>-GD~2TQPMv0o#t68tD>Vy|5W26a% z<(5rn1=SnkI0jLe!k-*+07#_&%pV>eCi6I{ZawdKiqL)Dj^bXwA9v}%^GBy%!HZS#}~?C4E+NZg&I zChACdWQYy81@jc)RD_Vx``;laYY+6$gkZKm(w1qVGPD~Lvi~Q9`Ir0Wv2?^Z>Q*lT z(vcaP6fW!GJi5oXnLWAGy;6qpU7o6%8MOrt3SCpB`DhZaNZ(d$C%P{gohAb{xrQIb zR5~=2Odd)W1?Sp~ZANN{2J*jt0bwxJaxjeqgq$gD-w)kG_V!HdTAKG41_lNkyCGJd z&v`tUua6g7z37Brp8IHoVB5Sw{Ohp7u)8p4r4=nlGnuc~$inyC(Vjb$F>e%rydR(W07-utFAzV$4tV*DMw6`bo ztHEl?sg?jvPTYPKrT>EhVd4QBj`vW|eH~pbUo>twQ9oq0>1QIic7DOhCc`Hf>VqGM zzCV{e*h|Kil$QQe=y*E+9lGv4+~(89+sg)X^A3(LkNi_GiA}PQ*CXeGmPh|?lFxlF zx%bf!I6Gu#ZYEv_1GiSYe!f?iiU%`j!4VIrf~U{f~o z@^9KIj?RyhZFF`D7WutT)5Fi==sIWscl`CaIdoOw$7v}Y(69peaQ_el-6`|RnpenY zOjb%o;q1}SIklmn_Df97jR_o^1KH+cKzj89ja%RNJFb9{_RWA7}D z^K+%+zJ0CCdLnpprP3t(syR4F__XOK!LFURph#$D`aRDF3!W9>`^|vHb@$`b#tlpk zWOcc}Y{o~kmZsxr4?b^6Z)@jXrptAj1=9MmX|SG`;zIY`ST74c(9i3>58PRIbE{Ux zjN>ji6im}G;r9EDSpDrl3Yak2xis?8>7Y48ubJYmc{4d8$)<$Cjg3TYXwO_L(0?T6 z`I#o1%-Nxsr9+f9USL^vYty#>**XoQ3)Uy513}B{BM%QT? zU--Lwzq(yeaN`)B>e+v_-@9E#=NM%-ToZ5eNflsyf5P_eO`_?-d^v>Jx-?fGd#|27B)Q3nmgC;UY;sn zGfQnd9uk@5THTK77uxm(&mXu2FD}nqI!Sn5{jfY?#wBo5!G381Js|`;N%%}-d!%HQ zK4Knv5M1VT*GMeD)l|%Cp9}+eyYC$@b5kVNXA(05Za?vHi$RF}7{m&5XjMb3qhPym ztz(sybAhSu!<~dFo(le0$~#gQE~mXQb#|AnRb%e4#Z_|+cEhcdbd@uI0hXKQ+&?wk zzvP0!c3W-27(jqS26S?Zf1*KgK@s%=os??Fk`K66SxI z*X)GLc$t=ZJAQlVd_(@)2^k=f12^mk5hDje!?+FAI1{{dR{_(hNJ*>6Xv{NnIc9!p zged#3qZ*aAC7QxCE`RpxnvXSxhtteEWV!8}x7fJly=4{Fo_V?P2?f`bce$o}_X!td z{tA@O)La=k3pzBmW-7w%g?qlPlp3*PBY)w%f+UJrQ%EAqd?U(*1|uGD@36 zgjh{3bDE3={AbAzXD;m|^4>$Algcz3&y;f+pfRZhX`@)Yiw#`_+rK7<=SPI1Cc~Zg|aXA@gr{+ zAmO@tQrW@~9`8^o@w)`uFB)&4mUfaAO$&zGlVYJsnAX1S?v9SG^ThVsd-4osdUx+f z>zR%0M68IaTQy77VU5oW!4 ztbBDoKATsc%?u3+QG_V-5d#qzT+Zt>#y+QVzgeG-ym=aqF!bkl>seCmRIg~)c0L^o zGd+RtI_}yTK|YWO-84naZKBu9|KfP>7`x}i2YUaHz8G(dAR#W};rQscJ8^PXy|bRr zBqlGT)8q%F2j|y!9xiHRjP65imbNd$36(F_r@~OU-%Uv1Uw8x8n>EoKSl+r3`@Bq^ z`>?$&+^x9;f^}bx)V8Yrmo4y-1LO*4{>du(?LK-aj^^z^9ILJAtly{1;~}w<*{R7H zsa>YB^EG(QLibH^D5Afiv)t=y4ueEGm5WE3q%r>2-MR4Ox--w}hDTAs$-Mc-^SH~I zp?PRa*IK4xC;*y}Kog9@343+KotKLc;b$-uw3aw6RV#I_T0!V%ZO2JcN#%FHmB|+y z>wk|7MA=%c)-C-~(mp-pU7gaZ-r8L-S+BpJuiPPgJ_`z{uiyGQG2-L3SJ8UbycJA> zA^gwSy7Xhfw9q`rDTC(~D$Vm0%L+P1M$d|iC9%$5&tT-&JN}KAr59n(vi$KiEz9!K z8r$XTN;RFOHk+4D=ktn^_1e?NiPfvW$LHSHQ-$Zr)dzQ-9_uqRL?_nIV>!>zXMqsY z=`cUZdlR0VZvtQ|o-JQU5xBRwb1!-H!9KyVvi(*m^Kmu~3a{5na?Cn)_s1K9t^4ce z-dCx2r%WF8&QE+ZsXpnvSNjWEF6T~}sg8GzWS-t*k65xDPFw!Eb$~L@y}uYUg>MFT z<0Y;X&wHg4uNTO|$$U;nJ410-mzT116|rBl<%=S8U=HGp_Nvbvb)4o@5D^h4%G~#u zeKZ~hE6HC*Zx$vpI7>&L8|k4Aq;gODHio(KVPrU`hcokKl$-ov442&XZQm#3?dohk z<+3JSxBZ3N5=}P(^E%1aN${czKJ)E)zdLrraYC^0cP6f|Ff;?@^8!l6USITL>AD~0 z3qMXp&sS(a^`J8+kL_vNwma>e>N=*r&NsE*@8S!4?IdA6A7?UexcGFN3O#|pSK`p&%;=$FT8VYBG1qAw0K9?ycM+J zy<4u(u*d#tjJxtz{n5jICNmwKM*Y!W&CYALnPVUG)u#a_xjj~XeoTvoGEmYBQl?y*2dLb{$@f~<$c8XqIoDBp<1EN zfAgq|_i}n8?o(^EJSN<7+tRFizkT=iFfo>~Ua`JT7SSJ@jzJy$fKsCp{ z&6EFot;K0U%W>=KW@3rx?vC_eI zcPS@SWgb^w(Q=YW5+1I*Vo;mNNm_At{rlFf9UtGrWHhK*q+>1b*1U(S8r`f%mio-d`CD>O{rp0+LSTGk5oP1f9=kk?)2^3R(uao@aND!uFT zDjEv5x*CF)FUKq9Gcq#f=l3!)Y$_KTTXT;5koO=0J|#|;|F@D|o}!kPM`(mjdJh4S z`#e`Nw_WT7cP4bc7Q!2o+%D_bJ%is?D}_x~F0JM&VjqvJqcAuz>hZ^-koow3JqfH= zRGgiit-o$=`n_O~l9Cp(Mk9E8Lun5u0v=g9Ycn(T8l$1@{s<@2l4?Ru(_pqS#gOOkNUzsd^n9P$@V|58^o6im{`B9Q)i6Whq_Xl zbC;xw(p8-nmqxGFm)$6zw|v8y@Wg_a;F2+qRUhFxA5EXEa}FD;e@KUSwCb?RvUm8q zr7<_#IkUCG##Y66$?v7Lu|=o$%~Iy3A?e7a^XS~#AJf#J_n%ipbHe1!AU&m%jQxn> zYn7`*!Pq6D?)Hwi1-dAz*?|FfHaJkUP^3CbGDL;0hBtP+$yf(``%#GypfKmQ7K z=Gjoj=|4IA{|_%h?T1uU7dl=S^!>XJ;y>9;7Ff2LHG^{BR&&f3J8cc#Z}%EJUu`EzmqQA+r2x< z%?$0HM@4o9A^N~xL|Gm{@GnE{`C!*$qDQ=#{4JabjzFTYv0e@ zInZ-z2Ow7Rh+mv9q=LU^j~BPJwu%R-{sEf~L#*ro<5B;N$7!7>qkYaiuk0g~@uS7F zShZUPL;i2O4Vq)2|4)Jcl=T02!T(g)sRx)yzXQ=KlVFBCJw15|k$Vq8MaQdRYFfyO zhmvgg4sp1EEJG(7|9>ZHuL3fgpBPNrp?W6Nn!AX~tTUKKMNGW`K4yZ#k0u9}s;XEK z_{W7zCXjNyvCl=p?EVzu+!`=wv7hENpA%Pntd>_;Cc~$;hR(0GeMn0VK<+cojuD ztSfd$B!bIKNo#V%symPN7qchow)-H$zanH;ISLFSj~#<&j#QGdiHsVTtlCvDSQFZr zkWqWVL^i{H>q+pqb>n(-LOuU*2%+pM@b`*y={RI1*pPA1ezy4zjLNbcG^eHod*5NO zcj88(uGJrxUt2A|SXJuY|MJz2Woqv;JE8Te(~_}UM$}z&cRvBeTJ%NoD&2) z#=SGPT90rcQv8eC+lnQl%7P!&b&3+h6a(QV} ztP_)D%+a-0b=y3FNxRWx7IU^41Kt_QW$(7c$!^M;~JM?>-vWn@nvA{ zuQTd);ge8+xVAcwIYrQ1aXn{*T859$3hwRFMx%PCdkJF?BbaF7)J{rY1m%D~wla3I zPLu3++!4Npu(yc5h{zVkfX?2Z2K#k^Yw!m(qE`C^Z2wwLnm8M?YYsE0(@f_E?#ukD zcJ9Tw%0V`@EhF0ng(!Hu1Xa;bn!VY6-0GW%agBoG# zNooKan^OeZTuPLi2lZ}yeHEXR^gW;3P|qDR&_FJGzC5W|I*yBH7JrP( z2!6!g?q6=a29x+#?=~sj6rH z(u6Emh|z2Z`+xhhuy=H~S>6UneMwDmc{7fyn;bB7c>d-{%g^Izo!YQnBjAOH&ClIL zIL1Zuo#9I=_t7{F6lsL0d4;w?$KZOObN6xetFJd+mdk1%{P5IKQ`fhluCE9k$MDlK zK0CVjnzhTo`~{3b3$(PCB71 zb~`$|^s>K~k8a`9!`A2Goo`{sZRKtm4}~{kNBwK9Rxe^w`J%8cdv))Qm%j_{3%!rq z>q(u>$EDC`SAVz2=06YzkmmwII2kk(H`oD1zs&XtJ$-|jK~RWB-7$f7m(9w`*&cJ7nOk*{wtK(PN|FL2~P#ND}H z+PWwDSJQz`Ko|>_2^(O4=ug4@4+w$)oqqtPH+>U&WT>iF1pjxCoep<<{2Lus@S z`WQSoFJTgn3Qz#m1Edqsa)Z;ftS8> z_%%Etsx&@X8RrlSIDvLPs?r?k&$p|A?U)M6D1HSsi8%QjG*@ZTn?x!-QbInNYebwH z&s^eV?J|^9loD()i1dYc_bLN%0{{@S)j!!6j@$R7VA|-_j60GB`dUkZ1dP#fj^Wku z^#XcsVNB@F>Ay3p5O9Q{b?cew)=wOwsh_@Jnr4p02*?+H=7}04()niJdN|4CN#euJAow@${!4!P!tM zSGaZ)wYFK}I^ON{^b%T_tt|mjs=tN*!(*o@l(Z&U^Bw^fc})Xv0$19w7N+?no99A! z9Xu*OmfyX?3i5iUI=PP=CR!VBiRilUmzPS8x^)M!b8pPA_ul?hr^3uDp%88#fwzhU@?P{|88A+IA56P(^48 zAyD8-9w!cx=^Bib=KNcNQyF$B>eUXiAm{j-<6OF-2uCZYe1>gd(Pbt+HeR(hXWJk) z+7LLDShGm+MlY#e9$@0Q*v@%i7g9D3o62rg`@obasLxC$_bB&Hk}-XG!aR%XWR{jv^Rt-AXBY^Q}ZRL0vz4o<4WF5d%kv6%|R0^4J&vqkIu2Z+P_}Lz-%G8u~6R?OA7b=!pv8fY5SLmJd` zs2Ak51E|s3qX)v#?$oM2Y7w(YP=z^QB$Go@QO%bmItTU`eIQV-dSz+NJ9N|GRMSn)F8s&r%}B(zu;S`pq}IH z3Lsn2anwRGnQ00~si()vJ9@6$!wU_c_owTychZ&=a%Abh$g(IxEQjKV)!wg0yyT-< z;1A43S1ruSCAk>euTVY+bW2dj0XjowDBc5c{o!|-SmnYF-EQfb(O;F^D$QDBqdAd)yr@; zJaSe1`QOwuCbvwmKcpH??nN%01o%3o&e_(xt?q`2M1Ak7gzef2Ge)v!0mmBk1^p{^ z@9(4bxUnAD|n?zmxL%FZ{Q`dSsgCXy5rJb`%h9D%LXtZ1x$qhN7Hxmg;EgDw)k!iPc(w&}hp=0swqR`facX?zV; ze8f?Y2J`Tg7&8hyAmS6dvg+R$?i%!Hfsu>9=FdSY11um0;=;z^7njqALWtc}#vyC- zD`ERhvlm%Fg3*NbDd+L6^umrix#WW@a~;d`tfI@QJv4tPQZnE{r<=r%t+m3<4I`p3 zMVP;C`~J6vhfPXs%a{Q2XUT@1$3bs*v%?FXz+?7^?C3xlr4SpZk{6FjpVH=$l$r(X zHC~flV8Sv^S6I456hQ$r6vSe#klKOP+N!Cx z=i^3>$QuilkeuPjx{rrbA2f1I-(0Xaj!MGJHd9RmpCy9%9iFx9R}p*@`OcT$1ngD| z-Ndmqz}j8*bk?w0QYA=6=hQjW9yF2U$hq?KOSRdrEF9_|b3#MErOTy6SXo7vVTCIg z=P2g%u^Z7+4%5#W5lJ_GFGeV3SH>@*7_@>B(4?bwclXD<(<^3DRLcBx(m|E24BvT% zj`83{#G0-TcI=v!q98)meIJ9dEL`gSoSb?PDm#hH>&?YWCM)pvHH#haAag8#EuSI*%;Dg-AYm4F)%_n|yt!tbr{yg@fe(kL_w|1Uw>RF;Mxbm2}+-RP9w<_&+g$6{M7Q%+DVH>-! z@;VpBqv2SVB@V@?KR3UP9aNJzJOdsfgtv0%dv~jIJIgJm?$TEl4)Ie&&TQTm6jl5H zkAaK5SfEu@CAa?`?nfcA{iaI%w~+x>yTqc?|7m zRkuJ-QpZtM8$Ah4TsEKyElMX=?mlo30hp7NSrY~TkVPO0)iYkBTM*QiY$~RVD ztNPAkl*|3)%st2MZ@}6y2cDJ>JDkU_FU9*9p5$wKxW9dECW%-B`9wl%uW>dxv0;lT z@LdO##VE?$OQkjDG_si&Z8wM+ochM*tJane?QRwTf56r664Y~=a%eB2{a12+3dCIA zQ;eloCss&Un(}>^zP6wj&p0{Q5{XSt&5PQCgpJyNbaK7WS9-_j_ChNR?azo!`5~0D zXZg;y0#X4v02!LwjCCxRzCK=R7QGajV%T9BYWpNxPZBx%kwT6m_zZ!#^p|kEyj7ss zcYwm!pRV8H%<~#5HjW~Hr9+@RSR!@z{=ziC3jVCNs97}ZtbrHS`Ev=CF#>kV@W5sl zHQ9#I&i(ZUdD{91oz%oO)~fYWPH{(1Wv%|r`#p7^{;UyhWn6H3EH&`uDJ`IQRv_YO zBg6B{$bpOCOHX``+8J9j`MPH7i5>&T{~BwITf4thQJw%d^kxt3wX)n}RHu@2L-Ozl zstj|d5mi&=(Oh4??E9{5RWDAj3;j*#z+r<+ia}7o3Oy*Mwi-^a%g`9#-pt98kCA|* zfwcJ-*ANPV$l>|o1XC&3RX5m=an_wY&PI?V0UiZX7N+V1=SS;tBM`f7-L>q_trSmxXRdCsz2-T<{!b7264qQv6+kasy);P7vtC| zy}&B|9Dq{`EjQ2jzyf^V45K8XgiM!`WwCPADrvPw4}oJ|%a2d-YHVl`zXNayVQv5< zUAb62c>1`zhjw3hMutt|+9cB=vvID$rmF+qo&t$`4(a#1VkC+4oSH}>Rxz`v#Q)5R zcOk*h7tzU`4Xw_`sT$Sc&%yN(}bVr%8!EJVD`ScD^^i4;2-xtpty;k0W!MZ|OJgH=|jjM)AB9@?I0>kUw!8?x2 zw(%g(lFaN;?kZHt@Ar~fR-L797zm4qP#-av=XcDbe*6fU;0A4&S+UmiY}{O-_w@pC2sz*;4Ewja!;LZ6H8+12EBufvi%1*Iq;SVFaVl_fUwdPh1|8 z)B&Cm3KV@j!~lXf7I~Tpd$AocFKTJk$Ukx(BWd3vKASoJj0ybNMG(FtVSzSJDS)iN z)N>RH+u@h|HLRkdqM@N7F)>k(h4$F^liVv$u`-mg6ylK;Wo3GAW)Dog9sXe$x~EOu z=tNay5M7XIZAOGy2AtJK^Z`Tui+S^^x z1rPUwfde@i|4a{072<=ETCQaKUBm~a4Pz+s&E#V03Mcb zurKir&-%Woj9IwSHv=VZ6ngz$HVq0iFoL=;XE|+}G~0K21s_@)CpV^fb@2%LnG-~Q zlYmSotP0(IKv-s7Lj#e98JuG4-fiac55n21kqMK*9U{B}hM54G7` z?dx;P2+8z4JY8udF`59P4(AB05G@+WYZ5o-qe{R&_MQz8FQQ+8XvTT6xUm|y$x)9E zlEZtb2lM=e*py%-*#Ep&$t$6fXUz{AGV1OAvqaVy?`Az7zmWT}dm^8ldps8=1lnF_ zxEXCfJle58;6Sjtgj-TQEun%Chgo!ZZ~)`k+bigC`w>Jl*z`R9jWHpJ4+*5=%dOxF zrIm*1tiq*b^4gd`*jh(%aw56dp#QSMuB9|`qQT@eMq!TD0!Lp47uC}G_Eu=O1_uZG zo^+x4Qp@us{Oo=_`6HV%@}bODfaAUG>O`v6HXNBd*Vc4Rej--Z&^t|Sk(;QLkD)of=SyxPyj3+76_{q2w;OsLXh8F(Qm_`>fT zbYeWE=u$R|&&5x<;u3Ra6E(IYf)IYkIgttH_f<|VItIrk+2$*+0EfVRSY=2g=8rv! z`SN}@DtTP~vYtJ~#Lyzint`~TtpS|~<1P~t7ERCb)8a?!>4icFoyHa-kvc`qc+nMw zFXz3Pp}gF@R{+D^(+kbb5O9@vY%i4(WUs?LtL|HoJoBTbp+Ba~maCs2|V1ZZJj{lS7gXqAu-`Mlb~+Y8U8OlTrYg z+#J_NtrgTbLP<%7h=izQC`DPJ#8d@3B*ukeC!kXYEPu=@v@g9VMp!e zm`I-dgM?P;GpHZ@!oP@yL9qF$%yR*yyH*zPNyz>+_U{_?5|TWA=y$51v87%%1XKm1 z40`{(62@tamFuxyrAyy*_}J349J}y$GJ5(-s(M-hnL^QxtE6>H$V|YjxdaRIvG>@j zrj%95#ymgdF(-?l_4LC-Si=l{MigG5d0ra?_4$+1vGrSk&ExwqAD^R#t!28$UaNrd zD)e9_>Ou0V7>S;NBl+CwPmovvDka%id<{fJ2CF}99C`GRckD|`II4jORCum-Yw>w_ zoJ^%{WjG~+lcDk0eP)iDgD0Wt>9DD}w#Ta5S0#2ovlM?7;Fu5qS%tqGu$_5k@KpE% z$Q=RPv-n}-jfrwPwKmFAr3(4=S@6GmH4~d&vog^AC}2 zQ;V^-3~!gv6sYyGatTfy8hUoPHPt(^gu89yzT2S$B*AV2U<*pnvWeyTGR8L>%D>eL znmCJ(RY*KIcjT%_fx7>|w=Xdb`$@Ew(m+|O!1-wcTMNngIdNwd1kwuFRL3r(h!iW< zi1LjS31#xhX}Z5SvcUrdQmP1uy<3L&J73@?T~3#c<0}$=Ao&9ofR=`Ggnz)z;f|}P z{hIH9y>J43%y)tNJd0-Z!$cVlYwaDU{BQ-+-y%3Is<9H6bE(DqtRj9{hp};YzUf(k z*1cEevxe|llf)W%a5c3=^1E!Fe8;%Vf^2S+$FQpxMX069JV`c|5Ic1IMw}&g=pq(< zy%t;<^?988?E#C9dMK60Mh1+7km^B5-PbeM_P+m;)@KJfD_|{2;wZIJcH@Ml%R9Ij zYuV_b>CRGv19`&@ptg|dgYVK`+Iku(YY2{1Szl~jivfXY-*(^)ysBx}?t$atBLK5< z1b?xfVSaJ&$&)xq^}0vxtG(Uh=x{`hx17qKi`%^qm`U(op{@~Dk9WvpY7oLY4B^*h zb_)@r>q{Sm%)sZx1bdZX}AlAWn$qcMrrXkZ>!V;z`A#_8XdE|c46snS#B zLS7fGw9aA_5P2k&ep&ad!d zxs!3Wr)(u5qS1WF!Pc*;so6L?XyotpxU+zx*^kfX@~)ZXFn4X?bmq7u&@qKXxdnos zQcD+zxP?Snz#eyJ7(w5cAa_v8^S-~|zWt1g()E|B`X^ddfxxI}Bk&rc#$2kjdajkj zy`zqrDA`ui*Juu&Vmlo4u+(hW&@t4I3zeeeG{>caoLqS zc4>y#TFr?w(9s=AffNzFAC9lTG4uS&FEW#~#Y4WGFb-98I;tMo5-L3=U zD6lgw$l|G+rQv68vjr+qWhe#K{hSUbqb-Dk?PI`+nP`quSw8}4ynL7SO)9cKoLp~* zjS$?id#9>u!8nnMqKqAV_O!$IWu(#8AQc@T75fDTgwwIp}4KMoeK;QMJOvGp9oa$e>m6cZ(Un9;eCws`& z5knmyR9g<(MI$eZs;d`YSvD*`g(TjZ$#^xEmrZo26j=`&vC$ZMj;DcPbTx8P@?u}r zCn}D7%Q;LMk!3Km%f<2O^iq;s6P3S^C4t*K5uj~1VT5Xa=lYJ0j+T~|xAQ2#eNmvC zl}_yiLTYQ|U~CZ@<8s+xnQFX*fZ$NdQPv!B?PBmKFn%bJLnAx?r?p7_ZQu|Y`-&lf z$EcB1vK2(pvZO)-tj?;=MTZ%qLV;HEXV8v{MpiJ^)L`~r=#~Ml%YTDVBS2WlFQ2^X zXRR_=g`Q4?UWWcKGJbD)IcNORHSDvMlPh3cS(9H2m$nL7>Qyyc5@$f>iz0BO=G}W+ zOH2NTc4$cfV*gri8sHTwD@d=zOUWSOawgZ#@rlUyde! zYHP1G6}v#W>-6;VcAZ`lff`0TPhH)lbbUSx`;b#(L1)vlY6VKTrnRO@=IJ$3TU)uh zde9Alr8&6O0~ZmSJaG{Fu>DT_5+^2A0Vd;kaM zeUCaoHWvA^r3{~u2CdQ+l@Qe>1To(BowfgBEB=YVhZYZ3H~!T#!kCKaH1!?u0q(tU z{(JI&=F|btfOjDC`C}Fpgjn*%dM(8+pe|b(DsULbL-EI1D~!zlZtO&o3#DQ6z7TvK!<;hR)fH``+GLe_ z&ba}1Md`6XwF=Y~02Hz*xP|%0sfc}Vq2yA725ZAO_g(AZbcm~bO@>I2ca`B~ z(~YA_8dxGqVf69x7l(%x^Ewes3P;4t+r)LYGW883TEA3x-$`03>p2?v%PrWJvF!nk zZhCar6c#%5=I~+It9V306UoA7=WbiHP$Mj}`uNNo?=-daU4j-*XIxp<{5b$Vri^Nf z=3xnEim0kJEfR>UW|o!_KXSn)I^0kg8s)7BCF0U(qcY2RzoL!L#@~+VQqw4|XcVj9 zHw!0KXEJrVrEveq#%eZRk|0mi#?D;abvRz}ZU43@Y?tma-6nb_y=+-{aq)w>HTGj0 zG00q?vRWCZByuz~ag2|=8cdN!roR0Fn}a^zo$r~yAvo=}YDmDW;kI?H`Z2(N14Pe= zQ}VN{&~<0ppf3hvVmhql1LC9^G-;=f{#PO<48o)9g~wG9JH&c8J*%oOEA$NciQsp{ z*?`&#F&kyD&9h}dC}KV~wlb!`oG6A#1f+Q&eGp{%u+qL@>+(+h^iYv-Y3D;#E8Lex z&>70f;$JhHD9%P|{uVb~-)K>M;D~(5u-@TK!9w($sWc@F#IHbP&Bk<6KU$-lwf3`y zQo^Nk@$?@m$F^h>B36GL@3eM=#EtLjKbuBJ9Db=z*Z2cEdHSzB#l=BGv&#R<+BESr z$iyaQ)XS3}xRQQY6}XBR{ul-P1sEt7Y}(f#xp6VHmnlldNer*x7O(P~x%5jn{Fx)G zQm1fMn>`9mSdOLkD49)JGywi8*N@=csS0UK6l1s(wYcj~!LolP)7WOC5>(!J&$U8H zt=T!YwbD#^dN@27dH;iDFZo+s?(kC17sYz$UtQe?2;aB&b^`CO(FolWQ;7Q~>StKdX0rwJ^U?FQPVNti#UW6@;`u%uO+=pp)-%zPX>;B`Mn$!jd)|pMA+VN9e3H7zDO$b*gRT}+(BXi4|*o7 z9}hwsn|>`eY7ZY?%=8=Y))R06&K64uSVt)yt}jm7oLJ;)Xinw?So;1COMlLJv@w6EBWq! zzX@i@(oI+-*8=eW;v|yh{t=x7Suk)lqP+SJoaNW})49tLdGQ=kAs!T!m8B)Sh4_EO zBP8raAFdcOVk;@>fh!A?nS_NlemMwWqujQv+Q%_zSx~08hsR3R5_!w=dh5sg%>~3T zlFNVMp!^!A@iWYbs_jF8I}b$6ShM&iRr@=1j&FE8D!~7j8h+cX$-vLgS z-fhtSR2KK29#L38_*`A@huzrN*wqAle0)w$&H*+nXwNdxVdwsSyXm`m&+#2EKr)W^ zh<*k|1|C#gh9V%S5^GA6Xo{ICpGzu9rhlV(jqoi)UMF6CRqKu? ztYIkKsdto!9Vo>S2RLe6iOtXd6rv<^C1Mdg=K5$0qWgcn0CXr&#;|xOe#Y3L`UjI9EPx2(%}N}u=_lCfI$E%o)~U`JB7^(m>~xXFTpHo5M6 z$H;0H+htvr&kf(18eXV)&d7r~e$kGwH96=FLf_u>`vhK(CL|=R)M~CND?2%mDK9TK zseL%O`L7BV1ICR63y=c6ffd{OZEdQv``{ z=naNfkK|1PxxBi{$xR&1mFl`~1u4^WTFgKRHE1uhczGbS<_E2-ey9Wz{yF+ky zhv4oO+=IJoaCZn2nBea2!QCa_aL&E&z8}!tyKC1jTdQh=HKtS`iYj8@#&INy%E><< zew?I{S2V6co|C3*rjV_gnlY(AKhA;Ro5`meaN!;d5)`$LP)b~GA3pve1$XRSZuK$Q zNv-dNC|II_6Cka3Sykn{*2I)-b+rUEcXw~5g|^{L-lhDjE>U_=L$|tw(pIHHd7wLh zi%n_52{3t6q#^4q!Au6sxA^z|wrjyp`}ujrN23B&}4XAKj?qoEXYVv`@=ZS zQk>A<4w)BFui{c(!G3h1y434odVuf+KRys3rGOLXaXg}*(Yy^Nx)&7+RD87aM7E~Bg-$v!p5zU4S5EBl7#lD96IxxyhPj+fFTD3{4#(u4Gk zLKq;={iCC@G8zMFjUyY#1ko4trPJdgOktO%=DSzs1U4v8!SJ;x@{% zt#K!{ZS#|zc^5aG94CFF{0&N(^JL)Gv0l(9ra}8uxOR~hpUX3vQ`q!Ns-oiIzmdSHut~` zn+o_>uzy)*5}xa+(Q-aAA<-L2q~PS%zq$%(iBms5()$mcjJOnJW^H)Z)#DBIX}#*0gcVAE@E0_dE?tIdO38VsT-H>S#+_!;+@RQxJ@v}w}g zBft|=q=b5ee&VtQ)aSNzrs6>^5iF;5aH96s?BmaaeMu=Z>(L3Lc8xV>+U}i%T)|Cr zr5>SSJRtAUU#~Ec!X-o%a-W~|?mo0d9j3}0Gn&!LjRu|Mdx~0Khr!I@n3+p8xC`d$ zhCmY%3mT-U&KZPi_~X}Bf)t58ga7ZXwo=_Ivw*#Xozg0G!`_a4qR}aA9>HyD?2K`Y z-=f>L&SrIMgyfM!rQoow9_WV`J~dl};YZ>_QK-(x(jA(yC6Kd)CaEbGQ7kH5aA?EXPQ0J-aRp&Z#%-&}6jM^amSA@qaO^Q1S?FG`aO|Uc-lq9euhOSUp2ZEa@N;uT=O~UXw zSvG#zfb!=to7%xyW0bsjYB!y!F96Imh5*2`+%yUCP{dwq3)$alt78sJ>N7BC*y%k- zm2SUg<0FH3GE@@20mOK+jI#IZX0*+TGlE1cgm4Tgg}@8nxM((# znXA65!sqw0)V*KeIS%NotfwB##DiDcuXqB->~MdoX#O@)ymM1k?_Z`?+U4>GirNLq4v9B6NSi5>*=9HLyYsyN86wfV zs@M;$WI#^CpPzj$^o3q40-_Ny=qbGE1bp%C*&C#(wxo1^r2yBJU_}v$nprC-kdsFl z%vG6PY;(T~ZpZ~h z)TSU|KKr?>J%)}US+iKJ@F%%(eP~sSl}Bflv|8^Y@S9!~A)rhulSH#Xt@X1h??oMH zepi>coCXfJb-PRmI{w+>ilOmBXYpn;z}Gu~Pce;Y`B80JwU)ojRj7Kit=Q32QE@g} zZYo~UQ!E#A>p1aJO_rW>{M;0YkX$s6dtrrtZko5QnMvat+6uALue1szT%0jYkyypJ z(E&rRZX^IBJ5?X7g(L-G6WjPzS&KyAY`a##-cLKDVQ!WH@uD-e*(d{Rs1a6=JA9Ua zwi)%Yhh`$v?;7g2!G2{g(O{pEw>y?7XPZlwf<#fP%(lF;SI-B>RFnU~ru{vBKXp%B z@dvd&gO5WC9+OM(*KySQJnr&*8C`LtcrpsBc|_GEFdoL)x64Hj?~c7?O9>$_;kT<| zD`@*u-7nKPl7E-O)EA14YR6$`2Z zGm)D&s3PG{`emBxXLY^GJ&HPu%xt(nl9Gcdrk=ZmbbZ>mbI>(NeI!~`QiHud#6e18 z>KrL+?6pRpaB?^bff?F8=h8X_DY2?V8&VhN+pBZ-F)qIUlXr}f?kSl^8EZqf=u;NASp@D;?!ddm8wCsRMM(DSZe;20(CBBgwewk zn6WOs2v>s%S?_dnUjHnjO}AMyF1?4Z++P`eojC1H1qJ%jLt0J)uuc%gac6{8?b;g|=J-pT43*FJ3y2;jjRCGyw4E<&Hs1uSTL`nl)8HR=36)6!=c{Gz0e0V7MQ&;hks~f(rveT~w=GlqduU0C#6Ql#r{Ca!33}&L zkoGkXQjA0n?*9CacMVex%(Nf3bCQxJ7K|2{_mobGkcW8rPNB+hGD|PlAg=C9tBeoK zPmGX|Gq`!*vhizlxL>>RnjD)XfVt>+TS>LnB<(o54$gad?3;Xl*k;w6zDoH=Q2Ml3 z%N5gp*l8GPzd`o9=%d&VjIH`amZ~Pp9)kbcbGuEGH$dE=)9>CnX^(!slwkEOs-?Na z7c!PMF?UVWJaio!H+H63El&$7wBv^b|M~_%iyz;%?O}uUo}Jd;Z<09Ay7Mdm&HsLv zEAL%;o>r*oVFdlWeFr)v?{(_kMrg(NCPm+ilFriUhRFBVt4K%n5fwAf$0085c~i4c z6##p}KC3c5J|Ct9|0HVrW?JTj{Pk2@p{g0G;Y$-qJaY!bMCDfOm`+g~?ZY;*NG3VV zP5C+4t}1z&!c^|=&D?{x1%>WSPN*G}o#sV<+s%2>Fbyx<;K%dPO?07x`Pa$4RNWeO zJ+BAunv?dM=MA5pPi);Hi61SRzGE-;k?NWAMESY};=>5ZrbQgogv5ZlG-TaV%%tJn zFE14~DbgxQxCAXKWX%TMNhCaa=T_t)z~la?i-(6=?=_c)!)}PH3~%7R&Ei79Iammp zdVY7|1!pgN;Sl>iwXcEGM(y_<@r00gyAzg^IeDmpZ@Pki#Xd9v5_C5+B9%EtK`l;x z)YIK5W}#~v&C_1?{lVS3t2i=>sm|7!k`mK6matLQt@)X>W7FqBA-7ZTaGH{#y4Anp zd?o(;U*0e!s?~depQhjE)!szzfTNL`F2x6kkzfAI`J1gqUn?5_6XK2%(f||8`mEF( zur77vzi>V>mDa5juJkCx4sj}vTo#UDGhld8VVZlkVIXncC)@JOaX+A?ngDNHa``ey z9iC^@-4+crJjNX>bDk5Rg>Mx7fMp8c2^`o1{;wyC->Dz`|J{qLeo%4*-Afi#7sw~D z)MDtribDzEM0$1`CvjQVKLRYsx0HX%M~+-7h{M^x(Q--va;acL32mad7w*QNDlCUA zV;6itcM67Wh3_1s0y8x)R_k1(Ki_Wm*4+Pw(GLK)S58@J(MbPujyOT69B3G{OzEOj zQ>)| zD;Ltq7O}jyi?B)Gs`r(666;03rX%Duk3+vq%(eWdZ2k`giE+s;&_XZ!Z1@#&2dXww zw7hi0(gRH=2YS^593e26WR7%|Be}NiR6$;45BDpV*W+ti+nv4~G1UsXV(Uy2FM9Z% zaVQveU0*7s5mjH6Dh9sTKc0db&!%GYtlmb-IwfB{FSu)7{+)Ki=jjcm{CmT5UqsAm zjzlU_p5Pg$D-6NFf+8{{!n5t&fCn`%yJ-b4-ftRBktM{Sz?p_{^2lOy@q|zC9IkPf zogdCsXXNH4aLRCqCORnR9aNOP+@GzgZ$8ieboshWvWY*7!T`_&`eWm3n3!h)M}h{Y z5q3DSk4OXgit_d7xs7GgT_^B+tXDgI zmuebpBF+EFo|Qfwb3K$Vt|6;8ALJIOd!SO}qifE0yvTRrXK_fTbm_g^#1F>uhVCMP z986;3nVcyKIn*)>D1(DjuPc_GL>*+b`;C&P-tQ?uk^BP@Ore9^LMC60%_A5Anj;D$ zPT}Kk*NV0;nileVEpLotFB;#tS*L8+Vb*HGgt?j8sN?>h0~2|*sr zPVWcdh~etnZT(kScsoqvNhpbPg}u^P1FB!kn!A2$>X^~j#-O5=SnHTrd+n?KXv9a_ z-I%2J-;r&PMBaYz+VmU0@2yad3uX{%8uB%2_Lr)$KM@^2ctY4exlniLGHf&ta+-9$ z>De#B2=DOud3dH75vci}&n*Dst_hI<@l_iD2 ziW7t=c7Rd$YEdfo1^u5BHrzqn4fsTcI1~R37Vi!h(mLOMMggAM>2FWFAks^oPm8btT3>nlGD>iO;`no)e z*k~}ERO0x0V7t-QTadi-nEvgvlG>kK#;6=da=7_K04i0MDtn&@5-7!4F4e5}!sk%k z=U(M7A_$h66yEnj_)!vu6#j}Bxw5)@N*z1mwy`SH~6>e>4WenH5iz(N1uO_1&l znmojoNEl|%`Pfy#@u7_MukG7Q*$KqwwL6IEZ&JynKg=a^6`X7zRm@LCjc-Ni**^b? zln3tsMHlX1r9d`;1bmjO$gdZxpKajARYwW ziyA(F1j3C|%-Tf(A=7=$Erb>3iGGD5h%|xKfdJfau9&JCNzNAZMn5H!6%%~Hjigay zP`r~+lxhD}Jf@=}sSUuQY@m}gOg23~`gy@ziBlp!Fw~borNEYL=0R%`A`RvV1{we1 z*$4jMt~mC1|GTQ0sZle0)ujhQ-b6ybx2W2_MBul!vx8MfD-Q~I_7zMThKU#c6e|h6 zqztTa^z{bNichU&i*w}nXvdMmmIH>7ht(J$h4ED=vY-l)IWe*^wRll;Ku0n6_w5xn zIfJ-;Gsj9!=J{UgbWoZ z_?pkrm8TN>+XwFCSRzlVFhM3fNH7BE%!z8inq;1D?NCyIE0?n>US%gm(Y!@@l*^n^ z>gl@&Lo=>*rE^b@f~&doj=qPYH<82@=o@H{zQQWPF1or|gC>3Ha1qcdKQ@A_KhsfX zTI@mn*8C7&raP|JAe%(d2-_dIALfzCy|O_@<@JO5dL&Ft@i^)s+xf*~hB`Ye^!F*r z-pF!()G2*(sC^SG{YTQ!|FoNM*~by5sFabMLw8$)ufC6KL0^irIRD5OBV{y|dg4w`zpSX}2`{vyJm~HnjYM3WC?*wdk*rG9|?Y?9|mVRp{ zJWv11(u;li#ecu-KSC6Uqugr9j);l23MYw^{a#TJ6DFD9T*@{nplc~jZeXq2j2)AM{gDH{_FTx#G;_Nb#cUuNd1S}QVU=o73 z?y*7K80h{4q_`i)w6^TCXD*U{s__vH=jWthZ9P1C2IQ2~&Jjke;5WA5FW;u5?uN=I zKFxljE8`pgVCa+<5cCttxC2ee^VIj{wPe|=bPW<+oFf9)?cotKq^a_edqvnYPS4N5 zwec|1M;n@!eK>n7#ni`xLG?|QQoi#Mxu{oa4oz&r| zv-BGkdtI~*wlo*E@rSeKg8{U#B<~5Oe|iU>wTw$z+rVXQ3dsR_19xjoF9VF}4qE7c zqFAUaG>}QUO|SGwQ-TGt{g}ZEatZJ#(Q8B6UsaU+Pw-HzJW;|2AfST#AoRgQX?mUb zN#IMx${_N^;GdZ0;2F^YbY@yOba-|guod5X*z$5w;Ja&INBkYf#Q~d*V^0CBG-4uE zZ5%Fy_EZ>oX`||gY~Wah6V$jzJK)SYpvtKu6V5Ob5kPk!vE|w2L$JV1B}Q3`k%}WC z8NrmXL&1+4o3OuK7K#t81e>}2NkksWR}?4lyD$QO7pB+y@akb80u5{eCKa4t7~OOt zOhZTt43-y0;lVfp6XR7^$SLt(U#3{SMu;Y+agGK?@^S}*jd>B1?M5#|gKZ|_-wu%k8G6DDiBuT^`=F^SPkvNX)F5F9 zR#2=D>umxU&di$(KRZ~$ae=mDTD0|YY0`n%Odvx@Ero8zjRQTHncRY$0B1Yy>_SSK zGNY}o9TMA*u?L=|PrXWvJ_o2aDtltFj5{@fV<0*$NZ?p0kD$WrPo*E9bt!d-ja`bd zVKVWN5S}g>)F3M+fmLlxW}m`)WI3Qvs2v3WB^;fV-vp>} zHwxK3ta*%`NGx|ML8@Q#Wq=q`Ccwy65!3MTX1b^NJp)<5Dqv)HRuP|=++A%}rHJ)Zz6oYAKN&+(Oc4?TEO=D;2h=$Hi zMO9r&n$D=)nL6%!>gXj)LX0#;j!ER7t^BekUjG92cWa5la$YUHBc^JUrY0=BBpk$2 z9#I@bPwfT|GRFd5-x_u`=V1-)q|b!2O!8X$D1t!6g8r-36$CUPP7Gf#g5T1DN9gO} z;UOo7-1P7H+1pmSuYOmvX4F^{??-w5@-~Vi3dXO#mTMvz7vZ2jqd=lUb<|~{w_ayk zj>J8m)Hr8fOSB3p?x#^f>b=jTV8aUm%D|*W73VR-N%bs`35ms^`~t58o}4)4RJ*9G z2lt&@O#_#u8U;5^3W>20A7Wg+Zzrlwk5U4+0NGq=Kw>|kaKurD`juWukA#i|H7z+j zTGlkQWVrBpsZ2s?_b@ssw50w9+|(6L`=faRo-cT$4&{qYBJ*Z*!rd~$C zuWsZ^{5e;B{hVGje_2ufn^+cl_`oH<4`VTDfm>U%lP>-qrUV7B#J^c*`&)~TFDbdr3$8k;F zfSBl$XdGRGG7(SkO%d+lqzX{bg*i=r%3bbMMSH8+@WuZT^}*x5lVp9{+c)j-g*LeM zmEFBQy&)sr>@}=}t#=3;0vm#`n6obHk8^z1RjaM7EzI9Z3eeTH(a;+vpPnU^&==5T z&hrpy)SG(}wcNC8*!-Di!vZs9WkEEJX zBCjj#E%nr(!a@w@nVG|5_!*f~8-b(2J6ahm7K|lV=Zm$+<*Sz&kznCc*iEaZkIpKW zE7d|M=VdNkDKi>fPDg|{+W5+qt((jajpL<%)zQ%FVCX31Hg)&gev@ykWXZ3(r@-!o}s0rdWY&r;+&OjQ;S8vPoG6*Z%0Au?`MkV>pZjYWRwt72b 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

q9<=CeD=xpT^pE!^`*l-~ko~Z;5vQH7 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 T&O6XwxSyh&nrzA6ra}J)Yf0E& diff --git a/scr/wechat-weapp-mapdemo-master/image/screenshot1.png b/scr/wechat-weapp-mapdemo-master/image/screenshot1.png deleted file mode 100644 index ea42c4de59821c89dacc77479b5f71aa97a3f7b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23836 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 FKLE=7t>XXy diff --git a/scr/wechat-weapp-mapdemo-master/image/screenshot2.png b/scr/wechat-weapp-mapdemo-master/image/screenshot2.png deleted file mode 100644 index 586be04bed40b6e05051781b9ef8c50f13532799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177323 zcmbTdQAlDpk8NRb!QKv*v7L(o=nUlac}IAXF#<0YAa05##rDXZJJD@z&_15fLFM(hWDe z%+b`R<5jEalwObo*nkt=_%%= z0XdH73ndkmXgdrslyKg^lMX|VWtRVc3>pqVMfpd9fBx?QsQy4Ad9Z&ZNPn*&0-1-? zs&~!U((iSgzPl7;dfSsO`;vThP&H`i$kP5&_!07P-B$^U8zIQW%IkumVtdXHm}g6F z(@BfN7q3V)%B2_OZKiwEsHvjAGp3P9{l{5#2Ucwk4@1*hVxN8Q7nyA@STi3}fp<#P zdYJIBXS3CiP|gRc$(J4C6#m7Z2}!q;XzLcYQ)jaY-Z0H0oLM$xWjd$x$ntSf`-SZw$vdn&Sg(dgDYWGdc zYdtK9Z8W(dob$Ci7@}t-nre(M89%69pu3!mKkd7l`bG=}5@;^S>fW(#DwQ4O*DgK7 zNY|JALG~e#q!1mu{Y23-K`uOyeBb48w$&1Q;)l;_CFpM@)!Zeqt5BC$V#p4`7+eL} z><^I|CfYI}+XKbI0Ji4sXyvq){bO8fc8gh#@5uT`!qo3OWc0he3U#hsMf-fUjL{j> zzDTmm+fnau<9*CxsrSg4oi>;zA#nBOEgxAgYkpuaS9U9(khzIwd^kGlZ)GNb+=uGb z8XI9-_-)3mUNNt9m&2c6%)8g1>A#byW>0ueq_DGnt!P-Sq@j$}xD4^oCNiSS_8zl^ ztz8yt#9d+p-{BkDL5p{YviO`xn=-N8z0Y}^t}NXK+- z*pKh0?Z(YdsvfJX4LELC%hhoeoxc6lF>T{Jg`QVE@NlsPw5s4lcfZElYae=rQ?=b0 zZeD+>sej`Gny!1I+jaVbBj|>u11{^f^D9cN){!1lS$&X`Vo)zw_12gphk>jjd=X`n zFk^9GMIr&x^EfvK7{LrX&UN~t?eNgH-=55YYqu9=@3$*&r)r$lK!TH1Izh+fRfBuo zIWoAVA75X?f-iH8Q8I_FdWM$7XtX-4Be&(Z7X84~Iy1l3a-l0NPhT2&skP}r3NI;E zmx8OxPFr?J;xpmpy)V`p9ebX{ofB?bySuzmB$zSGdghcOa;#Uw`@on^R$cTUV7+E) zQMt?-Sh8GK=fW#tndo!AHprt(2ZfvIglH&cP0wwIFVPq8WXx~}+u1Sg_ZkR0^6zk9 z($IbV$*S8iWm`Zso^Ud1kKVX$5?B>{&&7;6HGd(dkk7Jg)vFrxfqKw*qD*d00s@;q zn#+wO$Le1p)UvaJGH%v>U$?RG1+HJOglAlLAzd}Pym?1$f*$rT#3&Mdoodu59@C>_gh%0;X_cKrj(G$Uu$A8mx3j^(O% z4yWe<0^8Jd!M_hvG((fGHRp;hQ^2Z(HoXxIUF0$HRp(h-D;Aq^oAYdRI|wn&F(E$H z>o1BwxJqT4`*do6jCk(Qq8L*Fuzx!Ar#_byZ%&+rV8V8Ezgh_rhSv#M_PGI>e)@E~ z&8^mdJsP)v_T8YMwx+Ah3{O_Ky5h-s`Udy8Yjl4x8gI6H&RZ3}%Ml-F8*61xI5T`K z4?o&XdE1oqwQ4(d$rZ#jh<>JTWWvDv>IDga>#_OVAi8~)k0YPP|2!b$>uv6Or0Mv4 zS{F1vYm4S5AP9~BHerkc5WQU5`bH#CsqQT(%Kla56U&C%ew4wNUPZuhd9pk2yP&gK zhZA9y^_|itL1XI034c*jY4>Skmmk)N3jKEPuU>)ZYXajmaTmSCy5x9UgObZTobBo! z?3uZS*hE_zuOK*us`45O7Q1(A^jw#jcAWOmVXE32re-uQfvb;~`xg7feC-Cm5?euH zyneJdV>XiJ*t5*&^>eNo6H5qN{_|uHscwe`=+~?MpNqj`x%lQ!!&N!d!??HSH4N=Q z<5jw+X5Aoq&_|cF5wYO!L;2A3u_mSly}nuz<#pbg{z>ZGj^h#JzqG4Yo3jgcH-sbT zeSFb2qTGj%wX)ICH=;7A*10(wu(7+^K(S4HLHNFG_J2U9^Oqnldp}c5csXz+e^>*% z`aa(gm*oMus*vc4hQT4@cRwM&JTI2dtgfnW3|$_togbs~!AAh@U%7QWFIg(oYJvH_ zZexOwj8UM1h#2m;bR(Z(!2|r2xI&dyZcT6Z2Hj3_LvDIN;CCwOr?BSB8q6Dxi!A5{ zFPrg!fLL|HEln53AkNDNBi&OB_O)qN=Ijw^IT6)Syt8)pzaPn~vY&4mHeOl&gpJ&- z;^LY~HsyBRN-Qj~k(hAJ+##t__@XY{I9AnsUng5$k235xFM6ZbV~TUOwCXDH=Kbk%C+Al$ zwjW5cUl)IMbiCe3CYcOeK!Qm&6lrY2CKLAVvH9 zapq4OgVCp`qq8 z81geInoy+C^;J-DyPHt8{l%b9%(Mdz$MO4@90tag`|sT<3UM8t;To!Z@o*o}^@78Z zd1!A~SaW?Wp*7-R%}~a=@uHkHXXX?lPUlgBC?in>&2$wX{{O%R#V;&@(R;2TM=~8zdekJXhi=+ z62B>T|24$RsjP3f`Fv5BGuNsSm;D~#mN#33MX^Yxw;@<$Wn}-6#a$5UQe`4y!Wr0p%3T;TK&zWKlQuxD$<227(JFa5MpfIz4uc2k_UJjm6FFFy61C33_ zGW$Sy^>C&p+7HX+-7Q~@s=`z4c!!<$q9Pu1HHk*wPoEqBc0mct%+gacmLenI{?(sg@qU^QADh*R-NH0KPO|CGjZMGVFHJdiclr+_Xgd8u zLttE_Z$8q941rT*ip!WcUqPe=5$bL&mkR8?(f5?(h#^$0L#HIC+)K1WiS_D8EX^Sn*gew9NI31Ago2e8aJ=s)V- zZ|J`7=-hVMy8VnT0Yz40jrQB#&p+2cX4$bQkd!fK|7LOx)fip(Gl} zk(V8D`g`|>$2_S`$1V7amw;L_iQLhht?&D~u&nNXxnFH`|I}Q~nUN_`HnmCK{_}Ek zho4vPkTlz7=(Nujnv!x9h`F56ux#I8y{RC+FBGCF+ZuA`%mcz*a@eS|eWp5opJXq! z&vQF2yK|Y}ybK>~b=MoCwlMPYp4$Acmfg-Pn+LX) z_lI_gQ?w$zSIyPFwXkhkEPxr!p>abLRvO!pzxZLSaY+R?G1c6mU3h_*<|Fjz1Fc8{ z=4C2#Rl%C9HiP*8bn~$cr+3|rQ4Myq|Ci(&VuoZP8w>6aKvoF4%QUpU8cc9MOHFvm zLdASOpo=+?&AR^qv9-1oqQ>fJx?D%R5sjOC)Z1Xkg;gx4zxO^i7_OoD7qaH9j%k; zvu1903~--HLSCWz4?eIX(ihy=>I4NTzA%L0ak?S+dfdy>S5ohx3UoZZWu)@bL_(XErRg>soGp~@ec(vUudKK!$p~i(hzsbq$X$x=n)T)h?QRD2 zr#q(26iKBKNmby4;z5GX*lBx1FV=Oa|X$rT`D4v(k zB3#J8Pe5vc&NInume^j!Df*wHCMch7SrT=UPepGJwF)Er)z+9RP?4Naw@w!W$7IImF6pT*Y{4n zoBKT4i3eJ8R><^>{hRsx0MVAzP_prEFt*MASe2cio*0P-L-9ifr*f*+>);eRcZmCz z`!UgPV2^hAo|}+ZHbJ-jO6?YxD{8N^A$UR^4n&A{W@>c@5a2JI?9XjJg4KHbW0{;# z0z^~NjNSwBgh7vj4k;{M!=Xsb|IsNKNSIMBHVhbp)49Tzujg*MrB9>!znguvfy-Es zWlkGn7g}UCA|> zYq?Z`xJ!;aB+JiTv70!?d`6lR4mgH0YI7w(suncfgjwkoA4nwx^f3U+E%ZzjM&hBO zl%;+by&^z~+TF|un2i{$H4Guj=W1(fi+aQTH$$$T*m+o+UOd|5a7YX~+VSIn2=Nj$} z*b|HV`Oi%bBZ~s^U`V;5549T1;_QGuJcrj$R_dWwmFT>3v6Q5^(R;_3;x5FAlU5+q zz$s?w>pFQxG+6~}Z|Q*vUjo2kXkxrWS^i^Ziip+Op=Y-VF{3yojK}}JnmBYg zs9}t5*@=_&S?{iUda7g-f@q|`Gt|gj%}oRc*< zI_wrm&b|6{g>>K{1BqSHzy9|g;?Tix3>@0Aci--3V(-D}=fxKf z8dm&2cZv00&TpXizpqLbp)k9ytb-{?$^y< zs?XPR-l8DkfMNEH)*m+X$fQyjmwW$k@kpq(_4W5Or!=u);2{wTl(*c>R+YareRmUP zo*Cj2TeLn#iG)*R_p$FW-R2+Gy%n{?JLB!{Eg+(4^mlFja{AQ&%!Z@`?971nCj56X zI1>Ld_XpP!9LagDaDeQO$fTjXziOn{z_0-H-3AlQGQeCPysB9+|MTQ9_F-oDkYIO- zm{X)d#Q;CWKdWMKdmor3Rrp`nK?W+4K|e0=AM*bjzNwMO1^-{l{{L#`pC`kR67_b8 zp8t&2p?NFwX<+{C#!ZZs_EvRwLYS))onA2i$S=R*fsi_ z78Pn9*hiD;A&UmvXw=Wt>7Fmk4xEDj=w@IjR;(d$q2pCcbWb^&9W^c*P0-Ays=w|P z;DGtH5#4y7`fxVGY>Ia@nGs@Kt~tAgmp2Vvn>pg-6X1EV=w@_{050x{pUZlbrNOED%I15|_Q{hyg4J8A!AM zAgLW5v-GnhGovmY8dtl4noc>2nyhN5Uv@KKyt)fw8ugfa-tBfO;x;U3(il={cYq%x z{kYLUJAw)`>_a7l-d1H4xiUTAeOBU_5Rb@ zjDqd7?2jFi{t6*&RhZ23W4=f0u{;KLYGdNhJK>E}n~@9tab)L`j7AL06kw|Kj9Rx# z@Cr>%2+3NU@?#1pp19c=ZhTEKeJIY2TD6R5dA(Vt2_L@>d@; z6Xu{dUX{h%pWCA6$%ZOUU_lIi`9$*l^q`1$?awS2`pN4t+o)mD+C~~nhL?x+GXPvm zRK(M^$B5a+3#5<3HqtXGQ$nW~Me;~vW@ba5a}6tk!4|`Q4d&QBoSxh?73!SDKzAxu z0>$OPSIK3A$GY4XRoOrb0w^-BXpOLB;z@-%oJcKgU}X|cm0A$Xl!6Kb94wlomQvgtwVOEwhPq`i(tY*KgZsM2jfg=@n4)PH~`p_}!zC81d>YB~!_TWTLloArj_riZIsta`a8%-Dm4Rpl^1*bR^#IYC;F z)T-5&n5DTN7ZinubF;Wy!@J$FeUDi{JhwZKRWOW0;bLdD!k3B`)wCM@L!D?C?^W`X zI+;xu;|yByX>4hP%{JQvI_M=0M3k*gQiX-?1+CPZFrL|x*bajQom0g~+6Q+htI&w% z3%m3981bgJywz$A8tY}bmgsb&XiU5-+JfZc1LAyuE2%k=i@SZj53DiNCOD8D&1fv_!-yv)$m-v1*}=V)>=+C(}FH11!9YGsA8 zeaotn*Ade<3aP?&4%dw>l;-mH#F9aZeDTPWiq~wiLZtX$$EVHkc)czwqhw}biF!Ev zd!mWp79Qz?1-ZhD1Ol`n2%oR(r#K})yw6ID!(HKw?VFRhME*McziuBe5K1vid|RWu z)$-551w{rDoel^=-am!4mbdt~2)zp!tm$;@6yNW>9)45%9}4g%R>{-ZGYlb=DWl&g zoWbyl&R18E{&z_I26`*Ut8i3{MbCe34svA+HlE7jcE1x#*-y<>{BK${12u_Pnb^sC$t)()f*ScL!aCaWh@hsK<2BtO~A<<|9#WF1Du#ikq zR0RB68n+|b37u@!vE7Ixkr&SX?@wSwuVkKodXk7YJbe6n1uC*|X@W`>r$W*ygDQjK#4aP!INeo1)!}&XjMVCqAXSy66&0aDm%w!3xO9U`Bxndc3LWRx7qL? zdlY?AE6NN90t>tZ@IIIzDGh_w=3MX@;qS2lL(VWAu$uH1a8ma)tcuSD7Or~{J9rE` zT~~DX=dzkLj(j?;SHcUig0L04+PAA@@*>e4*JD3V(It!}=KF$K@Yzu16AyeXP!5lNP$~FnFbL9SW4~6!Oc~B>qj@Nr7u0c3qBqhR;xy)x zTgND@KZbeGPvQs)oCPp@;H}DNFE z)8Oi@bVJ~5Wuk+NTp;ddkRYPU5b>vdv4wnbWmvBtsaR+`La+4{uNThu{Z@ix9=T2P zj&K|mcx?H`v_lsi+}93CQ0@D2Ob$ez6PzXjMUwO~;1#Bew8XIt1@lq$)OW)wc? z3j)c{0`TWUA_3(oPN9(oKZzq0xHJJrTeEm-;ds7eABG5}$j@IK)K<>4IKjZFE-|gp zXvd!Yz=NCydozvzzj>qRkeo?gX8bhta64~)I1YAA+rfDd&GqE&ExkliWjlBWslQgv z%m9CW;h-lZ$FJA;0hz(<=3D?2^nR{0zKj{#TcYuMXRsB1`A*=v10H#9w(ni5(}x^u zJ7SmIy2V=HdYe@0`cJRRSwr>27ys{(NXV!KJgA3`(=Bg+&d0=O7da<9mRRxK$)&iW z<_J`|2t7{G=SiDL@){IFflaso1hb7SZ!USOQZgw7N~;uH=Vk%FXIdf+k)rlOGpSO$ zY(vVQm^FOwDbzdW5-LcRaqFdH_?Zk55}AU^LPQw*428e_NOlhVPN^FLkIo9bIkb>0 zW-EE$(*;sW0I!h*gVvqSVnZ!s7S`@s=ys%@z#9N){Cck9@kaT3m{eGcmAD5Or>$RO ztZHPZqWoBy{FNDW^xeT!$Tsfb3ArvTkP+j8eH!7}`>6+bXMOq@LxgAdP-Ck9?euqYZ#?9+Bm2@cIvPv z)ofaDIrI!LfcFo)^$O-;2Z|uU!)|M|bS(>g3DjBO51Fja7F)`M(!)dkQB1Li#a0T4 zA5Or~cdz)-g4*@Bk<~8CRa*8hm+)z8)2*$yVseini&bG^GB| z<|jkbN$UWDf&`=k3gm!L6;WBD7$IDBg+xvZ3o690+aJHgO~vNY=9pVXAce~l$`%^P zKQzD^G5O%|*a0LsBDQ@og6Wlb!Q{yH%@}&%z&;P8_hN;NN|=BRKYBs#n+8R|6^A~> zj$g{)JhceW?#ap|@t?n4V!L8`&!4HSLP=SrQF7!YN7lrs!SrAnD#;6lBE%>37YH*8 zZdlo0lh?No)olBYs@X!`u{oT0Scmso`m+y3(89*Be*Etg({G-QoQ)$o>ePl;1P=c*spFT>;!Gk!pCj(BB9rqt-R0O5W?^OCxYJQ_bc~hxL*wc@- zVGB=*bh1>lG?-5p$YwoU2v!Nb>Aw6qBp&12j4 zWVDJsm%Rbx+~4CC*zOEsGvV{G(cvzY;DhcjyRL8kdNieY#wR(Bw3_K9L20eJo1=zS z+HgOpCn>w?Ike?EtT~)%C$C?hLp-J=aE9s+jhrQTnolla{ zK@;31K-#3hP+o99xPzQI;n1azn^q7N19&VJrtG|Kcl(?AbpBk{wuiH5q>p-6gzS^o z1r!ujwZ5Iz6jC(<$1m3oKE-^l7_l7@E3R$N{k5D9=7?k#fDU;v*9#H5=JfaVKCGA25tv)**C&D-BnNR&O-ZSr|0 zhCmHi6qb*K-Sgh}(X}{pA)}2Tp#!IxGQfDCJ+?nIx1M*w`Rz0tS07gUXY}n-w!qtv zYV!UY$ocxU=wwfk+2p}i_v(*OY%?u{dIi5WM5P?Lf)R9zi3n2$uRW_?OH04AN*2R*)3?(SH@9LWvjpS^3aKnTE0qLHtk6N^>GFE~> zMKdb83Wm`I1DzGKq&!mp`3tY3ZLu$;Z1o|De?}gP)L8{g)c!Gu<(QcLk&n7fcrs%V;+y7^ks z!yj3)`YUNp+t1_N{Mix=G5gMR1D(|Kl*v1*fh9yJjJ>S`oa+6{sb?~99%g=er`&L#sWA?{-NFgSb0CFMX0dvwUF;oX69+7*x>dFm zk;HRs<{swu5)w>(Fi2H^d_W65F`1{AlP!mRw?mH#f{a_bwO&P^nh3_FU?d4++JqUp zK43=~tLnWoN2IU9t0N+vsbdQ6s;NJy$L;w!xLHj_S5z5`Ro)}Y@aL*N_F#7>hDK=2 zkvzrKN8x%d7bWCegV{^wRF3G?f_|}r_QGh*awP>0Edate{{(?BQ`w0^m3bGC3tb$p zl%5q}02%L8f6sHHD4Lv)=w7DRgAO{EMz6EAC1cGTM8#{z%Bby$Xjm=AsTw}DnlMR- z1|4^{&r#Gr4F#7@tLTy8cGY+dP3Tr4bS7S)A2%maT;iA?O^?zfuY4)$4BJRYEc~2; zSeAGlGuc@I&TI}{Ftv!_7^Hw|{{rHCXLWSwGD4|n+DNomMKQ9BhF8P8yCLMP51Q$I zXiy4@33=5}NJlq-gNxsvE5eJYK$snGE+3+WfLj3xw%chfJtdsSr=MJool>CfSap>u zwb^vEq)VvDPmcfy%q9%+Ja8zenKM88xSt~o4izS6-_10FLZ$6+vF0GF;Bc%B5SS=; zFpIQHXdE>4vB#cg5#s)~qbE6|Oc{+hRw6((LwDLe7@$*$0$=3w+;iwW>kEaI_x&5! ze@e@LUofNo0VnS>u==8<>xht+oVsqqnupqNw$-1gAjnrJJuaZol@MVpY+Ek3$9Osd2uK#yPWe3m%*b(b0VclB zJ<3;zXOpAAEgeK&poe?e!VC-$nn<gr2(%qK8S_h#V4Bs!rA6PPwcGqDhE5GE9{4%5%hO;3ayq12t|1))ZK@Ch1^F{wjI zQ;!lMnB2TEQKMbrLjy>n#Zr)lMx4uRSE;xw`z?=U;bCfAt&XfT=EZPTR=TEI2h@QP zsKjHe&o+W!D^7|ja@1_*b@!w~*@^l%qzT1MBbs9^tPdw%QWnJViswexZU;40s5HSB@ zj=O)E48Q(Uvt!xP;zF1G_LlYHJ?XT7I{8M?(0w+ny#3B?0$0v|4d>>F7C{d(EYOde zp7r?27Vn`i38Jmuaju3_m#p5nj_F(wrIXzJA z+l_dhy&4##It3`RhNiS68hJH5nH-(*BX<@%3fD9;iLg2AQsMyc4;J{5ejIGN*T9rDAoG^kId- zh6Cc-C9rBjH4-6vKJ_v0f>{yntHW6|MXEikN{G^=M4VqeX0TE}BfRID?TP_sUUQF$W+Ye;8zyk&%lCYTCcbiazitw?PNiDcEEe*932M&%K zz2V$&f>P0_(CsmWthrB=gU#CeSQF6RB@6xT-2<$y4!fGWS#M#3I$J$pnO|OFJxD)M zs3Wo+dt)7QvEmBw^8LV&?G#9?Lq)8e64Irdo(!(H@D%EC0<@qvbrHmk+S=H21=TV| zkxFPL#)x(X_b?PJ=(;Wt);?~BYs4DfRj2db!>5t`Z2G*Ld4IF*#dSeu`)Y@ypU~t; z>`YAahE7APc%fE?rL`0-ZI&YWK7~#1g^ORAk}eI$?6Gd)-lS_o5M#1Mgt|@@;e=zV zHhhiGz?u+IIO}of0FIO)3y+Qrp(f`kVCN9w0+lZY9C*wFiBNZdoMh?Z(45u6Z1B;v z95Hp=FHyO_9;z8~#2WrUlsG~WBf%MNZ-JDM2IZpO-2h@>kgu3%baj)GQ1h6Qb5YfE z1*w_Hj>-qJ*8F&jQw^SqdGF~nkXwn3l_|sq7=?o|T_g~TR3=Y%tWRNxiTzKq0#3q| zh@Eo!Vn>dIM|ue)2ZXVgHkpyg_(BA!XB@*Bix3S{Eh7o!`ZLpzaRAt{l5>egFa&%9 zb<_*$DTt~Y^7mjFASN05wCFOGMyg){+Ui7cfiSCx&tuM16R(*;6vSs;dGRR5}k9n~C(W;9e`8RAJE|n>VgQfpv!k&|nFj zUEV|+5f(Y26m$vFGfZsvSQMs)6Km2T@)c}1FGWnZX>_WbImP=-uJB5+8CUJfv8UyH zTK*xrVg!dVhVSvFer>1h$eU*0w;(Hr%6XdwfDmu&YnenO%D97>vQEbL!qE#h9r*;dKwqlIbdc3_=v>cK1?y;Zjhq^6ka=#kY)M27uS<}F%Z8? z7avbf)`Y|9{m1M;fn=&xkpvmJTNK96)6U}mlN4uTA`~R5TbJ)9p(bYcdy8tC&euPQ%b4fv}U1{nUsj-LChPPAlj^(Z^zh zj?4TuVWL`>5XOS;g2SEG8Tp_c6L~gyP5n)vW7ns9kr$A-eBN^1JPrce&4i&}aQR?U36jclS)hif^u%5=^Nrc0Y$EQTnr1c8>s(DfLvM zGKC~(%0a{F6B4*-9pP?P2Fns5yr8-Eg4kEE(o+(k4BbN(lz_+H`?O5M_Seyl@gRSuo1MD)`lO?Qp1g^MhUZ!K0HK^Ksv>e~ znc^FcQcDx0DB%@(8X`kaX*`k>Mh5?1JSp-xAAOkgBUY*cWsa;u_pK|tA-FOAA}HX~ z+G8)oM$qQFep%B;10PKy770v{x6hdZVy;JBL7dFSku>H;ait@Bk(vwXEJWXKsL0+p zot@xqaK_-)vaJf{HngFH5UpFM+*uhZS~?d zM-+>j@*h?+tzqNeSE8UJ9*JM2f`oZlpkcb6AeY2TEBJ zxb=hZ0j&)Y_FbN33!%1TG@I6=idVmP7F2g!DT1g%6nX^EZJ@W{-lD=s`PbxGUuo5Q z=^;6S2gs^=NUT7+Hr$Vo-9!Bp-EujIzIb6?p!OsPY40&Ff(0O(-QDo6g-8vDwA38l zv{k8aR^2x?rd^4I$AEJbzb@i2_U>9rOyDfD@@sBsJp1nseSEjzLjdDyvbnV;>Qo67AVj%;o#>EM(K^Kv`G0~!u5$}IIb9nN6Dawj0_#L8(|J_ z*pEXQQ6a)bw)urqESPu5jM2(aNC!V5;O$6Y*^%R5eB+EJ-sH)dg@o*BmFnLct%J)m zg>|%s{fW7=_EyZn+SH_@ICeyy&OGDZy;3dS8nJ1CRY62T8ogxk?~>0%+g9b|g= zq0)q)&9xHO671bVIe~>qfdFQHg1kSQ#GW-WRFR4t9}4TlpG;l|ldJfp>-}=G2T>%q zl9@q37?=#ZbVsn@wC=;flx;WkCnlYZHdQs4Ebl2`OWx_G`(j#9Qt|)Rwto(C+vVN4 zNALPw-K-lRtS0{bdo7|nvYpO^>1O%#p2+KdPUGXskL6`i5q`&SyWLdTF;57nz19;o z#;S+oY(gtWBd6X;4KDp@$}#V7^ZT+6KvV7fFGqPF`GqsI`E3R+(s+#xLHCm=|?THTaI#Z(E*OFYMYa&(718fNl z*)2!6LMM;RmpWzjeP+vM7}e~vRk#y!q+@4cym)~pQwiiCLzhj*NlV0l)#+!&)SYa; z>@ljNu$oM0SP%uWY%v^fh*D9?SqFNnmB@hA-M*2*{?yi_Bvm5baU<%KM$rpc8d0EV zLI8F5{%83pHDB`i!mlA>nTfJrdm2U`RgP-E+hj>+=;Qv@)SEGw#gOSboiI&Dx!%>K zYtxyHr?hn_qx*&H3Mx2GgOqC0F_b`0wNSsH00GJi!7%3GLEB+uEI~qXZjs&_wEY1a z;SNG>UUk}P+1Bap5j5wsdlL!|Qp6%CyKbPZa^Rhvonm!@muEp}iQ{14Aakb@a4^)X z*Qs;j6F0SBe&CXs$Z5VICUC2Q5M>sEp~8Jm*Y-G^KOXR)2>2Ec)R@O3J-_iqEi8ube|9(+mc!ExU#$W&F}Uy z@AYnOqu7FBwC({(CoXfD6@WvV*XYZac^9HFwyVBnS8rgimqaSwi0Nc<`5@O|wzxpH zqJ&+S6Eb9Q#j!0<8q=%G<6cdr{Op%00kVpXz{@Sc6AW&63ywUOWQcv4gk^yP3^|#n zORX4KeeQ_cuX<;xijtn_tgMv=T({}dsFRKL@Tn;orR7K=(d(`~7V75ZrGmCSMa-$T zge^5#wv_TngW30_VmGcq6jvFR6&c7d8dG#(QUV!PSzM3a(dIFRj4F+T{=++4#w4v? zaR@VZLadLeGw~^7tUjml@TAI&+Y@#rfI++-?qhXpktMv_%kcTQ+LV@wy*m@Ou&wzM zn}I_ZXr4h=(ob&Pk@&SqBD&;*v9aIYDhy2|aIH3_LPdMOiusIM$`e#o9ED6sYFnMj zHTXqAk+~T^^h)22tc7m(`SN4J@r0w;c;e zeSrABUe^H2-4bvtPl5n3ycogn+VR7vJU<={5d4y)b2)*sUvlFSn`R7fqNRa2)%wc3 zG)jzjCdWmSE>L(kr&kXMD_$T%fr4c5(DOxi7#Ltd&W98!FRk*3C0jbMD62>(nEPbd z#p7N9(XG)K_zZ6dBnok~nR&;w#z~sD^Lcj(EY=Md^W@@HR0(t8>x~WhKfM5Zs@t!s zA4PWt9XTS*&Z=Gl>}b|)*8&#`5)YyB5{ZQady@zD9Yg}rsAFj{ouFr=zI4A-QUIOh zIymqTs*P4pd9!W3ps0wg1D|j#MzFBzXBb1GP9N^~FcsR*&=uc@5vlfXR!#&mpGrT} zxv1_ZEEsz>N`Kxu98XAS`wm^eMBMY?>8K!{U*8^=k$-^~}R?NxfZ-`Hz1_Uh@l8r_X z(-R`Qui^YZ0FOX$zqibec4IU3-;t9j$<3Xw{tD}#dI4{=hcWk?aipFtvtNqjcVrwc z{_=8M3^wP!fM0pOu6zHbxG>&<_U*0MelUgZbUW6p_!XusR`a5Rfk%jgk&6p&{Mm_& z!MufCvUGEvdP875dyY^k%4H`i=ds*JqB3eR51m~Mh4W-gm;wz;I(y}KPK!p?*;D{m z&p8i|{m*mQ^vZU0V>S_2C5)Jco}T?;UQV3Nmg>8iD&bJ9ta$n;UgW&~ym3 zTz*+OZEE+4ad#k690=$lp#hU3#}0BZKNBW*iUkf^VKU0ec+e1a`kXdV6XsV_CNMW4 zJaIWo4hvOwDvE?FnM##VctFhAlgK5$Bk55<+Owqm>gpgh}bT zrdh5tmn_WULf{tC*{mq9=@5aKmlR}c3NtrnAaair>G>c%X$_~Xu~o=zqr5h!CH8Zy z0lIu%?(nDRkc7T=!m*ge->N3_sshSh}!?;XeD;-fl_(F@ZusB?%w=WH%kPFyF)Y1Z@{B6bFib#a__YCX2^?Z6-3$l$cer{YlZHADlN z2xZV6XBIf*Bqs#>k_YsAw~byPU&LzBa){Qn<$EL;bLL75VlGc8Lx(tdHPnnL6HpY0 zB*dJkCiTDj8)LJkn{7#RvH)?0B{7v?*>V77_o*}4M*6HKTt9#`rAoDJ2$E(pg)<+0 zEaCnAc%2j7_K?rWg|VxnVZ>Kc&}9dDF6^tcV$ojYOWRZ~+lVE=L+ zv|{wEkJ0oVLqs{JCNFsHPWL-EWtum^gk?HjtHu1U-cS!+Chs9*~XWts7dR-QnmiCCJc zUF9U}#CGnrf4WOqXLiY4v8+p7@Bh28G|%scuAkR=J}@ihS;ZpbrVQl~_iE;3`JANl zv3L}RsNdmrM};RVJ3#rQxzw;&drPM@KEy}F5(xQ`Oec#Om$*KnfeOS!l?eO7@X??v zfKd54(Gfy10sjCi4vOWH%fNAZLqnu!%oox~^z=~K6Ub0|u=Ro%IPmwv=~0(vYBtYi zvb_jJWEc}W+nKa2;ODhP$I)-366u~eI`(CRV_1BgPmpFXlBDY-z&Q_nMp&%q(tVKA z3lb4$sxkZYE+2s2q^F&PE57;p(JsUZ0B=JXNTS}3;kc#8J4PrS z9F+b*xU+WWmD~`8{>Kf)^y6ihp)EgFzOYis7Dx1AqD^-2KGP76M7nF-6WM#1OwtGj zqqy{glkvz;W7zonS8yQlQB=mOk?rn)FB}nbhqfi1eq2Hn#KAFxB_wJ(arbVN3$G7Z zR6yRMy55^^$bcoID|Kf_H%3!r7NV0f@!2B99fU8cFgv;fG|s?Rpbj@@(s#N{roi)9 z^x3BEoZ7FVqC&)+YG$FBIZ!L+;zgMy&77nLn$;H~A|91qycdx<$C)n{rf3l}X$w{A zt_Z`PuJT@G{Ry?`I3{tGn)!V3yqZ{H#$)AhvMxdJ0w+?)iRHv{A|XKDNw#1V$+^!G zBuS?jV_n)zJU$F^PS+4S35OyYc=$y|C%>FCKE`vRF1)elZW#?>!q>&XNu)ody5b}a z0U9h;MSUVgC6j5+%!q*oXHODy$9`SpL}rsZlN=8=vbn5yznj)|_)UOzkNmuAA&UzCI2|f-yp(3PZtQAt&DV(T?LB zDU`cE@4fk*bsfEm-P=iN{q&6|+j!BlW;k;!ga45G$|kQR7EQK-;s>Ui?s~%1`4;%9 zL?~j3sx0a&1GwIEQOOCTNEYV{u`+B;f+(TjJWiI~aa zTxY>_AA)@L!i!idu2t%KA!{PRy|X@!=5~F$WB%3pJgDh`l0~LmHC3+fh|pM{T4Q`}gH==wJ`>2MVa-I*zlcJ%ey4j3~7suKhwTdCco%xKJc| z0->Dgw%m6o1K!D;>yoC3LktG{!Ua4Yj}Z}vh<@IuePIjI+mZ>QxR$8nAjIZfsdAIj zd#jpLO&uQ;Bz-# zCRVBV<gpF9RLWC>zW)kQjWtz#db5Ksi-3Fo-wJpx08>jl=gbf)v0MTVaf1W~Nrz72; zMfF4j!5BT`ZX1W%gJ^%-Lep8NLF45AIy<-}P&qyigO8o8Ld;x#=cYlZHHf+GBZ@C$r-Cfx9ax1oF zi7<%}Q$0!1F~?&S*tKhy2;<06hnFJa`_wIeg+m<&QB5Oy?ktmsx=}r8GJfCsN9_F5 zHe7K2`ADR)!g0trch*y?by<-6T=Z6_Kc@(_A`(%^No%(cO(JuKXA(qSU$eb|Mz$5T87$7pg@f z?3+J%6CQeS720-e$HtAnLyU-&Nx>hK2_~jYnS!%to`+5%Sv|<-NTVVY6Z`Gj^ALzWX31!uW6k&uHOhb$Sx zDhO0}lDTt$qQyCXIYEFah{QJg<`6~V1jmcDXa+?eSs5bJkr=8uN$+J&UQOf`mYIIU zN-82npwF|YwqM52dIxXAgmq3~>q9&Y`xFfQ7%||i6X$h{4#cS~9 zA73S6+KW`;5I*pskKymXa0{kYrx6I4m^!`=aU#nDyLY3btqq|_7~5Za4Ot>9Udbdx zuY>y!AeYJFyz|ZzBovB8p;3pGCxV?)JBbu$JL>A{ppzt>z-b5f96*nL2$McC2Qe)u z!VtK(XBBa1Uk428*UjD>PMdTJCf1#TLLz}`B0-Z>Wn~3*lvL+odgtsi|8K*uux;Bm z5nss)CE^bfad+VL&9C9Wo;}D>=UG)-L#j3*>g02uUBpX^kQ&XhJrJ8;-iQg+l}ORK zSr+bT+l@_|{(uiRUyP~Krs80CCoteHk^;}rQF04b0v;~eI{kQsGK#&^eY@?m`EMdvUIX8llbEZP@06L)KcS? z!QE#7iQ4@fp$E2c-6vBcvXdLHcj^y`(4tf-h$Ic<3OTB~e3qKmA@K}+Mv#u7L4w63 z$qU-0h*Z;JZd#{$4jK{YH1P6id4z&K?B8dhyGyR76OPhgEk1Um4HStgoX{x!@w=mL z*||yc6wl3wv~6yVSx(<4=KI`)4YpWE)2Ef1$+aUJxD;UtM;bm=p3Q}t)|af@S)*~s zn{VLp$A668^bYJg(1HC2EqwSxAH{$E%Yzsfwz2t@Ry?}qM<}E+cX&sVG>QH)9{5ksC_?9eb0OF$p8KlS6_WKBGgHlM7DM| zk62|CCaKvRDZD*9c4Ez%HTdW6+y#T`g9(kV_uJ=Rz=Pkr50fTML|0b=yLa!z-T(Ma z5x&66@4T7k;=S)ZPnc(Gs%r4tmKX5HS6;*1t3HP7uKr6TdK38hhF_pz#<_@{(In@u zvl*T!MwBz(kP^A(rkh|BNo$oc{O-Bu@YK(r#ElDXz$J8_-JP9?go9$C=z|A4#DHPS zqg+{*~)JOV^n?WipX!mmo}DINJ#LoDdWzx3un)B&N&I zD42#IgM!Ept2v1iNC9y|2?VJl&pIYqy%Z#`a3gFC}4LRy3=w$L~2pc(zV$K4ob zrcEZGAQ22Z6p2i{mf(l}5rX%6PqDw-%9+l-TDaX_Rr&k^&Y06cGAkhzD0 zKDjy!FSq8?c@0w_lkY}4pGGFtP1nfK04E|HjA)-cXL>Sa(gw4j3BvXnIYeVrQ4t3ZKXEfj||M>S<|HQ)x z5Mf->JdZkaAD(|4So-BJZ^Q7s&FHnVB=?YD(F z^}xQpIOD7)R8JU>ox9s`&UrI%`n31pbt1Ma=X^{g>EKIq)*v>GnwbK^!H7^!U5C0w zeZ)!m{@efgKbSav0dzUMplVAq zYcnDQ>cUH)?ls@hheGRHpGJ5>m)pnEoWX)6@Bb`y`=1OR0dX@ar#MAh_uPV;~72l&YruxmT8FE5Ea9(^UxN_9t}O6^iXTc6=d|G zNL1mZf>(*MQ;F^@qvWn;!5yQ>KcmZ7MYqEgYbL^zdv`bjv=}DCUWx^gmT7 z2nP-vKxkY*3{I-6tMGyMU4v*if)3g~v2Hx63=a1FW=oq||v>L=lx3unX1Wl=kB9KwE9 zo*WnKNBfSq@%tBkhuv*$|37=*0bpBMUA@jZx8JF6=FRJkE=@p@YC{nzDxk(F>Q7<} zY9uC6qlpG9_HGP{8iP?#V?%=7m_!U3snX#UUT@Q9Za?MUYk%K&@0np92t4FHGap{( z&7E6L-D{V%*G^3=YASRuPaB(Q$-y*Rth8nT8sd@ z3S|{u$R#;Td@+-3Os7nu^-V1U#0D_bLCcu-swCCk;%i;gGeoAyWMc`W84JW|L4$O^ zt?8>ZQ)mpE%8}n5c`A4IO1H5%5S>jr+LK(sp1@p5dAj|1{asVVY-8dTnNfBYa2p~#&m5|oUn>M=v1)OLaktCRl?Yi=(J94I-^nQ>6NIo3lpOWMt13R*S&U3 z_U4)g(fPGsE@u>Gx4yKEf;B>#y7F9Owx=M<-`!AX$I5NjjqHHw+*~D?-!ZjI|CySf zoV{50&HRaCD?*EtSt9YoB}zT<Cu*(PaW8 z|M|VE6;v`kJ-Fjnzrrtn`Ah8Fu>)tHc^01X)TiOM*ZoqX+Vfv?5pMpEpW!o~y$n5l zy*T{nC*mB5CJC@Qa9KqaVl?V?9f8G2hsL|FuMgX{Z9^dc{_%=)4!=dslxKLxY33;pY1>I5eO_=Xc$C zCr&xz3`|W|B?1{k&(IPDv)ga{4L5Y-P57K12G{ZOD zL%ydLxp)sf)9LtCzaz1qZJyCc+8ooSibVu|K_}7#en}pEa%qpF5l*6&NaX2{>FiJi zUU4>aUO^5+L7b5Y)u;w`3}tf>x_JBo4m#+6lt<;US@R$|zxK1`Zf@STGdFQO2v_<6eSzP<| zE3t530lxOtui%59{3x#b=?^g^;B?SI2TAlej%&XEBYfi<-%w)Ebft#kHQ&QB0isLa z|2}Npx)ozn)9~c8Y7&Vx*>WQw%vO?Iz~0Sn&=fKPBrtUe@QJ&RS6uLN43CcBuDkAH z&JSPx>}PS@amS&5U{GtNXPtEp{`ReJ#<5R69!r-l!}QoBqGl6!-g!6P_uhA-zkeaB zJc z5K!NOnrv&>iZM1ZiG}@x5~&a9HY+#@c#V(l#I3*hF`jtr6Mw=yY9GI zjBWwblT%nO(V`lBf}&4x1W#+;v29Udut}$egQ-h-8t-o8C}&6}ZOhCvRqX^nQ3h&A z$qbIiW1p$dA!rR9ORdAO6DzLa$9f$Zjj71=eeybt5&_`4N++_-C99FGVFYLGI5pSL z%ih!EQIOi&cZp@+&K7uZz(2bWn`?%==0gbCxp8@}zH8oRvptO7#S0Dfo|F5HL*x7+ zx{6sXBeaq(j7)4qBd%*i%ljvv>y~p@mgAE*PLDX9wN_Qd95MpLixj7=N2;_0Vmbe`$*MFSF9 z7IE#5uEzV{|6v?*$P@6K^Do35H{FOI{_yK~{a;^(1K%_GI?=W7+C8 z6dXk{mqmY9mw?J7dRRZq%KjuK)mCI(Pa@Ol$#Ff72Oqcwn>TM1aEY<&{`+y`O}F6P z?|KKS60x%dqq}baXFd09yzgC?%C=mp{ejfNB>;Tc{S}I#w($Di9y_q?7TkcfJF^`Jey5HQ&7gSN-cSCZ@&(v`bhxv=V2ZbsA1O<#en# z>KFknPbK$)*be1Z5-y{`mZsD>*OIN7Q6olG&Tkh-r%@;%4D@e0J62P(M#q;jjGh2- zT?{)_d6%Vr$S{&=kuOwC6mxZz*0q@C{b{xQ^pcP+=%qL>C5$@J4Xjc zu9aqNT5R&3W<%O48|G>^YE-WNu4&{4k5zR@x?F$kbu|)sVbkWZkdHwzfdO zmIDil61|3*NC|)qmO0S#5L@;5ta%WfU;E#3(>~Gz!P=?Tj7p?kgxrl ziKg0oO=W6-pWMa8Y*`!HM}~J}U~nm%=I(T5RG(+BTdBA}2^hVlAxzgL(iG#_lxU+a z#wrv8z#0$rMoA`Nt%u*^$Ba>A3738T zay<8WXXEOBzZUnby$?Hg?!;&R=`%R&u*0x?#R`1*BOg=n>+bDUIk@v*_+m|EGV&>x zN|+j-LMdCs_vQTrBJ_0Q2UlH*AO85qIN_9&aneaA;YUCH364AdI4nQ#K>W+)m*e#3 zo`L#~?I=rhIxfdA7C>pqdzZ+u*|K8?RxMg4r@MvAKlgbYf9#>S=%QC);UV&z0Gn81 zR3=*Z*0+C*uYLVnc=HiYRsjTN8rnUOo&g>=LzDx&37WB==y_*El$VId*R-b*$agY< zZPu-4T2a`bQKA3^%osF|T{HUDO$8uT_z}=&ZMdy?wW2-(Yd41M^=AyZ82_yU3*wKEa8ejw)b;rbhHz)iQ^jPqXdCQJ$t7JHZA z8K<3wRZAD**Vq0#)((%z>k9f^14|ZRO15FCe2!Qu^bRc09@B_QM5|X}?HzZhOkhi1 z>$4{z8(`7$rC7OY6`phM3vmCv_u!x>9)X|z>}NRnSj_$_R&07?Z8?qlN9w6JhVdr+_1VEc3V-g)7fVW=q4rStAe);FbL0F6zz3gT9 z_5WOln{K}y=e_ukP*}PYlLCIr4?Yl+^>H1>ymNR94qJ7oVL{8|PcC{bKKtnp;~U@l zs(efHW(4RN9Wy0K zrzqB7*?>p8*6x{+W~P1Vua*9Uw?@7nedoTv=Ln)Na2F7%K)b)3?3F`m1@585L*f`KHe0 zYdVcJv{1k@pDUx;@Q}@vQJHL^tA7=?-M<+h`rwD~?)QH{wO}b&`<-w8yF_$-^4i-_ zmMC!3mL2%x3;r0b#+dfVu`a|~YYa2rk^`>usP-t(@1PRE8E+R`s4)G zZQh7dUk}bc_dEfwZRi>rK$r`#X?Q1&I_5ZR+_q6Cj4WEU9QSQpi#4m(pecv*jB}r- z^}XG@cA`(d=bPXBHm0bAM75i40V>(wCp_^uWW{-)Soy18^9DU8Kl;&+@TGtGA}+h^ zGx+M)uaan_hUjtbGT7j-0hl7qh3U7Pod-0oJ{~T9; z_ur5$527A=Si0f>{OzCp1=bvLoQ`ap5@Xy<8e)hAK!Zq+y-p_)AZ9elD6wFHMQ4e& ztn{Pr^m?7zmFL=vRa8RzM8)%9q)8yqxv7bf1Y~sU-m5HdWPRfnWnoz^jQbcE3G)mhy)xw-QoI=}YSwa5DJtO#@lfLel&O6_$d z-eQ}M>&#N|weH0+SBXRsD(J384`O&jl{BLP%oV8UlQrr%6Loy*<6pqq^&4^iSue%1 zl`HV}x4#{`ch>Rm-@6)5d&V;nZXd_5e|00C`t;M_^^m~PG=Xnmqhr-oO~7Q;Ax9pL z1C}nw>LqJ%&>@FmWMo8Zh?MOMTOJNLd;q(r8<-N~dgQ_$^bReTsIwREde3_#Vl83E z?k%WElsUL`8P0tESy&(ju&=)dL#q$QJzE5HmM+0--*7Ryi`{y3Dgr9pM{4al1G;_Z zP9+j)XN7qE2OWMGDwPU0?%IN>%A~S(sepI<(@w!eQo}@8M_3Q_NHcnf#H>B_xz9#b z{xvl|ieZWVN&|gZahOEwjR?;?`%LurE>MzFHd92iS{D${iNnD@)gp4G9{l5FUqHF9 z3&)>&3U=<^jtl?d)hLNGa?6%G1sp@HTznw5uHS|OmmjFTyb}_&_pexk=PVh*b6)fk zB&=8Gsgs<=bhV|^U3N_DMztjoO;A^Xg~Sc$_6?xKcEp#tB)oRynD{QkVWOoD>(pM7 zj21QR8fe;)(P$y-wHe@zs9~f9okU;|*dgUckCqNhE?+>Aq668ykrzy5QutbLmQ2uW z)~o|M)#-hZ<-pQ`t&6tZ2r>Sh|90QuCL?tw%se`B)1K9icrTiAjH)~}Ju^;Cjww^z z>`A8cz{s=Stm_yx0%;iSy_TQ7z4noLqI+-sVb2p?_&9FiJk$a}Md^ zhh~^HI_Y17&54e((pixbEizOHGDfwi*^mgPJ|UkvjzIyXMk7F1?;>3JFWu$xu zo*Y6ir;*jf_+}Ll@N@kV^|sJ&XFg8J-t3wf(NRrD45F*z}X>SRr$Y;Kc^$LATTB@(@FKp>H4v78s@V4L_Ya=jPW z4&q6K9HLQ)(Ua}N;{L^0I=D#oeK&f$ODcd62oNyh&iG}@nq$M3t?+UlChFVdxHpUw zBPTudS{)&J4h?TY!7OPCs6<%|b`7Do+$WKC-VkEKNJSYE&yL!op$|wbYM?6DNXQnB zz|&}zM6`OVZbpZ-jKL=f$xIUp+S!hLri7kyw*=y#GzJQx4whBzB1m!99-Sx&@31x{Se7EwFu z*Sc`vDFKkjw61!*4Xtr!>&1O?p6EP??j!4W1JQ>g*|G1=-`gu|29by><rpzfc*7te-Mc8J`Mq@L?z5ybCVEq~D7x|M|n{p4^Vw$VQYF4q)@v4YF;C z8pNrZ7{4r)h;o>yOk-4ly4>4?JX3j0IoqMzRn|`h@L8iHn0i)g6(p%PBGZ41Q0&)`Xua$nSY9>>EONzE`Ze zkKRHr+c{C0oYwbGRpfKJasoIp?%%c^h3>3;_9!yl0Y)n$+S}P%8bB%E2fvxe@b(e; zy<7WA``9X@4MZVo5&@1+Okw`(nys_z@OMU_*#gRi zE^YD1Q#>L{tjdw8gAy-eH^D`P8p0VMnvM+9sn|U&74^3he$pVy^QseM!qAFH7(saM z2c0b=UJ?PmU{7>1e{zlF<|>Bz020}jQ;dxo)TH*k2lghIJXQ@Bf4 zEtBY_Vt`L4Rs|A`#VV4}BT)|1h^*NXxJzBeXy&_03cAx|_zK{Tj*hB(88`OD{xOqlU#j4X?6L1{E~e+u%MflgqFm5ED0?&|NA$Uy*( z`^rf%zUk;4muQr&N8Pd?twtcPl(W6E zJ-y703rOz5)?M2)F;0S493&dSlh8HMm_qjewOK3n8t913YmG8CjzW;hQrK8)n5@My zy-IRV7$&pJ>$;4SYjtfSPrp}d?KIYb;SLp1HuY7Vrc<}mN@8S!j6|Q^C>6>&c-u4W zr7Fl^7~@VYE4Cyif5!LD=-&j|(c;5dv)Q_7&~cHi`%E(d=CQ3n#!-hn#Z)-#d18t; zw(^{AE-8m9P{6*5%451sk95t0=zg?j&jn216tmSy7}>Zr`zG8!)`NSpol#GnsNLwI zntsHF82JoSlVU8jDZJ5C9bE#b*fdDMh){rYQb48Env#Q46GKi-U9xA3YS5x&T)?G- zg^P#4UWN7R*Q;QAz19){$>CYgdL~vKuo7>2)8F8LgI3$oS^`M|3Wb3#Ow=b7p!{5* z0OMLNXxIrhB>|(6$#LY$Mb&xrNqXVjPqKgI8;iXIh;uD$-d)E^iE6vVsEkYwLt;FX z1pF%#Om%rGS*V_U&X>r!r9$zHME#6_P_v=mNudSSTM7ERMuv@ks{Ea;Hk?kPsoY{g ze>Pc@5Q8i9^Jj z3~Qo|SjU4Y`1!GIPce(1G0-!h=Ul%pFm+T4>XTSS&{mFaZ0obUc3G#V{GVr9T>{@Q zdDAJ}bi2xfMPBasyOCoQ%WzRCXUlS>2}X3Tn89X{}VCLVL zSCHVRJ-TLmAw1Ipw6Cst5Z#ZK)4VjYbcXVsPWkf2Pz4Zqj*-pm6!9O@GHhCFPy)Xl z`9%^{GA-6607auwt5w9188HP85K+BTdClyRD za#}vG4+l$>dF~5df~l#dwrZ?hcQ5|=pRd3{2d%-~ci*Q(qE<7)nnPFP1ORHM#;$G!@4x01+GV~oLz zo0bBd=95E%O5X zW#2eB1QSLXtP`>)R~-QT{;WnJlwMuDV7UT*(jvIY{;^lT)w$N2t(qzWv5p-H=(cpw zc4+i*34+;tTmRM(ggiGOK)y^{CbAsiR+8(2wYIF1T;j;|6MIf7FST!Oo+i&%QAe;D zVB>ar>U7yzo$`C57ItIrA5vbqtdoz8tuel}QCPYQ~^=VpIb^(K=HYGIE$g2G*kwLawBAXI2g|Zme0Nb|>3Gw8rj2oP@AYpWag{D0Q>0D=QgsS$n8%k{(!Hd>Xm! ziT!MXdwT|qF`IE#+$Gf3Ek+xx^x>H~o!LyFsq3)W!u0f%3cP2_8RV%#L*_KuRw|ld z_kr^}*{BH| zPezWXB_KzVS0-nMV!PH0UMIfS8CI?2pVa;t5rII5P&*J+XC_V@-`Bj>ia01}Q5QEd zsY*j`icNh!1&A*AbLTXd&9!Tya}kQ@Af{hG``(^iFXZ**Y{i}g820MggW_06jKMyu zzxy4J&g%@epSkv37@Y^v{b=zfa*-xeFI?${>2%6xu2jz>RX^GHmI2CEtD%AhT9)F_ z>%c{*o(chw7?NiyHImm=D*~XCa*XQQ#6P&8ON?cx{|=Z6j7{?i4VM~lP5%X`RT}8( zUWna0#*{%zDH#&Hx_bL?!_7D0fCE?I;~)PdwrtxdpI^l104qqQ<#o2_Vug3FdPr*tkR^;WlS+lfMMA*uq7K~5rMF*Gek7qN-0%+L|v zkY|*1|6Q(>#7hAwQ|6vYtyBK3S+9%3F>dOP1u^a< zx^Q-<-7b%5)Yya@884@xR;x61@``RsJ0dgN&V9}nx^<%&dB$;5YuOsTC8mvNY;;=L zy`~0g1Pu6j9t?RW>*sWP3KEHGdY5<=ne?mn3nz069=K@G)enu*knMr=E#R_0R-A}d z+%i3)j8<7IO=h;G=)SwpOnttBeln9-n2s{t^XVwn0i-*(X%Kbk_jF(A?`_$Zvj;qF zWjoz<=fOCAbK>VdzUD!6KU!=_V0!^;98sz;?;h?(GIgxShpG11FPrWPn@WaB7-?qA zkYL?Succx!g*>fSLkxHgb*i9*6(te%^kh*g7Ui{K;5f%n9*M10Y8@)bf~d#(mbT0 zg)r(YzJiLHT1F!@h*6@oHIh!uyvk6cMIF_}mxfg=TfACRkK4BH(pn$&P7`qos+^Ik zaSz4IJGHSyXJSMOVm@*zFy9tyN=$Qs*8F@k5A)#?FlR=kiKWAs=T)UHN$gBc+D(#o z0wn^)ttM)rMAwZ8IlN>O7bObJngQ6RBxqC_6O%@z2zk-V%Q5LlG`grPvgbdr3N|V( zM-YS&ns?E2|FWej;TUUF?nczbdTl6Ypkewva{-T2#tfK_VoN*&Iy$u$*zA}xonz{I z?SrAP>{5>w1lX%uuQoK=*C?05_R!7^qk06Z>DS&j^IO`{smgsmGg9pUCKv0N4|=ZR z)V5pDO$#nO6ubAaTd4^$-mIVKM6X`5ucVzHdd-9AezbT4u@=MB4Ey_L|1JIR^zVC0 z`Ru>Tut~MwQ$VFq$SGNfktxBIH(}JAM%b(%Y}F+~jnUJUL9vw4fz6)RP=R;8&X_Y( zF^dgfMXQP$#0anzO9KjsH{bHVIO&AbuzJlBeE<93!;QCIkJC;&4M!Yth;Gk+{AU5H zS05(FJ;uVJ1(W(16`VN;QUT5My!dv zo+;AA_P#omo5%@?Yjm4v#!%CeaiRcfQjusIVwIz_%Xjrq7qzD9rTToz*tH{vr1QLQ zzuz}Ir+;hD%%mbsA<$a!R5%5%$-1u`_d<^x>%fSvhh7^u|XZn~79=hEG8NF{COP#N1-SLV!LJniw`hP}G3I_i6m_a;1M%QaB*1}o^y zN3{FA_~75kn4|$C5r!*$)1`mk-vQMP(^fK3#FmvN8qKQK#5hqUYK(K>m$s-Bi&^>U zYb!+*$?*|j&9w)H1}4?Yh>4RsB9j))ln69bysm+rq$i$qES~wy6D680;n~kQ87tSU z*0k>M*hcNUT)JX`d{kZRXjK5dW@=Eapq-X$=T&_JIvLN_t8BESg+x0HoZv_DQ%O!) zSGlCbrnnXBmNq>j+~9dxO)UpD_G}*)GCNJoX$Toi=jmrB3Y?zSV{J+~bqUNBmBzCp z1#j-xs_{!Y?Iil`vQJ^if!5R+&uHIcQzFu-`Xs_6*19tV2MY3FYSr{h0#+RXNy{)^ zy&!3~k?4qQ&7EdVs$ zB_%)2>UYuY)Tit{6(^l=+&QaW)V{tv&jOk~{-#qVF^XC+U>(PhC(7f2tt($`Mhj`l5(q7$bEGd6GEj!Nev(fw$-HiL9JhBpKOm5+4Y zgmWj&$fK-AJQ+JlUPlqpkyi)5a{#_3ecW5&umSr6}L%LosG4|TAs=~LG#$i&gu2&qWZ`Zk+fNHW?3Zh%&bwS?$ggB z73uN}7`eSpWa-K;bbtx4%$T@)H63X>5djJe%v>|?6V`L*T8`nXY+RQyux(%*G!TX+ zz0K=nPtH-2B9}d~<=nJA|J@uL&rGqIMK;>s);x&rN2^wAXgW6tW~OR8EX|-T<+WtV zBJe`3*PHUFD%hA5l`-Pl+@AtZKJQyQVj@*<2Efh5{&RJfbp6G6z`o95G=?G8D1@xh z*b-@UE++>SHwYHK8Wr}=siBDtla}NfPrUU&HE<(U6>5dkDvCg5p=xbRKu&-rmzDSX zYN#`ryw(#o5c6N^JBc=oR=UM^kU7*vdZNJBrTP47_W_DvN2^+ ztYiRl$dk6BP^8XG0wLj~Rc{&RNE{_?5frfWP{raUWli1Rx?u#zA8-I_leeNI`!JF( zb2=#s@sxlnqpEJ*XFtrSp{EEt$t`-kGbTk!wkW5#aC!y@SF7RoZ3@z}QCqtX7_^U% zxd76!9t;r(#$3ABDjx?XBn{;C6c%7DI1UYamCg&_5qV8BBQma|Cg+kO1Qdzjj8cIZ zWyCfsi3+rve#ykts4b?^8C2a>broDacxGg+5p4Sxi>|O!R64vN_X15T8t~WfUB6qM z()PX80YnM~Wc*H=Hkku3D4ocx2*FgZYx&MhE>PiplA-t=obSoM@%pFqqPDNGrV!h@ zxPG|bE(^>!2T?jgcD8>fa21=mTaS9_ND4EQQ1S-^P?`soRNq>>vzx92(6Gf z4Lucj0&N?S$kWTVdtoWfr!!R}Bh#m!M*#(>)K%FzPXFHnv+iV8y z40dnob7%HSHAL<*tKgH{_ZVr!6ol}r+#)e zTSSR^tMXsHV){=l_fsQqvN&}BG#R?AgGIiA4IPR=9D!yl#PVg!#1`IzZQFMvc=B=q zRCzA}&@&*Ud{lxYe`-n+Ceot8^o?vnyC)CO`lx3Wh%~k53|6}>D(KX2^}x=JOtagi zc>I}x@H1I+{w+}G$Tg}sCDwtmA8E^qT7PDw8aCp1i6G(a4(=a#M3wNxMtkS73sznKAtvtKmpT(~fOPfGsG1 zgkgZNMWg5mXi<_btEtdxZ8u8YWXEPOIX;YopKt{3UAqnU-Ma}rJv|z!-hTUU^_X$8 z38$T0fBp41>7nU>+G{hpeeH+{A&2`~kn?8Jhn_~? zJa&wbjpLI%KxAR|a`jx7%6EN;s_UA>dJK6jsge%ClOPgw*sjKD${5ET?Kw96NBMW1Psj~gpCn@#K9>zvlK07B<8U~1T!Z*c7} z&e1W^p7#K3v3!BVoOjQT-BV^VuZP&m3noT6DZ^+qG0!tPn@9x5kw~!Nt@r>#3}*PN>doq_v*j-hKs9-)|{U5?syi83n{RG^3Vi zI8_cU_SGPWH4VKcF)bz@dltc|6&W$`o&Z-)904)f6^=hkG;+-3$^zIW`6*Fo zkC}9lF9vc<%(3IKz2%l$@ZR^n7hAV($ID*!$9VU<-;Ixa`~Lp$*A1*Sq8AxG0hUVB-`xtZToZF^OlJl+w0O@VIrb&)5ROUI^LU3gm#_BbT5R)Vn6j7ZV*JE=2`RC)pKYcY`|N6hgVTT=tBab>#w_?kd%@`XS!@18p z7xhY2qUIi>P-Evrl1=GS&Tde$Va=L{r?t_L0vtJ5Ndc6v5_ zT++%yv+JE{@J+wg{f#XzTGO0S|1?xvGaonB2)?sA3}yE_?>pbKdcD562LgMH15FR< zR9DRi8KAXk{3Mk!w#;h<*N5@*f$O2^zUkxRN>TemDwk^>ME9fRX8iGbo1U(=4H$_- z?k0CP?V?3X^u{K@@xe&a^QvuwM-VoknL{R%{tiPfQjqmrr0C3b=f)))HebjJV0W4K zA+g_6*E%WZMK+lN3rTV?x}6zqP?uY`6}JVkm9-i$(i9M_kIVK~Q79!ScNYyhv4)98-? z+h|axPPV^TMj+AS*CXE)5jKql_5;67(_7~+bHa&^SmeHi8 zkbtl0Gv}qJJ^c_JgXPaK&JK5Yq?!U=>P$IMic@5lz@^|ipF5k!;|OjUWdM6Bap%-< zxFSEXnF*uU8@XP{q+=*y+1dtdBHKRV>2*Soa@UAUrFPV~e*b-gX>fFzoY_JNX~1-4 zlG!QUbecHrc(~V^zj>BvoURu-ur=G0X6Sb|vU7j7Os&9_OO&7m(_8Bqr;AQi9DA0I z`U|7TxMQOA=}IG*6Cl$3~(lZoIo8Xyz3U5ka$JB5{0 zBW<6f;QWF<$M0;^Bh(x6IiX2=4h^l;)Gm`*VVF^HO|)K^F?B}y%*pZH=vlBr?q7+T z8a3Q^-+egknP+Gee*gXVV{mX#_vPGk&&8j<>O#Ev&2Kh6fJ}KO4I6!#`Y_vcXfrbs z*|Wu@88%bkW{6;Fn3+Z+NX8~opo>xx5FH(@p(5MZmth-=kyxPPz}K8rK;}O;mD5YrUC_wvNAS>@0)109ckH- zZCN?@>If0UGsfvr@QuuPGe$tXX5DAc22tl2JeF&AP1J3N;|;idb>twI;Yrs&XA2#q zmm?Or?|8s>#-`1z1D-P@S~{ZX^zH20V~{u}HMWk2srxJY-1pS^F;!POFIjo8c5T{S zjKXlb)AQj1s9Sr!emdC%-oIgopk=c+4>W1>AUePH;+lO!&Rv+F>E*iRYM`$6>7ob6 z)OE~WMyhOuOB)9+cOwV3PfmTu6kT6yd!Etu?A9pN$FAMGwVqfm_sVnq^0xx2m70Jy zqu>@Q)iL>fM82nmQqj}2tvADn=pMnaT8%!dNk^MV)U#C`ZRMb`2^r}X#F2nTkE|^+ zO0sx4v0EZB()*3JD>Z0MD*)N0(C4^J+SS+pZQi_5N1q*W^w9#yVLKAzG5ge~ zKY``Tm*eYS|2j@N@g#}P`vgpjYM?@qX^1_Z zWTHk5$_il3%0<|`V;CE^Pas!r2?!Y?NSv6It^p_8{|H-i)Vii`tDUye=>WmDG#I^J zI|V2(={)KM>)1A1%WMOHhZ&I;=TbVSOs}EDh^}+FA#G|TBXjONyDh#=8D}Uq!T;=# zY}!cb%<{S{`Q4hyNa79wCw(pdK5C*o_pTnB268U$dpgDJ?vJ^)FD(=gbRyZ=`@`p5 zSw@}ETB}`WHrE=AgNnpnm&uF=BU9f-kla?*<|!A+`?#f9hm1-a7V<@N&9&H{ng=Jq zO-@yGUwyg%!pJy3ZaccVN^%d?+tD?%P0n_3+n9OcYx%nI@yYf)StGRJvSX=so;Hb! ze@kalter~F3x;h8@_!FgXCB3x2hsndE1h1V5pWTtyI48C%G4S=!>)M~@djcP%JiIG z;MDq=6_qN1NM0YS@=JuFg+stXACr?+jE#*d!1r`@YwD5hBuP}0ZII8)#M-tJwoF>q zdEpvi`c5a-(D7N@fwsiB8LJT*ls~MqMl7CettmPI{y66UyU=KdpchK z`it@9FJFO|zVxN|>%V>@p7Y$ZP5TB}$q`8!9i!q|LHfk^jTuSI6cf)zZ)D+6ua^^0 z7!M5eloX&QD-9F|yAW1~k!AXopB4I@vS*x19eW*ywt{6!OI2&uVbZSUX+-Fms8ZRy zmUI@+s)?qZskvG@(h;I&89bwntG%i`uCY0P43M>_)z;xyzoTPN$QRI4?m}0-M`wFJ zp34EZb21$`xe^IM$Egdo9m_d%a?_-!G-#%un_Uy-wa@#5({6lsP4e$nhLH15DN(32 z0J*jdNiVUlW8EC6$VI+ja6rM6J;5Y)~CblgkQIL$nyt%>U{j7UF^%-a4t~=La*@`uI%Uj-xpZw&<+8_GjKYEdP{X6iA zS6qOTPdE|3{q60hl_k{!XQq6(cp4~X3TVbA%57>JU#K%DNirg>CodsFLM>N0PRkYz zYES8=ZM*RFgO-Sa3{|Wk%XDm#w}2TKq7G#S?SvLRY@PwJba_c5pTLq{$ke51dp1yl z3ENy$Kp}}ceVU4Wo@qz1^HAHs!c-j6Eg$Acwr5!?Tn0v5K7ws!F_8+dpK{TN?57ED zUeY1eJYFl^lgbFu2$FQz>;wcij?k$Rr6cBaFKfDn+L`}r!NThZF?3p90xdsi53vOz z9>7Rjx)OD$np7auTQ!;S(-4OOl>75?4cBbsn3d>RuD52lvY-3Q4ACvJd;{MM zZ-4>wO0}Zf$m^JyBd&?briqwa4GazSqs~c1Vat%!^q$L0)Y{VaCOUY{mSK^*b{{(B zj(q6Ibw)w0ebn2W24m|i=K&AQsO?K@9z_3-uXGfVe$L$7MswHH%RDoFjMGLU_C^lq zVDPD_3Pwgo^zS4%b#?WqhguUOQ!E*2K?;x4S!N{5zZHrZ0pl_FWNL!)b{vo$X=;hM zYgna5TT@dyo{&V!3$&`3;5jUK8xo+ z{~WuG5zc?{3sJ8%6~MH1>zQdGrnx<%hA}4|d?v}LsDj_}brxnTH1E-LEF%bcbtK1e z$-+VP%r|Y>C6UBosQE>W+*r>nW{PG&v>c;W)I_y8g@za}N-9Rg=)goU8B6eC+X+cP zZG#VJolH~Y+RMqA-+>`HrPHQ?tL>Rz+r*j~0NPpEz(x|W-5>f@6rdoadO2hYzNQwt zirqS=H7z5_>OgiM0Z|u8x_ZA$+meaxvN!}PzQ%zC|DDeC%vLLMJOn*HHkHfwXr!j; z@dVxF9&Pnu3{PdRK$GyHi8!NByP-l`3->6G82DCw$dom9?%1X&-TuCAY~Q|J9N>&P z#=KYQsB&?8`JK&%VfE*-vh872zAuX&xvtH1BiBo_q1#1OutGj3+t#fh%S)lVtEitb zHo8NdX_Er(Ql~MKEu_-m9bt*N0MT4)L7UAUyY!0T*UzVO=hwcs9&A*aXH%PwNa4~f zMkde**)yHPG!Ma)1RLHL1XX&!qobo38eE7eiCXi;oC-A{8@D}E5^MSdoPfN5oTmcv z5D?*zY=$a27nAH-M<$^#ff!a2gBX3X3$E4V4AFuDbv9R0b}b8p!bb+#i zb>x=UiNN*doDHCq$+HrA6tP&ctPc~TW3ms_QY~l=iQsdaP8(g*0nVPr9i$!AVCqO zY)L`CyWFQyuL{36jAO*%2zfb=9-W-<@im(1%nXgbD|a~1OOuFP6z$TxE-Fp80lC&O zmmYS+A_uH#l9p%6(Ryw?t#>BM*v=@(SYiFx2rB4nGv;?XVeI4Pw=P=HVXswb8m@544UdxHL4BWHr}fo8%UQZpYzeEOrRQu3Yg5+ zh?|O{yrv-E=Sn!W+7xQ?nT32wzbA_9AcAbxItvX=N$W~n8;`R;7C76s2oIT6d%V{? zi2fg4&Rb5e^zX(91U5D0TjE2g4=zV8pcm@urmT-FT-c=`J3U#`8#;_@`gf+3a@s%2 zo5KvNrb*_YY#LCup}0ZFT0wJ0-rhlsfa^`NYmI7BPfxD^5&Jp`p4^tK&X`mUdzgtI z)Q{CJlEl>DT)PQZdrF6{*!FP5a0Ca+8uIp__wHqSFflTX-hl;}7#mjuLT{S@N^hU! z4My3N0o=H8qt;B1J?1I42J7qRxareI|5d)F73eT%4tUN4bPFWXVKkaFG{xpA8LFrb zz(D_?4yqpBJ*8V$EcBpE6pajt3Q(pu+~IJ8O#nldeM%N7qnd)j2b zhPQ6T;Id^Xl(L8$(P;QKuuEr+U7shcVj|)~h-rHYD3!-pARm9L_L4 zyc2zcL$WOm^mcb^8N_543lR^2jJyd3GuaZ@5A! zRArx-(O7JvBCQt%#^5EcuheY45e0C^!h&tJGAg%o7h2U3{PLGKV|eUmvVTCeZhBP- zru?~K!v@{QYp=Z)KmE~<@!G$51B@XcAu6Y7YXY2aNj4o&-jPZ#o#5ci^fGhLbNyrH)-1m$|tw!+(T2s!7kt^n{L|u)fk*XYr z&;V%=*u-^gq!G1Whnlv7(W+y+i(DWM<{ zGlk_jn1FTbs9}Z@WURs!Y^yI@8>qFLnY+vC_qJRb(nXK%IhT$k*ts+=fsDu0MVStG z9jNl2am-s6m9AdBx=rj#KeX36u1Iv3L9STT63XzdZP>kgr#gnLU-FW<{r1~Uy0)Ke z_byEV^Ya$;4`66$2v=S4d7O9Nc~~glbNx?$s_j`XeBlexlIRi-CcDGqGrL9A}(yrbL~6h^NL-;#8ty8K_mTdBgp< z;fDXkIp;hd<-UG|;_z0hrj09aduCbUVA)5BZ5nX;DdxS8v`?QVTJ7s=9z_3-uCzBe zS6!45n5$9o#!jcET*}J5Ck?)?F2v7QLPoZzX`O0q65F=zkQ>#*;6M*lWL^Lx@)}xq zVcnC_346qK__%Lsh`iBA1d7N)joBU|M!D24QDCHPE1rN9>x-U^@DfXg(FoZOP0CXY zk|E0^YTR`cT6@ikcG~Hs1f}uuyL?|>wlT7#3Uw5i`;4_pYMcfVd$d-_qOgfJh@~b{%|rYIkmGV6v$BmJYrAEn9k$W0j)ixFfrNknlwBSH3M zU;%_GpDMyLrIWM%(jWPu-WIsIi;5MNtzdT!j!q_Tq znHim?cIYelER1K*)BOFebW6)zP#!4qE8)~QOJ0}xk!4-aGgy0vo63Ah%Fmi5}ZZd19>#*(E9rYv*t zyYk}jCPRZ5*|iH_zw%1F>Q%4Of3t>OUbqlff8{Ic@Ll-2*I~ojwJMO+Bk#X|-8%go ztXzq$Tee{1`ulM3!3SggeRra-`#3Gp+;r1TIO!=*LZQ2WtN!&06;*LPX;Ew1hg3(A6#MCV5DeEX>~s3eBiSStCt1icOYiWC6NL-C`Veh*4N4 z_MxJrge>cf%1kw1#I$7`m|Bk~hJ=5gnv5|v(!fCn93|ispf=6)QOPK;==72n+<-{W z%A*A;%LlNnM=_lHroM?v~2`KW?Kk_|lf%;$)~=#{q@aKnwaVDsk9 zV*D#QxSQmnzxk_+am+Et2iU`rSE5FvBF46i16D7`uW!8#8#ayOfFt^l^Ue9I1;!01aV}-jP>qCw$5w+t43z+_ z9KSAYJ%~_iw8WSnj7V&ctTH}5JCf5*<*~;peI591#d=TE zxKv~+iF47F?}pcsD6J*ul8kK*AJBf((4_3MXlDa-8=Q*%qg@X%?EQgj=JTxE(s|^Z zTVA&#yN59_IHBD(D{=RKU!uq7?6~ zNuV-~&wcV!xacq6C?{~CM1*Ao#R7Khs_SgmYAsY}w4k zKtL&n=_$$pmeiccmaO?+)ZkZ7U1q@Ou4H7$VHrviv11hqWty67y`P$O>TY$_WzBN0eWQ@A?d zI&cIKSJh&eW0gOZPd%?O_cFBGY()p0 z;*M^LHA(wGJ=CRc2@;%>n_eW*F#XAa0w%(0*%~EVsxk;0E$zh|nVd$UR7TbwdS7*s z#leiG@X7c59qzg7jPg#!1KEWC6LmZ~v`c ztJUf>wr}5xWy_Y}=9_OsYhp}?IqcfC1FOW@x$U-F@#H5Thjr`j!_J*s(G=%xd~8&l z*I`UejN=QR|C~065p-pz)q&u@zy7r=)mb?0v}a&gj@9jV+=ku593a7xN-zH5l6NB4 zFZXVxp*(_?y-j21pcx*To#Sho(Dd)Nw(dkb_T4!2@ovVNUw_amwo^QOBh@K42BV;+ z8XQB$fQfFb>|NqoOmqr_sd3h-O!r0T?^~!p1K+9(J)EA|N3fPIU9R6%saCZfl*yEA z9oW~F47UCdR2>Ub2_d->4nFu$W$(^a&q+(jJ=Ah_HR2h&QHBNwv_`pO*Rb~G&D1sR zEEfLeRFllWa;HdMXXc0 z5rk$%YWbOx<~gTB#r-#c*Y&A-H8 ze-UwO9H0K=rKpW>Mpv<=&eXz%y(s3z@hN06A%J(!J$Gr{a@DF;Sh;c~4m#){9Cg%D znu1-nas}?a_g;D2jYOi`V~;%spZ)AV;g%bJgYSIjTQ<$y!ey6zMn8+KXjfeECHb7? z3ZxtW&zkGd(4bBxdc`X*(0%{G4}PGnU6+3BW4P!IZ@_WK9fz%3w?e*D$x2I>EWsu3 zd5=01RO~wP$Rly~*=Or<`0!^wgZIe$cswd3H+7XUF*zpAho>p~&OIN^xG&5jN(rRS{AlKqw|Mjcdtggeo!&uvT2<-K0 zMLhR${Ke}o#&!R5;|yR*ue7qyo|Z;8Y=cl$CTK*${P4CNJE1xep#dc)nC7I!-BJ*4 znd8Y+Yc7)&qg+JPh$PyP?ajJ+tQnD|L(n{vL6|FAez?mh9zpA>o|m(eX@K{Ke~EtBiPNM|%6pvc1bNT^X0Cby|NP9v;QI z^*ivKGoCHrHiEJ75&Y=K_u~3r^(pA`{$*4-Haf2R-q*K42}!4&c{b(D42em$>CJ!j zH#q5}69iC~X%x%rj<37>rkk*9bP~rs`6*iC9^JJ|1w&YmZOHa!3r48Ix0Aok1Q;DL zug`Z_^j2PUALbX$gXsKvOqLoH3W_6CgOkJ*6CiW9sot+LGTR0`$nZ{@xmSitbgq^g9BoXALm9R#-RCJ z#xOpc0`{3i)44_2UJBo9nmBNV&mPnqu!`Wl=w1nj4HV1>Z@_qbDx8p zM7tZ-Z^U=5xfXAH(_0aXQ+NCS{t8E)@D%h^y0u(#;>jmqa(YtJqc3~;%kbOZ3NT7E z`kd#UE>Y^YQSL5DU|GUB&p%tD%RJus&UfMCAOE;G0Tm?|?%Fks%P+qiFF5yn3OnS$x`dqug3ug9;jpbzIxS_IOdq6m8nj0+YLA0q;=Y(k2wxq1Kr4zC`I8GKZhiB zl-o03lFspN|J6&s0@}O1FRpnIonMd1a*g_CR$)s=oRO%*dRU>5G3@|x3r;A%t%s+^ zF01{ZWaMVE-E!Yjrc4Z3HjhRv23y!3ThG*&2zVNUgF_l|23`YCf7&zg%2&Py%a$C3 z`_^s1y0!OXM7(*9gj=<04LvyG}cWP9;6mHy}k zAt&1IX(R#JR+AO*V1H`tc~&!b-w#Gz1|i+j!eItvhPxHoadMQgbR`Nmv$uQEkj}K- zxM7n-VjTExBCn^PdJ3-kQdzF65s3)UNCHKp2;`-myjbsN@Wmt2o)4mcR0Y|p1Z{b@YwSweX$`&EUE$KZt1&%g=dXk7QpU*qL}ei6tT zYfMSh%I_!?m0M6M`#P4*vyz~RC9E0ZS`4`B*cC+Gx%fSv`-i*s8i@90d-2XAK8O$B z{a$RVZ)rcTy>Qxp7Gha(Io@>W+wsmj-hzqN#NPVq`L)k2Ba}^fbq)q*-(n;n8b&oS zG@;gHlBA-qbRyMlH68o@IHFK|C{f;!jv}M*LlT?WmC2k4I@`B>bc?-rMzYTsz*C?0 z3`8xX=}NKt(@uLf`ui8??9GcWegp0h51*|E)#)0Z{_N8Q?4t(&=)>uGV=XhX?m4@O z7B3Lnl@BmHJ_#PVqTSE-C#KS*nnsONVikOXbzL!B#e509-65(iacV-tUN*g-ar?cA zZ8dl_%Z+x^RuMl*J)huV9EL}{yx9@uj7Vp$H_UwA^@nD%CZ(IpXD~HQo7DkPrYRRK zUW{6`+Ey*n+OKCBrD3Qk)v?i0l;oPvm*rZL>#DnF0V<=@*f~6ofBF8;@E0$7F(xPL zD0B^~a0nWaMtlAJy@+ZxoPPT0_|g|I!;W1$RU!G#yYJTHNZH9xeCktp!r@0_)0VBE z_WM)C*~=7*XtWY6S+)xGkqN9_zX`9r@Xt_{e^+WPeR#!g?ROp-n?iSQ1;4rRR{Z_j z---SO3ot%5h8ur#1Ga40f_J?0-N+V7IQNxBT>s;rX_TGu8>%wak}tgZmfvE0VifOq z$2;(WxBY{vmyL`~;2%HsQS8_`feZAnb(LJ zTEDNZy#k^H&<`B_N$jX^p8=p;7p{3VCIv9Rx#cQst!=@0YfNAJ*5AHi9!US7mnEzC zq00FsNlolZRY8?46o|8S@NjI#c)@meSoI>Nf-2QeZc5gI=(^@q&y{sZC3)C3gU4#I z2QUcw5oF33-Z?DaJ&m9IUFvz)ky*1fHuf)h=L z%`mV=St^%}C<(7=K)Ra`JDmhB&6e2SF~2Oqj(hUh)6%_P4zipAv9_0P-7O_Zlo-x*Us_tiT1YcqNKM zi}Ck=_19W!+`VHvwr<&ll?NYz?|tJNat|##=C`5PRYpVwt!xJC*KfpG=bWRZj-F*Janw;q%<6uc!r8=pZvX^ z?nkvAHHbO@%}D6ZD0KEZr28;@ebZOkzw-WIj zZ!UV;JBFCXliydbO{=K>?RRX%4}bV0Jm>UtaL;|~anIfN;UgdY5dQnW{~HG$cmVES zzuri&$<|!-n%A1ynzLA`52qd&sSavO*_RC}`3SNt9a?~$7FSF9mf?7#5+ zAN~~YeAlJ;;^!}y$hL+jKj~OZu>D4$Wm=p`venOc?pbJt6*J6SqH-SJ$dx^3o#+n7 z!AdQt?xb-H_to{NK-2-~P<}D~>gJ13jVcd#%|TsUFBGkWrY|x=NxwlUC5%8TWR7sA>N9 z_cFJL2DVnEzG+##bM}Guit*&=vmLue@Y%~Q*E$iEfzCSXZ1i?_;kMgu!%u$nW0b{% zrxARli-(7bO;KV}W;~W`k66%M)>`QBq(t>AOIFxEHodiaY)n(S8I$U(LDga4o=xe> zBO~uG1m>6*0s)mmtUyw&o4#Fm56v8Y=+%ibBd-&Ux@aSI{iycU+N$dI-F-y52lx>z zH)vi{vR1y5zjNPsF6p!tP|~&%(>UsxtV%-gWPd3oE*tVW zCG_=+168Y|-fZExC!c`hpK>zpz2`3c{O3QzD=vIBdi#cO=JQ^F=e_WJ{jPuew{IwM z=jqRU7N$lkSbgZBc+Kno3i)y$&?U~N?DKK*87H3l42Va8XPa(uL zAq*27aL{2Un;}jC-~8Oq1XF6-gBuEjxPP+N0j)pbLV!9PfnpA z$EQ-QW5I$!6w3nE)6?2Ft78YX#yNKncjwA;wb2fMPE72ZIPr)<)B)(K(i*(y&bMK6 zZQ}!8v$U`r)8Q1R!pRxW^R*wj=e_uc!!Ml&(m&uuS>0yRz|{08?^$tjnI5x-(dvk* z%tD-K4<=hz$iAiKW-Mx3?U6=d=zWBv2;$t8C82>i z_w?xJ^LO^~W>h@Bq|Y%@9iN<#h%Kw>Pl`J2^; zZJWyF%j%$I1$dtJ?B^KJmGg2~CXW-Ibvo(-ScSemoc`SB$vH0Qc|Q9E=Na`Nx&BtK zJ_K7K)nMIN^k+>bLV6&sgg9i2mo74`Sj9a0i)EDMdwgnb%RN)mHZWg@i*rm{K9ke!W2wZo z4b8pc_TY&Qi2eaaq9hTmE**d$?6?Nkk6btBYYy%{6!%TtJLli{o*(Y`cbvKSdHPv@ zeamYe>88xDeQbGF8coxAaTCq@1p52RN|vDa&blW{ava*tx}T2E42+NgH9(t<7~M2B znXCe$Ne!Bw#u=WgH@i{3bF+ELqhs*$W@p-oH+&pU=)cKur0{n}qK%io{N*_KkOQ%7 z`BGf)vX|oPS6zuqF1Z8;9VQ;U4hnzd-_7Ns^UyOrw{#2AzoAJ9g-K?5BL6Y#l||NuFT@wR-hR ztXsDZ7hZTF-uAY);pk(J(exwFzlv29%;>IW!_+z*pz`zSG*RIyv?IbOg*VlxX=*e} z$wvZFy@l!NDk@XcdTsS^WS)vPz>Y9W1lIyhD^qi~#OvQ{s-&RyjLHic$<_tLdIgvZ zJ%eafD=3tEFtU3Tg;G%ftREvI!^juA(URjiF*Skiu3q>$amh!iw^yR*3X;aS0AGRy zgZ-#i8}PC|n#@u#-A(;!ucgi!2esEZS5_QJ@(~!7a;j)a0CZB0+2U1eFtTe028M=Y z8+Ph3rL&Te?PmfdlQZRvRx{EJl&iz*Y|=gUdMk3n@o^I;Gx~?9o%_{|U&19vT#Azi zo{B3sU4h}ot_Qq^soeXf@0s)cgA!@*y{)9FpEbY!@Rm-!59=yNm&r!TSo95xz|K!0 za7JoC8U4`ivv-c;&4O&sq<&Qf&ufoKQ@GGEX?xP_*;~s+QDzu9=Y$?|$iWyLsh}zb z@sv|fQc>=gUvPoe+FtzP7vn=8`T!0-@E~0Hr?0}A0}gvs-yXF>JK@DQiceY-T`0ya zz_wjuZ3ScBwg}AJaw81DR$Q&kGAaxcbzI_BBu3Ko=<5Du%zJZzndMoJYerZ1QMZeB z23m)5{&fy%V2t5|3D@tf)e0LLX)|rBb1@|fWja155n^q65;xv>BmV2Z{tI{9ahn3` zrI%i+pnCDe7vt!okH&YexmwRDi9?Jo37ic9)O^82oZJUK&uK^ew;4uX)MMI^XqTht z52*#@flf5CY;%qi%Vc#*OCjfLG+8Kej9gKi(1yMyQ|QK`72T-F z_p)SAsYmFN^IPcZQx-5s3N{3=%H0JewiUX%1psr}>pVSO)9gl3qHgwNS1WZ)Rcpv* zc(2L#$=@0E*5tYidCuf#Q`yA@?T6;y3E~95>1nyA{hSKs_w)_QF{q)p-#8{ZtRjpR zr0K{R*0Qe?o!ksn3efKnMB8b6r>ARWF#kV$-vJ;=RjvJ1b?%;?95%8nOIScavLr!3 z;2FpW2=dUU_*78LU_>#e|0xF0rz90o1VjZCM4ysGiA&B)*f2SD?yCCFIrrY`>Yli> zv%53UXKAXZx^g(*J?T4hxSPw2bD{)sO>@@XW)NqlanFH5#rttdhekw^;iklY^gwsC?Xv!?2rpX6t6@n5Kog)7Yapj=cba40-%ybYLuuZ{EoZQ>vGB^uP`b7xVtxbSJMOqclra-~UvR+%q;Nlgcf8{r!Xk6V8K+B(lwE+V zoHtG?-Bm2j*urCt1??>o^IG3KAk0n1RcbPG)ta_)hB57){)8f&Bo&o-oV0`EvNKPS z#Ct_Yb(FDG7Z(}hI2-8-*KscfPL8umLJ3)<>fUW0i^BBuWX0b=;K_d*ONcGcuYK)n zc-`w>hhJWOwZuFB_P4(YjU9U$*c#<~&F=ZnefG2B-YpR@a!W6cmoh&xHz45cG4L*2 zv`ATr1hO1=Wmjd1fUn5$OaiJheGk!nYM|$+wYeGXt<5@48$vW5B`Y$DL<6@z<9nst z-SK2xNE{e&nwoj}IC{GK$>PlrekCw4FoHy?Nx}w28W?d5o{8Vt4LmSB0$1B`JRKq{ znctsbrYHM&afYsHl1;z(Xm+Jb4Hu*#;fF+-lDHScP@(oQnpAx zxZOwb?I*ul^?Pknkr7^Y>(uf(fWCr-6`1r}^onS1YaoTg9Zx(VH}@?}Ew*;?=5wqF zqG)buRPI}yEMv-LJY5o_T#XYc`q>$=vVvoUm`JF^8$K6SzKa$uz>YiafDe4&9Ncij z_0sv`;){PIJf~c6zT*xnap9N0f{nx>5z}%^DEa8z+gc(5ihX2>up7{D6B||?PnXol zWeTadFuP7Uz9i%ewk1jw(zQhs;@d@W>z0Kq-cz4hC~lWr8CS(c6_`5GoyWwqH#McW zAxALT(f8bQH=cOn2^@0BAy~G}HsYFRD|M8vyWo*`zZ*xr`9GxR z=kw36R@8sAy_X0$W3dE11B)bqh(VLNbJhOhV$qtux^enl>}~q)73sNl%i>XRY&E!O zOq12hf3u65GpTi}KA{FIt9OFqibKPrs-+%X(8i`_u_`l}B3XdVD9~}`$)Zfqpp)oY)(W^(jir;r)RqrI~oxlDnM$CduM**y2!<;DjQ$#vkEG+Wm)VD>C2 z4fDB(eLWC-9?W}hW?R_QT-h5V8(rcO1k$GnFmG7%TbaKwzIfcEqN5j`fP*^^s{`mJ z5tCpOWW3pUF>E+WbVjYgs;VqXUF*fYLZ!T-pWcD2q}3NmIfVR9&SkZZP7t!dt|*(9 zp%=}GAs%Z5y`y?30UlTBilW_^&|h?EiwUI#Gd^c5>^??}M$aJu193;u$h^I^4eQpe z!`4f;LX3YSkT~v`qjB14C$ql6nwQt$g3o?gtN~_pnYpM&-I7pS;^Yiw{IQTG#T2Fk z8X~K>#OLaTr1)Nvvn;!+T@+gZ9*_K0g^P0Sat5>z(5r+ER@{zl`Qr{_*;R{0v=7_aXJnJq#SPXIHtVE9FZQ$;2ZSK9>}CCwb^0+;Yn;(lA4zxiSQ>ho^~;;HI}kK)C26vLo3vk+=yE% z0UkxSwl+x&(qzj8>*o{!x^z%Rk^3gLcL*OSGYql2r$|Fy&PwFCiEXJKhiv?$(@EsB z{bbn;V5ImYmM&Q!&4jthb1pj~&4HyE3Nn)H!u>8?mqx1@vP3gs8vXBt>?o;tF37fw zTgTO{#FVJU(zSyGUE1Mug>8%}$O$_sQb2T`QXn27W&8m8dwcQ3BM%Gh-(7e9L%Le9 zn>wE#Mlu~kf8QEXd<`fURHBqSZifnWe0+_oZe38R(0MbPkXND+J(Gx&r9e0eQps3M zmhiyi!&tqpjFzqhB2ES_ljC!CB@@jjLnxCaAPz7uEY^;>W(;LqawMeRE?;9#I8s(> zDw#%+{^hcTKxS?*D{=#;js|kBc`W6GxvbKZ-1WQ2KwG}1+=&M!;`Sv)%rUyrp%Jn0 z*s|fo9JU@)4GEv@ox9So#hD;Wi>J*56b?PJj}mxZbIq^u*kg|gv(IIh|5T2pMAx*X zqfPep#S6b6uH2vf>}MDp8oBi-&NO0+@=V_FC%u9<<3b+(iD$=C>HXv z8e5^#;6AE}@I3`6;?>bB^SjDVR6^4W^7i-|7xN{VGWB4djy;`f6o6yqDxUIiF-hNZ z^jkaB_K!jFL-(I00LpTA-|e`k@2;w4_%~i=ymFX^ z&rM7K03ZNKL_t)#Of9T9SW)ncuh>)EnrD#za8xpzC`{<29b2p^e%M8k(1Y6C%<2DS zQA(UNlNT3E(pU2AVuBMw11YQmH`>jR0;7>|s!2O-uVa(U6ZK=;AX_R(S8CZTl!d*UB#=K&Czxm+DTc2pxTtwWQYbp zu`+v{7i*UKP>zh`(ApLw#TCNPV6Sw#Xm4x6L9gE*#~pt(w%>kxap(T*^2_k2Tdt!+ z$|KMa8|5I(+12?8yW?|1DmQl=LIb=Pnc>P$CgAaf)ng*B%R7 zT5XFpTJ%bY(norndYY2ZQpZs7HmKr;QmIVVR+*lm2Dw&i*Y=>Xu>ljx@V23P)yhON+_` zjK^s@A}Q*<1A_#34H%{Qk{~KpP7yYZC^=zegytvHO>~bv$riOp!*h{%O0xTk;#TTj zJA~%81RCNE!u=|)uJS02Xi4$Wx{jMut+xoMOO7k<&yMy+S&mCcnDu2#3iFm)7MC$N zXrk|@oO&F}#R!tk9m3pFBI~MaVI$5z?}Iq#4X+0`8Gm8*T0H)69|rsTkSEJwG6l-6 z!CDK|uc?$CtRX+UmCGr_0suGXW=ppqeMQSVc1U~x#6Ua0iHqXdCMhwsUnDxl%AKAB z5;-)Tq8o72&txhC2Pg)ml2?)rGUZT74d$d=NjYrg+&%5))v;Q(y0}pR*9>!6$-;#l z@{Dj?l1oUq^rMlpPsO@Z*X+(a?!W{0-H*4t7%1U;(q0oSJHiR z#4=^lb~_T0{+R5Zt$)k@xT9U_h+<7Pb^k+Y%!O{)Vlv_MD;h19FaprEx zMO`+p)VsLMBgvPPwa7|}-8(_4&}Bh?QzJQ!jWp7ZN{_)% zDI_jkmC>jaF>_`r;)1fcaM^vs!M{YZLEN~II7dWk!kF@_A*o_DWJA$$rU*dEGGmug zktx@j2n@1xoC$Gzah$I#RC7@bjTFWDyc}pOgCevotMkt1IW>!AcG}KyRdk{&a_^W%B%@k%C06nFo4O~ohD8s4ZU>- z5V;3T?od`hChm2PHPN>6^!KvG3&c9@>FXDlqQslrkaBqGjw6OBLdA+J*~|R@kpIo{ ztsv$4t+5Ej0#HQiGnsNS7S}wgqEtvLuzWd7&k&!Ba@Ct-mby{T@C>VY!^0y4S`h&_ zPMR7V7?S6e%jjGSNH!!0WM4vK3&8<_LN2#X%6BY|Re5Q;W+RBi z8mcl-4H3PGeXdxsLZ;#^AcfB#_6P`79o^ytSy`rzlNpJ)S7gynVabAadTAZ3UEc%Y zxG#q!HqE67W!F|^2L#p;s{-KuaK!KQGD&=i-TxMJR8$lFZ{Spbo3lf?KA2m6>ug_s zHi~7k;-#-74InH@Z&I{``nuS9I~|=Z^bBX{nuieQ#I$?~xlC5BPXj+gbZuIjnx)zJ z(@#Gspvo31@9E{2Uc#-n-YSVfJjnU*hd+vY?zsmKJ@hc%aQIOIpd8y|a6JCF6VTD# zDcFDK9d}{d72Dx8uh|8=@4g52*lSPhyYIe8CQ|U4Z2{|{p%FcBn&=vC`DeE-n^)=} zI*+8KF)gmx?(TImBA%?hQ)@??5Q%dwASVKFT#1#kSU#lqIp);6ehnJaO=8(Jw>Ak# zvuiL%fXc=Gg$S3aWDqAXPQ_!Q_*jVyj|`F(l+d7BmMm7b61eepx-o@;zA_eWvy8xU z1a7f}_SR0a=u#-sx{(4YcrFZgZHe0!iWVt<+J3T$rmmE~IMT>@vtHUU!U++X3>^b~Epl{(&h^Jvo@KJF zE5|2ETl&LEM-IDmZIfIyGgq#w0b7B$tw5EYkAm>8Mr2=}#Ec`7IHTC8Y=5x9AjcMH ze{a8JoN_JZ@JK&yzWHW(j?Xyl?RcK7`QKi9jez9`&prnW7A?kS&ijP05bd(tu2T2O z&-?Cs?S*Z&*+ycXC!c((T%T65U>|zuA*|eCM{(btb=Fx@;==thIllVwPkuu76N|<$ zG^|RBI2J9>MycfUJlCZzbr79L(!FLix)v@%YdRtEIu?_iS1Y9)_wOucv4si>nh+j)K8`N(bBU}d%QcFakNxiMwSb9Y&fI9OIjsnp-CNJ?_F*GIBO=tkw8V%{D%*vag zuZIurT;o`f<8Nzk6_WVO@F3dTJJ3a+AOHAb-2S(}N?q>T-gXi`@V@t>fu7sUKp(ax zusrwNbJ0%k2{R0xeDcZY?;DV;=|c}c0)M#iCcOJS?~yq3o_p_uf8T!}w%uWST=nbU z2&n=029+EFR}r2wnF7Z_E$$VYRaxx(DVJ;O9P9FGl{$#dBf0XYmq;zOYsq3|O0ZZoh2c?Fj$P6^$&#e0 z&C|4bGU50jCr3HXu<98}z{%jrY&9MMDQD`kRl@DY_<~E)Nr`Lhk`hM-l2zL?fH_^# zb%s+W5)#@tPRrGaLJZZ-e0**hYq|$jqET}iF_+`cj_{lg69~ADhjs!4Q$OqK@(NXU zYd|$%C3~u7RDjdBNL5qtU=8kcr&7=BshFqX;Wf3PJn&$UDp_S=NMa%Y)jZtOZLicJ zvCEc0j0xn0eTbg3JOA;2xc>TUeVWBX4}F6G^|!zMZ7f^57^j|g8qOq(vP|H~14gNn zq-T_CIyo8Wu)_|+SHAL9DNVZTuDgVl=)CjJ6N{B^B)=OfX(=bi$n*R9`ow+9%uDS3 z>FMba`oOx>#YlY^HIL-UNAE{dinD_9xbN$Gi23v*o}6Rj^?&_T+-ldP{kDTiVShi%>X-1C!}I4;g*Ck$jv z2*71VTqhXgt~F%UhM9nz=7l*447RQDc37kB|#~U)sS2p&VprjsG*?&v0#7ot6vJm;>DNz2yZ{_R9r%qXirbKCNj5a zkP{aY3^V#-@MZ9G=w7k)x_0e4Np#z0n-ww${lO1@K-Xw7zVxN9VAtJt7prn;a0D&Q zZQ{1&XO!KwYd=Q4*dDLTeK46gpIx3=soO2m;kr_z$w^|Vcq3VNy5SVp za)ul+QaKrn2M(OE?S`acRq8PL-bAJJ)Rw=wCY752cv6R~u0>c+*#-@T`AA*unupq# zkSnNxL@J&V(DfX);yn%0Y8j5T^E0>g@~x4}=J3!%4`TlV_QR>Co+>3PMFL^AB-twb z&__Qky)FOmuYZ-n#OkM>LVIVYaJ#PW?UB-!Pk!=~5?^MI!pWzcg5!=mPReE2qGe88 z25ohjmAhSL5CggcEl-4#{hW<2}+b2#jcN8;c^4#2Ojyb=fQ zzYnsbLwMo2XJquwO^@#(3v@I)B1-G7d;TQ}9q)bL`w49F1QJQHNIf?!)MgT^6Ki7Q zdRfkn1nMRk7~HV1>Uf^&ioyX%olh#~DypBX*HW2O)1I5eYtx8&NeN9wG7WNXduMNP4uxE=xVkA8Wt?E8!hBUx!Z7}~M1!=euf7@=UU(tS|MYp1 z40On$2V?t{J4mK2djOVgw;ghsQDHp#f8YHd9CPgP*lO8wv3^Gehjl~lJPk718c~_jrE(R6(%2hQciz>dT4n&EC*te-o`liWpT>pjPQs55`VVxu&BX3=-?n`Kcvl-~+VbKk~i9={D^8>-dC2-n9IY1Evc7oL>? zvk+bKqaWe$!w-`T!!>JP!sVA;iSxhtHM0I9iW-n<&YGLZ0`c(p!w)Lg8Ce*A_}#U5 z%`Us)xYOTGCT0;&J^45iakd^joN>k(`0z(QgyEiUSua5#dcmj8$7^5vS{!@IsVL=2 z60=LC$tooU^u!YnODu`kgImHVfibforRW&5Tom8ZEZLe5JhBS+-uD0^WCi8cGoeEo zkyujVp{$r~dyD&V0}@QiF^ZFqFDzDHrLnZ70n(E$z90 zp{P??!Aw19SeqhtM7dz&NpTr-A5#YIi0&|>K+2^7SX2_@!t@XydDKxt5YH}Nwi>x> z&bjA)SQ3c1zLQB5IL^<579ON9p+Y7%fX5$y96!F~W8xj)>&hiu#%sVXUndYZm0q@` zlKeJ#!|1xyrCMeHqSxTt&+LpZZFfG-&OA-;>HWC$t`FgQ2G{+L!TP)2f$z{#AKCNo zkdBJae;a??<(v4(E`9jys$b&S+RYVTz=efk}2eAbidtpJCJqoW!(4gyK&`ZKgEL14q@D3a2OaK#52!6i__ov4jgds zA=vpfy9w#F=Q4mKNr}aDGEqoK7$l!FKqa=t#M0yeeuk^INCgbZ`qD00iG32da6P9m z90|$0;w$!a_mm)mkco4$3z8MKvQqsC)`10Ax>xb9nEIoX9L@O9n`fD{#@vGY?^V))+|LLa!d~LPM!u8VT@#lWpHuq z@yAHJvQM7>34G!cpFqRUQh4{f-YxWqsm8RBpL3n^#TR`Kk39ASe)yw{ammF$k;J;J zWZZfJu6&J~rL`D8pK5SaEUNgd^tvQK=i{uUW!#|WrY^54nUOoUyY~w?tCzo>j~~{I0nbQL;XZ2i$^#vp3`a{H349Z&rO3nMDmac6a)%DseF;v9{msb*TKca;uLL zh<Mo&q{Dm~O>OPC`PRQk9UL>WbkN_abQ1;(oE&0dVOJ-XEZ+(@ z-}FZzkJ)jD?eUGTeHCB);unR0ySt}fN+|jXJUIxLOvGTt64HElU|ly_I@)o=?{AcC zGCR!kPdtgOcijyIZbm%9ZJT)1pGDikPVBkQ>#*nkuY)4db#Ogd2&0d#5)1W+6OM-{ zT(W9LG6l(gWg-YZ523ZQ6*;*h#0`A5TT&TGUMZ@rQ5IXr9<BMW3!u8d;OID6UbO zUnoi&8lN-QfTxLtnvNf;NpVzw!YAgY!9@Siup)0K%PZ&R2|($R(!it;?L+>*!g6gTby7m6z z;!ai_Nh|@_%5@BOXOZ7r)nLFj*O)dF<04#eZ&_8Fx!?Z#UA4MZ=(CTUOx9JkjptXtC_J_QyyxE-=rGpvRbW~HA5Zr@Wh>OP$^ulbXUP0xRp4m=mnG=ptrZ?vaAFWA78Ua`x)%{d zNxO6PC%31fODq`K-P1cJ{lzpDk?&4PN{Jj!kL4CzQitM6=61x2kFj1A*R7}9q)k8+ zF-g9S6_tl)6slm*xyz&Zgz&3a0&*0@Q-E7&Gx{cHeT} zOUWE}%laPG`a-{Go7ze)Qv?6gMGrfnN6Wt8n`1r{kal z_LpRgGtPXclnik9mY#t@{No?DV;O-hN57VCy-dLFLm&DOIu? z;|+%$hQZ-MypE2;3v-JvQ)UqpQUaG_cifK4QgKmfjkQIsP$eEJ{W*Ou9!`uA(g2lM zq~f@`OAfDNt4v%zA6EQcuvcbHt*B{JSG7+=%0T-a9vPKbG-%KhwL?;-!b+ZdB{y>D znn0L4%_yg1SjZSyY|l5A;g(#i?^}=lkvNXqLQ)%V|yy*D(14yB9qAxz~zv2vvR!QBw4>@ zbzDq}z_p#*Z@*IFqE9~lgjk;MJ?nkw=;#t~fB6gc-G4v4>wWJ-YjX?!K-TI&rho&E*dIIZzBkD1M1E)xaT=Xp z{J)o?W6=Vs@r*?+sY(6DSHFQhci$iHe%}WPD_w~{z5kq#;*uXaBEYMx6wq9~7KaMf>rgOz*jC84?D-gS~-G(4Jzcn4`PP~d)sUPS5? zONEkHe9?%?g4vR_qOLT!j*x|{T6kGp@EBs-PrEyz+<)bwN2d|yo+BuGdF7I1+CtB& zaeG$8w-RMqdy?jF8_{@D5_h;8kL__{5A8J+kunnA<2Fkd;OVEH#On1f4Q2?uxs-;t z%gHs|0fqoHByqwLBFPBy#SA>Ie)4k4`l4elAPdW}ITuWo=+L&g$uk3Oh-n#1WxtNo zF!k`d4E78(rd&s2ogo$HRPD`Fxssfx@5mLBNE$Sk#M&Di8I}^9La88tCDva^mjb0N z$<9?Z!}M&FOX$xG(0N2LlFi|{=T_s8*B^>ced5z-ZR?P@G$%T70uj?!Mq^1C$S|N9 zdOo&BWzgm-A`Nv9DmA;|NTqbCSjty!MOD-Jx@;bCh31k)%A#0-%;Bu)+3}k#J_qM_ zG~mTNL1J_nQlsC)UE?fv<0B{I#wxcje?JLbJhC1q!M85e5{tz#&_9fp1q+eM74eO4 ze_KikdiwkEr(155k`{K8u72S;G-ez>koZ1bIVB`C%e27jg2_x+;ectU#`auzrPx5 z);@;QPCFG%t&1?)^D_Q?)8DXeZ7)Vi*)7>>G1KdylpCe}G^+yo;XK+}xv!|HzYGgv z$}6G)#SdEcq;B}DDqV9PFWqI7j*aOdQva&w=A=FZ)5INaHm2z_E?^D~gu^8PPT`2QV;gz> zwbTK0%ZQ=<)Fo!tMB#-wATt8d7CVYm>btmX@2!w3KZ+$9>}M>rva9>ldTyo3~iR(4NBINanBv}fPq?CX703_x4 zsvN?e1Fqb;AY7XnG*qQD!}K1dzZZ73DORfP9+b8v5cNZh!BithtUb2>q<^QSKv3#e z9kwu~N>dVt!cpaxw!`$@4oR{X+h~rZEjG(h-eh*fO?uvkpC92wG@RQ zi)*Q5CARDZglSu)k^)!BBjVVkZ@H>vIN7SDsRj8=UJ{4e(j9o~Ti=Sfl|acUDF7wO z=W?>FDIby!HbO_aY41;6Hn+^(8#)6JJrGNH*jpaOzw^MsxF4&q6_7j>zdJx>*$xbj zjdZ5cAH{xnRI+yW3(WsFS+9Ghjsn^b!ez^Wpa1LAxOGOS^2(Pz_c;hrvIH|jL&)Vu zgwkx3ED?^swX}4i$PJ8(4jP)<$jaH?{~z zV+6=ylnG!vmvrLT(@*4vrOGraji4c&@N4jxT5U8_q~l3J_3{e#-P9xt(`niDDiT-X zv&se)u%K(RsIy(V@4UQrJq^@XOt7XUqyy|?4tXZS*7Du3465>v8>{QsF2~$0$yzO` zPAvR4XV_XHq2LqiQUG3Ax|WW8T7C>v^)W3miMs|w2_ajKPyA#_lCvr)VWN7)oeRG? zH;a`0cv(qsW1eD;V>0_vYkQktT4a*6*p*$(RCEr5XsIxFm2O>LSuz6y1F{ zM0|aZo$&ZG*8q+Gf#T@RIOcv+p0WVv?aeNr%37__eq3_jr6{(Ygb4k<=bqQ$H}O&2 z_3#5I?Q{&@NxHnneW4DZlZX{fO6w~`5=e5}E1J5Y5*iwsQQ){xzKkXsy^qr9Jx!p> z3@zLQnaL0040MT@xayi)yO13jC8bnAGM-Xo@Ts&YxM)0$HLKUtNWXywKCR3SC|tUn z$P`J0kCSmme{x2SeQN=XM> zlLU$$yL1WRIEgC}j;q9{vMSAFD^~_OC3d$evU&%Kp-9pGd9tpmD|Lm8Uk!E?4PbC8 zZe?{qDv?uL+_e?y!`UZSk$(dtnR4v z$CdbLLS-~cqx57_+`y`7_S|*<)nyv8Ei;aZ9=`2qSTgzxoW>MG-Twtu&~hR! z-1oiMmAC3Xf)fV9D8uS!4>1ki~O%l>#Z@(Sbok!X+$Ox)|L( z89ELwB^agyE0QrAg_9o=^_XnqRIx0YVw`MdOI9$`tF^Q)pyP57i>B##`5~ED(aocG zXp@L>+XjW1hAd$PiePbPl6jt_R+J$_qNiMMsk3G!VMZ>mE~$~sXGP0rnfeoH;O+V# z$^cZ>F;p(45$ZczEh`B^o-Xxaa;BJMhxx~<#L{IuT*_Q212RMkD&}bmd3}(~AXrDM zX9!DEj0R?fY(W~uvn9NI`Ent#AE7~AW2#wSC^g}jX?uG+a)qpHn_bd%c?HQ9ZjCsZ z%os#(edM@ttj25b*?(SBGw%U>=iZam*Y4xStp~mSv6Jg{qSFvoPGK6EGxsOg!ZCny zvJW>A=Khy#8E`j>#-;`gk7SWZ#Zf4EDg)Buo}zKYQ&9pwh_xCgFlH5-NT%3`LEk_x z@&vGrWQ9g!O_I@=YKV%G<%Y=2$I3O3s~-LrmMm$OwqRTz8Baunqb?+rcP?@xYdFUd zkr+4fj%jw7D4H5O2(T?=GxS?T)6V&JluDv;U*+JbL=hC&e#wjFm)i(n(WP44$%)hs zUheLPfg@X)dzw-~#VWa^gR^jp+;PTOh3t>8%DQ2@2G$TX+mhNNgQu;Ngevu{mAY2f z4Uju{W51h@YxbBzR#km#N`q`o;1Duas;6SEgoRR|%Z{If;W{NzGTh+0p&><Bw>vX+l>SE9l??5Ebv@sDv^80~Pb|T;v|icoA*v5f z{okuDEn$OEN@VQHAc3g^qhyJ)dzQ;)irF#^!s1BB8!Hz{1A924R2W;~{QUE?&n|3t zhOB*cnF})afioy|5S>RNmINs|rO4DgCi*VvQFuJ2+`YV9u24jjJBhHC)X!v|<3)y6rjlx|K*auLV6T$}pNCMKy-L&0_ExMN$YFIau&^D{_tYcs^ejUfq>hd2 zM){v9Pcg?V)|+cd{iHA(u>~BqhD!Wua!UL0af*(wX}p{QCrFq z*IRk!Vyl%bCQAA6~AGF zr@{eq*|{)>53Me>!u>zl5}D3a(bdgxN}4GYB}+6{5?3s@U<*e)WV3^0SvrWY^$7-Z zXIyq6cF9V7jx#?=sppGj0Z=ZjfhHuV5WsoT0_BpLCg4thQ2Vzg6z-I6nkI;tMNJODoZ-rWK_)vne-VE){Z!Ml6YMk{yeDc0k<2(TJ=M|A1?MEcy zAQ9tvWwAo5`fd8wqash>tX~Gva>+tI$NeGG2=P2Cq`ZH=_2Z!e-gRNAfQ=!{s~%X0 zx50yS=qb>B;^d;ByUW(eLE;A1!NDNFgso5wplX*bds?}i#a0C<27EVk>OTX4T3=h* z$Qc*$)L=KB(v(D`UuJnS`CGAs8H#Q@@T*@Pv z;N+nkZL5InNH3aOVu&#rj9XC5LV=_aWr2pYvUjCVC|5BQ@~&{p#-bdHjpwrH(Q}mlpWXKTaX*J+9{&y3F|;Qz9hd#)Y_X+30L;X(wfF$zq&+Y1=A6#`RsgCK)AIH~Q)pE0E1p7WJXSDj3^{gDfB3TeflV;kc{|bXt8Ep-!#*#a^ zNE4(`Sg)mrB3#R9T;!haz!HodnuH@W@bWFW*-;BKjmn#&^0SC_Jk|C)*#y~*RBO75 z)HAzZ8KU%n|4h!|EZw>#I*-H-C~H%%$P#pARi+W$2}G4Rn8JOINlNqKa8xMY*rHME z>!cD(HN`F#N{B{03=FPALnA4!NCBnd2%`MRSRn$~Fda{V)`?3di;Wx{k84VE2-#_@ zT~|OT(ur6!g-oU-%tfsHxVf~rBcY*QNa%w}O-0NFMaYAQT)`2y61Ugl8b+p*Qv(1+ zg9pRrg9-`3Y`GM9VByfdOIA!eqD0-IWJF7GkrhUa1~(ZuiO#Mrboce+*>xrCxga9f zHbS5hAxm;J=b$y+hO)(sRkm>FhQjLp=kj?WZinWw<@4e?QRdDyAZ&Rv8wd!Yf=M<4 z6p2G{s^|0mxwf|Kl!bI5%)LKtIv(A)osY$F*e0fDwd5fcYtj&^pAA>V)`y3g#G^s( zkGOrggldMzUYFUCsa&yBy(g^e__?sGuqNl2yZ5sWqVq_+z=ISGt7gMK&6>%!)PJj_ z5>kk^E2Idl7A>vaOv@-QZdFxwnC>q{p9WIgQK5-*9aonr=xoq2qsv;GWDblzC(9(Y0%&3R zQN&r^y>jf@Y{7%+`qZGqbC@3%Xl`mkcmEIuGX)g96k=AzmC5&*S*~2ZZ{pT<1vHsB z!dRyKx5}zju}e!bcb!?Q_cZmX{#4I*rI23jUlHa9rXhrA@zmX$h)&LautRdAn3mN6h|mgN>! z!8no+u$CxFr|b$-O~}@6KA#)Z5FtB`r1C5%Zn$L8Z? zhbCZ^6zh^auWpUwH<)$o)k|DvLsTc6nG1VzCX=c7jhV%YJwUeQYBsRB3!`-qoktRM z;hKlgOl#e_j%#9+lI9`Sh3goXV;Ewk~%>gTPj)^cqSt@Bq zGH>b9FX?QT(iU#c?b%yFr3q|L{+y3CGDH4t&#$p^sP#%?m1ik^|%B|2QIUI)>-%%(8Gwh{9X zj*W#H_hLjhJ@y1ZB|ZvWux{xF%EBxJsQ1A^$WqoT1LI((8{w#fL@GwV=cHX)B9bI) z)Ds2f()MhtK-&)~xU(XXiCZqlP%ODyb;TGGmpSR0d8HD7%W1^n8w8Gr-y$Xj)6#$H!@` zAIB|AOpHnJ6)zS&JLPbN^H~OEmhV}qJ;!=>?#2sykS3F}HN45{e+gT)Cw9Tt~%QLm^vt{}`tjzFreL zh3I>1RouF&+er~ix}pN2Yq|$COD_Bvw<26{#j2A&qrN*|Sa~Z9LR(mjCF=JWwG7*m z$`qI82(As&$lD6Kw#T6|tjosB#L5Cgq);gM--8cf(3NXG@p#lPYvB>T zYJp|>EH((l#8d_^FIy%s%p#i`!h!`MNkA%aSxcmW4A2Bhqruc6?x6${@n#fDo+LM!c41CgSr&C>nGF-wOn|=`Mk$?W#I4xq@3tf--;^zwQx#~?pf;j-sLgw+)1`wf5tXW zHr5iI3WTQu#o+Ge`n{aHHga9YiedQSOiQu?8N~Qgc8UaAc>=tgOiN`3Th|9q4$@1n zMptEM+FAj{VzgAbND8Zfc#ITRIg4DDn|4RY;$&bPqGc2qd)%Ki64%7g7K-JP0C_0H zJwqK73!Y@BcTms|l*7O{+Nuj)L;e9Wni1Ga|xZDU{X>4=a`=wt>{ z62!viY`#l|tUewyK;Ykfx8z2M8%(5uNh+$;&vJY`m5if-zIQb@Nr_AMu=2RGYaQZM z$V;DBzUKT~n1tNmV9SWH<|>1%%_p^-zLEf?kAbfz4<5O3e8rt>sX)GE`PZHA7k@V) zkMS(j@y@$0<4f@R&Eylj*5iGq5`G5w-b+7XeUIm=)IszWCSxBqcii6@hl)i}xriq? zd$&YDI7)9%939RED&Yq>;DKSK z%OB1aV8vV8)x~80nonKoGF!6c-iakMq zbsk*5S{Lsa5Y^{kyaC1wz#q0ojfX%68-efU@4Cz{nah@FJtq1Jlko!aLEx#>hN^fI z}HTmSzt0GPb{C1%6??`pjXM9l&oC(tt@q?QS|lqp`(2TviUNii6lzJ zU}=TPW(it8wHDA=r8ZHgky_W^rVz_3uN ztA3Ll@e%%k&^ezy9VcGbX9{wk~bWRs;{7A7s_ zYUgLePyqUytjQawTcb0VDZK=UO$O}fjk{SoGjQBvbh4% zsTLHt*2T9%wIvkThLDB_Uy3UCVZ{ort$nQ>3~VY5Y=5(be9!ZtWj6jRF$v9zh4j=5~v z%yk)4lU_6b)h2Ziou?AaK&&09)s{0TgGue#Nn zIo|PHx|tjGvoTZK`BU0SNGqZM7JX*63G1CyB-S-Oc z9GByIWl0j_eROp+3(>`z?jD+MhceyUvP~bd*2;80Ee)P9Q$9bgSe0F)S9difO80i#E%dq`d6-Bp#9s=IUkvx=wMT60ldR!rxe_wdlwDKHK{< zoXT@m>LB_Gl3@0m>w4o_aB4XnA0uU)&5fW`&LQ0xC(AM~-?_t!TecN3f-2dED0Rz) zX~4~oPG9d3EyEnSTtlj|Z-rIKioo_Ya4m=`KOuuaHPO7K_TibjQdjzpx^8tg?&fgo zC`;5)?!+-5>P!xzvL4hj8v~*y=4Yu|+%i)v>XIeihd{lfK(w=?L5^qbx^4j-76umv zStrcyTuVw_Y+WlXIj*j@G{Utc@|x7LabPa;uFM%bUy2<{8M~;NX@%gc(U~ z4AWST#-+$^tH$O^)9TtpA!EV$B^Tv{bV6Ve5^_R0UN*|Ln~{*P-FQwOeFHDi{2V$L zq)3U5Vq~;O>O$AAOQXBTkv3*^sY_kz5)`KOYj5vBOG~St$TgnlXr{vYO$J9LkD$^ms{mC&Q?(ZpmJ~cmXLxL*^J&Ap~ zUXeZ}IBuS_PL}2tkxV%Vg&jn~oT2NfxF7@i~U6n8<9Z+<<(ie3|oR% z$_pY5;3JO@dV$~lF@RNBKPc06(oJXR;x9Rk5U!^arl3h1CTd+X_n(X{FFd$jv0{Zh zL;d}I=;~T9yE~XiG@x}5ok!Bv&MkqIg`o(ZZJhwbN-QMtLseN~W6kg|q{*_xqn=9k@ifCxcegDTsFDfPm}f?swe)c&Q+Se;bYlrj8(pi9!2nA2 z_Am)H&OeptpQAQ2%_Z}VD9>1>deje8V$h!FgJ4KJ7V3VuhJ0S{L$NFcthYcSTE&|1 zHwix*xsnDR_$^?0$TEr=QkBzGZ?6`Mrz^8{7Y*xC@SC~Tm8)5o=}K2u7an}@L3DO@ zZQ`WAI*8U~79^RpRRRm=1zBA z2Dx-Vz}c1^mYKDOOIUbG2GD3kFI!Te z$?QE0Y^J<}w!whLfXD+d&odUOl46nD@l<#6FwG1&fuxWx(E3s7wqocec-zd`YslmI zyQ>u+uN&6;uegghUMbFe3lqdbHzdkXmoc(wEz!AqW9lF}pQN19ZoUvArnng)l~CeA zTb62CE@uMnw2=SZSQ@rxVw$!pthZdv%{u-1IsY-Ym21pUomZl7H4lER`M5DsyXmR} z!sH3M!S&}Tn2x!6e#ldK5{l&_qFlnnss1hj7RSixK7=A+S=lKR6jdS2DXIvdP&fjT z*_$t_?kHmu#5~_cFIHr!DDhS1L}nLnEEX5b(s3=qY?a6+ZTieX3(cS-`zRJFw0yj+ zNHpTRc*na%8>}jW*;X4OHI5SVr}ChiXlY%xq|6sWj5>(UBe9W|=EPz{mI?H9^J1|s zwaZO4;v=;X4Q97lns`-_sInDmNj%KfRsdmz@)HFAmbU09m&yvnxD6PS4M>KOCA~&DGq+O0p_Vt` z%kzr_y0wjyJKtzkMG}J!FwV`LN+!6N=89C6>1>FY z%;La4OeXT?5HIk&kN5YhS(wR@+0PP*7z%})^v0d5Qtt^gkK}^$K937Oe<9xU_W#6F zk3R=H*~H|kc;jJ5;OVEIMc?X|ux#0KG^LwS%ta9kHKU_-Iog_*&~zEvTb3Z(Gm1!h z0sYQfOkiXvhqs^lpZL|Uu7&?N)V##1@LA_p0L(x$zp^sq*q2TsQ5nI;oeZr3JjJ!E z*X3n7o3yMg8x~s!pen3OCgamIg|03*@ROqg^Zk!C_Tzazo>%4twljaEHlSM(aap@= zWnkgEQ@u(&++WvRYe+I#L<5~zwFJWK){VxZ(uAGewQ9aX7`8+?7RuHqFBj2`uY<>A z*keqxnu(!$ntzxV6%e&%FLpMc?qaP>92cH%&*!EUd7iwokXA^z^JpM@JjVP6_#32^W6)LLB<$v&hmY30MiSw+2cP9m`Uk zKrCIWs>M^~6wuk9ygpkvV$H;&GQY^=;Kqd*$l~xZ)ORHs-c~O#IPw%hEQ=75B2)w=F$8!!nOM&2ZvU*b2$I)r1YRq!g{GuGG{bN57d}xMP^2Fu$J9 zO)X|1VdziiveZFz9?A2opOu=dr=NaWEP~;Ye!Ts(Q_$W020Z!XleqHA%aKgR@#IsF z;!B_Z0TLY@;_7?x(MR#e8-EWJir90HebCjp5ZOW&t!>Sc5YpYf4okOQhFms-r(X7a zs{+22sD!Nxwjd)RWr?^t{$-YB;RimX6HQc%j9re(6=>Xus`y{g)+ykv_R^~48N2G` z34&qpol<(otB%D6#3aY~%g+N}S?&0s)-SDXeVr&aKHc3!TV{|;u-jL=d4n-biJj_u zBQaIF2TXDwVh&Tf_YAnjVnN)sd^}vz!uK>5Q_lmF!LyV~McG$n+tPD3JxJvNkK$qF65+?=r4D?TTeH&+AOI@mDWbe=ZOp1`8jZ%P;^Hb3T$QlI z0`;hT5FFED;0*$UAOGF}1f2MGc;kHAc-c%5Q6Dsed#r%!mVOAgyad}gn!)y5lsbsc zBRS~c!hzf&KT{7tPJhC^<#s zayi_8|NZc|?b&b%(T;W;bkKhI;upV&H=p`8apy&2alg2Q-MEtRt2JLy>JUA#Vtj?n z54hv%UXGq*ZJP20M-w`fJsZP04=o8>UWRZuB333R8ihl_!h5AO_&07Yoh?~tj_aSa zz8xYXr!nR`EET0(04$9uTCryJ+?vFZ`5;~m2%3R}NinJnD=JdC3_5Nc%3o=ak&0hfR?LibAC@nK~-IwgnhvAIubAG};Rq6SXR2e1s&Pb+1~FSweY<=Ej+l^!r&IqQU8T@Bai%O-)#|XaVlH z>sE=Cu3WiNsJR||a24M4<~JhU(n97)4!i8V2ew|m6`r{7UTm|?w#uSRBxFCq(g$(B z0+LL^-%Hx9$HGdMvpsFo`w>bZ^YmkXj^LuZ!`Oc-57(cXM|(OZ3fA%zpccfE35iu| zM&DQ7Z{xk!+i0c3xb58zcIZ&YaMugK(N~59L~l65#m=3c&!SWD)Ow0T7zSL`?|*#U z!dcf@c>n7>eBxj_kICM}xfXg6bkJ6L?GKhoOsOQO1eXbBR2zr6afutSlsL9+$vq5u z0!-{u7>2ZqH_psM>c{GuW3@AJ@!ElTRhDPqxV%7|dxNgSG#8s_(+r>|{9^7Z;w>$I zdyYQ;3;gxna|cL+5(-U|2xbdN{i&Kq^3qE$Vz0gS!hZYhhg)yG6-cMC`|i8rw9`(* z;>C;ct#5q?4Gj%A{O}|2UuU0%=9U!R{FWo}jx$d~TU!%~g$yAiDY{HXTy+N?cp$F( z?KKEBrV(js#_tHASp=Z8rsIcKQNTeg2v$_=zT-?=0YI9wZq&m1To^BpSa@N;#ky=5 z+qSCppXdP|SRcWQgAQIEhAi_`uZ!o0BK~<9ckaUbKrJ7wj#>>D9${Z0OaWqQz$Ej+Rw_}r})y6JRz{a-)i;TI1;K6k7( zTL=J=r9V~kXIW~oZ!8v0F8X5mR#>36!$a`9PAg)-vxA(s&`Cw=Tvd~9PbD2`H?D^O zRV0*q-V5yCgGw$l7O6=*GxKB$(-YUNY}-!~ncj8XPpiHut1%iOwT=;>lGw>ZqgS0lWS7+j00C55kW7?SXr5yA^$X>tQuFkacI{ z;){QXL>d?v>c^#*Un&;b`t?1Ek*H9Hm1Sd^{7neG1b(+YVy!r_*_XE0(b-<1kj5 zi9wD_<)>F2k0ntp8|WiS5{^Z6sgRm4nbcm1fHEX8Xp1wZE$QDQmVd}35d|z$1dc%&g>N7|;HWPS8Fxt}x=HKmHycAbl`E!h{ zTQ9X(k3aDk_B<4ow85%uA4sMq*L<3OmBMJ_Fkq?2=;C8Nymd$5z1LZY&`a>y!xfM+ z=svhUjPKuVW4m_X?7j17ZiwOEF9X}Q5y-Vot_V+i?bzR^dfA`swXkZPDw*7dtl}RX z>*6Q(Soqyz7T&n6hr_p1SAP5#ENHP zMf%|a=__i_>6C^#h|VMV_rF)6rR5J892`U@Q^plP{3*^j;|y%K-D_~?op+L=jH0!5 zAwK{4uOOBRVRY2NB|rW-)~s2Bk>L#T1q=WC(@XHoGtWqTvmu>CcXv1JkcDU@jF6@Z zRHX`*l&V;|8;B!GL^}4RsRdQnd9MFcOgWs@dBuGeuDIXA@@5<7IjZvqzW^@`*)sot zWx!c`DD}42Vh_77^w2|=q%)4jV`|url;DQQjZav(`XP&e*uw>fd1UoMELJ1`c-}%Q zS;Iv~xp_H;dM54b=MPx;%3m#9exHq&1aRRSJtVa^dHnZ#<6hZ7Qgg*EWfGhwqSvW0 zO-=l<^0$eN@`g-FQDvnv&2l)YhvSn{=V?_!sx>>ASKzV{ZoKhRu7*LaH$(U?&{8 zw9aGq-%s;8@SgXbgJ?32av_IsBBtuF$V_r_qi_hV?zrOx*|teSkwhVj8Et}8ZaOK2 z=0~F{Ucv6x?yQ9`|5Z`Y9k{iJyI-_$hofpv|MikOhwf3}`p2VK-lj4FIp%rX&uv-u zkmVk>B4hc5K~8kA@VccQ{(E0f+`0SG_pS!`K>We|2}Ge1g^t=D*s96HRS$CfQ*Gz9 zi-7YFcF~;R7+nZo{+liI!WSIo3V3g73DVwGjCvnQgG;K3SG&IY&A4+FFk2PIrEwG# zFKM`*d`r!%1=9H?Q#k#`EIZaKK8LmMD_ACKi8ftemG{T3faqLq2v7&nc_iCxzmr&y z3`!idX{=kj7O92=x)yEC;ZUSn2)#(vh9d;P znL*lKk*vuAm}Dl;2}fE?!U~tQ*xD88>JB2F?`^bbU7oKV@C$FVu}-%<{o@lh9_a>l z>QwPb21XVxRr%pRL)fMj*l#NpZ!?zW+534o;WaLP`>-t_%JWyPQLtE+jU@n0SP$lXxa?jVdoFfx3i(qOql&z%na}Axvi2XeN&w&5y^Dl5rc3HQ=eopTx3d+hc8a4_Z4G z(!=PW=<3VTzG zaw}QHwQ*Ok^0j(|ZB-^d`TT^zy@1W70mVXX0@3W8$(E7v2Mg7U1TK!g995@14KLtp zx_|`@W9R?#MS8A_8*;pL2}%$|tC`29nVBsy(X#(MzoN5qzw^znRCB0qfN<%=M?U_k zjXi`{jX0K#T#i9Ahh(AwYkPVS4n>hlH!^;rufGRvtsPjlVq5h04I@`5!3ss>I|JY1 z#S10jBos+XypcO|#Ny3lq2}{l>|9-FGSQ&ON_XevV!&wxF%+5b~*)w)Smg=wAd!PKc0C2)l$LJu339Bz5UbU`I#F#|Ab!v*FG}N z(a;9jt5GOVb=*pJ>I8OO06eq~c(i+Z>jWiD`JfcDllELgk*BSXW;6mn=t zrwLq>$mFu3Tsa`fWe??&qsbCn-J&ca-x)w{BxOJT=+7_PFmX96P_Chtc#*8eA+jcy zlePEu*IKykS#_+-S}dHptA{V#X5kxux3nuZU?q(Mq&s(cIC!~77UOi@;PIE?80i%! zIrxtqfK#rrarG(-iyI-aR*t{k^n?W_KY8y74%(8_zxEq0)#v9YNU#J)=7IkQ#jyTV zs*EZ`1|~ho3(WWTVFkD8RjnKRd+H5D%tv)^BW_>wjR}NDEpSxvp5dGxqK?6VF<2O~$zy2M-_U*t~*U_{4 z;$7qCDufHJ7s*{Jx?s(YkCt$(Qm-q~gdG zb7W20D7htxS8@_jfqu)C2?)ciNJA)=GZH@yhoiJk6oZ4qlGG{8L+p*^hTe8u5{txD zOB%xS3B#*1KZ6DRzI#{awmj9R=5i@ZV}Lr97dh_`niu!5_Yz?3NcBr#>Kubs!l(XZ z<3f7Db3w;OFjhDX4bNG(oT1CLpk-|Un;0pRJ>2tRNaC`a2QntG^~QQ|$F8X_a+UI^ zO+L~ytpGS%IxDvtglZX&yy|UDcs#SCxW>E6)+E1GVx0k2q;Zy+*wv@I*jU&C@yJAg`~UGj8Hr@ORJmV6pI& zJ(OJDCSa(WS{Txe$-S5CEep#sQ9DYyiI&f2CRu*VN*zS!nYh;Urm!6U!(3pc%aJr=_x@3fU+SP+y^J~csTa}^%oNznEAp&GLClp(J`(NC|vsp zS*};9mvPsH9?sZZxn!#j$*X*V!q(;oeiy>S>q&V`nv5`KY_3V92GXkjG(kX~cw<(v z?1{j4ERaupCA^6jni5~FalTEqRL#t4FZRUiTPB0KGLR?~3-VlW_WJaWRe>j$Q*}0Q z2^4VnPpg05mjGzxBK7@g0<(Lc8@mm*7&&1rSZmp?OSITi^N!usJVQPCvwPK)!w&De zUV+}3djOA-#mc2vW;;K*hu$q3puS;+`a2a-RIR{Qj2ERY(R$S4dBW(;_mmU%p#C{8+7T=tX6G;DEWi}IXy>DEDX9*OO3!0^{D zD-gy1XYW1W z+Ux%=Yp=b#4qBY?8Za451`87;BtR&EgmNBD?%Y-X`<+|2>UMSaOiw_}h(7w2x~ICr zty@*+JNcMg$}PwRoTZth?2F;&G`b2<;n{ut5YclxB~!R$cIodbR}udm)(Vbz?}KN4 zlj~*hk~cnsRxC8=hLh!Acdqx=V@ZokeEdzB6RHSI5a~55-)Ga;pD^fm0=#efy-8nq zKxzaiDOjiCr-sA%^A3?aazjE08*ep(LD5xJ{=;2Ua*Hc~X4!b(O6ugGr&cp{l$^*L zZIRnSMHJzyqb8=)DF)JNhVkrnqL=qdjqm)KME~y+Pa~YrNObmG`F&qI(F1GCn|l$g z_Q})ObK?G<2uth8hfb7QCJ4_TN>VBi1p!FE`6RK`2K2wrlL32q?UhG0FKCoq0$lIe zSPY_|DPo+jd|rMB2%`q|zb%tF*pQ){V^vH9Rj?eWDeeP6)dI>nWkFHlOlhI|HhK%b zGDnj+>d1MfkeJIt4Mb}+oaBLFU!O`j!J~%zo2F-YHou5;ZlpPn1`CY23`GglX^1hqDB%`u&?&F zk84q&;&>#Y0X3Q~*{l+?bdAVWjjrTdRpfB%@@Mi2>H7xe?u*|d(TKZ!Uy}e6DW0cI zLLmI+Q$%M@C9b;lR|3TDcvb#>$zlnNX(6oLx3(DAbOI2c_;1DQzAnJ{FV2w1{`uOz zFZ=EdaslCeL21mD0%(7+PHMRi+$d{NU-h%{`{TJ*mAqiiWw1WznR6#K^nL#RsMLg8 zx{dOC%C1d8R|DlvKwAG{t518l#my-gd~r-`q`j-fREy3XMWjk#N$UF(+Zya6gRhgg zaWX>}e38nutDa*^9p61uRm}Gs0bY-P!uvZ{knNO^YJ!MIymSl4NuN$uyvV0alG3^g z0^tua-1BEipAbx5Cr+@1HfeCZ+w*5gNggljg|no&4N<^n&ye|{IMQFAk55nkQZF`M zz|Ws!)71-Yde3y?;G(9eP2XQuV2uFBFUs9~$KO+Z0R01Mkp}N*Vut3+HY)F0dW!zG zt$6;v_w@k1%mx*mp`_i6O7ozZZyn;QTKT-goNdZxGP3PjAXseL_R%NqD*hV*Jey|9 zh}dsmPISv7;+bufzdb9ozwT7ULk*e`eDwcaDM7DC2$WxZK&EctUHSK`iRO=$0xNu; zUgLyfQs&>`Gv^MBbS;!SKRJIZEi~`m8%h1;k?PyZbgcnc;f^xZqH{+TRS%+Uwq?c| zAWMkOp-_Y!rcUz?N$#gpiCrZ(`!yV$`e3#pCwRdnahQ-$2A3*RZ<#=aF@jnB%az3^ z_^Yv{$39`ATvSX&|;^Ru7?mou_1E%zRbCb+$P$lS!69xfT}+GCKPeW ztFKyA?>jE(mZh3GcNEb;G*QzEFgBW~Yg;fW5{xh~nr;yV9Iqf&L0iqq(r|`jQBXX* z93OXict0k(lAl!&OqtF4bI2K`-@Vuqt%oI5P-2LRgHOma2ip1oobMLt40&*c=!Z_# zoK%;F@Oz@(Gh7xKp@G7bn@MMQeL9`?Tp3l;4~6#j z)e9x~T`DxVyM-pVdRuw(rJ}7zly$@-xE5fMxqp)kcq>OcI%LG{Z(fx-rTRIL60_`f zqQ^feeWeKE+j6-4asKKd8I`VR*?gjNX9$7dX`*&bd)_pNTvd=)3)*|f{Q1wiDL3TQ z*j9hb?W^^P7H_Yah$7x&>&Ykp7I~dX|CV#M7O_BjO%yB+du<_1qeZNl~Q03{CCP^8JzUeo@&lqS$OPABlY~DCd>1v zmd221+0wXWIc@sLF?QMIKLZXl8BU;~ZK!yUkw-NU9YtgtJ||`$p9}$p%q2xKX~E9( z-)1N%*i3=kRzn8L2SzBDO;ai(BYgTd+f@3ojH$7hr^%11n3{r9Ps3EYWRZSi=-@jL zOz||ElD(jv8>U-qzZx^v(W6rFz|%)nWKppfa>NXMILK9rsN^xzKmF?mN)K<5APV1T zGAaH210h8DUNl<(@M{u4zp+$&zK7^J0ixIbqW_YDNR|28#Y87hMl*S$|N98h%J-q5 ziTqs$Qut2Mgh3A+Qs!KYL)R9c5*qcltMOtF(EtD-07*naR2Y9r+*WxR)Fo(^p2lf& zzB_!&)Np~)nI3V>8i>|t*r+-n)tL(CYAGKD z9!6KF*R`+!mkt~nm0{NdQE*E>jSB1g{v0xu_=C%_=IYPp73?3vkjn0E_`u^>fy+MT z*HD%MSy%#p!(a=$b$gZ@%{|J9!f&2+o~*Gb+O5fwcDUy6@~ zz#;(a4ZkI~irB!(c4H9yquB=f7mIDUD9p%&t6FsKyMR#UuRmu#w>=v=iXM|Rn2-j&4VpZL zQEUb8=YXXd9J+_IR2wa}0{Hdyx05QJ=j{M=zkV(Mjz*$oOa()`{#{xVgkY7Ig33cM zze0n3c@NQjnJ+2QO6iuY%kTDx^=X zuKN3|PSW(nV2ZENP(r#^EL+xewk1$<0<8s2IpE5w7J1dn)H{OiQkI=1ZZ2Pda5Qpx zQ!P687$p?bX`;L zvsgL)>*(mE!*Le>X!~*(c-9Hqi6Sp4jaXuO9QbUcv;yiW~2%4xc1ZQZD<1*Nsi+`5E zMPDSY+Eg&T)(h_4ka(2ai-5nfh^!hD-_|;j4(py|6v}t%^UZ zZ4{8!K(ucf2rE_v0ZRS93S70n_26JyOKxxs_5;K-=4;X%`>}`kL71SFd=W zhLjg9pwk4n&L3BL3>9Vj&8Ort{G@6|y<@nVQIBcg($(5EKJkAVqwJkfLM>0j41K1&~(RHs>9n8i*dl zq(D^fn4tbHiqdt|o}q#$j`R4FPf>GoGo7;Jq<*(Qe7KEXUbl|UKleQpiA4I{9_b4Y zJp2fqcFHLD1<4jep4GpA4Yn6VShwC$~J)YRBOW5$fpc)k3x zYxiDyeZxk&!ir8h-##R+bNlukJZ^GKSbO*Gh>4*O6|p)doPhe2#j1 zlRUmXd-l>vC!RpfV`LTatYAc2-guL;xh&;jHWN%I5RgnuZ$+JmCusJpnZC{$^7j{C zT0=cOy>#IP=M|4%!y+WgKlI3>G=17MI$^O)wB5IFKdo82jxM_3T#6?WeF_(wHow95 z?!*%o^|6(I_WJij%f<*6U#}7dUCqY%Vh*9z-Q5nzz1fG^(@%OSze)tK^;0FS5RtUi zMbi!+DGN;T-^Jwbkz26agwlwIJ4l8d7SFtp6pRR)ccIF2^)RQbC+<>RJi)$Gtml9t zlIC6Zt)gUUroiUhAd1iDlN1QnK(t2h5UJ`RiWFe#AgaEDSq_B&K$9j;q%|+ErG*RT zdj-HN(3-Vt`P}^hXfm0kH{RSzGiOYvbSf>bDbLsS^fS-WoH@q{KrK^q5HDn)y73%t zJ51|e-@riA+0{kQKD&x8x%eWneT3G%@*2&bH-|yg&r2pw7%z^!j)Bw<5R&D~J$eO5 z?-iiq240BIEpNU_^>uZ$bJuQ~F?|{>Iq^i^cIU2L4E*RD3joOF^3>SSK(l7fpe6yH z-96m`M91*algSi4|Kf{u{QUV8ESW=Zw3t8EOaq1hzkRg--~sL0+iCZnJ=D-pFBp{s zSwH9ogCUwXcb>QhZ_@E%9#PJ1&C9RQxN&1C7E5qGGOh^$J^ypp-PGMByR+9f)X{Y- zmeVV*t>>Vht#57T^)seTr6nhw=#HVgyIU|!O9(5P^R7==w%r+)io9gxQvUHWhi%oN zV30U^?av3d-?2e`Sp!OebF2Iy)`UbrrJTU7igL6KH_Mi z2Cs)k3Vjn@sjwc!VUQjZi-_YCdIgw{%*b3&4MdMoQl?sfrVgUzD*f25S#02?wKi_r zL{B{Vw0A7$^Cv5Bch@0+?DEUrOXJ42vZk6AS_w+D0a(Viw$feq-0N-&hI;y`r_cfc z44|}Nz7IU~2m{BQO0MYT|$J2x2x6{P-Cp((&K*m!}n+4dU1Q>XI4}$_IWMt=) zPd!Voy}pr)W9tMB@sF#X_g09xyyCK@0%Rx9gF=IAYinar{Q0kbB{cLU++_sXC6?&| zPyp^KMWCU+fv#D$+&K=>!+-b#&73)t=FXWzsu)C9cMpRe2!OU=!2*g3;Dcrwk44yI zhJAPL+(|7$3$IJmxkKBud5gHd3{9LkUd(k510lYH@;OvzCW-;rZtZpr0wupP=PeUd7{l?1?9ZCclHn_1;S_;eBv##*LHqNlY=c z;Jfd+pEc~p#f|->KRLl#t}j@A(-kM=_o`=K7ZPhUP^x4N@NXl@vh%XA3*;KkJI@I) zwHZX&7$82mOC!v;Lf>qti^@L7j;|D@N#)-*gRfP<5~L8yesUL>W4P>Jjoukjz5A5; zQSTtH{6wnwGeATAj_)A72sFN@QYosd1G7C)da^zUno>(kGhKG+r4_dUFG~nU4wL7( z=bXbDFBmMe8a8qID3Opp++LwU{Z42$Gp0`$`<*;6l;Q4FTaXj6`Bry zLjYB^a+053QZ$}o}o1F|l>;9OpG`ky=R5n9@Du9;Jjj72i& z+N+n*_8mLul~-SIF2ENtu+ zAPwQ5p+P1Bju9H$d&GR`v|+;rdj9zr#Q4sq1@q?8p~HvivB#gJv(Gw1XwvhGSR#an z<7UsI-`;r_YlJ5(TFk${x_&(!7Wh4XAC!rwyV)lsCpGXXvZmF34T*BIT*+=kzSM|)hHh6Ew&4y;9n-2b6E&-tVX6m zZi)<9u!6{J(ohH%q*`E6jfR>0Qnnr-q>2QnK7NXHrlOkTs?uCwlnRh5Csu2rFWN@X z)|#3csTu+UUc2rU_K}@))|vF?)@`gEec*l9mTU`u;q@Q-AYVhEodBTu^X8Tu1Hkvz4zFW# zPj3(VMpdm(m_m=6J(EpZ(6Y9@^_I{?k5E@v7yEycLi-F0(12E+6Ttu4>#wtxz3})2 zG)-uw)22@4`|{+|&+v6ai<=;X1qcrF=gt)x`aCa^QKLnR7I6UCGfzLwf&s=kbLI>N zP`-9&JIk2_n6Hr<0&Vo}d!;3yM|_7c($o6@opt6JG`6Kx%*msC9d+Wq!ITcVbm_$c zuwNAOei56yVakR81_2H8_uBf6Y{G_x;J8^cdEOru$9ZGxTlB&Ad-oX{_;uH=pch_v zk@S=m1OvfrZ3Qm`T?_%SqgNGhC1| zajC!cPV-m?bE2nt`2#rIZ++Get%l$~eCCg<7@#(7*+TpF9T3`1F9QsZTY%4O0cy}} zpn<)(dNl{(Kzj`ZW%KYI0>rQsVE$~V7mWFR{rX?kb?7NQsdP$cdIdJu!Yqn_on5Erm2aJzv42w?|}zt^_rIjz@1Jr zXUr@)|Fmh-=-O+pp?mJTmo@T>gjVY3h3)Mfe0~To@E5~Zyhs2zX!9FyGWecx+Nl(a zN^1c8l#_+#IB(7z)|B7ex|Jg>+2ma`H_FlxqzU84QDh8V zcZ<0_fvpg6G4JJ~mmzTc@;7&|MFRJB|A7Pa`+M%=alHS!YdBEpkw+in;I)e`yrAg( zMd`A({8EF_fzlwH$O1IEv^RX09AK-UMRR@F{yN`=wvLK^Ge`$bYedUJH4q)8&?Li13*hP>^uWMRJ$VVWO`p!usmjc# z2uyw5D>571Uz$&!m*Vkz8a#ZJVEQVsY3|%PtnsxSX{WJc#|n^{AhgaMCF6pR@nk13 zX6x4NGg#ppT{QWZQHh&0a1CqFt0)o2`9pI-~A8Lb=NGXn3m!M z!u6hY#_8;n2K`BBf)`zQz5vcB^@`^N0ZjU=A&MIF)FA*^wHnjUsR+**0QS`TwJ$^uN%JZSgd$l@&*YY4u?314C8^20dw#y0l=+7GsY?LT+E(5 zi+!tJ+>lXp4F9~;s5)xwKS;hT8D@cy#R3^!KI#DnApK@7Kaf&|zw=W2#P%at3k3}w zMA!eEzO+(m5xHa+h%ru>FoAunI4=5JZrZe&T3T9Iu$eA2 z)m^*x2rX-(&_2h~`>ws3_k*T)_wVnc3(h;2>gp5x9rqAXvnMWIT#{0Q^p-V3Ylo(I z^|GsY-X3`HA^M-Yeoybeb_D||Oz1F$&Ym@c_W_933r!yDw{0s|8*cCb1Wogz3ofAT zJ9n@qI(BR;uYdE+t#r=WXUb^jaPpua3ZVq1Z+(bm^BCFk zAWw3>kU5?%etc?FhEAH)*FD$EBNUTGy;MLCV+PNl5Ec;;RG!~U^6?B?7lLGsUHM{< zY%LTtU=UsZ^DoiLbxFb0h#DH=0w=#q-~H}K#V?y_<=;L>XW#m9npbYeMFLQ7UQ*_V zee}@Z{$QZPs1bSEmTW#8a6y!NDLMd(zriGB&`pl&>+6fsT(A#*4{>lud7o%sv}^Zn z&cm#h;Cp=d(Z?7}=FIk@ZL`@7t$+P>)?mOekzS$`OnlolUnB@VI@?L6S7WX;9>2+3 z*GQ4#fk2yLzw*EXQ&ixSJ3aw~M}$@jZ8;nYv)MGA%5bFZOKa9}-sOv{*DxRg==7o( z09K3<0Z7SIl0g@#Ita%3z;)LYT_d7>A9~~ud|zSCZLF7_&o8@lDVxr-xja{nMGe`U zcrIWKXcvMB2>1WWD=z1Bn%7_7Sk-k}W&1l82LnNKUcX@jYuxaco_yj-?se%@d4~00 z^wbKUOTqAOVf(h1KzhqLH4v?azIJh6&%ELL^hjC3+;^y79^%t34gYWIce~sMBZ>wL zqKiH%K=YD^2)OszTQ8@H`^5K8-Al;^$pF@W=}Y{X?3zWN{?W};4mN8vbSei5dRhy7 zP|k2{2Zq?!>||4iK6#Z8|MpD5H9j8bVGPJEV?0yXrYQ?>%Sn z96-Ri@`}so(4j;0=;Ke6^v8tuynOl9eB%&oqlO=k#p$x8OWnVB@7YJOXpHI-^)84a z*dr8>Y(VvRG_)#8AVl+?Am$WWCH%q7O=AR*`vSpi;vl82?r!$=LX)o(&l)t&gNF{% zT~6>4Oz7?oj#dNnGR(#0srcb@+?-nJR=ez0{@Z``0;0RFC%SEwLF@Jsb!IA@?p;df z&$Q|9FS7Y_FkOo*E9wa0nuckV%R8_3rE);D#AiD4Xn1_06PDAL0jTZ@XqR^tZ?k?S zed$ZTD7!nGbBARh?@rRSDgY>$A+#a{%)}it9!M2aP}?g_6&e$?RG57w6+h_349W38 z8PYU|l!daz4&0r|wE*G#7!T4_z~CSL!=v=t`q%07(@vF4-vLtiB=z(X_yG~YyLD@^ z$x#IsDe2c6Pyf}7aNS7Xc;UsD=!6p%v2Xzj3lN$zc@hg1hS1J1j{pZXXYhUc(^){L zp0b1&eU?zz0KUCN3l|BnTtpi-ZKMYuene=eM~e1s5}M&PS1)6&?asS@&&=rZ_b%nY zA4QKo_BhW0iY}3{%2L@$pQ^9#arhJE(z-N$*oAZW}>PCS8*pTB@D39!)Z5JC!q zq?QYzh|hE110{0@^R5h9(|fp9;NlL4uf*hCY}Mre=gW!(So&b%hO@C<89|D2u1mh? z+f^8!_A>ch4(j?#v~7KS{RPfCzxNkTRawZCCs8TmhQ7KFN~eXe7Ywm5WCkoULr#VO z{zu-ZGp&f&_4e}psM0DDq<8Zd4GPzBmUEiHk z%e4ZdhQK2Oog`SOyx*)-k}>4mXaDFjIcaT(2n{fxa`Oi3OVZq4y#g4+f;lRSg)ZFq zOG;KeP9K2cPt~gI%l5R(zP8a%u6yvjPg~Wj7&MhVzyElK|N1;&t#qwwd-s#5V$DPq$!2P;1iOHIflK^r z?m>8aw=AIcLgN}B^@c+AMY{|?fD%;-rT`^elXM?UOAmfg%*i=q(N!CI3B=<0P(?EO z%Q2FNb!z$yg^xJQ5b{ zVF`vQ8h^E)&6i%LM)(3!)?4Kk?FKxlN{$HDjv{d6=n zrT)k;{6dN!K-G4hChC7Z(dvwILJKv&}Uw?@5Er`XP#p}0i7T+p0%cw=? z4w?LgNNWjpmfdC;5$l-Rb&bvMVm8|3RX}oQQnTtv`(utZsdZ1A=9QzGNbuQ zEopUfe4}J!sj(g%L_4TAWm7hj7yFFdHjM)W(HyP%*U!^^$whS9@;{@q&z?ooRPN`# zJLyNelGOQwmDKW=*VE;<-aP!HeV3CCEP8hqRe8wYWEa82RZngR z$51cpZK2_>n_4akbR^N}MbURtjoZGj^=QsRHRtMUn_{DJzzlJjMilxmO$g{xNJp%c zgk;K?0Ax$z?uexUf@p}&x#fp+PSLs?9e!~o z-F64jwYPqk7A0S#U)=V8=;^a>rkgLHMXpDsX3iZ}Qf69}AL<82fGSM2@Uf{ESNT76 z^DP2dkb{ZeR1~jm+ZDV%<(yky&C8<=F?!&JfBn!&YAeIxK|88cse-{VK&58Kp&hF) z>gzls%Stl*RO#|`A>B_1{D)7J(_F+R1=S;+G}pL+hp7p6(F{ZlcZsOVj{T)k8!|(yA^OqhZqx~|_ zkjGNYt%5PxemGM(ZKeAT3!`(w9cA#-&=2=^QWc>t#{dmLKp3*mQhw_9y{f3(W0bsW z_qmUpPiUg3K88hFyiy#6s{-82fHdnu6J-!BSZ;8g<)*?oLaU9UCDJTx7(uD!nj^>6 zf-E=;7$Z@snBk2R`5N)uI|<$R+m1x5uM zsr*qDgrqvSsB(aAvb~n4R@P|igwz+4kHM75uh1D%G3J)0j#S45OLHQ;RcI;y0oK zhl3;)g^??*jNG{48udxVZO=SX4gP~#`(zlSQ1?UzL^3n|>z-eoyiTj!% z^b;k+EVI8^atMy@)kXkLknBxUG#clAzkxsvL~Aq*R8HIMOSAGwStU$<8vP#k_jdX;jWf<;p|v42`J4 zyshL}n|uzE0lrv@SCq>XC@wNzCVj4K^s;Qkt$vo+Iv`)iLf70&t^unoCGpcKWxC^kpGH6}0B&7AGddc2i#r^b@uF z0nxI+iq>a&F`_)@iy9+5M-)^8(NRQtF$C4IrKpytT`E=T+aOw36@Aw=SmhrDprShn z+G1hdxbfp;!TK^|aZRgbiXwQbq8`~Q&B3;Q04jn|-!<48-_(ym)iJW6TK^19P$*J~ zNA?R{qtQ=C12dFBYm}3O$$Jkg0T?t;04SOw%$zaDbKAHF@Iy;~7o{{%)5#Te`iYXP zYGjPyI`lOV9Yy4og!4?WdH|8`S1RXc0*E3CSFh2j@=KL(6q@R^=~Jnry`5ft9>7UM54c$PO6j~uFj=qMsx6V=VImB=qmsvsl1FoPaoq#jnZ+8Q@u zER7xCDozw&laFDcsD>915Q-X1d~DsE+d40@XJ( za0|AikX&OisRi4J26k$}qOa(f<}s8?r70!0iwY(l5icbY$^hU<%5E7mmL^Y}O0%cW zqsil^P&gQ;e7ZpSOo18_4HS>YJ=0Mx&mBh^nwp1HFa}Y9nM|4zkr-tQ9bz2qwExgX znl!PIrDVg7kb2=|07c4~^BAESaWZ95vO6Hgeu9|yD0jHXi1{)DS;0=kK31H!lgtLp zCnKeAO@imz$Av5fLSifsn(PAgwztv5Nt3wCh2_M0b&Jo-KKCEg+1o?+{^yq|*wam8 zqfyk38Tf@4@|4=UhqBc0!2kdt07*naRCbB4{Q)Te^oY<#X3v}{2J2%bm0DOCUN2iI zyvgShoqEu`+)K-{+-3p@hQqUfMgx{bKH>0fQc(umf=lZw^%Mk;8)-xWf&LQ|w`qQx(T$vIv!kSE~yDdeNVuatPWGx?0b zfE;yaJLs)_o9Wdpt7(7x4hGavU53n1fy}%`b55GYt-s!Ub3cU=vH%1+k$`DJ>xt9_ z>AcI%rzakNoKj{tQ8Z15J9_B@*L;Xxd3hu4-m#00bRDL2Hb=e5ERSj4?1fawrJX_( zvfzZv^aQd1c$s+(2}A=z3YMCAK`=CE@R)9NoI$NmSJGzlb-|57M1C6~MBgNLd@^BN zELa~f9ba;QxAQ>?iAY6~djjPUL9`-R`X8QZ^HYo6D+)wG@_WF$hq|xd`5n)fd}rTY5cONB z{QLw33Qd#)yt-0pQyuUpiP#fx|I|Dr5V@#O$ep71Eg}DQDMK4K{XH^MO3Xx zLkCfv6bP4-JoT1B3O7SLW#3|~@W@zHrCTdUZrwNlM(1|CW zC^T4uW=xqbh7hJjix+Z1>+PF&)6N}xgyz{uv!>6MiQA^(G9;H777VZ0{t!SkUOPKtzz($;3k`K+wR{kAQ~Dly5#%Yuzc$+xz2V1BT--1C~f~YlBfov zqnIi+_+|5uVBDx4g7vvvhE1xIC!=9&UOd|tYg56XL3{Teq?VQz!h;_QMYwZ9FdUBe41iCgoqyJCPdgQOEwB_7sxV&wrpg?+)61t$ZbYt{ZB9h zHh&8(-UxtE6r3Om8HFg17nJN;%yC|5Tro3FRys!wVViOSKziz$s558Mm@vaACB;43 z+e_4KC8=RdjK%~7gN`={V9j&+?In=G3(cp;R8|tXpaEU zDGxuyf3wEh(LtHpe@6C=HxSKTKz1xqk{{?&2`{vZz{3Mkrz411S6|;q2M)X`#?UC9 zuW6DCs6hncE!|`^7BjdhgE{ao& z*gQxv@vnzE=x@L9Roau@O|8)})Jxse+1X8h`s1Idb#f~;N1Euk1v6>Q>UC7tR7V$H zdLga6{l6&~3(yBXw1U>XvPNjS+c|Q0>-KHZv{x`)^B(gkE_*^;uv#%$dk9QOM*f?u zjWVNln4Me@IAM4jDy@`NLxWeDj;8FI$GPx!!D}Q;^0K?zU!iuB2We4E*HB5- zaI`?QM#Doj5Isgoy`Y(FhNI_Hj;LjOc~|)E&l~Mq%62e=e=?{!K1Kj!8>Ldc6i5{4 z`RAXbXI^|<2Bqi1EQRCvIruLf=AIVYHZ?V|#v6}DDcBL91GJAGS@jT|c;ZPkc6tll z``GX4Q#XHtwrtr%tDbw7-h1(-bpIp2=aBkoQ)UY&Dljv3wGEeHnlcD#xJ^H{=Lh0H zZM$C{?GM~Coazy8NBJ_R@49StH;^5LfMq}W2t{}8Bm#`nAPl^;sy?nN)rWtoj;=pNM!voR^pvLLm-Y<=2xakwvVt)n^=AC| z@qCWMhY#~H>zfiZZRT`p>p0A&)~VAcQQktNX@I(WyD2Mxb;qt8GDck3aq>#p_};ampmR{WmMcZ`I$`U{nx1z0f*X za2-npp0;Br)gBcODrm}SP6)R{`%S4(sek$dY zd73(II^Fnz8!4O*QOu5#)nn0lr=BbRj&P97*7aMdIo3)mE?GgnhkNMY!Tt2dRZp>R z>B?nS2vBZh-|g0|TWMVVI5w4*_*`sR8qlD?&|f~^{zWAgt8lmZi&=P;nucE!&1PjZ zBtX=%sXCBB+QsvKqDUqyds0oB0&n*0T5OB-ug4*FN{*7(L*&5Jw{2-2UR(0yj~0V zK)Q)v6V;ADuA|W*Hsv}Y>)01Q(Y&4K{7)3Mho%+@MQGNn*%S>#Y5gnf$X}y6)QdlT{!tOPHYy8G7ivTlUD7QT2v7q{v*I6kz%Tw~DFsHPVY&$iIhYJmm-$ z1y>WT7NZLSc-OwnX7-BO<(#=hU->H0$39MU#T7(1-YEY58>0CODr=)KRc_isMzTkq zW00h4oH~e(6ipQOweliM*6G`U@E&6PNbRarT}*y|=dbS_B^KVj;4;4uKhkLAj;uyQ zB0Z>xb2Ej;>87}l2ZXwRM$apCj^cd!K*_Ku5lb*LfHs@zO^Pi9lgk^_P&bCoJpC+M zy?Qle)8e-t*)=8-3e!(luB5BZTu!rR&7o*0L2FmPOuKgM7N9wfjJ!=h_}&kwE*_^> z)~=)W!)>&7?Hby?Z5u0`zx>%RDJ3*q&W9uwkYN{R9+U_ILz};1Gn+pO(bSgGb)`Ph zVHuW3+SpY7uQYj9xxd)Q*s)z62hW9nfra8TpCKAQzIZ<&#L!KjLHVrm`(fF)pD3M_ zotlS%D)|xLPU;J&W$}buA4@^LYvMhzgpgUVa;`vyPu06uMIqZ7U?`VCjmo%@MktMr zQPya{q)bX+KDu92Csh%qR14)JIG^PokyIwdX4{tNSZb(mrjE958aHMdhyq5VYvA*B+&dF1?6S;_r@hm)Isty@g&%iEWIqL7`}nHodu# zw(r7Yhj~z#}pt3efJwgl3W#u^rN%}mg=hPkh zQPM=qrfxXnQvS`di}AR!l3gQ@iJiuKWu*hgrOX*)|NEj)=LW`q{ZSwvID&!GG7dx(0h9x5dA z)EnrbWU!ZvCW8)V57C-8*U;YdKAL~}JUWtZBWkoM7sybj*+F)bMcv}xhd=#cy79&v z>EqYmNGq|ay4iHs;P7@wZf-N#U(uP9nY0KX0WD>LOZt%nlOGc9oT=EHFc{n zas`W8ip#rz$^{h_tU^%%d%yXzFJk#naEo}fj-uj)pE_X%jcb}jFF*e(ZQZH4FoJt>AQ zfv3uyptYkCM5P^e?37?wCU=zg*|DSIzBYg(R2>lL&)=w{l7bG!^PyZSxG!8dprPR% z36dI(gu*0bgeV+}bKo2b!;Dm_-OXc|bd#?7TYakZ7Jb_iFhvC*^}FqT!fcxC>7@d+ zz(|4F*B)6Xq{Y`nnDcNkzAaj!Foz&lXT#X4wkrE63vv) zV=hRDd!}LDxYXofP`nG zrJ1O+v;6OGZ6kW|1)?+0D*bKE8lpGes2F`~H`L3rhGySDD(9s*sAf3s-SChaM+L37 z2td{S^wuGI+_Gdh65M;-BWR)7i~`Yem3v0YwZGHk6cQ028jmL^oob_Kq(bqI5kNH% zJ;q7Z?*!?^qjeB1V)8Bn)){^AI%t52XhLX@CiQeBDHILS^p;sP;lfGO(cK~QK@&oQ z3nJM>fDh{O3AHm4h=>Oc9Z51mgN=)|Im+g;j>%F+Eao#=suvnAMjR9XoGfIy_x;i4X#ap+IXys2UM&9E5g-H{M!V#g7 zR%S0sz(Wd?9ym1mG}2N41*w2ORV@tf8j`O@j*u|YDaaymELu-(NA`PHlv;ZF(NP#D(#E?^X8j*ztSDzzYLgu52b-9d1A)zUT!XZj0lL9=u zslKs+Cf7T@Eh|S>#xq^9uTn6SXf#f$;6qnOCpDqzw~*Sy;$J40;iX;xbZ6ILG9!3E zp?8XZfqKekEe7NIXiOYCC&z~CDWy>M@^0J*$kndV@Qe0$1 z1@TN5Oz}R|y13Nn9U|SFs}mS6YN0~2lK^YDp9Ln;IJGDK0>- zqoa#*JwiJP3r#bfrlwc}rF)Z95HA7(Vd55omV{O&_P0f00-h12xNO73N8IpEsQ z!Btw3+E-zN^b_}AHgF&`7)=zW){p?Z-J#?tD;DL+YxwEQ6;yQbp8mVrHT(7 z?M@!Uq!^Ok)<|hV{s4!vrb@#qT}W!Djg55_3k$&ON>NWII=4i{5*JcggqrJ{g!E`o zP-r*-AxR=+G!zL_Bo-kvBwh*us#xlq>nM+!q5%Pn0l{FxCIw?5v0ao>-D&FSKpKrr zxwOUBL-7j(HgZzkl7v>V?`pW@RXxwMv|UvHuT7~>^zADYpnRgz;!wR$6x~*W*Ih>` z?B7?_qAC|0Cvw>(L_+Jbqjmiz$Eso=#{{To?*|C?8bVYu*(0>k1lAmtsN!RVRPHRM zEF6lm06tP_ls~yOsz}aD?J;iEYD?a7XrQKQv~3&3AnJUY6;fQF1a`D_lHv4u1apWB zkmUA7Li93?YpN~SZE0~!j@?CR-Zt6*0*+MR_cQD4VFLA|LS zSynI_V}D3}T|I>YVM6MimCN&GN%N&s077r30*!B&V3boD0Gb2|IM1J4iH5tn1h~&9 z6*W#)0*35(V_63GQ{}OdE=89SR$Mb)klcQXL{9XvtubezldC?*Z1N*Ma=|iKu!$O~ zJ3y6lAm%-M%Bj@T+A5^}f=o#nDd~|Q=>gu4ny0|ag z9(j39)ZN|7zz4sBTadxd%O=T=rl%G~Hh@_yk$6OaW0rY&P@E@)03iW3;dqELg)9ZI zE|aBHHp`%C1jTXCJsMi4VEy4Je4uGc)Ws;5&$xcQa9Bv4HhOMa=#0(B;GWx7mLg%~ zi)ASs2~bX;YP?QpvV|N+${J4lv)=9=3X5}vf~I3awYUVEEW>8Gf2;4Z6&JZnARwc0 za~UV_%0N()C9Wwc#vDQyRE87rZS!@G9 zlDW@vKGgkl7eoK_@;X(DQpLKoeqW^XtgB~4Js)}GPLd$BnEBvAHz;K4e>DOXHfCDSXWP@GF^3TC4UDu`<|CDUdeX~Cx} zga|N1lFUyW!IMV05}{Ky$yWYTOS^DgZq=;=VBmQNaP*1F%XAv2pR1v{W2KJFu~rm- z`Ovi8UZho1C`^&lPp7U^PNC@PH543#Sv4=_uXpkB)UZfsp-nA(%*s@(eM-bR=8gR({_bG7YU zPbCmh$HBfh2EY=)sN6F6j&-u(w?WO#O}r2K^Rn+X9v8xKHwQHJ_GT!NNbtE+sho^M z2nAR>mW5R$DAw24iFLB;j%;0+M4gTl>aXjCSNPr2L=+>$ynqQ|0mD#Q1*g~u?FaKCK~@G6 zsgzVN;#q1-U^Ip)z}ys!5kMQr^CvemH_8?DFFsB`S4f^I*XFiwc9H4Q+cG0GdHepwzAVv#|aa*u?AR424h04R>tpD&cJ&WRRR7Lamtg5PmJJb|zJ$m{;* zzQ2k?@|*#Od3&j0s!6>(w&7r~S+wApfrg0acem}C^RBVQMMacTW$g+zcmd8KE?Oa< zCurFwc9JiCY64pB4~7TcyM zo`_N=o1#Qrgy#VFL}{QZFtIo;U})scvA-LRyg$KEgso(%rl;9Y&ha}*H4r^U2@fa$ zLKVB#Ne5AX;0$Oq0IC|JE(n0sOQ^0-F=)K_m=7>9FgSdw5_4b{NDom=5Boq{m$guB zC#V6(3c1Gv6Jm|el#;Vr$N^V1E(OqiX+`D9q9Wg$QLJexD**nI(YZDSBeI{UHPG~k zV2F$flPU0Le@4C8fdv_1`{0$AlR0rR*$qv6tg5cg2_{mVgcRu@sead^%LmdftS{lP zT+o>RJt%EB-~p*s@JySQB>`1#uLLcNwL&gx;iLrN6D1mLE>2(EVokp;CCn)kHs(jK zfvw(OJg=A^tVg4JW!^<)B+MP$IZ~?)I08$~c`t}!LSVuIV8&B~^Wkr}dQ{m+-5idw zD1l%&v`}4eExk{&{9zy%CKIVxVlji!A)oW@q8f-E!&C`Gm7mGa*hf>qLpjFdCr@*f zfCxsR{A>y=b!k{Ko-i{f{kZCdS49^9s>%ljWz1sFrCjho{#7pQU(Gx#4bWqxgjvQ}^);BonQ|4~p%2j+;rb(@z%G1T2k{_sSKW) zHw73&Aze7Ec2V6`^tNP5GX;Z3{bcwT*?;JKa={V{79dy!!W41lLmdz0>i}})H95=i z1X*kli>G({Dgm4}B+_fuUV_YB#^2Dvhn8AjA=I*2Fbe6OCzc@fHts_b2DHCWu+s%E;61?%o#LItcNLA1pom+ z(PRSKw6(Rd%OMyNLSZOEy~%F=%?wx!tkREaQcrJ}7-xbDe~3PhDAsz=r7ff~9-H=1(w{3g=A zf=BeADKHrTs514ksmSro0gS-3F>k1OibeH^ROZ}JC@L77c%h9LFNTqj3)S-{8FgaI zgbaEbv?gkJ!A5Q?DF1hlWHlF)wIf@lzYK>#?*5U_8=xh_=7AmA~8K8ee?=d2VWt5p;F7^CzO#d%C;$_l_e+_*ke|g{a^M z@4ue`^w7cmtf68apv5Y`Eat6jWb_~wbsyCGmCI##fyT^!WAO|la+rgvgm4m#6bmII ziE5hYF-rab0IxNZpHUS{fNI;(qLEf2Wp?s|m;z6j)q;+{MO~|sx;a0sAbp(BL`_px zazf=4bd`t*!6XQ6k0K77*Y-MwThy9_j9dZKUv}$Iwnk@<_pi4!9;=N0>|Teps;OqoJkwrruRufEzfwMJtxy6?XGXv2mL^!2ZQoy&cG=R4n__q^vl z{EYwfr~gGKopchNe){S3+u#1yHU9!EKmYm9)58xxOn?02A8GmW<jAOJ~3K~&|swd?4aryiqEfBI7ti#AYK$6@-_FMdIjCQe~SniPx& zb9~`_=kQp;hKGIjWC0P^znw@&IvhP4Q@) z(#afa7|0b(=j0tkk&7`6Awrx;E+wunGDvL{QdV;-CI0-+sq@xv(3mm>3Og+^C+}N9 z)H06j`bN3WfKMa$(aTcm<^K?kiF-F@%ox^8l+{34RQj90j*gC!Xi}M;Aq6LxFH2LO z)caB_tVjl5T)_%sQ_LUV;iJUZaQ{(GGlzUlSbv!~x zZ+wI5goYXnNxwQwwEy%^|HLNX8$b3@0Z1Ww{E0{DLm&DOzdt|w+0Qt7_sORo7vl}k z-+%3IY4W70wCcGR=$2c)NK2P4<#EGw48DQ6!nNQ!_4!pGsODPbef#-}S}+fOYfw=N znyuXd&Ygxes0N}nI*O#C`xGgV(K}`w3sgxe)^pp+<%yOf6$}Iow7$NHnb48Lhq)+4 zYikqTdFS2q#-`1*;q@)lDVX#fcicgdP&57HN57`)u6sWL)qeD!KczEHKaZkuFL!Xj zWFrtHM`5A)_H_18Oo-y)aD+O=H~QmVz9mEo_pxD(@tZc#j&yPm%sdF7Le!7n@8

+=O=lu~hO_VxB9bwd3$mN~hriRINgsohb#tQ)L5Zi9uypdu;i)a=~VX`Yltz)8G z1!~Y_$Vx_yAN>d&TD_Vkb@#aS9}WvGr)k-hWH+|R%0xr3TBwLmkRK?~Iu63&GBf&7wB(@`f(hMiBypX|8t`IZdEacVt=hFWMVq!#2DhSI*LZ(jz5%K0OfJQ zLL@Z2>C>ljE@@T>2hTqHETwvSY0s{ml+R{p-kjs;d$;{7&(+SIJB1cKo^qKq2Msng z)YJdE`Lp!NKmR!W@|VA)O&eaPC!TnMUV7;TYCqgY5B}+Xu3_CS0Pvo>?xxu@W>THF zZ+HIof9U7`eLEiyg5g*G`v1_HHEZZw-}nbw_v(7O^&kF$qjaZCndDv{zC$C0TVw3l zmLlM*D&m~HcM=u>|8E{?Rsa;YKm_*)F1B#&a?^J?0YqUk0Vye1`uYl^DuAdG`GHUe zK#*=?(k0_VC>8*}YGIXg7WAqaPP@XwV(M`5kT9yp>*j{v|s9 zyo>2~zxzGickcr&nx);hPtx{gf&5u{yz}vUq=vs1ug?&@)nHPN}0*kj|AGjYRb#rg2 zKxR1mIPMV@Jr0v47I$D4Yp3jT5E>|aoopsW$x5Md;`R^m)`fj_p!FQ zefxHPpU*z~Y}QDxyz)v0OYHy6Z+?^WMB&qfh6pWu<;spP$XP$bRO8{bD2;j1`V2mpu`Keq09ggo7 zwD6^o`Sm7DI=2R*$0+HMx#}TRVd}>M`I%~|PuJ5}bS+fh zztn`}{SBYyk;9#=aWpn2=>L8FALygkUr!e=y@WOV8B?dx-FM$jGiT4B71v(P=UBdC z8O@kITQH=36^lSrMPTlxO-(Hg6h$Q@Ge#Y4?LuQ2OYLp@Xv)-a;>{HrjCg$;#9?=A z+eld(oo#H2hAhgax+oY&AjS}drAUZR>t3Pm1@ov?<%C9tmi(^fL-%Ft zfkrAS*Iy8%+Q61df?`p`Zc(vH-7jhi4M>^e%e*tT>H2O};FC&e(gxt$$J0Jd=Xr#+ zBT*;g6JUZJBLEI#x#=^Xp#}k%&?axV;d-8<^Upt@O~q%Pc{<&3$FDi36Yn>)#mSQ= zQb2r19w_{!pZL@#X!p+D^vO?tS_pS{xp~j$o-2+Ki3x2o#pc$y082!4zqE`N~(=FRFOS!Gi~B+_-UNN@W(4o|dGO5^T%mo9ch> z+rNio0TXG`59CY1d!&$I4>incgb{p3qmlI6pqnD~;Dwf!u~i?hz5NhPnl#A`v{4bM zU0ppaP3l_L=pv~Nz#oL`Q@l!Pe0%rqW&aHVLBJH077iw$n6zTlm4VIV0^*2zMX&`n zgA{-B&3{2nV;X4RzCD7;CFq=U&Y@FIIfW&9_@Xesh<;pf{47euGR$yVTjz>%HJ~FZ zr3*QBAr|bkdmh6=slA}X!U32mnHdqRW78gGIw>eLoPYfGcj$AU`y5S}IDxnO)6-AT zzy8Nh=)dl`huVY&dZ?p7v&RLf6#*Feq|gM!eK&?7K|LqtaPvmm|JAS3gj+sG!TAfx zZXG`aUudz}7HJgl^C^JzeD*_oF5Oa%W^pQ}DkkrZ!_k6VK$T7F3zp_fcL7$fGUWHM zd*kK6HGkzM1-Paoys>#7xt`rr=j3ur|7kC4od<;$3LtvvrI+ZlpZzR7^w2~6Y+rQI zMfAPzeUF2Y;P1pcfcF{CIyBVj)2Fjm`uWe_B0%($v~b}<3dg)67#X3}!t4vJcK!PG ztf8KJ?zyye>sEf2VXob=YnOPIb99E#Sl|2J_qswTw9AOoz}?TU{G^-R{e?~xKdW>c zJpTxUqJRKf%5eT|uuw<4_V0Eh>Qyk3dXN3@^U(~BtZAahDCrN8lFC)3o@z~sBboY> z{q%aDmG-NA44cxa9Os1|*xyDIC$+Eu6A@B8Ok@WS?xUI0r_vj5Y^MMI?;kU;{&Ce4 z%)FARcG|mNXs63BcF)1{Z4P9hu0Q+bhFij^c5qSuAW5g5O6S3xsIrB+FzeT1b;Y4z%K$Aq zV991c2KU9O^2s{-R0Gjtl>B*J>g6rRphgds>*!KWWAS`2exD1dF9xibEX;UFA!u!F zp;R)*MdqP3-FM$Tf`No-$6H&e?Z^R&#Uu2sZ+%lRtluz$xO&Ahp<$r@Y|=@Kz!=en zLbYF$h0Q%Pp;O|IEs8d&o}yqPIDcFFeu@N4`r`loB7N_++t_CYZTCBZ$$sVUzd>8} zb0iZrkPS1=a{ziEg^M6p2zW(+KMR^n=8xB4Dvt&a~H_j4-b!T zO8MuJy5Y^cevirrnv{>SE)6nrA90&pO-R<6&2g{_0HvS`FW64MSf}nWw=+8=&#T5^ zJ3dn7D&WdiW=P&kboB{FsG+W2fNz~F0m$as0)rPU6u94dItL2BBLxaz4XqG?P`KwR z@)!Y104j_ffTudITzB1dtcgNngtmr=T142wQi8dgJb5yYm&YgeM{X$0vr(~cqX6RL z=FFijZ@$TX*4A<3cnste8(AR0d)bN=;(1RAIVnaPfAuRCB%u*Y)2}RfiJ}Oqijxes zlAqH2D*u+xe!>0Jx0lTs4EIwOa!{4UWcMixxv3;O6mhFt%F#%r8iPlr+{N@1({*h)irS4O=xal0C2hG^963L zq$FV_srv&WWZs$tVDvggge$(MGM&t{3RZ^3k8S0bys4>yUVZIlnmTnVrv>cUy_2swl-INf_ ztFC?w^>%krb3+sT#m#?7(NIumx^1*{=`y-_>E-mZkA0H9^jBvHhB%%&+mFzKIWxsr zJDBOCkExNDeMu>h7Fx1cFJ$^y-B`+`LlSye)X&Ri;x;U3Uhs_VP0WDm;;Q}m`rNo1 zt7tt81z_NlCr*++Mt}~|dO}f>YMf1}bV~a3h};%ns&$`a$eth5c8aKT<8;B85nzKF zwpLzgL_rs@EnK`u;Y}!I`@jQR>(>E~?1Ngr7wXe~qZ~82QDsnt8yW%Rk@#CMMhQ>x7SJEj3_|u>M zl%nw%op-?nY#zn%lVUz0U37})Y4aOz&}$nvP!u+o z*?MU$AU!xmmG)Cnp?*;qkP1@j}k2n>uwezufSP z0(c*O=m9pHU4Q-c;(QisBVhUr@Igz4{Igy)|7aUVy!3FC?yk4$z(DKybgR%qKo z&=LYoK3kxakrrB}OjEIp0)wa}wzEuSO;BUDxJGdv&srhibkET`@ANe{8lVC+@LZw? zD9Q`MBzwgbSF-sQfQm)=jX(35&v0N5{O$0MZr;3^E)YPuf8Ra^Y6K^7o!(rQ;%0)< z*^FCU1^ah&b@F-7e$P2<(LnSq_PhW7`&pxn*Cn{hQEyL%Hf-3$V6AdGWh{j(btqYg zSI2oUpI&i)eZ6zTP@#+84LqkKR|^HzKy;Ln?zq=MQMLT4ulJ(a6qqQVlS+3P&BQ(- zPO=A(6+S0<; zhzQBE&peCPyz~NX+OUz1n>Cw$_KTmh=8K%dz5Dlz``sY4UNG6epd}}tMA>|bYmNp( zjulsEq^S8D5Xg{D!CV&?Gbf&dLXbaYXSX~?NW{iXqM-)&6p1IUWkD5KFq~`Fw&#Ew zN2qXmNV=7zY}4_>sXn>V%7PqT$UUn6r|Jhv>~qwEO`L`SwyZ-7UPp6)G8l7~~685)3$V(*Zh0wTIe8!3_H^b3Ov|7?#QX`pP)j)KVlRwZxfrW~q z)3@_Vs+pt1q}vDS*DJ5TIB!sO%TOTcFLDm1py#pa0VE(!@)vW2DlJF{xaOK`Sn@}b zJE9)puY^wurq)D#J)Lp-S#-GVAfKnb{Rq{?LxN!?1enQlg@aL{wAiwQUC;x6Z&1oF zD$QN8%v;tuR)X5w4l#p09w7ej|IWJ~K5&2z9zH@}{PLG+`m~u`9u7qrI(vF42*IIX zP*{K{((JOS2o=QGQ4TH|L^m4vwc!5?^M`DWYPz+63qy=M>o@gY^VjS5MNz(xcU$?X z=Fqx1S2nE{Or3pe(swBvR?9})Igb7`-N@Rah<9;)K`}9?%Njr_MYEplpb%~f5sC(S zNhwIsEWJkPQp>blkoSnel%#low<=J@^<$iRIZC{b(E70c#1og$w5gL>^Ft-9kA3W8 zY(`b)&s3_HbCENd6!-t+{-jQkd;E>(vc92-eZMjt$D(}BaxFCgWR$2xU1&U`_(VYn z`1et>)`&=98>VGw#%k^`UW^X{$WVKVRsu&)pmo5y#FaDhs0N~=l>BB$JupMB1f#Z7 ze$r!t4C((WSYCTGknEe77uSlChmoQ@KHkkRTrJ!yH1BDq9+=w9z`$H4O`c5MU0p&8 zJ&*T6P{+J^bLjl@&!tAeWU}dA`pf_IIlBJCAE9&3K9}o|B1+eWFI0eQD2qr?3HF(6 zj+qkre)jar0`@ns#s1j1jA`kZ8?f>apfr7Vk|IuO23??34(bBTlu%)MR&rg3xUzpv|U!PRVAT< zEYuJ16~BiO^o3ra@FR=)u+Y874Fpp@Q4c`fOC)cuELRh?_@7o@p)9G|&v-9YyEphe zaSgC`z*mWB0jL4^jFW{)JFZe-sOJtEc_!ko8TDX zs_#DXBzf;|9SrnsK+>cbDyjZ5a;cmz)T=TBX**y#CF5+V#eo@dHxnnMo{!>7)Cb{H znSAvw61tf;m+6ucx{$h+Nf_XVdZIu6@sH{16)X5yV1nDWy+x;;c_wwWw^KuN6LojA zu_lU&KH*qM27lRN?!#!>9H3AHCQ6yQVw6OddS*|Q_Ur2E5Fpw@nN*tlL@rx?C7X^7 z!AR5M_ZMDznZ{3;K;RpvP^=5jgJ}k?$!GuQv0G5iF zbPSM&nqwkYk8+}U2mHzV+GWt#yHH{K46>0#kj9Q1$0mNf$0_kFn5L{q21^M5ShZ{8KDh;Q zo6hI+0BOr9ZXkQkD)5%A^K7R9HiXFtKksl8s5-zsJ#su4o67Z69gv1XeHA-VZYLQj zt$5tX)ktd~I?AbBMHl@6*ELbupxZpEevQFWu|G{)>3r`v(oRhcjhsq=mJgiohobwz z2t@^W+GD_Hma@BbSIUK~GP7FGC*n{Hys{gR~@ag^z2 zKKV(WcQBi2(%t1;;}aK@n}+VYavhh5}K=@V#hLgw~kB05vtY(7`=> z>D6^F^Sy>C4og5Vz@X45@4o9^PKa-4YNZ7WkEiY1chbwRY@zMDiKa{?3fBiI+1XB3 zpjmcC$smBpaI9Qhp2Xy29(LjHgS3| zo*Jjx@9lC2xzB(to<~c$W8Rii4I9-!bd-|cr=%Wu)m})E0t@xRs&4h8BSIIXSC{c< z)v8s@c#vX}KwG7N)Ie1=l!6M_DU;aEN7b}WJ@`m1oO&P_Mj$AEU$*ROnl)<{J@MG1 zoMr%K4d(LC|NL#PZ@T=dWkPH0r4U_;^``RJ z`J@I_W=Ak{agDd$dMlTGLsaGmKlnj5_l3ey2GN-_XL2_gBM_m(N7`t?qQzp&W9Z3M zYia4_OQ^LmK-oZ+GG>Ot6cuHJ~o^P?Fh*#2NH0ME z1)EdF%YEd?VQOw3BS5a5e)z*5(6_(+9R{3iHpABsW+Hib61zm>K zcH|JvnLC$Wet9*U-N3joCRB7mUL6?V3;||OJ^3WfpFf`ikr34jpOlPu0)VQXnW!tO z3LWSXtL5&8$w5fB+;R&S2^SoX&OY}&teI@y@+S4BQ&g7_+PKhI>l<5GGl|3#wC0ta z^rK%qK^H7rLfrsIp^at%=oF!FB1%WPdngz~7%PfEAcZ8&U}^|WEC92!03yqV&$QtB z{RXmt(C*957yGPb#h$z@>uv^F)ArIl@vQxT}OIIm17Lp@?h-ubk2w33IO4V zIBx;DqGGHZDCCMoGWQYB3jEgi{Quc|4|qAs>umg)neDr`7wHN~s89q5MDN8EV?)3V zS1<;QOPsjI_UAYz$^T1Su!$W*g5%hUQ*8V5*VajI{GOJ-)4)|`c!t!>vIu;U&O<8Mtk}J+ zt_yyjW1ak(}9YjClU2z3z6kjho~0f zHfn2tXdPR%JGc5hZ9J2kN=tU38qY)%(HIKZ9B%p9PjJ&s-zETUldc!cP&qDm`l+Yl zJOBGXGFzQUXJl~h>RN=q_|OMYJuvU7akk>FUAxfTt$>-+{n@4VrZ>F_@4osfeC9Ks zmby@8oszIaKz8@tcjE&e_y8l3#7k|bL|~q!&*PG$VVM!QTyx^kcIo0{zK@>U&k zD6zQ`Zu;&`*!v__i@4;iZ^5Vk`ZE%9UA}S!+S)s1J&RT^#aJPW|NY?) zvF?;BksTdIl*Irh1`tL9jPXI0>J@9WoLhL-0MS1Jt4^A!W}P}Qpq?yDKopKe zBt!P>v(Lh7Uh`^+p>5x>O=3vwA`?X(y4g5ubulqBZZOQL{W1U>mS69;H^#{s-29l? z2eVNfKg!Dh8p7_~eZ){#$otIxZn)tF`OS$0?74|S`Wr|)UU!rv5wT9{Sej)4<5+UQVtoDU-$bsM zN1m8(iorh^IX#v))xsy{Bu+>`IAtE>$`V#Y_F1;R1K^F zNlf_;jEb$&Rz1n|mk|JJ*2Lw+?_`+RdE7+7%6r~}^1T%aMa3^1wv^aBPdp0QA_1`1 zfyOmvk7WDNrYbGjzgF3ppgPZEp;-e&>)fgni`dkSUcMO^L@P5K7ru#-N=~&hlQ?7| zfx-S>0j^D(HsQGAj*-DOJwBn5BqA{p7`0VHZ(d(3<5|CH~g5!cLRcJQ%;QWhT zg-2g_9=H7DUYzxJS7X4ABGD8>W~2|Um6L=VTR_f>opDkTZJ+6kdz-E8(*?1(Jr3!@3`?66-IsPhX)+(ATa^8uOEj zOuwGQ?4?j7M!wy=B-rehwie+Ji2-vNd zB=;E1q*(aRQJ@E-;Ooo6PtMx&=UgG9>OGAxLbNZgS4e4;=npzIsc4fVM7bg{Xv#pO zl3HA0$l9IjOI2EGsM1;0c>3w5an~Jp$V7qV`1m(- zH3rGnwiZ8o^V{G4wlpnfb)XM_@PkqSC_&f06wf6AANtUTq|AnujLtpx)%f#2|8v}X z&s~yC#9d&x=`y!a~G{%U|Go-~T=?zW8Evbhe2Y{tGW`L^d~pgAQJWk2$yP{8u5B=)uo^au3>) z2~T9Agk-{nT}n%b8E)6*5Ww370uEV!n$|ypf|H@=!d^aduwn!*QA0JQi5QX%9Ac3P zFJrmHqWn4x8kq3u>o^FaQzaP%2YsI*dgV%T-Uz%yMnKlF;tYF}7ir(+`i$Q3>Vjd@ zb`oQD3&c3Nl$QSH_gtHgldFiL&1EtwF^N-mnQcpsme&zyp_|Uw4{Ay;l*zSt6QEkv z>Fryn)?lJ_WTjBf`>UJ~!L#|2Ta=kG*Y(+aQ%K}a75YmhpqYgeNvd)f!=~RjQc5?w zn4#gbBlWUaeqaB^^>a={#lM&txL)h1Ik==)IfX%pfsqF|)(idTuYLuWU3MAPu3hWb z4KmPjqv6ke_HzPo9W2^T+osa?_uiO^a%YUiJw2EprpvR5Q7R6n<*94z-oxHj#Z9{y2=e%PA*ch zw0K;p(3DC=eCdl{z|I}pq`aqh*G^pZu6Id`uTOvGZ-m)ic;Q9Tb8^j^Lj>sihy@M~ zOyH8&uEXu$yARL&;YB?8avrM>JPNxv{t`t!cSw`8QjX}wL{HZaSxU`_yUFZz za+bOdgiY|^Y&j}fiCwvlYFieG##NguzOKXzY@jnyc8k9<7L@T@NNi7%&x#?h2XYwI+Sm)p8cei~ENu)U7ad0-nn5-? zhEgnx;bI?*XbA)PUGivZ4I_;~WH2I+LF|UnRze{(fl_1wxzMcdTY%u z@dUC~63tC3Q5+|>OUEK>mgpMEpg_!#1GR?D6Ec%ns3G!%@EF#fKUe{tvs@!0EhjEn z(Z-cJ5;?y4Y@Q2W*QGRYruDOG zk%~BT!jUD4Kk{sNi9g;$*P-gy+BK|tlR6S36%OmT{{C^Cm)9k~HBA2@T7jnO7Nal! zkmveWwX7kL=2N{m&B}*c`E0mzdrVq>)q}S|HP}{VNPKOU!D@fQg6Y+>hh@7Y?680U zzSqOH>Mg)cP%X+O=;^M_jc{%}M#3!H{)K*<#^{ESs}~MSE4; zVxQ-7?VPJc5z4I5hQbA*b}433~a$0Uv~<=_T3-gkqw*BS3DUV zZVN4YoVGC|y+myR83JoZQfTS5W}v2&Z0xP65U44*=?k}4`8Xv$?3y)_V5VbYIx%Rf z?^MQT6`0Kw!`(yk+SOJ6USYB4S(vR`G^oR?{|;mt?<=dW!K__}yAW)D1NzLi@VBsG zzLlcGu$r@QQp6C$Loi$O*gm!i<8H6K9(8x)%!^LI+EZ7w?dYkLq&76{CWXz6h9;N!o*kALxRD4E+4jT6JQ`+@L;(qx^3aV@BpE97R> z|Nig)E~O-F4D|dtTP~B4=e6tB2|GOGkVAY8(qMe7nw8FEs&}O;Wh+{=o8{NyiI~W* z>G<3@Z3nMMx&ItVK6>zh-}%c?%$T!W9sl)g;!doB#64lzt;~r_pZLTlkRf1aHqLF? zSe9_Zh7CCS=%dj}lOmolaZ(WfM2#{&+o2f>smLjMErR z$3|p**iA{GYZOp|SC)eCjN3O?t0n%ir-OGePP#Y0pV_K)n4rMT2-LOuvXr&uDHp2g zjx0K!Tr0n#VY9Oa6RjhA!|N|XCY#2_7dA=kkK=*Gd;uGue*vqBeU6Q$CC0_^va#_Y zq}-Is9%Q!U5K!9O7Rf(X`r=0B$imtR(fp_lbpcu#~z1`&pZz%dW*Z; zu=V9FIQ`_4uyyDKoO9mU=pV??ARkBW@$Kjz-hxNg--|O(NTD^g82LSu5>d zngA*uPe@`8m%04tM?Vs^9qyzOCm>^EAYmr{s#l#OuGU06DGXht&T5qZOgBJG*49;S zBraLG=bn3{4wWTwhew7~dnm7LNaClvcjJHm_rLM@6OZA&@4MVzmhRmuGL7P94r?v+ zX^oe^YgaE)$td3c{`cdNhabcjzVHQEUJD%?wu28o7)zHfm3Cm9=)~6p$C4$RHI_hz z80^;V8*t?n7vnb%UynO({S7|y#-mZPT4@v|_Uh0;$}T*1zejRJtV_Z^UDE^DeP}At z$ImPZ$R1T!cGfoS=C7_NEQ9L4WmEMIIyzA&n3NSvELvD>bYWWqMC-_Y`aidLr4>D} z`(6Cmg(u-xzx*ZoHxJ^9SHBxO26n(HIykuJU>tqq5!ltg3(r3D47P9CE+rq_0V`fe zAX!Sn7&8!Wj-%CVL#{6evtVFF_ex=T*$m5?C2-H3PoSeSf;YeE4LJ3b1d4RIJn<+o z--!&4KJHX>bvNVTNAAMt_y~6N_R+`~!SGlf9Zidn&*f&`p=oTKm{zdU1^>-p#;lHG zOE-V_yK)@(z5o2r|HO(FtFU4~iyuO~EMNpDe}AJ@{)5(UW`_|n-?|+1^cqrn z1_rQl`2l$Gl;F4~uG$v`Q;E;$pq}-B%JbT&>)|PQf2SgG^L`Di2sQr|YwqVCT-=#He|YbMe!k z{uC=$9w@^0$wU)QKJ_%*^qub_Tgc@e2HS`U z{pS9AFO75&5YRyeUzU&Kx=*zYt`DZhEN1^4gJlqX{P9Qd>tFwxCJnE}C>`^` zfnfpBTW`IUj?Yqj^{Zc%del@)9H033$MMqkt%z`w=R^zxgU_R>&BgHt9f?C%Ey2U< zci{H>`f<^^9$~a2%%Het)pGp0O-TmAY)hc_&dOT3d*=$R2HGHyYEgtaStL7hZ57Hg4|0bDQ$mu;EcG zZ#x2UgX3@n7_7KAM^B)>nF|C~r=EJMBn zeD1TD$WGwlhabdU_ue7rk6rQ^8sJNG9JmvX>EM$(N&; z-3jD|L@2*#8wjxgJNMq)$C;t(xXc}7rgzEDr%h&}x_-6d;R!XkT#GH=Te!82)m9y@ zSU4cM@NMD3d&4Ff3t*pg(g_$%k7Dz-t;isU4bMCyZcZLl@4WL)v{`MSVIGe>@`#i| zaJDFSACdBhNJK!8Z;)^}B3i4-xDs>cfmdtn^4}~jz;VITPCiZCrp)|aeDOtm|NGy^ zgAYE4Z~n(OWt(_#PoiMdg0nB{c1*Oh- z`8=t)<(6CUt6%*}Uh{dl^2#gaoOA!!2Of9;U;p~oF_D=NF#t2n+PEbtmEkg(%-D9E zar`RUmo@_VG}2jMc&v!FjwC`>kseVL3(7@lVs1hiQ&|vj#O)0)Hq1i!()&}bQ(uQ# z;!ppr&m)^2=ylU>t@;gS`gkoI0IiQ~=LQq4BO4nU#)J3$4ilqeXlBn@<#ORV$1D5#xM_H&)R1afxynJQ+^J=1GYRZs=v91IQ) zqcxlqk@2oXEAm6*NE%^uwRYp}7rq6*`1Nfly-*$jp>k zD6?#4mh9f;TFSS+ttO5={ z@(^*s9Cyrd`0azYV(0c9IOe!xkcua8@7?ziYiYsK1CPb+x7{yg5Q$_Iv2YZp9)1d* z-ToXlJoBVvlXBdqP{;~%kxnB~VyR&Rn> z0P~`YE)w_Z9e3Ozu2#;J<(f(!7??e>d%Cl;Tcs3L#X$A5W}te&4hk~xa*Rlv_O&2c z!lAG!wW-BoPQ>s}Jn=-SSG8#0`SrWs{cc?P_RFw&^Ja;Oo_5C3wA|f9ggwnyop=J( zQAB4BPiO3QZ)z&Oxo3!mY%!O`p{oy|ZOLH6OPg{21uKB8D}#Vzmk^4DBq7Y* zml;K#O;_TgWgGWpY;G#Xr4xo~0%%ZkAyCg+?crDm7G#ydEMlDi6?E?gztf0^?zuJG zxpic}e&|=?Ml2FjxaaA+kW8eI&1SH!>2Un`j$0Ao7-vfy+tM#1(H+A#zWa5oJMt*> zjTZ3W%@2T4ttr`zrAI8qxH*o3mBZGNEqLuEufg`-omjM}8@mQ~V(rOmu<@lwC3|yl za0iA5hOqL$wK(JSv#{>?1BJon3YOGA<}#xq4S4t=2NRnqARNu3;1H7uady$($A)qf z6B6qi863n>#~ee9w;*v!o8Af*Vw4~M|O6DA}2im=c& z-CJQEgv}Vz1jP5={QzFr{3Ln@`mtigVdAYwL|YNJnsDMVXQC~+7({MSDk#m{xfp|1 zESW@pXh7Irb6cAv3Q0l=ea7WA-~8q`1>iVym$P$O)rfyL+TSnWS3RE&4idsPy+K6J z%FFeB5FrCDV`29$yHhz1%hH2aTzq?U!AOW;)+5ytomc zyY?Rtr3sCQ^T*Y`adMGG?>U8t2+Vi20L@9DcXSBDbbwM;0--!-YAcs-j)m0?mI5rz z>HN)PL04jRY*aDPeJeU%E!HqO%XhYHtlSBvdb#`4s@>s10IlT~Ux;kFUaSG4b!3rz zJB@95I3p&aW*lLTZP==qza<`*4k0f;wHvv914~ke%8k>zX$(D!4g$}Nhx>+w(L8q7 zMzl07Mm*x8G!(_-Pd!g8bP){)SuBdL1cyQyoJU88ktg+HoRrkDuW2t_UYGUmlk|I+_A9{#1fqnpXAu* z+u#0ny!`TuxZ#H9C0mx)$uY@N!NzU3-G(h&wn|UXsp=U0zh@YMqo$t#03ZNKL_t)m z1_y`G-qDI&c3j-KTyDd0*lk<4;+YM9z`=*Ek>n?KZ>J~HvK?%>k{1i*Nf1jwa*UUm zX2C?nw9pa*T@Oh-IxvFWW5A&%rO`#TKN@K8d23<%|#EJc7CV*s| zmNmy7x)a0#nGthLkVOSp@{VJV+cs~-vgJx(fa9ME+}7dDGhaoFIV5q^){agTOIqxq zvVWwC_m$a$csz~rYt4YzmD<_WhD0faOgbw}aCmqGKm75JiP`Uvb>DQ;O}OHU%klG{ z-$L8=9z4GOF?{LTFA95Q5NG4$Eal2|h1tt`*j*}vZNOZ8D=L8C$&S>u(%%m~^e_%v zdjw5hmg3S&--)iSMY#2sx8nNi|3zH7HZ6F3Vgv`RS&afsvO z!PVPjc_I-dNf0+(ohV)gUVcydiW>U*fa)lNVDi#TSLhTL?7cf1(=KD(xn-U@xCC9b z)fu^3MXQ>L1}7=|myrg0s{;FbLNb#zK(vl5RcKW)F2rT@=NTop;A*itkU|@>#Vj#M zVyJWhW=32A7+o96nz~#UswMAI+=Mv~w3wYBRF)wmOhBj=>EdXT_t~0QJt61Nr|jly z^|pp?Qrn^Lu{*m zx3#*Fi!e8Hc8Ub}jwg#~Dgbp=(`UnDIBJ07_GWQ>>eGKMTP!L`?1D|Tpu1}cuKoNM zank9h2!N*Zmopoa&2m96#eNwtUhchA{&PB-1==e z^EKTV9N0{gq&Dg7lA?2Ilx&({bzp2bEs0w^;0_KCBhE61Ar}Rs03%``Q=}P_9HL1?sws-rSPH}0QS8{U3rl(qz(C(1_yTKbZKnyKL6=vSp2K`4$z;J2 zhjIxm?KFW9H?KvXN0H9vVVFuYnZxZ|k88UbnkeOvh_wmW_V@0%H*(uLHaYe&@yJAU1>cn)aN%h%ZC#XFUZ+*XWTOHj&v97u$l&bWP^ zP8`yuTbhLiOS!Zyyx8c%2F{>0K(vl5WE04FGitsOcu=qiIGf|mG?vl8Z+H!k$xIq7 z%pwm^Ay_ueGWkX}6o~R*xp$_RKyCAqW{mks^lxryL4RMLxHQ?V%1J{!C~(Qn#^;~M z!vv%(0P*zG8|1ymA777u`Impe>Qx7;1qAyv&e%^f_^beo2f5Kv0>fBDKw{grEdnUV zAAg*OgT;N4mgR47Rj{^Ivlz3i+J;rYY5gL@JKsPB<1OO=QxUaTwu{ zniz$mYEoerXnsKx3?qY{WnBc6E_QD1BWAjsjw?+ViV;M@{2&l(PNF5&i4}`h(skxY zbL16EZ1fHH6IiE_%jBhUhU3mQ3IZM`U1JRRD7plat$2Rpdc3^(MZEEKmx%h)P+vb% z2?9p~+Lo3k-22d7vd(_`@ImfV0m& z3!~#h_|~_+g%5t5p>N%`i+vBfCGXisx z@WRyRr91%IUd^dGmjlOvtLbgJvqb9F;Xqr?HN-t!*Q8OLh% z#DuLn+qnUv^JfhZtyANhf^S-VLk4HN3?#vsa&-!SJs7L+h@2Y@P$!*qlCY2U>(}G5 z%Px}ypQDdC1|R*%NATi{pOt~)+Am(Gen`x0cxVXGcw&#&S($WHLPtlNOiq|_GTUT# zTzB_ky#DoX!c|vYC7onAx#-?|?-y|A?O1c@;dtj|AE0HVE0~I~h_F`4nfW|aB!)Oa z7q5JXQno~Z5b{e!N{(VHyq#Pc#GqB=b+S9(X8FXp`0NY$EP58D(42~3u)hxzbbQ0n z1ezi#iNi+B9ENkfxbMM-aQulUp*y))5@pyO%8WOT7;LkIv58U7FJVbPQg&Ukcm

27%bS%kt4t(TRSXqm)v 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

Idd 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 diff --git a/scr/wechat-weapp-mapdemo-master/image/stop.png b/scr/wechat-weapp-mapdemo-master/image/stop.png deleted file mode 100644 index 9e65f3e8cf2c9e7f2a4707d1d0c51b0214daadf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2539 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 diff --git a/scr/wechat-weapp-mapdemo-master/image/trash.png b/scr/wechat-weapp-mapdemo-master/image/trash.png deleted file mode 100644 index 83d68f3afb8e886dd6ec79597dcdab3b58f05cc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2656 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 diff --git a/scr/wechat-weapp-mapdemo-master/image/wechatHL.png b/scr/wechat-weapp-mapdemo-master/image/wechatHL.png deleted file mode 100644 index 3c5e52b92f13bc962729eae4347af6f2d6e3c2e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1241 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw3=&b&bYNg$ToT|D;tCQxDnE(_a|mqT-p31! zr|yyw1r=3wEp2@RLnC8z3o9F2J9`Hw z7gskgAOFChkno7e=$N>~l(h7W%hUV6`&hDPR{)v;OOr1Vs*4%ju z7A;=7Y{jb8>o;xLx_#H40|yTuJ$~ZMxr>*tUcY(k&bXlKdhMA4&1e(T&6mP9Zd$|QS#*}u!wRliCLV)6P31NRofY_sjQpAR?X1}Ik|t4 z8N=KVUakY%{I1H1>^ijO$LDn%o5QMpC!M(wHRE@i(_xc|605A4WG|a+sf%p-a8GJh zr2mm;?o4%@JIyi`ZfZS{^Dub*y})#n(3R~^nqG5%_T9BGYU#QOqOw;mDNhhwG;c-9 z+y&b*I4`{mKECYiujZ<{n-hz=tp0EW-e1IOlsSD?+ylAZ9;K(8rc>pYD&3LjFjl@< zST>=n>V%AERz<7-nID=BT4`69cbw?qWsGDuoujk(kzPu-k1zv^DDQ;MNU=##D>#@Y zJo3?If3PTtNwZJlv+KvHtGEx@9qKt5^l;{4FQ=~R*_FRGdIyJktnMgWZ`S$j&xrz; zoySY1&t7#_yk~gb7bp_II&(F5;jC2+hbE=03#?f(GnVma=BcpRQool?o|3zGX4*U_ zQI+s>oJ(%l#^sy7F?rm0Xi`j`$c@Lky{rpAnQ}eR^uKhXkJ&Bn@(D?a-#)c(4HR2f zJ{R=ye7{n+A!&=s%7u(aHKh|5KGvAFxw<>jdrE1N{2kx^eF~=Hr l9)Ee{;M^5Q7yf_8e}3wWtVL2>|WgtKp+B0YA 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 qU0X33@)|}8fjr1Jqpx-Ijj$p@;6sB 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

;*{PT!J3q9wDigR{9M#nEqaL_`I)sWmAY# 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 diff --git a/scr/wechat-weapp-mapdemo-master/images/gps.jpg b/scr/wechat-weapp-mapdemo-master/images/gps.jpg deleted file mode 100644 index addd9dc8efce23e9755f9ac219b0103b1eba7b15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19587 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 diff --git a/scr/wechat-weapp-mapdemo-master/images/hxLocation.png b/scr/wechat-weapp-mapdemo-master/images/hxLocation.png deleted file mode 100644 index 308f1015cd3d4b5b101e749f7a759f09d4f479eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1171 zcmV;E1Z?|>P)m%6ce`BDx!xkwpkmbRo+q z(vXx0vLHlDLy>|kF)Na=Of$2w)5ALBoO5Qcb@o1Ipa09uIqTbN|7Y*L*80}Br{}rF zRc&%S&c|d-z-Szf|F8o;;#+)yPw_`PC+RB~e+aI{bvUy{?Bu%N2e1OK;634w$VDY* zTtDu|W-Q1d*GwNS!D4)atMVS0NAMi1$CEg!pjZ|sVUch}$FvG=C3rVh;^fY~hH)X* z)_z8b3HD$fp2Y#>dNnW_A7Vx4vH1xJOz8|k)7nbA^ zyiphstyqBQ}I=OL-Q>@9nZHA+lcdU5k5%B!FDVZuH^N# z&oM^g9UK}Htl(vgNOZCYX9*K;5vq6x-l>)c(M3gw;MCDuLQY4w&8|E`wSe-kl@Tj z@O=DKj#mTAg*h;beoQ9__6j31i(PoSbhRPoCfcSE1kb<`k)S2QGt(_T7ZQ*xrlPMR z%zZIdlx@^RHF1uEF|Hz=2&^q#X*gde+QwHfDiP3)!O_gtMBAu}a4BO9lq^&993w0E zClPR9$ue0SlxW*q5g$c_wXxfrkZAj%B0Ug_?mgNec8)66Rq&bkGB&L%N<;LEr~K=& zy&~*aS4M&^z}PN`4RX1V)Ml}Sp|$w+NKh{xFIlR-?>UL~w;2+AS3J*~jw$7N?dNtO z)6QZwHZUZ(6K_U>dxZVM=o00oNGBl+27jr~sOO6(q+^BDD7EV3Lz?7>7mw!XZ2w!74MNdi7%{=Ec&2MQ!?{-^ zA4t^)pAsro-Da?unMq1;4{j}8r;#0)l?rH8Vf|Qq2`q!z!padPPmOvOelJC*kyUu9 zRZt$mZFrz#okj+5vmCD@^1g;xC}iGcF;99wyq~;+Rbi>x)uvEA8-z(Y7kLHYd)!x8 zr;&e!H&v;vZUaRG3AcKA!DH%qOjD7(6-5QB!drlLM)hh<_2)bk6(rPa?ksrB-@-Fo zxRlb4AYt+@GJ($$GWNo>D@a%dH|2E$+ohItDoEHzEX(-*VeyhmZpsj>3Rh}#-FM5hF{NZth9KcKUMW0}n+4%A-bxkz lr-~G7aEGwz>gc(v=YLrC)d_Az${zp#002ovPDHLkV1mdt9%BFi diff --git a/scr/wechat-weapp-mapdemo-master/images/logo1.png b/scr/wechat-weapp-mapdemo-master/images/logo1.png deleted file mode 100644 index 396bc68189d2bd1c93627182ecc53270833fcbe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 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

a2kvYAVS^_m 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 g!@RyeS4LyfiDp011FG&g#Z8m diff --git a/scr/wechat-weapp-mapdemo-master/images/xm.jpg b/scr/wechat-weapp-mapdemo-master/images/xm.jpg deleted file mode 100644 index fda6731ad2d6f466cca0628e51395193657a5e70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142047 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≀6OmN8@dQLZ_MxE*$_{q9;g+bD}?N!aCM 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

#fUZe$<2|HV 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

EDQCmVt z`crgy40u?gbt||<7Int2Mk%Q)-T1n>2xuHXXmeJ6$dG@1bDBd6ny;xlS(v$@&%3Vy(`Mb&xq8qLc(*sZHq}6>oMt3t^?ACeOA0`3-r_$Q@+<)#JL?cbgzGNVeJhWCh2l7lJgH1c z5go4dvI4WE-67(eeE%N=&UC6tSws^Oz}?3hoJ}oMacP?>bt`0Jn6*=?z-NQzT`!ywAQqeq=VCYp|i#Y!tU+9B2Wj54}*wrA8KNk%%`sw)Ebun zTAn`mb{IWp5`g%l#G=vRJSXnV&qBkit4PV6v+LVVc6uy_M&FdnP zo9vTITNCq}o?UDQ$1AqLDh5`(bziv2IH0u4!^7`koMBMh2OHbp0vTge9c84oZQv~qO}aZxNhS?lrGo#m|EB&m!=R@(+hiJytorN}X~BiIG>^_D zb{~M*(zg6GE2z@jKDE!2{YdWb?IOdw@ijaegMzwTlyJt}qM6@INOHqpcjpw|+6ELfRIPEY=(p&DeP>H5+Y^kMDv3 zI6D3njD$kdv$DIZ*`Korq`&u-ZgT6==sXak+n^arBJIW+eKk-d=#(S?F_Z4+W+d zqqgPEINtoaJTra7ouzf;iJAVHsa7)0^MYS$MjM6${{5xO!X!o9!R>2MJ-(cpR#=hv z9%b5@AsffqN1@^emE~F*+-X(HsDtIG0s3LJh)#? zr>A74Fm*=Xtd9~AFy)nQ2!5=uv$tf25>s4gYnxg3!<@sYS}|1VuFt3HCAM*KC%*;1 zbYC-UNnBl*ek$*|UQ#*mc|1^nwey)y;!4}E66`lc@? z=tuxNY4pTk04vzMM?S#&X3gc>8*r}{%5&V&7a!$eG_cNoPZ|%aVN}X-;nb4Tv3lyK z57b`vOr6-$K%Ghdx>+6aga*aggVgeG8*$ZF0l=?9XRE4)7;SNm;_#rMUiJ&w#Rx zILNz-@I|2V@bW80e~qiG5++giZ~x)b4>HRXP9}m*A1_BM{YN?7;^0vDU?sP7eFLo! znHlUKSe@nGKm-+sDXS^QZGj5k4QV`8O~2I_FRPT7Cbr5I%r)VapeZ;HVb4mpv^^a# z^!aCB1F^1O4J|(t*_a zkg%(yR|bvi+NX&bpKyd9W+&Z%x*whBcEtXY85Z7|=6(3T3nod%)||zz5>8*+hE9QM zC7e6XCki#Gr|dIy0K4J%`NLDwvF%ek3O`{z?vxMa!k1B#T?wkf=pn%H$3MU`W;55` zP!I=^TNX`vxl(fPKRP%tdS*zS_XF+dND0pkbrf(`BE!(}IrNGHtqsu+ zrVjo*9bDLQu zbrnp{NExAX=7vh#FB{v@C%W2#qe9i`tPug-3Gzeyw^2dqQ@((UgM@Atn)NyR-)J9X z+XRt1(poN?nC{_1NTR*Mt=PB%3eZ{499qMOdOl4YEQ8)xY8L^0b#EnlD(aw^iQGWb zdlT_RQxDI2(|>S3*3pvp@=C`w{4vnA1uDc07wei7J30UJwbhjhZan~sC*@)sgv-JH zd{H1D7_f9{-c8<2VcQ)3WK$kKdLNTKP&%VC@;|mXwpIi@}=>B&lA4}hFJ{$MZ z=8Y{k1yXvCNA$up!eosA*deu53d04?=az4h6R*`n>qiOf*~A4sO%n_iUjBW-@-mXL z9^sC9B^x)W%4%u%dnOqyFIvLzt;)V3$xzQ(8|RXGy2oa3NyG*nF)R4gxl;!E2ub2a9S{kY}H)*>VqNLs}kS|hBy9RBE?Zg zYt_rktHY4byS`Y>xs2szlTC#+vD|0o%KGisPE-fN;S{YvH*|3fs;}v_m&LU_l z{KXa1m*&R|ETll&M8^ILIxm&QI{&;ryhoGiDR{55HuS%1@hC^2l-kPR(5r5kjEvR< z_EnC};IPyTY$H}3z_QFU^fCQK{e9XllQLUzRUo|Y_pdW^(;`9&IEeM71NDMMq3q!E z&`O?MF*|*1`rDtWFI}u}OS`-alogrm5>QS`?vefBOQ$e&EsWc6h`B$f**Fq{xp7* zbDyP$5>!{QcBo^!dzYo-&ITX zttj$%cb1o(<@a`2H*|bawCr$EFr!i1w8NNi)+Yy}rHCmdJ9O8_Z}tZPnTTic0#m3I z!$&&N(R59o5j%>;`QPPPFJUAyw3N=JX|{fM*>V z((GgW^%@&y>!H#ov=Avvn+(jp*T-Vru?84}pMj>CgN;p>0#~UW z`f%5Wo%3C{$g^tcpom%L^2sgA8QQQ9?Gm4a7hVdP($Qc)h&$BL;k_}E8Ue-x7;_wY z`OjtT(uUUBnpBKK-|=EaUFM71J%2jxH}!RV|G-T1B)PVlCwQ+uvLgD__f?)hsC6=E zY=ces)ZAW*cQRBnjVt!osNCc+HyxM)YXfb_k^-@9Ky0VD^p4;X)Z!A|Zob*p=F#F{ zhJ@*?4JCwW`-L5YBjj81Y=}JLbHB%7Z7(c9E$6(kc1OvU&xC{BUVq7n^>``RZio&l$*_aFEFbc}6oHu!FFJw2+*a_IXAGKBEm$2Ujlt(A@CvNdG2NGiK) z#85w6V7X{%5uuYqsHeSB_zD$|F3x#(BH2W(lRIHVd*zf>dfHTFU1r~CZX`AbvKOPh z&?lMccVH-X_jVq8&kiXcAI-FQ4P6&VfY5Zy%$yFm@r^>pA+@)#;kJ$5*F=@4;>Xv3 zad8@aRSuU@U*{F~v>8AVa@}(s5^JhnY!;s`EuG6?7Ndhr08-AgFCS5@go8^Ue^c(U zftyqFFt^V)f#doOUb~AYmoHtzy)pm^9&JQu(jU0$cGg2Bw7p^E@$KAYyMq1FL{-~5 zJ_v#4gG$w9gtx{`%I3(<(FrhIwhDvl&u2&^Wfx-9{p$6*CXTIM)3r2IIpok-W%2)g z&4BE)7^>AE5VI>W0Zh~N;Xt3f&6Q)2!m7l}=(pK(-IKT>?5nWEL;2N!L!@$(y(Y4* zrmWLLpX9|Br@`h^reABfV`B-c2juT=VGTtf#@Vbsi=F)s9;KeMB)AF5!(lzN>co8| zw!%k^1ittFv{#|#dHqUl)@{n8enOjdO>`A@9f>Q4+8qr;-aDfDbTdi<`PY1aWdyEM z*i|_kbVLX45+pGav^Vqzix{wQ*JW_qQDg+y?#jbvLTx4h7+$`70x@3`& za!33u1#ewzI;=0Ekk$6Os7P`3VX6y%kT$wRk=RE$FNk+zHH@9BJSmll6Jt-R90QF1 z!5fL-eW(T^{^OWWTg}~FgZg`=HE$#?G`v`}SJXOYVsjEHz@yJLO)2{aFq~etm}Qe! zdEMWFBln+Z)BzgV#-)A7L&xiGEbCNDRTadLw}ENEgCVnAx~Tfa5y*drYG7$03C!u> zu42m`%QzmML|i>BCEk7C?cSZT+6Zh7`WH5;O9>{H^fY;DIoN~f4H)&3 zYG3{y)F+NZcz&KZsOi2w2!ZxoF1@%2FYLy_^dDW9`roT6z%V>mvFr(0<~e z!p#*I1U*9Q*45|?pFml-xN5>5tbXfaoxaqqfN5=oTRKpdK&JlKql27~k=-`r=JGMJ zu)2-;JSIsh+Wh%xW;X1n&?cW61wnnL7RDJAFIXTL<(PU%@gqeE7zxQAW{;0-N)HFC zyk5$9!v6EZECxC-lyFoZ(8F@IJk~DQ78-x#b!arCSzF}RDX;Mu*QgN{25rE%KPk>( z+4+AnKY)@iclc$UQDqF+>-6rOy5p1u+SJVjP(@M>+^1Q7jIii!-F9p^FylF~Z-~Zk zaHzB@2Julaz!4@x^CIB^E))Q6pz-F}f7gmUI@3NVnAne+%?3~m>&%Ju$%$og1su?JxUScyKOE@LwH&~9N(!+l9h>(gyGwx zr7+2>Dn8?knNWX*QxF&Va&DI;alX?OQn_zr^^Qyr-;~|x{kh!5b{ul<{0QFt{QjAbcOuMrZn@j z$$no{mRR#BUEods&ye)QY(4xk7K+Smv<{bQLY*0=2ptec7PcxER`r?SqeN9N9ROi6 z%|EAmR-vBi$6ogX4chV@Hi0LoD1+36mxQaW1TUXbAgIL&68FL-&^g^5u`>7K;S+Cn zAzObS$9#Yc3y7C~I!v1{4&EH5T<7?!@KLLAP0i{9r83?eh{tDGk|nCm8R}C~i^z@p z*h1+mJ2e}gX2J0B3~3bQxZduO`3x$!d9SCKazf}xLXbDNQ{MWA%70lkQ7nCzb0O~N z0LWDEYQQ=(%e50C`cQ;H)H)A;xKr=SJ2m5-?fb6rk3jTFi^2`a6 zdv>7uHJAORh8WFb1>NZN#Y-9zCj!aIR$DbN=demASzf#PxN)=DI(0$})!MCA##)dg z?_*;K+!ZSeXm7NaZZTVNUAfV0MyFr7d$vG;aCRoG0vd(NP!knC#bB-jl$`hJpvr+1 zcEjARiP<-};p6A5>WnJA)xJXQw7!s{xB&QlM^b1nb~3qn*`q(#?exoeGPYkW0C|8+ z_S1ED57kZF+8Minx0U@6YssIHR8j)lGr|PW+naEbM=*Am%20UTg={1oy@CVTU;}Tt=;9@C9@?HZDgVv`%~f8hhv`u8MG0?an@vQ&vo4s=A2cUav^C5{x^K}gn{weo zzZZYFLVDG+q)W>RWGLU=eizpD_Kpk_H-)}slx?&tx3HXLk(^7i2sAxf&HxDKHmV9( zJ4{TQha9m8H_zftKoR5TOaqmkE8O#VN*OoquK-Q2Gvu?EsL=0Fl)9k|(?LW1BFn;?#{=(@B#*x} z=r!t1IH}89Zde9ubzoihIOe>!TjO3>0k#_pRiBqDDCJPo^a=VTJ1m$z3{#bWjNCj#o&r#rUv4PlE*1TFIG@Qsapr-Vx z@|QhBRL5;OG@&c4axcgx%?DKL2yoEiF*#kt7=N{`iB-BlUmv-oBN5s9R#UoIr%+DR zFoAV=Z~K*#Q*)BV95Um`W_AV2uxoPDj+Bah*)qKZe!2MEX7oeT$^qSq$49Mzb~Toq zq&MLY?f@KtD`GNUQX5J&kgD<`md1Fme3=QsRIi!xsl4}p;}qx1W8CmR{!CY@Bj*vF zr4Vbjb_(t=RN|vcSIfOPzh0o&b?l1yQai0YzB5-tAE+|MU8bu;Z$4|?nP~1ZwOAv<52jGH@gMq z6i)DCrzL-3 zhS-u6=yAf$oW*6@yyH8IR_vTts+$WAFwc4Hy|B9%CNbNosHBXR({WCN zF{uvC`-3}{8VeiuP@mz>SJ~bH0NU0=A#?$94V1E3)}|Z7M(EJlZ=%PA)iyCmW)40+ z+3wMf)_O#MM|bEFWhiDLBKIl9rWYyjg)or@Dj}csPr;JRXI(Qk`WDcp{M}tm4UCTC ztc($3uKYUux8A6X1=tzMW@lO9nytF;wKQ4>g*rW*?^zS`Req{!QfC#2vvHWjW92$Z z{}_Vz)2iyb*XoMcY{y#o?vgoi%x}0Iz+{O|7~#p^NMO%p958!ym=d6~yDF(KkCouN zeks-fsEPla7MP6>#oPc{D>`qHYCUe}RGueZk`}`FD(xVd4)(C1!Im%M{LE>Nl+|K! zWQ+yz3IX8QOz!LX`5w)u{9-}z-$igs+evK__bCwoIel|97OVHXCG|isy?};in(9M- zY9D`$6Z6um>bZ6=b%3!@-Ir9vLb$fPzifJn-Ln+o4X&D+<-PJu1lkcjGqmH8+`U!` zM_I=q9YK10u`PFIU&Cd-E!ddyG%Xz1U%U%+QPH-S*np>MDHA5@H|p;%!JKOqk$mQ! z0-;s4Td7+s5LK)J&Ln#p$TMQ+`mImEIqn@LZ`js|kQ<;Zt!ICvrc04;#f?TihpJ7^ z)mL_w3)`!}Q;RV13*BZS@S_w%l)tld4!A8#>@%s|qIFKP{sr6YlSU0W*#^X^?uW%* zH)pya%Ymp(AltmiT=5ig^;ITde&3p2*=WWa84ybzeU88rfg|T!Kc6LpOzp?tpw9l} zlH^WNY-n>1d*JC=M-7QA`}X;Pr+$lzJ3%?TZlA$QYPmZ8pNBi*Q!i=XT^aFg6*swu&cAJrV+ebLD;gvx{7sL5HCp3#;}pvS z%uX$dYE|ls-Li~nx+W&;n5s^aZluR`t@^7os^*XWH#qa3Ro-7}11Xd5BZQksmWG%J zQ8-Aq3}@#lU`&uMb4J>e?)G8b^U8GYL%M}WFdT)Ob;$<`hxw8L8!kypx6)`5jL3ChWm@O8dUB1_XASz}I! zlvzvaei^&#_LXUQX&DQ1SYcQiN_hT`<=)z*SH-2)Rneu?1rO;AzmV8rQv<8m@H&gG zE9%W30qi9on!8Mz3Zk13_0>o%sfbDWOU4C786Hnw zEp#_2<@54D_*$Me4Xo>^zfGYfkc|;!QVA*7ftKn@b(L_pb71dU-yHw_YOw2WiBrTl zP=ciT8FsV3i}9*>eGX-IW9MA2v-%e=D`9h>)V>DPGPQdin-)-MrjdEQQeSdJ2)${0 zqeO-KW7wYTKyNmr2+=$;Y|M9rf}#(0u96h2tidN?&%Ec50hhlJupO_jyo)@Ygm968Hqj|%yX5sLkRM(Cy;Bwf85w^X7$;;OU9j4tg07z zvS#>3<8Y&yV#b!}&qpnrbJx~=C61tU&&J zBf}`!u)Q{N5j~=W0xx$7FW*(`9Qec9^>9uxH2lrsch7UZoPc+k;DvV}Oi&{={~aoT z39tKBhG5R0ytRt`M;A0&&E1SPL;pt?qeLwnpA9YyahfKq8yi!(w7R3vC{{)tX7q>b zgwg^N%2dy$VB{-bS@&&Lgli+7#OO`N{}?;kz%bp?WcPVsc+A8oc8E_FWOe@iOeD-g3p$eTx+=oM)K zy-jVaUQH`t!D>d}<0!AkA&Ww~k-(8Mb{juml+oTw#ptPh^54={`$l8EtG&{+o}<`R zx)W!-Q<55Azn3`v__re=D8^esqMmNm4w7pYcNDN3p?;usdhRJerD#1RRET+!_d@x_ z)L7SB4=9F@namH9K06H{vh7bQM;%F}C0vHCn^??RbF>UW5|v~! zN$Gf64ptj%6;yuQI}ND+@$c*+t(j2x-Bz;TSe3xxvR$f-+Z{8sM+NDetnCU6Li0$&t zf_r1!KB5J^$}(7dC(~Qwhco&Mdg@Uut=-3u%Zq|H45h~M7~4pn5CN7_<1F@>HO35a z$yL2_71V|*W%O62pO4&+nv9gZht;X`Sto2{06h9Zw<0x20V&L)Y&n z1RU*OcyZg~V0Rc6(>C-nYnEje<56G5Xh9>#dc1PS@(-97TC=b8Iq0;6%Ux)`=KkU4 zQ#8=6Jf4k;isst%Ny*F+2b%o%_}hH8n|3pU zrg6VRc%E%tJR=NX3gA*(P55?A-wmVKr#^0>&~lhna!AkIW@n+gPPtx&RIT-w><5x2 zLf^gy84Sh~9hZ378@m#UGtB^t8=T1O;Z=19w&P-ijMQz^zclvO>IN{vj{DuRSE#G9 z?zNPb?k45fE-EmYjmV0~H5-tjhBag>!nt<4G(f4SQWC(@#Mkp}1P{#FUn1QT>-5Qk zyDj>`cok42H{q7Wa#-=2(_&md`38D6j6QtL(QL4by)n+Z1%**ik?c?{xt;lH7a$pmru?Y674xwG#{^0WLIVx9_96V zm5&VPpBJ*oR-41csAc&07T~kiW^%hF+836whi5_h+bL=B-fxJKm|R#Se$T1_Q|JF9 zfD2Nk5ZBf)b>uBH1C`v!8;cpAZ+bE+?&Vf=yQPjL;%0YW&$_0zM#B;Zz)0B^0{dpL?{+b7FkjmWH%VrFSsxG%=b08Y6JE?Z%=4t_Kz5z)d=+yI=^!r03}BSplPCzp$LVDQKvhX5^D?( zc7eC1FM0k=!rkubg46C6ignDD8Pp+J@#;7eAXP~!QPO@h3!pG&EZ!u1Qzk8kc)(&| zYsBGZ&%mf=yeC(sSL&FTlqR0#zJ3H6sXIX=njke1;sxRv6*S&*TOFOHg4ie%d#SfG zi{K-ck`S_fm|64mr3g!0V#$;OtqIr5LWRU3y~N`yq$0iZ(aL!b2N{yboO)=RAyq|f zqFwX&#--y#V;j0JT)kiJ*8>O>2{QC~))WKy)|M83@CW&9uP;a~CA%{=Q)5`+eOV*I zaH$mW3nAN_Scg}>QXow3+Ywgr@IHt{XV5ERKrR>r_30A3)RNA;;NLo?=H&{vSZZ!C ztO_sJ?-zfP$a+^b=!E{}DKm+o0%pW_ONZjTd1JbO=Im_ww~Ie^*1D}bTm@ufBiFPl zRFQ?Ltl`&xYwoHWL9M!9HQ1s3zUab=+ggSzu6iz8&En-|M<)7+DbT_vtPxc6+fjnM z*@MO+zsB4*t3-r317nswAllxUkBmt1o-ig;?cu%5dg0BnCB(by^J%GJn!-7R*_WtJ z%8n&cLCSk*!0=y3Sd_6zkP|5UI16TC_x3{bRm84R+RKzbf7yN)k*RP5%apD* zeAa*02v$WuoHq3PiYWC~dT1B}p=m?reZ3X~=<%Qw3d%@o>MInSzL!!1!{dxG`@(5v z3xC4R_XSZIFn4q=x$mIi?}y5pNAK*S<-TfY@iSyn=jr2~5t`>jsJ`j}57t!_Hbh4( z;PkE8fBoxqUzOMB8WGB95SgdmS~FJ6#UnpAB#a6(%&nJ?fBbh%J`~Vg)Q=S!Q~T3$ ze+LVVR+PxQcm<%`wU17}t>bT*{s~KtJPw76jN0hINDxl-S(EnP!#J77_%n8M;nR!ebyNgAz64GJTkZocmOl3CfLn z)75kqgtUFPdYI+QwzdVba>QhgmQ3fY)Z2g}Mi5YzRauNqnW`ml*#BBiQ9{U= z!TM#MHJE<&lbCRAE+qS;1#LZDBusjQN@zYxSS4gE4~5pn%tqh>xM?Xb!_3;{^dUhY zRyVr;I$e-B-P%uv0t&yG-6abD+?-2ApcQ&!r~Le#$0|HXxT4Y^Ky?#g@f-X=cv|cO zVZ_p#MK|0fbS)u*6IOyhiagW+l#npnFOtkamsZ8gIIz7n%CBlC1X!lHq!wHBctC|A zWJjRCABui^U!Ql9_?S%n{=zz9J|s4KJuBgbH_glKR_Xu6c)PWF|n9)pq^Z)iseUoB;w_fLz(Dt^CHG?}&)bCoidj=8{z% z1SFa__}r0%-clFMx1aOfphy2*V|}DUyAGXZk{h&6WuyBFQK+y8;4EV|oE|M+mcC%Muc z=@dj97=<8@a7fqvE9tnMsOo0N!Wdykg06QbJpi{^QCuSo_W`?Y=+q8lNcD~lr(TUx zCInOhI)92n|CUCM_LS?P(TsTsf*E=MpB6pwR}}DhkT${SziZf%^`ZTm%1ccGbbkl0 z)IDGH4fuHO^7_A?a>I3CE!B9E$I}IT>%#i{;P5)358^hXj)=PA6R#U74KMS#U@4tKUBnGp69j*2SoEyJ>NeihpT;lqlm>XLqTRPd#zsVkd(LZxl@;n^`g;+Ebb`C4 z<`e^8<*bi+7>Y$)zVdJIO8#tAhD~6QK0#x{u)4b|S~Wk%rn&4$LZKEjalY#2_g9Rh zdhsv{|fbD}VL3qp{u1_0>SfP;KnjxQuAfgsf zoQ~{2M1ho6Cdn;yt%wI^3C!t}{}reuN?a-MVQfp307;&-Duklv4)9Hx51xCVBQe2t zEhYPU&%SMSS0MG*<1U$vosz6bj-eOYu$~B(ogjua=)IPbb)VNwVa$maMhmqHox&z; z{ed&9ut*s$Fa_M~t~SSZ|1Y0M?6ieGDph-O6_;~*?+V=|4`b*d%Q`I{ZFDC`h=}w< zX$|W<+mzp7uwg@c>G8Jm}sF51pP*3;WvS%ROGhqrc-Tg}0)PBtvYZ1=dwKvuC2 z{IZ11s~K~P)FRDarZwl6;(Q$@*MWP<`Jc{!_c7nrG+YRMJPAXVy|3Q|V*qNX>JbIc z*@~0sYEz_9Q;eE<%;BbL<)X5fu4B=pa{qgZNHK-bcBpUF!Yf61ktzCCPNL4Bk@?tA zLwf%}lWGW!gz2xR7U3DN;JxRWPbgV$DPzm2uF-O^I65871dE~|5ZY<|o4@7_3oZ|D zBhsm2RdPXekk+*6-|!wOiu{rjeV|Q%*erCr$Y4!zJyWp0o^C?M9x+UA!4);55KVm0 zRR;I*M;tNJ-mYm*9y6-E8Kl97gWsa$u_V}fBh+~1=DY5OMG$Qg!z8ql@O-qM$`Kr% z8ccWw#zAbU5}c6Zu;_W;!LW2E{>|5nk(Hl{lnWan#w(ifRN>t`+~dPkihaajbrpxA zw$Ffww3lF3{b(6-Uj6ZjSy`ck&=730-?pPjqtE>#XW`k zn<3R1(?;XR&0(Mm8S;plQ=ik1o2StW8Yb)XkJno|>tIdmfk|cmUF(G+mq-93;+>Lk z2$9x`aJN52-I2(%*3#aZ_lhuvF`@VdO6->GOaHYu$PkvAd&sk8%hF7y(@`;=;j{#3Ix#C5W-bwXj%*Tg#3;Za;T`_veaZM;L@Y z+EKlxzD0$)AYSOg0H=%LGDEq1v1FQvDT;`X_-MAnal;nA{t_0~zw&@sl;WC7_$6RO z0nQoQmdzdnq`W8+jQ5%trEdtnrCc0#|0-S4DbA^Bp>LU%vJ1Y~{Wk43Y0qXxIt+>* zby}R*9x7re=^$z+phA&Gd<-z$3xavmg%!D=-0YV18Joq3*G-B&wSi5j%TE|z>+Y8_ z{^jF~Bqlmm`*qV;88*(WLUEtuG7%d26t#@c^&C}g`7>Fq%x_9ONGNY!%E|$ioRn+D za9E8=%$0x1@-TwMTbh!w6-R)`oF*_$sb#Vo*Tu|Fr;&wJ@^u(w%{ztAZ9>%kCKIns zLw-b(c(q&`2Ed3o!i`AHd-#ibHoH|&wCAu;c`LMd74U14F7R}VN82c6^LO2JuKtd8 zqeyB5|1Zv>ejXY8YF{|(?5pjR~;6lmYPS?uIjmuqL!9A zJmkD7_#*aI_>6!AdI?HB)lD&DHb#2M@glj?f}N<28(ZYM!#C zgQ~(*h^1)k?K%7Ge?mR${?u$U4!eji4Fo_n%SM{v9$~J>^$>B{fvx+#Rh*A=ODmLF zvlVs?zv^Pe#LDY_7R;xyG9SM+^)RM)lC{&jfvVE5Qj1tLPYRhYQ1NR^JUr3N>~J{} zMX}u_jhBU~kTOemJo?rAt;s9|N{hn_o!kL+`AlzSnrS^xUO43tOvGbP$wNkSBC~a; z4kq&7CL#RlkG^SX6V+sH{D2|0M)7 zAvg&9w*C#{f7i;=ALzZ2dwhwyvI*n8N+b)u$4f|goIWF+5LO4&VkSz8AvT5V1hams zFu8ZpPPiqr&#Ld6hc(3fG|43ja--zb$o1zfzhW2_ytUV2`I^r9Cm(>+CX=+Thj|fX z66n~{A#7S)Qz%E7_0?pNukAsAaY$duvs@V}@cpN!X-eUW_OxZq%?WSUUmyN=O(0`? zF(N2_0C4l;JF-V~R6F(e63ITZ6a*ht$0K5#)jZ#N zT)!h*?>TS6T0Qfw1(?ljz0*Wt`N54`gEV`{9=a(~?1pgIl)$6+<|GaR1DTrA+q!*o zN<$y2RCaNnJQwK0BeoVS9YF^>#t7zG3@{s<%UV*wF+8zBg>M`YgVv*E*9%G&ljTBGtVj(9ab4J z&&VXZh6Swg-Q6jo>3-v=W`@1_jq$15h4`h*JbCb~hH*WzgRDrJC7#p20!{Hzi>J8p zH?@3Wlb21z>=~hRS#gZ5eB!Xlb?wMY?OKs|4K}>F>`Z-_2>t2%O0Mm>f|HtU-HwJf z)@`&Foa_lj0w+Y zNKB`GBqILGeYJmuF?C3Py6f(9q1?#}U*iLPTh8*R^1llobeU^!etDT5@hc|&HlJL| zw+9<{-mumsckidpCt?Ft-69)ZC^hUwD{R0}2rO*sY2`@M~g55CE3b^oxzurr}X)YWT zN%UwBT~v(81({)m|GTE2IPt`!@v+grYvCSiN3mo&5{hsTCbOZY;c%=SP#} z`P1C|6qd{b(m%`E)x&rPf@Y#~%`=-z4p<8Q9E=E*#JHc z$Z2jr*1Ex`balnB1{N_f+lzSsFqCL1VQ+8iZ2iE&vi9m&W3i$)ENCMS!oy7Z@7i-h zz+yMSzne)Ri8kDVqpnU8rTO?pGx0vEi&5d3Ys=SU)Z8=M{^^8|_t_ij>rPe||GTyk z*e#P+Lb9}$HF0xuMWox3{4DizM`o}Kuataoq^xGS&V%-jI+~*l%Z?j2WFEO)C|*9B zM?sw8x&&v!T%aDx2^|vEdu>@$J0Hf2NxlXrCc@+`<~YmFr!@LPJ@1EogDbWp-j1KLH_%3ey{4>g#+&H0Eh%TKOtUn%%~_KN&@vWXEZt=9 z3LRD#{##EdbB8;16Q0T>@^N-iU#gO**Nfu1X~}9~Ad++KC2boK*yKzY88sl@jS(Q) z#CL#dA-DGh7Bqayeyy<06{pu`Y#rl|xjy|^0W2@-jdIoFk1n}&*AL8|Qbq+W5wo0R zB&EzORoAdid0Z&}wQy@@3qN73-W^@YfNq;pSbkxv5Aofrv|akq-Y2yL@hMw=db+r5 zkanJbmD;6{7Ux7TS&bsAleAf`TGB2wevn+&>ibt|zx&JF!|t4FGn}aSFSBl~91hM< z3AT0RN@?|(Xa79jZpJV<6bgNk;pi6aUfW8eq99zO7bu&`?$kogMxt&^cfZVgC&n<5 z4F=j@*np!11+Ok{B00UjE`>s_(CD4DlL)AXm_J#BRm3hs5B#{3$9q0*y!*3j6i^cm zETGmkwc_7kqqf($92N@SFQ~;@%-R%)nj#*c?5i1LY?rY%;8(kP#0;-Rtk<$2GKlAZ z?T>)=o=}>ASgHB&L4K zaZnX(wEqn2>i`?=?PA6Jfl%mVMb>SEl$H95@ft`7G^Y{^xGJX?$8Q#=dd9Sz!B$Q+ zSgg%1)WYnV8o!2WO7uU*wHsfbk#07Lz~C_$j*q$??{bv(xbt59NyrQJkjP)4MTW7H za#;FVkJg;-3(~uIyql$$utrD(W-Q(wZ<4oH&Pq}n`Pbv2?4u{n`C{&W_4u2`EyiUJ zZ9!5MCOgcShV19dNP4Tee5m`U?JGaJpZR5czD8$(re}_vfu`ej%R5tMNos7-8ZsM4 z%!@GL(0Y>2QFA!!YTs{%rJWGu5@+5ojIU{q(;}KpHsuVHGpNVJ`n=VFJ@+94h~Uvn z5l&6Pp7koIb)KdP&DmHwX?Er_1W90Ju!<^9VV1SiRIvc6FD3HHH-e9Dk|$OlbUdxu z`IQ?{Qwp+N(Pgby94M@CMw>!D&g>1hLNpwVP9q(}|FNOXoaEE{<#dz$aHorNMnk(8 zwzbjAD@0gn#|L2!{}|TO0zufKO94wy>$3+Ph;e40PDJV20c?0wnmuDlwJ_+Pvd9AM zgM9VD*=Rt1R<4D0Vt%oH!SQcJ*r223v@i(3Wz=3{rN=D&H|x#jNI}Wr;Bgjm8tAo) z^Bz2lqTEs3gbl52wbnT}EiOX%2x+h!yn98l9qFcNXJ}!#W5z~Lb1;IoEs70#IcwVAig@78 zq|B#9LsR2dNhQn6pS+_M&3r&UQnM9{6*GvnQQvyH_LyPSREIUDNlm<2?23HOsVJ!e z?->RGuV^(;e0c06%RZn~lx5eHlm}%PSRcd38IZ>Ad3x^uOjB!RHPZ= z_ppXP&Q(+8#ey>OS*j98>}@xdMYBaKqt7`FCASZ31dD~sKi8E-Kq%=!C#PPHifgmT z+Z3y46_7FpW$4f;1|!UOXDD(1zZoRpwo?o7sWFfJ zd1$Njo7mlXmyZrcYdJ|{@P9g(h#Po#ua}9pBAf;W9b|2J*8>&gr!Gc-yw+HuRT|Sh zA_abuwCwIQ%!okji|B!W*G9FU3)~4kDPKyc>jl8`{)0D7JR2ziV?4^ ze0HG!{jbgY_YSsW8;Jzl){YvPlH4^2YElI++Uu7zU1#SjB*bNZ4xT^60hxbua~Bk_ z&wb7V&%TTJZQ&aN#{I_1p+2X@C~8NqvUFT~ZTI?X%*klY(Vd=Zkn9pTuViK z=9c41A6t6$?w0{C?h(vnFwM|IPvb2!DGewg3h$J1>3nL&gmWZWW3l>QX1&9nf-w(( z;fO$#*i`{%`_31IFUF{C+m`&tC3mEptYCSkEwcet9TL#8%SX_AT2UL0%7aq?onkDg z7ay*rUL~A>k*FQs#!dRLXI&SWxEAoV8JlzZZN5tg7AfZ4L4PkRExe=#h_iQc04rmL ztDnBx(?D}3Cn(*zBm8hpXyZO}N?&y?G)E#b3Wd$9;`KNj znMR@7A)j9LjcdCvxk<4$fX~S8^M}Z4>w{uK_EC)1Ba-^_MiW3E=fF{{HK4C}7x7`a zho@{zM)LmZ#D`C{{l-40*}pj)CaK=kA~&l;tHwf6|dY6e*xk$ z&052y2WdkYp}_&w1}rX(o@4JfAaU32o~JVN#O+LyAP1rS5!?*~w~FY?pbFa`urw$5V{JjEviCfaj{iKV_#)J`CvrWdrXrBz>OOjoBFlE=AOnbT3|zCcmvP&tCGa z8?PnnSLwsd2yUy(b4Gq3jE+`z{gFro8 z@bGxbe{mWXLGPzO**68mJJFELo^(vtHMhIY$!uoe*`MURn$sAyTj9u6PIA330N|iy zG0R!d(5CE6+OLp*a8%Ji=9y+t*Rb~&?BoWVW{=M`OHkUwI2d|McIB?w%D>hrMd=@k z^A6PcQYk&ZfHa<8Z7ZGl0zGp0J+p)G>j8OO>Y)%RdoJ~llF}%M3X(r{Ym2)6=vhOw zpmD%&-)gp1%7GEs49osjwvTXOnXI=KUjHH`Ib$u`Pq?5OhnMui{^Qq<_;vRauXeA6 zEff;%n`|S0CZtlMkdaYgeL1|0s_tCIuFl%Nt$P<;V&8#ZSgaU3M7AZn9@M2E142C` z%t=XP>V^w9(zl`Y1IVk4GwUgrILkYH_hFVsElCFR4>^I^>`}&Zcy!jFKmF4n=HNTW zL(cEaGXB3m3%P1EIXEn*FPJC^roo|pwvqqwFoxyI@XH_6H)P0u8T=|pCw@TN>~We4 z#g=SzqA*oREXjC%sY|T0ai$ppkVpy-G`V+VI04O^`#ttxY=ST6h-y|563ov%ZcEOqWH(_~0B?d%};(Q+Mr-MLhg`8w}P zcsoHC_sGlWF18keO-x!`fEg7j!2e2+!z)az9F}9$Hv5)5s`#Np>tV1YGy`j6RVb+> zXjsx06LNKJj`D^mBhyUljNitY&u0Z2(;!9*K{2P3w3mWo?#BpJkE zcm>K+`%XVjA-kLWn`fONpJsTF>jv&$<%e$6%9{i~^m}-rRvO`77etj6oYK-6!fl>d zWzE#Lt!ke?&+agB-2IbB=2Sl2#Ef}7MbAT7 z3a!#E9{1+nDHbqfdo1~=Bt1#=wNj;^$IX12-`z~)nbnrnICrxHTv|Nm6Ib;dD^fUX z5%dv#M%mWXh*8wV;$3X#50|DT3zP=X(b3pguX+2wYo)Ic-3xv)&It1?w=gSZHvg-P z)J{bor$Vyl8b zt5CRC4H>hF%KYL()VG=q!@QB&Ac(|Cze&FFE^V9S_hmwUaZ&@H_z7N%Cf}n0LU8|G zJ2qe%@gfrwfDNDjyQb`SII8_4^EA))!!Tq$6l5x#D>VP-PO5U&_u6W=IrqmS>231u z_vI(l4*FTU8~6?aZZ948!Pl~5?Vcl=Xjkd+RBy(B&oMu@3`^4>!SCZ8z8t^byMS-T zh=&~Be)^5(lF&(kzlmqd)|O_!EPee&@-Fx0tCO=|>I+*(vB&Ne9IstO=TJv=6X#AI zTebThlJp$y<0Ih#*_bPo(|gjVYI3hOYJ6X4jmY=U;^_w|6o-at5KXJT?hn_NiPaO= z?@9(r_bce0e4B;8k-?!NZ5?1a>t0<&92v|p0arY%Dv@z1C6TMTuBmtOWf9ygV!|&= z(qzemSQ~fIvC+t&8!-m#8+YGN{$+WUQ8yIm_mAnbFSlGHziz^Yc(dR&98A&9l5P1} zj`JI=vxjxHMFn|*^JiEEW-)QO8kL#UYH=@JtzG3!v(C?TCqddwudm|%yXIw$?p7O0 zi{M=XKknym$r!b5Qle;rH*>eB_2YO$0SO*) z0<1L;ma)5>n?H9xx+F>j&Qi>5i^7buZ|Y{96Z%T-sKZ|i+}w7@{k|bzt;4&jx)eNQ zs%>v|?Z!3kFB~*-gZhHWnFB9i>amAqSClq{VSS*Oh--6VoK$TWFTk;77HUw)nvC7v zDrj#%oAq$33ADBeLQM|kIgy0x5AKHE46iwDlBm@CkPVSxa2WUUd)K6Vl-hl!(U0zaIC|9I7_FKf@s=1as!we?OVZo2M$v4P5}cK6g^P25S`WQ}i32 zqATa-pD72QJz4;-U4KzsJvl>NskhnP(y3Tvk=4{?)hv81pF;Me0oGGO_n^=trq1yZ zho@58Q6iC2Y6dv(ACeD=&-kASJiMMUu_)coRH!}BO{JlIAp?;m;d=kO)`CE-9bsvE zIMH#^VN8^6)j>+jCp;g$bbAd5D_mCD1HDrg9KijK1b8)nD6;e;lr|V)kSuRtw*N}x zrsh4r-@-nTW|9$Smik_KQg+xYhF)W@m$ z7JaUET5L@EO#0F#re$jBRj?ktaYaI9WhL6JI1B|t)NjU>% z6~A)sKMUZygWXX!RtWsXDe;w4MqZL>-<~a5sw14W#HECSLJ8@ZlTzrb8m=XcD|X)m zjqOl_L=YDiQ*Un{y6A}`8jby5vU*xw5Bbf2J?iCS@1W+5!<(oNHG&E`=M_~nH0cWp z5NTz@LLG=1P2{J!vYE|LkOk&0quz}37(aWq0Sh5zD0Pi6-x+f>0FSeG8oXkAL8R}0 z07hHqrX_0Ft>+DI&q{hB6-Eu~=vyNpv^FJRdicb?bV8EOV-bZLQS*{=eU4Z$$)1>p3dK%PH#x9MDMc!Ez!&u zv(f>|vwtWT0*P|tS$5LdkNIG%S+k^nyXo0YV-1Tp^03T4reCWxmxhGj18`a}Ux?lU7f6{=H8Gnx#&XI*T>Tb!|-L^Up3$(*OeZ_BqkQ@(&q29TSV5_ISX z&(r>{mR`D2hB0tbiLtW1ciDP3eR;88qsg7sZ%rWHhq+sa0md)G^m#^>9XuoVm*SD* zy&cDP!w=DB;!@{MgzB&xX?}Pw0W-o`zYMiK7&~pJB}8KArIfRhF{g$>lBb2jg%}L} zw{4m$B!DOROj_VNLiku4e%X{o>}C|(s3s~2YuqiEsa=ojbJw8Pp^YBAm@)tS+v&iF zSdtKR3RvHpL5e%jKl?p_K1}(xeK~{t`8ZfM*+tb9rl?oQ z@BcQ>FSC5(wpNI2zRTo!z{PV%Fp!TR6RlyZC3tzWJMJ5Ld@UzxLpx1NB1{K0eb)82s)P{7c(|C%;iditF71m+mdm*glm`CzI}G!MQo$Dz@Dz2>Jn6D znjc~o3VARZ>UgeYn<4Cb03y!Hc#u>eaw%Q|@X@%wFQoM_H8e$tV4+^b-+pD&3*;hd z#~rTr713UbRXCE;dbIcm`tf0g1mBCkmj7{d)?rP)ZyQGiq`O-}q`ON+TDn_Gx@*7y z=>};fRbs#xNQ@3?=?10Q=-kK&gYUcF```ZAaqM_@KlgoK=XIT*GZdN-Tj$W$q0Met zO6DqJbx#dXPKB_p}(Ij|~I zUUJ*(I_b)!qorhpvn`G0z-rXvkiZ)MQ_!;mlws0~!LLF7>F|@W^pL_2rCjoomX>^d z#y%-V0t6uut_+JuCe`|Wnq77_1Xh1S3B(UOzV0isz)%rC@+b)tCxxZs2y%GswpNQO zXieO-MEmEW^+ANa&WY7Jqczzn%??KqPam2jFl^(bmI6#~)6q75g9MSb6MGa%@eP4n z53dF)VvH*DtF9(XHuy_jF7*)C%cI+lP+f(I=}uomdwq<&&=^paUB~Q9MecuSG#R9xRL|#F?@}#+P4^4VKPhdMF?6+1RA#`!JXzH!6k6l1R!L)ei07fwf((J$ zl!F@If%5H-b8{ck&(y!XNVlvSDGUshZ&+;(vG6{@m}hXXkeEPG_ea_paa~f~9~gPK zhrXdvc7j}YJ4IVa!=)MV$d0kfpjmGO&U&KuiRTG<|e@Ba8s)0quu+LonfM zYRy0+P-f28%zwpO$+T{#>8!z$DiBsY;%!rfFXV+xKErE9r zv3C)4-z@&CtK&LdV6xlQy-OYJ{bhI&oHT4wZ%fPD2&S{1!eAVlQXPVpd9(FXEL3mi zCaoTM9=ZQlp+rbU%qcYok1(5V?Z?VHZ+m|lxXDFzZuJtl@kw@K&ZpLdP0am;`l^@M zjlm?B0FxM({>|eDGB@?t*oM>cjS0w$D{R%=2rU$R{}kO+G(7x`8`=L>RHoRv|Ts7!f;$9?Y%L}(Sf(3o5ox@J- za@ga4bcNfJ1H^`IvyWx>PtFk!Xl)p=t?2@E(gv;OB4vk6>$@%3hl)dc!;fE?;ZKxDk zh-Y^T>2?X@!j$(EWf7;mn)sZ%<0t2@h9m$Z?_l+jqnM5G{t<5g^Wx$mX`=)s(w=R7 z%%F*aJ&o@KKm;A4dp%ZmM}U)Is#u~o zzP7IR>{|f_=Mz?uMYFPHI$(>V0HF;&_$Kv+324BbHZ-)Q&gHkzl3-$6 z)KonNqGH*iqJwc?`-n_9^ekkb;+UQ+&xEOcYwD0OS`lN0n!)fv&Pe_ukz4u-}z-cq`mhSGGxl^6hq?=jAG)h*bg_bD;1WsvDhJ0`uc zq1+@^YfBLi=1xnyCqYt0&)(s#*NzB8dscn->hboS(8&>c&FM@7jB!zLD0%9Dc_E^Fm^1b_08l*4wUn@b6m6J0(n;dy*cuE5`_uP#U@S^ zTSH@aXXdKNuXi3Qn=z%7rZDfg_|_Lcp^LSkMZgfB8E z9t{5RgS%vFK=cyE<`S<|FJcXSlXKRDc=}XD_fku%IBg7d#+lH&u>$QyqGvvtqFL%6 z-;Sxt6*4g-KVx1X*8$7h18jkmoTEOeWWSkz0I}2wG>aU0ctvrn0{BaPBR)uNC3e)t ziYf~0?4Y&6lF|DQP;?|xci>S3#k$S<>}bU#ZTr-4ID)))`HWJ3L7+=5^wx$qMdw~( z9Xc7?VO2s6B^wIb^9>eT=l30PL#aDY(yBf3BqY zVv#`4K{FlZK8IHy`0Te6YmV)?Ud_eHOEUDltoY}^qiK*vV&RjlW0+$qZV>!Hl{3Bb z)(`SFE+3*3Kv>U1%sp4x{JFHdT0K9=`ptv-P0H#O=neafxk<+ zS_|w}K%m-zo3HeDjY>MrT#yNggsio!`?{&Gp%oh9S1{L}%zRSfDv0c2R}%i`MQ(iaE}agS zsa2ZJYi)R05JG7w_EXuTHi?&4HA}vhK_%C}>DEJ4nhOsb_T`rCwbPq!bmfOKKXH)P z)*A!iVDcrV*BopxAx1FapP1+qlA4&lP@O0kA+s%v zHqqN;X=HF_C=$+tTUdM8>sYGO=+2l3%FNcodlCvx0_g<&*r~VBP4 z3HD?ctxcdUn3?jW`jAVMO~|ipKBgBZ4YEjM@F_Z4te_ifKGLMh+Ar4pd}DMt=BE*^ z%{(y5)QI&wpF5{t?YU2Xro3A@*VOTBG`U&JTXNo%A@HVNq9mJZdBv;lnljKY$rHO?>F^}z%)=pdj7Fx+mCLLg zP;AY~Z$T3ae!VG5F@Qz!3yXv=A15V`x2Q%|2VWA}sx5c*_nf@WM-qssb{%|N%_#c)RX@cTQRQ)|&#Ih0rkjL?^ zG^yuh#FP@PJpQ(}+`Z1cMux#MT5IdnRA<(MU)j)eP~i0Cp(vhn25?69Mz3d z!`uZ79w0re0J|PGAP`Z~gcuvZEUaShZ-9jD^C4}5ORLt!z`VBEYc2O-X6!ys4{QWUn^%uyATwnY#8LsfzeN~CXdQCOU+I*a7 zHsXSeP=(Vgw%WvGw>KYS-tpF5k=4dQi!g5{{Fu9@^Zb6#HC*ani|;Ky!)2*eta^7T zCGw0yQ|(KAb4{o79xL}S9Xc!51D8;$-jtNch*#odJ~$?ybD;oaEWx>EWi7+~oO52g zY<9bpvZ;<}>rrCsq?cTaFdup4Gc#m-Be9!Y`7^M}o<|EmvCN`$5p?P@-?hg5GJD52 z;^Lp_BVFfE3B{sBJ8aWA^utp?5-`Pi%Gxy56cj7o)|E$pr#Js zKNA$(&B9x^I9ju6q>r$>oGQH+L0yc%&YBS8uaP=U@K>jpxnT}iWwL}V1xklIrC-ey z6$f*Fki9t)kX;H7HT{WLst1p~I}he;wfs@k$EhzgV~aV(dsl>p70HpfQ6LvvY?I4D zS(@ta<5kBctjqjfC&QhfNzi~VXx##pCw5buwKmT1>EO{K8gJ^n6f@`>A>E9kzYki) z^jDe{3tBg@QO;Xw{=XjiBMB_r9>wPC11vLQYy{`fO5REdFO|8IFoEb@*3M1><)4SV zU2$M}cx--aT@v{|{78w*_cRL1l(BIK3cn{RanI{@` zDxGu6bui`PRvl}TS3XktMh~TcINst;4)Bh**!zlv_gkpNLCyofrPL^!OD$R2B(zxd zp=^2*_{euU#L1I54a{z?ll{HHV0+sf2Y8DaMI~^(7mt`O!JAQ}J@^UqTap*p?u?|E z4yiu;4-2>J8Dekg(h8~5Dp>7KT|Y4W6qP?N~@P+#AJH ze-ez0+4joaR-)=1Iwv)Eu~;gGxt4XIG`6Q1$g2(xtA{vg8JrV!z~vRiV{WaY&_R8H z!z}p`c^Sa&oqQw(V#z^`IzG?&P1m~+?^6cX_BTUdRgw!=Kj~51ubKj#V!!+B;n5=o zgL)Ix3^}_}^lt-l$^fI*yhX^~Zr0?Y>=liZ2wb4{Lsq1>WiQD=CP46fE7rRb$d3?; zpF9I2c0I1mwlNykbxOC8DJJv+M(1@7vEZu`tb5s1;2t)*eA_DG;eVNd={GprqWF8G z#I2qO3Ek7hC<%TRW`ZuXip)i<1ON#->!1EL zeWV2oI+cX{N232L$mYDFwcu^tJ`+SX-SenE{BCS4+6RCgO^- zSTI7;`_J3h!UmpNSosfV zYl-5*)X6vv%}D1YNbkptztI~P8mrM(%dl%L{38}0W$y~=7wMl_-pE6guN8)%ZGN5%)!F7Pl zYoSwHk_|wUF7jQ6S3}vMl(?+|O3*gtpkVM6$50aOTL zyuT5kHekWpUrKmLqa`u31np*FWw5b^pbvRB-8Q(9RPMXF#ACxP1p#8~sy#ZMvp<|w zmzAb3WE|UgfpSAs0B_-HX`VJMoI-;%I&rYUjai%X!m*CFLG)cEO|Gtk{(`Z!Omp~@ z@pc^_qpY!5ZMTyVwUm@D)puU-3V41uoq~=a0Jh-nuLJn|MmA!~s7w;pt5v$Se=_Y3 z8QtDP_1=sBISOK-o(0-fVFX>mr2T#5}8 znCmhO4`?x!B0K8PZYirku}hCxbEb$|yWMK@&w<5*y=KIEf5Ui@;m*0W39Kn_d1IMZ z@E>g)oMV26RlJ$m{Vvf`#E;%N;stK_7Zrx?A)33N>!5-(s@NcwX`GM*h9uo)B3bqa30+NVa$@ zPtY)iXOT721KpF>dqGV12ZUk{_eW;vq-@~Is$69TjTGlEjFEl*Qgeo!p=J+kmx6LA5k;g=!W(t3MzYsPFOJKpTq933JGi%eZ{arBSjbn47@s+`Wi4ri~l{E7M{r$BbPM|&zch0=) z7~>d6JKkI7P_A>wbjkV5{SfxRKLM(Uw!@i-J`0N_-#wDXm6Dt!53xpzbGK%>tbAB% z`YX}W7whgN%IIqUHit7c?`2A9dc-r?6Y0qp1S2EVWB7(Jd{IIY1$|1Fi$0Tu^WrjWEOkKAxrG}0@3IIhg0y>C@I{UH zshj82oW;Q$+N*The;2O@7lr9G|J|e#sJF52U%^}r1Vq)T@%v(vtam;;yPA_Z2J9Fu zZ9V}qoE&p!2-%#_;|#TAgjH-uzj|kxxIvrwR)n)|rp?2-QeoK)^{i4n%_lID&dtYx zLM_C5TP`KR>@HiPq?qVJgo80g(l;};;F6T;aaxf9n!5H@kyDxTpzjQ*P~j?jb-c&6 z=g!zI3kzg?Lqvzoy?Z*9xqZf((_TU%^>|U#dnAQYW~g1HzW=5PESx5pm~2mJuoH~%c{0MiDF6K1Vb9YL zlFWL*vVrK25pmhlWI=;5I|i!$KW`i}mE-^AU`zAA-dY~D80klDw~|&y%x;oB(l?*c zjFD2KWwHnI=Gw3`cwsAyav`e1BqZ=(9H00KTj!Kq1PF{4J$l`|u>s2ijXKz#U_in6 zfD>mbjj*~zB$1mNGPCHib+=F9xUQ7cvB5W&*NA6~Pt9#6BH7aRaf8a;G{zv6cXN~n z(#eDIwPtlg+wX*`QH2Hzo{tm!&3Ra7%7MvLA zdFrk7G?RVwOJkv!5@C`jbobwg?i`Nip{nukaSO|yO+BT+V-tLHAUzVnXLP00FIoFl z6`6COL-3WlO?oR8{2}l(b*WI8jri9ouex35Pb?o9dE`Hafo42T?GeK12|Rg32y;Sx z=-(9`^!xG;HNc8nhobGmD0G$E5HJZAXu|dZxkiB}!~FV)wCZ@SnImv)hwqi$<*NZ) zHoNpte>7NtfQR^Ew`tg?v+XGI8M@|9bmwQ9NcwAsHWEUnV41sxbU6r#KTIg9O9-jl zA8bR6^aR@;n4VO^R`&4D*e@MOD9obhRT-y9-e4i#)W>`Get6*S9}QC)=uO^`{n?l! zR*JWNaL1jD7UL`&9CK({x+Yg>$}=0bZ_@_Ttw{fRc##g<96wMM9=HvQdj2g4{yZl8 zjCU~7{sV+k73A}wEfq`a^We_q=g`azaPfsEh1JzYooK2P?M04b{olV5bJGUhyMj(H zE7m1Tw;pu&b>ZA6)v)n(Ws7{HhXNoooI{|?!Z_|cPF!nU%95r*B`E&iXx^ULdCU=Q zBU`eM(L_IHcZPM_Zc#-L!mXPgzA2LaefS|4=1nqE)p1B08rPf$Q3N@A`t!Hu1yfoM zFp0_j_-aV7`xPhBLGNcS8R1td@_4h4BEm$H8P{?;q41LH!DH5EJ*24qJ@0#`$wmmd2E>p@sjpn*}xE$mpyY1rH2pcU>?9Fk23uN|DxZB}9fw z(Qj_bCf*&zNxc==Yuni5E{*!6Xg36`bNz)TEWWorwILfvHi08IVQ&$$$*r8{hHE2`>t=-gYMA5dGe!V$O#&O{iKXHsdD70HbUOyITBAtL=5EXFB}+XPR?GoJNs69lJ3h zle+d|G{Ui+ttkJaf!PigmSO+VCPLGj4iNe{du6*~Fm2M>$h8Pm+Xj!XcDh3`+zc|} z_ahWyf&_7{vSPx+eESYtoAF;l19(1&x_y;klFP{v2GmB-h*fjTgjrmGQmSPa9e7$9 zrhLKU_tlyKIj$prOB1^+lK`7_dvg=J>6&7IWK4=%fxb=}7q4&{ub5tPG2YPpUPg0< zfQF7gdSFh;lk~5_4PNs-nAo%*qg+&t$gZIzF_HImgIzz}6Dwz-3c-VMg(q!Y*2{Ur zs-`YG>5M6MRNbv{k)Gav3H9bdh(%1BJCTKEDUk3>#0Yl^4d%;3xtG86g0%^`}g(3 z6UC3A1sB@hH#o@d^j5C54%5DRDr-)kH_lucu|RW)i#25iPCw|NET1K3Tr1g}$ZL}M zpJ|J`_CSW;zEsw-n2t)D35cP=T?S&ARnFk5O1CB{qscUDaAVA?Q-a*}%~`$X0c3v- zcUXb7*}j-ys~U@rv#QLYZOrcN=2rkpowFCDx~t~!)){ljm6wh;JpNUB8gSKs7>+}3 z4(6B8=PlhE@1~Ac|Ke(D2mCNUJy%^d$yJ=DwXBa= zP$Jnz41a}ZB7^%odI!cK0#G3eGnMj|wjmoBu_AJ3z78VZB~f#vuN!QK)!v!D0>4+r zdH+2;C=&IucWBZ^n2h#4&LuJx{WXv-RS&!glf$J|3;ZQv&8HX*hDT z_lUF8+W@AjMTg5}!{#{^lTsGaiB8gqFzR=U8l%Qz2Q|j)a14^oh)0J!mselMw=^vg zR@+IdYWCjr`K~C429uL>uv{UlExsr>KyJ7?yFo%-Sj}sY<7BRFSgo6hG1s_|CKPPs zZm*WccO*ogI4oj3^J+~?KwFrC(7Sn{MtE4oF#-Qc7wwP3X&}Y0oNFD|{rhdsV@>;4~GO3`dIPI!Gx#}oT&Yiw72cj#{Jd?gsZmY zM*gV0H9nfJY_FD3#=*NBOXJln&*hhYcw`<|TC%98k4CiQ`Nxkt;3VI5d#DmVV_g@| zSqongE7SvremNYQh45UwxyNWN&KTP7q`mdqahOy;y}X3?4IfAK0Fr$`EpGK)*0CCr zHSy)FS8d)Np=3|=ocdlC2kD)k%6@YyOD{laD;bkmeN{^3ve`Tm=P9qd6-m__FaHKn zd2xuQtUZe0Y@9on2$vf+VcT$*jVl+?2=smV*(r*he-!(Z6-<>tsdzfB7olkzbq6$I zkwVmGbQvOLZ!MD_Cr}Q9p&2RO5!9%Wx64Yi%?bpzRHz6u2?43WQ#dh+4A*>M5Hty< zQFjJmi=Xw*IQS0>O-ZSXabxVlypwxGl^T1Kx=4jiaoiEdzp{byh=id;w9}8HmHmOv z42n&677j#Z3anfARFS@W!2=WxSDUXZH!4^cY%Ysp>OGp%EAkabXbKgc`u7t0%d5Ug0Oz7y zi9lk*k2g674#+Pz)!O}TX1CA z*Mov*bas}hG4XWV*sMgT1_Z`oO%b^HWDO7r+f0w3KV%_Vlz&s@ZV?>a{2vxkqzj9EqXk;+44#83&BEu&lT4xuGx;N`GjKi;zikW5T){vPR#Vc!6jN{Itw zxE8ZVURKVnPIW*EaZ;_kSQ~rGh2p-Tjr`Um{Y~lRRU~YRs%kW;e^k#5a_M-B3`{=m zL3z`4gh68~*(hu8i#HT z=g_!_wptAsnTDFArovaX_?dfYJ!3k@!HldV&=cpYcL`J;W`o<{&S$dq2_B z)TDj!+>3MJn)NiLGyh&0J=TgV-T%&9ZPw(3Y#SfY|9Qa00cxJ)%=bs=`NQm5wrxBM zM!JcfoD8oR5*qCNO9*$4yG~OcD9E{?DWPkg2Raeil3f*>Hxq8gKfaW_OEo~r*{0ZF z2E)oT^wOz}mMP#*Wv|G%?e%HNq7{M?D(L6{}i>4*0xrCP7u_s2pHy5uC0Hx^9 zokCZ2$t?%ik7cd58hTs0<4+;pp0TvPZ)!JJM_wf#so0G4D>5`7(qddgy;nE*z{d|3 z_j-#^{6K4GqvgQDfAtcc&gP3=oI=%`x&gmLc)?T}ROGzMRO+R%9h+$CTewLE^RKpt z&uCvy*P4Sn?afc}8emc)K&0W41Tn?U#r(((iv%hRg4$Tx@535(2+A|{^!0UhdY&KV zH>bj8ICl_aM?a+&DUk9ydS;H_Zz101fcNUGq)41d`jYw{A_B8p|{p%y($ z34H17R4y=MdR4t*RoK6lVIS5+Z^5!Wm|I7C5KTFc!FQP@5YEI}m5yMYr6xhKn)z4^ z7&B>$o~bNM>jf-Xj~!W^JsY=cYcMyZ(sT*FXr2N34h9<@LMiF3OryYfTPJ#2ZuMtIl%cBfS&g_%!Gi;F#)ZASKa zR^;o>+0XXcZ)PA-(^ij@jq_-F7#{|8Ag}>q$@Z;W*WEJ%t)A@6oqGvVi{G~Om<5DY z3ql~@)%Ws?5Upq$K3Hqw)v6q(Tl{Ae2E@1#Ad;WtT`OD(BP$MMzi7XOjq5Bmr*W8e zcTcYLxwT}4f1Pz)5SVky+)zmu^Dd{2mj)6H+KchOLtNy{>6g9HF$D3c3a7o_C~eNw zP>txD%T>p8R=bP#c`=Ej{!!AKLKE=RaaTJ8YK7ca2VDKC29Rh}CRK^6r@vDJmyp8e zG9b{?&)$33MWlbP(k(ljInsBPT&YSN@b~;?g&CI8&37AT5U5?5td$~=k4w1qe;zQr zDe2|td4Ey$xs!s(X~%(~2}??h;wUX|n3GZGHQQ5>`G3glM}qx(c=-GW>dhO8Voo~qxT z&sb~hnv=2V@W3-w>0lG1oh_tDtecdQAAxz8U$Rg2xvKFC9pRiBqg2nyyG=MNk^9|9 zMi(XgRc!!S$j>8J`OW3{P#f!nz#ck$ed0hC z-nn!23`%oUQ<<-S#wDe^C8rYO8*Ar`U%#jx_~1yruOvtuqKuYxS}e4k>(Yh^kpN20 zhmfdFo5ic~`1biOWxN!P`Bh9^6c@U;Y={^Gc&q=MhY+%LHcD!RxcU-3e#l198eyKo zG1}=TVn3Q2NqT~V%vv_Z@Jv}iwX25=iXe!tbM?^$+nh&0G5e6$%F4y+=?Z=p^G8ql zqfAs5&Fs*BSoyLln5^AhMfJ#oOAXkJBPp%639XPszRbAq|a1q%9vD4qblAS%k1lD z=6atlRgBAG!ff<9nn0KXMPeXoOHp#bUJ;T%n~H23vze=SHQcQsYt>jyhnaR7bH*Fi zt2(;pt!|zxg5%GFUPY?ZEKOyrV#XjdQ$*>_UYSlr{eSaGJZ?4xv)z`&ww2)O>6S zHt;eX6H?l0-Gsi(r)j7|mEI7w6b|Iej--hT(2Gw~pvDB8-!2BY1TYHW9Y&G~Nc0j} z41vttLT_4`e;m!m#q$Vw6R$%)H@;NwNB!Flay4X)@At)#SLGIhT)WPvS@rl;n{VjF zQ4{SoR-dw!nG|N1(a+~txcw+52vH(JEkEIZ`C^MpWjVHnXUKu7s$XQcns;d&F3VJO zQDJaokXjCZRke_&S=z;dhw`s+wUI!Yra_lWjq^=g5vL_-3Paafs@Z1Ru%?=$`tJuc zOE)y+quwxgcNYqn9C$>sm2zC^tK!~G`^zk5`TQ*0Voxt}kdwV{tCW=%E%v|t6X0yyun1+AewmFV)kQRy2+WHIX`9Ho)B$B` z%(@%@Zm4i(5LSt;#^x<=6 zxYYaB2^xm}c6uYOnGsI;P{d=-QGX7SH}{o}A6T|sfEPIacg!cX z1}Sf~#$h6wtInJAf>3Ma!l**Fr%r5ON__IjuA%MsEani&WeE7LCYqhbK=tp1i^1=G zx|iRUo3blp7W^L8;S!|lLaP}gp{$s>fjKuS9P~xcxf$X-{c4hz zu%|)wrsZzE%cIqm$tD0<9%1=CUb^mGdSawwqzfsEN9t4tS$3n1ERF8rdhB~{ID@wI zg%Ll8)hZ#f0LnH9+C(7v51SQ?gx1pW5e&PRSd`%Vz4tTkVn}pO7o^z|w8ue}`)>#V z+S)u(fuPFzO)$m=C3{_5OjvGUB>pJ7G^(L~1MoJIhTqhF|J_W$<}<)h07SscqmH8l zr>o$3iCk=lLAvJvFx?lfn*dZPc3L>vGp^bZueLw1Z&+B;Pb-TZ92TjTHA|NE7^g0H zgLy|6%xWc=Y{)xh>_WbumL1F>GLjJgOxU~STM5%Ac^1;t?L?@2n?aVufrR~)V$b6H zRE(;MoD#sM#K}#%s|HoPrP8Zoj}%=^MRgcGrLHg>S}HJ_a##nk{ z?Rm`_J@9(D_WILMWzt!_xA^_wg4AY{c!QNDgXJi2)WTa@a610+DHaE{~B5&zvYtY+NhZaw!F&FN#?0hwHnD{sO#kDauSSM?IRGbM8BdNu?I zQKUi2mXgg^!mpFfh$3_?^iv~)1p`0D@tZJQ7MB@7Nt61gz^P1+d=lUi#2$O{WS7*y zj$f>&*2->MvR)v6WqCzXV71Aufqw-wbdfLo1rg-@R-Dz&NtEY|@HA zbR%iL!h4^)gs!J;CPs`iE$!i5O&ailwW$t|69vDLD=r=1#0A&{TyL%{!%V7cUGqah zCj-cYVT*SR;`ivVtqfxHJH$;2c-4*e)*`3FcQ)Wb@LsL0tL5__^L2drouRJsmDPy` zex+I5DAvTQlv4w9MHUpJo;g2cxD-Z68f%N+93CV!dT&x1;33aJ-u}tS+%|%i(-SUn zAb?4dSR?-Z*+|?S*ZjmqMOo)^xJQMDbLNf^@+Iu^R7Y zUy(9oj|6m_QS;oZ!`N{Vl+JA|fY`6-SLY zexUko#OT(~MIKF`VwvixJRTDrFFmWdw0CP<1|+;qXnXmY=yTv2Oh>B{P)3Ul06hDoJ>-SQacpS` zB-~75!46^!xl}bht|MPzJgRzrIh8rpEfqXaLu0R0XJ+3iJA**(!f*@YYQyiZwh!%I zy_v5FBwZg)Gp2P{)gh5brgF&o>n|g3`!;`q(A2ED&D~AQ5py#kG0*HM|;-h`PP0fA}IK zzDc#QYBNOn2XH^Ua+6V2IDY??f77HH0my^B@CLGf83>5p8XOmI9BgQRFq-R9tL-Vt zlVl}3G1N-eC{n46>{nuq2wOv_dPUO)xGLl?)V!P76H~Gz0*2Jo~Cu=OHFgv#K!> z-&D5?FxR+a=DzV1sB*zDoo6u-za2c28} zRO5(^3)J$I&bejW_|%_Lx2ZH!53B zAIa9)AATHLB@Vt>bL?&B-RN;fMWy0iT z_k8Y2wA&u?vYoT_r#hpD9Ng^{@;)1LTe$J`d@MWV)5^spw^13D=ad&})F;b7yQh2{ zw#D_Je2)sb7Y7P0us32LL?6qLACIk3O;xMbg5UjvnU-u31xE&z+3Z%7y^h=#LzoSR4%jtxdbyWZPi#NaZ{6G20&Xp1zRI$A9r_D=n5h+Y6R*mpH z?0(uqip?{<lv!?MG897U;2moEXf{RpJO;$;I)P|fSm?AiCJ$^l3I zQD(P_q%)XHe%VoD+{$WjVy+%#8&BWp2tAe~OHTKp_|AMw;px8!+@o@XW_wu4jpd=& z*?(A)m~fwcvw-*X?@aW0;r#lQuVjdr8s0aZ@3VB{n06Ao6Xl&UHUP!5^6(5@`fG%+ zTRr>>t|9jQ%i4zY3w5kJau$mvW>IWsuFrn!oUO-`_}ln~ggI7ZX{-7?kqi1eI434z z*er4wlX=DL2Ir=Qo*(fEp6~fUC@Z-PrT3M()}EzCzkd2YHE4?G{p)JiEZfr0jwYW~ zpKO0}_)WiG{jcrNnm=FGq2n14TT_ahE9QJ-U770hcH;Sbs{N02X6na~dbl}>qH(Yd znrBK>SVO)bINMt*(#GMR?ZnPrbCWX%0btboRXumvH%Dv|B~WO&=V@yjB^K#(Vp(+^ z8Tk_0Qbspd&ZIkhM4Y}Bb> zEaCO(ZM}s&FsKww0q4AGLZ`~`7q@yWeB}Gt@UA0s>N(cwSM_Jhbs9DLfWU9&?`fCm zzZRGi{b1};ACPmnG-`Yjbs@NDGj0NFP8wBmvzi!hREq^a$u9D}4Y}Gf)x}LMTwuiT zqMp&m#;FqQWVY>meoe>Gqkd>U=E;Y#m(+8pSG2U)E=L-D9T1AIt6LcGLs;{jeM}A) zv8F==5jVYZTp_*atLH?P_D3>UasByU(X23Ia;Wb-e_fg&c^6AdM3qgRDHQZ7Gs&Dm zoh!U6riAY(cwRlK9NN*m!TE|>u$VNz75hiyR=XW0!WTPQAt<1j)DTb}!nwlfNIq7% zvHR`|TiG|coXmN;<7tT)$gAUu-g<4>!nZV8twVd+8o>GGX@6w?5bM)O7x2e6%gyLb zT%e(Yr{qqdHljCH;AH)bDdO?3V+*u|BnXU&ii~L^UNAkSso1LinDO}1u+eIw%GmUD zDZ+q*XDqRAxt< zr6Ngm!j*VSWbnsM*+}TkLmi1LjM8<)GAdq#fx|ZdJ~cjDQ620)B&WRtCklWn^oMg&x$xS%`wEkP8U!d#;MQklBF9#a%e{)M0Mmz+tS+Ygqh}w2 zSk}UM7i?8(E^z18nrpUl4K(X?**>i?-5$=~${_*fM9Q^Jh$j>zGV@AbdjP2I(eUo&g&22+@_d2(|^`*o2bCT%k8u;OqMI1{j1 zIb7%z6RuB(^c;w^lLpQKkMDc)_p<;dFxvJ$sm4s!W%)?*t%L5_YZR&k|4Hg-4kl~jv-rxObJj&*b6EYU_?=pF! z(KIvPdBcE85RYU6YZSW#KzBW&`SU}(xzCFb$$aOJ)>WzaCeP{Cg0Xym@5R-0uLzoG z2mf0;fKb2nOdTwLl94Ac`B~Ok=HHvc;}Ol(bW^{YAsOWkE76~QzlmP|i{JeA>$=Y3 zuYLR**1X!m9p<=CYf{d8zER7W^BfAtp>oh<3DJ=E)QeQ9FIenGd5y?Z$xGT!WEbR) z7rwe>cdwwy|G3@_e+T_gag}JH#TIudBOT#;@qYm4Kp4MFfsezQ>1_O0teh>?>{)!} z9gNw*7&uS3M(*FQO7hm2e)N(8w(XDe4eX;V2g}27N9EF`u@><`ER$T%=dmmipXD+A z@}6irw`7a}00W_;nXb1+ZV9Wk_#VYKjhfB^(nONTLn&y`mI_7&)3_g)sLA~+$u&({ zO;+d4a>6$Gj2J~;U9ie`orfES2+7Bxtl4e^g@`hegZOPwe&?s3O9SRLgHf_Hy%WB{DaJ7@|cu_9n$Q6 zH$E}6bCTTiip5LGi=xLfLl|tTJWm;S3|W=hY?b+nj^+#aM6SifsS_X zC#O<6)OxRm{5RsAIqW<|rRjR^pK!Y;wAO6my0(=hIV#c1kXL{>$Ky`XnsJ+#D^`53 zmR4!4C9R&iJ3BPAb_CTLw5rAto24kpDMd~V#!;203461IoKln?lY^XPq?aSZn^!p;t!3!GM3X(@jkZlShl1zEi!#d<~d#Ap3lojw0$Y9m4sn1i{u+v6-yUh zWiO0gAJibDA*6(zKs5ba4}2-w9E@ z_K`>Q_YD0auvpG)zr`K{!)G~cr+8wxVl+5kFv7>!x=@0`<@D&~S%o@Qrs-0~;pCv> z&pF~7aerfJpBjEQY5o(}{5j$89DEYLZxLx4hMVJqV0GyJCFpj#ou-~)@jLj(#9EqN z-^pWlt6WQ=Yg#IZ9@U;1rTTMerJ}CHytoS!k z@iT_MwAH0cU2nx&*wn2ens4m8TbXSV#z`U5Z6cXoSbXaI@VfX>`$=in*57RK9mA-& zfNE_6#UxQqmO64vsp+!aYNmM0-rZgqk@qBNrc5A1=A#@5{3r4K^?@C~!trHca4q4# zxYhhYadQ6vV{J1}mh#Fp7f!cv4N`4JFeHrmk=y1-)ryny`7eZ6ET1OC<#O=Pfb-m5 zI}sdKBO96J6!Dmf)oDe-k2?O+p%p3+wK_AWDiHQCr5d@=QmL|8nj_jbkEoC3I5YQEYURBv=4~a zzX9(3zinLp8KKo1Xh4k`xw)}W%<)MjZwVpjUP>Lr= z=71x?;Cd~ufqZfCt62S^{{U#+PvcIXKaPAi9gc--`#s6x4~QNU@gASyjWWvPPVr{6 zbl)0Y>eG0F_Gi=WTH5*x3lzPc+FOY1?pid9^8Wzh*MR>3X-jP!T>L-q?1Fe_v$@nP z%vwo``WqXedkl6{-X`efL+0DGV5?k0h+aZiB6-(_KWKj&_-@*3ZyNYt#{LcQeT!QQ zxU}nSPeHQO?JZ${BT$&Sk>0!esfk z649%M#jK)h2U`zA5hzuuLj}z&ba1$NRHse}LWU>VVW{Eo@ti%Htp3M`JWKFvG{WLC zjxf)&tfvo`SHsoIa}3)chGz-7Q>o8hz8fmcsML-nskAn?m;J{f-yc>40z$HjMg zeXWJ7UCA7B+gsbMy0{ZOsZUh@0D^*vyfJO2cyHl;v*AS=ewOl2ZLi0w_>)nx(Qa-n zTTi?3Ob=^i;j48>0AYLx{YDEo?Ih7Hd_XPr zn>{mE(Vlr=lG91m8sZj^t+$+Ab2GP@_L*dN^BR2<_MW(FO;*nK+r%1G?Am^)`jk2_ z(xSTi7)>hjSS>Gi&l)URZli5-ZR2z+2BcM$e* zJWmy4D&gqCN>QZ>RF)3|Q7A%El~-PtEc1 zjESRbv0X``i_|L?bDJ|sI^J$agO|{k%7=N`U))vm+PfMGd zf6u?#zr-4!#D5NWTgD#`w9QlCqxc)f`lg%WuL<~b;!UsE{BhyAE$r;=uJx@K>{3T8 zD=n^QsY{+eQI~kD;XW@BmeAu) zJo@$ml{&8*PXWVuwD5SGMJZC1B(W87m`q$DR-~m;5W`gVa!RZ#D9})+TlYV}{{RDg z4dR5u#`FWHOXPKl#@JHFODGcS$2O`-TJ#C{p@UG3v(ek<_~ zqI^4R;n=Nwb*Sq0H&3POKiReq8GjSpEwsZ?oxJ$qk_S)a@8J*aYo+)zQ_;1*0BXr- z_F9ee+S}`T2ApHDj?&)V;WZc4F6`l&`%aGH+Rk03>R9A`G6?QrHs(Y=(7&{Pnc^=K zSnGZ=@R!0*7He95v^D8<`&}J8E#eE?n1H&qwbQka3+l>O=hO7*nrmp%<>b>4%<}{i zC+EC<^l9S0E6woKIIl9!F}yF9`+QCwh7Oidl+G38qbgW<;jlSo7Y`gQI<#rZa`v*s z)s1OIP8Ao|DgCY&6~nknSoh)IA8KXPvIEK`5Gp89k zl_=AVlU1qnQa_{%@7qWAdC_j8_hEFWR5r)!&4)i_L4t-VL+TyjQPX=~}a0 ze`ISO9K6({(`3{v^sf<1uW8otX_|(kb!VmAYL~Y9DNCl+EH3P(QZ^63tz+Wn!OeeF zlTnx9oc8*bqpA3#SkL(^w6>Yg9D(fli6Z>8H<$Kbt7M0@EV*1SVw@doC7AMMhm z=ZGw=Qe{nDq1DV6dTeu9M>X6(oWHeK!>`%v;`G1U)A-ZkufY9l!4|q^gCB~#C*hq_ zSJ9);F7;hcP1dwsU&FR~jn&49s@nLT=KjycQ_3ex+xcvM*MAGk1h-$G8lUYU;@fRW zwW;)LO-lOrP`cMN>AX#?Yj=8p@Qe}5EFJ=|o_moO_Ea-k+}q79)E8#*(^Y$76Ul+% z^S=}R)BYp)n{g+KC-J1eWuEU{yOw)*zgzoLtZC3`_ZltClEh~^1GbrMZv}(AiyV-w z_WK6YA3uk`MXoU6J|)2Cygis>uydzIojR59-@BBnNk%o)=~csHu=T0di>>bBXjOzI zQmTyVMNwg&XFMT|%JEr$9dXYIOyj8F3x|WrDqiH@3@vWNb9$(sGxz(VK?V+``eI5-xwLAE476|_U zl+TL)01|cm55>L+ywdy`;%#%m_qO-a_`_7Y@V(ZxX>E4$t*mC%C5C1a!)<99V7Cz$ z2&h*8ZuTn=+ehM8hrA1Sc>2DhapCknYBPaHbG5RlY7aYD2tHreC#F;i)u#X>;;g$;~!(!DuM5^Mi91aP* zJ!Oztgo1UfSxyYgW`=^TV@66Y8)S zFD3qZ;Qg|0FT6W>q)Fkw3hOe$o+;uicC+BER{sFSw>}(~P0_FJE#a`x&Ybr;vduq-UeL(! zJX)-?!+B>M*|#iggfh(<9i-yFq346y*AL<_oGswKdEx&65xV$!yuzOn{{U$@Q>E#JsrXxM^--dI1nlx&vai^2Nj5sd|Ba3DRnJ3LA3Ec zjj8C`#6Jx5`-$zXt~9MD!TtsKh;`Th0EBnMZ)HB7BaTr9p0jAM&2xF@M|&{*+5MKj zEqGJm=fr;(`1i#gDfo?H;>}M_@tF7*tZLpR*EKH>{3D;mmbdcjS6(U7^n25Nc=DbgtEQg6`QKwRlKOHP>YI27>u@4VP z)2|#o9DPSkV{r16Db%A0;b!Yl#8$tP#NIJ@W0uPYm~j3Er-=Mtho8TTqkxwWWms6! z#Z#R);j2}zUoy-pEIm2l>Efk?gkc#`#M6W-QiUh=hr|!sljC=e{9=~>01kdNd_KNU z5qNGp`>z9Oc6v^gqED&Y!(h6ut7B*4Yk6e0d+W)q-sT6mx0&F#p62SxJ=3`0bU)g| z_OsVs&%yHiK+~@6?taJM``s(V*M14`?vXvLH}f^_kEm*sm=?zHSY5TM>J52od21G) z7AvUU-2(id2mBKE_TTX3&HcWCs72z9Hs0RdE$np<4&2!D9;tIR&7JO{u7&>6wwF)T zZ-F+qFCn-#?0$BFuA_7mMh7g3%mKtTeE$=0;=iD z1h6vOqa?p0lG$_mHbdao2yo{PQQ?X_1;89pg2GW$s8`H*UkI_VpYMO#D&iq3b!*NE z(6p6$7=`R9+ZMSa$?%xp7qSf7JE@!2%y{#KqdBSj92RqvW;FDbAKg=Uye~HkzwbQ&pd{yENCi_#pw2w)j zR`HVDT0ocDZ-*ON^4m)nD=qG$o5fpuhy-6M=pVM9?QP&+3s`AW{BrS@yQFA#dOw6^ z*L+oPX|3PEXf4RoOm}zsbn|K&lErlrozl%S+s2Z+d1$gDbkEqY<}ZNQbpBg%?cGdzFmolET@0k6=Hg@5o)3#7Ht8{)5sMy$GX z+Ug!h?xuLP2yNQkX17MS3uqEKZW1t|ibpd>7$y{Ra1VjmM*~xYa{8D&y-K}&MCE{> zsaA5t$C9-=7413U=*paFQ*?f@I&zH~PP8jkrwWn#EdK!MCBc;P{ML^Q_*+*v;tbmj z3_8uY!x@3iqk~kP8Pk>*Bg0|kmQG4=sZ*Z1jdfC^g*;p^&UkryxBL@}Q@j4syE+-p|i_Ubizo2<>|A&&u62K^Ga z)NW)=u}>TfR00}lqbkRofUy-Mags+rLtbOxABNr$_-CP8XkHdun>#CSnPZmXX&?^8 zS>8KM!YB!Dn^8giE4Pui#>`Ib;9^`CErLTGshj}W&IcX(X1{8ogr$U|PY+6UCr*;( zi>o(McK-C`te(FmWVA~E0LnSud5+>7<1o)N7|{CuX;yWseOn2Iz~R*9)zusx4wW1> z9-2udPL(LD^GWkgbCkKOp8{)ItSq-4In*UzHRfSGmXCQFM#W5U8+dJ?LmCW$lxI21 zIXqRnKZVve_euW%35K<$_?E^(JpC;^Kc?yP&lE!z`>t+nE&|CDtW1Q)!AgKZM;IGT|8Lb^Q^#kHV@)NwM4HK}zV#-4FAaTxps+<#dzN^iidZ{-H zUg>#8`uW=b0Etq6g&z;5PqSQTT3o7G!o1pjyl(K8J0q0o=@Q&12d=;g=K`)+coRd= zA$atQ(WS)>;*eYYmSqPS#8F>cyGEn|@~Z$301D83MF}PX;AozesfRYHYU05Qnq001mW1ED`!zDCuq?7Z98(cFl&b)}!8@ACe<$)MD=tvO3u z>Nb}+Q-!>;k{7|@cS~z`fN)PcILA&Z&-^ScV%v1wTqRLf(mvn!6D>hG;01e~6( z=Z?K=1+G#^f|NdCJqZ8@Q-ZICkRRPXr=~+9 zt`uD?m!ka`-R)%hbldVq zrPquh-y~AsGD!#pqYonNEO;dMBxi$@RS$?QB!pZWu;Nw=y_Jb_4-1(i;AC~jHGnkR zi-}lAu3kGS1xBN$X&Q>C=mBA86P_|Z)&tL4lJ3t`w}c}@;oVWd6D_^Po$iiV0pN>^ zY3~9Y^Zuxej)J-ru>897UG{NboIg`LRc$NA-fCZ?G}itJUq5JwJCa6O0mt3i7mS{@ zF_oO{h}yU+GF8$-r#Z>m*xkFgwRm;kk97?{QJxF0hC=E%W@wu0M)4+}bYuyY8)DQg zES#n@z;5TgSbvB<8*o3gycw@rFP6+>pHE5D0z%+DsgW3Q{rq+3G)|0KPCV`}{=Li3 zq|^KhjOLx2h1Z;y=Lh+o#pcZj3n^t%`6qIX=KkwUxBxJ>8rjn(Ob&+DZCMEcw`UQMG1rQ}XYm)oH`ek? zrTDK?o-nSdJZ+`x7Q#%7qt1&a*4^sIC$0&uX;PYh43hJUU438mvC$o`Yp+z-_4%Hf z*Vl#BOp)y>0~S>!F`tkgHlIKTy;z>&;xq*sF}gMYN4tVBcNQS^&JSww{{Z+*?0mrM z;+t89S(PxcMFq_2NbN&F?!o3)qc`l0j3S9N7>*8CgndgZRQWor^8&9Q0a7-tU7V^G_PKo^HR z4ugYT8+gjj$_03Yo??J)!E!e-=W@mdNgKNNuL`{J?ww@}ZqsRSnFA18P}1+fU`hEx z+(hIIV?J2HAQ76OZR4FD{e-gWT3iVM-*EGfB~&wHGmv(n%MOi>atNqYWYcafq{`>z zY297)d+YvZ(l%Zf4_M`f1| zxH&4^V2+)6IRuXQKD7*Niz^k#Opq7pS?%??K246y%e}{P*B->5Ns& zdw}E|6e>yIB7lRYLY5rkJm4O^YqeT8SJ9qyZ-0e5{{UKlUx~DYDRym&tV@LeoVmb1 zE`D5`=eHibRo}J-K@f`DdM;8y3uUl5S0+rd^z_H4HHfoYsUXWE01FmC6fppjKyjV9 z?}60uRwI@c8{K49eY+S*!>&nU%2A183W1Cc_{~&bpY`{IlXtSU`(OI-@G84 zfMv#eka5qj;-rNZJ*pV9us8s@z+=EU;1E4AkJ72m+inUrTI>COdmBMQBxMY4v*Z%d zC@4FSSnzO9104ri(6%nccE*8G0yM%UQ?ofNPTcM%9Opa%&1OLyi6%48$~Kk@@^)6q z$v6k6OxB^2S3XzHs>Ej?0C~qya(K_vKaES1dhE-LR^9x+tCklJBYB{J91X*1B>m#5 zbDVLW207-mZQ&9ykOT94i`4fcf&k8Q{OdJJ?%1Was~2Y5x8@@lZ&lA3CpaCeb54mJ z1d60IWyte(vi!l67{EU$^4kQH{9JbwlU;WQYo?yRpUcd+mdybYd5#LkMl!oVa6nck zsKWk-p4A*O%n_PM;lYtncIBi|ocV!4=OY=&I3DK}1^vQ_V}*Efxn)zGyNCcMQ}qYm zrfL3Uain<*Bkf=tc1~Cl6@lsixVRJ@Q6?r!*V6(me3?Ec`wA~{j0y7$1ZyEVpB|?G#Aa%hwz&sOC+|T94r3xyy z%%{vi%z%(sDQ}UFUZjlmJkqtYENv@~Em2&J%IZm0QtDV9ShfHM+XNnJgjQDmQ@gtu z@>n~88bnD1Ay7#tARhk!c#QTA-JR|wB$L(XRFP$1(@P+hG6b7Uo@1`(004|me)a$$ z5wjiZV$#}ZQDs|ik$@z*RxVg?fgVD`seYTHU1i@Qjqb{kj~62~d$8%8iXkV)kC?Ng7llwTxCDaHh3E2vW6 zGO=Nh*xQV8&Oqab3rI;0u2GSRa(Gj?7s3zk1p_^>c{!`Oll3W|4fuahLS*pvmRy_> zJ*B$gvJ{0}4cR?=oM$zSdGO!C(=38t3uput+mT}*nVho@Lg0*JlEiUcQrbrBTkXyY zl5h-RVG;!Siz=n=?(@GR8=Xlzv$!D7VaPvFaB7#W#mv@;wfFx3ndX<@ z2Ywu1+cX#c5YlEt5J{C_gti#4XF`MJY>|PEI6js0&x(IyKZ1TGHzhneEX=!`VYh+f z>$ysX1z7Iqfz)S;`x4*ni!-#7BdSTYl*fiJwG+l*s1S9<)z5sY+f6)H;PACP?GAbuc#aA>@p zmEE74{{S;jtX5xZ@Qwcf^poNJJN6j(Lj|wdqqGXElx0-JYW>PY&5hZ{LXI<@^~iXm z{t46Ycf_`@VRIIlJWd#S7y5j6Fw41)1H&|BU6hbPBMN$BrGAHfoXu{HBZmvRMQ%t^ z+%l3Ac1tK653WEoq6tGRpMEGAO2sU4$@4$nRdTzC-Mf*%2l1q$lWi+M>(Pzk>osRp zweq*!XZcwCc-8*^;Eq28b$_wk!>L$kcY0}&tQStwWmql5)A^D_mhnoFTtf1(XI4$S zfFq`B0?Ymgt?&ZfCsXkk$6{8GPcXr4rRbAcTFYwe)69@h5RsY8lSZUUtdUIW#mNjm zXYMBwf#iW8X3v)KN=z&pZvOx_8Aj2Z{o(y8GLuTcEZ$K7fg6?JuHdT1Op@f|Xbtb) zwpffz6{ConTUkll?roV(s;>1Cm;JjH`9*(S&%>#|;D_G}^czpN_#fiujuTam#?rwq zFSIQ#%I-9=wzh%^=F}}NH_t0gXKQfZC<}3HvLdevIH|wjlAb!#WW0E_#nmCzqq&1! zYb*F{H7!y(FEv~HW2gxLd#MuZR9T{z%npxZ5!?xvfA6Zte!)Dc;*b^rgmS(ICm^f* zrLofo0MzKyO3as6COH(472VXJW+8wIcwBM-C$HozRwcE1&QDERi+Ve)TpQ7((!G$&*r;Gg&?jozrI^r zZMS71vq?2ev`F`4$F&GM0k5LGKmPy({{Z+g;n@$^^s55W-M#eo(OJYHxw(+eB$`r2 z41`@>4nKx=LGtlmp=R3MqgFSpTOc5gGFd_llFSZvfCpTGk)K+Mdt^*BR}CYm+z*zy zjaUX4JMqzh$K%$Vs@9sc>rJQAnpXRhOXXtJ`F;pO7TVB?{TuvGnDn37x4@baAJ}?W z(I-gS5hbi~p-Az%MM4lMjF16Q&>o#D1I2%`AH%O0-P~Pxheq($wIsq_{x-+z=mMqMm@*E{{XXB!VMUc zWAOg~!7p(Xam5?U;p;}YSgqMw3x7UDV6Y>^hkQSv!M8%v^!+AOK4gie#RZD9g=NfU1XU_aa5n7#kTH{55!}e+r1DEK93o7< zVxS-rOE4j}k$^ZHXWFNR6}wisd9sRFG+^dX!)e{LDBzw59)lGac-`7Kf`rd53lumc zNL_;P0V9FeJc^!Jzp$<7zsMAte-lsc8fTi_cEdLFhECQP6_H~+5^S3~XJb z+GAuW6y-2Pxfug-Wx+WeI6mCgitEWEH>;hrnzo$^H%7j!4=YBy`6Ey*6vMJ6I6Ukey0yU%iZum^*ua zTF#P4#AzUAiOPnNT=T)>00FhLo)06AdK#*48*o<})fnxFB?=8ODZTENo z0Dv!*8s4><-JOgfT4)_fg`U2JuuwVo_^rp zBFuJt$7?Ye;1yz@D`4^1)hAVQzFQm?aI6@f*xW*nagLq)Q)=%`kelUh+CS_1WfLn# zP^txTj^D()uyPcD*#wOG9QCEUnXYY`W|A;fLaEv}1tXA2$KG4O1+(0ZC1?6x-;|D&3(~8x%ul3|NXJ(Hv)jY!~hBN{) z#QDgii5%xSayiNE?^rh$&Y_)L@HykAM;RxvKSR!I(jn7Tr70qLk%lF=u*b75I*k7S zDm4uj6^&XjtVSFLzyUbs-v%QbmvzwvLJhLEHC>COKRj_N!H8ZdE3i zMR)%I3@u}`)2hGbc@yY27RbRa?``5IX2H^4aS+Rz^sg!v6D*FQZmH+%NkxsAsh^5Jp8=}TJ~#=JqiG@l;wea zh?(PRk+-f${64kFYT9&xTbEwD&T>G{(>&7o`KO*2`uM?-~7+$EH;s|j|n+Q%hvlbS1Y#JXL~u$V$L ztQ|;|PaARw`Iu$+{3x!-O-*x34Y%4!FS$g)#wpn?7xB4Bb{z*GDjboW zzab;Gd;JO1ON+u)P!~ABJA&;8vhFzpILA2SwIas5_n;p$6W1t&kDHPKW1RNjV?8QF z04XSoxv->=PDXM{fHDpM!T0ygc+Ao=R#wyH{eNGL=)Thy450v!<34IWLa94gBNCjF zdS}zUbXM}m8YG1fu;?T#FaRKZ@4llvbSFQJa;p>WIYNnrIaJ1eZGF*H!?zxlbtKvqR5mb4CD=J9058gVWE1Lh%`H(}*K4OC;M!H2=3-coa0Uqr+~dD~f`GJjX>al_ z$25~j^0Z7a7zqYJ%JCRdaB+fj$T<3Dt($n}Y?&6^fxXFM9N;z-<2b=580ZN1sxiJH z3$ZX&wlEIPSO5!bbI<@!PJ48#w(z{66Qb#n_zN7ekKdW^A z05VHk#{U3TWalA9Hs9ah#7@w4^1(tgazhPbVzJ&Nl9FbCba6JDP$OP}q(y z-KaT{@xu^7+N6!x`s198)!52MI|W5&Y~{A2oT%J+EJ@&=gWT{cx>=duR?@fi{dx~; zi_|eb_lzuiV?2Yfx60su2+woZy)|SgT_gl~fmUqfI{-G8X-LTj0Q+O5Pc-GDjU~i^ znPVAN$WGWOye8tk2L$z~LhKn~)we^rO77ag00z^BIR60a9OjN&Jv3szuT3=*&Wbk7 zJ2$GBSR=6kat~eKKSQ5?!xyEV-EnhmI*u8g*ET97i7IlR3dG<0BX>2pGnH8mSCZqR8G()eOzN z?%;IFjsPJ*JmWl`{MlQHgay_$bmSv^k%myE2T)1*i*yISG}2bG>O+5Uc^2-e5slh4 zMMNwLsvq@A1kC>cFb$8r*EOkYXdsA&TU7yqs~BPPeqWg8Ob|yv2=>}zTeU{ zEv?LK&JsBnpbIC+NbJB21M(5U@5OAxJ+!d`B1OwKRd7a0Bpr;zh1^e1!#%mUA&?S^ z@azPa1nh~4IbwJ>T(8UX0ylH>U;)r|IK@bAbq%FWqVH9~Ehm?fNg<9S0|jx8ne`QM)=1<6 zDPMB#bAcSC_jF$`(*v(L=aE!ypuL(gBvBkXmSRJxOksA6Fl14Kw~mj2Pt|Bm)}5dA z{dpPkUr7|v!!4|e*%A<{3jN|rsd1JeM`QTrts7V!VxP%x-Y)RWtPEKo0L!%Q!0t2c zRTj?ZI=}j|2Qd|5#y21VADNbT$Ok8{9Am9ilJ@chV6*v9`GC5;zB$?ygk9M`C>Q{o zbu<;*zs$LF6cO#%@qp}d@v*@?lFl{_fcNyydQ~Rcj6ru91Oh;C7Xzzc61mA3;Bb57 z(YTsT!^@Zz%7qFeS1RK>*@OJ4kb~HOI+|G9XA`U}0Pj&M(M z!P{Mbuj|aPttRONThXIXsOnqF4!d%8J~%0n-#qb}j#(}?jox{X5~|P{RL1e2nOZp) z1np(O1e4DLt!voB8Hz{qqnsDP2=2`m(VhNWyp_)%E_ZS1iiTP3P!@r6I2`S zy!{KOA8AsZH>b3eW9iK($IHL@^)B36YZea_H`;WuG^$Oyn3$^}kVaDwU62C50Z${5 z%_ZHIsS5~hwCQb`Rb&xM2~Z*hfhwxUa^+ZLlH77@yYZ#on&J#29RCYR)mLy_HNqE2S87J1EXBT*{^7+FX`bJ^Xf0hQh->bgRx!Dy@g7 zO-qyCg=G1qD|L%X+_qMFoPt{2NT(5x71G83T}cC#EVXEUt`Uo*7YB z=lNfBV;S5EDvqa;di>qRTl-9{9Idilq$y$MY}}&)M#k*0+D1k*fKN`8#oVtMG07Z? z3xzCjp}_>GPzw=}z+>{@^MhY+ZMw7PZ|7l+99s;H3PQ+s<%k880NaQ{2Xpth$4^>? zFC33A24{^w$@-66h3B8LUGW8>qEb-gsp!60EhXMuASvxP@oxXDS)ale1wsX z3oZr^2d+ITj28J>Sf}`WmmONhtGRhFHva5;0}i zxXCP4M=6pq)PvtN!2`++j@t>r4TeHUJD&RL<4L2=g3_0z(cs>5eKXNksx3!wI?H z<_BXPq`MLOwdgU|=~?o~*a9YIZOj;vwE!)gpwFWN*Ek(|Q5d;u4Xa7;*s(kM9$a#_U#Xnxtbd5=RzD+*cv8z?C4C$tTeN04l|r<7AH$7o3luWP(A+ z;c~&a8^;ZtV*vK5u@w@_B&4a@2GAR7j$6x(!({P{*Q$MUha>1 zkSVcg+If9tO-9U9+~6N)YG_;aIx{h3Z&zA zbCw?|!0GK(cQi$@@^#^eI8&4NySFDeKmB-1tNy<~%x?QFTP2&zR*pFlh;|<{WbI*| ze89wxGx-rxsKMK98%R$sP6w8Aj(6j^J;(B_rkI9gaPEMvc_j1m1<7sO_YsV7#Y&e? zhc@!CJ8--+F=7wOMmlu=0PEB}8f)JCEHxIl*?NAYw;{I}kwzPrd;)f>Z6SJs22Oe7 z9A>g)jZlyy3ZN-1g(wFo83}%c_16sKGXRQ*ab(&^CmpelLF27B#rH*N()#`X0M}2*kxB+A;IfcT)*LtllaQ=1 zdtmYd9OANWr4yV)t+ZgUX$qWYY3q`>7##KEwP;NHI0_CMByz-)$m{hO#b-LP z!6gYK{DA_n$-v3U&O3A!R@Jw#@7HEBLg8667<>Y&xcu0_3_v|{anq(nQ;tF9C}cqD z?i_*xw zr$bWRy6TEaH2Rki{H|EzoRgp72LJ)iM*}1EsaoAatIg)TlBQu1s+f)s0fV2r)2BoF zMU$~aPJF&(R18aDfDO*x3CBzW&$UEmlnjgo84AvXg~MlRWaM-D9%-$+39EF!kiJZ7 zDzmF19%N{hS&$3@p3H@TDbotj8O!pV#%!!MRe(6LA}h z3`j}GP;jGxoceR#vL(~QvTfMF0Fp3g%-oZcpS!{60326nA%W4((9EE1BLJ>4Ft{gh zIT_C!_swUPi5*jEh?3hu`2%r~s#7HM*RSDH^jdDeuj}tEZra)YAJ=nH@*PFNAa1!Zkp+Yi9 zoMk{G%j6H7H$BcegY-3nd!sC{v_=&YGp@tIAgRG(y>LhHk578^=eH5aSpu@Q)c}TJ zfDd*fJf56%$I_gU+q%q>Te`@nhX*mUuPzlwAd#GMMn|<$eO~OI*VDh^cpj(WiC=Jr z4d`%4k#@$fy|SuY1CBHK4|*%vcG|?m{h!Z-29fu*rX3eQ2$fNu-oj(M#D! zNj-jNufSF>y#8px8w%}3ZmIxYWXaDx{RK=Xkd`P_INB9Pz)1%Rsyc8v&nB`UmO>MF zD!5$k!YdErP(u@vK8K!_uNhfbf)xe^KpTJuAmpj}dJa1Du4b+MY>X4O@BGV_(cA#4 zjKxpSAbBvYBB}loa0uMPk>B2|`KmG$?Jt~_1QzzreojZ=1^}wWg&R<=*#7AI#|I#s zj&u2Sr$rQ*P}wcGpWTJ|_zVXJJ^Ag=G$zyBtvah0pjlr8s4Mj$K+jxs1Pq+}`qsn+ ziiAlbRUn<2Y!C<~nX*pIbJI1RmiUcjCS{Mz$C#o)7X6{#1duKsKsJ&ABmZ75+xp+*E)DSd){UbM&cH26tx#hnddC$zlfc z$Qi)n(;c~}33qWDe5y#u-U#5}oFAaiCxgXIjvc^7c8W4f5zZa3H)VQ_+2aR4Lq_^; zUdy%me_wv3|qpiZIj7=FgQ6N;eZG>l^6i$Y3WS8onGWy$F!f9e#60L%Y21E+kg*#f~|eT zKAKE<>4Vm-TcpsI4aGT`04{qWjLqsLO5@P}Jf;TQsPhJjs)%!T05*_73fMz>m z+%}ERk~WOsDJLUuPrz?~>-y9+U)SJgt+U63^DSl`VQ=0m0^oE3nZ9W97oizB>?s}M ziP0UQMu{DdAdm}gAO~_Au6|*kp8~Wbyhy~dTBW4SK@tKPT0ixKsgSPN+>$Usng20>w<&^M#d|-B?w_;WGdwu1}WlM;qWt{^t1sF=(-ee(`DI#12 zjGepvK>O85l~-4gMC_n*49_V>0f3M+x#yO^AmgrisSI-LND%;!X!%5OuPT0JVgi!c z0~@;>`U-foK@ny{mjNSEs7nL83Zw&qs!8QY&nK@ot!~yK+WxG3la84qYD?orXhr>f2Pag0dki zw1!-RlG!I{C$K!I$i{Q44Z%(FiKg7i^Qc&}x1GqTj9}-#JZ7vzrYe+W5tb+AR*edU zLO~`^l(FO2sqO}9GXRXT7l6pj`|_nqE>(%ferUpiIN<$G2-;%0y6VYJw-hl4b)F^3 zL%ml722!nrTn)qD?zS7GB`rzV(w|5OR?sT_0 z&DG1Xl4iFt9Qkm^BT4h%MyOeKu*u-(uNVTe&Go_z$s?7KfHN3lmncXDrCc6!)DhQ# zz^YAiA}W_?cPIcVpDoTC8yVG(;uC1e8%(OE>{y2Pd2obAUdzW-CaOGRDwE?n1mlq?LeDHmMtN z*C#p089Y{fymA=>D+9MA$nrA-$Id|mgUH9zj`XURJDubukyW;|OjXzos;4WDkSQSN zInNwst5DN^=E|{#UQ#{T%EIQdGb zByvw|XCMlbM==3N54Z5L1|+dkjLN|#Vh7yVt%4YkNe6?I*EMrdR4_EDY*}UbRDeS{ z3=3qbJ6ImM1E3sqrFWyaov&+Y=5V(fWv#0wNbzgo1~5L}o!A{INJ7e8V`% z6`$d|Et;aNWedIixsKXg0E%urvm}op?ybN*2+DE+uA5g2BnnA?=b zIL=8mC7q;q+J%f*MVW4(Xk4&C5K{6+(hL%Rc#E8=1B{MxIdRRb7BTa3+Kp{q%lB1v zcIdbHcRFyo;;_j_n)NBGE#JQly>>@M;#lDqN)prw+9mmNr6j|dLxU;j?(iKzz`(6P z7r&I+WT8IE=fOIS=wpqOBNo`H))w9hIp zlCAfH08SX=BexjnJZW}sG`$8^h@?;%p^t*B<)VT>(I{dJIb0m)ka)*6`Q}?rRAu3; zuB6p0Z8fys4{pyKdIg>oKiVTw;>bpARK!-3bA!L37Bz}3K((q;PY9LLvu2R zjaoQK&ztiA2k}V#k$zLj89C#DRjwe87V{0vZpuo^*>(Nve7ulG;z=jC&j+=Bov&l# z5>I_d<-3wO6v5y*;!DmSofFXn9 zXy|Zy)K?8GV6<*!3%vPzqYlWtA_B@z@=4=31JKq?8jSu?7Z&r#=Mk&0MB&`wP_FP! zR1A;_7(ERR{a7ycvi`dN0K=Ota?O(Qz{fjWsv%Z#&ZHuR!INmut`A&_&$+XjW5IKk z3<^6&<6%?gfQK80&A>d44-~_2^Rf9I*|&3;w?~pnAXyX#+@}GF&ws1d;@~zyNg3SH zD@wtk3xS6rMp?F!Ffq;v;EJ7gdll!iELyU@_f&i0Q1S< z(HzL+Nb-%cZ3z&`kr+M{6(AC=md-dBIP{|3mVn=LU9S%0SixM7WNq2o&kMaz10?b| z!K!myqW#j6v+X6EpDhkf?W>QN<99s%ISMoF@|^HbLB&zY z8=Z&Ba#eesy)syEgfZiwBk5V~CdY|U0}vEEnSJ1coIVNeGCP2KRNi|Qa>scER0j^{ zVd?Xczy}=TjQwc3OJD2y=o{(Sbe>F;l7-o%UoQZK5XmM;M>y%YueB4Vc@gK$GB4kS5T<3DugkH<7K$1({_nHa%k zVi1rCA(c6ZFjK?d0!FHBy zqpt-?9A}=KRV%Ifkr^pyo!LnX91Lz`LMD*N7)Yl-G7HG1PF9VvnD&tX^m!mhD2!NTAwa_WraWT7L!MFfyX z-5i_)P3V@rOV_Ciq^Ege8Bt4ZX29E!P$oJqGskmT&4Rd1phiiMulIq%g(s-s1HtQz zRPQcw6~d~5syb(kgg-;aUjBx%6(oLIJg`?Ql@GvBK2!67*MsjzEwxVfD*AaZ>$g(mdXJX! z{^cDV_Ohue=tv|Sj(~y3O!11gxArm?j^f_yXuyHsXu(;D3Vg+x8+v1|+#h_J$y>EU zxLmmTzum%Oj2>Dp_ZUzren0FbWr1$CA7b@3( z%kwqvCCDCGF}Iji&>$Nfc@85}@}UIeV;p4ntZC*&byJ0ymJA3D&I@2|ISYb0{{ZV! z3-xiaW0D!7FB2`wvKdr?wpDcPoPa}eS0ae!-^qw86=2dR2P7yA+uey%#&gH=q?NAw zh5Yu=iLPC^aM4N#3b+K!fOS@5^ZcWqO~V~VYFtkj%w+Rp0F%6*xIj5m&&+uG<%L_h zy^`S=ua*@7jdm<(K2R5S$c{Y2##@3w%W^B3xw~zytVhazW(tfCKnNM=bMMbu(lKv! z{e8sA>e|=jP`=d?&NCxUsS`LVuErq2jstmxP8g6l_vytInRhxX{O&Q1Bnk=+gzp*P zlEeYdD6P^~SKQB?_HXY!e%t4G!~DP=1AM@9*c$7jBp?8g0%QPi0pw=`z9^!(UjG1h z=u6r^*K)-A*XvsLpeo2z07@K?04L_hBz5A7D<{y}9X%!aGL6N=_-H)& zyp)-lA@d)~Mr8q+W8H;f0LcTKS3<&+BXkHo*Oj8fa?Ur-hq z0)V5+&H%v3D}#aGllj(-lCPB+z|Q#wa5I3I13s9dia@?7dViR(l6R7FO14SloG%%z zC^)o`jtTPeM+E-mk2vei6i{gPf7e4$fF9of48%de10Y(f0CCsm=j&A`1MR?IVB8Q# zVgXzNJBlcyxiH)M>|1qFHwvRN4B!Euxz~VL@$N^ z0A0;xRoId3U7u!=wqR`BBp7YIHw+9PYO^9D->_9x9$Y*H1Eg`0(0b8DO8B4k)LmE1 zqjb%g8*$tl0kU@i<*~p$hHFy910oVKK>!of0;mWc*rJNjZpeGD>!K!z2Dwnc5N*jI z@(Cp}PJ7j>US>@5mWw|B06d4E#)>Hv`u_l3jfqL~AsINq<0l-x4$YVZafY|fbcm27)S@y0#D~f z6>-@V`ViToK1(98CPGUnIXf4VkKm`5CO`_4G+MHDZI{Qm$^y}oPn zG;KfE+o$j_!!Pi#-iwA_hvg)F4O*9&?g8X2)2f5WRS=LA4#NO(?L`!$v777tbuL(w zkTP(h5TiT*9Y6qf7^&uF7GngDl0(5Gkt=|IDk!A)`Tqcz{?hq=hcTuzGhJ?GY)QCe zlZNAwlfmTvbXk-AzoznjYly>gc^_w#;QI0b`idy7Jk$O~xsUyLum1q1svVdg_uLQt ze5d~aryxu58c7A+nGWEaP^5-zl?^5V=aI?$>uP0F;TtC^rN!i=IRLONYcK~`e-ZR%6QAK6gxo*F%#J7A#F~{CsIQe%d$I}&3C0{mQm3~>^3&8n7N6246 z!2GD9t!%`%f8zZI-2VWoi1$8Q6YAMvxclS1V_cKwk)ARJJ7eYJ9+Xi@?!5&KpQy=z z5nuoTTarK+$xy*b^&oWgs*y7@C}u1ee8Gu3u%wLVt_>7ZdoP&dyZH+INWgFljDgVQ zP@InZllhwI^i^Lc#8K@YTItqKse!OM-4L!9pkNq)dh%$ZvcA99W?KDD68`|@xKh6< zHx8t)1h4M?Qb$$xsP0KN_bf>*=1<8y@Hpm*D(U=D{<;+phW&N?*~neR6t^+YEOE;` zak-9Z5nfa#I6)~R0#uOAoFC#owN_F^yAVht1Q2jRFCI_Vlljp_V=smLjb6{?`7>um zX2q|}eqw>SKQLt*f%OL`KDn(uOa;HNRRL7ooTvZ;`=;s#UW4+Yigo`0iyuUJ`A)Pa zeRQe$l&+Oh<-({@v5(3CEllbp9X?~;mh{{R6beGVw1g}hGa?EYpI;;PMs zP@@WPpaGJ~Nx<)rKPsa#ub*x(FkzgLfyoM_6Zp|ZU)n;B=(7(ZZ1b4cIq!wzKDA2Z z18F8eIEQf0IAFES44>j1b{&V0zf0v9+e%bBq=15woasNqle7er%_- zy - - - - {{appInfo.title}} - - - {{motto}} - - diff --git a/scr/wechat-weapp-mapdemo-master/pages/Find directions/Find directions.wxss b/scr/wechat-weapp-mapdemo-master/pages/Find directions/Find directions.wxss deleted file mode 100644 index ce30de0..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/Find directions/Find directions.wxss +++ /dev/null @@ -1,21 +0,0 @@ -/**index.wxss**/ -.userinfo { - display: flex; - flex-direction: column; - align-items: center; -} - -.userinfo-avatar { - width: 128rpx; - height: 128rpx; - margin: 20rpx; - border-radius: 50%; -} - -.userinfo-nickname { - color: #aaa; -} - -.usermotto { - margin-top: 200px; -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.js b/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.js deleted file mode 100644 index 923b075..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.js +++ /dev/null @@ -1,23 +0,0 @@ -Page({ - data: { - loginOK: false - }, - //map - map() { - wx.navigateTo({ - url: '/pages/ModifyMap/ModifyMap', - }) - }, - //information - information() { - wx.navigateTo({ - url: '/pages/ModifyInformation/ModifyInformation', - }) - }, - //account - account() { - wx.navigateTo({ - url: '/pages/ManageAccount/ManageAccount' - }) - } -}) \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.json b/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.json deleted file mode 100644 index 8835af0..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "usingComponents": {} -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.wxml b/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.wxml deleted file mode 100644 index 175e3ab..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.wxml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.wxss b/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.wxss deleted file mode 100644 index ee27500..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ManageAccount/ManageAccount.wxss +++ /dev/null @@ -1 +0,0 @@ -/* pages/ManageAccount/ManageAccount.wxss */ \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.js b/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.js deleted file mode 100644 index 923b075..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.js +++ /dev/null @@ -1,23 +0,0 @@ -Page({ - data: { - loginOK: false - }, - //map - map() { - wx.navigateTo({ - url: '/pages/ModifyMap/ModifyMap', - }) - }, - //information - information() { - wx.navigateTo({ - url: '/pages/ModifyInformation/ModifyInformation', - }) - }, - //account - account() { - wx.navigateTo({ - url: '/pages/ManageAccount/ManageAccount' - }) - } -}) \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.json b/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.json deleted file mode 100644 index 8835af0..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "usingComponents": {} -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.wxml b/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.wxml deleted file mode 100644 index 3462d31..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.wxml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.wxss b/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.wxss deleted file mode 100644 index 5124cdd..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ModifyInformation/ModifyInformation.wxss +++ /dev/null @@ -1 +0,0 @@ -/* pages/ModifyInformation/ModifyInformation.wxss */ \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.js b/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.js deleted file mode 100644 index 923b075..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.js +++ /dev/null @@ -1,23 +0,0 @@ -Page({ - data: { - loginOK: false - }, - //map - map() { - wx.navigateTo({ - url: '/pages/ModifyMap/ModifyMap', - }) - }, - //information - information() { - wx.navigateTo({ - url: '/pages/ModifyInformation/ModifyInformation', - }) - }, - //account - account() { - wx.navigateTo({ - url: '/pages/ManageAccount/ManageAccount' - }) - } -}) \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.json b/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.json deleted file mode 100644 index 8835af0..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "usingComponents": {} -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.wxml b/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.wxml deleted file mode 100644 index 4ba3dee..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.wxml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.wxss b/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.wxss deleted file mode 100644 index 1a609e6..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/ModifyMap/ModifyMap.wxss +++ /dev/null @@ -1 +0,0 @@ -/* pages/ModifyMap/ModifyMap.wxss */ \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/location/location.js b/scr/wechat-weapp-mapdemo-master/pages/location/location.js deleted file mode 100644 index ce40122..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/location/location.js +++ /dev/null @@ -1,727 +0,0 @@ -var click =true -Page({ - - /** - * 页面的初始数据 - */ - data: { - longitude: 112.5840817937609, - latitude: 37.42334029843902, - scale:16, - ishow:true - }, - // 校门 - hx_door: function () { - this.setData({ - hx_door: true, - hx_canteen: false, - hx_supermarket: false, - hx_teach: false, - hx_hospital: false, - hx_playground: false, - hx_library: false, - hx_dorm: false, - ishow:false, - latitude: 37.42334029843902, //经度 - longitude: 112.5840817937609, //纬度 - scale: 16, - markers: [{ - iconPath: '../../images/hxLocation.png', - latitude: 37.42460923822909, - longitude: 112.57850807958519, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.42505982099957, - longitude: 112.58448746351345, - width: 20, - height: 30 - },{ - iconPath: '../../images/hxLocation.png', - latitude: 37.423356091749176, - longitude: 112.59020697584626, - width: 20, - height: 30 - },{ - iconPath: '../../images/hxLocation.png', - latitude: 37.420850652498494, - longitude: 112.58636394568849, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.42046830521278, - longitude: 112.59089438639249, - width: 20, - height: 30 - }] - }) - }, - // 餐厅 - hx_canteen: function () { - this.setData({ - hx_door: false, - hx_canteen: true, - hx_supermarket: false, - hx_teach: false, - hx_hospital: false, - hx_playground: false, - hx_library: false, - hx_dorm: false, - ishow: false, - latitude: 37.42334029843902, //经度 - longitude: 112.5840817937609, //纬度 - scale: 16, - markers: [{ - iconPath: '../../images/hxLocation.png', - latitude: 37.42217098294637, - longitude: 112.58554120048987, - width: 20, - height: 30 - }, - { - iconPath: '../../images/hxLocation.png', - latitude: 37.424741, - longitude: 112.580423, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.421674, - longitude: 112.591431, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.421563, - longitude: 112.585369, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.421137, - longitude: 112.585305, - width: 20, - height: 30 - } - ] - }) - }, - /******超市***/ - hx_supermarket: function () { - this.setData({ - hx_door: false, - hx_canteen: false, - hx_supermarket: true, - hx_teach: false, - hx_hospital: false, - hx_playground: false, - hx_library: false, - hx_dorm: false, - ishow: false, - latitude: 37.42334029843902, //经度 - longitude: 112.5840817937609, //纬度 - scale: 16, - markers: [{ - iconPath: '../../images/hxLocation.png', //大超市 - latitude: 37.422066, /**大超市 */ - longitude: 112.585868, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //进门超市 - latitude: 37.421014, /**进门超市*/ - longitude: 112.585155, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //进门超市 - latitude: 37.421546, /**进门超市*/ - longitude: 112.591259, - width: 20, - height: 30 - } - - ] - }) - }, - /****************************************教学楼***************************************** */ - hx_teach: function () { - this.setData({ - hx_door: false, - hx_canteen: false, - hx_supermarket: false, - hx_teach: true, - hx_hospital: false, - hx_playground: false, - hx_library: false, - hx_dorm: false, - ishow: false, - latitude: 37.42334029843902, //经度 - longitude: 112.5840817937609, //纬度 - scale: 16, - markers: [{ - iconPath: '../../images/hxLocation.png', //教学楼1 - latitude: 37.423821, - longitude: 112.585863, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //教学楼2 - latitude: 37.424622, - longitude: 112.581378, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //实验楼3 - latitude: 37.425074, - longitude: 112.583610, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //实验楼4 - latitude: 37.424545, - longitude: 112.585037, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼5 - latitude: 37.424230, - longitude: 112.585917, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼6 - latitude: 37.423016, - longitude: 112.586625, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼7 - latitude: 37.421550, - longitude: 112.582945, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼8 - latitude: 37.423335, - longitude: 112.584801, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼9 - latitude: 37.421452, - longitude: 112.580155, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼10 - latitude: 37.421555, - longitude: 112.579050, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼11 - latitude: 37.422398, - longitude: 112.578599, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼12 - latitude: 37.424882, - longitude: 112.582687, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', //办公楼13 - latitude: 37.421883, - longitude: 112.587698, - width: 20, - height: 30 - } - - ] - }) - }, - - /****************************************医 务 室***************************************** */ - hx_hospital: function () { - this.setData({ - hx_door: false, - hx_canteen: false, - hx_supermarket: false, - hx_teach: false, - hx_hospital: true, - hx_playground: false, - hx_library: false, - hx_dorm: false, - ishow: false, - latitude: 37.42334029843902, //经度 - longitude: 112.5840817937609, //纬度 - scale: 16, - markers: [{ - iconPath: '../../images/hxLocation.png', - latitude: 37.425022, - longitude: 112.585133, - width: 20, - height: 30 - }] - }) - }, - /****************************************农大 体 育 场***************************************** */ - hx_playground: function () { - this.setData({ - hx_door: false, - hx_canteen: false, - hx_supermarket: false, - hx_teach: false, - hx_hospital: false, - hx_playground: true, - hx_library: false, - hx_dorm: false, - ishow: false, - latitude: 37.42334029843902, //经度 - longitude: 112.5840817937609, //纬度 - scale: 16, - markers: [{ - iconPath: '../../images/hxLocation.png', - latitude: 37.421947, /**大操场 */ - longitude: 112.589071, - width: 20, - height: 30 - }, - { - iconPath: '../../images/hxLocation.png', - latitude: 37.425636, - longitude: 112.582322, /**小操场 */ - width: 20, - height: 30 - }] - }) - }, - /****************************************农大 图 书 馆***************************************** */ - hx_library: function () { - this.setData({ - hx_door: false, - hx_canteen: false, - hx_supermarket: false, - hx_teach: false, - hx_hospital: false, - hx_playground: false, - hx_library: true, - hx_dorm: false, - ishow: false, - latitude: 37.42334029843902, //经度 - longitude: 112.5840817937609, //纬度 - scale: 16, - markers: [{ - iconPath: '../../images/hxLocation.png', - latitude: 37.424051, /**图书馆 */ - longitude: 112.580541, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.424524, /**图书馆 */ - longitude: 112.583980, - width: 20, - height: 30 - }] - }) - }, - - /****************************************农大 宿 舍***************************************** */ - hx_dorm: function () { - this.setData({ - hx_door: false, - hx_canteen: false, - hx_supermarket: false, - hx_teach: false, - hx_hospital: false, - hx_playground: false, - hx_library: false, - hx_dorm: true, - ishow: false, - latitude: 37.42334029843902, //经度 - longitude: 112.5840817937609, //纬度 - scale: 16, - markers: [{ - iconPath: '../../images/hxLocation.png', - latitude: 37.422066, /**学生公寓1 */ - longitude: 112.584833, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.422394, /**学生公寓2 */ - longitude: 112.586399, - width:20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.421751, /**学生公寓3 */ - longitude: 112.590798, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.425917, /**学生公寓4 */ - longitude: 112.580520, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.421261, /**活动中心宿舍楼*/ - longitude: 112.587896, - width: 20, - height: 30 - }, { - iconPath: '../../images/hxLocation.png', - latitude: 37.421090, /**洗浴中心宿舍楼 */ - longitude: 112.589441, - width: 20, - height: 30 - } - - - ] - }) - }, - /** - * 生命周期函数--监听页面加载 - */ - onLoad: function (options) { - - }, - - /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady: function () { - - }, - - /** - * 生命周期函数--监听页面显示 - */ - onShow: function () { - - }, - - /** - * 生命周期函数--监听页面隐藏 - */ - onHide: function () { - - }, - - /** - * 生命周期函数--监听页面卸载 - */ - onUnload: function () { - - }, - - /** - * 页面相关事件处理函数--监听用户下拉动作 - */ - onPullDownRefresh: function () { - - }, - - /** - * 页面上拉触底事件的处理函数 - */ - onReachBottom: function () { - - }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage: function () { - - }, - go: function (e) { - var id = e.currentTarget.id; //获取id - switch (id) { - /*农大校门门*/ - case "door1": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.42460923822909, - longitude: 112.57850807958519, - scale: 25 - }) - break; - case "door2": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.42505982099957, - longitude: 112.58448746351345, - scale: 25 - }) - break; - case "door3": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.423356091749176, - longitude: 112.59020697584626, - scale: 25 - }) - break; - case "door4": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.420850652498494, - longitude: 112.58636394568849, - scale: 25 - }) - break; - case "door5": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.42046830521278, - longitude: 112.59089438639249, - scale: 25 - }) - break; - - /*农大餐饮*/ - case "canteen1": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.42217098294637, - longitude: 112.58554120048987, - scale: 25 - }) - break; - case "canteen2": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421674, - longitude: 112.591431, - scale: 25 - }) - break; - case "canteen3": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.424741, - longitude: 112.580423, - scale: 25 - }) - break; - case "canteen4": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421563, - longitude: 112.585369, - scale: 25 - }) - break; - case "canteen5": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421137, - longitude: 112.585305, - scale: 25 - }) - break; - - /*农大超市*/ - case "supermarket1": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.422066, /**大超市 */ - longitude: 112.585868, - scale: 25 - }) - break; - case "supermarket2": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421014, /**进门超市*/ - longitude: 112.585155, - scale: 25 - }) - break; - case "supermarket3": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421546, /**进门超市*/ - longitude: 112.591259, - scale: 25 - }) - break; - - - - - /**农大教学楼 */ - case "teach1": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.423821, - longitude: 112.585863, - scale: 25 - }) - break; - case "teach2": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.424622, - longitude: 112.581378, - scale: 25 - }) - break; - case "teach3": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.425074, - longitude: 112.583610, - scale: 25 - }) - break; - case "teach4": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.424545, - longitude: 112.585037, - scale: 25 - }) - break; - case "teach5": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.424230, - longitude: 112.585917, - scale: 25 - }) - break; - case "teach6": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.423016, - longitude: 112.586625, - scale: 25 - }) - break; - case "teach7": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421550, - longitude: 112.582945, - scale: 25 - }) - break; - case "teach8": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.423335, - longitude: 112.584801, - scale: 25 - }) - break; - case "teach9": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421452, - longitude: 112.580155, - scale: 25 - }) - break; - case "teach10": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421555, - longitude: 112.579050, - scale: 25 - }) - break; - case "teach11": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.422398, - longitude: 112.578599, - scale: 25 - }) - break; - case "teach12": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.424882, - longitude: 112.582687, - scale: 25 - }) - break; - case "teach13": - wx.openLocation({ /*使用微信内置地图查看位置*/ - latitude: 37.421883, - longitude: 112.587698, - scale: 25 - }) - break; - /**农大医务室 */ - case "hospital1": - wx.openLocation({ - latitude: 37.425022, - longitude: 112.585133, - scale: 25 - }) - break; - /**农大体育场 */ - case "playground1": - wx.openLocation({ - latitude: 37.421947, /**大操场 */ - longitude: 112.589071, - scale: 25 - }) - break; - case "playground2": - wx.openLocation({ - latitude: 37.425636, - longitude: 112.582322, /**小操场 */ - scale: 25 - }) - break; - /**农大图书馆*/ - case "library1": - wx.openLocation({ - latitude: 37.424051, /**图书馆 */ - longitude: 112.580541, - scale: 25 - }) - break; - case "library2": - wx.openLocation({ - latitude: 37.424524, /**图书馆 */ - longitude: 112.583980, - scale: 25 - }) - break; - - - /**农大宿舍楼*/ - case "dorm1": - wx.openLocation({ - latitude: 37.422066, /**学生公寓1 */ - longitude: 112.584833, - scale: 25 - }) - break; - case "dorm2": - wx.openLocation({ - latitude: 37.422394, /**学生公寓2 */ - longitude: 112.586399, - scale: 25 - }) - break; - case "dorm3": - wx.openLocation({ - latitude: 37.421751, /**学生公寓3 */ - longitude: 112.590798, - - scale: 25 - }) - break; - case "dorm4": - wx.openLocation({ - latitude: 37.425917, /**学生公寓4 */ - longitude: 112.580520, - scale: 25 - }) - break; - case "dorm5": - wx.openLocation({ - latitude: 37.421261, /**活动中心宿舍楼*/ - longitude: 112.587896, - scale: 25 - }) - break; - case "dorm6": - wx.openLocation({ - latitude: 37.421090, /**洗浴中心宿舍楼 */ - longitude: 112.589441, - scale: 25 - }) - break; - } - } -}) \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/location/location.json b/scr/wechat-weapp-mapdemo-master/pages/location/location.json deleted file mode 100644 index 8835af0..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/location/location.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "usingComponents": {} -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/location/location.wxml b/scr/wechat-weapp-mapdemo-master/pages/location/location.wxml deleted file mode 100644 index 76e898b..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/location/location.wxml +++ /dev/null @@ -1,417 +0,0 @@ - - - - - 校门 - 餐饮 - 超市 - 教学楼 - 医院 - 体育场 - 图书馆 - 学生公寓 - - - - - - - - - 校门 - - - - - - - - 山西农业大学 - 西门 - - - - - - - - 山西农业大学 - 旧北门 - - - - - - - - 山西农业大学 - 新北门 - - - - - - - - 山西农业大学 - 前南门(可过) - - - - - - - - 山西农业大学 - 后南门(一般不开) - - - - - - - - - - 餐饮 - - - - - - - - 山西农业大学 - 谷园 - - - - - - - - 山西农业大学 - 碧桃园 - - - - - - - - 山西农业大学 - 教职工餐厅 - - - - - - - - 山西农业大学 - 小木屋 - - - - - - - - 山西农业大学 - 怡膳园 - - - - - - - - - - - - 超市 - - - - - - - - 山西农业大学 - 寸草心超市 - - - - - - - - 山西农业大学 - 周边小超市 - - - - - - - - 山西农业大学 - 周边小超市 - - - - - - - - - - 教学楼 - - - - - - - - 山西农业大学 - 农学楼(1号) - - - - - - - - 山西农业大学 - 实验大楼 - - - - - - - - 山西农业大学 - 崇学楼 - - - - - - - - 山西农业大学 - 理化楼 - - - - - - - - 山西农业大学 - 教学北楼 - - - - - - - - 山西农业大学 - 教学主楼(5号楼) - - - - - - - - 山西农业大学 - 6号楼 - - - - - - - - 山西农业大学 - 动物科技学院 - - - - - - - - 山西农业大学 - 崇实楼 - - - - - - - - 山西农业大学 - 工学院 - - - - - - - - 山西农业大学 - 资源环境学院 - - - - - - - - 山西农业大学 - 嘉桂教学楼 - - - - - - - - 山西农业大学 - 体育部 - - - - - - - - - - - 医院 - - - - - - - - 山西农业大学 - 校医院 - - - - - - - - - 体育场 - - - - - - - - 山西农业大学 - 大操场 - - - - - - - - - 山西农业大学 - 小操场 - - - - - - - - - 图书馆 - - - - - - - - 山西农业大学 - 图书馆 - - - - - - - - 山西农业大学 - 亭兰图书馆 - - - - - - - - - 学生公寓 - - - - - - - - 学生公寓 1-5 - - - - - - - - - - 学生公寓 6-10 - - - - - - - - - - 学生公寓 11-19 - - - - - - - - - - 学生公寓 21-23 - - - - - - - - - - - 游泳馆 - (活动中心) - - - - - - - - - - 睿智体育馆 - (活动中心) - - - - - - - - diff --git a/scr/wechat-weapp-mapdemo-master/pages/location/location.wxss b/scr/wechat-weapp-mapdemo-master/pages/location/location.wxss deleted file mode 100644 index 8fd18e9..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/location/location.wxss +++ /dev/null @@ -1,62 +0,0 @@ -/* pages/sxauguide/sxauguide.wxss */ -/*顶部滑块*/ -.scrollx{ - display: flex; /*水平居中*/ - white-space: nowrap; /* 文本不会换行,文本会在在同一行上继续,直到遇到
标签为止。*/ -} - - -.scrollx navigator{ -display: inline-block; /*垂直居中,多个孩子共享一行*/ -padding-left: 20rpx; -padding-right: 20rpx; -background: #2d572b; -color: white; -font-family: "微软雅黑"; -font-size: 15px; -padding-top: 10px; -padding-bottom: 10px; -} -.bottom{ - position:relative; /*相对定位*/ - float: left; - width: 100%; -} -.hx_bottomtext{ -display: block; -position: relative; -font-family: "微软雅黑"; -font-size: 15px; -width: 100%; -top: 10px; -left: 45%; -color: #ed5e53; -margin-bottom: 20px; -} -/*控制地点列表的单行展示形式*/ -.hxdoor{ -position: relative; -display: flex; /*水平居中*/ -width: 100%; -height: 50px; -} -/*控制单行图片位置*/ -.hx_img{ -margin-right: 10px; -float: left; -width: 80px; -height: 40px; -} -/*控制单行文字*/ -.hxdoor_text{ -font-size: 16px; -font-family: "微软雅黑"; -color:#333333; -margin-left: 20rpx; -margin-top: 5rpx; -} -/*控制go图标*/ -.go{ -width:20px ; -height:20px; -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/login/login.js b/scr/wechat-weapp-mapdemo-master/pages/login/login.js deleted file mode 100644 index 91c3f1c..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/login/login.js +++ /dev/null @@ -1,28 +0,0 @@ -//获取应用实例 -var app = getApp() -Page({ - data: { - user_name:'', - user_password:'' - }, -//输入用户名 - userNameChange: function (e) { - this.data.user_name = e.detail.value; - }, - //输入密码 - userPasswordChange: function (e) { - this.data.user_password = e.detail.value; - }, - showLive: function () { - wx.reLaunch({ - url: '../Find directions/Find directions', - }) - }, - showpage: function(){ - wx.reLaunch( - { - url:'../ModifyMap/ModifyMap' - } - ) - } -}) \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/login/login.json b/scr/wechat-weapp-mapdemo-master/pages/login/login.json deleted file mode 100644 index 8835af0..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/login/login.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "usingComponents": {} -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/login/login.wxml b/scr/wechat-weapp-mapdemo-master/pages/login/login.wxml deleted file mode 100644 index 326cad0..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/login/login.wxml +++ /dev/null @@ -1,32 +0,0 @@ - - - 错误提示 - 登录 - - - - 用户名 - - - - - - - - 密码 - - - - - - - - - - - - - - 注册,忘记密码请联系qq:xx - - \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/login/login.wxss b/scr/wechat-weapp-mapdemo-master/pages/login/login.wxss deleted file mode 100644 index 1ac561b..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/login/login.wxss +++ /dev/null @@ -1,20 +0,0 @@ -/**index.wxss**/ -.userinfo { - display: flex; - flex-direction: column; - align-items: center; -} -.userinfo-avatar { - width: 128rpx; - height: 128rpx; - margin: 20rpx; - border-radius: 50%; -} - -.userinfo-nickname { - color: red; -} - -.usermotto { - margin-top: 200px; -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/logs/logs.js b/scr/wechat-weapp-mapdemo-master/pages/logs/logs.js deleted file mode 100644 index 26e868a..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/logs/logs.js +++ /dev/null @@ -1,66 +0,0 @@ -// pages/logs/logs.js -Page({ - - /** - * 页面的初始数据 - */ - data: { - - }, - - /** - * 生命周期函数--监听页面加载 - */ - onLoad(options) { - - }, - - /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady() { - - }, - - /** - * 生命周期函数--监听页面显示 - */ - onShow() { - - }, - - /** - * 生命周期函数--监听页面隐藏 - */ - onHide() { - - }, - - /** - * 生命周期函数--监听页面卸载 - */ - onUnload() { - - }, - - /** - * 页面相关事件处理函数--监听用户下拉动作 - */ - onPullDownRefresh() { - - }, - - /** - * 页面上拉触底事件的处理函数 - */ - onReachBottom() { - - }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage() { - - } -}) \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/logs/logs.wxml b/scr/wechat-weapp-mapdemo-master/pages/logs/logs.wxml deleted file mode 100644 index c49f50c..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/logs/logs.wxml +++ /dev/null @@ -1,2 +0,0 @@ - -pages/logs/logs.wxml diff --git a/scr/wechat-weapp-mapdemo-master/pages/map/map.js b/scr/wechat-weapp-mapdemo-master/pages/map/map.js deleted file mode 100644 index 8e90359..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/map/map.js +++ /dev/null @@ -1,77 +0,0 @@ -// map.js -let schoolData = require('../../resources/gis-school') -Page({ - data: { - centerX:113.3245211, - centerY:23.10229, - markers: [], - controls: [{ - id: 1, - iconPath: '/image/location-control.png', - position: { - left: 0, - top:10, - width: 40, - height: 40 - }, - clickable: true - }] - }, - onReady: function (e) { - // 使用 wx.createMapContext 获取 map 上下文 - this.mapCtx = wx.createMapContext('myMap') - }, - onLoad: function () { - console.log('地图定位!') - let that = this - wx.getLocation({ - type: 'gcj02', //返回可以用于wx.openLocation的经纬度 - success:(res)=>{ - console.log(res) - let latitude = res.latitude; - let longitude = res.longitude; - let marker=this.createMarker(res); - this.setData({ - centerX:longitude, - centerY:latitude, - markers:this.getSchoolMarkers() - }) - } - }); - }, - regionchange(e) { - console.log(e.type) - }, - markertap(e) { - console.log(e) - }, - controltap(e) { - console.log(e.controlId) - this.moveToLocation() - }, - getSchoolMarkers(){ - let markers=[]; - for(let item of schoolData){ - let marker=this.createMarker(item); - markers.push(marker) - } - return markers; - }, - moveToLocation: function () { - this.mapCtx.moveToLocation() - }, - createMarker(point){ - let latitude = point.latitude; - let longitude = point.longitude; - let marker= { - iconPath: "/image/location.png", - id:point.id || 0, - name:point.name || '', - latitude: latitude, - longitude: longitude, - width: 25, - height: 48 - }; - return marker; - } -}) \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/map/map.json b/scr/wechat-weapp-mapdemo-master/pages/map/map.json deleted file mode 100644 index 08652e2..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/map/map.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "navigationBarTitleText": "地图标注" -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/map/map.wxml b/scr/wechat-weapp-mapdemo-master/pages/map/map.wxml deleted file mode 100644 index 1db24af..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/map/map.wxml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/map/map.wxss b/scr/wechat-weapp-mapdemo-master/pages/map/map.wxss deleted file mode 100644 index e69de29..0000000 diff --git a/scr/wechat-weapp-mapdemo-master/pages/text/text.js b/scr/wechat-weapp-mapdemo-master/pages/text/text.js deleted file mode 100644 index 79166c9..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/text/text.js +++ /dev/null @@ -1,66 +0,0 @@ -// pages/text/text.js -Page({ - - /** - * 页面的初始数据 - */ - data: { - - }, - - /** - * 生命周期函数--监听页面加载 - */ - onLoad(options) { - - }, - - /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady() { - - }, - - /** - * 生命周期函数--监听页面显示 - */ - onShow() { - - }, - - /** - * 生命周期函数--监听页面隐藏 - */ - onHide() { - - }, - - /** - * 生命周期函数--监听页面卸载 - */ - onUnload() { - - }, - - /** - * 页面相关事件处理函数--监听用户下拉动作 - */ - onPullDownRefresh() { - - }, - - /** - * 页面上拉触底事件的处理函数 - */ - onReachBottom() { - - }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage() { - - } -}) \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/text/text.json b/scr/wechat-weapp-mapdemo-master/pages/text/text.json deleted file mode 100644 index 8835af0..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/text/text.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "usingComponents": {} -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/pages/text/text.wxml b/scr/wechat-weapp-mapdemo-master/pages/text/text.wxml deleted file mode 100644 index 1c6a105..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/text/text.wxml +++ /dev/null @@ -1,2 +0,0 @@ - -pages/text/text.wxml diff --git a/scr/wechat-weapp-mapdemo-master/pages/text/text.wxss b/scr/wechat-weapp-mapdemo-master/pages/text/text.wxss deleted file mode 100644 index 25d00ed..0000000 --- a/scr/wechat-weapp-mapdemo-master/pages/text/text.wxss +++ /dev/null @@ -1 +0,0 @@ -/* pages/text/text.wxss */ \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/project.config.json b/scr/wechat-weapp-mapdemo-master/project.config.json deleted file mode 100644 index fd7e676..0000000 --- a/scr/wechat-weapp-mapdemo-master/project.config.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compileType": "miniprogram", - "setting": { - "coverView": true, - "es6": false, - "postcss": true, - "minified": true, - "enhance": true, - "showShadowRootInWxmlPanel": true, - "packNpmRelationList": [], - "babelSetting": { - "ignore": [], - "disablePlugins": [], - "outputPath": "" - }, - "ignoreUploadUnusedFiles": true - }, - "condition": {}, - "editorSetting": { - "tabIndent": "insertSpaces", - "tabSize": 2 - }, - "libVersion": "2.27.0", - "packOptions": { - "ignore": [], - "include": [] - }, - "appid": "wx5e77d1bb9e24f179" -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/project.private.config.json b/scr/wechat-weapp-mapdemo-master/project.private.config.json deleted file mode 100644 index 023a2fc..0000000 --- a/scr/wechat-weapp-mapdemo-master/project.private.config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", - "projectname": "wechat-weapp-mapdemo-master", - "setting": { - "compileHotReLoad": false - } -} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/resources/gis-school.js b/scr/wechat-weapp-mapdemo-master/resources/gis-school.js deleted file mode 100644 index 04c361c..0000000 --- a/scr/wechat-weapp-mapdemo-master/resources/gis-school.js +++ /dev/null @@ -1,1118 +0,0 @@ -module.exports=[ - { - "id": 1, - "name": "北京大学", - "longitude": "116.316176", - "latitude": "39.997741" - }, - { - "id": 2, - "name": "西安科技大学", - "longitude": "108.968176", - "latitude": "34.239638" - }, - { - "id": 3, - "name": "西北农林科技大学", - "longitude": "108.075936", - "latitude": "34.270661" - }, - { - "id": 4, - "name": "陕西师范大学", - "longitude": "108.902888", - "latitude": "34.159134" - }, - { - "id": 5, - "name": "咸阳师范学院", - "longitude": "108.734502", - "latitude": "34.366822" - }, - { - "id": 6, - "name": "西北大学(太白校区)", - "longitude": "108.934224", - "latitude": "34.253588" - }, - { - "id": 7, - "name": "长安大学", - "longitude": "108.962926", - "latitude": "34.238489" - }, - { - "id": 8, - "name": "兰州大学", - "longitude": "103.86663", - "latitude": "36.051997" - }, - { - "id": 9, - "name": "甘肃农业大学", - "longitude": "103.707241", - "latitude": "36.096718" - }, - { - "id": 10, - "name": "西北师范大学", - "longitude": "103.744761", - "latitude": "36.104394" - }, - { - "id": 11, - "name": "甘肃林业职业技术学院", - "longitude": "105.918299", - "latitude": "34.48885" - }, - { - "id": 12, - "name": "兰州交通大学", - "longitude": "103.730911", - "latitude": "36.111356" - }, - { - "id": 13, - "name": "青海师范大学", - "longitude": "101.74888", - "latitude": "36.645819" - }, - { - "id": 14, - "name": "青海师范大学", - "longitude": "101.74888", - "latitude": "36.645819" - }, - { - "id": 15, - "name": "宁夏大学", - "longitude": "106.14383", - "latitude": "38.502388" - }, - { - "id": 16, - "name": "新疆农业大学", - "longitude": "87.573015", - "latitude": "43.818545" - }, - { - "id": 17, - "name": "新疆师范大学", - "longitude": "87.600303", - "latitude": "43.839824" - }, - { - "id": 18, - "name": "新疆大学", - "longitude": "87.622704", - "latitude": "43.772078" - }, - { - "id": 19, - "name": "昆明理工大学莲花校区", - "longitude": "102.70396", - "latitude": "25.066269" - }, - { - "id": 20, - "name": "西南林业大学", - "longitude": "102.75875", - "latitude": "25.063838" - }, - { - "id": 21, - "name": "昆明理工大学津桥学院", - "longitude": "102.660574", - "latitude": "25.078567" - }, - { - "id": 22, - "name": "昆明理工大学津桥学院", - "longitude": "102.660574", - "latitude": "25.078567" - }, - { - "id": 23, - "name": "云南师范大学本部", - "longitude": "102.702368", - "latitude": "25.060959" - }, - { - "id": 24, - "name": "昆明冶金高等专科学校(石江)", - "longitude": "102.448038", - "latitude": "24.888587" - }, - { - "id": 25, - "name": "云南大学", - "longitude": "102.709377", - "latitude": "25.06064" - }, - { - "id": 26, - "name": "云南能源职业技术学院", - "longitude": "103.834979", - "latitude": "25.549237" - }, - { - "id": 27, - "name": "云南国土资源职业学院小板桥校区", - "longitude": "102.797673", - "latitude": "24.976261" - }, - { - "id": 28, - "name": "贵州师范大学", - "longitude": "106.727435", - "latitude": "26.594053" - }, - { - "id": 29, - "name": "贵州大学", - "longitude": "106.679274", - "latitude": "26.450557" - }, - { - "id": 30, - "name": "西南交通大学(九里校区)", - "longitude": "104.059612", - "latitude": "30.704212" - }, - { - "id": 31, - "name": "成都信息工程学院", - "longitude": "103.996398", - "latitude": "30.585144" - }, - { - "id": 32, - "name": "西华师范大学华凤校区", - "longitude": "106.075406", - "latitude": "30.826496" - }, - { - "id": 33, - "name": "四川师范大学", - "longitude": "103.661761", - "latitude": "30.656568" - }, - { - "id": 34, - "name": "四川农业大学", - "longitude": "103.007339", - "latitude": "29.984534" - }, - { - "id": 35, - "name": "成都理工大学工程技术学院", - "longitude": "103.736131", - "latitude": "29.56571" - }, - { - "id": 36, - "name": "西南石油大学(成都校区)", - "longitude": "104.190488", - "latitude": "30.831667" - }, - { - "id": 37, - "name": "成都理工大学", - "longitude": "104.150675", - "latitude": "30.679034" - }, - { - "id": 38, - "name": "西南科技大学", - "longitude": "104.701712", - "latitude": "31.54063" - }, - { - "id": 39, - "name": "四川水利职业技术学院", - "longitude": "103.784939", - "latitude": "30.637554" - }, - { - "id": 40, - "name": "西南大学", - "longitude": "106.435313", - "latitude": "29.827724" - }, - { - "id": 41, - "name": "重庆交通大学", - "longitude": "106.578179", - "latitude": "29.49622" - }, - { - "id": 42, - "name": "重庆邮电大学", - "longitude": "106.613922", - "latitude": "29.53832" - }, - { - "id": 43, - "name": "重庆师范学院", - "longitude": "106.465916", - "latitude": "29.562619" - }, - { - "id": 44, - "name": "重庆师范学院", - "longitude": "106.465916", - "latitude": "29.562619" - }, - { - "id": 45, - "name": "广西师范学院", - "longitude": "108.354617", - "latitude": "22.839659" - }, - { - "id": 46, - "name": "桂林理工大学", - "longitude": "110.322879", - "latitude": "25.286816" - }, - { - "id": 47, - "name": "桂林理工大学博文管理学院", - "longitude": "110.312315", - "latitude": "25.071391" - }, - { - "id": 48, - "name": "钦州学院", - "longitude": "108.639405", - "latitude": "21.982842" - }, - { - "id": 49, - "name": "国立中山大学", - "longitude": "113.304724", - "latitude": "23.102257" - }, - { - "id": 50, - "name": "华南农业大学", - "longitude": "113.357925", - "latitude": "23.163307" - }, - { - "id": 51, - "name": "华南师范大学(正门)", - "longitude": "113.354527", - "latitude": "23.142099" - }, - { - "id": 52, - "name": "佛山科学技术学院", - "longitude": "113.113966", - "latitude": "23.024999" - }, - { - "id": 53, - "name": "广东嘉应学院", - "longitude": "116.134827", - "latitude": "24.33214" - }, - { - "id": 54, - "name": "广州大学", - "longitude": "113.3778", - "latitude": "23.043873" - }, - { - "id": 55, - "name": "广东工贸职业技术学院", - "longitude": "113.462491", - "latitude": "23.407151" - }, - { - "id": 56, - "name": "中南大学", - "longitude": "112.942655", - "latitude": "28.165898" - }, - { - "id": 57, - "name": "湖南科技大学", - "longitude": "112.929134", - "latitude": "27.89923" - }, - { - "id": 58, - "name": "衡阳师范学院", - "longitude": "112.63191", - "latitude": "26.874344" - }, - { - "id": 59, - "name": "湖南师范大学", - "longitude": "112.956563", - "latitude": "28.193059" - }, - { - "id": 60, - "name": "湖南城市学院", - "longitude": "112.396856", - "latitude": "28.547046" - }, - { - "id": 61, - "name": "中南林业科技大学", - "longitude": "113.004217", - "latitude": "28.138946" - }, - { - "id": 62, - "name": "武汉大学", - "longitude": "114.37139", - "latitude": "30.544742" - }, - { - "id": 63, - "name": "中国地质大学(武汉)", - "longitude": "114.409031", - "latitude": "30.526561" - }, - { - "id": 64, - "name": "武汉理工大学", - "longitude": "114.358518", - "latitude": "30.525667" - }, - { - "id": 65, - "name": "湖北大学", - "longitude": "114.3386", - "latitude": "30.584771" - }, - { - "id": 66, - "name": "华中农业大学", - "longitude": "114.364494", - "latitude": "30.480121" - }, - { - "id": 67, - "name": "湖北科技职业学院", - "longitude": "114.411275", - "latitude": "30.477686" - }, - { - "id": 68, - "name": "湖北科技职业学院", - "longitude": "114.411275", - "latitude": "30.477686" - }, - { - "id": 69, - "name": "湖北科技职业学院", - "longitude": "114.411275", - "latitude": "30.477686" - }, - { - "id": 70, - "name": "湖北科技职业学院", - "longitude": "114.411275", - "latitude": "30.477686" - }, - { - "id": 71, - "name": "中国地质大学江城学院", - "longitude": "114.341805", - "latitude": "30.355516" - }, - { - "id": 72, - "name": "长江大学", - "longitude": "112.221968", - "latitude": "30.338725" - }, - { - "id": 73, - "name": "湖北国土资源职业学院(东北门)", - "longitude": "114.057401", - "latitude": "30.325205" - }, - { - "id": 74, - "name": "许昌学院", - "longitude": "113.875257", - "latitude": "34.04855" - }, - { - "id": 75, - "name": "河南城建学院", - "longitude": "113.19581", - "latitude": "33.775585" - }, - { - "id": 76, - "name": "黄河水利职业技术学院", - "longitude": "114.340122", - "latitude": "34.812714" - }, - { - "id": 77, - "name": "南阳师院教育学院", - "longitude": "112.522623", - "latitude": "32.995848" - }, - { - "id": 78, - "name": "华北水利水电大学", - "longitude": "113.801654", - "latitude": "34.791358" - }, - { - "id": 79, - "name": "信阳师范学院-华锐学院", - "longitude": "114.045518", - "latitude": "32.147236" - }, - { - "id": 80, - "name": "信阳师范学院-华锐学院", - "longitude": "114.045518", - "latitude": "32.147236" - }, - { - "id": 81, - "name": "河南农业大学", - "longitude": "113.669781", - "latitude": "34.79138" - }, - { - "id": 82, - "name": "郑州大学(新校区)", - "longitude": "113.542962", - "latitude": "34.822975" - }, - { - "id": 83, - "name": "河南理工大学万方科技学院", - "longitude": "113.240591", - "latitude": "35.248056" - }, - { - "id": 84, - "name": "河南大学", - "longitude": "114.31496", - "latitude": "34.82336" - }, - { - "id": 85, - "name": "河南财经政法大学", - "longitude": "113.826659", - "latitude": "34.787689" - }, - { - "id": 86, - "name": "河南理工大学", - "longitude": "113.272211", - "latitude": "35.194323" - }, - { - "id": 87, - "name": "鲁东大学", - "longitude": "121.365593", - "latitude": "37.528502" - }, - { - "id": 88, - "name": "山东交通学院", - "longitude": "116.803805", - "latitude": "36.54318" - }, - { - "id": 89, - "name": "枣庄学院", - "longitude": "117.542936", - "latitude": "34.906593" - }, - { - "id": 90, - "name": "滨州学院", - "longitude": "117.995681", - "latitude": "37.391121" - }, - { - "id": 91, - "name": "聊城大学", - "longitude": "116.00266", - "latitude": "36.440279" - }, - { - "id": 92, - "name": "山东建筑大学", - "longitude": "117.191719", - "latitude": "36.688677" - }, - { - "id": 93, - "name": "山东农业大学(本部)", - "longitude": "117.125149", - "latitude": "36.20079" - }, - { - "id": 94, - "name": "山东师范大学", - "longitude": "117.048643", - "latitude": "36.657842" - }, - { - "id": 95, - "name": "山东科技大学", - "longitude": "120.13158", - "latitude": "36.005974" - }, - { - "id": 96, - "name": "山东科技大学", - "longitude": "120.13158", - "latitude": "36.005974" - }, - { - "id": 97, - "name": "中国石油大学", - "longitude": "120.182287", - "latitude": "35.951212" - }, - { - "id": 98, - "name": "江西农业大学", - "longitude": "115.839315", - "latitude": "28.768197" - }, - { - "id": 99, - "name": "赣南师范学院", - "longitude": "114.893787", - "latitude": "25.801247" - }, - { - "id": 100, - "name": "江西师范大学", - "longitude": "115.930063", - "latitude": "28.683728" - }, - { - "id": 101, - "name": "东华理工大学(广兰校区)", - "longitude": "115.832359", - "latitude": "28.725326" - }, - { - "id": 102, - "name": "江西理工大学", - "longitude": "114.935558", - "latitude": "25.860808" - }, - { - "id": 103, - "name": "江西信息应用职业技术学院", - "longitude": "115.913581", - "latitude": "28.59398" - }, - { - "id": 104, - "name": "福建师范大学", - "longitude": "119.315693", - "latitude": "26.042134" - }, - { - "id": 105, - "name": "福建师范大学协和学院", - "longitude": "119.213145", - "latitude": "26.028946" - }, - { - "id": 106, - "name": "闽江学院工业路校区", - "longitude": "119.286411", - "latitude": "26.071289" - }, - { - "id": 107, - "name": "集美大学", - "longitude": "118.106347", - "latitude": "24.577286" - }, - { - "id": 108, - "name": "泉州师范学院", - "longitude": "118.676072", - "latitude": "24.873525" - }, - { - "id": 109, - "name": "安徽农业大学", - "longitude": "117.264855", - "latitude": "31.86668" - }, - { - "id": 110, - "name": "安徽建筑大学南区", - "longitude": "117.229423", - "latitude": "31.749981" - }, - { - "id": 111, - "name": "合肥工业大学(屯溪路校区)", - "longitude": "117.302545", - "latitude": "31.849275" - }, - { - "id": 112, - "name": "池州学院", - "longitude": "117.572812", - "latitude": "30.650029" - }, - { - "id": 113, - "name": "安徽大学", - "longitude": "117.262098", - "latitude": "31.85077" - }, - { - "id": 114, - "name": "铜陵学院新校区", - "longitude": "117.852676", - "latitude": "30.97003" - }, - { - "id": 115, - "name": "安徽理工大学", - "longitude": "117.017248", - "latitude": "32.639648" - }, - { - "id": 116, - "name": "滁州学院(北校区)", - "longitude": "118.310258", - "latitude": "32.299393" - }, - { - "id": 117, - "name": "安徽科技学院(东华路)", - "longitude": "117.572961", - "latitude": "32.878498" - }, - { - "id": 118, - "name": "安徽师范大学南校区", - "longitude": "118.385586", - "latitude": "31.289755" - }, - { - "id": 119, - "name": "黑龙江信息技术职业学院(学院路...", - "longitude": "126.528409", - "latitude": "45.877985" - }, - { - "id": 120, - "name": "哈尔滨铁道职业技术学院", - "longitude": "126.633171", - "latitude": "45.706801" - }, - { - "id": 121, - "name": "哈尔滨师范大学", - "longitude": "126.566119", - "latitude": "45.867041" - }, - { - "id": 122, - "name": "黑龙江工程学院", - "longitude": "126.69621", - "latitude": "45.789833" - }, - { - "id": 123, - "name": "东北林业大学", - "longitude": "126.644728", - "latitude": "45.72658" - }, - { - "id": 124, - "name": "吉林大学", - "longitude": "125.269766", - "latitude": "43.912027" - }, - { - "id": 125, - "name": "东北师范大学", - "longitude": "125.337277", - "latitude": "43.867238" - }, - { - "id": 126, - "name": "吉林建筑大学", - "longitude": "125.413674", - "latitude": "43.801768" - }, - { - "id": 127, - "name": "长春师范大学", - "longitude": "125.402986", - "latitude": "43.921203" - }, - { - "id": 128, - "name": "吉林工程技术师范学院", - "longitude": "125.414453", - "latitude": "43.889344" - }, - { - "id": 129, - "name": "吉林工程技术师范学院", - "longitude": "125.414453", - "latitude": "43.889344" - }, - { - "id": 130, - "name": "吉林师范大学", - "longitude": "124.350798", - "latitude": "43.162921" - }, - { - "id": 131, - "name": "延边大学", - "longitude": "129.499039", - "latitude": "42.916793" - }, - { - "id": 132, - "name": "东北大学", - "longitude": "123.426007", - "latitude": "41.770841" - }, - { - "id": 133, - "name": "辽宁工程技术大学", - "longitude": "121.67119", - "latitude": "42.029827" - }, - { - "id": 134, - "name": "大连海事大学", - "longitude": "121.538757", - "latitude": "38.877552" - }, - { - "id": 135, - "name": "辽宁师范大学", - "longitude": "121.570587", - "latitude": "38.922313" - }, - { - "id": 136, - "name": "太原师范学院", - "longitude": "112.583794", - "latitude": "37.870068" - }, - { - "id": 137, - "name": "太原理工大学", - "longitude": "112.531074", - "latitude": "37.859706" - }, - { - "id": 138, - "name": "山西师范大学", - "longitude": "111.51236", - "latitude": "36.086532" - }, - { - "id": 139, - "name": "山西农业大学", - "longitude": "112.588682", - "latitude": "37.430004" - }, - { - "id": 140, - "name": "燕山大学", - "longitude": "119.544697", - "latitude": "39.910159" - }, - { - "id": 141, - "name": "河北工程大学", - "longitude": "114.507632", - "latitude": "36.577973" - }, - { - "id": 142, - "name": "河北师范大学(新校区)", - "longitude": "114.527955", - "latitude": "38.002" - }, - { - "id": 143, - "name": "河北联合大学", - "longitude": "114.43145", - "latitude": "38.094956" - }, - { - "id": 144, - "name": "河北联合大学", - "longitude": "114.43145", - "latitude": "38.094956" - }, - { - "id": 145, - "name": "中国地质大学长城学院", - "longitude": "115.493827", - "latitude": "38.820215" - }, - { - "id": 146, - "name": "邢台学院", - "longitude": "114.511934", - "latitude": "37.096848" - }, - { - "id": 147, - "name": "石家庄经济学院", - "longitude": "114.555047", - "latitude": "38.025888" - }, - { - "id": 148, - "name": "张家口学院", - "longitude": "114.875186", - "latitude": "40.848254" - }, - { - "id": 149, - "name": "河北联合大学轻工学院", - "longitude": "118.166972", - "latitude": "39.68311" - }, - { - "id": 150, - "name": "天津城建大学", - "longitude": "117.102435", - "latitude": "39.101432" - }, - { - "id": 151, - "name": "天津师范大学", - "longitude": "117.134162", - "latitude": "39.078287" - }, - { - "id": 152, - "name": "北京林业大学", - "longitude": "116.350675", - "latitude": "40.007593" - }, - { - "id": 153, - "name": "北京师范大学", - "longitude": "116.37377", - "latitude": "39.967216" - }, - { - "id": 154, - "name": "中国地质大学(北京)", - "longitude": "116.354123", - "latitude": "39.997161" - }, - { - "id": 155, - "name": "中国农业大学", - "longitude": "116.36421", - "latitude": "40.010529" - }, - { - "id": 156, - "name": "北京联合大学", - "longitude": "116.433812", - "latitude": "39.996166" - }, - { - "id": 157, - "name": "北京建筑大学", - "longitude": "116.34892", - "latitude": "39.941021" - }, - { - "id": 158, - "name": "北京工业职业技术学院", - "longitude": "116.128658", - "latitude": "39.965537" - }, - { - "id": 159, - "name": "首都师范大学", - "longitude": "116.31305", - "latitude": "39.936754" - }, - { - "id": 160, - "name": "北京北大方正软件技术学院第三教学楼", - "longitude": "116.747548", - "latitude": "39.621014" - }, - { - "id": 161, - "name": "浙江大学(玉泉校区)", - "longitude": "120.129649", - "latitude": "30.270067" - }, - { - "id": 162, - "name": "杭州师范大学(东南门)", - "longitude": "120.020273", - "latitude": "30.294339" - }, - { - "id": 163, - "name": "浙江农林大学", - "longitude": "119.735539", - "latitude": "30.262074" - }, - { - "id": 164, - "name": "华东师范大学", - "longitude": "121.45944", - "latitude": "31.034692" - }, - { - "id": 165, - "name": "同济大学", - "longitude": "121.507102", - "latitude": "31.288675" - }, - { - "id": 166, - "name": "上海师范大学(桂林路)", - "longitude": "121.423228", - "latitude": "31.167505" - }, - { - "id": 167, - "name": "南京大学", - "longitude": "118.783661", - "latitude": "32.064172" - }, - { - "id": 168, - "name": "东南大学", - "longitude": "118.800002", - "latitude": "32.061518" - }, - { - "id": 169, - "name": "南京航空航天大学", - "longitude": "118.823973", - "latitude": "32.040752" - }, - { - "id": 170, - "name": "南京林业大学", - "longitude": "118.819924", - "latitude": "32.08331" - }, - { - "id": 171, - "name": "南京师范大学(随园校区)", - "longitude": "118.775625", - "latitude": "32.059536" - }, - { - "id": 172, - "name": "南京工业大学", - "longitude": "118.650869", - "latitude": "32.077849" - }, - { - "id": 173, - "name": "南京信息工程大学(宁六路校区)", - "longitude": "118.729585", - "latitude": "32.210505" - }, - { - "id": 174, - "name": "南京晓庄学院(莫愁校区)", - "longitude": "118.75911", - "latitude": "32.042803" - }, - { - "id": 175, - "name": "南京邮电大学", - "longitude": "118.937391", - "latitude": "32.11451" - }, - { - "id": 176, - "name": "中国矿业大学(文昌校区)", - "longitude": "117.205304", - "latitude": "34.226185" - }, - { - "id": 177, - "name": "中国矿业大学(文昌校区)", - "longitude": "117.205304", - "latitude": "34.226185" - }, - { - "id": 178, - "name": "淮阴师范学院", - "longitude": "119.013622", - "latitude": "33.647564" - }, - { - "id": 179, - "name": "淮海工学院", - "longitude": "119.228426", - "latitude": "34.611902" - }, - { - "id": 180, - "name": "南京师范大学泰州学院", - "longitude": "119.947592", - "latitude": "32.481954" - }, - { - "id": 181, - "name": "江苏师范大学", - "longitude": "117.185967", - "latitude": "34.201676" - }, - { - "id": 182, - "name": "南通大学", - "longitude": "120.915932", - "latitude": "31.978858" - }, - { - "id": 183, - "name": "扬州职业大学", - "longitude": "119.387026", - "latitude": "32.401189" - }, - { - "id": 184, - "name": "扬州环境资源职业技术学院(念四校区)", - "longitude": "119.427223", - "latitude": "32.404161" - }, - { - "id": 185, - "name": "苏州科技学院", - "longitude": "120.583218", - "latitude": "31.255356" - }, - { - "id": 186, - "name": "地图说明", - "longitude": "103.053633", - "latitude": "44.733374" - } -] \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/style/weui.wxss b/scr/wechat-weapp-mapdemo-master/style/weui.wxss deleted file mode 100644 index 3d6cfac..0000000 --- a/scr/wechat-weapp-mapdemo-master/style/weui.wxss +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * WeUI v1.1.1 (https://github.com/weui/weui-wxss) - * Copyright 2017 Tencent, Inc. - * Licensed under the MIT license - */ -page{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}icon{vertical-align:middle}.weui-cells{position:relative;margin-top:1.17647059em;background-color:#fff;line-height:1.41176471;font-size:17px}.weui-cells:before{top:0;border-top:1rpx solid #d9d9d9}.weui-cells:after,.weui-cells:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-cells:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-cells__title{margin-top:.77em;margin-bottom:.3em;padding-left:15px;padding-right:15px;color:#999;font-size:14px}.weui-cells_after-title{margin-top:0}.weui-cells__tips{margin-top:.3em;color:#999;padding-left:15px;padding-right:15px;font-size:14px}.weui-cell{padding:10px 15px;position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-cell:first-child:before{display:none}.weui-cell_active{background-color:#ececec}.weui-cell_primary{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.weui-cell__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-cell__ft{text-align:right;color:#999}.weui-cell_access{color:inherit}.weui-cell__ft_in-access{padding-right:13px;position:relative}.weui-cell__ft_in-access:after{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;margin-top:-4px;right:2px}.weui-cell_link{color:#586c94;font-size:14px}.weui-cell_link:active{background-color:#ececec}.weui-cell_link:first-child:before{display:block}.weui-icon-radio{margin-left:3.2px;margin-right:3.2px}.weui-icon-checkbox_circle,.weui-icon-checkbox_success{margin-left:4.6px;margin-right:4.6px}.weui-check__label:active{background-color:#ececec}.weui-check{position:absolute;left:-9999px}.weui-check__hd_in-checkbox{padding-right:.35em}.weui-cell__ft_in-radio{padding-left:.35em}.weui-cell_input{padding-top:0;padding-bottom:0}.weui-label{width:105px;word-wrap:break-word;word-break:break-all}.weui-input{height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em}.weui-toptips{position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:0;left:0;right:0;padding:5px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:#e64340}.weui-textarea{display:block;width:100%}.weui-textarea-counter{color:#b2b2b2;text-align:right}.weui-cell_warn,.weui-textarea-counter_warn{color:#e64340}.weui-form-preview{position:relative;background-color:#fff}.weui-form-preview:before{top:0;border-top:1rpx solid #d9d9d9}.weui-form-preview:after,.weui-form-preview:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-form-preview:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-form-preview__value{font-size:14px}.weui-form-preview__value_in-hd{font-size:26px}.weui-form-preview__hd{position:relative;padding:10px 15px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-form-preview__bd{padding:10px 15px;font-size:.9em;text-align:right;color:#999;line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:after{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:#999;text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-align:center}.weui-form-preview__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_active{background-color:#eee}.weui-form-preview__btn_default{color:#999}.weui-form-preview__btn_primary{color:#0bb20c}.weui-cell_select{padding:0}.weui-select{position:relative;padding-left:15px;padding-right:30px;height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em;border-right:1rpx solid #d9d9d9}.weui-select:before{content:" ";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-select_in-select-after{padding-left:0}.weui-cell__bd_in-select-before,.weui-cell__hd_in-select-after{padding-left:15px}.weui-cell_vcode{padding-right:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:2.58823529em;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;border-left:1px solid #e5e5e5;line-height:2.58823529em;font-size:17px;color:#3cc51f;white-space:nowrap}.weui-vcode-btn:active{color:#52a341}.weui-cell_switch{padding-top:6px;padding-bottom:6px}.weui-uploader__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding-bottom:10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__title{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__info{color:#b2b2b2}.weui-uploader__bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui-uploader__file{float:left;margin-right:9px;margin-bottom:9px}.weui-uploader__img{display:block;width:79px;height:79px}.weui-uploader__file_status{position:relative}.weui-uploader__file_status:before{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui-uploader__file-content{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff}.weui-uploader__input-box{float:left;position:relative;margin-right:9px;margin-bottom:9px;width:77px;height:77px;border:1px solid #d9d9d9}.weui-uploader__input-box:after,.weui-uploader__input-box:before{content:" ";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#d9d9d9}.weui-uploader__input-box:before{width:2px;height:39.5px}.weui-uploader__input-box:after{width:39.5px;height:2px}.weui-uploader__input-box:active{border-color:#999}.weui-uploader__input-box:active:after,.weui-uploader__input-box:active:before{background-color:#999}.weui-uploader__input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0}.weui-article{padding:20px 15px;font-size:15px}.weui-article__section{margin-bottom:1.5em}.weui-article__h1{font-size:18px;font-weight:400;margin-bottom:.9em}.weui-article__h2{font-size:16px;font-weight:400;margin-bottom:.34em}.weui-article__h3{font-weight:400;font-size:15px;margin-bottom:.34em}.weui-article__p{margin:0 0 .8em}.weui-msg{padding-top:36px;text-align:center}.weui-msg__link{display:inline;color:#586c94}.weui-msg__icon-area{margin-bottom:30px}.weui-msg__text-area{margin-bottom:25px;padding:0 20px}.weui-msg__title{margin-bottom:5px;font-weight:400;font-size:20px}.weui-msg__desc{font-size:14px;color:#999}.weui-msg__opr-area{margin-bottom:25px}.weui-msg__extra-area{margin-bottom:15px;font-size:14px;color:#999}@media screen and (min-height:438px){.weui-msg__extra-area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}.weui-flex{display:-webkit-box;display:-webkit-flex;display:flex}.weui-flex__item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-btn{margin-top:15px}.weui-btn:first-child{margin-top:0}.weui-btn-area{margin:1.17647059em 15px .3em}.weui-agree{display:block;padding:.5em 15px;font-size:13px}.weui-agree__text{color:#999}.weui-agree__link{display:inline;color:#586c94}.weui-agree__checkbox{position:absolute;left:-9999px}.weui-agree__checkbox-icon{position:relative;top:2px;display:inline-block;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:11px;height:11px}.weui-agree__checkbox-icon-check{position:absolute;top:1px;left:1px}.weui-footer{color:#999;font-size:14px;text-align:center}.weui-footer_fixed-bottom{position:fixed;bottom:.52em;left:0;right:0}.weui-footer__links{font-size:0}.weui-footer__link{display:inline-block;vertical-align:top;margin:0 .62em;position:relative;font-size:14px;color:#586c94}.weui-footer__link:before{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #c7c7c7;color:#c7c7c7;left:-.65em;top:.36em;bottom:.36em}.weui-footer__link:first-child:before{display:none}.weui-footer__text{padding:0 .34em;font-size:12px}.weui-grids{border-top:1rpx solid #d9d9d9;border-left:1rpx solid #d9d9d9;overflow:hidden}.weui-grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box;border-right:1rpx solid #d9d9d9;border-bottom:1rpx solid #d9d9d9}.weui-grid_active{background-color:#ececec}.weui-grid__icon{display:block;width:28px;height:28px;margin:0 auto}.weui-grid__label{margin-top:5px;display:block;text-align:center;color:#000;font-size:14px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.weui-loading{margin:0 5px;width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:a 1s steps(12) infinite;animation:a 1s steps(12) infinite;background:transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;background-size:100%}.weui-loading.weui-loading_transparent{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E")}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.weui-badge{display:inline-block;padding:.15em .4em;min-width:8px;border-radius:18px;background-color:#e64340;color:#fff;line-height:1.2;text-align:center;font-size:12px;vertical-align:middle}.weui-badge_dot{padding:.4em;min-width:0}.weui-loadmore{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.weui-loadmore__tips{display:inline-block;vertical-align:middle}.weui-loadmore_line{border-top:1px solid #e5e5e5;margin-top:2.4em}.weui-loadmore__tips_in-line{position:relative;top:-.9em;padding:0 .55em;background-color:#fff;color:#999}.weui-loadmore__tips_in-dot{position:relative;padding:0 .16em;width:4px;height:1.6em}.weui-loadmore__tips_in-dot:before{content:" ";position:absolute;top:50%;left:50%;margin-top:-1px;margin-left:-2px;width:4px;height:4px;border-radius:50%;background-color:#e5e5e5}.weui-panel{background-color:#fff;margin-top:10px;position:relative;overflow:hidden}.weui-panel:first-child{margin-top:0}.weui-panel:before{top:0;border-top:1rpx solid #e5e5e5}.weui-panel:after,.weui-panel:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-panel:after{bottom:0;border-bottom:1rpx solid #e5e5e5}.weui-panel__hd{padding:14px 15px 10px;color:#999;font-size:13px;position:relative}.weui-panel__hd:after{content:" ";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1rpx solid #e5e5e5;color:#e5e5e5;left:15px}.weui-media-box{padding:15px;position:relative}.weui-media-box:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #e5e5e5;color:#e5e5e5;left:15px}.weui-media-box:first-child:before{display:none}.weui-media-box__title{font-weight:400;font-size:17px;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;word-wrap:break-word;word-break:break-all}.weui-media-box__desc{color:#999;font-size:13px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui-media-box__info{margin-top:15px;padding-bottom:5px;font-size:13px;color:#cecece;line-height:1em;list-style:none;overflow:hidden}.weui-media-box__info__meta{float:left;padding-right:1em}.weui-media-box__info__meta_extra{padding-left:1em;border-left:1px solid #cecece}.weui-media-box__title_in-text{margin-bottom:8px}.weui-media-box_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-media-box__thumb{width:100%;height:100%;vertical-align:top}.weui-media-box__hd_in-appmsg{margin-right:.8em;width:60px;height:60px;line-height:60px;text-align:center}.weui-media-box__bd_in-appmsg{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui-media-box_small-appmsg{padding:0}.weui-cells_in-small-appmsg{margin-top:0}.weui-cells_in-small-appmsg:before{display:none}.weui-progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-progress__bar{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-progress__opr{margin-left:15px;font-size:0}.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;border-bottom:1rpx solid #ccc}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:0}.weui-navbar__item.weui-bar__item_on{color:#1aad19}.weui-navbar__slider{position:absolute;content:" ";left:0;bottom:0;width:6em;height:3px;background-color:#1aad19;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-navbar__title{display:inline-block;font-size:15px;max-width:8em;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.weui-tab{position:relative;height:100%}.weui-tab__panel{box-sizing:border-box;height:100%;padding-top:50px;overflow:auto;-webkit-overflow-scrolling:touch}.weui-search-bar{position:relative;padding:8px 10px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:#efeff4;border-top:1rpx solid #d7d6dc;border-bottom:1rpx solid #d7d6dc}.weui-icon-search{margin-right:8px;font-size:inherit}.weui-icon-search_in-box{position:absolute;left:10px;top:7px}.weui-search-bar__text{display:inline-block;font-size:14px;vertical-align:middle}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;border-radius:5px;background:#fff;border:1rpx solid #e6e6ea}.weui-search-bar__box{position:relative;padding-left:30px;padding-right:30px;width:100%;box-sizing:border-box;z-index:1}.weui-search-bar__input{height:28px;line-height:28px;font-size:14px}.weui-icon-clear{position:absolute;top:0;right:0;padding:7px 8px;font-size:0}.weui-search-bar__label{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;border-radius:3px;text-align:center;color:#9b9b9b;background:#fff;line-height:28px}.weui-search-bar__cancel-btn{margin-left:10px;line-height:28px;color:#09bb07;white-space:nowrap} \ No newline at end of file diff --git a/scr/wechat-weapp-mapdemo-master/utils/util.js b/scr/wechat-weapp-mapdemo-master/utils/util.js deleted file mode 100644 index 54ea2f6..0000000 --- a/scr/wechat-weapp-mapdemo-master/utils/util.js +++ /dev/null @@ -1,21 +0,0 @@ -function formatTime(date) { - var year = date.getFullYear() - var month = date.getMonth() + 1 - var day = date.getDate() - - var hour = date.getHours() - var minute = date.getMinutes() - var second = date.getSeconds(); - - - return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') -} - -function formatNumber(n) { - n = n.toString() - return n[1] ? n : '0' + n -} - -module.exports = { - formatTime: formatTime -} diff --git a/scr/weichat_work/.eslintrc.js b/scr/weichat_work/.eslintrc.js deleted file mode 100644 index 115cc02..0000000 --- a/scr/weichat_work/.eslintrc.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Eslint config file - * Documentation: https://eslint.org/docs/user-guide/configuring/ - * Install the Eslint extension before using this feature. - */ -module.exports = { - env: { - es6: true, - browser: true, - node: true, - }, - ecmaFeatures: { - modules: true, - }, - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - }, - globals: { - wx: true, - App: true, - Page: true, - getCurrentPages: true, - getApp: true, - Component: true, - requirePlugin: true, - requireMiniProgram: true, - }, - // extends: 'eslint:recommended', - rules: {}, -} diff --git a/scr/weichat_work/miniprogram/app.json b/scr/weichat_work/miniprogram/app.json deleted file mode 100644 index 362db77..0000000 --- a/scr/weichat_work/miniprogram/app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pages": [ - "pages/index/index", - "pages/logs/logs" - ], - "window": { - "backgroundTextStyle": "light", - "navigationBarBackgroundColor": "#fff", - "navigationBarTitleText": "Weixin", - "navigationBarTextStyle": "black" - }, - "style": "v2", - "sitemapLocation": "sitemap.json" -} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/app.ts b/scr/weichat_work/miniprogram/app.ts deleted file mode 100644 index 1af73a8..0000000 --- a/scr/weichat_work/miniprogram/app.ts +++ /dev/null @@ -1,18 +0,0 @@ -// app.ts -App({ - globalData: {}, - onLaunch() { - // 展示本地存储能力 - const logs = wx.getStorageSync('logs') || [] - logs.unshift(Date.now()) - wx.setStorageSync('logs', logs) - - // 登录 - wx.login({ - success: res => { - console.log(res.code) - // 发送 res.code 到后台换取 openId, sessionKey, unionId - }, - }) - }, -}) \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/app.wxss b/scr/weichat_work/miniprogram/app.wxss deleted file mode 100644 index 06c6fc9..0000000 --- a/scr/weichat_work/miniprogram/app.wxss +++ /dev/null @@ -1,10 +0,0 @@ -/**app.wxss**/ -.container { - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-between; - padding: 200rpx 0; - box-sizing: border-box; -} diff --git a/scr/weichat_work/miniprogram/pages/index/index.json b/scr/weichat_work/miniprogram/pages/index/index.json deleted file mode 100644 index 8835af0..0000000 --- a/scr/weichat_work/miniprogram/pages/index/index.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "usingComponents": {} -} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/pages/index/index.ts b/scr/weichat_work/miniprogram/pages/index/index.ts deleted file mode 100644 index 52d84cf..0000000 --- a/scr/weichat_work/miniprogram/pages/index/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -// index.ts -// 获取应用实例 -const app = getApp() - -Page({ - data: { - motto: 'Hello World', - userInfo: {}, - hasUserInfo: false, - canIUse: wx.canIUse('button.open-type.getUserInfo'), - canIUseGetUserProfile: false, - canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false - }, - // 事件处理函数 - bindViewTap() { - wx.navigateTo({ - url: '../logs/logs', - }) - }, - onLoad() { - // @ts-ignore - if (wx.getUserProfile) { - this.setData({ - canIUseGetUserProfile: true - }) - } - }, - getUserProfile() { - // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 - wx.getUserProfile({ - desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 - success: (res) => { - console.log(res) - this.setData({ - userInfo: res.userInfo, - hasUserInfo: true - }) - } - }) - }, - getUserInfo(e: any) { - // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息 - console.log(e) - this.setData({ - userInfo: e.detail.userInfo, - hasUserInfo: true - }) - } -}) diff --git a/scr/weichat_work/miniprogram/pages/index/index.wxml b/scr/weichat_work/miniprogram/pages/index/index.wxml deleted file mode 100644 index f00d294..0000000 --- a/scr/weichat_work/miniprogram/pages/index/index.wxml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - 请使用1.4.4及以上版本基础库 - - - - {{userInfo.nickName}} - - - - {{motto}} - - diff --git a/scr/weichat_work/miniprogram/pages/index/index.wxss b/scr/weichat_work/miniprogram/pages/index/index.wxss deleted file mode 100644 index eb64203..0000000 --- a/scr/weichat_work/miniprogram/pages/index/index.wxss +++ /dev/null @@ -1,19 +0,0 @@ -/**index.wxss**/ -.userinfo { - display: flex; - flex-direction: column; - align-items: center; - color: #aaa; -} - -.userinfo-avatar { - overflow: hidden; - width: 128rpx; - height: 128rpx; - margin: 20rpx; - border-radius: 50%; -} - -.usermotto { - margin-top: 200px; -} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/pages/logs/logs.json b/scr/weichat_work/miniprogram/pages/logs/logs.json deleted file mode 100644 index 3ee76c1..0000000 --- a/scr/weichat_work/miniprogram/pages/logs/logs.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "navigationBarTitleText": "查看启动日志", - "usingComponents": {} -} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/pages/logs/logs.ts b/scr/weichat_work/miniprogram/pages/logs/logs.ts deleted file mode 100644 index 2fcfb22..0000000 --- a/scr/weichat_work/miniprogram/pages/logs/logs.ts +++ /dev/null @@ -1,19 +0,0 @@ -// logs.ts -// const util = require('../../utils/util.js') -import { formatTime } from '../../utils/util' - -Page({ - data: { - logs: [], - }, - onLoad() { - this.setData({ - logs: (wx.getStorageSync('logs') || []).map((log: string) => { - return { - date: formatTime(new Date(log)), - timeStamp: log - } - }), - }) - }, -}) diff --git a/scr/weichat_work/miniprogram/pages/logs/logs.wxml b/scr/weichat_work/miniprogram/pages/logs/logs.wxml deleted file mode 100644 index 0b6b645..0000000 --- a/scr/weichat_work/miniprogram/pages/logs/logs.wxml +++ /dev/null @@ -1,6 +0,0 @@ - - - - {{index + 1}}. {{log.date}} - - diff --git a/scr/weichat_work/miniprogram/pages/logs/logs.wxss b/scr/weichat_work/miniprogram/pages/logs/logs.wxss deleted file mode 100644 index 94d4b88..0000000 --- a/scr/weichat_work/miniprogram/pages/logs/logs.wxss +++ /dev/null @@ -1,8 +0,0 @@ -.log-list { - display: flex; - flex-direction: column; - padding: 40rpx; -} -.log-item { - margin: 10rpx; -} diff --git a/scr/weichat_work/miniprogram/sitemap.json b/scr/weichat_work/miniprogram/sitemap.json deleted file mode 100644 index ca02add..0000000 --- a/scr/weichat_work/miniprogram/sitemap.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", - "rules": [{ - "action": "allow", - "page": "*" - }] -} \ No newline at end of file diff --git a/scr/weichat_work/miniprogram/utils/util.ts b/scr/weichat_work/miniprogram/utils/util.ts deleted file mode 100644 index 69a2e19..0000000 --- a/scr/weichat_work/miniprogram/utils/util.ts +++ /dev/null @@ -1,19 +0,0 @@ -export const formatTime = (date: Date) => { - const year = date.getFullYear() - const month = date.getMonth() + 1 - const day = date.getDate() - const hour = date.getHours() - const minute = date.getMinutes() - const second = date.getSeconds() - - return ( - [year, month, day].map(formatNumber).join('/') + - ' ' + - [hour, minute, second].map(formatNumber).join(':') - ) -} - -const formatNumber = (n: number) => { - const s = n.toString() - return s[1] ? s : '0' + s -} diff --git a/scr/weichat_work/package.json b/scr/weichat_work/package.json deleted file mode 100644 index 5f731b7..0000000 --- a/scr/weichat_work/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "miniprogram-ts-less-quickstart", - "version": "1.0.0", - "description": "", - "scripts": { - }, - "keywords": [], - "author": "", - "license": "", - "dependencies": { - }, - "devDependencies": { - "miniprogram-api-typings": "^2.8.3-1" - } -} diff --git a/scr/weichat_work/project.config.json b/scr/weichat_work/project.config.json deleted file mode 100644 index ba361a6..0000000 --- a/scr/weichat_work/project.config.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "description": "项目配置文件", - "packOptions": { - "ignore": [], - "include": [] - }, - "miniprogramRoot": "miniprogram/", - "compileType": "miniprogram", - "projectname": "ts-demo", - "setting": { - "useCompilerPlugins": [ - "typescript" - ], - "babelSetting": { - "ignore": [], - "disablePlugins": [], - "outputPath": "" - } - }, - "simulatorType": "wechat", - "simulatorPluginLibVersion": {}, - "condition": {}, - "srcMiniprogramRoot": "miniprogram/", - "appid": "wxc5e37420ae989824", - "libVersion": "2.27.0", - "editorSetting": { - "tabIndent": "insertSpaces", - "tabSize": 2 - } -} \ No newline at end of file diff --git a/scr/weichat_work/project.private.config.json b/scr/weichat_work/project.private.config.json deleted file mode 100644 index 3be5a98..0000000 --- a/scr/weichat_work/project.private.config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", - "projectname": "weichat_work", - "setting": { - "compileHotReLoad": true - } -} \ No newline at end of file diff --git a/scr/weichat_work/tsconfig.json b/scr/weichat_work/tsconfig.json deleted file mode 100644 index ade784e..0000000 --- a/scr/weichat_work/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "strictNullChecks": true, - "noImplicitAny": true, - "module": "CommonJS", - "target": "ES2020", - "allowJs": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "noImplicitThis": true, - "noImplicitReturns": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "strict": true, - "strictPropertyInitialization": true, - "lib": ["ES2020"], - "typeRoots": [ - "./typings" - ] - }, - "include": [ - "./**/*.ts" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/scr/weichat_work/typings/index.d.ts b/scr/weichat_work/typings/index.d.ts deleted file mode 100644 index 3ee60c8..0000000 --- a/scr/weichat_work/typings/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// - -interface IAppOption { - globalData: { - userInfo?: WechatMiniprogram.UserInfo, - } - userInfoReadyCallback?: WechatMiniprogram.GetUserInfoSuccessCallback, -} \ No newline at end of file diff --git a/scr/weichat_work/typings/types/index.d.ts b/scr/weichat_work/typings/types/index.d.ts deleted file mode 100644 index a5e8a7c..0000000 --- a/scr/weichat_work/typings/types/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/scr/weichat_work/typings/types/wx/index.d.ts b/scr/weichat_work/typings/types/wx/index.d.ts deleted file mode 100644 index 8ecd122..0000000 --- a/scr/weichat_work/typings/types/wx/index.d.ts +++ /dev/null @@ -1,134 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) 2022 Tencent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -***************************************************************************** */ - -/// -/// -/// -/// -/// -/// -/// - -declare namespace WechatMiniprogram { - type IAnyObject = Record - type Optional = F extends (arg: infer P) => infer R ? (arg?: P) => R : F - type OptionalInterface = { [K in keyof T]: Optional } - interface AsyncMethodOptionLike { - success?: (...args: any[]) => void - } - type PromisifySuccessResult< - P, - T extends AsyncMethodOptionLike - > = P extends { - success: any - } - ? void - : P extends { fail: any } - ? void - : P extends { complete: any } - ? void - : Promise>[0]> - - // TODO: Extract real definition from `lib.dom.d.ts` to replace this - type IIRFilterNode = any - type WaveShaperNode = any - type ConstantSourceNode = any - type OscillatorNode = any - type GainNode = any - type BiquadFilterNode = any - type PeriodicWaveNode = any - type BufferSourceNode = any - type ChannelSplitterNode = any - type ChannelMergerNode = any - type DelayNode = any - type DynamicsCompressorNode = any - type ScriptProcessorNode = any - type PannerNode = any - type AnalyserNode = any - type AudioListener = any - type WebGLTexture = any - type WebGLRenderingContext = any -} - -declare let console: WechatMiniprogram.Console - -declare let wx: WechatMiniprogram.Wx -/** 引入模块。返回模块通过 `module.exports` 或 `exports` 暴露的接口。 */ -declare function require( - /** 需要引入模块文件相对于当前文件的相对路径,或 npm 模块名,或 npm 模块路径。不支持绝对路径 */ - module: string -): any -/** 引入插件。返回插件通过 `main` 暴露的接口。 */ -declare function requirePlugin( - /** 需要引入的插件的 alias */ - module: string -): any -/** 插件引入当前使用者小程序。返回使用者小程序通过 [插件配置中 `export` 暴露的接口](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html#%E5%AF%BC%E5%87%BA%E5%88%B0%E6%8F%92%E4%BB%B6)。 - * - * 该接口只在插件中存在 - * - * 最低基础库: `2.11.1` */ -declare function requireMiniProgram(): any -/** 当前模块对象 */ -declare let module: { - /** 模块向外暴露的对象,使用 `require` 引用该模块时可以获取 */ - exports: any -} -/** `module.exports` 的引用 */ -declare let exports: any - -/** [clearInterval(number intervalID)](https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/clearInterval.html) - * - * 取消由 setInterval 设置的定时器。 */ -declare function clearInterval( - /** 要取消的定时器的 ID */ - intervalID: number -): void -/** [clearTimeout(number timeoutID)](https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/clearTimeout.html) - * - * 取消由 setTimeout 设置的定时器。 */ -declare function clearTimeout( - /** 要取消的定时器的 ID */ - timeoutID: number -): void -/** [number setInterval(function callback, number delay, any rest)](https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/setInterval.html) - * - * 设定一个定时器。按照指定的周期(以毫秒计)来执行注册的回调函数 */ -declare function setInterval( - /** 回调函数 */ - callback: (...args: any[]) => any, - /** 执行回调函数之间的时间间隔,单位 ms。 */ - delay?: number, - /** param1, param2, ..., paramN 等附加参数,它们会作为参数传递给回调函数。 */ - rest?: any -): number -/** [number setTimeout(function callback, number delay, any rest)](https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/setTimeout.html) - * - * 设定一个定时器。在定时到期以后执行注册的回调函数 */ -declare function setTimeout( - /** 回调函数 */ - callback: (...args: any[]) => any, - /** 延迟的时间,函数的调用会在该延迟之后发生,单位 ms。 */ - delay?: number, - /** param1, param2, ..., paramN 等附加参数,它们会作为参数传递给回调函数。 */ - rest?: any -): number diff --git a/scr/weichat_work/typings/types/wx/lib.wx.api.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.api.d.ts deleted file mode 100644 index 433f8b9..0000000 --- a/scr/weichat_work/typings/types/wx/lib.wx.api.d.ts +++ /dev/null @@ -1,28852 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) 2022 Tencent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -***************************************************************************** */ - -declare namespace WechatMiniprogram { - interface AccessFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory ${path}': 文件/目录不存在; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface AccessOption { - /** 要判断是否存在的文件/目录路径 (本地路径) */ - path: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AccessCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AccessFailCallback - /** 接口调用成功的回调函数 */ - success?: AccessSuccessCallback - } - /** 帐号信息 */ - interface AccountInfo { - /** 小程序帐号信息 */ - miniProgram: MiniProgram - /** 插件帐号信息(仅在插件中调用时包含这一项) */ - plugin: Plugin - } - interface AddArcOption { - /** 终点 */ - end: MapPostion - /** 圆弧 id */ - id: number - /** 起始点 */ - start: MapPostion - /** 夹角角度 */ - angle?: number - /** 线的颜色 */ - color?: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddArcCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddArcFailCallback - /** 途经点 */ - pass?: MapPostion - /** 接口调用成功的回调函数 */ - success?: AddArcSuccessCallback - /** 线宽 */ - width?: number - } - interface AddCardOption { - /** 需要添加的卡券列表 */ - cardList: AddCardRequestInfo[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddCardCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddCardFailCallback - /** 接口调用成功的回调函数 */ - success?: AddCardSuccessCallback - } - /** 需要添加的卡券列表 */ - interface AddCardRequestInfo { - /** 卡券的扩展参数。需将 CardExt 对象 JSON 序列化为**字符串**传入 */ - cardExt: string - /** 卡券 ID */ - cardId: string - } - /** 卡券添加结果列表 */ - interface AddCardResponseInfo { - /** 卡券的扩展参数,结构请参考下文 */ - cardExt: string - /** 用户领取到卡券的 ID */ - cardId: string - /** 加密 code,为用户领取到卡券的code加密后的字符串,解密请参照:[code 解码接口](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1499332673_Unm7V) */ - code: string - /** 是否成功 */ - isSuccess: boolean - } - interface AddCardSuccessCallbackResult { - /** 卡券添加结果列表 */ - cardList: AddCardResponseInfo[] - errMsg: string - } - interface AddCustomLayerOption { - /** 个性化图层id */ - layerId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddCustomLayerCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddCustomLayerFailCallback - /** 接口调用成功的回调函数 */ - success?: AddCustomLayerSuccessCallback - } - interface AddFileToFavoritesOption { - /** 要收藏的文件地址,必须为本地路径或临时路径 */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddFileToFavoritesCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddFileToFavoritesFailCallback - /** 自定义文件名,若留空则使用filePath中的文件名 */ - fileName?: string - /** 接口调用成功的回调函数 */ - success?: AddFileToFavoritesSuccessCallback - } - interface AddGroundOverlayOption { - /** 图片覆盖的经纬度范围 */ - bounds: MapBounds - /** 图片图层 id */ - id: string - /** 图片路径,支持网络图片、临时路径、代码包路径 */ - src: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddGroundOverlayCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddGroundOverlayFailCallback - /** 图层透明度 */ - opacity?: number - /** 接口调用成功的回调函数 */ - success?: AddGroundOverlaySuccessCallback - /** 是否可见 */ - visible?: boolean - /** 图层绘制顺序 */ - zIndex?: number - } - interface AddMarkersOption { - /** 同传入 map 组件的 marker 属性 */ - markers: any[] - /** 是否先清空地图上所有 marker */ - clear?: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddMarkersCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddMarkersFailCallback - /** 接口调用成功的回调函数 */ - success?: AddMarkersSuccessCallback - } - interface AddPhoneCalendarOption { - /** 开始时间的 unix 时间戳 */ - startTime: number - /** 日历事件标题 */ - title: string - /** 是否提醒,默认 true */ - alarm?: boolean - /** 提醒提前量,单位秒,默认 0 表示开始时提醒 */ - alarmOffset?: number - /** 是否全天事件,默认 false */ - allDay?: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddPhoneCalendarCompleteCallback - /** 事件说明 */ - description?: string - /** 结束时间的 unix 时间戳,默认与开始时间相同 */ - endTime?: string - /** 接口调用失败的回调函数 */ - fail?: AddPhoneCalendarFailCallback - /** 事件位置 */ - location?: string - /** 接口调用成功的回调函数 */ - success?: AddPhoneCalendarSuccessCallback - } - interface AddPhoneContactOption { - /** 名字 */ - firstName: string - /** 联系地址城市 */ - addressCity?: string - /** 联系地址国家 */ - addressCountry?: string - /** 联系地址邮政编码 */ - addressPostalCode?: string - /** 联系地址省份 */ - addressState?: string - /** 联系地址街道 */ - addressStreet?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddPhoneContactCompleteCallback - /** 电子邮件 */ - email?: string - /** 接口调用失败的回调函数 */ - fail?: AddPhoneContactFailCallback - /** 住宅地址城市 */ - homeAddressCity?: string - /** 住宅地址国家 */ - homeAddressCountry?: string - /** 住宅地址邮政编码 */ - homeAddressPostalCode?: string - /** 住宅地址省份 */ - homeAddressState?: string - /** 住宅地址街道 */ - homeAddressStreet?: string - /** 住宅传真 */ - homeFaxNumber?: string - /** 住宅电话 */ - homePhoneNumber?: string - /** 公司电话 */ - hostNumber?: string - /** 姓氏 */ - lastName?: string - /** 中间名 */ - middleName?: string - /** 手机号 */ - mobilePhoneNumber?: string - /** 昵称 */ - nickName?: string - /** 公司 */ - organization?: string - /** 头像本地文件路径 */ - photoFilePath?: string - /** 备注 */ - remark?: string - /** 接口调用成功的回调函数 */ - success?: AddPhoneContactSuccessCallback - /** 职位 */ - title?: string - /** 网站 */ - url?: string - /** 微信号 */ - weChatNumber?: string - /** 工作地址城市 */ - workAddressCity?: string - /** 工作地址国家 */ - workAddressCountry?: string - /** 工作地址邮政编码 */ - workAddressPostalCode?: string - /** 工作地址省份 */ - workAddressState?: string - /** 工作地址街道 */ - workAddressStreet?: string - /** 工作传真 */ - workFaxNumber?: string - /** 工作电话 */ - workPhoneNumber?: string - } - interface AddPhoneRepeatCalendarOption { - /** 开始时间的 unix 时间戳 (1970年1月1日开始所经过的秒数) */ - startTime: number - /** 日历事件标题 */ - title: string - /** 是否提醒,默认 true */ - alarm?: boolean - /** 提醒提前量,单位秒,默认 0 表示开始时提醒 */ - alarmOffset?: number - /** 是否全天事件,默认 false */ - allDay?: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddPhoneRepeatCalendarCompleteCallback - /** 事件说明 */ - description?: string - /** 结束时间的 unix 时间戳,默认与开始时间相同 */ - endTime?: string - /** 接口调用失败的回调函数 */ - fail?: AddPhoneRepeatCalendarFailCallback - /** 事件位置 */ - location?: string - /** 重复周期结束时间的 unix 时间戳,不填表示一直重复 */ - repeatEndTime?: number - /** 重复周期,默认 month 每月重复 - * - * 可选值: - * - 'day': 每天重复; - * - 'week': 每周重复; - * - 'month': 每月重复。该模式日期不能大于 28 日; - * - 'year': 每年重复; */ - repeatInterval?: 'day' | 'week' | 'month' | 'year' - /** 接口调用成功的回调函数 */ - success?: AddPhoneRepeatCalendarSuccessCallback - } - interface AddServiceOption { - /** 描述service的Object */ - service: BLEPeripheralService - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddServiceCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddServiceFailCallback - /** 接口调用成功的回调函数 */ - success?: AddServiceSuccessCallback - } - interface AddVideoToFavoritesOption { - /** 要收藏的视频地址,必须为本地路径或临时路径 */ - videoPath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddVideoToFavoritesCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddVideoToFavoritesFailCallback - /** 接口调用成功的回调函数 */ - success?: AddVideoToFavoritesSuccessCallback - /** 缩略图路径,若留空则使用视频首帧 */ - thumbPath?: string - } - interface AddVisualLayerOption { - /** 可视化图层id([创建图层指引](https://lbs.qq.com/dev/console/layers/layerEdit)) */ - layerId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AddVisualLayerCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AddVisualLayerFailCallback - /** 刷新周期,单位秒 */ - interval?: number - /** 图层透明度 */ - opacity?: number - /** 接口调用成功的回调函数 */ - success?: AddVisualLayerSuccessCallback - /** 图层绘制顺序 */ - zIndex?: number - } - /** 广播自定义参数 */ - interface AdvertiseReqObj { - /** 需要基础库: `2.20.1` - * - * 以 beacon 设备形式广播的参数。 */ - beacon?: BeaconInfoObj - /** 当前设备是否可连接 */ - connectable?: boolean - /** 广播中 deviceName 字段,默认为空 */ - deviceName?: string - /** 广播的制造商信息。仅安卓支持,iOS 因系统限制无法定制。 */ - manufacturerData?: ManufacturerData[] - /** 要广播的服务 UUID 列表。使用 16/32 位 UUID 时请参考注意事项。 */ - serviceUuids?: string[] - } - /** animationData */ - interface AnimationExportResult { - actions: IAnyObject[] - } - /** 动画效果 */ - interface AnimationOption { - /** 动画变化时间,单位 ms */ - duration?: number - /** 动画变化方式 - * - * 可选值: - * - 'linear': 动画从头到尾的速度是相同的; - * - 'easeIn': 动画以低速开始; - * - 'easeOut': 动画以低速结束; - * - 'easeInOut': 动画以低速开始和结束; */ - timingFunc?: 'linear' | 'easeIn' | 'easeOut' | 'easeInOut' - } - interface AppAuthorizeSetting { - /** 允许微信使用相册的开关(仅 iOS 有效) */ - albumAuthorized: 'authorized' | 'denied' | 'not determined' - /** 允许微信使用蓝牙的开关(仅 iOS 有效) */ - bluetoothAuthorized: 'authorized' | 'denied' | 'not determined' - /** 允许微信使用摄像头的开关 */ - cameraAuthorized: 'authorized' | 'denied' | 'not determined' - /** 允许微信使用定位的开关 */ - locationAuthorized: 'authorized' | 'denied' | 'not determined' - /** 定位准确度。true 表示模糊定位,false 表示精确定位(仅 iOS 有效) */ - locationReducedAccuracy: boolean - /** 允许微信使用麦克风的开关 */ - microphoneAuthorized: 'authorized' | 'denied' | 'not determined' - /** 允许微信通知带有提醒的开关(仅 iOS 有效) */ - notificationAlertAuthorized: 'authorized' | 'denied' | 'not determined' - /** 允许微信通知的开关 */ - notificationAuthorized: 'authorized' | 'denied' | 'not determined' - /** 允许微信通知带有标记的开关(仅 iOS 有效) */ - notificationBadgeAuthorized: 'authorized' | 'denied' | 'not determined' - /** 允许微信通知带有声音的开关(仅 iOS 有效) */ - notificationSoundAuthorized: 'authorized' | 'denied' | 'not determined' - /** 允许微信读写日历的开关 */ - phoneCalendarAuthorized: 'authorized' | 'denied' | 'not determined' - } - interface AppBaseInfo { - /** 客户端基础库版本 */ - SDKVersion: string - /** 是否已打开调试。可通过右上角菜单或 [wx.setEnableDebug](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.setEnableDebug.html) 打开调试。 */ - enableDebug: boolean - /** 当前小程序运行的宿主环境 */ - host: AppBaseInfoHost - /** 微信设置的语言 */ - language: string - /** 微信版本号 */ - version: string - /** 系统当前主题,取值为`light`或`dark`,全局配置`"darkmode":true`时才能获取,否则为 undefined (不支持小游戏) - * - * 可选值: - * - 'dark': 深色主题; - * - 'light': 浅色主题; */ - theme?: 'dark' | 'light' - } - /** 当前小程序运行的宿主环境 */ - interface AppBaseInfoHost { - /** 宿主 app(第三方App) 对应的 appId (当小程序运行在第三方App环境时才返回) */ - appId: string - } - interface AppendFileFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 文件不存在; - * - 'fail illegal operation on a directory, open "${filePath}"': 指定的 filePath 是一个已经存在的目录; - * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface AppendFileOption { - /** 要追加的文本或二进制数据 */ - data: string | ArrayBuffer - /** 要追加内容的文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AppendFileCompleteCallback - /** 指定写入文件的字符编码 - * - * 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - /** 接口调用失败的回调函数 */ - fail?: AppendFileFailCallback - /** 接口调用成功的回调函数 */ - success?: AppendFileSuccessCallback - } - interface Asset { - src: string - /** 可选值: - * - 'font': 字体; - * - 'image': 图片; */ - type: 'font' | 'image' - } - /** 需要基础库: `2.19.0` - * - * AudioBuffer接口表示存在内存里的一段短小的音频资源,利用[WebAudioContext.decodeAudioData](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.decodeAudioData.html)方法从一个音频文件构建,或者利用 [AudioContext.createBuffer](#)从原始数据构建。把音频放入AudioBuffer后,可以传入到一个 AudioBufferSourceNode进行播放。 */ - interface AudioBuffer { - /** 返回存储在缓存区的PCM数据的时长(单位为秒) */ - duration: number - /** 返回存储在缓存区的PCM数据的采样帧率 */ - length: number - /** 储存在缓存区的PCM数据的通道数 */ - numberOfChannels: number - /** 存储在缓存区的PCM数据的采样率(单位为sample/s) */ - sampleRate: number - } - interface AuthPrivateMessageOption { - /** shareTicket。可以从 wx.onShow 中获取。详情 [shareTicket](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ - shareTicket: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AuthPrivateMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AuthPrivateMessageFailCallback - /** 接口调用成功的回调函数 */ - success?: AuthPrivateMessageSuccessCallback - } - interface AuthPrivateMessageSuccessCallbackResult { - /** 经过加密的activityId,解密后可得到原始的activityId。若解密后得到的activityId可以与开发者后台的活动id对应上则验证通过,否则表明valid字段不可靠(被篡改) 详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ - encryptedData: string - /** 错误信息 */ - errMsg: string - /** 加密算法的初始向量,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ - iv: string - /** 验证是否通过 */ - valid: boolean - } - /** 用户授权设置信息,详情参考[权限](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html) */ - interface AuthSetting { - /** 是否授权系统日历,对应接口 [wx.addPhoneRepeatCalendar](https://developers.weixin.qq.com/miniprogram/dev/api/device/calendar/wx.addPhoneRepeatCalendar.html)、[wx.addPhoneCalendar](https://developers.weixin.qq.com/miniprogram/dev/api/device/calendar/wx.addPhoneCalendar.html) */ - 'scope.addPhoneCalendar'?: boolean - /** 是否添加通讯录联系人,对应接口 [wx.addPhoneContact](https://developers.weixin.qq.com/miniprogram/dev/api/device/contact/wx.addPhoneContact.html) */ - 'scope.addPhoneContact'?: boolean - /** 是否授权通讯地址,已取消此项授权,会默认返回true */ - 'scope.address'?: boolean - /** 是否授权蓝牙,对应接口 [wx.openBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html)、[wx.createBLEPeripheralServer](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/wx.createBLEPeripheralServer.html) */ - 'scope.bluetooth'?: boolean - /** 是否授权摄像头,对应[[camera](https://developers.weixin.qq.com/miniprogram/dev/component/camera.html)](https://developers.weixin.qq.com/miniprogram/dev/component/camera.html) 组件 */ - 'scope.camera'?: boolean - /** 是否授权获取发票,已取消此项授权,会默认返回true */ - 'scope.invoice'?: boolean - /** 是否授权发票抬头,已取消此项授权,会默认返回true */ - 'scope.invoiceTitle'?: boolean - /** 是否授权录音功能,对应接口 [wx.startRecord](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.startRecord.html) */ - 'scope.record'?: boolean - /** 是否授权用户信息,对应接口 [wx.getUserInfo](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html) */ - 'scope.userInfo'?: boolean - /** 是否授权地理位置,对应接口 [wx.getLocation](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html), [wx.chooseLocation](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.chooseLocation.html) */ - 'scope.userLocation'?: boolean - /** 是否授权微信运动步数,对应接口 [wx.getWeRunData](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html) */ - 'scope.werun'?: boolean - /** 是否授权保存到相册 [wx.saveImageToPhotosAlbum](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.saveImageToPhotosAlbum.html), [wx.saveVideoToPhotosAlbum](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.saveVideoToPhotosAlbum.html) */ - 'scope.writePhotosAlbum'?: boolean - } - interface AuthorizeForMiniProgramOption { - /** 需要获取权限的 scope,详见 [scope 列表](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html#scope-列表) - * - * 可选值: - * - 'scope.record': ; - * - 'scope.writePhotosAlbum': ; - * - 'scope.camera': ; */ - scope: 'scope.record' | 'scope.writePhotosAlbum' | 'scope.camera' - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AuthorizeForMiniProgramCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AuthorizeForMiniProgramFailCallback - /** 接口调用成功的回调函数 */ - success?: AuthorizeForMiniProgramSuccessCallback - } - interface AuthorizeOption { - /** 需要获取权限的 scope,详见 [scope 列表](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html#scope-列表) */ - scope: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: AuthorizeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: AuthorizeFailCallback - /** 接口调用成功的回调函数 */ - success?: AuthorizeSuccessCallback - } - /** 设备特征列表 */ - interface BLECharacteristic { - /** 该特征支持的操作类型 */ - properties: BLECharacteristicProperties - /** 蓝牙设备特征的 UUID */ - uuid: string - } - /** 该特征支持的操作类型 */ - interface BLECharacteristicProperties { - /** 该特征是否支持 indicate 操作 */ - indicate: boolean - /** 该特征是否支持 notify 操作 */ - notify: boolean - /** 该特征是否支持 read 操作 */ - read: boolean - /** 该特征是否支持 write 操作 */ - write: boolean - /** 该特征是否支持有回复写操作 */ - writeDefault: boolean - /** 该特征是否支持无回复写操作 */ - writeNoResponse: boolean - } - interface BLEPeripheralServerCloseOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: FileSystemManagerCloseCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SocketTaskCloseFailCallback - /** 接口调用成功的回调函数 */ - success?: FileSystemManagerCloseSuccessCallback - } - /** 描述service的Object */ - interface BLEPeripheralService { - /** characteristics列表 */ - characteristics: Characteristic[] - /** 蓝牙服务的 UUID */ - uuid: string - } - /** 设备服务列表 */ - interface BLEService { - /** 该服务是否为主服务 */ - isPrimary: boolean - /** 蓝牙设备服务的 UUID */ - uuid: string - } - /** BackgroundAudioManager 实例,可通过 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 获取。 -* -* **示例代码** -* -* ```js -const backgroundAudioManager = wx.getBackgroundAudioManager() - -backgroundAudioManager.title = '此时此刻' -backgroundAudioManager.epname = '此时此刻' -backgroundAudioManager.singer = '许巍' -backgroundAudioManager.coverImgUrl = 'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000' -// 设置了 src 之后会自动播放 -backgroundAudioManager.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46' -``` */ - interface BackgroundAudioManager { - /** 音频已缓冲的时间,仅保证当前播放时间点到此时间点内容已缓冲。(只读) */ - buffered: number - /** 封面图 URL,用于做原生音频播放器背景图。原生音频播放器中的分享功能,分享出去的卡片配图及背景也将使用该图。 */ - coverImgUrl: string - /** 当前音频的播放位置(单位:s),只有在有合法 src 时返回。(只读) */ - currentTime: number - /** 当前音频的长度(单位:s),只有在有合法 src 时返回。(只读) */ - duration: number - /** 专辑名,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。 */ - epname: string - /** 当前是否暂停或停止。(只读) */ - paused: boolean - /** 需要基础库: `2.11.0` - * - * 播放速度。范围 0.5-2.0,默认为 1。(Android 需要 6 及以上版本) */ - playbackRate: number - /** 需要基础库: `1.9.94` - * - * 音频协议。默认值为 'http',设置 'hls' 可以支持播放 HLS 协议的直播音频。 */ - protocol: string - /** 需要基础库: `2.13.0` - * - * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ - referrerPolicy: string - /** 歌手名,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。 */ - singer: string - /** 音频的数据源([2.2.3](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 开始支持云文件ID)。默认为空字符串,**当设置了新的 src 时,会自动开始播放**,目前支持的格式有 m4a, aac, mp3, wav。 */ - src: string - /** 音频开始播放的位置(单位:s)。 */ - startTime: number - /** 音频标题,用于原生音频播放器音频标题(必填)。原生音频播放器中的分享功能,分享出去的卡片标题,也将使用该值。 */ - title: string - /** 页面链接,原生音频播放器中的分享功能,分享出去的卡片简介,也将使用该值。 */ - webUrl: string - } - interface BatchGetStorageOption { - /** 本地缓存中指定的 keyList */ - keyList: string[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: BatchGetStorageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: BatchGetStorageFailCallback - /** 接口调用成功的回调函数 */ - success?: BatchGetStorageSuccessCallback - } - interface BatchSetStorageOption { - /** { key, value } */ - kvList: IAnyObject - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: BatchSetStorageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: BatchSetStorageFailCallback - /** 接口调用成功的回调函数 */ - success?: BatchSetStorageSuccessCallback - } - /** Beacon 设备 */ - interface BeaconInfo { - /** Beacon 设备的距离,单位 m。iOS 上,proximity 为 0 时,accuracy 为 -1。 */ - accuracy: number - /** Beacon 设备的主 ID */ - major: number - /** Beacon 设备的次 ID */ - minor: number - /** 表示设备距离的枚举值(仅iOS) - * - * 可选值: - * - 0: 信号太弱不足以计算距离,或非 iOS 设备; - * - 1: 十分近; - * - 2: 比较近; - * - 3: 远; */ - proximity: 0 | 1 | 2 | 3 - /** 表示设备的信号强度,单位 dBm */ - rssi: number - /** Beacon 设备广播的 UUID */ - uuid: string - } - /** 需要基础库: `2.20.1` - * - * 以 beacon 设备形式广播的参数。 */ - interface BeaconInfoObj { - /** Beacon 设备的主 ID */ - major: number - /** Beacon 设备的次 ID */ - minor: number - /** Beacon 设备广播的 UUID */ - uuid: string - /** 用于判断距离设备 1 米时 RSSI 大小的参考值 */ - measuredPower?: number - } - interface BindWifiOption { - /** 当前 wifi 网络的 BSSID ,可通过 wx.getConnectedWifi 获取 */ - BSSID: string - } - interface BlueToothDevice { - /** 当前蓝牙设备的信号强度,单位 dBm */ - RSSI: number - /** 当前蓝牙设备的广播数据段中的 ManufacturerData 数据段。 */ - advertisData: ArrayBuffer - /** 当前蓝牙设备的广播数据段中的 ServiceUUIDs 数据段 */ - advertisServiceUUIDs: string[] - /** 当前蓝牙设备是否可连接( Android 8.0 以下不支持返回该值 ) */ - connectable: boolean - /** 蓝牙设备 id */ - deviceId: string - /** 当前蓝牙设备的广播数据段中的 LocalName 数据段 */ - localName: string - /** 蓝牙设备名称,某些设备可能没有 */ - name: string - /** 当前蓝牙设备的广播数据段中的 ServiceData 数据段 */ - serviceData: IAnyObject - } - /** 搜索到的设备列表 */ - interface BluetoothDeviceInfo { - /** 用于区分设备的 id */ - deviceId: string - /** 蓝牙设备名称,某些设备可能没有 */ - name: string - } - interface BlurOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: BlurCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: BlurFailCallback - /** 接口调用成功的回调函数 */ - success?: BlurSuccessCallback - } - interface BoundingClientRectCallbackResult { - /** 节点的下边界坐标 */ - bottom: number - /** 节点的 dataset */ - dataset: IAnyObject - /** 节点的高度 */ - height: number - /** 节点的 ID */ - id: string - /** 节点的左边界坐标 */ - left: number - /** 节点的右边界坐标 */ - right: number - /** 节点的上边界坐标 */ - top: number - /** 节点的宽度 */ - width: number - } - /** 目标边界 */ - interface BoundingClientRectResult { - /** 下边界 */ - bottom: number - /** 高度 */ - height: number - /** 左边界 */ - left: number - /** 右边界 */ - right: number - /** 上边界 */ - top: number - /** 宽度 */ - width: number - } - /** 需要基础库: `2.24.0` - * - * 缓存管理器。全局只有唯一实例,一旦被创建出来即表示接入缓存管理器。其有以下几个能力: - * - * 1. 在网络通畅时,符合一定规则的用户网络请求(目前只包括普通 wx.request 请求)会被缓存。 - * 2. 在网络通畅时,某些 wx api 调用会被缓存。 - * 3. 进入弱网/离线状态时,会提供事件给用户,用户可以决定是否使用缓存返回。 - * 4. 提供进入和退出弱网/离线状态的事件。 - * - * > 1. 缓存管理器中涉及的网络请求如无特指,均指普通的 wx.request 异步请求,参数和返回值中均不考虑涉及 ArrayBuffer 或 TypedArray 的情形。 - * > 2. 缓存管理器中的缓存不会占用 storage 空间,但是有大小限制,请勿在非必要的请求上使用缓存。 */ - interface CacheManager { - /** 全局缓存有效时间 */ - maxAge: string - /** 当前缓存模式 - * - * 可选值: - * - 'weakNetwork': 默认值,弱网/离线使用缓存返回; - * - 'always': 总是使用缓存返回; - * - 'none': 不开启,后续可手动开启/停止使用缓存返回; */ - mode: 'weakNetwork' | 'always' | 'none' - /** 全局 origin */ - origin: string - /** 当前缓存管理器状态 - * - * 可选值: - * - 0: 不使用缓存返回; - * - 1: 使用缓存返回; - * - 2: 未知; */ - state: 0 | 1 | 2 - } - interface CameraContextStartRecordOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartRecordCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartRecordFailCallback - /** 需要基础库: `2.22.0` - * - * 是否开启镜像 */ - selfieMirror?: boolean - /** 接口调用成功的回调函数 */ - success?: CameraContextStartRecordSuccessCallback - /** 需要基础库: `2.22.0` - * - * 录制时长上限,单位为秒,最长不能超过 5 分钟 */ - timeout?: number - /** 超过录制时长上限时会结束录像并触发此回调,录像异常退出时也会触发此回调 */ - timeoutCallback?: StartRecordTimeoutCallback - } - interface CameraContextStopRecordOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopRecordCompleteCallback - /** 启动视频压缩,压缩效果同`chooseVideo` */ - compressed?: boolean - /** 接口调用失败的回调函数 */ - fail?: StopRecordFailCallback - /** 接口调用成功的回调函数 */ - success?: CameraContextStopRecordSuccessCallback - } - interface CameraFrameListenerStartOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartFailCallback - /** 接口调用成功的回调函数 */ - success?: StartSuccessCallback - /** [Worker](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.html) - * - * 需要基础库: `2.25.1` - * - * 可选参数。如果需要在 iOS ExperimentalWorker 内监听摄像头帧数据,则需要传入对应 Worker 对象。详情 [Worker.getCameraFrameData](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.getCameraFrameData.html) */ - worker?: Worker - } - /** 需要基础库: `2.7.0` - * - * Canvas 实例,可通过 [SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) 获取。 - * - * **示例代码** - * - * 2D Canvas 示例 - * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/SHfgCmmq7UcM) - * - * WebGL 示例 - * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/qEGUOqmf7T8z) */ - interface Canvas { - /** 画布高度 */ - height: number - /** 画布宽度 */ - width: number - } - /** @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 - * - * canvas 组件的绘图上下文。CanvasContext 是旧版的接口, 新版 Canvas 2D 接口与 Web 一致。 */ - interface CanvasContext { - /** 需要基础库: `1.9.90` - * - * 填充颜色。用法同 [CanvasContext.setFillStyle()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFillStyle.html)。 */ - fillStyle: string | CanvasGradient - /** 需要基础库: `1.9.90` - * - * 当前字体样式的属性。符合 [CSS font 语法](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font) 的 DOMString 字符串,至少需要提供字体大小和字体族名。默认值为 10px sans-serif。 */ - font: string - /** 全局画笔透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 */ - globalAlpha: number - /** 需要基础库: `1.9.90` - * - * 在绘制新形状时应用的合成操作的类型。目前安卓版本只适用于 `fill` 填充块的合成,用于 `stroke` 线段的合成效果都是 `source-over`。 - * - * 目前支持的操作有 - * - 安卓:xor, source-over, source-atop, destination-out, lighter, overlay, darken, lighten, hard-light - * - iOS:xor, source-over, source-atop, destination-over, destination-out, lighter, multiply, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion, saturation, luminosity */ - globalCompositeOperation: string - /** 需要基础库: `1.9.90` - * - * 线条的端点样式。用法同 [CanvasContext.setLineCap()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineCap.html)。 */ - lineCap: string - /** 需要基础库: `1.9.90` - * - * 虚线偏移量,初始值为0 */ - lineDashOffset: number - /** 需要基础库: `1.9.90` - * - * 线条的交点样式。用法同 [CanvasContext.setLineJoin()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html)。 - * - * 可选值: - * - 'bevel': 斜角; - * - 'round': 圆角; - * - 'miter': 尖角; */ - lineJoin: 'bevel' | 'round' | 'miter' - /** 需要基础库: `1.9.90` - * - * 线条的宽度。用法同 [CanvasContext.setLineWidth()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineWidth.html)。 */ - lineWidth: number - /** 需要基础库: `1.9.90` - * - * 最大斜接长度。用法同 [CanvasContext.setMiterLimit()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setMiterLimit.html)。 */ - miterLimit: number - /** 需要基础库: `1.9.90` - * - * 阴影的模糊级别 */ - shadowBlur: number - /** 需要基础库: `1.9.90` - * - * 阴影的颜色 */ - shadowColor: number - /** 需要基础库: `1.9.90` - * - * 阴影相对于形状在水平方向的偏移 */ - shadowOffsetX: number - /** 需要基础库: `1.9.90` - * - * 阴影相对于形状在竖直方向的偏移 */ - shadowOffsetY: number - /** 需要基础库: `1.9.90` - * - * 边框颜色。用法同 [CanvasContext.setStrokeStyle()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setStrokeStyle.html)。 */ - strokeStyle: string | CanvasGradient - } - interface CanvasGetImageDataOption { - /** 画布标识,传入 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件的 `canvas-id` 属性。 */ - canvasId: string - /** 将要被提取的图像数据矩形区域的高度 */ - height: number - /** 将要被提取的图像数据矩形区域的宽度 */ - width: number - /** 将要被提取的图像数据矩形区域的左上角横坐标 */ - x: number - /** 将要被提取的图像数据矩形区域的左上角纵坐标 */ - y: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CanvasGetImageDataCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CanvasGetImageDataFailCallback - /** 接口调用成功的回调函数 */ - success?: CanvasGetImageDataSuccessCallback - } - interface CanvasGetImageDataSuccessCallbackResult { - /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */ - data: Uint8ClampedArray - /** 图像数据矩形的高度 */ - height: number - /** 图像数据矩形的宽度 */ - width: number - errMsg: string - } - interface CanvasPutImageDataOption { - /** 画布标识,传入 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件的 canvas-id 属性。 */ - canvasId: string - /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */ - data: Uint8ClampedArray - /** 源图像数据矩形区域的高度 */ - height: number - /** 源图像数据矩形区域的宽度 */ - width: number - /** 源图像数据在目标画布中的位置偏移量(x 轴方向的偏移量) */ - x: number - /** 源图像数据在目标画布中的位置偏移量(y 轴方向的偏移量) */ - y: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CanvasPutImageDataCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CanvasPutImageDataFailCallback - /** 接口调用成功的回调函数 */ - success?: CanvasPutImageDataSuccessCallback - } - interface CanvasToTempFilePathOption { - /** 画布标识,传入 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件实例 (canvas type="2d" 时使用该属性)。 */ - canvas?: IAnyObject - /** 画布标识,传入 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件的 canvas-id */ - canvasId?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CanvasToTempFilePathCompleteCallback - /** 需要基础库: `1.2.0` - * - * 输出的图片的高度 */ - destHeight?: number - /** 需要基础库: `1.2.0` - * - * 输出的图片的宽度 */ - destWidth?: number - /** 接口调用失败的回调函数 */ - fail?: CanvasToTempFilePathFailCallback - /** 需要基础库: `1.7.0` - * - * 目标文件的类型 - * - * 可选值: - * - 'jpg': jpg 图片; - * - 'png': png 图片; */ - fileType?: 'jpg' | 'png' - /** 需要基础库: `1.2.0` - * - * 指定的画布区域的高度 */ - height?: number - /** 需要基础库: `1.7.0` - * - * 图片的质量,目前仅对 jpg 有效。取值范围为 (0, 1],不在范围内时当作 1.0 处理。 */ - quality?: number - /** 接口调用成功的回调函数 */ - success?: CanvasToTempFilePathSuccessCallback - /** 需要基础库: `1.2.0` - * - * 指定的画布区域的宽度 */ - width?: number - /** 需要基础库: `1.2.0` - * - * 指定的画布区域的左上角横坐标 */ - x?: number - /** 需要基础库: `1.2.0` - * - * 指定的画布区域的左上角纵坐标 */ - y?: number - } - interface CanvasToTempFilePathSuccessCallbackResult { - /** 生成文件的临时路径 (本地路径) */ - tempFilePath: string - errMsg: string - } - /** characteristics列表 */ - interface Characteristic { - /** characteristic 的 UUID */ - uuid: string - /** 描述符数据 */ - descriptors?: CharacteristicDescriptor[] - /** 特征权限 */ - permission?: CharacteristicPermission - /** 特征支持的操作 */ - properties?: CharacteristicProperties - /** 特征对应的二进制值 */ - value?: ArrayBuffer - } - /** 描述符数据 */ - interface CharacteristicDescriptor { - /** Descriptor 的 UUID */ - uuid: string - /** 描述符的权限 */ - permission?: DescriptorPermission - /** 描述符数据 */ - value?: ArrayBuffer - } - /** 特征权限 */ - interface CharacteristicPermission { - /** 加密读请求 */ - readEncryptionRequired?: boolean - /** 可读 */ - readable?: boolean - /** 加密写请求 */ - writeEncryptionRequired?: boolean - /** 可写 */ - writeable?: boolean - } - /** 特征支持的操作 */ - interface CharacteristicProperties { - /** 回包 */ - indicate?: boolean - /** 订阅 */ - notify?: boolean - /** 读 */ - read?: boolean - /** 写 */ - write?: boolean - /** 无回复写 */ - writeNoResponse?: boolean - } - interface CheckIsOpenAccessibilityOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CheckIsOpenAccessibilityCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CheckIsOpenAccessibilityFailCallback - /** 接口调用成功的回调函数 */ - success?: CheckIsOpenAccessibilitySuccessCallback - } - interface CheckIsOpenAccessibilitySuccessCallbackOption { - /** iOS 上开启辅助功能旁白,安卓开启 talkback 时返回 true */ - open: boolean - } - interface CheckIsSoterEnrolledInDeviceOption { - /** 认证方式 - * - * 可选值: - * - 'fingerPrint': 指纹识别; - * - 'facial': 人脸识别; - * - 'speech': 声纹识别(暂未支持); */ - checkAuthMode: 'fingerPrint' | 'facial' | 'speech' - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CheckIsSoterEnrolledInDeviceCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CheckIsSoterEnrolledInDeviceFailCallback - /** 接口调用成功的回调函数 */ - success?: CheckIsSoterEnrolledInDeviceSuccessCallback - } - interface CheckIsSoterEnrolledInDeviceSuccessCallbackResult { - /** 错误信息 */ - errMsg: string - /** 是否已录入信息 */ - isEnrolled: boolean - } - interface CheckIsSupportSoterAuthenticationOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CheckIsSupportSoterAuthenticationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CheckIsSupportSoterAuthenticationFailCallback - /** 接口调用成功的回调函数 */ - success?: CheckIsSupportSoterAuthenticationSuccessCallback - } - interface CheckIsSupportSoterAuthenticationSuccessCallbackResult { - /** 该设备支持的可被SOTER识别的生物识别方式 - * - * 可选值: - * - 'fingerPrint': 指纹识别; - * - 'facial': 人脸识别; - * - 'speech': 声纹识别(暂未支持); */ - supportMode: Array<'fingerPrint' | 'facial' | 'speech'> - errMsg: string - } - interface CheckSessionOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CheckSessionCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CheckSessionFailCallback - /** 接口调用成功的回调函数 */ - success?: CheckSessionSuccessCallback - } - interface ChooseAddressOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseAddressCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ChooseAddressFailCallback - /** 接口调用成功的回调函数 */ - success?: ChooseAddressSuccessCallback - } - interface ChooseAddressSuccessCallbackResult { - /** 国标收货地址第二级地址 */ - cityName: string - /** 国标收货地址第三级地址 */ - countyName: string - /** 详细收货地址信息(包括街道地址) */ - detailInfo: string - /** 新选择器详细收货地址信息 */ - detailInfoNew: string - /** 错误信息 */ - errMsg: string - /** 收货地址国家码 */ - nationalCode: string - /** 邮编 */ - postalCode: string - /** 国标收货地址第一级地址 */ - provinceName: string - /** 国标收货地址第四级地址 */ - streetName: string - /** 收货人手机号码 */ - telNumber: string - /** 收货人姓名 */ - userName: string - } - interface ChooseContactOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseContactCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ChooseContactFailCallback - /** 接口调用成功的回调函数 */ - success?: ChooseContactSuccessCallback - } - interface ChooseContactSuccessCallbackOption { - /** 联系人姓名 */ - displayName: string - /** 手机号 */ - phoneNumber: string - /** 选定联系人的所有手机号(部分 Android 系统只能选联系人而不能选特定手机号) */ - phoneNumberList: string - } - /** 返回选择的文件的本地临时文件对象数组 */ - interface ChooseFile { - /** 选择的文件名称 */ - name: string - /** 本地临时文件路径 (本地路径) */ - path: string - /** 本地临时文件大小,单位 B */ - size: number - /** 选择的文件的会话发送时间,Unix时间戳,工具暂不支持此属性 */ - time: number - /** 选择的文件类型 - * - * 可选值: - * - 'video': 选择了视频文件; - * - 'image': 选择了图片文件; - * - 'file': 选择了除图片和视频的文件; */ - type: 'video' | 'image' | 'file' - } - interface ChooseImageOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseImageCompleteCallback - /** 最多可以选择的图片张数 */ - count?: number - /** 接口调用失败的回调函数 */ - fail?: ChooseImageFailCallback - /** 所选的图片的尺寸 - * - * 可选值: - * - 'original': 原图; - * - 'compressed': 压缩图; */ - sizeType?: Array<'original' | 'compressed'> - /** 选择图片的来源 - * - * 可选值: - * - 'album': 从相册选图; - * - 'camera': 使用相机; */ - sourceType?: Array<'album' | 'camera'> - /** 接口调用成功的回调函数 */ - success?: ChooseImageSuccessCallback - } - interface ChooseImageSuccessCallbackResult { - /** 图片的本地临时文件路径列表 (本地路径) */ - tempFilePaths: string[] - /** 需要基础库: `1.2.0` - * - * 图片的本地临时文件列表 */ - tempFiles: ImageFile[] - errMsg: string - } - interface ChooseInvoiceOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseInvoiceCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ChooseInvoiceFailCallback - /** 接口调用成功的回调函数 */ - success?: ChooseInvoiceSuccessCallback - } - interface ChooseInvoiceSuccessCallbackResult { - /** 用户选中的发票信息,格式为一个 JSON 字符串,包含三个字段: card_id:所选发票卡券的 cardId,encrypt_code:所选发票卡券的加密 code,报销方可以通过 cardId 和 encryptCode 获得报销发票的信息,app_id: 发票方的 appId。 */ - invoiceInfo: string - errMsg: string - } - interface ChooseInvoiceTitleOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseInvoiceTitleCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ChooseInvoiceTitleFailCallback - /** 接口调用成功的回调函数 */ - success?: ChooseInvoiceTitleSuccessCallback - } - interface ChooseInvoiceTitleSuccessCallbackResult { - /** 银行账号 */ - bankAccount: string - /** 银行名称 */ - bankName: string - /** 单位地址 */ - companyAddress: string - /** 错误信息 */ - errMsg: string - /** 抬头税号 */ - taxNumber: string - /** 手机号码 */ - telephone: string - /** 抬头名称 */ - title: string - /** 抬头类型 - * - * 可选值: - * - 0: 单位; - * - 1: 个人; */ - type: 0 | 1 - } - interface ChooseLicensePlateOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseLicensePlateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ChooseLicensePlateFailCallback - /** 接口调用成功的回调函数 */ - success?: ChooseLicensePlateSuccessCallback - } - interface ChooseLicensePlateSuccessCallbackResult { - /** 用户选择的车牌号 */ - plateNumber: string - errMsg: string - } - interface ChooseLocationOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseLocationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ChooseLocationFailCallback - /** 需要基础库: `2.9.0` - * - * 目标地纬度 */ - latitude?: number - /** 需要基础库: `2.9.0` - * - * 目标地经度 */ - longitude?: number - /** 接口调用成功的回调函数 */ - success?: ChooseLocationSuccessCallback - } - interface ChooseLocationSuccessCallbackResult { - /** 详细地址 */ - address: string - /** 纬度,浮点数,范围为-90~90,负数表示南纬。使用 gcj02 国测局坐标系 */ - latitude: number - /** 经度,浮点数,范围为-180~180,负数表示西经。使用 gcj02 国测局坐标系 */ - longitude: number - /** 位置名称 */ - name: string - errMsg: string - } - interface ChooseMediaOption { - /** 仅在 sourceType 为 camera 时生效,使用前置或后置摄像头 - * - * 可选值: - * - 'back': 使用后置摄像头; - * - 'front': 使用前置摄像头; */ - camera?: 'back' | 'front' - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseMediaCompleteCallback - /** 最多可以选择的文件个数 */ - count?: number - /** 接口调用失败的回调函数 */ - fail?: ChooseMediaFailCallback - /** 拍摄视频最长拍摄时间,单位秒。时间范围为 3s 至 60s 之间。不限制相册。 */ - maxDuration?: number - /** 文件类型 - * - * 可选值: - * - 'image': 只能拍摄图片或从相册选择图片; - * - 'video': 只能拍摄视频或从相册选择视频; - * - 'mix': 可同时选择图片和视频; */ - mediaType?: Array<'image' | 'video' | 'mix'> - /** 仅对 mediaType 为 image 时有效,是否压缩所选文件 */ - sizeType?: string[] - /** 图片和视频选择的来源 - * - * 可选值: - * - 'album': 从相册选择; - * - 'camera': 使用相机拍摄; */ - sourceType?: Array<'album' | 'camera'> - /** 接口调用成功的回调函数 */ - success?: ChooseMediaSuccessCallback - } - interface ChooseMediaSuccessCallbackResult { - /** 本地临时文件列表 */ - tempFiles: MediaFile[] - /** 文件类型,有效值有 image 、video、mix */ - type: string - errMsg: string - } - interface ChooseMessageFileOption { - /** 最多可以选择的文件个数,可以 0~100 */ - count: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseMessageFileCompleteCallback - /** 需要基础库: `2.6.0` - * - * 根据文件拓展名过滤,仅 type==file 时有效。每一项都不能是空字符串。默认不过滤。 */ - extension?: string[] - /** 接口调用失败的回调函数 */ - fail?: ChooseMessageFileFailCallback - /** 接口调用成功的回调函数 */ - success?: ChooseMessageFileSuccessCallback - /** 所选的文件的类型 - * - * 可选值: - * - 'all': 从所有文件选择; - * - 'video': 只能选择视频文件; - * - 'image': 只能选择图片文件; - * - 'file': 可以选择除了图片和视频之外的其它的文件; */ - type?: 'all' | 'video' | 'image' | 'file' - } - interface ChooseMessageFileSuccessCallbackResult { - /** 返回选择的文件的本地临时文件对象数组 */ - tempFiles: ChooseFile[] - errMsg: string - } - interface ChoosePoiOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChoosePoiCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ChoosePoiFailCallback - /** 接口调用成功的回调函数 */ - success?: ChoosePoiSuccessCallback - } - interface ChoosePoiSuccessCallbackResult { - /** 详细地址 */ - address: string - /** 城市名称 */ - city: number - /** 纬度,浮点数,范围为-90~90,负数表示南纬。使用 gcj02 国测局坐标系(即将废弃) */ - latitude: number - /** 经度,浮点数,范围为-180~180,负数表示西经。使用 gcj02 国测局坐标系(即将废弃) */ - longitude: number - /** 位置名称 */ - name: string - /** 选择城市时,值为 1,选择精确位置时,值为 2 */ - type: number - errMsg: string - } - interface ChooseVideoOption { - /** 默认拉起的是前置或者后置摄像头。部分 Android 手机下由于系统 ROM 不支持无法生效 - * - * 可选值: - * - 'back': 默认拉起后置摄像头; - * - 'front': 默认拉起前置摄像头; */ - camera?: 'back' | 'front' - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ChooseVideoCompleteCallback - /** 需要基础库: `1.6.0` - * - * 是否压缩所选择的视频文件 */ - compressed?: boolean - /** 接口调用失败的回调函数 */ - fail?: ChooseVideoFailCallback - /** 拍摄视频最长拍摄时间,单位秒 */ - maxDuration?: number - /** 视频选择的来源 - * - * 可选值: - * - 'album': 从相册选择视频; - * - 'camera': 使用相机拍摄视频; */ - sourceType?: Array<'album' | 'camera'> - /** 接口调用成功的回调函数 */ - success?: ChooseVideoSuccessCallback - } - interface ChooseVideoSuccessCallbackResult { - /** 选定视频的时间长度 */ - duration: number - /** 返回选定视频的高度 */ - height: number - /** 选定视频的数据量大小 */ - size: number - /** 选定视频的临时文件路径 (本地路径) */ - tempFilePath: string - /** 返回选定视频的宽度 */ - width: number - errMsg: string - } - interface ClearOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ClearCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ClearFailCallback - /** 接口调用成功的回调函数 */ - success?: ClearSuccessCallback - } - interface ClearStorageOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ClearStorageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ClearStorageFailCallback - /** 接口调用成功的回调函数 */ - success?: ClearStorageSuccessCallback - } - /** 菜单按钮的布局位置信息 */ - interface ClientRect { - /** 下边界坐标,单位:px */ - bottom: number - /** 高度,单位:px */ - height: number - /** 左边界坐标,单位:px */ - left: number - /** 右边界坐标,单位:px */ - right: number - /** 上边界坐标,单位:px */ - top: number - /** 宽度,单位:px */ - width: number - } - interface CloseBLEConnectionOption { - /** 蓝牙设备 id */ - deviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CloseBLEConnectionCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CloseBLEConnectionFailCallback - /** 接口调用成功的回调函数 */ - success?: CloseBLEConnectionSuccessCallback - } - interface CloseBluetoothAdapterOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CloseBluetoothAdapterCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CloseBluetoothAdapterFailCallback - /** 接口调用成功的回调函数 */ - success?: CloseBluetoothAdapterSuccessCallback - } - interface CloseFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'bad file descriptor': 无效的文件描述符; */ - errMsg: string - } - interface CloseSocketOption { - /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ - code?: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CloseSocketCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CloseSocketFailCallback - /** 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。 */ - reason?: string - /** 接口调用成功的回调函数 */ - success?: CloseSocketSuccessCallback - } - interface CloseSyncOption { - /** 需要被关闭的文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - } - /** 颜色。可以用以下几种方式来表示 canvas 中使用的颜色: - * - * - RGB 颜色: 如 `'rgb(255, 0, 0)'` - * - RGBA 颜色:如 `'rgba(255, 0, 0, 0.3)'` - * - 16 进制颜色: 如 `'#FF0000'` - * - 预定义的颜色: 如 `'red'` - * - * 其中预定义颜色有以下148个: - * *注意**: Color Name 大小写不敏感 - * - * | Color Name | HEX | - * | -------------------- | ------- | - * | AliceBlue | #F0F8FF | - * | AntiqueWhite | #FAEBD7 | - * | Aqua | #00FFFF | - * | Aquamarine | #7FFFD4 | - * | Azure | #F0FFFF | - * | Beige | #F5F5DC | - * | Bisque | #FFE4C4 | - * | Black | #000000 | - * | BlanchedAlmond | #FFEBCD | - * | Blue | #0000FF | - * | BlueViolet | #8A2BE2 | - * | Brown | #A52A2A | - * | BurlyWood | #DEB887 | - * | CadetBlue | #5F9EA0 | - * | Chartreuse | #7FFF00 | - * | Chocolate | #D2691E | - * | Coral | #FF7F50 | - * | CornflowerBlue | #6495ED | - * | Cornsilk | #FFF8DC | - * | Crimson | #DC143C | - * | Cyan | #00FFFF | - * | DarkBlue | #00008B | - * | DarkCyan | #008B8B | - * | DarkGoldenRod | #B8860B | - * | DarkGray | #A9A9A9 | - * | DarkGrey | #A9A9A9 | - * | DarkGreen | #006400 | - * | DarkKhaki | #BDB76B | - * | DarkMagenta | #8B008B | - * | DarkOliveGreen | #556B2F | - * | DarkOrange | #FF8C00 | - * | DarkOrchid | #9932CC | - * | DarkRed | #8B0000 | - * | DarkSalmon | #E9967A | - * | DarkSeaGreen | #8FBC8F | - * | DarkSlateBlue | #483D8B | - * | DarkSlateGray | #2F4F4F | - * | DarkSlateGrey | #2F4F4F | - * | DarkTurquoise | #00CED1 | - * | DarkViolet | #9400D3 | - * | DeepPink | #FF1493 | - * | DeepSkyBlue | #00BFFF | - * | DimGray | #696969 | - * | DimGrey | #696969 | - * | DodgerBlue | #1E90FF | - * | FireBrick | #B22222 | - * | FloralWhite | #FFFAF0 | - * | ForestGreen | #228B22 | - * | Fuchsia | #FF00FF | - * | Gainsboro | #DCDCDC | - * | GhostWhite | #F8F8FF | - * | Gold | #FFD700 | - * | GoldenRod | #DAA520 | - * | Gray | #808080 | - * | Grey | #808080 | - * | Green | #008000 | - * | GreenYellow | #ADFF2F | - * | HoneyDew | #F0FFF0 | - * | HotPink | #FF69B4 | - * | IndianRed | #CD5C5C | - * | Indigo | #4B0082 | - * | Ivory | #FFFFF0 | - * | Khaki | #F0E68C | - * | Lavender | #E6E6FA | - * | LavenderBlush | #FFF0F5 | - * | LawnGreen | #7CFC00 | - * | LemonChiffon | #FFFACD | - * | LightBlue | #ADD8E6 | - * | LightCoral | #F08080 | - * | LightCyan | #E0FFFF | - * | LightGoldenRodYellow | #FAFAD2 | - * | LightGray | #D3D3D3 | - * | LightGrey | #D3D3D3 | - * | LightGreen | #90EE90 | - * | LightPink | #FFB6C1 | - * | LightSalmon | #FFA07A | - * | LightSeaGreen | #20B2AA | - * | LightSkyBlue | #87CEFA | - * | LightSlateGray | #778899 | - * | LightSlateGrey | #778899 | - * | LightSteelBlue | #B0C4DE | - * | LightYellow | #FFFFE0 | - * | Lime | #00FF00 | - * | LimeGreen | #32CD32 | - * | Linen | #FAF0E6 | - * | Magenta | #FF00FF | - * | Maroon | #800000 | - * | MediumAquaMarine | #66CDAA | - * | MediumBlue | #0000CD | - * | MediumOrchid | #BA55D3 | - * | MediumPurple | #9370DB | - * | MediumSeaGreen | #3CB371 | - * | MediumSlateBlue | #7B68EE | - * | MediumSpringGreen | #00FA9A | - * | MediumTurquoise | #48D1CC | - * | MediumVioletRed | #C71585 | - * | MidnightBlue | #191970 | - * | MintCream | #F5FFFA | - * | MistyRose | #FFE4E1 | - * | Moccasin | #FFE4B5 | - * | NavajoWhite | #FFDEAD | - * | Navy | #000080 | - * | OldLace | #FDF5E6 | - * | Olive | #808000 | - * | OliveDrab | #6B8E23 | - * | Orange | #FFA500 | - * | OrangeRed | #FF4500 | - * | Orchid | #DA70D6 | - * | PaleGoldenRod | #EEE8AA | - * | PaleGreen | #98FB98 | - * | PaleTurquoise | #AFEEEE | - * | PaleVioletRed | #DB7093 | - * | PapayaWhip | #FFEFD5 | - * | PeachPuff | #FFDAB9 | - * | Peru | #CD853F | - * | Pink | #FFC0CB | - * | Plum | #DDA0DD | - * | PowderBlue | #B0E0E6 | - * | Purple | #800080 | - * | RebeccaPurple | #663399 | - * | Red | #FF0000 | - * | RosyBrown | #BC8F8F | - * | RoyalBlue | #4169E1 | - * | SaddleBrown | #8B4513 | - * | Salmon | #FA8072 | - * | SandyBrown | #F4A460 | - * | SeaGreen | #2E8B57 | - * | SeaShell | #FFF5EE | - * | Sienna | #A0522D | - * | Silver | #C0C0C0 | - * | SkyBlue | #87CEEB | - * | SlateBlue | #6A5ACD | - * | SlateGray | #708090 | - * | SlateGrey | #708090 | - * | Snow | #FFFAFA | - * | SpringGreen | #00FF7F | - * | SteelBlue | #4682B4 | - * | Tan | #D2B48C | - * | Teal | #008080 | - * | Thistle | #D8BFD8 | - * | Tomato | #FF6347 | - * | Turquoise | #40E0D0 | - * | Violet | #EE82EE | - * | Wheat | #F5DEB3 | - * | White | #FFFFFF | - * | WhiteSmoke | #F5F5F5 | - * | Yellow | #FFFF00 | - * | YellowGreen | #9ACD32 | */ - interface Color {} - interface CompressImageOption { - /** 图片路径,图片的路径,支持本地路径、代码包路径 */ - src: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CompressImageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CompressImageFailCallback - /** 压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效)。 */ - quality?: number - /** 接口调用成功的回调函数 */ - success?: CompressImageSuccessCallback - } - interface CompressImageSuccessCallbackResult { - /** 压缩后图片的临时文件路径 (本地路径) */ - tempFilePath: string - errMsg: string - } - interface CompressVideoOption { - /** 码率,单位 kbps */ - bitrate: number - /** 帧率 */ - fps: number - /** 压缩质量 - * - * 可选值: - * - 'low': 低; - * - 'medium': 中; - * - 'high': 高; */ - quality: 'low' | 'medium' | 'high' - /** 相对于原视频的分辨率比例,取值范围(0, 1] */ - resolution: number - /** 视频文件路径,可以是临时文件路径也可以是永久文件路径 */ - src: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CompressVideoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CompressVideoFailCallback - /** 接口调用成功的回调函数 */ - success?: CompressVideoSuccessCallback - } - interface CompressVideoSuccessCallbackResult { - /** 压缩后的大小,单位 kB */ - size: string - /** 压缩后的临时文件地址 */ - tempFilePath: string - errMsg: string - } - interface ConnectSocketOption { - /** 开发者服务器 wss 接口地址 */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ConnectSocketCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ConnectSocketFailCallback - /** HTTP Header,Header 中不能设置 Referer */ - header?: IAnyObject - /** 需要基础库: `2.8.0` - * - * 是否开启压缩扩展 */ - perMessageDeflate?: boolean - /** 需要基础库: `1.4.0` - * - * 子协议数组 */ - protocols?: string[] - /** 接口调用成功的回调函数 */ - success?: ConnectSocketSuccessCallback - /** 需要基础库: `2.4.0` - * - * 建立 TCP 连接的时候的 TCP_NODELAY 设置 */ - tcpNoDelay?: boolean - /** 需要基础库: `2.10.0` - * - * 超时时间,单位为毫秒 */ - timeout?: number - } - interface ConnectWifiOption { - /** Wi-Fi 设备 SSID */ - SSID: string - /** Wi-Fi 设备密码 */ - password: string - /** Wi-Fi 设备 BSSID */ - BSSID?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ConnectWifiCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ConnectWifiFailCallback - /** 需要基础库: `2.12.0` - * - * 跳转到系统设置页进行连接 */ - maunal?: boolean - /** 需要基础库: `2.22.0` - * - * 是否需要返回部分 Wi-Fi 信息,仅安卓生效 */ - partialInfo?: boolean - /** 接口调用成功的回调函数 */ - success?: ConnectWifiSuccessCallback - } - /** 一个字典对象,它指定是否应该禁用规范化(默认启用规范化) */ - interface Constraints { - /** 如果指定为true则禁用标准化,默认为false */ - disableNormalization?: boolean - } - interface ContextCallbackResult { - /** 节点对应的 Context 对象 */ - context: IAnyObject - } - interface CopyFileFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail permission denied, copyFile ${srcPath} -> ${destPath}': 指定目标文件路径没有写权限; - * - 'fail no such file or directory, copyFile ${srcPath} -> ${destPath}': 源文件不存在,或目标文件路径的上层目录不存在; - * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface CopyFileOption { - /** 目标文件路径,支持本地路径 */ - destPath: string - /** 源文件路径,支持本地路径 */ - srcPath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CopyFileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CopyFileFailCallback - /** 接口调用成功的回调函数 */ - success?: CopyFileSuccessCallback - } - interface CreateBLEConnectionOption { - /** 蓝牙设备 id */ - deviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CreateBLEConnectionCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CreateBLEConnectionFailCallback - /** 接口调用成功的回调函数 */ - success?: CreateBLEConnectionSuccessCallback - /** 超时时间,单位 ms,不填表示不会超时 */ - timeout?: number - } - interface CreateBLEPeripheralServerOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: CreateBLEPeripheralServerCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: CreateBLEPeripheralServerFailCallback - /** 接口调用成功的回调函数 */ - success?: CreateBLEPeripheralServerSuccessCallback - } - interface CreateBLEPeripheralServerSuccessCallbackResult { - /** [BLEPeripheralServer](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.html) - * - * 外围设备的服务端。 */ - server: BLEPeripheralServer - errMsg: string - } - interface CreateCacheManagerOption { - /** 额外的缓存处理 */ - extra?: ExtraOption - /** 全局缓存有效时间,单位为毫秒,默认为 7 天,最长不超过 30 天 */ - maxAge?: number - /** 缓存模式 - * - * 可选值: - * - 'weakNetwork': 弱网/离线使用缓存返回; - * - 'always': 总是使用缓存返回; - * - 'none': 不开启,后续可手动开启/停止使用缓存返回; */ - mode?: 'weakNetwork' | 'always' | 'none' - /** 全局 origin */ - origin?: string - } - interface CreateInnerAudioContextOption { - /** 需要基础库: `2.19.0` - * - * 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项。 */ - useWebAudioImplement?: boolean - } - /** 选项 */ - interface CreateIntersectionObserverOption { - /** 初始的相交比例,如果调用时检测到的相交比例与这个值不相等且达到阈值,则会触发一次监听器的回调函数。 */ - initialRatio?: number - /** 需要基础库: `2.0.0` - * - * 是否同时观测多个目标节点(而非一个),如果设为 true ,observe 的 targetSelector 将选中多个节点(注意:同时选中过多节点将影响渲染性能) */ - observeAll?: boolean - /** 一个数值数组,包含所有阈值。 */ - thresholds?: number[] - } - interface CreateInterstitialAdOption { - /** 广告单元 id */ - adUnitId: string - } - interface CreateMediaRecorderOption { - /** 指定录制的时长(s),到达自动停止。最大 7200,最小 5 */ - duration?: number - /** 视频 fps */ - fps?: number - /** 视频关键帧间隔 */ - gop?: number - /** 视频比特率(kbps),最小值 600,最大值 3000 */ - videoBitsPerSecond?: number - } - interface CreateOffscreenCanvasOption { - /** 在自定义组件下,当前组件实例的 this */ - compInst?: Component.TrivialInstance | Page.TrivialInstance - /** 画布高度 */ - height?: number - /** 创建的离屏 canvas 类型 - * - * 可选值: - * - 'webgl': webgl类型上下文; - * - '2d': 2d类型上下文; */ - type?: 'webgl' | '2d' - /** 画布宽度 */ - width?: number - } - interface CreateRewardedVideoAdOption { - /** 广告单元 id */ - adUnitId: string - /** 需要基础库: `2.8.0` - * - * 是否启用多例模式,默认为false */ - multiton?: boolean - } - /** 可选参数 */ - interface CreateWorkerOption { - /** 需要基础库: `2.13.0` - * - * 是否使用实验worker。在iOS下,实验worker的JS运行效率比非实验worker提升近十倍,如需在worker内进行重度计算的建议开启此选项。同时,实验worker存在极小概率会在系统资源紧张时被系统回收,因此建议配合 worker.onProcessKilled 事件使用,在worker被回收后可重新创建一个。 */ - useExperimentalWorker?: boolean - } - interface CurrentState { - /** 当前缓存中的日志条数 */ - logCount: number - /** 当前缓存中最大可存日志条数 */ - maxLogCount: number - /** 当前缓存最大可用空间,以字节为单位 */ - maxSize: number - /** 当前缓存中已使用空间,以字节为单位 */ - size: number - } - /** 弹幕内容 */ - interface Danmu { - /** 弹幕文字 */ - text: string - /** 弹幕颜色 */ - color?: string - } - /** 可选的字体描述符 */ - interface DescOption { - /** 字体样式,可选值为 normal / italic / oblique */ - style?: string - /** 设置小型大写字母的字体显示文本,可选值为 normal / small-caps / inherit */ - variant?: string - /** 字体粗细,可选值为 normal / bold / 100 / 200../ 900 */ - weight?: string - } - /** 描述符的权限 */ - interface DescriptorPermission { - /** 读 */ - read?: boolean - /** 写 */ - write?: boolean - } - /** 指定 marker 移动到的目标点 */ - interface DestinationOption { - /** 纬度 */ - latitude: number - /** 经度 */ - longitude: number - } - interface DetectFaceOption { - /** 人脸图像像素点数据,每四项表示一个像素点的 RGBA */ - frameBuffer: ArrayBuffer - /** 图像高度 */ - height: number - /** 图像宽度 */ - width: number - /** 算法模型类型。正常情况传入 1 即可。0、1、2 分别表示小、中、大模型,模型越大识别准确率越高,但资源占用也越高。建议根据用户设备性能进行选择。 - * - * 可选值: - * - 0: 小模型; - * - 1: 中模型; - * - 2: 大模型; */ - modelModel?: 0 | 1 | 2 - /** 评分阈值。正常情况传入 0.8 即可。 */ - scoreThreshold?: number - /** 图像源类型。正常情况传入 1 即可。当输入的图片是来自一个连续视频的每一帧图像时,sourceType 传入 0 会得到更优的效果 - * - * 可选值: - * - 1: 表示输入的图片是随机的图片; - * - 0: 表示输入的图片是来自一个连续视频的每一帧图像; */ - sourceType?: 1 | 0 - } - interface DeviceInfo { - /** 应用(微信APP)二进制接口类型(仅 Android 支持) */ - abi: string - /** 设备性能等级(仅 Android 支持)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50) */ - benchmarkLevel: number - /** 设备品牌 */ - brand: string - /** 需要基础库: `2.25.1` - * - * 设备二进制接口类型(仅 Android 支持) */ - deviceAbi: string - /** 设备型号。新机型刚推出一段时间会显示unknown,微信会尽快进行适配。 */ - model: string - /** 客户端平台 */ - platform: string - /** 操作系统及版本 */ - system: string - } - interface DisableAlertBeforeUnloadOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: DisableAlertBeforeUnloadCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: DisableAlertBeforeUnloadFailCallback - /** 接口调用成功的回调函数 */ - success?: DisableAlertBeforeUnloadSuccessCallback - } - interface DownloadFileOption { - /** 下载资源的 url */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: DownloadFileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: DownloadFileFailCallback - /** 需要基础库: `1.8.0` - * - * 指定文件下载后存储的路径 (本地路径) */ - filePath?: string - /** HTTP 请求的 Header,Header 中不能设置 Referer */ - header?: IAnyObject - /** 接口调用成功的回调函数 */ - success?: DownloadFileSuccessCallback - /** 需要基础库: `2.10.0` - * - * 超时时间,单位为毫秒 */ - timeout?: number - } - interface DownloadFileSuccessCallbackResult { - /** 用户文件路径 (本地路径)。传入 filePath 时会返回,跟传入的 filePath 一致 */ - filePath: string - /** 需要基础库: `2.10.4` - * - * 网络请求过程中一些调试信息,[查看详细说明](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/network.html) */ - profile: RequestProfile - /** 开发者服务器返回的 HTTP 状态码 */ - statusCode: number - /** 临时文件路径 (本地路径)。没传入 filePath 指定文件存储路径时会返回,下载后的文件会存储到一个临时文件 */ - tempFilePath: string - errMsg: string - } - interface DownloadTaskOnProgressUpdateListenerResult { - /** 下载进度百分比 */ - progress: number - /** 预期需要下载的数据总长度,单位 Bytes */ - totalBytesExpectedToWrite: number - /** 已经下载的数据长度,单位 Bytes */ - totalBytesWritten: number - } - interface EditImageOption { - /** 图片路径,图片的路径,支持本地路径、代码包路径 */ - src: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: EditImageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: EditImageFailCallback - /** 接口调用成功的回调函数 */ - success?: EditImageSuccessCallback - } - interface EditImageSuccessCallbackResult { - /** 编辑后图片的临时文件路径 (本地路径) */ - tempFilePath: string - errMsg: string - } - interface EnableAlertBeforeUnloadOption { - /** 询问对话框内容 */ - message: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: EnableAlertBeforeUnloadCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: EnableAlertBeforeUnloadFailCallback - /** 接口调用成功的回调函数 */ - success?: EnableAlertBeforeUnloadSuccessCallback - } - /** 文件读取结果。res.entries 是一个对象,key是文件路径,value是一个对象 FileItem ,表示该文件的读取结果。每个 FileItem 包含 data (文件内容) 和 errMsg (错误信息) 属性。 */ - interface EntriesResult { - /** 文件路径 */ - [path: string]: ZipFileItem - } - /** 要读取的压缩包内的文件列表(当传入"all" 时表示读取压缩包内所有文件) */ - interface EntryItem { - /** 压缩包内文件路径 */ - path: string - /** 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 - * - * 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - /** 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte */ - length?: number - /** 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte */ - position?: number - } - interface Err { - /** 错误信息 */ - errMsg: string - /** 需要基础库: `2.24.0` - * - * errno 错误码,错误码的详细说明参考 [Errno错误码](https://developers.weixin.qq.com/miniprogram/dev/framework/usability/PublicErrno.html) */ - errno: number - } - interface ExitFullScreenOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ExitFullScreenCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ExitFullScreenFailCallback - /** 接口调用成功的回调函数 */ - success?: ExitFullScreenSuccessCallback - } - interface ExitMiniProgramOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ExitMiniProgramCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ExitMiniProgramFailCallback - /** 接口调用成功的回调函数 */ - success?: ExitMiniProgramSuccessCallback - } - interface ExitPictureInPictureOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ExitPictureInPictureCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ExitPictureInPictureFailCallback - /** 接口调用成功的回调函数 */ - success?: ExitPictureInPictureSuccessCallback - } - interface ExitVoIPChatOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ExitVoIPChatCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ExitVoIPChatFailCallback - /** 接口调用成功的回调函数 */ - success?: ExitVoIPChatSuccessCallback - } - /** 客服信息 */ - interface ExtInfoOption { - /** 客服链接 */ - url: string - } - /** 额外的缓存处理 */ - interface ExtraOption { - /** 需要缓存的 wx api 接口,不传则表示支持缓存的接口全都做缓存处理。返回的如果是缓存数据,开发者可通过 fromCache 标记区分 - * - * 可选值: - * - 'wx.login': ; - * - 'wx.checkSession': ; - * - 'wx.getSetting': ; */ - apiList?: Array<'wx.login' | 'wx.checkSession' | 'wx.getSetting'> - } - interface ExtractDataSourceOption { - /** 视频源地址,只支持本地文件 */ - source: string - } - /** 人脸角度信息,取值范围 [-1, 1],数值越接近 0 表示越正对摄像头 */ - interface FaceAngel { - /** 仰俯角(点头) */ - pitch: number - /** 翻滚角(左右倾) */ - roll: number - /** 偏航角(摇头) */ - yaw: number - } - /** 人脸置信度,取值范围 [0, 1],数值越大置信度越高(遮挡越少) */ - interface FaceConf { - /** 整体可信度 */ - global: number - /** 左眼可信度 */ - leftEye: number - /** 嘴巴可信度 */ - mouth: number - /** 鼻子可信度 */ - nose: number - /** 右眼可信度 */ - rightEye: number - } - interface FaceDetectOption { - /** 图像像素点数据,每四项表示一个像素点的 RGBA */ - frameBuffer: ArrayBuffer - /** 图像高度 */ - height: number - /** 图像宽度 */ - width: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: FaceDetectCompleteCallback - /** 是否返回当前图像的人脸角度信息 */ - enableAngle?: boolean - /** 是否返回当前图像的人脸的置信度(可表示器官遮挡情况) */ - enableConf?: boolean - /** 是否返回多张人脸的信息 */ - enableMultiFace?: boolean - /** 是否返回当前图像的人脸(106 个点) */ - enablePoint?: boolean - /** 接口调用失败的回调函数 */ - fail?: FaceDetectFailCallback - /** 接口调用成功的回调函数 */ - success?: FaceDetectSuccessCallback - } - interface FaceDetectSuccessCallbackResult { - /** 人脸角度信息,取值范围 [-1, 1],数值越接近 0 表示越正对摄像头 */ - angleArray: FaceAngel - /** 人脸置信度,取值范围 [0, 1],数值越大置信度越高(遮挡越少) */ - confArray: FaceConf - /** 脸部方框数值,对象包含 height, weight, originX, originY 四个属性 (origin 为方框左上角坐标) */ - detectRect: IAnyObject - /** 多人模式(enableMultiFace)下的人脸信息,每个对象包含上述其它属性 */ - faceInfo: IAnyObject[] - /** 标记人脸轮廓的 106 个点位置数组,数组每个对象包含 x 和 y */ - pointArray: IAnyObject[] - /** 脸部中心点横坐标,检测不到人脸则为 -1 */ - x: number - /** 脸部中心点纵坐标,检测不到人脸则为 -1 */ - y: number - errMsg: string - } - /** 需要基础库: `2.25.0` - * - * 人脸检测配置。用法详情[指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html)。安卓微信8.0.25开始支持,iOS微信8.0.24开始支持。 */ - interface FaceTrack { - /** 需要基础库: `2.25.0` - * - * 人脸检测模式 - * - * 可选值: - * - 1: 静态图片检测; - * - 2: 通过摄像头实时检测; */ - mode: 1 | 2 - } - interface Fields { - /** 需要基础库: `2.1.0` - * - * 指定样式名列表,返回节点对应样式名的当前值 */ - computedStyle?: string[] - /** 需要基础库: `2.4.2` - * - * 是否返回节点对应的 Context 对象 */ - context?: boolean - /** 是否返回节点 dataset */ - dataset?: boolean - /** 是否返回节点 id */ - id?: boolean - /** 是否返回节点 mark */ - mark?: boolean - /** 需要基础库: `2.7.0` - * - * 是否返回节点对应的 Node 实例 */ - node?: boolean - /** 指定属性名列表,返回节点对应属性名的当前属性值(只能获得组件文档中标注的常规属性值,id class style 和事件绑定的属性值不可获取) */ - properties?: string[] - /** 是否返回节点布局位置(`left` `right` `top` `bottom`) */ - rect?: boolean - /** 否 是否返回节点的 `scrollLeft` `scrollTop`,节点必须是 `scroll-view` 或者 `viewport` */ - scrollOffset?: boolean - /** 是否返回节点尺寸(`width` `height`) */ - size?: boolean - } - interface FileItem { - /** 文件保存时的时间戳,从1970/01/01 08:00:00 到当前时间的秒数 */ - createTime: number - /** 文件路径 (本地路径) */ - filePath: string - /** 本地文件大小,以字节为单位 */ - size: number - } - interface FileSystemManagerCloseOption { - /** 需要被关闭的文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: FileSystemManagerCloseCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: FileSystemManagerCloseFailCallback - /** 接口调用成功的回调函数 */ - success?: FileSystemManagerCloseSuccessCallback - } - interface FileSystemManagerGetFileInfoOption { - /** 要读取的文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetFileInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: FileSystemManagerGetFileInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: FileSystemManagerGetFileInfoSuccessCallback - } - interface FileSystemManagerGetFileInfoSuccessCallbackResult { - /** 文件大小,以字节为单位 */ - size: number - errMsg: string - } - interface FileSystemManagerGetSavedFileListOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSavedFileListCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSavedFileListFailCallback - /** 接口调用成功的回调函数 */ - success?: FileSystemManagerGetSavedFileListSuccessCallback - } - interface FileSystemManagerGetSavedFileListSuccessCallbackResult { - /** 文件数组 */ - fileList: FileItem[] - errMsg: string - } - interface FileSystemManagerRemoveSavedFileOption { - /** 需要删除的文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveSavedFileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: FileSystemManagerRemoveSavedFileFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveSavedFileSuccessCallback - } - interface FileSystemManagerSaveFileOption { - /** 临时存储文件路径 (本地路径) */ - tempFilePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SaveFileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: FileSystemManagerSaveFileFailCallback - /** 要存储的文件路径 (本地路径) */ - filePath?: string - /** 接口调用成功的回调函数 */ - success?: SaveFileSuccessCallback - } - /** 打开的文件信息数组,只有从聊天素材场景打开(scene为1173)才会携带该参数 */ - interface ForwardMaterials { - /** 文件名 */ - name: string - /** 文件路径(如果是webview则是url) */ - path: string - /** 文件大小 */ - size: number - /** 文件的mimetype类型 */ - type: string - } - /** 视频帧数据,若取不到则返回 null。当缓冲区为空的时候可能暂停取不到数据。 */ - interface FrameDataOptions { - /** 帧数据 */ - data: ArrayBuffer - /** 帧数据高度 */ - height: number - /** 帧原始 dts */ - pkDts: number - /** 帧原始 pts */ - pkPts: number - /** 帧数据宽度 */ - width: number - } - interface FromScreenLocationOption { - /** x 坐标值 */ - x: number - /** y 坐标值 */ - y: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: FromScreenLocationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: FromScreenLocationFailCallback - /** 接口调用成功的回调函数 */ - success?: FromScreenLocationSuccessCallback - } - interface FstatFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'bad file descriptor': 无效的文件描述符; - * - 'fail permission denied': 指定的 fd 路径没有读权限; */ - errMsg: string - } - interface FstatOption { - /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: FstatCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: FstatFailCallback - /** 接口调用成功的回调函数 */ - success?: FstatSuccessCallback - } - interface FstatSuccessCallbackResult { - /** [Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html) - * - * Stats 对象,包含了文件的状态信息 */ - stats: Stats - errMsg: string - } - interface FstatSyncOption { - /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - } - interface FtruncateFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'bad file descriptor': 无效的文件描述符; - * - 'fail permission denied': 指定的 fd 没有写权限; - * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; - * - 'fail sdcard not mounted': android sdcard 挂载失败; */ - errMsg: string - } - interface FtruncateOption { - /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - /** 截断位置,默认0。如果 length 小于文件长度(单位:字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,则会对其进行扩展,并且扩展部分将填充空字节('\0') */ - length: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: FtruncateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: FtruncateFailCallback - /** 接口调用成功的回调函数 */ - success?: FtruncateSuccessCallback - } - interface FtruncateSyncOption { - /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - /** 截断位置,默认0。如果 length 小于文件长度(单位:字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,则会对其进行扩展,并且扩展部分将填充空字节('\0') */ - length: number - } - interface GeneralCallbackResult { - /** 错误信息 */ - errMsg: string - } - interface GetAtqaOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetAtqaCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetAtqaFailCallback - /** 接口调用成功的回调函数 */ - success?: GetAtqaSuccessCallback - } - interface GetAtqaSuccessCallbackResult { - /** 返回 ATQA/SENS_RES 数据 */ - atqa: ArrayBuffer - errMsg: string - } - interface GetAvailableAudioSourcesOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetAvailableAudioSourcesCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetAvailableAudioSourcesFailCallback - /** 接口调用成功的回调函数 */ - success?: GetAvailableAudioSourcesSuccessCallback - } - interface GetAvailableAudioSourcesSuccessCallbackResult { - /** 支持的音频输入源列表,可在 [RecorderManager.start()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.start.html) 接口中使用。返回值定义参考 https://developer.android.com/reference/kotlin/android/media/MediaRecorder.AudioSource - * - * 可选值: - * - 'auto': 自动设置,默认使用手机麦克风,插上耳麦后自动切换使用耳机麦克风,所有平台适用; - * - 'buildInMic': 手机麦克风,仅限 iOS; - * - 'headsetMic': 耳机麦克风,仅限 iOS; - * - 'mic': 麦克风(没插耳麦时是手机麦克风,插耳麦时是耳机麦克风),仅限 Android; - * - 'camcorder': 同 mic,适用于录制音视频内容,仅限 Android; - * - 'voice_communication': 同 mic,适用于实时沟通,仅限 Android; - * - 'voice_recognition': 同 mic,适用于语音识别,仅限 Android; */ - audioSources: Array< - | 'auto' - | 'buildInMic' - | 'headsetMic' - | 'mic' - | 'camcorder' - | 'voice_communication' - | 'voice_recognition' - > - errMsg: string - } - interface GetBLEDeviceCharacteristicsOption { - /** 蓝牙设备 id。需要已经通过 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 建立连接 */ - deviceId: string - /** 蓝牙服务 UUID。需要先调用 [wx.getBLEDeviceServices](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEDeviceServices.html) 获取 */ - serviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBLEDeviceCharacteristicsCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBLEDeviceCharacteristicsFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBLEDeviceCharacteristicsSuccessCallback - } - interface GetBLEDeviceCharacteristicsSuccessCallbackResult { - /** 设备特征列表 */ - characteristics: BLECharacteristic[] - errMsg: string - } - interface GetBLEDeviceRSSIOption { - /** 蓝牙设备 id */ - deviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBLEDeviceRSSICompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBLEDeviceRSSIFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBLEDeviceRSSISuccessCallback - } - interface GetBLEDeviceRSSISuccessCallbackResult { - /** 信号强度,单位 dBm */ - RSSI: number - errMsg: string - } - interface GetBLEDeviceServicesOption { - /** 蓝牙设备 id。需要已经通过 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 建立连接 */ - deviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBLEDeviceServicesCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBLEDeviceServicesFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBLEDeviceServicesSuccessCallback - } - interface GetBLEDeviceServicesSuccessCallbackResult { - /** 设备服务列表 */ - services: BLEService[] - errMsg: string - } - interface GetBLEMTUOption { - /** 蓝牙设备 id */ - deviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBLEMTUCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBLEMTUFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBLEMTUSuccessCallback - /** 写模式 (iOS 特有参数) - * - * 可选值: - * - 'write': 有回复写; - * - 'writeNoResponse': 无回复写; */ - writeType?: 'write' | 'writeNoResponse' - } - interface GetBLEMTUSuccessCallbackResult { - /** 最大传输单元 */ - mtu: number - errMsg: string - } - interface GetBackgroundAudioPlayerStateOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBackgroundAudioPlayerStateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBackgroundAudioPlayerStateFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBackgroundAudioPlayerStateSuccessCallback - } - interface GetBackgroundAudioPlayerStateSuccessCallbackResult { - /** 选定音频的播放位置(单位:s),只有在音乐播放中时返回 */ - currentPosition: number - /** 歌曲数据链接,只有在音乐播放中时返回 */ - dataUrl: string - /** 音频的下载进度百分比,只有在音乐播放中时返回 */ - downloadPercent: number - /** 选定音频的长度(单位:s),只有在音乐播放中时返回 */ - duration: number - /** 播放状态 - * - * 可选值: - * - 0: 暂停中; - * - 1: 播放中; - * - 2: 没有音乐播放; */ - status: 0 | 1 | 2 - errMsg: string - } - interface GetBackgroundFetchDataOption { - /** 缓存数据类别,取值为 periodic 或 pre */ - fetchType: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBackgroundFetchDataCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBackgroundFetchDataFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBackgroundFetchDataSuccessCallback - } - interface GetBackgroundFetchDataSuccessCallbackResult { - /** 缓存数据 */ - fetchedData: string - /** 小程序页面路径 */ - path: string - /** 传给页面的 query 参数 */ - query: string - /** 进入小程序的场景值 */ - scene: number - /** 客户端拿到缓存数据的时间戳。(注:安卓 timeStamp 单位是 ms,iOS timeStamp 单位是 s) */ - timeStamp: number - errMsg: string - } - interface GetBackgroundFetchTokenOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBackgroundFetchTokenCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBackgroundFetchTokenFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBackgroundFetchTokenSuccessCallback - } - interface GetBackgroundFetchTokenSuccessCallbackResult { - /** 接口调用结果 */ - errMsg: string - /** 自定义的登录态 */ - token: number - } - interface GetBatteryInfoOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBatteryInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBatteryInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBatteryInfoSuccessCallback - } - interface GetBatteryInfoSuccessCallbackResult { - /** 是否正在充电中 */ - isCharging: boolean - /** 设备电量,范围 1 - 100 */ - level: number - errMsg: string - } - interface GetBatteryInfoSyncResult { - /** 是否正在充电中 */ - isCharging: boolean - /** 设备电量,范围 1 - 100 */ - level: number - } - interface GetBeaconsOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBeaconsCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBeaconsFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBeaconsSuccessCallback - } - interface GetBeaconsSuccessCallbackResult { - /** Beacon 设备列表 */ - beacons: BeaconInfo[] - errMsg: string - } - interface GetBluetoothAdapterStateOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBluetoothAdapterStateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBluetoothAdapterStateFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBluetoothAdapterStateSuccessCallback - } - interface GetBluetoothAdapterStateSuccessCallbackResult { - /** 蓝牙适配器是否可用 */ - available: boolean - /** 是否正在搜索设备 */ - discovering: boolean - errMsg: string - } - interface GetBluetoothDevicesOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetBluetoothDevicesCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetBluetoothDevicesFailCallback - /** 接口调用成功的回调函数 */ - success?: GetBluetoothDevicesSuccessCallback - } - interface GetBluetoothDevicesSuccessCallbackResult { - /** UUID 对应的已连接设备列表 */ - devices: BlueToothDevice[] - errMsg: string - } - interface GetCenterLocationOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetCenterLocationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetCenterLocationFailCallback - /** 图标路径,支持网络路径、本地路径、代码包路径 */ - iconPath?: string - /** 接口调用成功的回调函数 */ - success?: GetCenterLocationSuccessCallback - } - interface GetCenterLocationSuccessCallbackResult { - /** 纬度 */ - latitude: number - /** 经度 */ - longitude: number - errMsg: string - } - interface GetChannelsLiveInfoOption { - /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ - finderUserName: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetChannelsLiveInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetChannelsLiveInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetChannelsLiveInfoSuccessCallback - } - interface GetChannelsLiveInfoSuccessCallbackResult { - /** 直播主题 */ - description: string - /** 直播 feedId */ - feedId: string - /** 视频号头像 */ - headUrl: string - /** 视频号昵称 */ - nickname: string - /** 直播 nonceId */ - nonceId: string - /** 直播状态,2直播中,3直播结束 */ - status: number - errMsg: string - } - interface GetChannelsLiveNoticeInfoOption { - /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ - finderUserName: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetChannelsLiveNoticeInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetChannelsLiveNoticeInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetChannelsLiveNoticeInfoSuccessCallback - } - interface GetChannelsLiveNoticeInfoSuccessCallbackResult { - /** 直播封面 */ - headUrl: string - /** 视频号昵称 */ - nickname: string - /** 预告 id */ - noticeId: string - /** 需要基础库: `2.24.6` - * - * 除最近的一条预告信息外,其他的预告信息列表(注意:每次最多返回按时间戳增序排列的15个预告信息,其中时间最近的那个预告信息会在接口其他的返回参数中展示,其余的预告信息会在该字段中展示)。 */ - otherInfos: any[] - /** 是否可预约 */ - reservable: boolean - /** 开始时间 */ - startTime: string - /** 预告状态:0可用 1取消 2已用 */ - status: number - errMsg: string - } - interface GetChannelsShareKeyOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetChannelsShareKeyCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetChannelsShareKeyFailCallback - /** 接口调用成功的回调函数 */ - success?: GetChannelsShareKeySuccessCallback - } - interface GetChannelsShareKeySuccessCallbackResult { - /** 推广员 */ - promoter: PromoterResult - /** 分享者 openid */ - sharerOpenId: string - errMsg: string - } - interface GetClipboardDataOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetClipboardDataCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetClipboardDataFailCallback - /** 接口调用成功的回调函数 */ - success?: GetClipboardDataSuccessCallback - } - interface GetClipboardDataSuccessCallbackOption { - /** 剪贴板的内容 */ - data: string - } - interface GetConnectedBluetoothDevicesOption { - /** 蓝牙设备主服务的 UUID 列表(支持 16/32/128 位 UUID) */ - services: string[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetConnectedBluetoothDevicesCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetConnectedBluetoothDevicesFailCallback - /** 接口调用成功的回调函数 */ - success?: GetConnectedBluetoothDevicesSuccessCallback - } - interface GetConnectedBluetoothDevicesSuccessCallbackResult { - /** 搜索到的设备列表 */ - devices: BluetoothDeviceInfo[] - errMsg: string - } - interface GetConnectedWifiOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetConnectedWifiCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetConnectedWifiFailCallback - /** 需要基础库: `2.22.0` - * - * 是否需要返回部分 Wi-Fi 信息 */ - partialInfo?: boolean - /** 接口调用成功的回调函数 */ - success?: GetConnectedWifiSuccessCallback - } - interface GetConnectedWifiSuccessCallbackResult { - /** [WifiInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/WifiInfo.html) - * - * Wi-Fi 信息 */ - wifi: WifiInfo - errMsg: string - } - interface GetContentsOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetContentsCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetContentsFailCallback - /** 接口调用成功的回调函数 */ - success?: GetContentsSuccessCallback - } - interface GetContentsSuccessCallbackResult { - /** 表示内容的delta对象 */ - delta: IAnyObject - /** 带标签的HTML内容 */ - html: string - /** 纯文本内容 */ - text: string - errMsg: string - } - interface GetExtConfigOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetExtConfigCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetExtConfigFailCallback - /** 接口调用成功的回调函数 */ - success?: GetExtConfigSuccessCallback - } - interface GetExtConfigSuccessCallbackResult { - /** 第三方平台自定义的数据 */ - extConfig: IAnyObject - errMsg: string - } - interface GetFileInfoFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail file not exist': 指定的 filePath 找不到文件; */ - errMsg: string - } - interface GetFuzzyLocationOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetFuzzyLocationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetFuzzyLocationFailCallback - /** 接口调用成功的回调函数 */ - success?: GetFuzzyLocationSuccessCallback - /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */ - type?: string - } - interface GetFuzzyLocationSuccessCallbackResult { - /** 纬度,范围为 -90~90,负数表示南纬 */ - latitude: number - /** 经度,范围为 -180~180,负数表示西经 */ - longitude: number - errMsg: string - } - interface GetGroupEnterInfoOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetGroupEnterInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetGroupEnterInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetGroupEnterInfoSuccessCallback - } - interface GetGroupEnterInfoSuccessCallbackResult { - /** 需要基础库: `2.7.0` - * - * 敏感数据对应的云 ID,开通[云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html)的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) */ - cloudID: string - /** 包括敏感数据在内的完整转发信息的加密数据,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ - encryptedData: string - /** 错误信息 */ - errMsg: string - /** 加密算法的初始向量,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ - iv: string - } - interface GetHCEStateOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetHCEStateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetHCEStateFailCallback - /** 接口调用成功的回调函数 */ - success?: GetHCEStateSuccessCallback - } - interface GetHistoricalBytesOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetHistoricalBytesCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetHistoricalBytesFailCallback - /** 接口调用成功的回调函数 */ - success?: GetHistoricalBytesSuccessCallback - } - interface GetHistoricalBytesSuccessCallbackResult { - /** 返回历史二进制数据 */ - histBytes: ArrayBuffer - errMsg: string - } - interface GetImageInfoOption { - /** 图片的路径,支持网络路径、本地路径、代码包路径 */ - src: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetImageInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetImageInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetImageInfoSuccessCallback - } - interface GetImageInfoSuccessCallbackResult { - /** 图片原始高度,单位px。不考虑旋转。 */ - height: number - /** 需要基础库: `1.9.90` - * - * [拍照时设备方向](http://sylvana.net/jpegcrop/exif_orientation.html) - * - * 可选值: - * - 'up': 默认方向(手机横持拍照),对应 Exif 中的 1。或无 orientation 信息。; - * - 'up-mirrored': 同 up,但镜像翻转,对应 Exif 中的 2; - * - 'down': 旋转180度,对应 Exif 中的 3; - * - 'down-mirrored': 同 down,但镜像翻转,对应 Exif 中的 4; - * - 'left-mirrored': 同 left,但镜像翻转,对应 Exif 中的 5; - * - 'right': 顺时针旋转90度,对应 Exif 中的 6; - * - 'right-mirrored': 同 right,但镜像翻转,对应 Exif 中的 7; - * - 'left': 逆时针旋转90度,对应 Exif 中的 8; */ - orientation: - | 'up' - | 'up-mirrored' - | 'down' - | 'down-mirrored' - | 'left-mirrored' - | 'right' - | 'right-mirrored' - | 'left' - /** 图片的本地路径 */ - path: string - /** 需要基础库: `1.9.90` - * - * 图片格式 - * - * 可选值: - * - 'unknown': 未知格式; - * - 'jpeg': jpeg压缩格式; - * - 'png': png压缩格式; - * - 'gif': gif压缩格式; - * - 'tiff': tiff压缩格式; */ - type: 'unknown' | 'jpeg' | 'png' | 'gif' | 'tiff' - /** 图片原始宽度,单位px。不考虑旋转。 */ - width: number - errMsg: string - } - interface GetLatestUserKeyOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetLatestUserKeyCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetLatestUserKeyFailCallback - /** 接口调用成功的回调函数 */ - success?: GetLatestUserKeySuccessCallback - } - interface GetLatestUserKeySuccessCallbackResult { - /** 用户加密密钥 */ - encryptKey: string - /** 密钥过期时间 */ - expireTime: number - /** 密钥初始向量 */ - iv: string - /** 密钥版本 */ - version: number - errMsg: string - } - interface GetLocalIPAddressOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetLocalIPAddressCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetLocalIPAddressFailCallback - /** 接口调用成功的回调函数 */ - success?: GetLocalIPAddressSuccessCallback - } - interface GetLocalIPAddressSuccessCallbackResult { - /** 错误信息 */ - errMsg: string - /** 本机局域网IP地址 */ - localip: string - /** 本机局域网子网掩码,基础库 2.24.0 开始支持 */ - netmask: string - } - interface GetLocationOption { - /** 需要基础库: `1.6.0` - * - * 传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度 */ - altitude?: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetLocationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetLocationFailCallback - /** 需要基础库: `2.9.0` - * - * 高精度定位超时时间(ms),指定时间内返回最高精度,该值3000ms以上高精度定位才有效果 */ - highAccuracyExpireTime?: number - /** 需要基础库: `2.9.0` - * - * 开启高精度定位 */ - isHighAccuracy?: boolean - /** 接口调用成功的回调函数 */ - success?: GetLocationSuccessCallback - /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */ - type?: string - } - interface GetLocationSuccessCallbackResult { - /** 位置的精确度,反应与真实位置之间的接近程度,可以理解成10即与真实位置相差10m,越小越精确 */ - accuracy: number - /** 需要基础库: `1.2.0` - * - * 高度,单位 m */ - altitude: number - /** 需要基础库: `1.2.0` - * - * 水平精度,单位 m */ - horizontalAccuracy: number - /** 纬度,范围为 -90~90,负数表示南纬 */ - latitude: number - /** 经度,范围为 -180~180,负数表示西经 */ - longitude: number - /** 速度,单位 m/s */ - speed: number - /** 需要基础库: `1.2.0` - * - * 垂直精度,单位 m(Android 无法获取,返回 0) */ - verticalAccuracy: number - errMsg: string - } - interface GetLogManagerOption { - /** 需要基础库: `2.3.2` - * - * 取值为0/1,取值为0表示会把 `App`、`Page` 的生命周期函数和 `wx` 命名空间下的函数调用写入日志,取值为1则不会。默认值是 0 */ - level?: number - } - interface GetMaxTransceiveLengthOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetMaxTransceiveLengthCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetMaxTransceiveLengthFailCallback - /** 接口调用成功的回调函数 */ - success?: GetMaxTransceiveLengthSuccessCallback - } - interface GetMaxTransceiveLengthSuccessCallbackResult { - /** 最大传输长度 */ - length: number - errMsg: string - } - interface GetNetworkTypeOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetNetworkTypeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetNetworkTypeFailCallback - /** 接口调用成功的回调函数 */ - success?: GetNetworkTypeSuccessCallback - } - interface GetNetworkTypeSuccessCallbackResult { - /** 需要基础库: `2.22.1` - * - * 设备是否使用了网络代理 */ - hasSystemProxy: boolean - /** 网络类型 - * - * 可选值: - * - 'wifi': wifi 网络; - * - '2g': 2g 网络; - * - '3g': 3g 网络; - * - '4g': 4g 网络; - * - '5g': 5g 网络; - * - 'unknown': Android 下不常见的网络类型; - * - 'none': 无网络; */ - networkType: 'wifi' | '2g' | '3g' | '4g' | '5g' | 'unknown' | 'none' - /** 信号强弱,单位 dbm */ - signalStrength: number - errMsg: string - } - interface GetRandomValuesOption { - /** 整数,生成随机数的字节数,最大 1048576 */ - length: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetRandomValuesCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetRandomValuesFailCallback - /** 接口调用成功的回调函数 */ - success?: GetRandomValuesSuccessCallback - } - interface GetRandomValuesSuccessCallbackResult { - /** 随机数内容,长度为传入的字节数 */ - randomValues: ArrayBuffer - errMsg: string - } - interface GetRegionOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetRegionCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetRegionFailCallback - /** 接口调用成功的回调函数 */ - success?: GetRegionSuccessCallback - } - interface GetRegionSuccessCallbackResult { - /** 东北角经纬度 */ - northeast: MapPostion - /** 西南角经纬度 */ - southwest: MapPostion - errMsg: string - } - interface GetRotateOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetRotateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetRotateFailCallback - /** 接口调用成功的回调函数 */ - success?: GetRotateSuccessCallback - } - interface GetRotateSuccessCallbackResult { - /** 旋转角 */ - rotate: number - errMsg: string - } - interface GetSakOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSakCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSakFailCallback - /** 接口调用成功的回调函数 */ - success?: GetSakSuccessCallback - } - interface GetSakSuccessCallbackResult { - /** 返回 SAK/SEL_RES 数据 */ - sak: number - errMsg: string - } - interface GetSavedFileInfoOption { - /** 文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSavedFileInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSavedFileInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetSavedFileInfoSuccessCallback - } - interface GetSavedFileInfoSuccessCallbackResult { - /** 文件保存时的时间戳,从1970/01/01 08:00:00 到该时刻的秒数 */ - createTime: number - /** 文件大小,单位 B */ - size: number - errMsg: string - } - interface GetScaleOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetScaleCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetScaleFailCallback - /** 接口调用成功的回调函数 */ - success?: GetScaleSuccessCallback - } - interface GetScaleSuccessCallbackResult { - /** 缩放值 */ - scale: number - errMsg: string - } - interface GetScreenBrightnessOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetScreenBrightnessCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetScreenBrightnessFailCallback - /** 接口调用成功的回调函数 */ - success?: GetScreenBrightnessSuccessCallback - } - interface GetScreenBrightnessSuccessCallbackOption { - /** 屏幕亮度值,范围 0 ~ 1,0 最暗,1 最亮 */ - value: number - } - interface GetScreenRecordingStateOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetScreenRecordingStateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetScreenRecordingStateFailCallback - /** 接口调用成功的回调函数 */ - success?: GetScreenRecordingStateSuccessCallback - } - interface GetScreenRecordingStateSuccessCallbackResult { - /** 录屏状态 - * - * 可选值: - * - 'on': 开启; - * - 'off': 关闭; */ - state: 'on' | 'off' - errMsg: string - } - interface GetSelectedTextRangeOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSelectedTextRangeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSelectedTextRangeFailCallback - /** 接口调用成功的回调函数 */ - success?: GetSelectedTextRangeSuccessCallback - } - interface GetSelectedTextRangeSuccessCallbackResult { - /** 输入框光标结束位置 */ - end: number - /** 输入框光标起始位置 */ - start: number - errMsg: string - } - interface GetSelectionTextOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSelectionTextCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSelectionTextFailCallback - /** 接口调用成功的回调函数 */ - success?: GetSelectionTextSuccessCallback - } - interface GetSelectionTextSuccessCallbackResult { - /** 纯文本内容 */ - text: string - errMsg: string - } - interface GetSettingOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSettingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSettingFailCallback - /** 接口调用成功的回调函数 */ - success?: GetSettingSuccessCallback - /** 需要基础库: `2.10.1` - * - * 是否同时获取用户订阅消息的订阅状态,默认不获取。注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。 */ - withSubscriptions?: boolean - } - interface GetSettingSuccessCallbackResult { - /** [AuthSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/AuthSetting.html) - * - * 用户授权结果 */ - authSetting: AuthSetting - /** [SubscriptionsSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/SubscriptionsSetting.html) - * - * 需要基础库: `2.10.1` - * - * 用户订阅消息设置,接口参数`withSubscriptions`值为`true`时才会返回。 */ - subscriptionsSetting: SubscriptionsSetting - /** [AuthSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/AuthSetting.html) - * - * 在插件中调用时,当前宿主小程序的用户授权结果 */ - miniprogramAuthSetting?: AuthSetting - errMsg: string - } - interface GetShareInfoOption { - /** shareTicket */ - shareTicket: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetShareInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetShareInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetShareInfoSuccessCallback - /** 需要基础库: `1.9.90` - * - * 超时时间,单位 ms */ - timeout?: number - } - interface GetSkewOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSkewCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSkewFailCallback - /** 接口调用成功的回调函数 */ - success?: GetSkewSuccessCallback - } - interface GetSkewSuccessCallbackResult { - /** 倾斜角 */ - skew: number - errMsg: string - } - interface GetStorageInfoOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetStorageInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetStorageInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetStorageInfoSuccessCallback - } - interface GetStorageInfoSuccessCallbackOption { - /** 当前占用的空间大小, 单位 KB */ - currentSize: number - /** 当前 storage 中所有的 key */ - keys: string[] - /** 限制的空间大小,单位 KB */ - limitSize: number - } - interface GetStorageInfoSyncOption { - /** 当前占用的空间大小, 单位 KB */ - currentSize: number - /** 当前 storage 中所有的 key */ - keys: string[] - /** 限制的空间大小,单位 KB */ - limitSize: number - } - interface GetStorageOption { - /** 本地缓存中指定的 key */ - key: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetStorageCompleteCallback - /** 需要基础库: `2.21.3` - * - * 是否开启加密存储。只有异步的 getStorage 接口支持开启加密存储。开启后,将会对 data 使用 AES128 解密,接口回调耗时将会增加。若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true */ - encrypt?: boolean - /** 接口调用失败的回调函数 */ - fail?: GetStorageFailCallback - /** 接口调用成功的回调函数 */ - success?: GetStorageSuccessCallback - } - interface GetStorageSuccessCallbackResult { - /** key对应的内容 */ - data: T - errMsg: string - } - interface GetSystemInfoAsyncOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSystemInfoAsyncCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSystemInfoAsyncFailCallback - /** 接口调用成功的回调函数 */ - success?: GetSystemInfoAsyncSuccessCallback - } - interface GetSystemInfoOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSystemInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSystemInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetSystemInfoSuccessCallback - } - interface GetUserInfoOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetUserInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetUserInfoFailCallback - /** 显示用户信息的语言 - * - * 可选值: - * - 'en': 英文; - * - 'zh_CN': 简体中文; - * - 'zh_TW': 繁体中文; */ - lang?: 'en' | 'zh_CN' | 'zh_TW' - /** 接口调用成功的回调函数 */ - success?: GetUserInfoSuccessCallback - /** 是否带上登录态信息。当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。 */ - withCredentials?: boolean - } - interface GetUserInfoSuccessCallbackResult { - /** 需要基础库: `2.7.0` - * - * 敏感数据对应的云 ID,开通[云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html)的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) */ - cloudID: string - /** 包括敏感数据在内的完整用户信息的加密数据,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) */ - encryptedData: string - /** 加密算法的初始向量,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) */ - iv: string - /** 不包括敏感信息的原始数据字符串,用于计算签名 */ - rawData: string - /** 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ - signature: string - /** [UserInfo](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/UserInfo.html) - * - * 用户信息对象,不包含 openid 等敏感信息 */ - userInfo: UserInfo - errMsg: string - } - interface GetUserProfileOption { - /** 声明获取用户个人信息后的用途,不超过30个字符 */ - desc: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetUserProfileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetUserProfileFailCallback - /** 显示用户信息的语言 - * - * 可选值: - * - 'en': 英文; - * - 'zh_CN': 简体中文; - * - 'zh_TW': 繁体中文; */ - lang?: 'en' | 'zh_CN' | 'zh_TW' - /** 接口调用成功的回调函数 */ - success?: GetUserProfileSuccessCallback - } - interface GetUserProfileSuccessCallbackResult { - /** 需要基础库: `2.10.4` - * - * 敏感数据对应的云 ID,开通[云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html)的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) */ - cloudID: string - /** 需要基础库: `2.10.4` - * - * 包括敏感数据在内的完整用户信息的加密数据,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) */ - encryptedData: string - /** 需要基础库: `2.10.4` - * - * 加密算法的初始向量,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) */ - iv: string - /** 需要基础库: `2.10.4` - * - * 不包括敏感信息的原始数据字符串,用于计算签名 */ - rawData: string - /** 需要基础库: `2.10.4` - * - * 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,详见 [用户数据的签名验证和加解密](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ - signature: string - /** [UserInfo](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/UserInfo.html) - * - * 需要基础库: `2.10.4` - * - * 用户信息对象 */ - userInfo: UserInfo - errMsg: string - } - interface GetVideoInfoOption { - /** 视频文件路径,可以是临时文件路径也可以是永久文件路径 */ - src: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetVideoInfoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetVideoInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: GetVideoInfoSuccessCallback - } - interface GetVideoInfoSuccessCallbackResult { - /** 视频码率,单位 kbps */ - bitrate: number - /** 视频长度 */ - duration: number - /** 视频帧率 */ - fps: number - /** 视频的长,单位 px */ - height: number - /** 画面方向 - * - * 可选值: - * - 'up': 默认; - * - 'down': 180度旋转; - * - 'left': 逆时针旋转90度; - * - 'right': 顺时针旋转90度; - * - 'up-mirrored': 同up,但水平翻转; - * - 'down-mirrored': 同down,但水平翻转; - * - 'left-mirrored': 同left,但垂直翻转; - * - 'right-mirrored': 同right,但垂直翻转; */ - orientation: - | 'up' - | 'down' - | 'left' - | 'right' - | 'up-mirrored' - | 'down-mirrored' - | 'left-mirrored' - | 'right-mirrored' - /** 视频大小,单位 kB */ - size: number - /** 视频格式 */ - type: string - /** 视频的宽,单位 px */ - width: number - errMsg: string - } - interface GetWeRunDataOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetWeRunDataCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetWeRunDataFailCallback - /** 接口调用成功的回调函数 */ - success?: GetWeRunDataSuccessCallback - } - interface GetWeRunDataSuccessCallbackResult { - /** 需要基础库: `2.7.0` - * - * 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud) */ - cloudID: string - /** 包括敏感数据在内的完整用户信息的加密数据,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html)。解密后得到的数据结构见后文 */ - encryptedData: string - /** 加密算法的初始向量,详细见[加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html) */ - iv: string - errMsg: string - } - interface GetWifiListOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetWifiListCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetWifiListFailCallback - /** 接口调用成功的回调函数 */ - success?: GetWifiListSuccessCallback - } - interface HideHomeButtonOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: HideHomeButtonCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: HideHomeButtonFailCallback - /** 接口调用成功的回调函数 */ - success?: HideHomeButtonSuccessCallback - } - interface HideKeyboardOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: HideKeyboardCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: HideKeyboardFailCallback - /** 接口调用成功的回调函数 */ - success?: HideKeyboardSuccessCallback - } - interface HideLoadingOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: HideLoadingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: HideLoadingFailCallback - /** 需要基础库: `2.22.1` - * - * 目前 toast 和 loading 相关接口可以相互混用,此参数可用于取消混用特性 */ - noConflict?: boolean - /** 接口调用成功的回调函数 */ - success?: HideLoadingSuccessCallback - } - interface HideNavigationBarLoadingOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: HideNavigationBarLoadingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: HideNavigationBarLoadingFailCallback - /** 接口调用成功的回调函数 */ - success?: HideNavigationBarLoadingSuccessCallback - } - interface HideShareMenuOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: HideShareMenuCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: HideShareMenuFailCallback - /** 需要基础库: `2.11.3` - * - * 本接口为 Beta 版本,暂只在 Android 平台支持。需要隐藏的转发按钮名称列表,默认['shareAppMessage', 'shareTimeline']。按钮名称合法值包含 "shareAppMessage"、"shareTimeline" 两种 */ - menus?: string[] - /** 接口调用成功的回调函数 */ - success?: HideShareMenuSuccessCallback - } - interface HideTabBarOption { - /** 是否需要动画效果 */ - animation?: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: HideTabBarCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: HideTabBarFailCallback - /** 接口调用成功的回调函数 */ - success?: HideTabBarSuccessCallback - } - interface HideTabBarRedDotOption { - /** tabBar 的哪一项,从左边算起 */ - index: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: HideTabBarRedDotCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: HideTabBarRedDotFailCallback - /** 接口调用成功的回调函数 */ - success?: HideTabBarRedDotSuccessCallback - } - interface HideToastOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: HideToastCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: HideToastFailCallback - /** 需要基础库: `2.22.1` - * - * 目前 toast 和 loading 相关接口可以相互混用,此参数可用于取消混用特性 */ - noConflict?: number - /** 接口调用成功的回调函数 */ - success?: HideToastSuccessCallback - } - /** 检测结果 */ - interface HitTestRes { - /** 包含位置、旋转、放缩信息的矩阵,以列为主序 */ - transform: Float32Array - } - /** 需要基础库: `2.7.0` - * - * 图片对象 */ - interface Image { - /** 图片的真实高度 */ - height: number - /** 图片加载发生错误后触发的回调函数 */ - onerror: (...args: any[]) => any - /** 图片加载完成后触发的回调函数 */ - onload: (...args: any[]) => any - /** 需要基础库: `2.13.0` - * - * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ - referrerPolicy: string - /** 图片的 URL。v2.11.0 起支持传递 base64 Data URI */ - src: string - /** 图片的真实宽度 */ - width: number - } - /** 需要基础库: `2.9.0` - * - * ImageData 对象 */ - interface ImageData { - /** 一维数组,包含以 RGBA 顺序的数据,数据使用 0 至 255(包含)的整数表示 */ - data: Uint8ClampedArray - /** 使用像素描述 ImageData 的实际高度 */ - height: number - /** 使用像素描述 ImageData 的实际宽度 */ - width: number - } - /** 需要基础库: `1.2.0` - * - * 图片的本地临时文件列表 */ - interface ImageFile { - /** 本地临时文件路径 (本地路径) */ - path: string - /** 本地临时文件大小,单位 B */ - size: number - } - interface IncludePointsOption { - /** 要显示在可视区域内的坐标点列表 */ - points: MapPostion[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: IncludePointsCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: IncludePointsFailCallback - /** 坐标点形成的矩形边缘到地图边缘的距离,单位像素。格式为[上,右,下,左],安卓上只能识别数组第一项,上下左右的padding一致。开发者工具暂不支持padding参数。 */ - padding?: number[] - /** 接口调用成功的回调函数 */ - success?: IncludePointsSuccessCallback - } - interface InitFaceDetectOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: InitFaceDetectCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: InitFaceDetectFailCallback - /** 接口调用成功的回调函数 */ - success?: InitFaceDetectSuccessCallback - } - interface InitMarkerClusterOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: InitMarkerClusterCompleteCallback - /** 启用默认的聚合样式 */ - enableDefaultStyle?: boolean - /** 接口调用失败的回调函数 */ - fail?: InitMarkerClusterFailCallback - /** 聚合算法的可聚合距离,即距离小于该值的点会聚合至一起,以像素为单位 */ - gridSize?: boolean - /** 接口调用成功的回调函数 */ - success?: InitMarkerClusterSuccessCallback - /** 点击已经聚合的标记点时是否实现聚合分离 */ - zoomOnClick?: boolean - } - /** InnerAudioContext 实例,可通过 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 接口获取实例。注意,音频播放过程中,可能被系统中断,可通过 [wx.onAudioInterruptionBegin](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAudioInterruptionBegin.html)、[wx.onAudioInterruptionEnd](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAudioInterruptionEnd.html)事件来处理这种情况。 -* -* **支持格式** -* -* | 格式 | iOS | Android | -* | ---- | ---- | ------- | -* | flac | x | √ | -* | m4a | √ | √ | -* | ogg | x | √ | -* | ape | x | √ | -* | amr | x | √ | -* | wma | x | √ | -* | wav | √ | √ | -* | mp3 | √ | √ | -* | mp4 | x | √ | -* | aac | √ | √ | -* | aiff | √ | x | -* | caf | √ | x | -* -* **示例代码** -* -* ```js -const innerAudioContext = wx.createInnerAudioContext() -innerAudioContext.autoplay = true -innerAudioContext.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46' -innerAudioContext.onPlay(() => { - console.log('开始播放') -}) -innerAudioContext.onError((res) => { - console.log(res.errMsg) - console.log(res.errCode) -}) -``` */ - interface InnerAudioContext { - /** 是否自动开始播放,默认为 `false` */ - autoplay: boolean - /** 音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲(只读) */ - buffered: number - /** 当前音频的播放位置(单位 s)。只有在当前有合法的 src 时返回,时间保留小数点后 6 位(只读) */ - currentTime: number - /** 当前音频的长度(单位 s)。只有在当前有合法的 src 时返回(只读) */ - duration: number - /** 是否循环播放,默认为 `false` */ - loop: boolean - /** 是否遵循系统静音开关,默认为 `true`。当此参数为 `false` 时,即使用户打开了静音开关,也能继续发出声音。从 2.3.0 版本开始此参数不生效,使用 [wx.setInnerAudioOption](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.setInnerAudioOption.html) 接口统一设置。 */ - obeyMuteSwitch: boolean - /** 当前是是否暂停或停止状态(只读) */ - paused: boolean - /** 需要基础库: `2.11.0` - * - * 播放速度。范围 0.5-2.0,默认为 1。(Android 需要 6 及以上版本) */ - playbackRate: number - /** 需要基础库: `2.13.0` - * - * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ - referrerPolicy: string - /** 音频资源的地址,用于直接播放。[2.2.3](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 开始支持云文件ID */ - src: string - /** 开始播放的位置(单位:s),默认为 0 */ - startTime: number - /** 需要基础库: `1.9.90` - * - * 音量。范围 0~1。默认为 1 */ - volume: number - } - interface InnerAudioContextOnErrorListenerResult { - /** 可选值: - * - 10001: 系统错误; - * - 10002: 网络错误; - * - 10003: 文件错误; - * - 10004: 格式错误; - * - -1: 未知错误; */ - errCode: 10001 | 10002 | 10003 | 10004 | -1 - errMsg: string - } - interface InsertDividerOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: InsertDividerCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: InsertDividerFailCallback - /** 接口调用成功的回调函数 */ - success?: InsertDividerSuccessCallback - } - interface InsertImageOption { - /** 图片地址,仅支持 http(s)、base64、云图片(2.8.0)、临时文件(2.8.3)。 */ - src: string - /** 图像无法显示时的替代文本 */ - alt?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: InsertImageCompleteCallback - /** data 被序列化为 name=value;name1=value2 的格式挂在属性 data-custom 上 */ - data?: IAnyObject - /** 添加到图片 img 标签上的类名 */ - extClass?: string - /** 接口调用失败的回调函数 */ - fail?: InsertImageFailCallback - /** 图片高度 (pixels/百分比) */ - height?: string - /** 插入图片后是否自动换行,默认换行 */ - nowrap?: boolean - /** 接口调用成功的回调函数 */ - success?: InsertImageSuccessCallback - /** 图片宽度(pixels/百分比) */ - width?: string - } - interface InsertTextOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: InsertTextCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: InsertTextFailCallback - /** 接口调用成功的回调函数 */ - success?: InsertTextSuccessCallback - /** 文本内容 */ - text?: string - } - interface IntersectionObserverObserveCallbackResult { - /** 目标边界 */ - boundingClientRect: BoundingClientRectResult - /** 节点自定义数据属性 */ - dataset: Record - /** 节点 ID */ - id: string - /** 相交比例 */ - intersectionRatio: number - /** 相交区域的边界 */ - intersectionRect: IntersectionRectResult - /** 参照区域的边界 */ - relativeRect: RelativeRectResult - /** 相交检测时的时间戳 */ - time: number - } - /** 相交区域的边界 */ - interface IntersectionRectResult { - /** 下边界 */ - bottom: number - /** 高度 */ - height: number - /** 左边界 */ - left: number - /** 右边界 */ - right: number - /** 上边界 */ - top: number - /** 宽度 */ - width: number - } - interface InterstitialAdOnErrorListenerResult { - /** 错误码 - * - * 可选值: - * - 1000: 后端接口调用失败; - * - 1001: 参数错误; - * - 1002: 广告单元无效; - * - 1003: 内部错误; - * - 1004: 无合适的广告; - * - 1005: 广告组件审核中; - * - 1006: 广告组件被驳回; - * - 1007: 广告组件被封禁; - * - 1008: 广告单元已关闭; */ - errCode: 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 - /** 错误信息 */ - errMsg: string - } - interface IsBluetoothDevicePairedOption { - /** 蓝牙设备 id */ - deviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: IsBluetoothDevicePairedCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: IsBluetoothDevicePairedFailCallback - /** 接口调用成功的回调函数 */ - success?: IsBluetoothDevicePairedSuccessCallback - } - interface IsConnectedOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: IsConnectedCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: IsConnectedFailCallback - /** 接口调用成功的回调函数 */ - success?: IsConnectedSuccessCallback - } - interface Join1v1ChatOption { - /** 呼叫方信息 */ - caller: VoIP1v1ChatUser - /** 接听方信息 */ - listener: VoIP1v1ChatUser - /** 窗口背景色(音频通话背景以及小窗模式背景) - * - * 可选值: - * - 0: #262930; - * - 1: #FA5151; - * - 2: #FA9D3B; - * - 3: #3D7257; - * - 4: #1485EE; - * - 5: #6467F0; */ - backgroundType?: 0 | 1 | 2 | 3 | 4 | 5 - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: Join1v1ChatCompleteCallback - /** 不允许切换到语音通话 */ - disableSwitchVoice?: boolean - /** 接口调用失败的回调函数 */ - fail?: Join1v1ChatFailCallback - /** 小窗样式 */ - minWindowType?: number - /** 通话类型 - * - * 可选值: - * - 'voice': 语音通话; - * - 'video': 视频通话; */ - roomType?: 'voice' | 'video' - /** 接口调用成功的回调函数 */ - success?: Join1v1ChatSuccessCallback - } - interface JoinVoIPChatOption { - /** 小游戏内此房间/群聊的 ID。同一时刻传入相同 groupId 的用户会进入到同个实时语音房间。 */ - groupId: string - /** 验证所需的随机字符串 */ - nonceStr: string - /** 签名,用于验证小游戏的身份 */ - signature: string - /** 验证所需的时间戳 */ - timeStamp: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: JoinVoIPChatCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: JoinVoIPChatFailCallback - /** 静音设置 */ - muteConfig?: MuteConfig - /** 房间类型 - * - * 可选值: - * - 'voice': 音频房间,用于语音通话; - * - 'video': 视频房间,结合 [voip-room](https://developers.weixin.qq.com/miniprogram/dev/component/voip-room.html) 组件可显示成员画面; */ - roomType?: 'voice' | 'video' - /** 接口调用成功的回调函数 */ - success?: JoinVoIPChatSuccessCallback - } - interface JoinVoIPChatSuccessCallbackResult { - /** 错误码 */ - errCode: number - /** 调用结果 */ - errMsg: string - /** 在此通话中的成员 openId 名单 */ - openIdList: string[] - } - interface KVArray { - /** key 本地缓存中指定的 key */ - key: string - /** data 需要存储的内容。只支持原生类型、Date、及能够通过`JSON.stringify`序列化的对象。 */ - value: any - } - /** 启动参数 */ - interface LaunchOptionsApp { - /** 需要基础库: `2.20.0` - * - * API 类别 - * - * 可选值: - * - 'default': 默认类别; - * - 'nativeFunctionalized': 原生功能化,视频号直播商品、商品橱窗等场景打开的小程序; - * - 'browseOnly': 仅浏览,朋友圈快照页等场景打开的小程序; - * - 'embedded': 内嵌,通过打开半屏小程序能力打开的小程序; */ - apiCategory: - | 'default' - | 'nativeFunctionalized' - | 'browseOnly' - | 'embedded' - /** 打开的文件信息数组,只有从聊天素材场景打开(scene为1173)才会携带该参数 */ - forwardMaterials: ForwardMaterials[] - /** 启动小程序的路径 (代码包路径) */ - path: string - /** 启动小程序的 query 参数 */ - query: IAnyObject - /** 来源信息。从另一个小程序、公众号或 App 进入小程序时返回。否则返回 `{}`。(参见后文注意) */ - referrerInfo: ReferrerInfo - /** 启动小程序的[场景值](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/scene.html) */ - scene: number - /** 从微信群聊/单聊打开小程序时,chatType 表示具体微信群聊/单聊类型 - * - * 可选值: - * - 1: 微信联系人单聊; - * - 2: 企业微信联系人单聊; - * - 3: 普通微信群聊; - * - 4: 企业微信互通群聊; */ - chatType?: 1 | 2 | 3 | 4 - /** shareTicket,详见[获取更多转发信息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ - shareTicket?: string - } - interface LivePlayerContextRequestFullScreenOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RequestFullScreenCompleteCallback - /** 设置全屏时的方向 - * - * 可选值: - * - 0: 正常竖向; - * - 90: 屏幕逆时针90度; - * - -90: 屏幕顺时针90度; */ - direction?: 0 | 90 | -90 - /** 接口调用失败的回调函数 */ - fail?: RequestFullScreenFailCallback - /** 接口调用成功的回调函数 */ - success?: RequestFullScreenSuccessCallback - } - interface LivePlayerContextSnapshotOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SnapshotCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SnapshotFailCallback - /** 需要基础库: `2.10.0` - * - * 图片的质量,默认原图。有效值为 raw、compressed */ - quality?: string - /** 需要基础库: `2.25.0` - * - * 截取的源类型,有效值为 stream(截取视频源)、view(截取渲染后的画面) */ - sourceType?: string - /** 接口调用成功的回调函数 */ - success?: LivePlayerContextSnapshotSuccessCallback - } - interface LivePlayerContextSnapshotSuccessCallbackResult { - /** 图片的高度 */ - height: string - /** 图片文件的临时路径 (本地路径) */ - tempImagePath: string - /** 图片的宽度 */ - width: string - errMsg: string - } - interface LivePusherContextSnapshotOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SnapshotCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SnapshotFailCallback - /** 需要基础库: `2.10.0` - * - * 图片的质量,默认原图。有效值为 raw、compressed */ - quality?: string - /** 需要基础库: `2.25.0` - * - * 截取的源类型,有效值为 stream(截取视频源)、view(截取渲染后的画面) */ - sourceType?: string - /** 接口调用成功的回调函数 */ - success?: LivePusherContextSnapshotSuccessCallback - } - interface LivePusherContextSnapshotSuccessCallbackResult { - /** 图片的高度 */ - height: string - /** 图片文件的临时路径 */ - tempImagePath: string - /** 图片的宽度 */ - width: string - errMsg: string - } - interface LivePusherContextStartOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartFailCallback - /** 接口调用成功的回调函数 */ - success?: StartSuccessCallback - } - interface LoadFontFaceCompleteCallbackResult { - /** 加载字体结果 */ - status: string - } - interface LoadFontFaceOption { - /** 定义的字体名称 */ - family: string - /** 字体资源的地址。建议格式为 TTF 和 WOFF,WOFF2 在低版本的iOS上会不兼容。 */ - source: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: LoadFontFaceCompleteCallback - /** 可选的字体描述符 */ - desc?: DescOption - /** 接口调用失败的回调函数 */ - fail?: LoadFontFaceFailCallback - /** 需要基础库: `2.10.0` - * - * 是否全局生效 */ - global?: boolean - /** 字体作用范围,可选值为 webview / native,默认 webview,设置 native 可在 Canvas 2D 下使用 */ - scopes?: any[] - /** 接口调用成功的回调函数 */ - success?: LoadFontFaceSuccessCallback - } - interface LocalInfo { - /** 接收消息的 socket 的地址 */ - address: string - /** 使用的协议族,为 IPv4 或者 IPv6 */ - family: string - /** 端口号 */ - port: number - } - interface LoginOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: LoginCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: LoginFailCallback - /** 接口调用成功的回调函数 */ - success?: LoginSuccessCallback - /** 需要基础库: `1.9.90` - * - * 超时时间,单位ms */ - timeout?: number - } - interface LoginSuccessCallbackResult { - /** 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 [auth.code2Session](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html),使用 code 换取 openid、unionid、session_key 等信息 */ - code: string - errMsg: string - } - interface MakeBluetoothPairOption { - /** 蓝牙设备 id */ - deviceId: string - /** pin 码,Base64 格式。 */ - pin: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: MakeBluetoothPairCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: MakeBluetoothPairFailCallback - /** 接口调用成功的回调函数 */ - success?: MakeBluetoothPairSuccessCallback - /** 超时时间,单位 ms */ - timeout?: number - } - interface MakePhoneCallOption { - /** 需要拨打的电话号码 */ - phoneNumber: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: MakePhoneCallCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: MakePhoneCallFailCallback - /** 接口调用成功的回调函数 */ - success?: MakePhoneCallSuccessCallback - } - /** 广播的制造商信息。仅安卓支持,iOS 因系统限制无法定制。 */ - interface ManufacturerData { - /** 制造商ID,0x 开头的十六进制 */ - manufacturerId: string - /** 制造商信息 */ - manufacturerSpecificData?: ArrayBuffer - } - /** 图片覆盖的经纬度范围 */ - interface MapBounds { - /** 东北角经纬度 */ - northeast: MapPostion - /** 西南角经纬度 */ - southwest: MapPostion - } - interface MapPostion { - /** 纬度 */ - latitude: number - /** 经度 */ - longitude: number - } - /** 用来扩展(或收缩)参照节点布局区域的边界 */ - interface Margins { - /** 节点布局区域的下边界 */ - bottom?: number - /** 节点布局区域的左边界 */ - left?: number - /** 节点布局区域的右边界 */ - right?: number - /** 节点布局区域的上边界 */ - top?: number - } - /** 匹配到的缓存 */ - interface MatchCache { - /** 缓存 id */ - cacheId: string - /** 缓存创建时间 */ - createTime: number - /** 缓存内容,会带有 fromCache 标记,方便开发者区分内容是否来自缓存 */ - data: any - /** 缓存有效时间 */ - maxAge: number - /** 命中的规则 id */ - ruleId: string - } - /** MediaAudioPlayer 实例,可通过 [wx.createMediaAudioPlayer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createMediaAudioPlayer.html) 接口获取实例。 */ - interface MediaAudioPlayer { - /** 音量。范围 0~1。默认为 1 */ - volume: number - } - /** 本地临时文件列表 */ - interface MediaFile { - /** 视频的时间长度 */ - duration: number - /** 文件类型 - * - * 可选值: - * - 'image': 图片; - * - 'video': 视频; */ - fileType: 'image' | 'video' - /** 视频的高度 */ - height: number - /** 本地临时文件大小,单位 B */ - size: number - /** 本地临时文件路径 (本地路径) */ - tempFilePath: string - /** 视频缩略图临时文件路径 */ - thumbTempFilePath: string - /** 视频的宽度 */ - width: number - } - interface MediaQueryObserverObserveCallbackResult { - /** 页面的当前状态是否满足所指定的 media query */ - matches: boolean - } - /** 需要预览的资源列表 */ - interface MediaSource { - /** 图片或视频的地址 */ - url: string - /** 视频的封面图片 */ - poster?: string - /** 资源的类型,默认为图片 - * - * 可选值: - * - 'image': 图片; - * - 'video': 视频; */ - type?: 'image' | 'video' - } - /** 需要基础库: `2.9.0` - * - * 可通过 [MediaContainer.extractDataSource](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.extractDataSource.html) 返回。 - * - * [MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) 音频或视频轨道,可以对轨道进行一些操作 */ - interface MediaTrack { - /** 轨道长度,只读 */ - duration: number - /** 轨道类型,只读 - * - * 可选值: - * - 'audio': 音频轨道; - * - 'video': 视频轨道; */ - kind: 'audio' | 'video' - /** 音量,音频轨道下有效,可写 */ - volume: number - } - /** 小程序帐号信息 */ - interface MiniProgram { - /** 小程序 appId */ - appId: string - /** 需要基础库: `2.10.0` - * - * 小程序版本 - * - * 可选值: - * - 'develop': 开发版; - * - 'trial': 体验版; - * - 'release': 正式版; */ - envVersion: 'develop' | 'trial' | 'release' - /** 需要基础库: `2.10.2` - * - * 线上小程序版本号 */ - version: string - } - interface MkdirFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory ${dirPath}': 上级目录不存在(该错误仅在 recursive = false 时生效); - * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限; - * - 'fail file already exists ${dirPath}': 有同名文件或目录(该错误仅在 recursive = false 时生效); - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface MkdirOption { - /** 创建的目录路径 (本地路径) */ - dirPath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: MkdirCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: MkdirFailCallback - /** 需要基础库: `2.3.0` - * - * 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。 */ - recursive?: boolean - /** 接口调用成功的回调函数 */ - success?: MkdirSuccessCallback - } - interface MoveAlongOption { - /** 平滑移动的时间 */ - duration: number - /** 指定 marker */ - markerId: number - /** 移动路径的坐标串,坐标点格式 `{longitude, latitude}` */ - path: any[] - /** 根据路径方向自动改变 marker 的旋转角度 */ - autoRotate?: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: MoveAlongCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: MoveAlongFailCallback - /** 接口调用成功的回调函数 */ - success?: MoveAlongSuccessCallback - } - interface MoveToLocationOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: MoveToLocationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: MoveToLocationFailCallback - /** 需要基础库: `2.8.0` - * - * 纬度 */ - latitude?: number - /** 需要基础库: `2.8.0` - * - * 经度 */ - longitude?: number - /** 接口调用成功的回调函数 */ - success?: MoveToLocationSuccessCallback - } - /** 静音设置 */ - interface MuteConfig { - /** 是否静音耳机 */ - muteEarphone?: boolean - /** 是否静音麦克风 */ - muteMicrophone?: boolean - } - interface MuteOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: MuteCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: MuteFailCallback - /** 接口调用成功的回调函数 */ - success?: MuteSuccessCallback - } - /** 需要基础库: `2.11.2` */ - interface NFCAdapter { - /** 标签类型枚举 */ - tech: TechType - } - interface NavigateBackMiniProgramOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: NavigateBackMiniProgramCompleteCallback - /** 需要返回给上一个小程序的数据,上一个小程序可在 `App.onShow` 中获取到这份数据。 [详情](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html)。 */ - extraData?: IAnyObject - /** 接口调用失败的回调函数 */ - fail?: NavigateBackMiniProgramFailCallback - /** 接口调用成功的回调函数 */ - success?: NavigateBackMiniProgramSuccessCallback - } - interface NavigateBackOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: NavigateBackCompleteCallback - /** 返回的页面数,如果 delta 大于现有页面数,则返回到首页。 */ - delta?: number - /** 接口调用失败的回调函数 */ - fail?: NavigateBackFailCallback - /** 接口调用成功的回调函数 */ - success?: NavigateBackSuccessCallback - } - interface NavigateToMiniProgramOption { - /** 要打开的小程序 appId */ - appId?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: NavigateToMiniProgramCompleteCallback - /** 要打开的小程序版本。仅在当前小程序为开发版或体验版时此参数有效。如果当前小程序是正式版,则打开的小程序必定是正式版。 - * - * 可选值: - * - 'develop': 开发版; - * - 'trial': 体验版; - * - 'release': 正式版; */ - envVersion?: 'develop' | 'trial' | 'release' - /** 需要传递给目标小程序的数据,目标小程序可在 `App.onLaunch`,`App.onShow` 中获取到这份数据。如果跳转的是小游戏,可以在 [wx.onShow](#)、[wx.getLaunchOptionsSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) 中可以获取到这份数据数据。 */ - extraData?: IAnyObject - /** 接口调用失败的回调函数 */ - fail?: NavigateToMiniProgramFailCallback - /** 打开的页面路径,如果为空则打开首页。path 中 ? 后面的部分会成为 query,在小程序的 `App.onLaunch`、`App.onShow` 和 `Page.onLoad` 的回调函数或小游戏的 [wx.onShow](#) 回调函数、[wx.getLaunchOptionsSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) 中可以获取到 query 数据。对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 */ - path?: string - /** 需要基础库: `2.18.1` - * - * 小程序链接,当传递该参数后,可以不传 appId 和 path。链接可以通过【小程序菜单】->【复制链接】获取。 */ - shortLink?: string - /** 接口调用成功的回调函数 */ - success?: NavigateToMiniProgramSuccessCallback - } - interface NavigateToOption { - /** 需要跳转的应用内非 tabBar 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 `?` 分隔,参数键与参数值用 `=` 相连,不同参数用 `&` 分隔;如 'path?key=value&key2=value2' */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: NavigateToCompleteCallback - /** 页面间通信接口,用于监听被打开页面发送到当前页面的数据。基础库 2.7.3 开始支持。 */ - events?: IAnyObject - /** 接口调用失败的回调函数 */ - fail?: NavigateToFailCallback - /** 接口调用成功的回调函数 */ - success?: NavigateToSuccessCallback - } - interface NavigateToSuccessCallbackResult { - /** [EventChannel](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.html) - * - * 和被打开页面进行通信 */ - eventChannel: EventChannel - errMsg: string - } - interface NdefCloseOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: NdefCloseCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: NdefCloseFailCallback - /** 接口调用成功的回调函数 */ - success?: NdefCloseSuccessCallback - } - interface NdefConnectOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ConnectCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ConnectFailCallback - /** 接口调用成功的回调函数 */ - success?: ConnectSuccessCallback - } - interface NodeCallbackResult { - /** 节点对应的 Node 实例 */ - node: IAnyObject - } - interface NotifyBLECharacteristicValueChangeOption { - /** 蓝牙特征的 UUID */ - characteristicId: string - /** 蓝牙设备 id */ - deviceId: string - /** 蓝牙特征对应服务的 UUID */ - serviceId: string - /** 是否启用 notify */ - state: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: NotifyBLECharacteristicValueChangeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: NotifyBLECharacteristicValueChangeFailCallback - /** 接口调用成功的回调函数 */ - success?: NotifyBLECharacteristicValueChangeSuccessCallback - /** 需要基础库: `2.4.0` - * - * 设置特征订阅类型,有效值有 `notification` 和 `indication` */ - type?: string - } - /** media query 描述符 */ - interface ObserveDescriptor { - /** 页面高度( px 为单位) */ - height: number - /** 页面最大高度( px 为单位) */ - maxHeight: number - /** 页面最大宽度( px 为单位) */ - maxWidth: number - /** 页面最小高度( px 为单位) */ - minHeight: number - /** 页面最小宽度( px 为单位) */ - minWidth: number - /** 屏幕方向( `landscape` 或 `portrait` ) */ - orientation: string - /** 页面宽度( px 为单位) */ - width: number - } - /** 设置 type 监听单个类型的指标,设置 entryTypes 监听多个类型指标。 */ - interface ObserveOption { - /** 指标类型列表。不能和 type 同时使用。 */ - entryTypes?: string[] - /** 指标类型。不能和 entryTypes 同时使用 - * - * 可选值: - * - 'navigation': 路由; - * - 'render': 渲染; - * - 'script': 脚本; */ - type?: 'navigation' | 'render' | 'script' - } - /** 需要基础库: `2.7.0` - * - * 离屏 canvas 实例,可通过 [wx.createOffscreenCanvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html) 创建。 */ - interface OffscreenCanvas { - /** 画布高度 */ - height: number - /** 画布宽度 */ - width: number - } - interface OnAccelerometerChangeListenerResult { - /** X 轴 */ - x: number - /** Y 轴 */ - y: number - /** Z 轴 */ - z: number - } - interface OnBLECharacteristicValueChangeListenerResult { - /** 蓝牙特征的 UUID */ - characteristicId: string - /** 蓝牙设备 id */ - deviceId: string - /** 蓝牙特征对应服务的 UUID */ - serviceId: string - /** 特征最新的值 */ - value: ArrayBuffer - } - interface OnBLEConnectionStateChangeListenerResult { - /** 是否处于已连接状态 */ - connected: boolean - /** 蓝牙设备 id */ - deviceId: string - } - interface OnBLEMTUChangeListenerResult { - /** 蓝牙设备 id */ - deviceId: string - /** 最大传输单元 */ - mtu: number - } - interface OnBLEPeripheralConnectionStateChangedListenerResult { - /** 连接目前状态 */ - connected: boolean - /** 连接状态变化的设备 id */ - deviceId: string - /** server 的 UUID */ - serverId: string - } - interface OnBackgroundFetchDataListenerResult { - /** 缓存数据类别,取值为 periodic 或 pre */ - fetchType: string - /** 缓存数据 */ - fetchedData: string - /** 小程序页面路径 */ - path: string - /** 传给页面的 query 参数 */ - query: string - /** 进入小程序的场景值 */ - scene: number - /** 客户端拿到缓存数据的时间戳 */ - timeStamp: number - } - interface OnBeaconServiceChangeListenerResult { - /** 服务目前是否可用 */ - available: boolean - /** 目前是否处于搜索状态 */ - discovering: boolean - } - interface OnBeaconUpdateListenerResult { - /** 当前搜寻到的所有 Beacon 设备列表 */ - beacons: BeaconInfo[] - } - interface OnBluetoothAdapterStateChangeListenerResult { - /** 蓝牙适配器是否可用 */ - available: boolean - /** 蓝牙适配器是否处于搜索状态 */ - discovering: boolean - } - interface OnBluetoothDeviceFoundListenerResult { - /** 新搜索到的设备列表 */ - devices: BlueToothDevice[] - } - interface OnCameraFrameCallbackResult { - /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */ - data: ArrayBuffer - /** 图像数据矩形的高度 */ - height: number - /** 图像数据矩形的宽度 */ - width: number - } - interface OnCharacteristicReadRequestListenerResult { - /** 唯一标识码,调用 [writeCharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) 时使用 */ - callbackId: number - /** 蓝牙特征的 UUID */ - characteristicId: string - /** 蓝牙特征对应服务的 UUID */ - serviceId: string - } - interface OnCharacteristicSubscribedListenerResult { - /** 蓝牙特征的 UUID */ - characteristicId: string - /** 蓝牙特征对应服务的 UUID */ - serviceId: string - } - interface OnCharacteristicWriteRequestListenerResult { - /** 唯一标识码,调用 [writeCharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) 时使用 */ - callbackId: number - /** 蓝牙特征的 UUID */ - characteristicId: string - /** 蓝牙特征对应服务的 UUID */ - serviceId: string - /** 请求写入特征的二进制数据值 */ - value: ArrayBuffer - } - interface OnCheckForUpdateListenerResult { - /** 是否有新版本 */ - hasUpdate: boolean - } - interface OnChunkReceivedListenerResult { - /** 开发者服务器每次返回新chunk时的Response */ - res: Result - } - interface OnCompassChangeListenerResult { - /** 需要基础库: `2.4.0` - * - * 精度 */ - accuracy: number | string - /** 面对的方向度数 */ - direction: number - } - interface OnCopyUrlListenerResult { - /** 用短链打开小程序时当前页面携带的查询字符串。小程序中使用时,应在进入页面时调用 `wx.onCopyUrl` 自定义 `query`,退出页面时调用 `wx.offCopyUrl`,防止影响其它页面。 */ - query: string - } - interface OnDeviceMotionChangeListenerResult { - /** 当 手机坐标 X/Y 和 地球 X/Y 重合时,绕着 Z 轴转动的夹角为 alpha,范围值为 [0, 2*PI)。逆时针转动为正。 */ - alpha: number - /** 当手机坐标 Y/Z 和地球 Y/Z 重合时,绕着 X 轴转动的夹角为 beta。范围值为 [-1*PI, PI) 。顶部朝着地球表面转动为正。也有可能朝着用户为正。 */ - beta: number - /** 当手机 X/Z 和地球 X/Z 重合时,绕着 Y 轴转动的夹角为 gamma。范围值为 [-1*PI/2, PI/2)。右边朝着地球表面转动为正。 */ - gamma: number - } - interface OnDiscoveredListenerResult { - /** NdefMessage 数组,消息格式为 {id: ArrayBuffer, type: ArrayBuffer, payload: ArrayBuffer} */ - messages: any[] - /** tech 数组,用于匹配NFC卡片具体可以使用什么标准(NfcA等实例)处理 */ - techs: any[] - } - interface OnFrameRecordedListenerResult { - /** 录音分片数据 */ - frameBuffer: ArrayBuffer - /** 当前帧是否正常录音结束前的最后一帧 */ - isLastFrame: boolean - } - interface OnGetWifiListListenerResult { - /** Wi-Fi 列表数据 */ - wifiList: WifiInfo[] - } - interface OnGyroscopeChangeListenerResult { - /** x 轴的角速度 */ - x: number - /** y 轴的角速度 */ - y: number - /** z 轴的角速度 */ - z: number - } - interface OnHCEMessageListenerResult { - /** `messageType=1` 时 ,客户端接收到 NFC 设备的指令 */ - data: ArrayBuffer - /** 消息类型 - * - * 可选值: - * - 1: HCE APDU Command类型,小程序需对此指令进行处理,并调用 sendHCEMessage 接口返回处理指令; - * - 2: 设备离场事件类型; */ - messageType: 1 | 2 - /** `messageType=2` 时,原因 */ - reason: number - } - interface OnHeadersReceivedListenerResult { - /** 开发者服务器返回的 HTTP Response Header */ - header: IAnyObject - } - interface OnKeyboardHeightChangeListenerResult { - /** 键盘高度 */ - height: number - } - interface OnLazyLoadErrorListenerResult { - /** 详细信息 */ - errMsg: string - /** 异步组件所属的分包 */ - subpackage: any[] - /** 'subpackage' 失败类型 */ - type: string - } - interface OnLocalServiceFoundListenerResult { - /** 服务的 ip 地址 */ - ip: string - /** 服务的端口 */ - port: number - /** 服务的名称 */ - serviceName: string - /** 服务的类型 */ - serviceType: string - } - interface OnLocalServiceLostListenerResult { - /** 服务的名称 */ - serviceName: string - /** 服务的类型 */ - serviceType: string - } - interface OnLocationChangeErrorListenerResult { - /** 错误码 */ - errCode: number - } - interface OnLocationChangeListenerResult { - /** 位置的精确度 */ - accuracy: number - /** 需要基础库: `1.2.0` - * - * 高度,单位 m */ - altitude: number - /** 需要基础库: `1.2.0` - * - * 水平精度,单位 m */ - horizontalAccuracy: number - /** 纬度,范围为 -90~90,负数表示南纬。使用 gcj02 国测局坐标系 */ - latitude: number - /** 经度,范围为 -180~180,负数表示西经。使用 gcj02 国测局坐标系 */ - longitude: number - /** 速度,单位 m/s */ - speed: number - /** 需要基础库: `1.2.0` - * - * 垂直精度,单位 m(Android 无法获取,返回 0) */ - verticalAccuracy: number - } - interface OnMemoryWarningListenerResult { - /** 内存告警等级,只有 Android 才有,对应系统宏定义 - * - * 可选值: - * - 5: TRIM_MEMORY_RUNNING_MODERATE; - * - 10: TRIM_MEMORY_RUNNING_LOW; - * - 15: TRIM_MEMORY_RUNNING_CRITICAL; */ - level: 5 | 10 | 15 - } - interface OnNetworkStatusChangeListenerResult { - /** 当前是否有网络连接 */ - isConnected: boolean - /** 网络类型 - * - * 可选值: - * - 'wifi': wifi 网络; - * - '2g': 2g 网络; - * - '3g': 3g 网络; - * - '4g': 4g 网络; - * - '5g': 5g 网络; - * - 'unknown': Android 下不常见的网络类型; - * - 'none': 无网络; */ - networkType: 'wifi' | '2g' | '3g' | '4g' | '5g' | 'unknown' | 'none' - } - interface OnNetworkWeakChangeListenerResult { - /** 当前网络类型 */ - networkType: string - /** 当前是否处于弱网状态 */ - weakNet: boolean - } - interface OnOpenListenerResult { - /** 需要基础库: `2.0.0` - * - * 连接成功的 HTTP 响应 Header */ - header: IAnyObject - /** 需要基础库: `2.10.4` - * - * 网络请求过程中一些调试信息 */ - profile: SocketProfile - } - interface OnPageNotFoundListenerResult { - /** 是否本次启动的首个页面(例如从分享等入口进来,首个页面是开发者配置的分享页面) */ - isEntryPage: boolean - /** 不存在页面的路径 (代码包路径) */ - path: string - /** 打开不存在页面的 query 参数 */ - query: IAnyObject - } - interface OnScreenRecordingStateChangedListenerResult { - /** 录屏状态 - * - * 可选值: - * - 'start': 开始录屏; - * - 'stop': 结束录屏; */ - state: 'start' | 'stop' - } - interface OnSocketOpenListenerResult { - /** 需要基础库: `2.0.0` - * - * 连接成功的 HTTP 响应 Header */ - header: IAnyObject - } - interface OnStopListenerResult { - /** 录音总时长,单位:ms */ - duration: number - /** 录音文件大小,单位:Byte */ - fileSize: number - /** 录音文件的临时路径 (本地路径) */ - tempFilePath: string - } - interface OnThemeChangeListenerResult { - /** 系统当前的主题,取值为`light`或`dark` - * - * 可选值: - * - 'dark': 深色主题; - * - 'light': 浅色主题; */ - theme: 'dark' | 'light' - } - interface OnUnhandledRejectionListenerResult { - /** 被拒绝的 Promise 对象 */ - promise: Promise - /** 拒绝原因,一般是一个 Error 对象 */ - reason: string - } - interface OnVoIPChatInterruptedListenerResult { - /** 错误码 */ - errCode: number - /** 调用结果(错误原因) */ - errMsg: string - } - interface OnVoIPChatMembersChangedListenerResult { - /** 错误码 */ - errCode: number - /** 调用结果 */ - errMsg: string - /** 还在实时语音通话中的成员 openId 名单 */ - openIdList: string[] - } - interface OnVoIPChatSpeakersChangedListenerResult { - /** 错误码 */ - errCode: number - /** 调用结果(错误原因) */ - errMsg: string - /** 还在实时语音通话中的成员 openId 名单 */ - openIdList: string[] - } - interface OnVoIPChatStateChangedListenerResult { - /** 事件码 */ - code: number - /** 附加信息 */ - data: IAnyObject - /** 错误码 */ - errCode: number - /** 调用结果 */ - errMsg: string - } - interface OnVoIPVideoMembersChangedListenerResult { - /** 错误码 */ - errCode: number - /** 调用结果 */ - errMsg: string - /** 开启视频的成员名单 */ - openIdList: string[] - } - interface OnWifiConnectedListenerResult { - /** [WifiInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/WifiInfo.html) - * - * Wi-Fi 信息 */ - wifi: WifiInfo - } - interface OnWifiConnectedWithPartialInfoListenerResult { - /** [WifiInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/WifiInfo.html) - * - * 只包含 SSID 属性的 WifiInfo 对象 */ - wifi: WifiInfo - } - interface OnWindowResizeListenerResult { - size: Size - } - interface OpenAppAuthorizeSettingOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenAppAuthorizeSettingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenAppAuthorizeSettingFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenAppAuthorizeSettingSuccessCallback - } - interface OpenBluetoothAdapterOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenBluetoothAdapterCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenBluetoothAdapterFailCallback - /** 需要基础库: `2.10.0` - * - * 蓝牙模式,可作为主/从设备,仅 iOS 需要。 - * - * 可选值: - * - 'central': 主机模式; - * - 'peripheral': 从机(外围设备)模式; */ - mode?: 'central' | 'peripheral' - /** 接口调用成功的回调函数 */ - success?: OpenBluetoothAdapterSuccessCallback - } - interface OpenCardOption { - /** 需要打开的卡券列表 */ - cardList: OpenCardRequestInfo[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenCardCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenCardFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenCardSuccessCallback - } - /** 需要打开的卡券列表 */ - interface OpenCardRequestInfo { - /** 卡券 ID */ - cardId: string - /** 由 [wx.addCard](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/card/wx.addCard.html) 的返回对象中的加密 code 通过解密后得到,解密请参照:[code 解码接口](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1499332673_Unm7V) */ - code: string - } - interface OpenChannelsActivityOption { - /** 视频 feedId */ - feedId: string - /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ - finderUserName: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenChannelsActivityCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenChannelsActivityFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenChannelsActivitySuccessCallback - } - interface OpenChannelsEventOption { - /** 活动 id */ - eventId: string - /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ - finderUserName: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenChannelsEventCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenChannelsEventFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenChannelsEventSuccessCallback - } - interface OpenChannelsLiveOption { - /** 视频号 id,以“sph”开头的id,可在视频号助手获取 */ - finderUserName: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenChannelsLiveCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenChannelsLiveFailCallback - /** 直播 feedId,通过 getChannelsLiveInfo 接口获取(基础库 v2.19.2 之前的版本需要填写) */ - feedId?: string - /** 直播 nonceId,通过 getChannelsLiveInfo 接口获取(基础库 v2.19.2 之前的版本需要填写) */ - nonceId?: string - /** 接口调用成功的回调函数 */ - success?: OpenChannelsLiveSuccessCallback - } - interface OpenChannelsUserProfileOption { - /** 视频号 id */ - finderUserName: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenChannelsUserProfileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenChannelsUserProfileFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenChannelsUserProfileSuccessCallback - } - interface OpenCustomerServiceChatOption { - /** 企业ID */ - corpId: string - /** 客服信息 */ - extInfo: ExtInfoOption - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenCustomerServiceChatCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenCustomerServiceChatFailCallback - /** 气泡消息图片 */ - sendMessageImg?: string - /** 气泡消息小程序路径 */ - sendMessagePath?: string - /** 气泡消息标题 */ - sendMessageTitle?: string - /** 是否发送小程序气泡消息 */ - showMessageCard?: boolean - /** 接口调用成功的回调函数 */ - success?: OpenCustomerServiceChatSuccessCallback - } - interface OpenDocumentOption { - /** 文件路径 (本地路径) ,可通过 downloadFile 获得 */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenDocumentCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenDocumentFailCallback - /** 需要基础库: `1.4.0` - * - * 文件类型,指定文件类型打开文件 - * - * 可选值: - * - 'doc': doc 格式; - * - 'docx': docx 格式; - * - 'xls': xls 格式; - * - 'xlsx': xlsx 格式; - * - 'ppt': ppt 格式; - * - 'pptx': pptx 格式; - * - 'pdf': pdf 格式; */ - fileType?: 'doc' | 'docx' | 'xls' | 'xlsx' | 'ppt' | 'pptx' | 'pdf' - /** 需要基础库: `2.11.0` - * - * 是否显示右上角菜单 */ - showMenu?: boolean - /** 接口调用成功的回调函数 */ - success?: OpenDocumentSuccessCallback - } - interface OpenEmbeddedMiniProgramOption { - /** 要打开的小程序 appId */ - appId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenEmbeddedMiniProgramCompleteCallback - /** 要打开的小程序版本。仅在当前小程序为开发版或体验版时此参数有效。如果当前小程序是正式版,则打开的小程序必定是正式版。 - * - * 可选值: - * - 'develop': 开发版; - * - 'trial': 体验版; - * - 'release': 正式版; */ - envVersion?: 'develop' | 'trial' | 'release' - /** 需要传递给目标小程序的数据,目标小程序可在 `App.onLaunch`,`App.onShow` 中获取到这份数据。如果跳转的是小游戏,可以在 [wx.onShow](#)、[wx.getLaunchOptionsSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) 中可以获取到这份数据数据。 */ - extraData?: IAnyObject - /** 接口调用失败的回调函数 */ - fail?: OpenEmbeddedMiniProgramFailCallback - /** 打开的页面路径,如果为空则打开首页。path 中 ? 后面的部分会成为 query,在小程序的 `App.onLaunch`、`App.onShow` 和 `Page.onLoad` 的回调函数或小游戏的 [wx.onShow](#) 回调函数、[wx.getLaunchOptionsSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) 中可以获取到 query 数据。对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 */ - path?: string - /** 小程序链接,当传递该参数后,可以不传 appId 和 path。链接可以通过【小程序菜单】->【复制链接】获取。仅 verify=binding 支持。 */ - shortLink?: string - /** 接口调用成功的回调函数 */ - success?: OpenEmbeddedMiniProgramSuccessCallback - /** 需要基础库: `2.24.3` - * - * 校验方式。 - * - * 可选值: - * - 'binding': 校验小程序管理后台的绑定关系。; - * - 'unionProduct': 校验目标打开链接是否为[小程序联盟](https://developers.weixin.qq.com/doc/ministore/union/brief-introduction.html)商品。; */ - verify?: 'binding' | 'unionProduct' - } - interface OpenFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory "${filePath}"': 上级目录不存在; */ - errMsg: string - } - interface OpenLocationOption { - /** 纬度,范围为-90~90,负数表示南纬。使用 gcj02 国测局坐标系 */ - latitude: number - /** 经度,范围为-180~180,负数表示西经。使用 gcj02 国测局坐标系 */ - longitude: number - /** 地址的详细说明 */ - address?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenLocationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenLocationFailCallback - /** 位置名 */ - name?: string - /** 缩放比例,范围5~18 */ - scale?: number - /** 接口调用成功的回调函数 */ - success?: OpenLocationSuccessCallback - } - interface OpenMapAppOption { - /** 目的地名称 */ - destination: string - /** 目的地纬度 */ - latitude: number - /** 目的地经度 */ - longitude: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenMapAppCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenMapAppFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenMapAppSuccessCallback - } - interface OpenOption { - /** 文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenFailCallback - /** 文件系统标志,默认值: 'r' - * - * 可选值: - * - 'a': 打开文件用于追加。 如果文件不存在,则创建该文件; - * - 'ax': 类似于 'a',但如果路径存在,则失败; - * - 'a+': 打开文件用于读取和追加。 如果文件不存在,则创建该文件; - * - 'ax+': 类似于 'a+',但如果路径存在,则失败; - * - 'as': 打开文件用于追加(在同步模式中)。 如果文件不存在,则创建该文件; - * - 'as+': 打开文件用于读取和追加(在同步模式中)。 如果文件不存在,则创建该文件; - * - 'r': 打开文件用于读取。 如果文件不存在,则会发生异常; - * - 'r+': 打开文件用于读取和写入。 如果文件不存在,则会发生异常; - * - 'w': 打开文件用于写入。 如果文件不存在则创建文件,如果文件存在则截断文件; - * - 'wx': 类似于 'w',但如果路径存在,则失败; - * - 'w+': 打开文件用于读取和写入。 如果文件不存在则创建文件,如果文件存在则截断文件; - * - 'wx+': 类似于 'w+',但如果路径存在,则失败; */ - flag?: - | 'a' - | 'ax' - | 'a+' - | 'ax+' - | 'as' - | 'as+' - | 'r' - | 'r+' - | 'w' - | 'wx' - | 'w+' - | 'wx+' - /** 接口调用成功的回调函数 */ - success?: OpenSuccessCallback - } - interface OpenSettingOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenSettingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenSettingFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenSettingSuccessCallback - /** 需要基础库: `2.10.3` - * - * 是否同时获取用户订阅消息的订阅状态,默认不获取。注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。 */ - withSubscriptions?: boolean - } - interface OpenSettingSuccessCallbackResult { - /** [AuthSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/AuthSetting.html) - * - * 用户授权结果 */ - authSetting: AuthSetting - /** [SubscriptionsSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/SubscriptionsSetting.html) - * - * 需要基础库: `2.10.3` - * - * 用户订阅消息设置,接口参数`withSubscriptions`值为`true`时才会返回。 */ - subscriptionsSetting: SubscriptionsSetting - errMsg: string - } - interface OpenSuccessCallbackResult { - /** 文件描述符 */ - fd: string - errMsg: string - } - interface OpenSyncOption { - /** 文件路径 (本地路径) */ - filePath: string - /** 文件系统标志,默认值: 'r' - * - * 可选值: - * - 'a': 打开文件用于追加。 如果文件不存在,则创建该文件; - * - 'ax': 类似于 'a',但如果路径存在,则失败; - * - 'a+': 打开文件用于读取和追加。 如果文件不存在,则创建该文件; - * - 'ax+': 类似于 'a+',但如果路径存在,则失败; - * - 'as': 打开文件用于追加(在同步模式中)。 如果文件不存在,则创建该文件; - * - 'as+': 打开文件用于读取和追加(在同步模式中)。 如果文件不存在,则创建该文件; - * - 'r': 打开文件用于读取。 如果文件不存在,则会发生异常; - * - 'r+': 打开文件用于读取和写入。 如果文件不存在,则会发生异常; - * - 'w': 打开文件用于写入。 如果文件不存在则创建文件,如果文件存在则截断文件; - * - 'wx': 类似于 'w',但如果路径存在,则失败; - * - 'w+': 打开文件用于读取和写入。 如果文件不存在则创建文件,如果文件存在则截断文件; - * - 'wx+': 类似于 'w+',但如果路径存在,则失败; */ - flag?: - | 'a' - | 'ax' - | 'a+' - | 'ax+' - | 'as' - | 'as+' - | 'r' - | 'r+' - | 'w' - | 'wx' - | 'w+' - | 'wx+' - } - interface OpenSystemBluetoothSettingOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenSystemBluetoothSettingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenSystemBluetoothSettingFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenSystemBluetoothSettingSuccessCallback - } - interface OpenVideoEditorOption { - /** 视频源的路径,只支持本地路径 */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: OpenVideoEditorCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: OpenVideoEditorFailCallback - /** 接口调用成功的回调函数 */ - success?: OpenVideoEditorSuccessCallback - } - interface OpenVideoEditorSuccessCallbackResult { - /** 剪辑后生成的视频文件的时长,单位毫秒(ms) */ - duration: number - /** 剪辑后生成的视频文件大小,单位字节数(byte) */ - size: number - /** 编辑后生成的视频文件的临时路径 */ - tempFilePath: string - /** 编辑后生成的缩略图文件的临时路径 */ - tempThumbPath: string - errMsg: string - } - interface PageScrollToOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PageScrollToCompleteCallback - /** 滚动动画的时长,单位 ms */ - duration?: number - /** 接口调用失败的回调函数 */ - fail?: PageScrollToFailCallback - /** 需要基础库: `2.23.1` - * - * 偏移距离,需要和 selector 参数搭配使用,可以滚动到 selector 加偏移距离的位置,单位 px */ - offsetTop?: number - /** 滚动到页面的目标位置,单位 px */ - scrollTop?: number - /** 需要基础库: `2.7.3` - * - * 选择器 */ - selector?: string - /** 接口调用成功的回调函数 */ - success?: PageScrollToSuccessCallback - } - /** 需要基础库: `2.11.0` - * - * Canvas 2D API 的接口 Path2D 用来声明路径,此路径稍后会被CanvasRenderingContext2D 对象使用。CanvasRenderingContext2D 接口的 路径方法 也存在于 Path2D 这个接口中,允许你在 canvas 中根据需要创建可以保留并重用的路径。 */ - interface Path2D {} - interface PauseBGMOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PauseBGMCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PauseBGMFailCallback - /** 接口调用成功的回调函数 */ - success?: PauseBGMSuccessCallback - } - interface PauseBackgroundAudioOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PauseBackgroundAudioCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PauseBackgroundAudioFailCallback - /** 接口调用成功的回调函数 */ - success?: PauseBackgroundAudioSuccessCallback - } - interface PauseOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PauseCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PauseFailCallback - /** 接口调用成功的回调函数 */ - success?: PauseSuccessCallback - } - interface PauseVoiceOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PauseVoiceCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PauseVoiceFailCallback - /** 接口调用成功的回调函数 */ - success?: PauseVoiceSuccessCallback - } - /** 单条性能数据。具体数据口径请参考[性能数据文档]((performance/perf_data##_1-4-%E9%80%9A%E8%BF%87-wx-getPerformance-%E5%9C%A8%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%86%85%E8%8E%B7%E5%8F%96)) */ - interface PerformanceEntry { - /** 需要基础库: `2.24.0` - * - * 解析域名结束时间。仅 resourceTiming 指标有效。 */ - domainLookupEnd: number - /** 需要基础库: `2.24.0` - * - * 解析域名开始时间。仅 resourceTiming 指标有效。 */ - domainLookupStart: number - /** 耗时 ms。仅对于表示阶段的指标有效。 */ - duration: number - /** 指标类型 - * - * 可选值: - * - 'navigation': 路由; - * - 'render': 渲染; - * - 'script': 脚本; */ - entryType: 'navigation' | 'render' | 'script' - /** 需要基础库: `2.21.2` - * - * 注入文件列表。仅 evaluateScript 指标有效。 */ - fileList: string[] - /** 需要基础库: `2.21.2` - * - * 首次渲染参数在渲染层收到的时间。仅 firstRender 指标有效。 */ - initDataRecvTime: number - /** 需要基础库: `2.21.2` - * - * 首次渲染参数从逻辑层发出的时间。仅 firstRender 指标有效。 */ - initDataSendTime: number - /** 需要基础库: `2.24.0` - * - * 初始化性能条目的资源类型。仅 resourceTiming 指标有效。 - * - * 可选值: - * - 'audio': 音频; - * - 'cover-image': cover-image 组件的图片; - * - 'image': 组件的图片; - * - 'open-data': 组件的图片; */ - initiatorType: 'audio' | 'cover-image' | 'image' | 'open-data' - /** 分包名,主包表示为 __APP__ (2.21.2 开始)。仅 evaluateScript 指标有效。 */ - moduleName: string - /** 指标名称 - * - * 可选值: - * - 'appLaunch': 小程序启动耗时。(entryType: navigation); - * - 'route': 路由处理耗时。(entryType: navigation); - * - 'firstRender': 页面首次渲染耗时。(entryType: render); - * - 'firstPaint': 页面首次绘制(FP)时间点,无 duration。(iOS 不支持)(entryType: render); - * - 'firstContentfulPaint': 页面首次内容绘制(FCP)时间点,无 duration。(iOS 14.5 以下版本不支持)(entryType: render); - * - 'largestContentfulPaint': 页面最大内容绘制(LCP)时间点,无 duration。(iOS 不支持)(entryType: render); - * - 'evaluateScript': 逻辑层 JS 代码注入耗时。(entryType: script); - * - 'downloadPackage': 代码包下载耗时。(entryType: loadPackage); - * - 'resourceTiming': 视图层资源加载耗时。(entryType: resource); */ - name: - | 'appLaunch' - | 'route' - | 'firstRender' - | 'firstPaint' - | 'firstContentfulPaint' - | 'largestContentfulPaint' - | 'evaluateScript' - | 'downloadPackage' - | 'resourceTiming' - /** 路由真正响应开始时间。仅 navigation 类型指标有效。 */ - navigationStart: number - /** 路由详细类型,与小程序路由方法对应。仅 navigation 类型指标有效。 */ - navigationType: string - /** 需要基础库: `2.24.0` - * - * 代码包名称。仅 downloadPackage 指标有效。 */ - packageName: string - /** 需要基础库: `2.24.0` - * - * 代码包大小。仅 downloadPackage 指标有效。 */ - packageSize: number - /** 需要基础库: `2.23.1` - * - * path 对应页面实例 Id(随机生成,不保证递增)。仅 render/navigation 指标有效。 */ - pageId: number - /** 页面路径。仅 render 和 navigation 类型指标有效。 */ - path: string - /** 需要基础库: `2.23.1` - * - * referrerPath对应页面实例 Id(随机生成,不保证递增)。仅 route 指标有效。 */ - referrerPageId: number - /** 需要基础库: `2.23.1` - * - * 页面跳转来源页面路径。仅 route 指标有效。 */ - referrerPath: number - /** 开始时间,不同指标的具体含义会有差异。 */ - startTime: number - /** 需要基础库: `2.24.0` - * - * 表示获取资源的大小(以八位字节为单位)的数字。仅 resourceTiming 指标有效。(iOS 不支持) */ - transferSize: number - /** 需要基础库: `2.24.0` - * - * 资源路径。仅 resourceTiming 指标有效。 */ - uri: string - /** 需要基础库: `2.21.2` - * - * 渲染层代码注入完成时间。仅 firstRender 指标有效。 */ - viewLayerReadyTime: number - /** 需要基础库: `2.21.2` - * - * 渲染层执行渲染结束时间。仅 firstRender 指标有效。 */ - viewLayerRenderEndTime: number - /** 需要基础库: `2.21.2` - * - * 渲染层执行渲染开始时间。仅 firstRender 指标有效。 */ - viewLayerRenderStartTime: number - } - /** 需要基础库: `2.11.0` - * - * PerformanceObserver 对象,用于监听性能相关事件 */ - interface PerformanceObserver { - /** 获取当前支持的所有性能指标类型 */ - supportedEntryTypes: any[] - } - /** 平面跟踪配置 */ - interface PlaneTrack { - /** 平面跟踪配置模式 - * - * 可选值: - * - 1: 检测横向平面; - * - 2: 检测纵向平面,只有 v2 版本支持; - * - 3: 检测横向和纵向平面,只有 v2 版本支持; */ - mode: 1 | 2 | 3 - } - interface PlayBGMOption { - /** 加入背景混音的资源地址 */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PlayBGMCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PlayBGMFailCallback - /** 接口调用成功的回调函数 */ - success?: PlayBGMSuccessCallback - } - interface PlayBackgroundAudioOption { - /** 音乐链接,目前支持的格式有 m4a, aac, mp3, wav */ - dataUrl: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PlayBackgroundAudioCompleteCallback - /** 封面URL */ - coverImgUrl?: string - /** 接口调用失败的回调函数 */ - fail?: PlayBackgroundAudioFailCallback - /** 接口调用成功的回调函数 */ - success?: PlayBackgroundAudioSuccessCallback - /** 音乐标题 */ - title?: string - } - interface PlayOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PlayCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PlayFailCallback - /** 接口调用成功的回调函数 */ - success?: PlaySuccessCallback - } - interface PlayVoiceOption { - /** 需要播放的语音文件的文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PlayVoiceCompleteCallback - /** 需要基础库: `1.6.0` - * - * 指定播放时长,到达指定的播放时长后会自动停止播放,单位:秒 */ - duration?: number - /** 接口调用失败的回调函数 */ - fail?: PlayVoiceFailCallback - /** 接口调用成功的回调函数 */ - success?: PlayVoiceSuccessCallback - } - /** 插件帐号信息(仅在插件中调用时包含这一项) */ - interface Plugin { - /** 插件 appId */ - appId: string - /** 插件版本号 */ - version: string - } - interface PluginLoginOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PluginLoginCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PluginLoginFailCallback - /** 接口调用成功的回调函数 */ - success?: PluginLoginSuccessCallback - } - interface PluginLoginSuccessCallbackResult { - /** 用于换取 openpid 的凭证(有效期五分钟)。插件开发者可以用此 code 在开发者服务器后台调用 [auth.getPluginOpenPId](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/user-info/auth.getPluginOpenPId.html) 换取 openpid。 */ - code: string - errMsg: string - } - interface PreloadAssetsOption { - data: Asset[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PreloadAssetsCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PreloadAssetsFailCallback - /** 接口调用成功的回调函数 */ - success?: PreloadAssetsSuccessCallback - } - interface PreloadSkylineViewOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PreloadSkylineViewCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PreloadSkylineViewFailCallback - /** 接口调用成功的回调函数 */ - success?: PreloadSkylineViewSuccessCallback - } - interface PreloadWebviewOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PreloadWebviewCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: PreloadWebviewFailCallback - /** 接口调用成功的回调函数 */ - success?: PreloadWebviewSuccessCallback - } - interface PreviewImageOption { - /** 需要预览的图片链接列表。[2.2.3](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起支持云文件ID。 */ - urls: string[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PreviewImageCompleteCallback - /** 当前显示图片的链接 */ - current?: string - /** 接口调用失败的回调函数 */ - fail?: PreviewImageFailCallback - /** 需要基础库: `2.13.0` - * - * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ - referrerPolicy?: string - /** 需要基础库: `2.13.0` - * - * 是否显示长按菜单。 */ - showmenu?: boolean - /** 接口调用成功的回调函数 */ - success?: PreviewImageSuccessCallback - } - interface PreviewMediaOption { - /** 需要预览的资源列表 */ - sources: MediaSource[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: PreviewMediaCompleteCallback - /** 当前显示的资源序号 */ - current?: number - /** 接口调用失败的回调函数 */ - fail?: PreviewMediaFailCallback - /** 需要基础库: `2.13.0` - * - * `origin`: 发送完整的referrer; `no-referrer`: 不发送。格式固定为 `https://servicewechat.com/{appid}/{version}/page-frame.html`,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本; */ - referrerPolicy?: string - /** 需要基础库: `2.13.0` - * - * 是否显示长按菜单。 */ - showmenu?: boolean - /** 接口调用成功的回调函数 */ - success?: PreviewMediaSuccessCallback - } - /** 推广员 */ - interface PromoterResult { - /** 推广员昵称 */ - finderNickname: string - /** 推广员 id */ - promoterId: string - /** 推广员 openid */ - promoterOpenId: string - } - interface ReLaunchOption { - /** 需要跳转的应用内页面路径 (代码包路径),路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2' */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ReLaunchCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ReLaunchFailCallback - /** 接口调用成功的回调函数 */ - success?: ReLaunchSuccessCallback - } - interface ReadBLECharacteristicValueOption { - /** 蓝牙特征的 UUID */ - characteristicId: string - /** 蓝牙设备 id */ - deviceId: string - /** 蓝牙特征对应服务的 UUID */ - serviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ReadBLECharacteristicValueCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ReadBLECharacteristicValueFailCallback - /** 接口调用成功的回调函数 */ - success?: ReadBLECharacteristicValueSuccessCallback - } - interface ReadCompressedFileFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail decompress fail': 指定的 compressionAlgorithm 与文件实际压缩格式不符; - * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; - * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限; */ - errMsg: string - } - interface ReadCompressedFileOption { - /** 文件压缩类型,目前仅支持 'br'。 - * - * 可选值: - * - 'br': brotli压缩文件; */ - compressionAlgorithm: 'br' - /** 要读取的文件的路径 (本地用户文件或代码包文件) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ReadCompressedFileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ReadCompressedFileFailCallback - /** 接口调用成功的回调函数 */ - success?: ReadCompressedFileSuccessCallback - } - interface ReadCompressedFileSuccessCallbackResult { - /** 文件内容 */ - data: ArrayBuffer - errMsg: string - } - interface ReadCompressedFileSyncOption { - /** 文件压缩类型,目前仅支持 'br'。 - * - * 可选值: - * - 'br': brotli压缩文件; */ - compressionAlgorithm: 'br' - /** 要读取的文件的路径 (本地用户文件或代码包文件) */ - filePath: string - } - interface ReadFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'bad file descriptor': 无效的文件描述符; - * - 'fail permission denied': 指定的 fd 路径没有读权限; - * - 'fail the value of "offset" is out of range': 传入的 offset 不合法; - * - 'fail the value of "length" is out of range': 传入的 length 不合法; - * - 'fail sdcard not mounted': android sdcard 挂载失败; - * - 'bad file descriptor': 无效的文件描述符; */ - errMsg: string - } - interface ReadFileFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; - * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; - * - 'native buffer exceed size limit': 文件大小超出上限(100M); */ - errMsg: string - } - interface ReadFileOption { - /** 要读取的文件的路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ReadFileCompleteCallback - /** 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 - * - * 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - /** 接口调用失败的回调函数 */ - fail?: ReadFileFailCallback - /** 需要基础库: `2.10.0` - * - * 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte */ - length?: number - /** 需要基础库: `2.10.0` - * - * 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte */ - position?: number - /** 接口调用成功的回调函数 */ - success?: ReadFileSuccessCallback - } - interface ReadFileSuccessCallbackResult { - /** 文件内容 */ - data: string | ArrayBuffer - errMsg: string - } - interface ReadOption { - /** 数据写入的缓冲区,必须是 ArrayBuffer 实例 */ - arrayBuffer: ArrayBuffer - /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ReadCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ReadFailCallback - /** 要从文件中读取的字节数,默认0 */ - length?: number - /** 缓冲区中的写入偏移量,默认0 */ - offset?: number - /** 文件读取的起始位置,如不传或传 null,则会从当前文件指针的位置读取。如果 position 是正整数,则文件指针位置会保持不变并从 position 读取文件。 */ - position?: number - /** 接口调用成功的回调函数 */ - success?: ReadSuccessCallback - } - /** 文件读取结果。 通过 [FileSystemManager.readSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readSync.html) 接口返回 */ - interface ReadResult { - /** 被写入的缓存区的对象,即接口入参的 arrayBuffer */ - arrayBuffer: ArrayBuffer - /** 实际读取的字节数 */ - bytesRead: number - } - interface ReadSuccessCallbackResult { - /** 被写入的缓存区的对象,即接口入参的 arrayBuffer */ - arrayBuffer: ArrayBuffer - /** 实际读取的字节数 */ - bytesRead: number - errMsg: string - } - interface ReadSyncOption { - /** 数据写入的缓冲区,必须是 ArrayBuffer 实例 */ - arrayBuffer: ArrayBuffer - /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - /** 要从文件中读取的字节数,默认0 */ - length?: number - /** 缓冲区中的写入偏移量,默认0 */ - offset?: number - /** 文件读取的起始位置,如不传或传 null,则会从当前文件指针的位置读取。如果 position 是正整数,则文件指针位置会保持不变并从 position 读取文件。 */ - position?: number - } - interface ReadZipEntryFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; - * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface ReadZipEntryOption { - /** 要读取的压缩包内的文件列表(当传入"all" 时表示读取压缩包内所有文件) */ - entries: EntryItem[] | 'all' - /** 要读取的压缩包的路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ReadZipEntryCompleteCallback - /** 统一指定读取文件的字符编码,只在 entries 值为"all"时有效。如果 entries 值为"all"且不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 - * - * 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - /** 接口调用失败的回调函数 */ - fail?: ReadZipEntryFailCallback - /** 接口调用成功的回调函数 */ - success?: ReadZipEntrySuccessCallback - } - interface ReadZipEntrySuccessCallbackResult { - /** 文件读取结果。res.entries 是一个对象,key是文件路径,value是一个对象 FileItem ,表示该文件的读取结果。每个 FileItem 包含 data (文件内容) 和 errMsg (错误信息) 属性。 */ - entries: EntriesResult - errMsg: string - } - interface ReaddirFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory ${dirPath}': 目录不存在; - * - 'fail not a directory ${dirPath}': dirPath 不是目录; - * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface ReaddirOption { - /** 要读取的目录路径 (本地路径) */ - dirPath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ReaddirCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ReaddirFailCallback - /** 接口调用成功的回调函数 */ - success?: ReaddirSuccessCallback - } - interface ReaddirSuccessCallbackResult { - /** 指定目录下的文件名数组。 */ - files: string[] - errMsg: string - } - interface RecorderManagerStartOption { - /** 需要基础库: `2.1.0` - * - * 指定录音的音频输入源,可通过 [wx.getAvailableAudioSources()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.getAvailableAudioSources.html) 获取当前可用的音频源 - * - * 可选值: - * - 'auto': 自动设置,默认使用手机麦克风,插上耳麦后自动切换使用耳机麦克风,所有平台适用; - * - 'buildInMic': 手机麦克风,仅限 iOS; - * - 'headsetMic': 有线耳机麦克风,仅限 iOS; - * - 'mic': 麦克风(没插耳麦时是手机麦克风,插耳麦时是耳机麦克风),仅限 Android; - * - 'camcorder': 同 mic,适用于录制音视频内容,仅限 Android; - * - 'voice_communication': 同 mic,适用于实时沟通,仅限 Android; - * - 'voice_recognition': 同 mic,适用于语音识别,仅限 Android; */ - audioSource?: - | 'auto' - | 'buildInMic' - | 'headsetMic' - | 'mic' - | 'camcorder' - | 'voice_communication' - | 'voice_recognition' - /** 录音的时长,单位 ms,最大值 600000(10 分钟) */ - duration?: number - /** 编码码率,有效值见下表格 */ - encodeBitRate?: number - /** 音频格式 - * - * 可选值: - * - 'mp3': mp3 格式; - * - 'aac': aac 格式; - * - 'wav': wav 格式; - * - 'PCM': pcm 格式; */ - format?: 'mp3' | 'aac' | 'wav' | 'PCM' - /** 指定帧大小,单位 KB。传入 frameSize 后,每录制指定帧大小的内容后,会回调录制的文件内容,不指定则不会回调。暂仅支持 mp3、pcm 格式。 */ - frameSize?: number - /** 录音通道数 - * - * 可选值: - * - 1: 1 个通道; - * - 2: 2 个通道; */ - numberOfChannels?: 1 | 2 - /** 采样率(pc不支持) - * - * 可选值: - * - 8000: 8000 采样率; - * - 11025: 11025 采样率; - * - 12000: 12000 采样率; - * - 16000: 16000 采样率; - * - 22050: 22050 采样率; - * - 24000: 24000 采样率; - * - 32000: 32000 采样率; - * - 44100: 44100 采样率; - * - 48000: 48000 采样率; */ - sampleRate?: - | 8000 - | 11025 - | 12000 - | 16000 - | 22050 - | 24000 - | 32000 - | 44100 - | 48000 - } - interface RedirectToOption { - /** 需要跳转的应用内非 tabBar 的页面的路径 (代码包路径), 路径后可以带参数。参数与路径之间使用 `?` 分隔,参数键与参数值用 `=` 相连,不同参数用 `&` 分隔;如 'path?key=value&key2=value2' */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RedirectToCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RedirectToFailCallback - /** 接口调用成功的回调函数 */ - success?: RedirectToSuccessCallback - } - interface RedoOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RedoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RedoFailCallback - /** 接口调用成功的回调函数 */ - success?: RedoSuccessCallback - } - /** 来源信息。从另一个小程序、公众号或 App 进入小程序时返回。否则返回 `{}`。(参见后文注意) */ - interface ReferrerInfo { - /** 来源小程序、公众号或 App 的 appId */ - appId: string - /** 来源小程序传过来的数据,scene=1037或1038时支持 */ - extraData: IAnyObject - } - /** 参照区域的边界 */ - interface RelativeRectResult { - /** 下边界 */ - bottom: number - /** 左边界 */ - left: number - /** 右边界 */ - right: number - /** 上边界 */ - top: number - } - /** 发送端地址信息 */ - interface RemoteInfo { - /** 发送消息的 socket 的地址 */ - address: string - /** 使用的协议族,为 IPv4 或者 IPv6 */ - family: string - /** 端口号 */ - port: number - /** message 的大小,单位:字节 */ - size: number - } - interface RemoveArcOption { - /** 圆弧 id */ - id: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveArcCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveArcFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveArcSuccessCallback - } - interface RemoveCustomLayerOption { - /** 个性化图层id */ - layerId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveCustomLayerCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveCustomLayerFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveCustomLayerSuccessCallback - } - interface RemoveFormatOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveFormatCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveFormatFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveFormatSuccessCallback - } - interface RemoveGroundOverlayOption { - /** 图片图层 id */ - id: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveGroundOverlayCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveGroundOverlayFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveGroundOverlaySuccessCallback - } - interface RemoveMarkersOption { - /** marker 的 id 集合。 */ - markerIds: any[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveMarkersCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveMarkersFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveMarkersSuccessCallback - } - interface RemoveSavedFileFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail file not exist': 指定的 tempFilePath 找不到文件; */ - errMsg: string - } - interface RemoveServiceOption { - /** service 的 UUID */ - serviceId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveServiceCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveServiceFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveServiceSuccessCallback - } - interface RemoveStorageOption { - /** 本地缓存中指定的 key */ - key: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveStorageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveStorageFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveStorageSuccessCallback - } - interface RemoveTabBarBadgeOption { - /** tabBar 的哪一项,从左边算起 */ - index: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveTabBarBadgeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveTabBarBadgeFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveTabBarBadgeSuccessCallback - } - interface RemoveVisualLayerOption { - /** 可视化图层id */ - layerId: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveVisualLayerCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RemoveVisualLayerFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveVisualLayerSuccessCallback - } - interface RenameFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail permission denied, rename ${oldPath} -> ${newPath}': 指定源文件或目标文件没有写权限; - * - 'fail no such file or directory, rename ${oldPath} -> ${newPath}': 源文件不存在,或目标文件路径的上层目录不存在; */ - errMsg: string - } - interface RenameOption { - /** 新文件路径,支持本地路径 */ - newPath: string - /** 源文件路径,支持本地路径 */ - oldPath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RenameCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RenameFailCallback - /** 接口调用成功的回调函数 */ - success?: RenameSuccessCallback - } - /** Canvas 绘图上下文。 - * - * **** - * - * - 通过 Canvas.getContext('2d') 接口可以获取 CanvasRenderingContext2D 对象,实现了 [HTML Canvas 2D Context](https://www.w3.org/TR/2dcontext/) 定义的属性、方法。 - * - 通过 Canvas.getContext('webgl') 或 OffscreenCanvas.getContext('webgl') 接口可以获取 WebGLRenderingContext 对象,实现了 [WebGL 1.0](https://www.khronos.org/registry/webgl/specs/latest/1.0/) 定义的所有属性、方法、常量。 - * - CanvasRenderingContext2D 的 drawImage 方法 2.10.0 起支持传入通过 [SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) 获取的 video 对象 - * - * **示例代码** - * - * video 画到 2D Canvas 示例 - * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/tJTak7mU7sfX) */ - interface RenderingContext {} - interface RequestOption< - T extends string | IAnyObject | ArrayBuffer = - | string - | IAnyObject - | ArrayBuffer - > { - /** 开发者服务器接口地址 */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RequestCompleteCallback - /** 请求的参数 */ - data?: string | IAnyObject | ArrayBuffer - /** 返回的数据格式 - * - * 可选值: - * - 'json': 返回的数据为 JSON,返回后会对返回的数据进行一次 JSON.parse; - * - '其他': 不对返回的内容进行 JSON.parse; */ - dataType?: 'json' | '其他' - /** 需要基础库: `2.10.4` - * - * 开启 cache */ - enableCache?: boolean - /** 需要基础库: `2.20.2` - * - * 开启 transfer-encoding chunked。 */ - enableChunked?: boolean - /** 需要基础库: `2.10.4` - * - * 开启 http2 */ - enableHttp2?: boolean - /** 需要基础库: `2.19.1` - * - * 是否开启 HttpDNS 服务。如开启,需要同时填入 httpDNSServiceId 。 HttpDNS 用法详见 [移动解析HttpDNS](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/HTTPDNS.html) */ - enableHttpDNS?: boolean - /** 需要基础库: `2.10.4` - * - * 开启 quic */ - enableQuic?: boolean - /** 接口调用失败的回调函数 */ - fail?: RequestFailCallback - /** 需要基础库: `2.21.0` - * - * wifi下使用移动网络发送请求 */ - forceCellularNetwork?: boolean - /** 设置请求的 header,header 中不能设置 Referer。 - * - * `content-type` 默认为 `application/json` */ - header?: IAnyObject - /** 需要基础库: `2.19.1` - * - * HttpDNS 服务商 Id。 HttpDNS 用法详见 [移动解析HttpDNS](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/HTTPDNS.html) */ - httpDNSServiceId?: string - /** HTTP 请求方法 - * - * 可选值: - * - 'OPTIONS': HTTP 请求 OPTIONS; - * - 'GET': HTTP 请求 GET; - * - 'HEAD': HTTP 请求 HEAD; - * - 'POST': HTTP 请求 POST; - * - 'PUT': HTTP 请求 PUT; - * - 'DELETE': HTTP 请求 DELETE; - * - 'TRACE': HTTP 请求 TRACE; - * - 'CONNECT': HTTP 请求 CONNECT; */ - method?: - | 'OPTIONS' - | 'GET' - | 'HEAD' - | 'POST' - | 'PUT' - | 'DELETE' - | 'TRACE' - | 'CONNECT' - /** 需要基础库: `1.7.0` - * - * 响应的数据类型 - * - * 可选值: - * - 'text': 响应的数据为文本; - * - 'arraybuffer': 响应的数据为 ArrayBuffer; */ - responseType?: 'text' | 'arraybuffer' - /** 接口调用成功的回调函数 */ - success?: RequestSuccessCallback - /** 需要基础库: `2.10.0` - * - * 超时时间,单位为毫秒。默认值为 60000 */ - timeout?: number - } - interface RequestOrderPaymentOption { - /** 随机字符串,长度为32个字符以下 */ - nonceStr: string - /** 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*** */ - package: string - /** 签名,具体见微信支付文档 */ - paySign: string - /** 时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间 */ - timeStamp: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RequestOrderPaymentCompleteCallback - /** 外部APP用户ID */ - extUserUin?: string - /** 接口调用失败的回调函数 */ - fail?: RequestOrderPaymentFailCallback - /** 订单信息,仅在需要校验的场景下需要传递,具体见[接口说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/requestOrderPayment) */ - orderInfo?: IAnyObject - /** 签名算法,应与后台下单时的值一致 - * - * 可选值: - * - 'MD5': 仅在 v2 版本接口适用; - * - 'HMAC-SHA256': 仅在 v2 版本接口适用; - * - 'RSA': 仅在 v3 版本接口适用; */ - signType?: 'MD5' | 'HMAC-SHA256' | 'RSA' - /** 接口调用成功的回调函数 */ - success?: RequestOrderPaymentSuccessCallback - } - interface RequestPaymentOption { - /** 随机字符串,长度为32个字符以下 */ - nonceStr: string - /** 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*** */ - package: string - /** 签名,具体见微信支付文档 */ - paySign: string - /** 时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间 */ - timeStamp: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RequestPaymentCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RequestPaymentFailCallback - /** 签名算法,应与后台下单时的值一致 - * - * 可选值: - * - 'MD5': 仅在 v2 版本接口适用; - * - 'HMAC-SHA256': 仅在 v2 版本接口适用; - * - 'RSA': 仅在 v3 版本接口适用; */ - signType?: 'MD5' | 'HMAC-SHA256' | 'RSA' - /** 接口调用成功的回调函数 */ - success?: RequestPaymentSuccessCallback - } - interface RequestPictureInPictureOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RequestPictureInPictureCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RequestPictureInPictureFailCallback - /** 接口调用成功的回调函数 */ - success?: RequestPictureInPictureSuccessCallback - } - interface RequestPluginPaymentOption { - /** 需要显示在页面中的金额,单位为分 */ - fee: number - /** 任意数据,传递给功能页中的响应函数 */ - paymentArgs: IAnyObject - /** 插件版本 - * - * 可选值: - * - 'develop': 开发版; - * - 'trial': 体验版; - * - 'release': 正式版; */ - version: 'develop' | 'trial' | 'release' - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RequestPluginPaymentCompleteCallback - /** 需要显示在页面中的货币符号的代码 */ - currencyType?: string - /** 接口调用失败的回调函数 */ - fail?: RequestPluginPaymentFailCallback - /** 接口调用成功的回调函数 */ - success?: RequestPluginPaymentSuccessCallback - } - /** 需要基础库: `2.10.4` - * - * 网络请求过程中一些调试信息,[查看详细说明](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/network.html) */ - interface RequestProfile { - /** SSL建立完成的时间,如果不是安全连接,则值为 0 */ - SSLconnectionEnd: number - /** SSL建立连接的时间,如果不是安全连接,则值为 0 */ - SSLconnectionStart: number - /** HTTP(TCP) 完成建立连接的时间(完成握手),如果是持久连接,则与 fetchStart 值相等。注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接完成的时间。注意这里握手结束,包括安全连接建立完成、SOCKS 授权通过 */ - connectEnd: number - /** HTTP(TCP) 开始建立连接的时间,如果是持久连接,则与 fetchStart 值相等。注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接开始的时间 */ - connectStart: number - /** DNS 域名查询完成的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等 */ - domainLookupEnd: number - /** DNS 域名查询开始的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等 */ - domainLookupStart: number - /** 评估当前网络下载的kbps */ - downstreamThroughputKbpsEstimate: number - /** 评估的网络状态 unknown, offline, slow 2g, 2g, 3g, 4g, last/0, 1, 2, 3, 4, 5, 6 */ - estimate_nettype: number - /** 组件准备好使用 HTTP 请求抓取资源的时间,这发生在检查本地缓存之前 */ - fetchStart: number - /** 协议层根据多个请求评估当前网络的 rtt(仅供参考) */ - httpRttEstimate: number - /** 当前请求的IP */ - peerIP: string - /** 当前请求的端口 */ - port: number - /** 使用协议类型,有效值:http1.1, h2, quic, unknown */ - protocol: string - /** 收到字节数 */ - receivedBytedCount: number - /** 最后一个 HTTP 重定向完成时的时间。有跳转且是同域名内部的重定向才算,否则值为 0 */ - redirectEnd: number - /** 第一个 HTTP 重定向发生时的时间。有跳转且是同域名内的重定向才算,否则值为 0 */ - redirectStart: number - /** HTTP请求读取真实文档结束的时间 */ - requestEnd: number - /** HTTP请求读取真实文档开始的时间(完成建立连接),包括从本地读取缓存。连接错误重连时,这里显示的也是新建立连接的时间 */ - requestStart: number - /** HTTP 响应全部接收完成的时间(获取到最后一个字节),包括从本地读取缓存 */ - responseEnd: number - /** HTTP 开始接收响应的时间(获取到第一个字节),包括从本地读取缓存 */ - responseStart: number - /** 当次请求连接过程中实时 rtt */ - rtt: number - /** 发送的字节数 */ - sendBytesCount: number - /** 是否复用连接 */ - socketReused: boolean - /** 当前网络的实际下载kbps */ - throughputKbps: number - /** 传输层根据多个请求评估的当前网络的 rtt(仅供参考) */ - transportRttEstimate: number - } - interface RequestSubscribeDeviceMessageFailCallbackResult { - /** 接口调用失败错误码,有可能为空 */ - errCode: number - /** 接口调用失败错误信息 */ - errMsg: string - } - interface RequestSubscribeDeviceMessageOption { - /** 设备型号 id 。通过微信公众平台注册设备获得。 */ - modelId: string - /** 设备唯一序列号。由厂商分配,长度不能超过128字节。字符只接受数字,大小写字母,下划线(_)和连字符(-)。 */ - sn: string - /** 设备票据,5分钟内有效。 */ - snTicket: string - /** 需要订阅的消息模板的 id 的集合,一次调用最多可订阅3条消息 */ - tmplIds: any[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RequestSubscribeDeviceMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RequestSubscribeDeviceMessageFailCallback - /** 接口调用成功的回调函数 */ - success?: RequestSubscribeDeviceMessageSuccessCallback - } - interface RequestSubscribeDeviceMessageSuccessCallbackResult { - /** [TEMPLATE_ID]是动态的键,即模板id,值包括'accept'、'reject'、'ban'、'filter'、'acceptWithAudio'。'accept'表示用户同意订阅该条id对应的模板消息,'reject'表示用户拒绝订阅该条id对应的模板消息,'ban'表示已被后台封禁,'acceptWithAudio' 表示用户接收订阅消息并开启了语音提醒,'filter'表示该模板因为模板标题同名被后台过滤。例如 { errMsg: "requestSubscribeDeviceMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息 */ - [TEMPLATE_ID: string]: string - /** 接口调用成功时errMsg值为'requestSubscribeDeviceMessage:ok' */ - errMsg: string - } - interface RequestSubscribeMessageFailCallbackResult { - /** 接口调用失败错误码 */ - errCode: number - /** 接口调用失败错误信息 */ - errMsg: string - } - interface RequestSubscribeMessageOption { - /** 需要订阅的消息模板的id的集合,一次调用最多可订阅3条消息(注意:iOS客户端7.0.6版本、Android客户端7.0.7版本之后的一次性订阅/长期订阅才支持多个模板消息,iOS客户端7.0.5版本、Android客户端7.0.6版本之前的一次订阅只支持一个模板消息)消息模板id在[微信公众平台(mp.weixin.qq.com)-功能-订阅消息]中配置。每个tmplId对应的模板标题需要不相同,否则会被过滤。 */ - tmplIds: any[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RequestSubscribeMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RequestSubscribeMessageFailCallback - /** 接口调用成功的回调函数 */ - success?: RequestSubscribeMessageSuccessCallback - } - interface RequestSubscribeMessageSuccessCallbackResult { - /** [TEMPLATE_ID]是动态的键,即模板id,值包括'accept'、'reject'、'ban'、'filter'。'accept'表示用户同意订阅该条id对应的模板消息,'reject'表示用户拒绝订阅该条id对应的模板消息,'ban'表示已被后台封禁,'filter'表示该模板因为模板标题同名被后台过滤。例如 { errMsg: "requestSubscribeMessage:ok", zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: "accept"} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息 */ - [TEMPLATE_ID: string]: string - /** 接口调用成功时errMsg值为'requestSubscribeMessage:ok' */ - errMsg: string - } - interface RequestSuccessCallbackResult< - T extends string | IAnyObject | ArrayBuffer = - | string - | IAnyObject - | ArrayBuffer - > { - /** 需要基础库: `2.10.0` - * - * 开发者服务器返回的 cookies,格式为字符串数组 */ - cookies: string[] - /** 开发者服务器返回的数据 */ - data: T - /** 需要基础库: `1.2.0` - * - * 开发者服务器返回的 HTTP Response Header */ - header: IAnyObject - /** 需要基础库: `2.10.4` - * - * 网络请求过程中一些调试信息,[查看详细说明](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/network.html) */ - profile: RequestProfile - /** 开发者服务器返回的 HTTP 状态码 */ - statusCode: number - errMsg: string - } - interface ReserveChannelsLiveOption { - /** 预告 id,通过 getChannelsLiveNoticeInfo 接口获取 */ - noticeId: string - } - /** 开发者服务器每次返回新chunk时的Response */ - interface Result { - /** 返回的chunk buffer */ - data: ArrayBuffer - } - interface ResumeBGMOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ResumeBGMCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ResumeBGMFailCallback - /** 接口调用成功的回调函数 */ - success?: ResumeBGMSuccessCallback - } - interface ResumeOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ResumeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ResumeFailCallback - /** 接口调用成功的回调函数 */ - success?: ResumeSuccessCallback - } - interface RewardedVideoAdOnCloseListenerResult { - /** 需要基础库: `2.1.0` - * - * 视频是否是在用户完整观看的情况下被关闭的 */ - isEnded: boolean - } - interface RewardedVideoAdOnErrorListenerResult { - /** 需要基础库: `2.2.2` - * - * 错误码 - * - * 可选值: - * - 1000: 后端接口调用失败; - * - 1001: 参数错误; - * - 1002: 广告单元无效; - * - 1003: 内部错误; - * - 1004: 无合适的广告; - * - 1005: 广告组件审核中; - * - 1006: 广告组件被驳回; - * - 1007: 广告组件被封禁; - * - 1008: 广告单元已关闭; */ - errCode: 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 - /** 错误信息 */ - errMsg: string - } - interface RmdirFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory ${dirPath}': 目录不存在; - * - 'fail directory not empty': 目录不为空; - * - 'fail permission denied, open ${dirPath}': 指定的 dirPath 路径没有写权限; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface RmdirOption { - /** 要删除的目录路径 (本地路径) */ - dirPath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RmdirCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: RmdirFailCallback - /** 需要基础库: `2.3.0` - * - * 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。 */ - recursive?: boolean - /** 接口调用成功的回调函数 */ - success?: RmdirSuccessCallback - } - interface SafeArea { - /** 安全区域右下角纵坐标 */ - bottom: number - /** 安全区域的高度,单位逻辑像素 */ - height: number - /** 安全区域左上角横坐标 */ - left: number - /** 安全区域右下角横坐标 */ - right: number - /** 安全区域左上角纵坐标 */ - top: number - /** 安全区域的宽度,单位逻辑像素 */ - width: number - } - interface SaveFileFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail tempFilePath file not exist': 指定的 tempFilePath 找不到文件; - * - 'fail permission denied, open "${filePath}"': 指定的 filePath 路径没有写权限; - * - 'fail no such file or directory "${dirPath}"': 上级目录不存在; - * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface SaveFileSuccessCallbackResult { - /** 存储后的文件路径 (本地路径) */ - savedFilePath: string - errMsg: string - } - interface SaveFileToDiskOption { - /** 待保存文件路径 */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SaveFileToDiskCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SaveFileToDiskFailCallback - /** 接口调用成功的回调函数 */ - success?: SaveFileToDiskSuccessCallback - } - interface SaveImageToPhotosAlbumOption { - /** 图片文件路径,可以是临时文件路径或永久文件路径 (本地路径) ,不支持网络路径 */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SaveImageToPhotosAlbumCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SaveImageToPhotosAlbumFailCallback - /** 接口调用成功的回调函数 */ - success?: SaveImageToPhotosAlbumSuccessCallback - } - interface SaveVideoToPhotosAlbumOption { - /** 视频文件路径,可以是临时文件路径也可以是永久文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SaveVideoToPhotosAlbumCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SaveVideoToPhotosAlbumFailCallback - /** 接口调用成功的回调函数 */ - success?: SaveVideoToPhotosAlbumSuccessCallback - } - interface ScanCodeOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ScanCodeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ScanCodeFailCallback - /** 需要基础库: `1.2.0` - * - * 是否只能从相机扫码,不允许从相册选择图片 */ - onlyFromCamera?: boolean - /** 需要基础库: `1.7.0` - * - * 扫码类型 - * - * 可选值: - * - 'barCode': 一维码; - * - 'qrCode': 二维码; - * - 'datamatrix': Data Matrix 码; - * - 'pdf417': PDF417 条码; */ - scanType?: Array<'barCode' | 'qrCode' | 'datamatrix' | 'pdf417'> - /** 接口调用成功的回调函数 */ - success?: ScanCodeSuccessCallback - } - interface ScanCodeSuccessCallbackResult { - /** 所扫码的字符集 */ - charSet: string - /** 当所扫的码为当前小程序二维码时,会返回此字段,内容为二维码携带的 path */ - path: string - /** 原始数据,base64编码 */ - rawData: string - /** 所扫码的内容 */ - result: string - /** 所扫码的类型 - * - * 可选值: - * - 'QR_CODE': 二维码; - * - 'AZTEC': 一维码; - * - 'CODABAR': 一维码; - * - 'CODE_39': 一维码; - * - 'CODE_93': 一维码; - * - 'CODE_128': 一维码; - * - 'DATA_MATRIX': 二维码; - * - 'EAN_8': 一维码; - * - 'EAN_13': 一维码; - * - 'ITF': 一维码; - * - 'MAXICODE': 一维码; - * - 'PDF_417': 二维码; - * - 'RSS_14': 一维码; - * - 'RSS_EXPANDED': 一维码; - * - 'UPC_A': 一维码; - * - 'UPC_E': 一维码; - * - 'UPC_EAN_EXTENSION': 一维码; - * - 'WX_CODE': 二维码; - * - 'CODE_25': 一维码; */ - scanType: - | 'QR_CODE' - | 'AZTEC' - | 'CODABAR' - | 'CODE_39' - | 'CODE_93' - | 'CODE_128' - | 'DATA_MATRIX' - | 'EAN_8' - | 'EAN_13' - | 'ITF' - | 'MAXICODE' - | 'PDF_417' - | 'RSS_14' - | 'RSS_EXPANDED' - | 'UPC_A' - | 'UPC_E' - | 'UPC_EAN_EXTENSION' - | 'WX_CODE' - | 'CODE_25' - errMsg: string - } - interface ScrollOffsetCallbackResult { - /** 节点的 dataset */ - dataset: IAnyObject - /** 节点的 ID */ - id: string - /** 节点的水平滚动位置 */ - scrollLeft: number - /** 节点的竖直滚动位置 */ - scrollTop: number - } - interface ScrollToOption { - /** 是否启用滚动动画 */ - animated?: boolean - /** 滚动动画时长 */ - duration?: number - /** 左边界距离 */ - left?: number - /** 顶部距离 */ - top?: number - /** 初始速度 */ - velocity?: number - } - /** 需要基础库: `2.14.4` -* -* 增强 ScrollView 实例,可通过 [wx.createSelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) 的 [NodesRef.node](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.node.html) 方法获取。 仅在 scroll-view 组件开启 enhanced 属性后生效。 -* -* **示例代码** -* -* ```js -wx.createSelectorQuery() - .select('#scrollview') - .node() - .exec((res) => { - const scrollView = res[0].node; - scrollView.scrollEnabled = false; - }) -``` */ - interface ScrollViewContext { - /** 设置滚动边界弹性 (仅在 iOS 下生效) */ - bounces: boolean - /** 取消滚动惯性 (仅在 iOS 下生效) */ - decelerationDisabled: boolean - /** 设置滚动减速速率 */ - fastDeceleration: boolean - /** 分页滑动开关 */ - pagingEnabled: boolean - /** 滚动开关 */ - scrollEnabled: boolean - /** 设置是否显示滚动条 */ - showScrollbar: boolean - } - interface SeekBackgroundAudioOption { - /** 音乐位置,单位:秒 */ - position: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SeekBackgroundAudioCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SeekBackgroundAudioFailCallback - /** 接口调用成功的回调函数 */ - success?: SeekBackgroundAudioSuccessCallback - } - interface SendHCEMessageOption { - /** 二进制数据 */ - data: ArrayBuffer - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SendHCEMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SendHCEMessageFailCallback - /** 接口调用成功的回调函数 */ - success?: SendHCEMessageSuccessCallback - } - interface SendMessageOption { - /** SEI消息 */ - msg: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SendMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SendMessageFailCallback - /** 接口调用成功的回调函数 */ - success?: SendMessageSuccessCallback - } - interface SendSmsOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SendSmsCompleteCallback - /** 预填到发送短信面板的内容 */ - content?: string - /** 接口调用失败的回调函数 */ - fail?: SendSmsFailCallback - /** 预填到发送短信面板的手机号 */ - phoneNumber?: string - /** 接口调用成功的回调函数 */ - success?: SendSmsSuccessCallback - } - interface SendSocketMessageOption { - /** 需要发送的内容 */ - data: string | ArrayBuffer - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SendSocketMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SendSocketMessageFailCallback - /** 接口调用成功的回调函数 */ - success?: SendSocketMessageSuccessCallback - } - interface SetBGMVolumeOption { - /** 音量大小,范围是 0-1 */ - volume: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetBGMVolumeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetBGMVolumeFailCallback - /** 接口调用成功的回调函数 */ - success?: SetBGMVolumeSuccessCallback - } - interface SetBLEMTUFailCallbackResult { - /** 最终协商的 MTU 值。如果协商失败则无此参数。安卓客户端 8.0.9 开始支持。 */ - mtu: number - } - interface SetBLEMTUOption { - /** 蓝牙设备 id */ - deviceId: string - /** 最大传输单元。设置范围为 (22,512) 区间内,单位 bytes */ - mtu: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetBLEMTUCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetBLEMTUFailCallback - /** 接口调用成功的回调函数 */ - success?: SetBLEMTUSuccessCallback - } - interface SetBLEMTUSuccessCallbackResult { - /** 最终协商的 MTU 值,与传入参数一致。安卓客户端 8.0.9 开始支持。 */ - mtu: number - errMsg: string - } - interface SetBackgroundColorOption { - /** 窗口的背景色,必须为十六进制颜色值 */ - backgroundColor?: string - /** 底部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持 */ - backgroundColorBottom?: string - /** 顶部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持 */ - backgroundColorTop?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetBackgroundColorCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetBackgroundColorFailCallback - /** 接口调用成功的回调函数 */ - success?: SetBackgroundColorSuccessCallback - } - interface SetBackgroundFetchTokenOption { - /** 自定义的登录态 */ - token: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetBackgroundFetchTokenCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetBackgroundFetchTokenFailCallback - /** 接口调用成功的回调函数 */ - success?: SetBackgroundFetchTokenSuccessCallback - } - interface SetBackgroundTextStyleOption { - /** 下拉背景字体、loading 图的样式。 - * - * 可选值: - * - 'dark': dark 样式; - * - 'light': light 样式; */ - textStyle: 'dark' | 'light' - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetBackgroundTextStyleCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetBackgroundTextStyleFailCallback - /** 接口调用成功的回调函数 */ - success?: SetBackgroundTextStyleSuccessCallback - } - interface SetBoundaryOption { - /** 东北角经纬度 */ - northeast: MapPostion - /** 西南角经纬度 */ - southwest: MapPostion - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetBoundaryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetBoundaryFailCallback - /** 接口调用成功的回调函数 */ - success?: SetBoundarySuccessCallback - } - interface SetCenterOffsetOption { - /** 偏移量,两位数组 */ - offset: number[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetCenterOffsetCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetCenterOffsetFailCallback - /** 接口调用成功的回调函数 */ - success?: SetCenterOffsetSuccessCallback - } - interface SetClipboardDataOption { - /** 剪贴板的内容 */ - data: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetClipboardDataCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetClipboardDataFailCallback - /** 接口调用成功的回调函数 */ - success?: SetClipboardDataSuccessCallback - } - interface SetContentsOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetContentsCompleteCallback - /** 表示内容的delta对象 */ - delta?: IAnyObject - /** 接口调用失败的回调函数 */ - fail?: SetContentsFailCallback - /** 带标签的HTML内容 */ - html?: string - /** 接口调用成功的回调函数 */ - success?: SetContentsSuccessCallback - } - interface SetEnable1v1ChatOption { - /** 是否开启 */ - enable: boolean - /** 窗口背景色(音频通话背景以及小窗模式背景) - * - * 可选值: - * - 0: #262930; - * - 1: #FA5151; - * - 2: #FA9D3B; - * - 3: #3D7257; - * - 4: #1485EE; - * - 5: #6467F0; */ - backgroundType?: 0 | 1 | 2 | 3 | 4 | 5 - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetEnable1v1ChatCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetEnable1v1ChatFailCallback - /** 小窗样式 */ - minWindowType?: number - /** 接口调用成功的回调函数 */ - success?: SetEnable1v1ChatSuccessCallback - } - interface SetEnableDebugOption { - /** 是否打开调试 */ - enableDebug: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetEnableDebugCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetEnableDebugFailCallback - /** 接口调用成功的回调函数 */ - success?: SetEnableDebugSuccessCallback - } - interface SetInnerAudioOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetInnerAudioOptionCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetInnerAudioOptionFailCallback - /** 是否与其他音频混播,设置为 true 之后,不会终止其他应用或微信内的音乐 */ - mixWithOther?: boolean - /** (仅在 iOS 生效)是否遵循静音开关,设置为 false 之后,即使是在静音模式下,也能播放声音 */ - obeyMuteSwitch?: boolean - /** true 代表用扬声器播放,false 代表听筒播放,默认值为 true。 */ - speakerOn?: boolean - /** 接口调用成功的回调函数 */ - success?: SetInnerAudioOptionSuccessCallback - } - interface SetKeepScreenOnOption { - /** 是否保持屏幕常亮 */ - keepScreenOn: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetKeepScreenOnCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetKeepScreenOnFailCallback - /** 接口调用成功的回调函数 */ - success?: SetKeepScreenOnSuccessCallback - } - interface SetLocMarkerIconOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetLocMarkerIconCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetLocMarkerIconFailCallback - /** 图标路径,支持网络路径、本地路径、代码包路径 */ - iconPath?: string - /** 接口调用成功的回调函数 */ - success?: SetLocMarkerIconSuccessCallback - } - interface SetMICVolumeOption { - /** 音量大小,范围是 0.0-1.0 */ - volume: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetMICVolumeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetMICVolumeFailCallback - /** 接口调用成功的回调函数 */ - success?: SetMICVolumeSuccessCallback - } - interface SetNavigationBarColorOption { - /** 背景颜色值,有效值为十六进制颜色 */ - backgroundColor: string - /** 前景颜色值,包括按钮、标题、状态栏的颜色,仅支持 #ffffff 和 #000000 */ - frontColor: string - /** 动画效果 */ - animation?: AnimationOption - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetNavigationBarColorCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetNavigationBarColorFailCallback - /** 接口调用成功的回调函数 */ - success?: SetNavigationBarColorSuccessCallback - } - interface SetNavigationBarTitleOption { - /** 页面标题 */ - title: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetNavigationBarTitleCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetNavigationBarTitleFailCallback - /** 接口调用成功的回调函数 */ - success?: SetNavigationBarTitleSuccessCallback - } - interface SetScreenBrightnessOption { - /** 屏幕亮度值,范围 0 ~ 1,0 最暗,1 最亮。在安卓端支持传入特殊值 -1,表示屏幕亮度跟随系统变化 */ - value: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetScreenBrightnessCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetScreenBrightnessFailCallback - /** 接口调用成功的回调函数 */ - success?: SetScreenBrightnessSuccessCallback - } - interface SetStorageOption { - /** 需要存储的内容。只支持原生类型、Date、及能够通过`JSON.stringify`序列化的对象。 */ - data: T - /** 本地缓存中指定的 key */ - key: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetStorageCompleteCallback - /** 需要基础库: `2.21.3` - * - * 是否开启加密存储。只有异步的 setStorage 接口支持开启加密存储。开启后,将会对 data 使用 AES128 加密,接口回调耗时将会增加。若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true。此外,由于加密后的数据会比原始数据膨胀1.4倍,因此开启 encrypt 的情况下,单个 key 允许存储的最大数据长度为 0.7MB,所有数据存储上限为 7.1MB */ - encrypt?: boolean - /** 接口调用失败的回调函数 */ - fail?: SetStorageFailCallback - /** 接口调用成功的回调函数 */ - success?: SetStorageSuccessCallback - } - interface SetTabBarBadgeOption { - /** tabBar 的哪一项,从左边算起 */ - index: number - /** 显示的文本,超过 4 个字符则显示成 ... */ - text: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetTabBarBadgeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetTabBarBadgeFailCallback - /** 接口调用成功的回调函数 */ - success?: SetTabBarBadgeSuccessCallback - } - interface SetTabBarItemOption { - /** tabBar 的哪一项,从左边算起 */ - index: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetTabBarItemCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetTabBarItemFailCallback - /** 图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效 */ - iconPath?: string - /** 选中时的图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px ,当 postion 为 top 时,此参数无效 */ - selectedIconPath?: string - /** 接口调用成功的回调函数 */ - success?: SetTabBarItemSuccessCallback - /** tab 上的按钮文字 */ - text?: string - } - interface SetTabBarStyleOption { - /** tab 的背景色,HexColor */ - backgroundColor?: string - /** tabBar上边框的颜色, 仅支持 black/white */ - borderStyle?: string - /** tab 上的文字默认颜色,HexColor */ - color?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetTabBarStyleCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetTabBarStyleFailCallback - /** tab 上的文字选中时的颜色,HexColor */ - selectedColor?: string - /** 接口调用成功的回调函数 */ - success?: SetTabBarStyleSuccessCallback - } - interface SetTimeoutOption { - /** 设置超时时间 (ms) */ - timeout: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetTimeoutCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetTimeoutFailCallback - /** 接口调用成功的回调函数 */ - success?: SetTimeoutSuccessCallback - } - interface SetTopBarTextOption { - /** 置顶栏文字 */ - text: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetTopBarTextCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetTopBarTextFailCallback - /** 接口调用成功的回调函数 */ - success?: SetTopBarTextSuccessCallback - } - interface SetVisualEffectOnCaptureOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetVisualEffectOnCaptureCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetVisualEffectOnCaptureFailCallback - /** 接口调用成功的回调函数 */ - success?: SetVisualEffectOnCaptureSuccessCallback - /** 截屏/录屏时的表现,仅支持 none / hidden,传入 hidden 则表示在截屏/录屏时隐藏屏幕 */ - visualEffect?: string - } - interface SetWifiListOption { - /** 提供预设的 Wi-Fi 信息列表 */ - wifiList: WifiData[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetWifiListCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetWifiListFailCallback - /** 接口调用成功的回调函数 */ - success?: SetWifiListSuccessCallback - } - interface SetWindowSizeOption { - /** 窗口高度,以像素为单位 */ - height: number - /** 窗口宽度,以像素为单位 */ - width: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetWindowSizeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetWindowSizeFailCallback - /** 接口调用成功的回调函数 */ - success?: SetWindowSizeSuccessCallback - } - interface SetZoomOption { - /** 缩放级别,范围[1, maxZoom]。zoom 可取小数,精确到小数后一位。maxZoom 可在 bindinitdone 返回值中获取。 */ - zoom: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SetZoomCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SetZoomFailCallback - /** 接口调用成功的回调函数 */ - success?: SetZoomSuccessCallback - } - interface SetZoomSuccessCallbackResult { - /** 实际设置的缩放级别。由于系统限制,某些机型可能无法设置成指定值,会改用最接近的可设值。 */ - zoom: number - errMsg: string - } - interface ShareFileMessageOption { - /** 要分享的文件地址,必须为本地路径或临时路径 */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShareFileMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShareFileMessageFailCallback - /** 自定义文件名,若留空则使用filePath中的文件名 */ - fileName?: string - /** 接口调用成功的回调函数 */ - success?: ShareFileMessageSuccessCallback - } - interface ShareToWeRunOption { - /** 运动数据列表 */ - recordList: WxaSportRecord[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShareToWeRunCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShareToWeRunFailCallback - /** 接口调用成功的回调函数 */ - success?: ShareToWeRunSuccessCallback - } - interface ShareVideoMessageOption { - /** 要分享的视频地址,必须为本地路径或临时路径 */ - videoPath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShareVideoMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShareVideoMessageFailCallback - /** 接口调用成功的回调函数 */ - success?: ShareVideoMessageSuccessCallback - /** 缩略图路径,若留空则使用视频首帧 */ - thumbPath?: string - } - interface ShowActionSheetOption { - /** 按钮的文字数组,数组长度最大为 6 */ - itemList: string[] - /** 需要基础库: `2.14.0` - * - * 警示文案 */ - alertText?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowActionSheetCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShowActionSheetFailCallback - /** 按钮的文字颜色 */ - itemColor?: string - /** 接口调用成功的回调函数 */ - success?: ShowActionSheetSuccessCallback - } - interface ShowActionSheetSuccessCallbackResult { - /** 用户点击的按钮序号,从上到下的顺序,从0开始 */ - tapIndex: number - errMsg: string - } - interface ShowLoadingOption { - /** 提示的内容 */ - title: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowLoadingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShowLoadingFailCallback - /** 是否显示透明蒙层,防止触摸穿透 */ - mask?: boolean - /** 接口调用成功的回调函数 */ - success?: ShowLoadingSuccessCallback - } - interface ShowModalOption { - /** 取消按钮的文字颜色,必须是 16 进制格式的颜色字符串 */ - cancelColor?: string - /** 取消按钮的文字,最多 4 个字符 */ - cancelText?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowModalCompleteCallback - /** 确认按钮的文字颜色,必须是 16 进制格式的颜色字符串 */ - confirmColor?: string - /** 确认按钮的文字,最多 4 个字符 */ - confirmText?: string - /** 提示的内容 */ - content?: string - /** 需要基础库: `2.17.1` - * - * 是否显示输入框 */ - editable?: boolean - /** 接口调用失败的回调函数 */ - fail?: ShowModalFailCallback - /** 需要基础库: `2.17.1` - * - * 显示输入框时的提示文本 */ - placeholderText?: string - /** 是否显示取消按钮 */ - showCancel?: boolean - /** 接口调用成功的回调函数 */ - success?: ShowModalSuccessCallback - /** 提示的标题 */ - title?: string - } - interface ShowModalSuccessCallbackResult { - /** 需要基础库: `1.1.0` - * - * 为 true 时,表示用户点击了取消(用于 Android 系统区分点击蒙层关闭还是点击取消按钮关闭) */ - cancel: boolean - /** 为 true 时,表示用户点击了确定按钮 */ - confirm: boolean - /** editable 为 true 时,用户输入的文本 */ - content: string - errMsg: string - } - interface ShowNavigationBarLoadingOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowNavigationBarLoadingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShowNavigationBarLoadingFailCallback - /** 接口调用成功的回调函数 */ - success?: ShowNavigationBarLoadingSuccessCallback - } - interface ShowRedPackageOption { - /** 封面地址 */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowRedPackageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShowRedPackageFailCallback - /** 接口调用成功的回调函数 */ - success?: ShowRedPackageSuccessCallback - } - interface ShowShareImageMenuOption { - /** 要分享的图片地址,必须为本地路径或临时路径 */ - path: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowShareImageMenuCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShowShareImageMenuFailCallback - /** 接口调用成功的回调函数 */ - success?: ShowShareImageMenuSuccessCallback - } - interface ShowShareMenuOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowShareMenuCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShowShareMenuFailCallback - /** 需要基础库: `2.11.3` - * - * 本接口为 Beta 版本,暂只在 Android 平台支持。需要显示的转发按钮名称列表,默认['shareAppMessage']。按钮名称合法值包含 "shareAppMessage"、"shareTimeline" 两种 */ - menus?: string[] - /** 接口调用成功的回调函数 */ - success?: ShowShareMenuSuccessCallback - /** 是否使用带 shareTicket 的转发[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ - withShareTicket?: boolean - } - interface ShowTabBarOption { - /** 是否需要动画效果 */ - animation?: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowTabBarCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShowTabBarFailCallback - /** 接口调用成功的回调函数 */ - success?: ShowTabBarSuccessCallback - } - interface ShowTabBarRedDotOption { - /** tabBar 的哪一项,从左边算起 */ - index: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowTabBarRedDotCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ShowTabBarRedDotFailCallback - /** 接口调用成功的回调函数 */ - success?: ShowTabBarRedDotSuccessCallback - } - interface ShowToastOption { - /** 提示的内容 */ - title: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ShowToastCompleteCallback - /** 提示的延迟时间 */ - duration?: number - /** 接口调用失败的回调函数 */ - fail?: ShowToastFailCallback - /** 图标 - * - * 可选值: - * - 'success': 显示成功图标,此时 title 文本最多显示 7 个汉字长度; - * - 'error': 显示失败图标,此时 title 文本最多显示 7 个汉字长度; - * - 'loading': 显示加载图标,此时 title 文本最多显示 7 个汉字长度; - * - 'none': 不显示图标,此时 title 文本最多可显示两行,[1.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html)及以上版本支持; */ - icon?: 'success' | 'error' | 'loading' | 'none' - /** 需要基础库: `1.1.0` - * - * 自定义图标的本地路径,image 的优先级高于 icon */ - image?: string - /** 是否显示透明蒙层,防止触摸穿透 */ - mask?: boolean - /** 接口调用成功的回调函数 */ - success?: ShowToastSuccessCallback - } - interface Size { - /** 变化后的窗口高度,单位 px */ - windowHeight: number - /** 变化后的窗口宽度,单位 px */ - windowWidth: number - } - /** 需要基础库: `2.10.4` - * - * 网络请求过程中一些调试信息 */ - interface SocketProfile { - /** 完成建立连接的时间(完成握手),如果是持久连接,则与 fetchStart 值相等。注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接完成的时间。注意这里握手结束,包括安全连接建立完成、SOCKS 授权通过 */ - connectEnd: number - /** 开始建立连接的时间,如果是持久连接,则与 fetchStart 值相等。注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接开始的时间 */ - connectStart: number - /** 上层请求到返回的耗时 */ - cost: number - /** DNS 域名查询完成的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等 */ - domainLookupEnd: number - /** DNS 域名查询开始的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等 */ - domainLookupStart: number - /** 组件准备好使用 SOCKET 建立请求的时间,这发生在检查本地缓存之前 */ - fetchStart: number - /** 握手耗时 */ - handshakeCost: number - /** 单次连接的耗时,包括 connect ,tls */ - rtt: number - } - interface SocketTaskCloseOption { - /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ - code?: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: FileSystemManagerCloseCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SocketTaskCloseFailCallback - /** 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。 */ - reason?: string - /** 接口调用成功的回调函数 */ - success?: FileSystemManagerCloseSuccessCallback - } - interface SocketTaskOnCloseListenerResult { - /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */ - code: number - /** 一个可读的字符串,表示连接被关闭的原因。 */ - reason: string - } - interface SocketTaskOnMessageListenerResult { - /** 服务器返回的消息 */ - data: string | ArrayBuffer - } - interface SocketTaskSendOption { - /** 需要发送的内容 */ - data: string | ArrayBuffer - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SendCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SendFailCallback - /** 接口调用成功的回调函数 */ - success?: SendSuccessCallback - } - interface StartAccelerometerOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartAccelerometerCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartAccelerometerFailCallback - /** 需要基础库: `2.1.0` - * - * 监听加速度数据回调函数的执行频率 - * - * 可选值: - * - 'game': 适用于更新游戏的回调频率,在 20ms/次 左右; - * - 'ui': 适用于更新 UI 的回调频率,在 60ms/次 左右; - * - 'normal': 普通的回调频率,在 200ms/次 左右; */ - interval?: 'game' | 'ui' | 'normal' - /** 接口调用成功的回调函数 */ - success?: StartAccelerometerSuccessCallback - } - interface StartAdvertisingObject { - /** 广播自定义参数 */ - advertiseRequest: AdvertiseReqObj - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartAdvertisingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartAdvertisingFailCallback - /** 广播功率 - * - * 可选值: - * - 'low': 功率低; - * - 'medium': 功率适中; - * - 'high': 功率高; */ - powerLevel?: 'low' | 'medium' | 'high' - /** 接口调用成功的回调函数 */ - success?: StartAdvertisingSuccessCallback - } - interface StartBeaconDiscoveryOption { - /** Beacon 设备广播的 UUID 列表 */ - uuids: string[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartBeaconDiscoveryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartBeaconDiscoveryFailCallback - /** 是否校验蓝牙开关,仅在 iOS 下有效。iOS 11 起,控制面板里关掉蓝牙,还是能继续使用 Beacon 服务。 */ - ignoreBluetoothAvailable?: boolean - /** 接口调用成功的回调函数 */ - success?: StartBeaconDiscoverySuccessCallback - } - interface StartBluetoothDevicesDiscoveryOption { - /** 是否允许重复上报同一设备。如果允许重复上报,则 [wx.onBlueToothDeviceFound](#) 方法会多次上报同一设备,但是 RSSI 值会有不同。 */ - allowDuplicatesKey?: boolean - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartBluetoothDevicesDiscoveryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartBluetoothDevicesDiscoveryFailCallback - /** 上报设备的间隔,单位 ms。0 表示找到新设备立即上报,其他数值根据传入的间隔上报。 */ - interval?: number - /** 扫描模式,越高扫描越快,也越耗电。仅安卓微信客户端 7.0.12 及以上支持。 - * - * 可选值: - * - 'low': 低; - * - 'medium': 中; - * - 'high': 高; */ - powerLevel?: 'low' | 'medium' | 'high' - /** 要搜索的蓝牙设备主服务的 UUID 列表(支持 16/32/128 位 UUID)。某些蓝牙设备会广播自己的主 service 的 UUID。如果设置此参数,则只搜索广播包有对应 UUID 的主服务的蓝牙设备。建议通过该参数过滤掉周边不需要处理的其他蓝牙设备。 */ - services?: string[] - /** 接口调用成功的回调函数 */ - success?: StartBluetoothDevicesDiscoverySuccessCallback - } - interface StartCompassOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartCompassCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartCompassFailCallback - /** 接口调用成功的回调函数 */ - success?: StartCompassSuccessCallback - } - interface StartDeviceMotionListeningOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartDeviceMotionListeningCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartDeviceMotionListeningFailCallback - /** 监听设备方向的变化回调函数的执行频率 - * - * 可选值: - * - 'game': 适用于更新游戏的回调频率,在 20ms/次 左右; - * - 'ui': 适用于更新 UI 的回调频率,在 60ms/次 左右; - * - 'normal': 普通的回调频率,在 200ms/次 左右; */ - interval?: 'game' | 'ui' | 'normal' - /** 接口调用成功的回调函数 */ - success?: StartDeviceMotionListeningSuccessCallback - } - interface StartDiscoveryOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartDiscoveryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartDiscoveryFailCallback - /** 接口调用成功的回调函数 */ - success?: StartDiscoverySuccessCallback - } - interface StartGyroscopeOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartGyroscopeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartGyroscopeFailCallback - /** 监听陀螺仪数据回调函数的执行频率 - * - * 可选值: - * - 'game': 适用于更新游戏的回调频率,在 20ms/次 左右; - * - 'ui': 适用于更新 UI 的回调频率,在 60ms/次 左右; - * - 'normal': 普通的回调频率,在 200ms/次 左右; */ - interval?: 'game' | 'ui' | 'normal' - /** 接口调用成功的回调函数 */ - success?: StartGyroscopeSuccessCallback - } - interface StartHCEOption { - /** 需要注册到系统的 AID 列表 */ - aid_list: string[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartHCECompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartHCEFailCallback - /** 接口调用成功的回调函数 */ - success?: StartHCESuccessCallback - } - interface StartLocalServiceDiscoveryFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'invalid param': serviceType 为空; - * - 'scan task already exist': 在当前 startLocalServiceDiscovery 发起的搜索未停止的情况下,再次调用 startLocalServiceDiscovery; */ - errMsg: string - } - interface StartLocalServiceDiscoveryOption { - /** 要搜索的服务类型 */ - serviceType: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartLocalServiceDiscoveryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartLocalServiceDiscoveryFailCallback - /** 接口调用成功的回调函数 */ - success?: StartLocalServiceDiscoverySuccessCallback - } - interface StartLocationUpdateBackgroundOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartLocationUpdateBackgroundCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartLocationUpdateBackgroundFailCallback - /** 接口调用成功的回调函数 */ - success?: StartLocationUpdateBackgroundSuccessCallback - /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */ - type?: string - } - interface StartLocationUpdateOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartLocationUpdateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartLocationUpdateFailCallback - /** 接口调用成功的回调函数 */ - success?: StartLocationUpdateSuccessCallback - /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */ - type?: string - } - interface StartPreviewOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartPreviewCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartPreviewFailCallback - /** 接口调用成功的回调函数 */ - success?: StartPreviewSuccessCallback - } - interface StartPullDownRefreshOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartPullDownRefreshCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartPullDownRefreshFailCallback - /** 接口调用成功的回调函数 */ - success?: StartPullDownRefreshSuccessCallback - } - interface StartRecordSuccessCallbackResult { - /** 录音文件的临时路径 (本地路径) */ - tempFilePath: string - errMsg: string - } - interface StartRecordTimeoutCallbackResult { - /** 封面图片文件的临时路径 (本地路径) */ - tempThumbPath: string - /** 视频的文件的临时路径 (本地路径) */ - tempVideoPath: string - } - interface StartSoterAuthenticationOption { - /** 挑战因子。挑战因子为调用者为此次生物鉴权准备的用于签名的字符串关键识别信息,将作为 `resultJSON` 的一部分,供调用者识别本次请求。例如:如果场景为请求用户对某订单进行授权确认,则可以将订单号填入此参数。 */ - challenge: string - /** 请求使用的可接受的生物认证方式 - * - * 可选值: - * - 'fingerPrint': 指纹识别; - * - 'facial': 人脸识别; - * - 'speech': 声纹识别(暂未支持); */ - requestAuthModes: Array<'fingerPrint' | 'facial' | 'speech'> - /** 验证描述,即识别过程中显示在界面上的对话框提示内容 */ - authContent?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartSoterAuthenticationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartSoterAuthenticationFailCallback - /** 接口调用成功的回调函数 */ - success?: StartSoterAuthenticationSuccessCallback - } - interface StartSoterAuthenticationSuccessCallbackResult { - /** 生物认证方式 */ - authMode: string - /** 错误码 */ - errCode: number - /** 错误信息 */ - errMsg: string - /** 在设备安全区域(TEE)内获得的本机安全信息(如TEE名称版本号等以及防重放参数)以及本次认证信息(仅Android支持,本次认证的指纹ID)。具体说明见下文 */ - resultJSON: string - /** 用SOTER安全密钥对 `resultJSON` 的签名(SHA256 with RSA/PSS, saltlen=20) */ - resultJSONSignature: string - } - interface StartWifiOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartWifiCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartWifiFailCallback - /** 接口调用成功的回调函数 */ - success?: StartWifiSuccessCallback - } - interface StatFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail permission denied, open ${path}': 指定的 path 路径没有读权限; - * - 'fail no such file or directory ${path}': 文件不存在; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface StatOption { - /** 文件/目录路径 (本地路径) */ - path: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StatCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StatFailCallback - /** 需要基础库: `2.3.0` - * - * 是否递归获取目录下的每个文件的 Stats 信息 */ - recursive?: boolean - /** 接口调用成功的回调函数 */ - success?: StatSuccessCallback - } - interface StatSuccessCallbackResult { - /** [Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)|Array.<[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)> - * - * 当 recursive 为 false 时,res.stats 是一个 Stats 对象。当 recursive 为 true 且 path 是一个目录的路径时,res.stats 是一个 Array,数组的每一项是一个对象,每个对象包含 path 和 stats。 */ - stats: Stats | Stats[] - errMsg: string - } - /** 描述文件状态的对象 */ - interface Stats { - /** 文件最近一次被存取或被执行的时间,UNIX 时间戳,对应 POSIX stat.st_atime */ - lastAccessedTime: number - /** 文件最后一次被修改的时间,UNIX 时间戳,对应 POSIX stat.st_mtime */ - lastModifiedTime: number - /** 文件的类型和存取的权限,对应 POSIX stat.st_mode */ - mode: string - /** 文件大小,单位:B,对应 POSIX stat.st_size */ - size: number - } - interface StepOption { - /** 动画延迟时间,单位 ms */ - delay?: number - /** 动画持续时间,单位 ms */ - duration?: number - /** 动画的效果 - * - * 可选值: - * - 'linear': 动画从头到尾的速度是相同的; - * - 'ease': 动画以低速开始,然后加快,在结束前变慢; - * - 'ease-in': 动画以低速开始; - * - 'ease-in-out': 动画以低速开始和结束; - * - 'ease-out': 动画以低速结束; - * - 'step-start': 动画第一帧就跳至结束状态直到结束; - * - 'step-end': 动画一直保持开始状态,最后一帧跳到结束状态; */ - timingFunction?: - | 'linear' - | 'ease' - | 'ease-in' - | 'ease-in-out' - | 'ease-out' - | 'step-start' - | 'step-end' - transformOrigin?: string - } - interface StopAccelerometerOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopAccelerometerCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopAccelerometerFailCallback - /** 接口调用成功的回调函数 */ - success?: StopAccelerometerSuccessCallback - } - interface StopAdvertisingOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopAdvertisingCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopAdvertisingFailCallback - /** 接口调用成功的回调函数 */ - success?: StopAdvertisingSuccessCallback - } - interface StopBGMOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopBGMCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopBGMFailCallback - /** 接口调用成功的回调函数 */ - success?: StopBGMSuccessCallback - } - interface StopBackgroundAudioOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopBackgroundAudioCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopBackgroundAudioFailCallback - /** 接口调用成功的回调函数 */ - success?: StopBackgroundAudioSuccessCallback - } - interface StopBeaconDiscoveryOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopBeaconDiscoveryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopBeaconDiscoveryFailCallback - /** 接口调用成功的回调函数 */ - success?: StopBeaconDiscoverySuccessCallback - } - interface StopBluetoothDevicesDiscoveryOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopBluetoothDevicesDiscoveryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopBluetoothDevicesDiscoveryFailCallback - /** 接口调用成功的回调函数 */ - success?: StopBluetoothDevicesDiscoverySuccessCallback - } - interface StopCompassOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopCompassCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopCompassFailCallback - /** 接口调用成功的回调函数 */ - success?: StopCompassSuccessCallback - } - interface StopDeviceMotionListeningOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopDeviceMotionListeningCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopDeviceMotionListeningFailCallback - /** 接口调用成功的回调函数 */ - success?: StopDeviceMotionListeningSuccessCallback - } - interface StopDiscoveryOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopDiscoveryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopDiscoveryFailCallback - /** 接口调用成功的回调函数 */ - success?: StopDiscoverySuccessCallback - } - interface StopFaceDetectOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopFaceDetectCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopFaceDetectFailCallback - /** 接口调用成功的回调函数 */ - success?: StopFaceDetectSuccessCallback - } - interface StopGyroscopeOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopGyroscopeCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopGyroscopeFailCallback - /** 接口调用成功的回调函数 */ - success?: StopGyroscopeSuccessCallback - } - interface StopHCEOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopHCECompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopHCEFailCallback - /** 接口调用成功的回调函数 */ - success?: StopHCESuccessCallback - } - interface StopLocalServiceDiscoveryFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'task not found': 在当前没有处在搜索服务中的情况下调用 stopLocalServiceDiscovery; */ - errMsg: string - } - interface StopLocalServiceDiscoveryOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopLocalServiceDiscoveryCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopLocalServiceDiscoveryFailCallback - /** 接口调用成功的回调函数 */ - success?: StopLocalServiceDiscoverySuccessCallback - } - interface StopLocationUpdateOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopLocationUpdateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopLocationUpdateFailCallback - /** 接口调用成功的回调函数 */ - success?: StopLocationUpdateSuccessCallback - } - interface StopOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopFailCallback - /** 接口调用成功的回调函数 */ - success?: StopSuccessCallback - } - interface StopPreviewOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopPreviewCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopPreviewFailCallback - /** 接口调用成功的回调函数 */ - success?: StopPreviewSuccessCallback - } - interface StopPullDownRefreshOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopPullDownRefreshCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopPullDownRefreshFailCallback - /** 接口调用成功的回调函数 */ - success?: StopPullDownRefreshSuccessCallback - } - interface StopRecordSuccessCallbackResult { - /** 封面图片文件的临时路径 (本地路径) */ - tempThumbPath: string - /** 视频的文件的临时路径 (本地路径) */ - tempVideoPath: string - errMsg: string - } - interface StopVoiceOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopVoiceCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopVoiceFailCallback - /** 接口调用成功的回调函数 */ - success?: StopVoiceSuccessCallback - } - interface StopWifiOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopWifiCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopWifiFailCallback - /** 接口调用成功的回调函数 */ - success?: StopWifiSuccessCallback - } - interface SubscribeVoIPVideoMembersOption { - /** 订阅的成员列表 */ - openIdList: string[] - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SubscribeVoIPVideoMembersCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SubscribeVoIPVideoMembersFailCallback - /** 接口调用成功的回调函数 */ - success?: SubscribeVoIPVideoMembersSuccessCallback - } - /** 订阅消息设置 -* -* **示例代码** -* -* ```javascript -wx.getSetting({ - withSubscriptions: true, - success (res) { - console.log(res.authSetting) - // res.authSetting = { - // "scope.userInfo": true, - // "scope.userLocation": true - // } - console.log(res.subscriptionsSetting) - // res.subscriptionsSetting = { - // mainSwitch: true, // 订阅消息总开关 - // itemSettings: { // 每一项开关 - // SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息 - // SYS_MSG_TYPE_RANK: 'accept' - // zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息 - // ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban', - // } - // } - } -}) -``` */ - interface SubscriptionsSetting { - /** 订阅消息总开关,true为开启,false为关闭 */ - mainSwitch: boolean - /** 每一项订阅消息的订阅状态。itemSettings对象的键为**一次性订阅消息的模板id**或**系统订阅消息的类型**,值为'accept'、'reject'、'ban'中的其中一种。'accept'表示用户同意订阅这条消息,'reject'表示用户拒绝订阅这条消息,'ban'表示已被后台封禁。一次性订阅消息使用方法详见 [wx.requestSubscribeMessage](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html),永久订阅消息(仅小游戏可用)使用方法详见[wx.requestSubscribeSystemMessage](https://developers.weixin.qq.com/minigame/dev/api/open-api/subscribe-message/wx.requestSubscribeSystemMessage.html) - * ## 注意事项 - * - itemSettings 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。 */ - itemSettings?: IAnyObject - } - interface SwitchCameraOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SwitchCameraCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SwitchCameraFailCallback - /** 接口调用成功的回调函数 */ - success?: SwitchCameraSuccessCallback - } - interface SwitchTabOption { - /** 需要跳转的 tabBar 页面的路径 (代码包路径)(需在 app.json 的 [tabBar](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabbar) 字段定义的页面),路径后不能带参数。 */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SwitchTabCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: SwitchTabFailCallback - /** 接口调用成功的回调函数 */ - success?: SwitchTabSuccessCallback - } - interface SystemInfo { - /** 需要基础库: `1.1.0` - * - * 客户端基础库版本 */ - SDKVersion: string - /** 需要基础库: `2.6.0` - * - * 允许微信使用相册的开关(仅 iOS 有效) */ - albumAuthorized: boolean - /** 需要基础库: `1.8.0` - * - * 设备性能等级(仅 Android)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50) */ - benchmarkLevel: number - /** 需要基础库: `2.6.0` - * - * 蓝牙的系统开关 */ - bluetoothEnabled: boolean - /** 需要基础库: `1.5.0` - * - * 设备品牌 */ - brand: string - /** 需要基础库: `2.6.0` - * - * 允许微信使用摄像头的开关 */ - cameraAuthorized: boolean - /** 设备方向 - * - * 可选值: - * - 'portrait': 竖屏; - * - 'landscape': 横屏; */ - deviceOrientation: 'portrait' | 'landscape' - /** 需要基础库: `2.15.0` - * - * 是否已打开调试。可通过右上角菜单或 [wx.setEnableDebug](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.setEnableDebug.html) 打开调试。 */ - enableDebug: boolean - /** 需要基础库: `1.5.0` - * - * 用户字体大小(单位px)。以微信客户端「我-设置-通用-字体大小」中的设置为准 */ - fontSizeSetting: number - /** 需要基础库: `2.12.3` - * - * 当前小程序运行的宿主环境 */ - host: SystemInfoHost - /** 微信设置的语言 */ - language: string - /** 需要基础库: `2.6.0` - * - * 允许微信使用定位的开关 */ - locationAuthorized: boolean - /** 需要基础库: `2.6.0` - * - * 地理位置的系统开关 */ - locationEnabled: boolean - /** `true` 表示模糊定位,`false` 表示精确定位,仅 iOS 支持 */ - locationReducedAccuracy: boolean - /** 需要基础库: `2.6.0` - * - * 允许微信使用麦克风的开关 */ - microphoneAuthorized: boolean - /** 设备型号。新机型刚推出一段时间会显示unknown,微信会尽快进行适配。 */ - model: string - /** 需要基础库: `2.6.0` - * - * 允许微信通知带有提醒的开关(仅 iOS 有效) */ - notificationAlertAuthorized: boolean - /** 需要基础库: `2.6.0` - * - * 允许微信通知的开关 */ - notificationAuthorized: boolean - /** 需要基础库: `2.6.0` - * - * 允许微信通知带有标记的开关(仅 iOS 有效) */ - notificationBadgeAuthorized: boolean - /** 需要基础库: `2.6.0` - * - * 允许微信通知带有声音的开关(仅 iOS 有效) */ - notificationSoundAuthorized: boolean - /** 需要基础库: `2.19.3` - * - * 允许微信使用日历的开关 */ - phoneCalendarAuthorized: boolean - /** 设备像素比 */ - pixelRatio: number - /** 客户端平台 - * - * 可选值: - * - 'ios': iOS微信(包含 iPhone、iPad); - * - 'android': Android微信; - * - 'windows': Windows微信; - * - 'mac': macOS微信; - * - 'devtools': 微信开发者工具; */ - platform: 'ios' | 'android' | 'windows' | 'mac' | 'devtools' - /** 需要基础库: `2.7.0` - * - * 在竖屏正方向下的安全区域 */ - safeArea: SafeArea - /** 需要基础库: `1.1.0` - * - * 屏幕高度,单位px */ - screenHeight: number - /** 需要基础库: `1.1.0` - * - * 屏幕宽度,单位px */ - screenWidth: number - /** 需要基础库: `1.9.0` - * - * 状态栏的高度,单位px */ - statusBarHeight: number - /** 操作系统及版本 */ - system: string - /** 微信版本号 */ - version: string - /** 需要基础库: `2.6.0` - * - * Wi-Fi 的系统开关 */ - wifiEnabled: boolean - /** 可使用窗口高度,单位px */ - windowHeight: number - /** 可使用窗口宽度,单位px */ - windowWidth: number - /** 需要基础库: `2.11.0` - * - * 系统当前主题,取值为`light`或`dark`,全局配置`"darkmode":true`时才能获取,否则为 undefined (不支持小游戏) - * - * 可选值: - * - 'dark': 深色主题; - * - 'light': 浅色主题; */ - theme?: 'dark' | 'light' - } - /** 需要基础库: `2.12.3` - * - * 当前小程序运行的宿主环境 */ - interface SystemInfoHost { - /** 宿主 app 对应的 appId */ - appId: string - } - interface SystemSetting { - /** 蓝牙的系统开关 */ - bluetoothEnabled: boolean - /** 设备方向 - * - * 可选值: - * - 'portrait': 竖屏; - * - 'landscape': 横屏; */ - deviceOrientation: 'portrait' | 'landscape' - /** 地理位置的系统开关 */ - locationEnabled: boolean - /** Wi-Fi 的系统开关 */ - wifiEnabled: boolean - } - interface TCPSocketConnectOption { - /** 套接字要连接的地址 */ - address: string - /** 套接字要连接的端口 */ - port: number - /** 套接字要连接的超时时间,默认为 2s */ - timeout?: number - } - interface TCPSocketOnMessageListenerResult { - /** 接收端地址信息 */ - localInfo: LocalInfo - /** 收到的消息 */ - message: ArrayBuffer - /** 发送端地址信息 */ - remoteInfo: RemoteInfo - } - interface TakePhotoOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: TakePhotoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: TakePhotoFailCallback - /** 成像质量 - * - * 可选值: - * - 'high': 高质量; - * - 'normal': 普通质量; - * - 'low': 低质量; */ - quality?: 'high' | 'normal' | 'low' - /** 需要基础库: `2.22.0` - * - * 是否开启镜像 */ - selfieMirror?: boolean - /** 接口调用成功的回调函数 */ - success?: TakePhotoSuccessCallback - } - interface TakePhotoSuccessCallbackResult { - /** 照片文件的临时路径 (本地路径),安卓是jpg图片格式,ios是png */ - tempImagePath: string - errMsg: string - } - /** 标签类型枚举 */ - interface TechType { - /** 对应IsoDep实例,实例支持ISO-DEP (ISO 14443-4)标准的读写 */ - isoDep: string - /** 对应MifareClassic实例,实例支持MIFARE Classic标签的读写 */ - mifareClassic: string - /** 对应MifareUltralight实例,实例支持MIFARE Ultralight标签的读写 */ - mifareUltralight: string - /** 对应Ndef实例,实例支持对NDEF格式的NFC标签上的NDEF数据的读写 */ - ndef: string - /** 对应NfcA实例,实例支持NFC-A (ISO 14443-3A)标准的读写 */ - nfcA: string - /** 对应NfcB实例,实例支持NFC-B (ISO 14443-3B)标准的读写 */ - nfcB: string - /** 对应NfcF实例,实例支持NFC-F (JIS 6319-4)标准的读写 */ - nfcF: string - /** 对应NfcV实例,实例支持NFC-V (ISO 15693)标准的读写 */ - nfcV: string - } - interface TextMetrics { - /** 文本的宽度 */ - width: number - } - interface ToScreenLocationOption { - /** 纬度 */ - latitude: number - /** 经度 */ - longitude: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ToScreenLocationCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ToScreenLocationFailCallback - /** 接口调用成功的回调函数 */ - success?: ToScreenLocationSuccessCallback - } - interface ToScreenLocationSuccessCallbackResult { - /** x 坐标值 */ - x: number - /** y 坐标值 */ - y: number - errMsg: string - } - interface ToggleTorchOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: ToggleTorchCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: ToggleTorchFailCallback - /** 接口调用成功的回调函数 */ - success?: ToggleTorchSuccessCallback - } - /** 跟踪能力配置,目前不同的跟踪能力之间是互斥的,默认使用平面跟踪能力。需要注意目前 track 中不同的跟踪配置存在互斥关系(比如 marker 跟踪配置和 OSD 跟踪配置不能同时存在),请按需配置。 */ - interface Track { - /** 平面跟踪配置 */ - plane: PlaneTrack - /** 需要基础库: `2.24.5` - * - * OSD 跟踪配置 */ - OSD?: boolean - /** 需要基础库: `2.25.0` - * - * 人脸检测配置。用法详情[指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html)。安卓微信8.0.25开始支持,iOS微信8.0.24开始支持。 */ - face?: FaceTrack - /** 需要基础库: `2.24.5` - * - * marker 跟踪配置 */ - marker?: boolean - } - interface TransceiveOption { - /** 需要传递的二进制数据 */ - data: ArrayBuffer - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: TransceiveCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: TransceiveFailCallback - /** 接口调用成功的回调函数 */ - success?: TransceiveSuccessCallback - } - interface TransceiveSuccessCallbackResult { - data: ArrayBuffer - errMsg: string - } - interface TranslateMarkerOption { - /** 移动过程中是否自动旋转 marker */ - autoRotate: boolean - /** 指定 marker 移动到的目标点 */ - destination: DestinationOption - /** 指定 marker */ - markerId: number - /** marker 的旋转角度 */ - rotate: number - /** 动画结束回调函数 */ - animationEnd?: (...args: any[]) => any - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: TranslateMarkerCompleteCallback - /** 动画持续时长,平移与旋转分别计算 */ - duration?: number - /** 接口调用失败的回调函数 */ - fail?: TranslateMarkerFailCallback - /** 需要基础库: `2.13.0` - * - * 平移和旋转同时进行 */ - moveWithRotate?: boolean - /** 接口调用成功的回调函数 */ - success?: TranslateMarkerSuccessCallback - } - interface TruncateFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; - * - 'fail illegal operation on a directory, open "${filePath}"': 指定的 filePath 是一个已经存在的目录; - * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限; - * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; - * - 'fail sdcard not mounted': android sdcard 挂载失败; */ - errMsg: string - } - interface TruncateOption { - /** 要截断的文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: TruncateCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: TruncateFailCallback - /** 截断位置,默认0。如果 length 小于文件长度(字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,则会对其进行扩展,并且扩展部分将填充空字节('\0') */ - length?: number - /** 接口调用成功的回调函数 */ - success?: TruncateSuccessCallback - } - interface TruncateSyncOption { - /** 要截断的文件路径 (本地路径) */ - filePath: string - /** 截断位置,默认0。如果 length 小于文件长度(字节),则只有前面 length 个字节会保留在文件中,其余内容会被删除;如果 length 大于文件长度,则会对其进行扩展,并且扩展部分将填充空字节('\0') */ - length?: number - } - interface UDPSocketConnectOption { - /** 要发消息的地址 */ - address: string - /** 要发送消息的端口号 */ - port: number - } - interface UDPSocketOnMessageListenerResult { - /** 接收端地址信息,2.18.0 起支持 */ - localInfo: LocalInfo - /** 收到的消息。消息长度需要小于4096。 */ - message: ArrayBuffer - /** 发送端地址信息 */ - remoteInfo: RemoteInfo - } - interface UDPSocketSendOption { - /** 要发消息的地址。在基础库 <= 2.9.3 版本必须是和本机同网段的 IP 地址,或安全域名列表内的域名地址;之后版本可以是任意 IP 和域名 */ - address: string - /** 要发送的数据 */ - message: string | ArrayBuffer - /** 要发送消息的端口号 */ - port: number - /** 发送数据的长度,仅当 message 为 ArrayBuffer 类型时有效 */ - length?: number - /** 发送数据的偏移量,仅当 message 为 ArrayBuffer 类型时有效 */ - offset?: number - /** 向指定地址发消息时,是否要开启广播,基础库 2.24.0 开始支持 */ - setBroadcast?: boolean - } - interface UndoOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: UndoCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: UndoFailCallback - /** 接口调用成功的回调函数 */ - success?: UndoSuccessCallback - } - interface UnlinkFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail permission denied, open ${path}': 指定的 path 路径没有读权限; - * - 'fail no such file or directory ${path}': 文件不存在; - * - 'fail operation not permitted, unlink ${filePath}': 传入的 filePath 是一个目录; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface UnlinkOption { - /** 要删除的文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: UnlinkCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: UnlinkFailCallback - /** 接口调用成功的回调函数 */ - success?: UnlinkSuccessCallback - } - interface UnzipFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail permission denied, unzip ${zipFilePath} -> ${destPath}': 指定目标文件路径没有写权限; - * - 'fail no such file or directory, unzip ${zipFilePath} -> "${destPath}': 源文件不存在,或目标文件路径的上层目录不存在; */ - errMsg: string - } - interface UnzipOption { - /** 目标目录路径, 支持本地路径 */ - targetPath: string - /** 源文件路径,支持本地路径, 只可以是 zip 压缩文件 */ - zipFilePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: UnzipCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: UnzipFailCallback - /** 接口调用成功的回调函数 */ - success?: UnzipSuccessCallback - } - /** 参数列表 */ - interface UpdatableMessageFrontEndParameter { - /** 参数名 */ - name: string - /** 参数值 */ - value: string - } - /** 需要基础库: `2.4.0` - * - * 动态消息的模板信息 */ - interface UpdatableMessageFrontEndTemplateInfo { - /** 参数列表 */ - parameterList: UpdatableMessageFrontEndParameter[] - } - interface UpdateGroundOverlayOption { - /** 图片覆盖的经纬度范围 */ - bounds: MapBounds - /** 图片图层 id */ - id: string - /** 图片路径,支持网络图片、临时路径、代码包路径 */ - src: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: UpdateGroundOverlayCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: UpdateGroundOverlayFailCallback - /** 图层透明度 */ - opacity?: number - /** 接口调用成功的回调函数 */ - success?: UpdateGroundOverlaySuccessCallback - /** 是否可见 */ - visible?: boolean - /** 图层绘制顺序 */ - zIndex?: number - } - interface UpdateShareMenuOption { - /** 需要基础库: `2.4.0` - * - * 动态消息的 activityId。通过 [updatableMessage.createActivityId](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.createActivityId.html) 接口获取 */ - activityId?: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: UpdateShareMenuCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: UpdateShareMenuFailCallback - /** 需要基础库: `2.13.0` - * - * 是否是私密消息。详见 [小程序私密消息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.html) */ - isPrivateMessage?: boolean - /** 需要基础库: `2.4.0` - * - * 是否是动态消息,详见[动态消息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/updatable-message.html) */ - isUpdatableMessage?: boolean - /** 接口调用成功的回调函数 */ - success?: UpdateShareMenuSuccessCallback - /** 需要基础库: `2.4.0` - * - * 动态消息的模板信息 */ - templateInfo?: UpdatableMessageFrontEndTemplateInfo - /** 需要基础库: `2.11.0` - * - * 群待办消息的id,通过toDoActivityId可以把多个群待办消息聚合为同一个。通过 [updatableMessage.createActivityId](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.createActivityId.html) 接口获取。详见[群待办消息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ - toDoActivityId?: string - /** 是否使用带 shareTicket 的转发[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */ - withShareTicket?: boolean - } - interface UpdateVoIPChatMuteConfigOption { - /** 静音设置 */ - muteConfig: MuteConfig - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: UpdateVoIPChatMuteConfigCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: UpdateVoIPChatMuteConfigFailCallback - /** 接口调用成功的回调函数 */ - success?: UpdateVoIPChatMuteConfigSuccessCallback - } - interface UpdateWeChatAppOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: UpdateWeChatAppCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: UpdateWeChatAppFailCallback - /** 接口调用成功的回调函数 */ - success?: UpdateWeChatAppSuccessCallback - } - interface UploadFileOption { - /** 要上传文件资源的路径 (本地路径) */ - filePath: string - /** 文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容 */ - name: string - /** 开发者服务器地址 */ - url: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: UploadFileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: UploadFileFailCallback - /** HTTP 请求中其他额外的 form data */ - formData?: IAnyObject - /** HTTP 请求 Header,Header 中不能设置 Referer */ - header?: IAnyObject - /** 接口调用成功的回调函数 */ - success?: UploadFileSuccessCallback - /** 需要基础库: `2.10.0` - * - * 超时时间,单位为毫秒 */ - timeout?: number - } - interface UploadFileSuccessCallbackResult { - /** 开发者服务器返回的数据 */ - data: string - /** 开发者服务器返回的 HTTP 状态码 */ - statusCode: number - errMsg: string - } - interface UploadTaskOnProgressUpdateListenerResult { - /** 上传进度百分比 */ - progress: number - /** 预期需要上传的数据总长度,单位 Bytes */ - totalBytesExpectedToSend: number - /** 已经上传的数据长度,单位 Bytes */ - totalBytesSent: number - } - /** @warning **用户头像昵称获取规则已调整,参考 [用户信息接口调整说明](https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801)、[小程序用户头像昵称获取规则调整公告](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)** - * - * 用户信息 */ - interface UserInfo { - /** 用户头像图片的 URL。URL 最后一个数值代表正方形头像大小(有 0、46、64、96、132 数值可选,0 代表 640x640 的正方形头像,46 表示 46x46 的正方形头像,剩余数值以此类推。默认132),用户没有头像时该项为空。若用户更换头像,原有头像 URL 将失效。 */ - avatarUrl: string - /** 用户所在城市。不再返回,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) */ - city: string - /** 用户所在国家。不再返回,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) */ - country: string - /** 用户性别。不再返回,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) - * - * 可选值: - * - 0: 未知; - * - 1: 男性; - * - 2: 女性; */ - gender: 0 | 1 | 2 - /** 显示 country,province,city 所用的语言。强制返回 “zh_CN”,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) - * - * 可选值: - * - 'en': 英文; - * - 'zh_CN': 简体中文; - * - 'zh_TW': 繁体中文; */ - language: 'en' | 'zh_CN' | 'zh_TW' - /** 用户昵称 */ - nickName: string - /** 用户所在省份。不再返回,参考 [相关公告](https://developers.weixin.qq.com/community/develop/doc/00028edbe3c58081e7cc834705b801) */ - province: string - } - /** 需要基础库: `2.20.0` - * - * 相机对象 */ - interface VKCamera { - /** 需要基础库: `2.22.0` - * - * 相机内参,只有 v2 版本支持 */ - intrinsics: Float32Array - /** 视图矩阵 */ - viewMatrix: Float32Array - } - interface VKConfig { - /** 跟踪能力配置,目前不同的跟踪能力之间是互斥的,默认使用平面跟踪能力。需要注意目前 track 中不同的跟踪配置存在互斥关系(比如 marker 跟踪配置和 OSD 跟踪配置不能同时存在),请按需配置。 */ - track: Track - /** 需要基础库: `2.23.0` - * - * 绑定的 WebGLRenderingContext 对象 */ - gl?: WebGLRenderingContext - /** 需要基础库: `2.22.0` - * - * vision kit 版本。 - * - * 可选值: - * - 'v1': v1适用于用户在平面场景下,例如桌面,地面,泛平面场景,放置虚拟物体,不提供真实世界距离。用户放置物体时,手机相机倾斜向下对着目标平面点击即可,具有广泛的机型支持; - * - 'v2': v2提供真实物理距离的 ar 定位功能,提供平面识别功能,用户在平面范围点击放置虚拟物体的功能,具有[有限的机型支持](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/plane.html#%E9%99%84%E5%BD%95)。iOS 设备在基础库 2.22.0 开始支持v2。安卓设备在基础库 2.25.1 开始支持v2,另外,安卓v2不支持竖直平面。; */ - version?: 'v1' | 'v2' - } - /** 需要基础库: `2.25.0` - * - * 人脸 anchor - * - * **示例代码** - * - * [静态图像人脸检测能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/photo-face-detect) - * - * [实时摄像头人脸检测能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/face-detect) */ - interface VKFaceAnchor { - /** 人脸角度信息 */ - angle: number[] - /** 关键点的置信度 */ - confidence: number[] - /** 识别序号 */ - detectId: number - /** 唯一标识 */ - id: number - /** 相对视窗的位置信息,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ - origin: VKOrigin - /** 人脸 106 个关键点的坐标 */ - points: VKPoint[] - /** 相对视窗的尺寸,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ - size: VKSize - /** 类型 - * - * 可选值: - * - 3: 人脸; */ - type: 3 - } - /** 需要基础库: `2.20.0` - * - * vision kit 会话对象。 */ - interface VKFrame { - /** [VKCamera](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKCamera.html) - * - * 相机对象 */ - camera: VKCamera - /** 生成时间 */ - timestamp: number - } - interface VKMarker { - /** marker id */ - markerId: number - /** 图片路径 */ - path: string - } - /** 需要基础库: `2.24.5` - * - * marker anchor - * - * **示例代码** - * - * [2D Marker能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/2dmarker-ar) */ - interface VKMarkerAnchor { - /** 唯一标识 */ - id: number - /** marker id */ - markerId: number - /** 图片路径 */ - path: string - /** 包含位置、旋转、放缩信息的矩阵,以列为主序 */ - transform: Float32Array - /** 类型 - * - * 可选值: - * - 1: marker; */ - type: 1 - } - /** 需要基础库: `2.24.5` - * - * OSD anchor - * - * **示例代码** - * - * [单样本检测(OSD)能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/osd-ar) */ - interface VKOSDAnchor { - /** 唯一标识 */ - id: number - /** marker id */ - markerId: number - /** 相对视窗的位置信息,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ - origin: VKOrigin - /** 图片路径 */ - path: string - /** 相对视窗的尺寸,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ - size: VKSize - /** 类型 - * - * 可选值: - * - 2: OSD; */ - type: 2 - } - /** 相对视窗的位置信息,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘 */ - interface VKOrigin { - /** 横坐标 */ - x: number - /** 纵坐标 */ - y: number - } - /** 需要基础库: `2.22.0` - * - * 平面 anchor,只有 v2 版本支持 - * - * **示例代码** - * - * v1 版本:[水平面AR能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/plane-ar) - * v2 版本:[水平面AR能力v2使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/plane-ar-v2) */ - interface VKPlaneAnchor { - /** 方向 */ - alignment: number - /** 唯一标识 */ - id: number - /** 尺寸 */ - size: VKSize - /** 包含位置、旋转、放缩信息的矩阵,以列为主序 */ - transform: Float32Array - /** 类型 - * - * 可选值: - * - 0: 平面; */ - type: 0 - } - /** 人脸 106 个关键点的坐标 */ - interface VKPoint { - /** 横坐标 */ - x: number - /** 纵坐标 */ - y: number - } - /** 需要基础库: `2.20.0` - * - * vision kit 会话对象。 */ - interface VKSession { - /** 相机尺寸 */ - cameraSize: VKSize - /** 会话配置 */ - config: VKConfig - /** 会话状态 - * - * 可选值: - * - 0: 不可用; - * - 1: 运行中; - * - 2: 暂停中; */ - state: 0 | 1 | 2 - } - interface VKSize { - /** 高度 */ - height: number - /** 宽度 */ - width: number - } - interface VibrateLongOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: VibrateLongCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: VibrateLongFailCallback - /** 接口调用成功的回调函数 */ - success?: VibrateLongSuccessCallback - } - interface VibrateShortFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'style is not support': 当前设备不支持设置震动等级; */ - errMsg: string - } - interface VibrateShortOption { - /** 需要基础库: `2.13.0` - * - * 震动强度类型,有效值为:heavy、medium、light */ - type: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: VibrateShortCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: VibrateShortFailCallback - /** 接口调用成功的回调函数 */ - success?: VibrateShortSuccessCallback - } - interface VideoContextRequestFullScreenOption { - /** 需要基础库: `1.7.0` - * - * 设置全屏时视频的方向,不指定则根据宽高比自动判断。 - * - * 可选值: - * - 0: 正常竖向; - * - 90: 屏幕逆时针90度; - * - -90: 屏幕顺时针90度; */ - direction?: 0 | 90 | -90 - } - interface VideoDecoderStartOption { - /** 需要解码的视频源文件。基础库 2.13.0 以下的版本只支持本地路径。 2.13.0 开始支持 http:// 和 https:// 协议的远程路径。 */ - source: string - /** 需要基础库: `2.15.0` - * - * 是否不需要音频轨道 */ - abortAudio?: boolean - /** 需要基础库: `2.15.0` - * - * 是否不需要视频轨道 */ - abortVideo?: boolean - /** 解码模式。0:按 pts 解码;1:以最快速度解码 */ - mode?: number - } - interface VoIP1v1ChatUser { - /** 昵称 */ - nickname: string - /** 小程序内 openid */ - openid: string - /** 头像 */ - headImage?: string - } - /** 需要基础库: `2.19.0` -* -* WebAudioContext 实例,通过[wx.createWebAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createWebAudioContext.html) 接口获取该实例。 -* -* **示例代码** -* -* ```js -// 监听状态 -const audioCtx = wx.createWebAudioContext() -audioCtx.onstatechange = () => { - console.log(ctx.state) -} -setTimeout(audioCtx.suspend, 1000) -setTimeout(audioCtx.resume, 2000) -``` */ - interface WebAudioContext { - /** 获取当前上下文的时间戳。 */ - currentTime: number - /** [WebAudioContextNode](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContextNode.html) - * - * 当前上下文的最终目标节点,一般是音频渲染设备。 */ - destination: WebAudioContextNode - /** 空间音频监听器。 */ - listener: AudioListener - /** 可写属性,开发者可以对该属性设置一个监听函数,当WebAudio状态改变的时候,会触发开发者设置的监听函数。 */ - onstatechange: (...args: any[]) => any - /** 采样率,通常在8000-96000之间,通常44100hz的采样率最为常见。 */ - sampleRate: number - /** 当前WebAudio上下文的状态。可能的值如下:suspended(暂停)、running(正在运行)、closed(已关闭)。需要注意的是,不要在 audioContext close后再访问state属性 */ - state: string - } - /** 需要基础库: `2.19.0` - * - * 一类音频处理模块,不同的Node具备不同的功能,如GainNode(音量调整)等。一个WebAudioContextNode可以通过上下文来创建。 - * 目前已经支持以下Node: - * IIRFilterNode - * WaveShaperNode - * ConstantSourceNode - * ChannelMergerNode - * OscillatorNode - * GainNode - * BiquadFilterNode - * PeriodicWaveNode - * BufferSourceNode - * ChannelSplitterNode - * ChannelMergerNode - * DelayNode - * DynamicsCompressorNode - * ScriptProcessorNode - * PannerNode - * AnalyserNode */ - interface WebAudioContextNode { - /** 表示监听器的前向系统在同一笛卡尔坐标系中的水平位置,作为位置(位置x,位置和位置和位置)值。 */ - forwardX: number - /** 表示听众的前向方向在同一笛卡尔坐标系中作为位置(位置x,位置和位置和位置)值的垂直位置。 */ - forwardY: number - /** 表示与position (positionX、positionY和positionZ)值在同一笛卡尔坐标系下的听者前进方向的纵向(前后)位置。 */ - forwardZ: number - /** 右手笛卡尔坐标系中X轴的位置。 */ - positionX: number - /** 右手笛卡尔坐标系中Y轴的位置。 */ - positionY: number - /** 右手笛卡尔坐标系中Z轴的位置。 */ - positionZ: number - /** 设置监听器的方向 */ - setOrientation: (...args: any[]) => any - /** 设置监听器的位置 - * - * /** */ - setPosition: (...args: any[]) => any - /** 表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中侦听器向前方向的水平位置。 */ - upX: number - /** 表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中侦听器向上方向的水平位置。 */ - upY: number - /** 表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中侦听器向后方向的水平位置。 */ - upZ: number - } - /** 提供预设的 Wi-Fi 信息列表 */ - interface WifiData { - /** Wi-Fi 的 BSSID */ - BSSID?: string - /** Wi-Fi 的 SSID */ - SSID?: string - /** Wi-Fi 设备密码 */ - password?: string - } - /** Wifi 信息 - * - * **注意** - * - * - 安卓 wx.connectWifi / wx.getConnectedWifi 若设置了 partialInfo:true ,或者调用了 wx.onWifiConnectedWithPartialInfo 事件。将会返回只包含 SSID 属性的 WifiInfo 对象。 - * - iOS wx.getConnectedWifi 若设置了 partialInfo:true ,将会返回只包含 SSID、BSSID 属性的 WifiInfo 对象,且需要用户开启微信定位权限才能正确返回结果。 - * - 在某些情况下,可能 Wi-Fi 已经连接成功,但会因为获取不到完整的 WifiInfo 对象报错。具体错误信息为 errCode: 12010, errMsg: can't gain current wifi 或 no wifi is connected 。如果开发者不需要完整的 WifiInfo 对象,则可以通过采取上述策略解决报错问题。 */ - interface WifiInfo { - /** Wi-Fi 的 BSSID */ - BSSID: string - /** Wi-Fi 的 SSID */ - SSID: string - /** 需要基础库: `2.12.0` - * - * Wi-Fi 频段单位 MHz */ - frequency: number - /** Wi-Fi 是否安全 */ - secure: boolean - /** Wi-Fi 信号强度, 安卓取值 0 ~ 100 ,iOS 取值 0 ~ 1 ,值越大强度越大 */ - signalStrength: number - } - interface WindowInfo { - /** 设备像素比 */ - pixelRatio: number - /** 在竖屏正方向下的安全区域 */ - safeArea: SafeArea - /** 屏幕高度,单位px */ - screenHeight: number - /** 窗口上边缘的y值 */ - screenTop: number - /** 屏幕宽度,单位px */ - screenWidth: number - /** 状态栏的高度,单位px */ - statusBarHeight: number - /** 可使用窗口高度,单位px */ - windowHeight: number - /** 可使用窗口宽度,单位px */ - windowWidth: number - } - /** Worker 实例,主线程中可通过 [wx.createWorker](https://developers.weixin.qq.com/miniprogram/dev/api/worker/wx.createWorker.html) 接口获取,worker 线程中可通过全局变量 `worker` 获取。 -* -* **示例代码** -* -* 运行以下代码需先进行基础配置,详细请查阅 [小程序多线程](https://developers.weixin.qq.com/miniprogram/dev/framework/workers.html) | [小游戏多线程](https://developers.weixin.qq.com/minigame/dev/guide/base-ability/worker.html) 文档了解基础知识和配置方法。 -* -* ```js -const worker = wx.createWorker('workers/request/index.js') // 文件名指定 worker 的入口文件路径,绝对路径 - -worker.onMessage(function (res) { - console.log(res) -}) -// 监听worker被系统回收事件 -worker.onProcessKilled(function () { - console.log('worker has been killed') - // 重新创建一个worker - // wx.createWorker() -}) - -worker.postMessage({ - msg: 'hello worker' -}) - -worker.terminate() -``` */ - interface Worker { - /** worker内的环境变量 */ - env: WorkerEnv - } - /** worker内的环境变量 */ - interface WorkerEnv { - /** 文件系统中的用户目录路径 (本地路径) */ - USER_DATA_PATH: string - } - interface WorkerOnMessageListenerResult { - /** 主线程/Worker 线程向当前线程发送的消息 */ - message: IAnyObject - } - interface WriteBLECharacteristicValueOption { - /** 蓝牙特征的 UUID */ - characteristicId: string - /** 蓝牙设备 id */ - deviceId: string - /** 蓝牙特征对应服务的 UUID */ - serviceId: string - /** 蓝牙设备特征对应的二进制值 */ - value: ArrayBuffer - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: WriteBLECharacteristicValueCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: WriteBLECharacteristicValueFailCallback - /** 接口调用成功的回调函数 */ - success?: WriteBLECharacteristicValueSuccessCallback - /** 蓝牙特征值的写模式设置,有两种模式,iOS 优先 write,安卓优先 writeNoResponse 。(基础库 2.22.0 开始支持) - * - * 可选值: - * - 'write': 强制回复写,不支持时报错; - * - 'writeNoResponse': 强制无回复写,不支持时报错; */ - writeType?: 'write' | 'writeNoResponse' - } - interface WriteCharacteristicValueObject { - /** 蓝牙特征的 UUID */ - characteristicId: string - /** 是否需要通知主机 value 已更新 */ - needNotify: boolean - /** 蓝牙特征对应服务的 UUID */ - serviceId: string - /** characteristic 对应的二进制值 */ - value: ArrayBuffer - /** 可选,处理回包时使用 */ - callbackId?: number - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: WriteCharacteristicValueCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: WriteCharacteristicValueFailCallback - /** 接口调用成功的回调函数 */ - success?: WriteCharacteristicValueSuccessCallback - } - interface WriteFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'bad file descriptor': 无效的文件描述符; - * - 'fail permission denied': 指定的 fd 路径没有写权限; - * - 'fail sdcard not mounted': android sdcard 挂载失败; */ - errMsg: string - } - interface WriteFileFailCallbackResult { - /** 错误信息 - * - * 可选值: - * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在; - * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限; - * - 'fail the maximum size of the file storage limit is exceeded': 存储空间不足; - * - 'fail sdcard not mounted': Android sdcard 挂载失败; */ - errMsg: string - } - interface WriteFileOption { - /** 要写入的文本或二进制数据 */ - data: string | ArrayBuffer - /** 要写入的文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: WriteFileCompleteCallback - /** 指定写入文件的字符编码 - * - * 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - /** 接口调用失败的回调函数 */ - fail?: WriteFileFailCallback - /** 接口调用成功的回调函数 */ - success?: WriteFileSuccessCallback - } - interface WriteNdefMessageOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: WriteNdefMessageCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: WriteNdefMessageFailCallback - /** 二进制对象数组, 需要指明 id, type 以及 payload (均为 ArrayBuffer 类型) */ - records?: any[] - /** 接口调用成功的回调函数 */ - success?: WriteNdefMessageSuccessCallback - /** text 数组 */ - texts?: any[] - /** uri 数组 */ - uris?: any[] - } - interface WriteOption { - /** 写入的内容,类型为 String 或 ArrayBuffer */ - data: string | ArrayBuffer - /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: WriteCompleteCallback - /** 只在 data 类型是 String 时有效,指定写入文件的字符编码,默认为 utf8 - * - * 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - /** 接口调用失败的回调函数 */ - fail?: WriteFailCallback - /** 只在 data 类型是 ArrayBuffer 时有效,指定要写入的字节数,默认为 arrayBuffer 从0开始偏移 offset 个字节后剩余的字节数 */ - length?: number - /** 只在 data 类型是 ArrayBuffer 时有效,决定 arrayBuffe 中要被写入的部位,即 arrayBuffer 中的索引,默认0 */ - offset?: number - /** 指定文件开头的偏移量,即数据要被写入的位置。当 position 不传或者传入非 Number 类型的值时,数据会被写入当前指针所在位置。 */ - position?: number - /** 接口调用成功的回调函数 */ - success?: WriteSuccessCallback - } - /** 文件写入结果。 通过 [FileSystemManager.writeSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeSync.html) 接口返回 */ - interface WriteResult { - /** 实际被写入到文件中的字节数(注意,被写入的字节数不一定与被写入的字符串字符数相同) */ - bytesWritten: number - } - interface WriteSuccessCallbackResult { - /** 实际被写入到文件中的字节数(注意,被写入的字节数不一定与被写入的字符串字符数相同) */ - bytesWritten: number - errMsg: string - } - interface WriteSyncOption { - /** 写入的内容,类型为 String 或 ArrayBuffer */ - data: string | ArrayBuffer - /** 文件描述符。fd 通过 [FileSystemManager.open](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) 或 [FileSystemManager.openSync](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) 接口获得 */ - fd: string - /** 只在 data 类型是 String 时有效,指定写入文件的字符编码,默认为 utf8 - * - * 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - /** 只在 data 类型是 ArrayBuffer 时有效,指定要写入的字节数,默认为 arrayBuffer 从0开始偏移 offset 个字节后剩余的字节数 */ - length?: number - /** 只在 data 类型是 ArrayBuffer 时有效,决定 arrayBuffe 中要被写入的部位,即 arrayBuffer 中的索引,默认0 */ - offset?: number - /** 指定文件开头的偏移量,即数据要被写入的位置。当 position 不传或者传入非 Number 类型的值时,数据会被写入当前指针所在位置。 */ - position?: number - } - interface WxGetFileInfoOption { - /** 本地文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetFileInfoCompleteCallback - /** 计算文件摘要的算法 - * - * 可选值: - * - 'md5': md5 算法; - * - 'sha1': sha1 算法; */ - digestAlgorithm?: 'md5' | 'sha1' - /** 接口调用失败的回调函数 */ - fail?: WxGetFileInfoFailCallback - /** 接口调用成功的回调函数 */ - success?: WxGetFileInfoSuccessCallback - } - interface WxGetFileInfoSuccessCallbackResult { - /** 按照传入的 digestAlgorithm 计算得出的的文件摘要 */ - digest: string - /** 文件大小,以字节为单位 */ - size: number - errMsg: string - } - interface WxGetSavedFileListOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: GetSavedFileListCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: GetSavedFileListFailCallback - /** 接口调用成功的回调函数 */ - success?: WxGetSavedFileListSuccessCallback - } - interface WxGetSavedFileListSuccessCallbackResult { - /** 文件数组,每一项是一个 FileItem */ - fileList: FileItem[] - errMsg: string - } - interface WxRemoveSavedFileOption { - /** 需要删除的文件路径 (本地路径) */ - filePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: RemoveSavedFileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: WxRemoveSavedFileFailCallback - /** 接口调用成功的回调函数 */ - success?: RemoveSavedFileSuccessCallback - } - interface WxSaveFileOption { - /** 需要保存的文件的临时路径 (本地路径) */ - tempFilePath: string - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: SaveFileCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: WxSaveFileFailCallback - /** 接口调用成功的回调函数 */ - success?: SaveFileSuccessCallback - } - interface WxStartRecordOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StartRecordCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StartRecordFailCallback - /** 接口调用成功的回调函数 */ - success?: WxStartRecordSuccessCallback - } - interface WxStopRecordOption { - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - complete?: StopRecordCompleteCallback - /** 接口调用失败的回调函数 */ - fail?: StopRecordFailCallback - /** 接口调用成功的回调函数 */ - success?: WxStopRecordSuccessCallback - } - /** 运动数据列表 */ - interface WxaSportRecord { - /** 消耗卡路里 */ - calorie: number - /** 运动距离 */ - distance: number - /** 运动时长 */ - time: number - /** 运动项目id */ - typeId: number - } - /** 帧纹理对象 */ - interface YUVTextureRes { - /** UV 分量纹理 */ - uvTexture: WebGLTexture - /** Y 分量纹理 */ - yTexture: WebGLTexture - } - /** 文件路径 */ - interface ZipFileItem { - /** 文件内容 */ - data: string | ArrayBuffer - /** 错误信息 */ - errMsg: string - } - interface Animation { - /** [Object Animation.export()](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.export.html) - * - * 在插件中使用:支持 - * - * 导出动画队列。**export 方法每次调用后会清掉之前的动画操作。** */ - export(): AnimationExportResult - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.backgroundColor(string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.backgroundColor.html) - * - * 在插件中使用:支持 - * - * 设置背景色 */ - backgroundColor( - /** 颜色值 */ - value: string - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.bottom(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.bottom.html) - * - * 在插件中使用:支持 - * - * 设置 bottom 值 */ - bottom( - /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ - value: number | string - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.height(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.height.html) - * - * 在插件中使用:支持 - * - * 设置高度 */ - height( - /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ - value: number | string - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.left(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.left.html) - * - * 在插件中使用:支持 - * - * 设置 left 值 */ - left( - /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ - value: number | string - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.matrix()](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.matrix.html) - * - * 在插件中使用:支持 - * - * 同 [transform-function matrix](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix) */ - matrix(): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.matrix3d()](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.matrix3d.html) - * - * 在插件中使用:支持 - * - * 同 [transform-function matrix3d](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix3d) */ - matrix3d(): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.opacity(number value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.opacity.html) - * - * 在插件中使用:支持 - * - * 设置透明度 */ - opacity( - /** 透明度,范围 0-1 */ - value: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.right(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.right.html) - * - * 在插件中使用:支持 - * - * 设置 right 值 */ - right( - /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ - value: number | string - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotate(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotate.html) - * - * 在插件中使用:支持 - * - * 从原点顺时针旋转一个角度 */ - rotate( - /** 旋转的角度。范围 [-180, 180] */ - angle: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotate3d(number x, number y, number z, number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotate3d.html) - * - * 在插件中使用:支持 - * - * 从 固定 轴顺时针旋转一个角度 */ - rotate3d( - /** 旋转轴的 x 坐标 */ - x: number, - /** 旋转轴的 y 坐标 */ - y: number, - /** 旋转轴的 z 坐标 */ - z: number, - /** 旋转的角度。范围 [-180, 180] */ - angle: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotateX(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotateX.html) - * - * 在插件中使用:支持 - * - * 从 X 轴顺时针旋转一个角度 */ - rotateX( - /** 旋转的角度。范围 [-180, 180] */ - angle: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotateY(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotateY.html) - * - * 在插件中使用:支持 - * - * 从 Y 轴顺时针旋转一个角度 */ - rotateY( - /** 旋转的角度。范围 [-180, 180] */ - angle: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.rotateZ(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.rotateZ.html) - * - * 在插件中使用:支持 - * - * 从 Z 轴顺时针旋转一个角度 */ - rotateZ( - /** 旋转的角度。范围 [-180, 180] */ - angle: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scale(number sx, number sy)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scale.html) - * - * 在插件中使用:支持 - * - * 缩放 */ - scale( - /** 当仅有 sx 参数时,表示在 X 轴、Y 轴同时缩放sx倍数 */ - sx: number, - /** 在 Y 轴缩放 sy 倍数 */ - sy?: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scale3d(number sx, number sy, number sz)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scale3d.html) - * - * 在插件中使用:支持 - * - * 缩放 */ - scale3d( - /** x 轴的缩放倍数 */ - sx: number, - /** y 轴的缩放倍数 */ - sy: number, - /** z 轴的缩放倍数 */ - sz: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scaleX(number scale)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scaleX.html) - * - * 在插件中使用:支持 - * - * 缩放 X 轴 */ - scaleX( - /** X 轴的缩放倍数 */ - scale: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scaleY(number scale)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scaleY.html) - * - * 在插件中使用:支持 - * - * 缩放 Y 轴 */ - scaleY( - /** Y 轴的缩放倍数 */ - scale: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.scaleZ(number scale)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.scaleZ.html) - * - * 在插件中使用:支持 - * - * 缩放 Z 轴 */ - scaleZ( - /** Z 轴的缩放倍数 */ - scale: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.skew(number ax, number ay)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.skew.html) - * - * 在插件中使用:支持 - * - * 对 X、Y 轴坐标进行倾斜 */ - skew( - /** 对 X 轴坐标倾斜的角度,范围 [-180, 180] */ - ax: number, - /** 对 Y 轴坐标倾斜的角度,范围 [-180, 180] */ - ay: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.skewX(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.skewX.html) - * - * 在插件中使用:支持 - * - * 对 X 轴坐标进行倾斜 */ - skewX( - /** 倾斜的角度,范围 [-180, 180] */ - angle: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.skewY(number angle)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.skewY.html) - * - * 在插件中使用:支持 - * - * 对 Y 轴坐标进行倾斜 */ - skewY( - /** 倾斜的角度,范围 [-180, 180] */ - angle: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.step(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.step.html) - * - * 在插件中使用:支持 - * - * 表示一组动画完成。可以在一组动画中调用任意多个动画方法,一组动画中的所有动画会同时开始,一组动画完成后才会进行下一组动画。 */ - step(option?: StepOption): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.top(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.top.html) - * - * 在插件中使用:支持 - * - * 设置 top 值 */ - top( - /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ - value: number | string - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translate(number tx, number ty)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translate.html) - * - * 在插件中使用:支持 - * - * 平移变换 */ - translate( - /** 当仅有该参数时表示在 X 轴偏移 tx,单位 px */ - tx?: number, - /** 在 Y 轴平移的距离,单位为 px */ - ty?: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translate3d(number tx, number ty, number tz)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translate3d.html) - * - * 在插件中使用:支持 - * - * 对 xyz 坐标进行平移变换 */ - translate3d( - /** 在 X 轴平移的距离,单位为 px */ - tx?: number, - /** 在 Y 轴平移的距离,单位为 px */ - ty?: number, - /** 在 Z 轴平移的距离,单位为 px */ - tz?: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translateX(number translation)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translateX.html) - * - * 在插件中使用:支持 - * - * 对 X 轴平移 */ - translateX( - /** 在 X 轴平移的距离,单位为 px */ - translation: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translateY(number translation)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translateY.html) - * - * 在插件中使用:支持 - * - * 对 Y 轴平移 */ - translateY( - /** 在 Y 轴平移的距离,单位为 px */ - translation: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.translateZ(number translation)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.translateZ.html) - * - * 在插件中使用:支持 - * - * 对 Z 轴平移 */ - translateZ( - /** 在 Z 轴平移的距离,单位为 px */ - translation: number - ): Animation - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) Animation.width(number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.width.html) - * - * 在插件中使用:支持 - * - * 设置宽度 */ - width( - /** 长度值,如果传入 number 则默认使用 px,可传入其他自定义单位的长度值 */ - value: number | string - ): Animation - } - interface AudioBuffer { - /** [AudioBuffer.copyFromChannel()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.copyFromChannel.html) - * - * 在插件中使用:不支持 - * - * 从AudioBuffer的指定频道复制到数组终端。 */ - copyFromChannel(): void - /** [AudioBuffer.copyToChannel(Float32Array source, number channelNumber, number startInChannel)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.copyToChannel.html) - * - * 在插件中使用:不支持 - * - * 从指定数组复制样本到audioBuffer的特定通道 - * - * **示例代码** - * - * 示例代码参考AudioBuffer.copyFromChannel */ - copyToChannel( - /** 需要复制的源数组 */ - source: Float32Array, - /** 需要复制到的目的通道号 */ - channelNumber: number, - /** 复制偏移数据量 */ - startInChannel: number - ): void - /** [Float32Array AudioBuffer.getChannelData(number channel)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.getChannelData.html) - * - * 在插件中使用:不支持 - * - * 返回一个 Float32Array,包含了带有频道的PCM数据,由频道参数定义(有0代表第一个频道) */ - getChannelData( - /** 要获取特定通道数据的索引 */ - channel: number - ): Float32Array - } - interface AudioContext { - /** [AudioContext.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.pause.html) - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 - * - * 暂停音频。 */ - pause(): void - /** [AudioContext.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.play.html) - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 - * - * 播放音频。 */ - play(): void - /** [AudioContext.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.seek.html) - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 - * - * 跳转到指定位置。 */ - seek( - /** 跳转位置,单位 s */ - position: number - ): void - /** [AudioContext.setSrc(string src)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.setSrc.html) - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 - * - * 设置音频地址 */ - setSrc( - /** 音频地址 */ - src: string - ): void - } - interface BLEPeripheralServer { - /** [BLEPeripheralServer.addService(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.addService.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:不支持 - * - * 添加服务。 */ - addService(option: AddServiceOption): void - /** [BLEPeripheralServer.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.close.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:不支持 - * - * 关闭当前服务端。 */ - close(option?: BLEPeripheralServerCloseOption): void - /** [BLEPeripheralServer.offCharacteristicReadRequest(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicReadRequest.html) -* -* 需要基础库: `2.10.3` -* -* 在插件中使用:不支持 -* -* 移除已连接的设备请求读当前外围设备的特征值事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -BLEPeripheralServer.onCharacteristicReadRequest(listener) -BLEPeripheralServer.offCharacteristicReadRequest(listener) // 需传入与监听时同一个的函数对象 -``` */ - offCharacteristicReadRequest( - /** onCharacteristicReadRequest 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffCharacteristicReadRequestCallback - ): void - /** [BLEPeripheralServer.offCharacteristicSubscribed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicSubscribed.html) -* -* 需要基础库: `2.13.0` -* -* 在插件中使用:不支持 -* -* 移除特征订阅事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -BLEPeripheralServer.onCharacteristicSubscribed(listener) -BLEPeripheralServer.offCharacteristicSubscribed(listener) // 需传入与监听时同一个的函数对象 -``` */ - offCharacteristicSubscribed( - /** onCharacteristicSubscribed 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffCharacteristicSubscribedCallback - ): void - /** [BLEPeripheralServer.offCharacteristicUnsubscribed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicUnsubscribed.html) -* -* 需要基础库: `2.13.0` -* -* 在插件中使用:不支持 -* -* 移除取消特征订阅事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -BLEPeripheralServer.onCharacteristicUnsubscribed(listener) -BLEPeripheralServer.offCharacteristicUnsubscribed(listener) // 需传入与监听时同一个的函数对象 -``` */ - offCharacteristicUnsubscribed( - /** onCharacteristicUnsubscribed 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffCharacteristicUnsubscribedCallback - ): void - /** [BLEPeripheralServer.offCharacteristicWriteRequest(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicWriteRequest.html) -* -* 需要基础库: `2.10.3` -* -* 在插件中使用:不支持 -* -* 移除已连接的设备请求写当前外围设备的特征值事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -BLEPeripheralServer.onCharacteristicWriteRequest(listener) -BLEPeripheralServer.offCharacteristicWriteRequest(listener) // 需传入与监听时同一个的函数对象 -``` */ - offCharacteristicWriteRequest( - /** onCharacteristicWriteRequest 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffCharacteristicWriteRequestCallback - ): void - /** [BLEPeripheralServer.onCharacteristicReadRequest(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicReadRequest.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:不支持 - * - * 监听已连接的设备请求读当前外围设备的特征值事件。收到该消息后需要立刻调用 [writeCharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) 写回数据,否则主机不会收到响应。 */ - onCharacteristicReadRequest( - /** 已连接的设备请求读当前外围设备的特征值事件的监听函数 */ - listener: OnCharacteristicReadRequestCallback - ): void - /** [BLEPeripheralServer.onCharacteristicSubscribed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicSubscribed.html) - * - * 需要基础库: `2.13.0` - * - * 在插件中使用:不支持 - * - * 监听特征订阅事件,仅 iOS 支持。 */ - onCharacteristicSubscribed( - /** 特征订阅事件的监听函数 */ - listener: OnCharacteristicSubscribedCallback - ): void - /** [BLEPeripheralServer.onCharacteristicUnsubscribed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicUnsubscribed.html) - * - * 需要基础库: `2.13.0` - * - * 在插件中使用:不支持 - * - * 监听取消特征订阅事件,仅 iOS 支持。 */ - onCharacteristicUnsubscribed( - /** 取消特征订阅事件的监听函数 */ - listener: OnCharacteristicUnsubscribedCallback - ): void - /** [BLEPeripheralServer.onCharacteristicWriteRequest(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicWriteRequest.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:不支持 - * - * 监听已连接的设备请求写当前外围设备的特征值事件。收到该消息后需要立刻调用 [writeCharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) 写回数据,否则主机不会收到响应。 */ - onCharacteristicWriteRequest( - /** 已连接的设备请求写当前外围设备的特征值事件的监听函数 */ - listener: OnCharacteristicWriteRequestCallback - ): void - /** [BLEPeripheralServer.removeService(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.removeService.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:不支持 - * - * 移除服务。 */ - removeService(option: RemoveServiceOption): void - /** [BLEPeripheralServer.startAdvertising(Object Object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.startAdvertising.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:不支持 - * - * 开始广播本地创建的外围设备。 - * - * **注意** - * - * - Android 8.0.9 开始,支持直接使用 16/32/128 位 UUID; - * - Android 8.0.9 以下版本只支持 128 位 UUID,使用 16/32 位的 UUID 时需要进行补位(系统会自动识别是否属于预分配区间),可以参考[蓝牙指南](https://developers.weixin.qq.com/miniprogram/dev/framework/device/ble.html); - * - iOS 必须直接使用 16 位的 UUID,不能补位到 128 位,否则系统组包时仍会按照 128 位传输。iOS 暂不支持 32 位 UUID。 - * - iOS 同时只能发起一个广播,安卓支持同时发起多个广播。 - * - 传 beacon 参数时,不能同时传入 deviceName,serviceUuids,manufacturerData 参数。 */ - startAdvertising(Object: StartAdvertisingObject): void - /** [BLEPeripheralServer.stopAdvertising(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.stopAdvertising.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:不支持 - * - * 停止广播。 */ - stopAdvertising(option?: StopAdvertisingOption): void - /** [BLEPeripheralServer.writeCharacteristicValue(Object Object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.writeCharacteristicValue.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:不支持 - * - * 往指定特征写入二进制数据值,并通知已连接的主机,从机的特征值已发生变化,该接口会处理是走回包还是走订阅。 */ - writeCharacteristicValue(Object: WriteCharacteristicValueObject): void - } - interface BackgroundAudioError { - /** 错误信息 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 10001 | | 系统错误 | - * | 10002 | | 网络错误 | - * | 10003 | | 文件错误,请检查是否responseheader是否缺少Content-Length | - * | 10004 | | 格式错误 | - * | -1 | | 未知错误 | */ errMsg: string - /** 错误码 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 10001 | | 系统错误 | - * | 10002 | | 网络错误 | - * | 10003 | | 文件错误,请检查是否responseheader是否缺少Content-Length | - * | 10004 | | 格式错误 | - * | -1 | | 未知错误 | */ errCode: number - } - interface BackgroundAudioManager { - /** [BackgroundAudioManager.onCanplay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onCanplay.html) - * - * 在插件中使用:支持 - * - * 监听背景音频进入可播放状态事件。 但不保证后面可以流畅播放 */ - onCanplay( - /** 背景音频进入可播放状态事件的监听函数 */ - listener: OnCanplayCallback - ): void - /** [BackgroundAudioManager.onEnded(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onEnded.html) - * - * 在插件中使用:支持 - * - * 监听背景音频自然播放结束事件 */ - onEnded( - /** 背景音频自然播放结束事件的监听函数 */ - listener: OnEndedCallback - ): void - /** [BackgroundAudioManager.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onError.html) - * - * 在插件中使用:支持 - * - * 监听背景音频播放错误事件 */ - onError( - /** 背景音频播放错误事件的监听函数 */ - listener: BackgroundAudioManagerOnErrorCallback - ): void - /** [BackgroundAudioManager.onNext(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onNext.html) - * - * 在插件中使用:支持 - * - * 监听用户在系统音乐播放面板点击下一曲事件(仅iOS) */ - onNext( - /** 用户在系统音乐播放面板点击下一曲事件的监听函数 */ - listener: OnNextCallback - ): void - /** [BackgroundAudioManager.onPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPause.html) - * - * 在插件中使用:支持 - * - * 监听背景音频暂停事件 */ - onPause( - /** 背景音频暂停事件的监听函数 */ - listener: OnPauseCallback - ): void - /** [BackgroundAudioManager.onPlay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPlay.html) - * - * 在插件中使用:支持 - * - * 监听背景音频播放事件 */ - onPlay( - /** 背景音频播放事件的监听函数 */ - listener: OnPlayCallback - ): void - /** [BackgroundAudioManager.onPrev(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPrev.html) - * - * 在插件中使用:支持 - * - * 监听用户在系统音乐播放面板点击上一曲事件(仅iOS) */ - onPrev( - /** 用户在系统音乐播放面板点击上一曲事件的监听函数 */ - listener: OnPrevCallback - ): void - /** [BackgroundAudioManager.onSeeked(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onSeeked.html) - * - * 在插件中使用:支持 - * - * 监听背景音频完成跳转操作事件 */ - onSeeked( - /** 背景音频完成跳转操作事件的监听函数 */ - listener: OnSeekedCallback - ): void - /** [BackgroundAudioManager.onSeeking(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onSeeking.html) - * - * 在插件中使用:支持 - * - * 监听背景音频开始跳转操作事件 */ - onSeeking( - /** 背景音频开始跳转操作事件的监听函数 */ - listener: OnSeekingCallback - ): void - /** [BackgroundAudioManager.onStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onStop.html) - * - * 在插件中使用:支持 - * - * 监听背景音频停止事件 */ - onStop( - /** 背景音频停止事件的监听函数 */ - listener: InnerAudioContextOnStopCallback - ): void - /** [BackgroundAudioManager.onTimeUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onTimeUpdate.html) - * - * 在插件中使用:支持 - * - * 监听背景音频播放进度更新事件,只有小程序在前台时会回调。 */ - onTimeUpdate( - /** 背景音频播放进度更新事件的监听函数 */ - listener: OnTimeUpdateCallback - ): void - /** [BackgroundAudioManager.onWaiting(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onWaiting.html) - * - * 在插件中使用:支持 - * - * 监听音频加载中事件。当音频因为数据不足,需要停下来加载时会触发 */ - onWaiting( - /** 音频加载中事件的监听函数 */ - listener: OnWaitingCallback - ): void - /** [BackgroundAudioManager.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.pause.html) - * - * 在插件中使用:支持 - * - * 暂停音乐 */ - pause(): void - /** [BackgroundAudioManager.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.play.html) - * - * 在插件中使用:支持 - * - * 播放音乐 */ - play(): void - /** [BackgroundAudioManager.seek(number currentTime)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.seek.html) - * - * 在插件中使用:支持 - * - * 跳转到指定位置 */ - seek( - /** 跳转的位置,单位 s。精确到小数点后 3 位,即支持 ms 级别精确度 */ - currentTime: number - ): void - /** [BackgroundAudioManager.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.stop.html) - * - * 在插件中使用:支持 - * - * 停止音乐 */ - stop(): void - } - interface BeaconError { - /** 错误信息 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 0 | ok | 正常 | - * | 11000 | unsupport | 系统或设备不支持 | - * | 11001 | bluetooth service unavailable | 蓝牙服务不可用 | - * | 11002 | location service unavailable | 位置服务不可用 | - * | 11003 | already start | 已经开始搜索 | - * | 11004 | not startBeaconDiscovery | 还未开始搜索 | - * | 11005 | system error | 系统错误 | - * | 11006 | invalid data | 参数不正确 | */ errMsg: string - /** 错误码 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 0 | ok | 正常 | - * | 11000 | unsupport | 系统或设备不支持 | - * | 11001 | bluetooth service unavailable | 蓝牙服务不可用 | - * | 11002 | location service unavailable | 位置服务不可用 | - * | 11003 | already start | 已经开始搜索 | - * | 11004 | not startBeaconDiscovery | 还未开始搜索 | - * | 11005 | system error | 系统错误 | - * | 11006 | invalid data | 参数不正确 | */ errCode: number - } - interface BluetoothError { - /** 错误信息 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 0 | ok | 正常 | - * | -1 | already connect | 已连接 | - * | 10000 | not init | 未初始化蓝牙适配器 | - * | 10001 | not available | 当前蓝牙适配器不可用 | - * | 10002 | no device | 没有找到指定设备 | - * | 10003 | connection fail | 连接失败 | - * | 10004 | no service | 没有找到指定服务 | - * | 10005 | no characteristic | 没有找到指定特征 | - * | 10006 | no connection | 当前连接已断开 | - * | 10007 | property not support | 当前特征不支持此操作 | - * | 10008 | system error | 其余所有系统上报的异常 | - * | 10009 | system not support | Android 系统特有,系统版本低于 4.3 不支持 BLE | - * | 10012 | operate time out | 连接超时 | - * | 10013 | invalid_data | 连接 deviceId 为空或者是格式不正确 | */ errMsg: string - /** 错误码 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 0 | ok | 正常 | - * | -1 | already connect | 已连接 | - * | 10000 | not init | 未初始化蓝牙适配器 | - * | 10001 | not available | 当前蓝牙适配器不可用 | - * | 10002 | no device | 没有找到指定设备 | - * | 10003 | connection fail | 连接失败 | - * | 10004 | no service | 没有找到指定服务 | - * | 10005 | no characteristic | 没有找到指定特征 | - * | 10006 | no connection | 当前连接已断开 | - * | 10007 | property not support | 当前特征不支持此操作 | - * | 10008 | system error | 其余所有系统上报的异常 | - * | 10009 | system not support | Android 系统特有,系统版本低于 4.3 不支持 BLE | - * | 10012 | operate time out | 连接超时 | - * | 10013 | invalid_data | 连接 deviceId 为空或者是格式不正确 | */ errCode: number - } - interface CacheManager { - /** [Array.<string> CacheManager.addRules(Object rules)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.addRules.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 批量添加规则,规则写法可参考 [CacheManager.addRule](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.addRule.html)。 */ - addRules( - /** 规则列表 */ - rules: IAnyObject - ): string[] - /** [CacheManager.clearCaches()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.clearCaches.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 清空所有缓存。 */ - clearCaches(): void - /** [CacheManager.clearRules()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.clearRules.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 清空所有规则,同时会删除对应规则下所有缓存。 */ - clearRules(): void - /** [CacheManager.deleteCache(string id)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.deleteCache.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 删除缓存。 */ - deleteCache( - /** 缓存 id */ - id: string - ): void - /** [CacheManager.deleteCaches(Array.<string> ids)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.deleteCaches.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 批量删除缓存。 */ - deleteCaches( - /** 缓存 id 列表 */ - ids: string[] - ): void - /** [CacheManager.deleteRule(string id)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.deleteRule.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 删除规则,同时会删除对应规则下所有缓存。 */ - deleteRule( - /** 规则 id */ - id: string - ): void - /** [CacheManager.deleteRules(Array.<string> ids)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.deleteRules.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 批量删除规则,同时会删除对应规则下所有缓存。 */ - deleteRules( - /** 规则 id 列表 */ - ids: string[] - ): void - /** [CacheManager.off(string eventName, function handler)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.off.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 取消事件监听。 */ - off( - /** 事件名 */ - eventName: string, - /** 事件句柄 */ - handler: (...args: any[]) => any - ): void - /** [CacheManager.on(string eventName, function handler)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.on.html) -* -* 需要基础库: `2.24.0` -* -* 在插件中使用:不支持 -* -* 监听事件。 -* -* **** -* -* 这里 request 事件会提供 request 事件对象,用于做后续的处理;在 request 事件中需要返回一个 promise,用来生成 wx.request 请求的返回内容。 -* -* #### 示例代码 -* -* ```js -async function handler(evt) { - // evt.url - 请求 url - // evt.data - 请求参数 - // evt.method - 请求方法 - // evt.request - 原始 request 方法,返回一个 promise - - // if (evt.url === '/xxx') { - // // 如果有些请求仍然希望走到网络,则可以如下处理 - // const res = await evt.request() - // // res 即为网络请求返回 - // } - - return new Promsie((resolve, reject) => { - // do sth - if (data) { - // 这里 resolve 的 data 就会作为 wx.request 的 success 回调结果返回 - resolve(data) - } else { - // 这里 reject 的错误信息就会作为 wx.request 的 fail 回调结果返回 - reject('no data') - } - }) -} -cacheManager.on('request', handler) -``` */ - on( - /** 事件名 - * - * 参数 eventName 可选值: - * - 'request': 发生 wx.request 请求,只在缓存管理器开启阶段会触发; - * - 'enterWeakNetwork': 进入弱网/离线状态; - * - 'exitWeakNetwork': 离开弱网/离线状态; */ - eventName: 'request' | 'enterWeakNetwork' | 'exitWeakNetwork', - /** 事件句柄 */ - handler: (...args: any[]) => any - ): void - /** [CacheManager.start()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.start.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 开启缓存,仅在 mode 为 none 时生效,调用后缓存管理器的 state 会置为 1。 */ - start(): void - /** [CacheManager.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.stop.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 关闭缓存,仅在 mode 为 none 时生效,调用后缓存管理器的 state 会置为 0。 */ - stop(): void - /** [Object CacheManager.match(Object evt)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.match.html) -* -* 需要基础库: `2.24.0` -* -* 在插件中使用:不支持 -* -* 匹配命中的缓存规则,一般需要和 request 事件搭配使用。 -* -* **示例代码** -* -* ```js -function handler(evt) { - const cache = cacheManager.match(evt) - // 若有重复监听,则取第一个 handler 返回的 promise - return new Promise((resolve, reject) => { - if (cache.data) { - resolve(cache.data) - } else { - reject('no cache') - } - }) -} -cacheManager.on('request', handler) -``` */ - match( - /** request 事件对象 */ - evt: IAnyObject - ): MatchCache - /** [string CacheManager.addRule(Object rule)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.addRule.html) -* -* 需要基础库: `2.24.0` -* -* 在插件中使用:不支持 -* -* 添加规则。 -* -* **规则说明** -* -* 支持的规则写法有字符串、正则和对象三种: -* -* ### 字符串写法 -* -* 1. `addRule('/abc')`:纯 uri 串。 -* 2. `addRule('GET /abc'):带方法的 uri 串,除了匹配 uri 外,还会匹配请求方法。如例子中必须是 GET 方法请求才会被匹配。 -* 3. `addRule('/abc/:id'):带可变部分的 uri 串,id 可以是任意符合标准的字符串,表示这一段可以动态变化。比如 `/abc/123` 和 `/abc/321` 都会被匹配,而 `/abc/123/xxx` 因为多了一段,就不会被匹配。 -* 4. `addRule('/abc?aa'):带 query 参数的 uri 串,包含 aa 参数,值可以为任意值。比如 `/abc?aa=haha` 会被匹配,但是 `/abc` 就不会被匹配,因为缺少规则中声明的 aa 参数;不过如果请求是 `/abc?aa=haha&bb=123`,虽然多带了 bb 参数,但是因为包含了 aa 参数,所以也可以被匹配。 -* 5. `addRule('/abc?dd=haha'):带 query 参数的 uri 串,包含 dd 参数且值为 haha。比如 `/abc?dd=haha` 和 `/abc?dd=haha&bb=123` 会被匹配,而 `/abc?dd=123` 就不会被匹配,因为规则要求了 dd 参数的值。 -* -* > 以上写法中的 uri 串如果只有 path 部分,则会取全局 origin 进行补全。比如全局 origin 是 `https://weixin.qq.com`,而规则是 `/abc`,则会补全为 `https://weixin.qq.com/abc`。因此在前面例子中 `addRule('/abc')` 和 `addRule('https://weixin.qq.com/abc')` 的写法效果一致。所以一般情况下如果需要匹配的请求 origin 和全局 origin 一致,则规则中可忽略不写 orign。 -* -* ### 正则写法 -* -* 1. `addRule(/\/(abc|cba)$/ig)`:直接正则匹配请求的 uri,同时会比对请求 origin 和全局 origin 是否一致。 -* 2. `addRule(/^https:\/\/weixin.qq.com\/(abc|cba)$/ig)`:带有 orign 部分的正则表达式,则只匹配 uri,不再比对 origin。 -* -* ### 对象写法 -* -* 使用规则对象,可以更为详细的描述规则内容。(一般使用规则对象,是为了匹配请求参数) -* -* #### 规则对象: -* -* | 属性名 | 类型 | 默认值 | 备注 | -* |---|---|---|---| -* | id | string | | 规则 id,如果不填则会由基础库生成 | -* | method | string | | 请求方法,可选值 GET/POST/PATCH/PUT/DELETE,如果为空则表示前面提到的所有方法都能被匹配到 | -* | url | any | 必填 | uri 匹配规则,可参考规则字符串写法和正则写法 | -* | maxAge | number | 7 * 24 * 60 * 60 * 1000 | 缓存有效时间,单位为 ms,不填则默认取缓存管理器全局的缓存有效时间 | -* | dataSchema | Array\ | | 匹配请求参数 | -* -* 其中,dataSchema 用来匹配对象类型的请求参数(比如 wx.request 的 data),默认可以不填,即不做参数匹配。 -* -* dataSchema 的类型是一个 DataRule 对象数组,一个 DataRule 对象描述一个参数,比如一个 wx.request 请求的 data 是 `{a: 123, b: 'haha', c: true}`,你想要用一条规则来匹配其中的 a 和 b 参数,如果 a 是数字且 b 是字符串就能命中该规则,那么就需要在 dataSchema 中补充两个 DataRule 对象,即 `[{name: 'a', schema: {type: 'number'}}, {name: 'b', schema: {type: 'string'}}]`。 -* -* #### DataRule 对象: -* -* | 属性名 | 类型 | 默认值 | 备注 | -* |---|---|---|---| -* | name | string | | 需要匹配的参数名 | -* | schema | DataSchema/Array\ | 需要匹配的参数模式,支持数组,表示该参数值有多种模式 | -* -* name 表示要匹配的参数名,schema 为 DataSchema 对象,用来描述该参数的类型和值。 -* -* 一个 DataRule 对象也可以匹配可能拥有多种类型的参数,所以 schema 也支持为 DataSchema 对象数组。比如上述例子中,希望匹配的 a 参数必须是数值或者字符串,那么可以这么写:`{name: 'a', schema: [{type: 'number'}, {type: 'string'}]}`。 -* -* #### DataSchema 对象: -* -* | 属性名 | 类型 | 默认值 | 备注 | -* |---|---|---|---| -* | type | string | | 需要匹配的 data 对象的参数类型,string、number、boolean、null、object、any(表示任意类型),同时支持数组模式(数组模式则在类型后面加 [],如 string[] 表示字符串数组) | -* | value | string/regexp/function/Array\ | | 需要匹配的 data 对象的参数值,当 type 为基本类型时,可以用 string/regexp 来匹配固定的值,也可以通过 function 来确定值是否匹配,如果传入的 type 是 object,那么表示需要嵌套匹配值是否正确,可以传入 Array | -* -* type 参数表示要匹配的参数类型,value 表示要匹配的参数值。其中 value 支持多种写法,不同写法有如下匹配方式: -* -* 1. 字符串写法:直接判值的字符串形式是否和给定字符串一样,比如 value 值为 `123`,就要求参数值必须为 123 才能与之匹配。 -* 2. 正则写法:直接判值的字符串形式是否能被正则匹配,比如 value 值为 `/\d+/ig`,就要求参数值必须为数字,如果参数值为 `abc` 则不会被匹配。 -* 3. 函数写法:在匹配时会调用用户传入的函数,交由用户判断是否匹配。 -* 4. DataRule 数组写法:当参数类型为对象时,那么字符串写法和正则写法就无法使用,需要传入 DataRule 数组来进行匹配,即通过嵌套 DataRule 数组的方式来匹配嵌套的对象。 -* -* ### 示例代码 -* -* ```js -const ruleId = cacheManager.addRule({ - id: 'haha-rule', - method: 'GET', - url: '/haha', - maxAge: 123455, - dataSchema: [ - // data 字段的匹配,默认为空,表示不匹配 - // 类型可以是:string、number、boolean、null、object、any(表示任意类型均可),以及这些类型的数组表示方式 - {name: 'aaa', schema: {type: 'string'}}, // 类型为 string - {name: 'bbb', schema: [{type: 'number'}, {type: 'string'}]}, // 类型为 number, string - {name: 'ccc', schema: {type: 'string', value: 'abc'}}, // 值为 abc - {name: 'ddd', schema: {type: 'string', value: /(abc|cba)/ig}}, // 值符合该正则匹配,如果该值不是字符串类型,则会被尝试转成字符串后再进行比较 - {name: 'ddd', schema: {type: 'string', value: val => val === '123'}}, // 传入函数来校验值 - {name: 'eee', schema: {type: 'object', value: [{ // 类型为对象,则通过嵌套的方式来逐层校验 - name: 'aaa', schema: {type: 'string'}, - // ... - // 嵌套 dataSchema,同上面的方式一样来匹配嵌套的对象 - }]}}, - {name: 'fff', schema: {type: 'string[]'}}, // 类型为 string 数组 - {name: 'ggg', schema: {type: 'any'}}, // 类型为任意类型 - {name: 'hhh', schema: {type: 'any[]'}}, // 类型为任意类型的数组 - }], -}) -``` -* -* ### 补充说明 -* -* 用户可以添加多条规则,每条规则都会去解析网络请求,然后判断是否命中规则。假设有多条规则命中,则取第一条命中的规则。 -* -* ### 缓存覆盖 -* -* 不同的网络请求也可能命中同一条规则,所以每条规则可能对应多个缓存。每条规则会有一个规则 id,每个缓存会有一个缓存 id,一个规则 id 可能对应多个缓存 id,而缓存管理器的缓存存储是基于缓存 id 标识的,如果两个不同的请求生成了同样的缓存 id,那么后发生的请求结果缓存会覆盖前者。因此使用时需要思考缓存的覆盖情况,目前缓存 id 生成方式如下: -* -* 1. 规则使用字符串写法:那么按 method + url + 规则中声明的 query 参数来生成缓存 id。 -* -* > 需要注意的是这里不使用真实请求中的 query 参数来生成缓存 id,而是使用规则中匹配到的 query 来生成缓存 id。比如规则是 `/abc?aa=123`,请求是 GET 方法的 `/abc?aa=123&bb=123`,那么就会基于 `GET /abc?aa=123` 来生成缓存 id。而规则里没有声明 `bb=123`,所以 bb 参数不会被纳入缓存 id 的生成基准。 -* -* 2. 规则使用正则写法:那么只按 method + url 生成缓存 id,不考虑 query 参数。 -* 3. 规则使用对象写法:如果规则对象中的 url 是字符串写法,那么按 method + url + 规则中声明的 query 参数 + 规则中 dataSchema 声明的请求参数来生成缓存 id;如果规则对象中的 url 是正则写法,那么按 method + url + 规则中 dataSchema 声明的请求参数来生成缓存 id。 -* -* > 生成缓存 id 时没有使用请求中完整的 query 参数或者请求参数来作为基准,是考虑到很多请求可能会带上 token 或时间戳等参数。因为此参数存在不确定性,会导致每次请求生成的缓存 id 都不同,进而导致缓存命中率下降,故采取规则中声明的 query 参数和 dataSchema 声明的请求参数来作为生成缓存 id 的基准。 */ - addRule( - /** 规则 */ - rule: IAnyObject - ): string - } - interface CameraContext { - /** [CameraContext.setZoom(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.setZoom.html) - * - * 需要基础库: `2.10.0` - * - * 在插件中使用:支持 - * - * 设置缩放级别 */ - setZoom(option: SetZoomOption): void - /** [CameraContext.startRecord(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.startRecord.html) - * - * 在插件中使用:支持 - * - * 开始录像 */ - startRecord(option: CameraContextStartRecordOption): void - /** [CameraContext.stopRecord(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.stopRecord.html) - * - * 在插件中使用:支持 - * - * 结束录像 */ - stopRecord(option: CameraContextStopRecordOption): void - /** [CameraContext.takePhoto(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.takePhoto.html) - * - * 在插件中使用:支持 - * - * 拍摄照片 */ - takePhoto(option: TakePhotoOption): void - /** [[CameraFrameListener](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraFrameListener.html) CameraContext.onCameraFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.onCameraFrame.html) -* -* 需要基础库: `2.7.0` -* -* 在插件中使用:不支持 -* -* 获取 Camera 实时帧数据 -* -* **** -* -* 注: 使用该接口需同时在 [camera](https://developers.weixin.qq.com/miniprogram/dev/component/camera.html) 组件属性中指定 frame-size。 -* -* **示例代码** -* -* ```js -const context = wx.createCameraContext() -const listener = context.onCameraFrame((frame) => { - console.log(frame.data instanceof ArrayBuffer, frame.width, frame.height) -}) -listener.start() -``` */ - onCameraFrame( - /** 回调函数 */ - callback: OnCameraFrameCallback - ): CameraFrameListener - } - interface CameraFrameListener { - /** [CameraFrameListener.start(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraFrameListener.start.html) - * - * 在插件中使用:不支持 - * - * 开始监听帧数据 */ - start(option?: CameraFrameListenerStartOption): void - /** [CameraFrameListener.stop(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraFrameListener.stop.html) - * - * 在插件中使用:不支持 - * - * 停止监听帧数据 */ - stop(option?: StopOption): void - } - interface Canvas { - /** [Canvas.cancelAnimationFrame(number requestID)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.cancelAnimationFrame.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 取消由 requestAnimationFrame 添加到计划中的动画帧请求。支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。 */ - cancelAnimationFrame(requestID: number): void - /** [[ImageData](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/ImageData.html) Canvas.createImageData()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.createImageData.html) - * - * 需要基础库: `2.9.0` - * - * 在插件中使用:支持 - * - * 创建一个 ImageData 对象。仅支持在 2D Canvas 中使用。 */ - createImageData(): ImageData - /** [[Image](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Image.html) Canvas.createImage()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.createImage.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 创建一个图片对象。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。 */ - createImage(): Image - /** [[Path2D](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Path2D.html) Canvas.createPath2D([Path2D](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Path2D.html) path)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.createPath2D.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 创建 Path2D 对象 */ - createPath2D( - /** [Path2D](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Path2D.html) */ - path: Path2D - ): Path2D - /** [[RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) Canvas.getContext(string contextType)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.getContext.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 该方法返回 Canvas 的绘图上下文 - * - * **** - * - * 支持获取 2D 和 WebGL 绘图上下文 */ - getContext(contextType: string): any - /** [number Canvas.requestAnimationFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.requestAnimationFrame.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 在下次进行重绘时执行。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。 */ - requestAnimationFrame( - /** 执行的 callback */ - callback: (...args: any[]) => any - ): number - /** [string Canvas.toDataURL(string type, number encoderOptions)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.toDataURL.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。 */ - toDataURL( - /** 图片格式,默认为 image/png */ - type: string, - /** 在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。 */ - encoderOptions: number - ): string - } - interface CanvasContext { - /** [CanvasContext.arc(number x, number y, number r, number sAngle, number eAngle, boolean counterclockwise)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.arc.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 创建一条弧线。 -* -* - 创建一个圆可以指定起始弧度为 0,终止弧度为 2 * Math.PI。 -* - 用 `stroke` 或者 `fill` 方法来在 `canvas` 中画弧线。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -// Draw coordinates -ctx.arc(100, 75, 50, 0, 2 * Math.PI) -ctx.setFillStyle('#EEEEEE') -ctx.fill() - -ctx.beginPath() -ctx.moveTo(40, 75) -ctx.lineTo(160, 75) -ctx.moveTo(100, 15) -ctx.lineTo(100, 135) -ctx.setStrokeStyle('#AAAAAA') -ctx.stroke() - -ctx.setFontSize(12) -ctx.setFillStyle('black') -ctx.fillText('0', 165, 78) -ctx.fillText('0.5*PI', 83, 145) -ctx.fillText('1*PI', 15, 78) -ctx.fillText('1.5*PI', 83, 10) - -// Draw points -ctx.beginPath() -ctx.arc(100, 75, 2, 0, 2 * Math.PI) -ctx.setFillStyle('lightgreen') -ctx.fill() - -ctx.beginPath() -ctx.arc(100, 25, 2, 0, 2 * Math.PI) -ctx.setFillStyle('blue') -ctx.fill() - -ctx.beginPath() -ctx.arc(150, 75, 2, 0, 2 * Math.PI) -ctx.setFillStyle('red') -ctx.fill() - -// Draw arc -ctx.beginPath() -ctx.arc(100, 75, 50, 0, 1.5 * Math.PI) -ctx.setStrokeStyle('#333333') -ctx.stroke() - -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/arc.png) -* -* 针对 arc(100, 75, 50, 0, 1.5 * Math.PI)的三个关键坐标如下: -* -* - 绿色: 圆心 (100, 75) -* - 红色: 起始弧度 (0) -* - 蓝色: 终止弧度 (1.5 * Math.PI) */ - arc( - /** 圆心的 x 坐标 */ - x: number, - /** 圆心的 y 坐标 */ - y: number, - /** 圆的半径 */ - r: number, - /** 起始弧度,单位弧度(在3点钟方向) */ - sAngle: number, - /** 终止弧度 */ - eAngle: number, - /** 弧度的方向是否是逆时针 */ - counterclockwise?: boolean - ): void - /** [CanvasContext.arcTo(number x1, number y1, number x2, number y2, number radius)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.arcTo.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 - * - * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** - * - * 根据控制点和半径绘制圆弧路径。 */ - arcTo( - /** 第一个控制点的 x 轴坐标 */ - x1: number, - /** 第一个控制点的 y 轴坐标 */ - y1: number, - /** 第二个控制点的 x 轴坐标 */ - x2: number, - /** 第二个控制点的 y 轴坐标 */ - y2: number, - /** 圆弧的半径 */ - radius: number - ): void - /** [CanvasContext.beginPath()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.beginPath.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 开始创建一个路径。需要调用 `fill` 或者 `stroke` 才会使用路径进行填充或描边 -* -* - 在最开始的时候相当于调用了一次 `beginPath`。 -* - 同一个路径内的多次 `setFillStyle`、`setStrokeStyle`、`setLineWidth`等设置,以最后一次设置为准。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -// begin path -ctx.rect(10, 10, 100, 30) -ctx.setFillStyle('yellow') -ctx.fill() - -// begin another path -ctx.beginPath() -ctx.rect(10, 40, 100, 30) - -// only fill this rect, not in current path -ctx.setFillStyle('blue') -ctx.fillRect(10, 70, 100, 30) - -ctx.rect(10, 100, 100, 30) - -// it will fill current path -ctx.setFillStyle('red') -ctx.fill() -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/fill-path.png) */ - beginPath(): void - /** [CanvasContext.bezierCurveTo(number cp1x, number cp1y, number cp2x, number cp2y, number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.bezierCurveTo.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 创建三次方贝塞尔曲线路径。曲线的起始点为路径中前一个点。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -// Draw points -ctx.beginPath() -ctx.arc(20, 20, 2, 0, 2 * Math.PI) -ctx.setFillStyle('red') -ctx.fill() - -ctx.beginPath() -ctx.arc(200, 20, 2, 0, 2 * Math.PI) -ctx.setFillStyle('lightgreen') -ctx.fill() - -ctx.beginPath() -ctx.arc(20, 100, 2, 0, 2 * Math.PI) -ctx.arc(200, 100, 2, 0, 2 * Math.PI) -ctx.setFillStyle('blue') -ctx.fill() - -ctx.setFillStyle('black') -ctx.setFontSize(12) - -// Draw guides -ctx.beginPath() -ctx.moveTo(20, 20) -ctx.lineTo(20, 100) -ctx.lineTo(150, 75) - -ctx.moveTo(200, 20) -ctx.lineTo(200, 100) -ctx.lineTo(70, 75) -ctx.setStrokeStyle('#AAAAAA') -ctx.stroke() - -// Draw quadratic curve -ctx.beginPath() -ctx.moveTo(20, 20) -ctx.bezierCurveTo(20, 100, 200, 100, 200, 20) -ctx.setStrokeStyle('black') -ctx.stroke() - -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/bezier-curve.png) -* -* 针对 moveTo(20, 20) bezierCurveTo(20, 100, 200, 100, 200, 20) 的三个关键坐标如下: -* -* - 红色:起始点(20, 20) -* - 蓝色:两个控制点(20, 100) (200, 100) -* - 绿色:终止点(200, 20) */ - bezierCurveTo( - /** 第一个贝塞尔控制点的 x 坐标 */ - cp1x: number, - /** 第一个贝塞尔控制点的 y 坐标 */ - cp1y: number, - /** 第二个贝塞尔控制点的 x 坐标 */ - cp2x: number, - /** 第二个贝塞尔控制点的 y 坐标 */ - cp2y: number, - /** 结束点的 x 坐标 */ - x: number, - /** 结束点的 y 坐标 */ - y: number - ): void - /** [CanvasContext.clearRect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.clearRect.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 清除画布上在该矩形区域内的内容 -* -* **示例代码** -* -* clearRect 并非画一个白色的矩形在地址区域,而是清空,为了有直观感受,对 canvas 加了一层背景色。 -* ```html -* -* ``` -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.setFillStyle('red') -ctx.fillRect(0, 0, 150, 200) -ctx.setFillStyle('blue') -ctx.fillRect(150, 0, 150, 200) -ctx.clearRect(10, 10, 150, 75) -ctx.draw() -``` -* ![](@program/dev/image/canvas/clear-rect.png) */ - clearRect( - /** 矩形路径左上角的横坐标 */ - x: number, - /** 矩形路径左上角的纵坐标 */ - y: number, - /** 矩形路径的宽度 */ - width: number, - /** 矩形路径的高度 */ - height: number - ): void - /** [CanvasContext.clip()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.clip.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 从原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。可以在使用 `clip` 方法前通过使用 `save` 方法对当前画布区域进行保存,并在以后的任意时间通过`restore`方法对其进行恢复。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -wx.downloadFile({ - url: 'http://is5.mzstatic.com/image/thumb/Purple128/v4/75/3b/90/753b907c-b7fb-5877-215a-759bd73691a4/source/50x50bb.jpg', - success: function(res) { - ctx.save() - ctx.beginPath() - ctx.arc(50, 50, 25, 0, 2*Math.PI) - ctx.clip() - ctx.drawImage(res.tempFilePath, 25, 25) - ctx.restore() - ctx.draw() - } -}) -``` -* ![](@program/dev/image/canvas/clip.png) */ - clip(): void - /** [CanvasContext.closePath()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.closePath.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 关闭一个路径。会连接起点和终点。如果关闭路径后没有调用 `fill` 或者 `stroke` 并开启了新的路径,那之前的路径将不会被渲染。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.moveTo(10, 10) -ctx.lineTo(100, 10) -ctx.lineTo(100, 100) -ctx.closePath() -ctx.stroke() -ctx.draw() -``` -* ![](@program/dev/image/canvas/close-line.png) -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -// begin path -ctx.rect(10, 10, 100, 30) -ctx.closePath() - -// begin another path -ctx.beginPath() -ctx.rect(10, 40, 100, 30) - -// only fill this rect, not in current path -ctx.setFillStyle('blue') -ctx.fillRect(10, 70, 100, 30) - -ctx.rect(10, 100, 100, 30) - -// it will fill current path -ctx.setFillStyle('red') -ctx.fill() -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/close-path.png) */ - closePath(): void - /** [CanvasContext.createPattern(string image, string repetition)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createPattern.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 - * - * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** - * - * 对指定的图像创建模式的方法,可在指定的方向上重复元图像 */ - createPattern( - /** 重复的图像源,支持代码包路径和本地临时路径 (本地路径) */ - image: string, - /** 如何重复图像 - * - * 参数 repetition 可选值: - * - 'repeat': 水平竖直方向都重复; - * - 'repeat-x': 水平方向重复; - * - 'repeat-y': 竖直方向重复; - * - 'no-repeat': 不重复; */ - repetition: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat' - ): void - /** [CanvasContext.draw(boolean reserve, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.draw.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。 -* -* **示例代码** -* -* 第二次 draw() reserve 为 true。所以保留了上一次的绘制结果,在上下文设置的 fillStyle 'red' 也变成了默认的 'black'。 -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.setFillStyle('red') -ctx.fillRect(10, 10, 150, 100) -ctx.draw() -ctx.fillRect(50, 50, 150, 100) -ctx.draw(true) -``` -* ![](@program/dev/image/canvas/reserve.png) -* -* **示例代码** -* -* 第二次 draw() reserve 为 false。所以没有保留了上一次的绘制结果和在上下文设置的 fillStyle 'red'。 -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.setFillStyle('red') -ctx.fillRect(10, 10, 150, 100) -ctx.draw() -ctx.fillRect(50, 50, 150, 100) -ctx.draw() -``` -* ![](@program/dev/image/canvas/un-reserve.png) */ - draw( - /** 本次绘制是否接着上一次绘制。即 reserve 参数为 false,则在本次调用绘制之前 native 层会先清空画布再继续绘制;若 reserve 参数为 true,则保留当前画布上的内容,本次调用 drawCanvas 绘制的内容覆盖在上面,默认 false。 */ - reserve?: boolean, - /** 绘制完成后执行的回调函数 */ - callback?: (...args: any[]) => any - ): void - /** [CanvasContext.drawImage(string imageResource, number sx, number sy, number sWidth, number sHeight, number dx, number dy, number dWidth, number dHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 绘制图像到画布 -* -* **示例代码** -* -* 有三个版本的写法: -* -* - drawImage(imageResource, dx, dy) -* - drawImage(imageResource, dx, dy, dWidth, dHeight) -* - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持 -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -wx.chooseImage({ - success: function(res){ - ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100) - ctx.draw() - } -}) - -``` -* ![](@program/dev/image/canvas/draw-image.png) */ - drawImage( - /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */ - imageResource: string, - /** imageResource的左上角在目标 canvas 上 x 轴的位置 */ - dx: number, - /** imageResource的左上角在目标 canvas 上 y 轴的位置 */ - dy: number - ): void - /** [CanvasContext.drawImage(string imageResource, number sx, number sy, number sWidth, number sHeight, number dx, number dy, number dWidth, number dHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 绘制图像到画布 -* -* **示例代码** -* -* 有三个版本的写法: -* -* - drawImage(imageResource, dx, dy) -* - drawImage(imageResource, dx, dy, dWidth, dHeight) -* - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持 -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -wx.chooseImage({ - success: function(res){ - ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100) - ctx.draw() - } -}) - -``` -* ![](@program/dev/image/canvas/draw-image.png) */ - drawImage( - /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */ - imageResource: string, - /** imageResource的左上角在目标 canvas 上 x 轴的位置 */ - dx: number, - /** imageResource的左上角在目标 canvas 上 y 轴的位置 */ - dy: number, - /** 在目标画布上绘制imageResource的宽度,允许对绘制的imageResource进行缩放 */ - dWidth: number, - /** 在目标画布上绘制imageResource的高度,允许对绘制的imageResource进行缩放 */ - dHeight: number - ): void - /** [CanvasContext.drawImage(string imageResource, number sx, number sy, number sWidth, number sHeight, number dx, number dy, number dWidth, number dHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.drawImage.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 绘制图像到画布 -* -* **示例代码** -* -* 有三个版本的写法: -* -* - drawImage(imageResource, dx, dy) -* - drawImage(imageResource, dx, dy, dWidth, dHeight) -* - drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持 -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -wx.chooseImage({ - success: function(res){ - ctx.drawImage(res.tempFilePaths[0], 0, 0, 150, 100) - ctx.draw() - } -}) - -``` -* ![](@program/dev/image/canvas/draw-image.png) */ - drawImage( - /** 所要绘制的图片资源(网络图片要通过 getImageInfo / downloadFile 先下载) */ - imageResource: string, - /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的左上角 x 坐标 */ - sx: number, - /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的左上角 y 坐标 */ - sy: number, - /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的宽度 */ - sWidth: number, - /** 需要绘制到画布中的,imageResource的矩形(裁剪)选择框的高度 */ - sHeight: number, - /** imageResource的左上角在目标 canvas 上 x 轴的位置 */ - dx: number, - /** imageResource的左上角在目标 canvas 上 y 轴的位置 */ - dy: number, - /** 在目标画布上绘制imageResource的宽度,允许对绘制的imageResource进行缩放 */ - dWidth: number, - /** 在目标画布上绘制imageResource的高度,允许对绘制的imageResource进行缩放 */ - dHeight: number - ): void - /** [CanvasContext.fill()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fill.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 对当前路径中的内容进行填充。默认的填充色为黑色。 -* -* **示例代码** -* -* 如果当前路径没有闭合,fill() 方法会将起点和终点进行连接,然后填充。 -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.moveTo(10, 10) -ctx.lineTo(100, 10) -ctx.lineTo(100, 100) -ctx.fill() -ctx.draw() -``` -* -* fill() 填充的的路径是从 beginPath() 开始计算,但是不会将 fillRect() 包含进去。 -* -* ![](@program/dev/image/canvas/fill-line.png) -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -// begin path -ctx.rect(10, 10, 100, 30) -ctx.setFillStyle('yellow') -ctx.fill() - -// begin another path -ctx.beginPath() -ctx.rect(10, 40, 100, 30) - -// only fill this rect, not in current path -ctx.setFillStyle('blue') -ctx.fillRect(10, 70, 100, 30) - -ctx.rect(10, 100, 100, 30) - -// it will fill current path -ctx.setFillStyle('red') -ctx.fill() -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/fill-path.png) */ - fill(): void - /** [CanvasContext.fillRect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fillRect.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 填充一个矩形。用 [`setFillStyle`](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFillStyle.html) 设置矩形的填充色,如果没设置默认是黑色。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.setFillStyle('red') -ctx.fillRect(10, 10, 150, 75) -ctx.draw() -``` -* ![](@program/dev/image/canvas/fill-rect.png) */ - fillRect( - /** 矩形路径左上角的横坐标 */ - x: number, - /** 矩形路径左上角的纵坐标 */ - y: number, - /** 矩形路径的宽度 */ - width: number, - /** 矩形路径的高度 */ - height: number - ): void - /** [CanvasContext.fillText(string text, number x, number y, number maxWidth)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fillText.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 在画布上绘制被填充的文本 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.setFontSize(20) -ctx.fillText('Hello', 20, 20) -ctx.fillText('MINA', 100, 100) - -ctx.draw() -``` -* ![](@program/dev/image/canvas/text.png) */ - fillText( - /** 在画布上输出的文本 */ - text: string, - /** 绘制文本的左上角 x 坐标位置 */ - x: number, - /** 绘制文本的左上角 y 坐标位置 */ - y: number, - /** 需要绘制的最大宽度,可选 */ - maxWidth?: number - ): void - /** [CanvasContext.lineTo(number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.lineTo.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 增加一个新点,然后创建一条从上次指定点到目标点的线。用 `stroke` 方法来画线条 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.moveTo(10, 10) -ctx.rect(10, 10, 100, 50) -ctx.lineTo(110, 60) -ctx.stroke() -ctx.draw() -``` -* ![](@program/dev/image/canvas/line-to.png) */ - lineTo( - /** 目标位置的 x 坐标 */ - x: number, - /** 目标位置的 y 坐标 */ - y: number - ): void - /** [CanvasContext.moveTo(number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.moveTo.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 把路径移动到画布中的指定点,不创建线条。用 `stroke` 方法来画线条 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.moveTo(10, 10) -ctx.lineTo(100, 10) - -ctx.moveTo(10, 50) -ctx.lineTo(100, 50) -ctx.stroke() -ctx.draw() -``` -* ![](@program/dev/image/canvas/move-to.png) */ - moveTo( - /** 目标位置的 x 坐标 */ - x: number, - /** 目标位置的 y 坐标 */ - y: number - ): void - /** [CanvasContext.quadraticCurveTo(number cpx, number cpy, number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.quadraticCurveTo.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 创建二次贝塞尔曲线路径。曲线的起始点为路径中前一个点。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -// Draw points -ctx.beginPath() -ctx.arc(20, 20, 2, 0, 2 * Math.PI) -ctx.setFillStyle('red') -ctx.fill() - -ctx.beginPath() -ctx.arc(200, 20, 2, 0, 2 * Math.PI) -ctx.setFillStyle('lightgreen') -ctx.fill() - -ctx.beginPath() -ctx.arc(20, 100, 2, 0, 2 * Math.PI) -ctx.setFillStyle('blue') -ctx.fill() - -ctx.setFillStyle('black') -ctx.setFontSize(12) - -// Draw guides -ctx.beginPath() -ctx.moveTo(20, 20) -ctx.lineTo(20, 100) -ctx.lineTo(200, 20) -ctx.setStrokeStyle('#AAAAAA') -ctx.stroke() - -// Draw quadratic curve -ctx.beginPath() -ctx.moveTo(20, 20) -ctx.quadraticCurveTo(20, 100, 200, 20) -ctx.setStrokeStyle('black') -ctx.stroke() - -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/quadratic-curve-to.png) -* -* 针对 moveTo(20, 20) quadraticCurveTo(20, 100, 200, 20) 的三个关键坐标如下: -* -* - 红色:起始点(20, 20) -* - 蓝色:控制点(20, 100) -* - 绿色:终止点(200, 20) */ - quadraticCurveTo( - /** 贝塞尔控制点的 x 坐标 */ - cpx: number, - /** 贝塞尔控制点的 y 坐标 */ - cpy: number, - /** 结束点的 x 坐标 */ - x: number, - /** 结束点的 y 坐标 */ - y: number - ): void - /** [CanvasContext.rect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.rect.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 创建一个矩形路径。需要用 [`fill`](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fill.html) 或者 [`stroke`](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.stroke.html) 方法将矩形真正的画到 `canvas` 中 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.rect(10, 10, 150, 75) -ctx.setFillStyle('red') -ctx.fill() -ctx.draw() -``` -* ![](@program/dev/image/canvas/fill-rect.png) */ - rect( - /** 矩形路径左上角的横坐标 */ - x: number, - /** 矩形路径左上角的纵坐标 */ - y: number, - /** 矩形路径的宽度 */ - width: number, - /** 矩形路径的高度 */ - height: number - ): void - /** [CanvasContext.restore()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.restore.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 恢复之前保存的绘图上下文。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -// save the default fill style -ctx.save() -ctx.setFillStyle('red') -ctx.fillRect(10, 10, 150, 100) - -// restore to the previous saved state -ctx.restore() -ctx.fillRect(50, 50, 150, 100) - -ctx.draw() -``` -* ![](@program/dev/image/canvas/save-restore.png) */ - restore(): void - /** [CanvasContext.rotate(number rotate)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.rotate.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 以原点为中心顺时针旋转当前坐标轴。多次调用旋转的角度会叠加。原点可以用 `translate` 方法修改。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.strokeRect(100, 10, 150, 100) -ctx.rotate(20 * Math.PI / 180) -ctx.strokeRect(100, 10, 150, 100) -ctx.rotate(20 * Math.PI / 180) -ctx.strokeRect(100, 10, 150, 100) - -ctx.draw() -``` -* ![](@program/dev/image/canvas/rotate.png) */ - rotate( - /** 旋转角度,以弧度计 degrees * Math.PI/180;degrees 范围为 0-360 */ - rotate: number - ): void - /** [CanvasContext.save()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.save.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 保存绘图上下文。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -// save the default fill style -ctx.save() -ctx.setFillStyle('red') -ctx.fillRect(10, 10, 150, 100) - -// restore to the previous saved state -ctx.restore() -ctx.fillRect(50, 50, 150, 100) - -ctx.draw() -``` -* ![](@program/dev/image/canvas/save-restore.png) */ - save(): void - /** [CanvasContext.scale(number scaleWidth, number scaleHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.scale.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 在调用后,之后创建的路径其横纵坐标会被缩放。多次调用倍数会相乘。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.strokeRect(10, 10, 25, 15) -ctx.scale(2, 2) -ctx.strokeRect(10, 10, 25, 15) -ctx.scale(2, 2) -ctx.strokeRect(10, 10, 25, 15) - -ctx.draw() -``` -* ![](@program/dev/image/canvas/scale.png) */ - scale( - /** 横坐标缩放的倍数 (1 = 100%,0.5 = 50%,2 = 200%) */ - scaleWidth: number, - /** 纵坐标轴缩放的倍数 (1 = 100%,0.5 = 50%,2 = 200%) */ - scaleHeight: number - ): void - /** [CanvasContext.setFillStyle(string|[CanvasGradient](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html) color)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFillStyle.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.fillStyle](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置填充色。 -* -* **代码示例** -* -* ```js -const ctx = wx.createCanvasContext('myCanvas') -ctx.setFillStyle('red') -ctx.fillRect(10, 10, 150, 75) -ctx.draw() -``` -* ![](@program/dev/image/canvas/fill-rect.png) */ - setFillStyle( - /** 填充的颜色,默认颜色为 black。 */ - color: string | CanvasGradient - ): void - /** [CanvasContext.setFontSize(number fontSize)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFontSize.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.font](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置字体的字号 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.setFontSize(20) -ctx.fillText('20', 20, 20) -ctx.setFontSize(30) -ctx.fillText('30', 40, 40) -ctx.setFontSize(40) -ctx.fillText('40', 60, 60) -ctx.setFontSize(50) -ctx.fillText('50', 90, 90) - -ctx.draw() -``` -* ![](@program/dev/image/canvas/font-size.png) */ - setFontSize( - /** 字体的字号 */ - fontSize: number - ): void - /** [CanvasContext.setGlobalAlpha(number alpha)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setGlobalAlpha.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.globalAlpha](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置全局画笔透明度。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.setFillStyle('red') -ctx.fillRect(10, 10, 150, 100) -ctx.setGlobalAlpha(0.2) -ctx.setFillStyle('blue') -ctx.fillRect(50, 50, 150, 100) -ctx.setFillStyle('yellow') -ctx.fillRect(100, 100, 150, 100) - -ctx.draw() -``` -* ![](@program/dev/image/canvas/global-alpha.png) */ - setGlobalAlpha( - /** 透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 */ - alpha: number - ): void - /** [CanvasContext.setLineCap(string lineCap)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineCap.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.lineCap](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置线条的端点样式 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.beginPath() -ctx.moveTo(10, 10) -ctx.lineTo(150, 10) -ctx.stroke() - -ctx.beginPath() -ctx.setLineCap('butt') -ctx.setLineWidth(10) -ctx.moveTo(10, 30) -ctx.lineTo(150, 30) -ctx.stroke() - -ctx.beginPath() -ctx.setLineCap('round') -ctx.setLineWidth(10) -ctx.moveTo(10, 50) -ctx.lineTo(150, 50) -ctx.stroke() - -ctx.beginPath() -ctx.setLineCap('square') -ctx.setLineWidth(10) -ctx.moveTo(10, 70) -ctx.lineTo(150, 70) -ctx.stroke() - -ctx.draw() -``` -* ![](@program/dev/image/canvas/line-cap.png) */ - setLineCap( - /** 线条的结束端点样式 - * - * 参数 lineCap 可选值: - * - 'butt': 向线条的每个末端添加平直的边缘。; - * - 'round': 向线条的每个末端添加圆形线帽。; - * - 'square': 向线条的每个末端添加正方形线帽。; */ - lineCap: 'butt' | 'round' | 'square' - ): void - /** [CanvasContext.setLineDash(Array.<number> pattern, number offset)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineDash.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.lineDashOffset](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置虚线样式。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.setLineDash([10, 20], 5); - -ctx.beginPath(); -ctx.moveTo(0,100); -ctx.lineTo(400, 100); -ctx.stroke(); - -ctx.draw() -``` -* ![](@program/dev/image/canvas/set-line-dash.png) */ - setLineDash( - /** 一组描述交替绘制线段和间距(坐标空间单位)长度的数字 */ - pattern: number[], - /** 虚线偏移量 */ - offset: number - ): void - /** [CanvasContext.setLineJoin(string lineJoin)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.lineJoin](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置线条的交点样式 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.beginPath() -ctx.moveTo(10, 10) -ctx.lineTo(100, 50) -ctx.lineTo(10, 90) -ctx.stroke() - -ctx.beginPath() -ctx.setLineJoin('bevel') -ctx.setLineWidth(10) -ctx.moveTo(50, 10) -ctx.lineTo(140, 50) -ctx.lineTo(50, 90) -ctx.stroke() - -ctx.beginPath() -ctx.setLineJoin('round') -ctx.setLineWidth(10) -ctx.moveTo(90, 10) -ctx.lineTo(180, 50) -ctx.lineTo(90, 90) -ctx.stroke() - -ctx.beginPath() -ctx.setLineJoin('miter') -ctx.setLineWidth(10) -ctx.moveTo(130, 10) -ctx.lineTo(220, 50) -ctx.lineTo(130, 90) -ctx.stroke() - -ctx.draw() -``` -* ![](@program/dev/image/canvas/line-join.png) */ - setLineJoin( - /** 线条的结束交点样式 - * - * 参数 lineJoin 可选值: - * - 'bevel': 斜角; - * - 'round': 圆角; - * - 'miter': 尖角; */ - lineJoin: 'bevel' | 'round' | 'miter' - ): void - /** [CanvasContext.setLineWidth(number lineWidth)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineWidth.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.lineWidth](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置线条的宽度 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.beginPath() -ctx.moveTo(10, 10) -ctx.lineTo(150, 10) -ctx.stroke() - -ctx.beginPath() -ctx.setLineWidth(5) -ctx.moveTo(10, 30) -ctx.lineTo(150, 30) -ctx.stroke() - -ctx.beginPath() -ctx.setLineWidth(10) -ctx.moveTo(10, 50) -ctx.lineTo(150, 50) -ctx.stroke() - -ctx.beginPath() -ctx.setLineWidth(15) -ctx.moveTo(10, 70) -ctx.lineTo(150, 70) -ctx.stroke() - -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/line-width.png) */ - setLineWidth( - /** 线条的宽度,单位px */ - lineWidth: number - ): void - /** [CanvasContext.setMiterLimit(number miterLimit)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setMiterLimit.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.miterLimit](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置最大斜接长度。斜接长度指的是在两条线交汇处内角和外角之间的距离。当 [CanvasContext.setLineJoin()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html) 为 miter 时才有效。超过最大倾斜长度的,连接处将以 lineJoin 为 bevel 来显示。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.beginPath() -ctx.setLineWidth(10) -ctx.setLineJoin('miter') -ctx.setMiterLimit(1) -ctx.moveTo(10, 10) -ctx.lineTo(100, 50) -ctx.lineTo(10, 90) -ctx.stroke() - -ctx.beginPath() -ctx.setLineWidth(10) -ctx.setLineJoin('miter') -ctx.setMiterLimit(2) -ctx.moveTo(50, 10) -ctx.lineTo(140, 50) -ctx.lineTo(50, 90) -ctx.stroke() - -ctx.beginPath() -ctx.setLineWidth(10) -ctx.setLineJoin('miter') -ctx.setMiterLimit(3) -ctx.moveTo(90, 10) -ctx.lineTo(180, 50) -ctx.lineTo(90, 90) -ctx.stroke() - -ctx.beginPath() -ctx.setLineWidth(10) -ctx.setLineJoin('miter') -ctx.setMiterLimit(4) -ctx.moveTo(130, 10) -ctx.lineTo(220, 50) -ctx.lineTo(130, 90) -ctx.stroke() - -ctx.draw() -``` -* ![](@program/dev/image/canvas/miter-limit.png) */ - setMiterLimit( - /** 最大斜接长度 */ - miterLimit: number - ): void - /** [CanvasContext.setShadow(number offsetX, number offsetY, number blur, string color)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setShadow.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.shadowOffsetX|CanvasContext.shadowOffsetY|CanvasContext.shadowColor|CanvasContext.shadowBlur](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设定阴影样式。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.setFillStyle('red') -ctx.setShadow(10, 50, 50, 'blue') -ctx.fillRect(10, 10, 150, 75) -ctx.draw() -``` -* ![](@program/dev/image/canvas/shadow.png) */ - setShadow( - /** 阴影相对于形状在水平方向的偏移,默认值为 0。 */ - offsetX: number, - /** 阴影相对于形状在竖直方向的偏移,默认值为 0。 */ - offsetY: number, - /** 阴影的模糊级别,数值越大越模糊。范围 0- 100。,默认值为 0。 */ - blur: number, - /** 阴影的颜色。默认值为 black。 */ - color: string - ): void - /** [CanvasContext.setStrokeStyle(string|[CanvasGradient](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html) color)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setStrokeStyle.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [1.9.90](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [CanvasContext.strokeStyle](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置描边颜色。 -* -* **代码示例** -* -* ```js -const ctx = wx.createCanvasContext('myCanvas') -ctx.setStrokeStyle('red') -ctx.strokeRect(10, 10, 150, 75) -ctx.draw() -``` -* ![](@program/dev/image/canvas/stroke-rect.png) */ - setStrokeStyle( - /** 描边的颜色,默认颜色为 black。 */ - color: string | CanvasGradient - ): void - /** [CanvasContext.setTextAlign(string align)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTextAlign.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置文字的对齐 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.setStrokeStyle('red') -ctx.moveTo(150, 20) -ctx.lineTo(150, 170) -ctx.stroke() - -ctx.setFontSize(15) -ctx.setTextAlign('left') -ctx.fillText('textAlign=left', 150, 60) - -ctx.setTextAlign('center') -ctx.fillText('textAlign=center', 150, 80) - -ctx.setTextAlign('right') -ctx.fillText('textAlign=right', 150, 100) - -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/set-text-align.png) */ - setTextAlign( - /** 文字的对齐方式 - * - * 参数 align 可选值: - * - 'left': 左对齐; - * - 'center': 居中对齐; - * - 'right': 右对齐; */ - align: 'left' | 'center' | 'right' - ): void - /** [CanvasContext.setTextBaseline(string textBaseline)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTextBaseline.html) -* -* 需要基础库: `1.4.0` -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 设置文字的竖直对齐 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.setStrokeStyle('red') -ctx.moveTo(5, 75) -ctx.lineTo(295, 75) -ctx.stroke() - -ctx.setFontSize(20) - -ctx.setTextBaseline('top') -ctx.fillText('top', 5, 75) - -ctx.setTextBaseline('middle') -ctx.fillText('middle', 50, 75) - -ctx.setTextBaseline('bottom') -ctx.fillText('bottom', 120, 75) - -ctx.setTextBaseline('normal') -ctx.fillText('normal', 200, 75) - -ctx.draw() -``` -* ![](@program/dev/image/canvas/set-text-baseline.png) */ - setTextBaseline( - /** 文字的竖直对齐方式 - * - * 参数 textBaseline 可选值: - * - 'top': 顶部对齐; - * - 'bottom': 底部对齐; - * - 'middle': 居中对齐; - * - 'normal': ; */ - textBaseline: 'top' | 'bottom' | 'middle' | 'normal' - ): void - /** [CanvasContext.setTransform(number scaleX, number skewX, number skewY, number scaleY, number translateX, number translateY)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTransform.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 - * - * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** - * - * 使用矩阵重新设置(覆盖)当前变换的方法 */ - setTransform( - /** 水平缩放 */ - scaleX: number, - /** 水平倾斜 */ - skewX: number, - /** 垂直倾斜 */ - skewY: number, - /** 垂直缩放 */ - scaleY: number, - /** 水平移动 */ - translateX: number, - /** 垂直移动 */ - translateY: number - ): void - /** [CanvasContext.stroke()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.stroke.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 画出当前路径的边框。默认颜色色为黑色。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.moveTo(10, 10) -ctx.lineTo(100, 10) -ctx.lineTo(100, 100) -ctx.stroke() -ctx.draw() -``` -* ![](@program/dev/image/canvas/stroke-line.png) -* -* stroke() 描绘的的路径是从 beginPath() 开始计算,但是不会将 strokeRect() 包含进去。 -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -// begin path -ctx.rect(10, 10, 100, 30) -ctx.setStrokeStyle('yellow') -ctx.stroke() - -// begin another path -ctx.beginPath() -ctx.rect(10, 40, 100, 30) - -// only stoke this rect, not in current path -ctx.setStrokeStyle('blue') -ctx.strokeRect(10, 70, 100, 30) - -ctx.rect(10, 100, 100, 30) - -// it will stroke current path -ctx.setStrokeStyle('red') -ctx.stroke() -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/stroke-path.png) */ - stroke(): void - /** [CanvasContext.strokeRect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.strokeRect.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 画一个矩形(非填充)。 用 [`setStrokeStyle`](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setStrokeStyle.html) 设置矩形线条的颜色,如果没设置默认是黑色。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') -ctx.setStrokeStyle('red') -ctx.strokeRect(10, 10, 150, 75) -ctx.draw() -``` -* ![](@program/dev/image/canvas/stroke-rect.png) */ - strokeRect( - /** 矩形路径左上角的横坐标 */ - x: number, - /** 矩形路径左上角的纵坐标 */ - y: number, - /** 矩形路径的宽度 */ - width: number, - /** 矩形路径的高度 */ - height: number - ): void - /** [CanvasContext.strokeText(string text, number x, number y, number maxWidth)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.strokeText.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 - * - * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** - * - * 给定的 (x, y) 位置绘制文本描边的方法 */ - strokeText( - /** 要绘制的文本 */ - text: string, - /** 文本起始点的 x 轴坐标 */ - x: number, - /** 文本起始点的 y 轴坐标 */ - y: number, - /** 需要绘制的最大宽度,可选 */ - maxWidth?: number - ): void - /** [CanvasContext.transform(number scaleX, number skewX, number skewY, number scaleY, number translateX, number translateY)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.transform.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 - * - * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** - * - * 使用矩阵多次叠加当前变换的方法 */ - transform( - /** 水平缩放 */ - scaleX: number, - /** 水平倾斜 */ - skewX: number, - /** 垂直倾斜 */ - skewY: number, - /** 垂直缩放 */ - scaleY: number, - /** 水平移动 */ - translateX: number, - /** 垂直移动 */ - translateY: number - ): void - /** [CanvasContext.translate(number x, number y)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.translate.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 对当前坐标系的原点 (0, 0) 进行变换。默认的坐标系原点为页面左上角。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -ctx.strokeRect(10, 10, 150, 100) -ctx.translate(20, 20) -ctx.strokeRect(10, 10, 150, 100) -ctx.translate(20, 20) -ctx.strokeRect(10, 10, 150, 100) - -ctx.draw() -``` -* -* ![](@program/dev/image/canvas/translate.png) */ - translate( - /** 水平坐标平移量 */ - x: number, - /** 竖直坐标平移量 */ - y: number - ): void - /** [Object CanvasContext.measureText(string text)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.measureText.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 - * - * @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** - * - * 测量文本尺寸信息。目前仅返回文本宽度。同步接口。 */ - measureText( - /** 要测量的文本 */ - text: string - ): TextMetrics - /** [[CanvasGradient](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html) CanvasContext.createCircularGradient(number x, number y, number r)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createCircularGradient.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 创建一个圆形的渐变颜色。起点在圆心,终点在圆环。返回的`CanvasGradient`对象需要使用 [CanvasGradient.addColorStop()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.addColorStop.html) 来指定渐变点,至少要两个。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -// Create circular gradient -const grd = ctx.createCircularGradient(75, 50, 50) -grd.addColorStop(0, 'red') -grd.addColorStop(1, 'white') - -// Fill with gradient -ctx.setFillStyle(grd) -ctx.fillRect(10, 10, 150, 80) -ctx.draw() -``` -* ![](@program/dev/image/canvas/circular-gradient.png) */ - createCircularGradient( - /** 圆心的 x 坐标 */ - x: number, - /** 圆心的 y 坐标 */ - y: number, - /** 圆的半径 */ - r: number - ): CanvasGradient - /** [[CanvasGradient](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.html) CanvasContext.createLinearGradient(number x0, number y0, number x1, number y1)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createLinearGradient.html) -* -* 在插件中使用:支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 创建一个线性的渐变颜色。返回的`CanvasGradient`对象需要使用 [CanvasGradient.addColorStop()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.addColorStop.html) 来指定渐变点,至少要两个。 -* -* **示例代码** -* -* ```javascript -const ctx = wx.createCanvasContext('myCanvas') - -// Create linear gradient -const grd = ctx.createLinearGradient(0, 0, 200, 0) -grd.addColorStop(0, 'red') -grd.addColorStop(1, 'white') - -// Fill with gradient -ctx.setFillStyle(grd) -ctx.fillRect(10, 10, 150, 80) -ctx.draw() -``` -* ![](@program/dev/image/canvas/linear-gradient.png) */ - createLinearGradient( - /** 起点的 x 坐标 */ - x0: number, - /** 起点的 y 坐标 */ - y0: number, - /** 终点的 x 坐标 */ - x1: number, - /** 终点的 y 坐标 */ - y1: number - ): CanvasGradient - } - interface CanvasGradient { - /** [CanvasGradient.addColorStop(number stop, string color)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasGradient.addColorStop.html) -* -* 在插件中使用:不支持 -* @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) 替换 -* -* @warning **CanvasContext 是旧版的接口,新版 [Canvas 2D](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 接口与 Web 一致** -* -* 添加颜色的渐变点。小于最小 stop 的部分会按最小 stop 的 color 来渲染,大于最大 stop 的部分会按最大 stop 的 color 来渲染 -* -* **示例代码** -* -* ```js -const ctx = wx.createCanvasContext('myCanvas') - -// Create circular gradient -const grd = ctx.createLinearGradient(30, 10, 120, 10) -grd.addColorStop(0, 'red') -grd.addColorStop(0.16, 'orange') -grd.addColorStop(0.33, 'yellow') -grd.addColorStop(0.5, 'green') -grd.addColorStop(0.66, 'cyan') -grd.addColorStop(0.83, 'blue') -grd.addColorStop(1, 'purple') - -// Fill with gradient -ctx.setFillStyle(grd) -ctx.fillRect(10, 10, 150, 80) -ctx.draw() -``` -* ![](@program/dev/image/canvas/color-stop.png) */ - addColorStop( - /** 表示渐变中开始与结束之间的位置,范围 0-1。 */ - stop: number, - /** 渐变点的颜色。 */ - color: string - ): void - } - interface CloseSyncError { - /** 错误信息 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | */ errMsg: string - /** 错误码 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | */ errCode: number - } - interface Console { - /** [console.debug()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.debug.html) - * - * 在插件中使用:不支持 - * - * 向调试面板中打印 debug 日志 */ - debug( - /** 日志内容,可以有任意多个。 */ - ...args: any[] - ): void - /** [console.error()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.error.html) - * - * 在插件中使用:不支持 - * - * 向调试面板中打印 error 日志 */ - error( - /** 日志内容,可以有任意多个。 */ - ...args: any[] - ): void - /** [console.group(string label)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.group.html) - * - * 在插件中使用:不支持 - * - * 在调试面板中创建一个新的分组。随后输出的内容都会被添加一个缩进,表示该内容属于当前分组。调用 [console.groupEnd](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.groupEnd.html)之后分组结束。 - * - * **注意** - * - * 仅在工具中有效,在 vConsole 中为空函数实现。 */ - group( - /** 分组标记,可选。 */ - label?: string - ): void - /** [console.groupEnd()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.groupEnd.html) - * - * 在插件中使用:不支持 - * - * 结束由 [console.group](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.group.html) 创建的分组 - * - * **注意** - * - * 仅在工具中有效,在 vConsole 中为空函数实现。 */ - groupEnd(): void - /** [console.info()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.info.html) - * - * 在插件中使用:不支持 - * - * 向调试面板中打印 info 日志 */ - info( - /** 日志内容,可以有任意多个。 */ - ...args: any[] - ): void - /** [console.log()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.log.html) - * - * 在插件中使用:不支持 - * - * 向调试面板中打印 log 日志 */ - log( - /** 日志内容,可以有任意多个。 */ - ...args: any[] - ): void - /** [console.warn()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/console.warn.html) - * - * 在插件中使用:不支持 - * - * 向调试面板中打印 warn 日志 */ - warn( - /** 日志内容,可以有任意多个。 */ - ...args: any[] - ): void - } - interface DownloadTask { - /** [DownloadTask.abort()](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.abort.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 中断下载任务 */ - abort(): void - /** [DownloadTask.offHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.offHeadersReceived.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:支持 -* -* 移除 HTTP Response Header 事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -DownloadTask.onHeadersReceived(listener) -DownloadTask.offHeadersReceived(listener) // 需传入与监听时同一个的函数对象 -``` */ - offHeadersReceived( - /** onHeadersReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffHeadersReceivedCallback - ): void - /** [DownloadTask.offProgressUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.offProgressUpdate.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:支持 -* -* 移除下载进度变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -DownloadTask.onProgressUpdate(listener) -DownloadTask.offProgressUpdate(listener) // 需传入与监听时同一个的函数对象 -``` */ - offProgressUpdate( - /** onProgressUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: DownloadTaskOffProgressUpdateCallback - ): void - /** [DownloadTask.onHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.onHeadersReceived.html) - * - * 需要基础库: `2.1.0` - * - * 在插件中使用:支持 - * - * 监听 HTTP Response Header 事件。会比请求完成事件更早 */ - onHeadersReceived( - /** HTTP Response Header 事件的监听函数 */ - listener: OnHeadersReceivedCallback - ): void - /** [DownloadTask.onProgressUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.onProgressUpdate.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 监听下载进度变化事件 */ - onProgressUpdate( - /** 下载进度变化事件的监听函数 */ - listener: DownloadTaskOnProgressUpdateCallback - ): void - } - interface EditorContext { - /** [EditorContext.blur(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.blur.html) - * - * 需要基础库: `2.8.3` - * - * 在插件中使用:支持 - * - * 编辑器失焦,同时收起键盘。 */ - blur(option?: BlurOption): void - /** [EditorContext.clear(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.clear.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 清空编辑器内容 */ - clear(option?: ClearOption): void - /** [EditorContext.format(string name, string value)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.format.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 修改样式 - * - * **** - * - * ## 支持设置的样式列表 - * | name | value | verson | - * | --------------------------------------------------------- | ------------------------------- | ------ | - * | bold | | 2.7.0 | - * | italic | | 2.7.0 | - * | underline | | 2.7.0 | - * | strike | | 2.7.0 | - * | ins | | 2.7.0 | - * | script | sub / super | 2.7.0 | - * | header | H1 / H2 / h3 / H4 / h5 / H6 | 2.7.0 | - * | align | left / center / right / justify | 2.7.0 | - * | direction | rtl | 2.7.0 | - * | indent | -1 / +1 | 2.7.0 | - * | list | ordered / bullet / check | 2.7.0 | - * | color | hex color | 2.7.0 | - * | backgroundColor | hex color | 2.7.0 | - * | margin/marginTop/marginBottom/marginLeft/marginRight | css style | 2.7.0 | - * | padding/paddingTop/paddingBottom/paddingLeft/paddingRight | css style | 2.7.0 | - * | font/fontSize/fontStyle/fontVariant/fontWeight/fontFamily | css style | 2.7.0 | - * | lineHeight | css style | 2.7.0 | - * | letterSpacing | css style | 2.7.0 | - * | textDecoration | css style | 2.7.0 | - * | textIndent | css style | 2.8.0 | - * | wordWrap | css style | 2.10.2 | - * | wordBreak | css style | 2.10.2 | - * | whiteSpace | css style | 2.10.2 | - * - * 对已经应用样式的选区设置会取消样式。css style 表示 css 中规定的允许值。 */ - format( - /** 属性 */ - name: string, - /** 值 */ - value?: string - ): void - /** [EditorContext.getContents(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.getContents.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 获取编辑器内容 */ - getContents(option?: GetContentsOption): void - /** [EditorContext.getSelectionText(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.getSelectionText.html) - * - * 需要基础库: `2.10.2` - * - * 在插件中使用:支持 - * - * 获取编辑器已选区域内的纯文本内容。当编辑器失焦或未选中一段区间时,返回内容为空。 */ - getSelectionText(option?: GetSelectionTextOption): void - /** [EditorContext.insertDivider(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.insertDivider.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 插入分割线 */ - insertDivider(option?: InsertDividerOption): void - /** [EditorContext.insertImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.insertImage.html) -* -* 需要基础库: `2.7.0` -* -* 在插件中使用:支持 -* -* 插入图片。 -* -* 地址为临时文件时,获取的编辑器html格式内容中 标签增加属性 data-local,delta 格式内容中图片 attributes 属性增加 data-local 字段,该值为传入的临时文件地址。 -* -* 开发者可选择在提交阶段上传图片到服务器,获取到网络地址后进行替换。替换时对于html内容应替换掉 的 src 值,对于 delta 内容应替换掉 `insert { image: abc }` 值。 -* -* **示例代码** -* -* ```javascript -this.editorCtx.insertImage({ - src: 'xx', - width: '100px', - height: '50px', - extClass: className -}) -``` */ - insertImage(option: InsertImageOption): void - /** [EditorContext.insertText(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.insertText.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 覆盖当前选区,设置一段文本 */ - insertText(option: InsertTextOption): void - /** [EditorContext.redo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.redo.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 恢复 */ - redo(option?: RedoOption): void - /** [EditorContext.removeFormat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.removeFormat.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 清除当前选区的样式 */ - removeFormat(option?: RemoveFormatOption): void - /** [EditorContext.scrollIntoView()](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.scrollIntoView.html) - * - * 需要基础库: `2.8.3` - * - * 在插件中使用:支持 - * - * 使得编辑器光标处滚动到窗口可视区域内。 */ - scrollIntoView(): void - /** [EditorContext.setContents(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.setContents.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 初始化编辑器内容,html和delta同时存在时仅delta生效 */ - setContents(option: SetContentsOption): void - /** [EditorContext.undo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.undo.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 撤销 */ - undo(option?: UndoOption): void - } - interface EntryList { - /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> EntryList.getEntries()](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/EntryList.getEntries.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 该方法返回当前列表中的所有性能数据 */ - getEntries(): PerformanceEntry[] - /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> EntryList.getEntriesByName(string name, string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/EntryList.getEntriesByName.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 获取当前列表中所有名称为 [name] 且类型为 [entryType] 的性能数据 */ - getEntriesByName( - name: string, - entryType?: string - ): PerformanceEntry[] - /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> EntryList.getEntriesByType(string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/EntryList.getEntriesByType.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 获取当前列表中所有类型为 [entryType] 的性能数据 */ - getEntriesByType(entryType: string): PerformanceEntry[] - } - interface EventChannel { - /** [EventChannel.emit(string eventName, any args)](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.emit.html) - * - * 需要基础库: `2.7.3` - * - * 在插件中使用:支持 - * - * 触发一个事件 */ - emit( - /** 事件名称 */ - eventName: string, - /** 事件参数 */ - ...args: any - ): void - /** [EventChannel.off(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.off.html) - * - * 需要基础库: `2.7.3` - * - * 在插件中使用:支持 - * - * 取消监听一个事件。给出第二个参数时,只取消给出的监听函数,否则取消所有监听函数 */ - off( - /** 事件名称 */ - eventName: string, - /** 事件监听函数 */ - fn: EventCallback - ): void - /** [EventChannel.on(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.on.html) - * - * 需要基础库: `2.7.3` - * - * 在插件中使用:支持 - * - * 持续监听一个事件 */ - on( - /** 事件名称 */ - eventName: string, - /** 事件监听函数 */ - fn: EventCallback - ): void - /** [EventChannel.once(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/route/EventChannel.once.html) - * - * 需要基础库: `2.7.3` - * - * 在插件中使用:支持 - * - * 监听一个事件一次,触发后失效 */ - once( - /** 事件名称 */ - eventName: string, - /** 事件监听函数 */ - fn: EventCallback - ): void - } - interface FileSystemManager { - /** [Array.<string> FileSystemManager.readdirSync(string dirPath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readdirSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.readdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readdir.html) 的同步版本 -* -* **注意事项 -* - readdir接口无法访问文件系统根路径(wxfile://)。 -* 示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.readdir({ - dirPath: `${wx.env.USER_DATA_PATH}/example`, - success(res) { - console.log(res.files) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.readdirSync(`${wx.env.USER_DATA_PATH}/example`) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - readdirSync( - /** 要读取的目录路径 (本地路径) */ - dirPath: string - ): string[] - /** [ArrayBuffer FileSystemManager.readCompressedFileSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readCompressedFileSync.html) -* -* 需要基础库: `2.21.1` -* -* 在插件中使用:不支持 -* -* 同步读取指定压缩类型的本地文件内容 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() - -// 异步接口 -fs.readCompressedFile({ - filePath: '${wx.env.USER_DATA_PATH}/hello.br', - compressionAlgorithm: 'br', - success(res) { - console.log(res.data) - }, - fail(res) { - console.log('readCompressedFile fail', res) - } -}) - -// 同步接口 -try { - const data = fs.readCompressedFileSync({ - filePath: '${wx.env.USER_DATA_PATH}/hello.br', - compressionAlgorithm: 'br', - }) - console.log(data) -} catch (err) { - console.log(err) -} -``` */ - readCompressedFileSync( - option: ReadCompressedFileSyncOption - ): ArrayBuffer - /** [FileSystemManager.access(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.access.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 判断文件/目录是否存在 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -// 判断文件/目录是否存在 -fs.access({ - path: `${wx.env.USER_DATA_PATH}/hello.txt`, - success(res) { - // 文件存在 - console.log(res) - }, - fail(res) { - // 文件不存在或其他错误 - console.error(res) - } -}) - -// 同步接口 -try { - fs.accessSync(`${wx.env.USER_DATA_PATH}/hello.txt`) -} catch(e) { - console.error(e) -} -``` */ - access(option: AccessOption): void - /** [FileSystemManager.accessSync(string path)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.accessSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.access](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.access.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -// 判断文件/目录是否存在 -fs.access({ - path: `${wx.env.USER_DATA_PATH}/hello.txt`, - success(res) { - // 文件存在 - console.log(res) - }, - fail(res) { - // 文件不存在或其他错误 - console.error(res) - } -}) - -// 同步接口 -try { - fs.accessSync(`${wx.env.USER_DATA_PATH}/hello.txt`) -} catch(e) { - console.error(e) -} -``` */ - accessSync( - /** 要判断是否存在的文件/目录路径 (本地路径) */ - path: string - ): void - /** [FileSystemManager.appendFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFile.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 在文件结尾追加内容 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() - -fs.appendFile({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - data: 'some text', - encoding: 'utf8', - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - fs.appendFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'some text', 'utf8') -} catch(e) { - console.error(e) -} -``` */ - appendFile(option: AppendFileOption): void - /** [FileSystemManager.appendFileSync(string filePath, string|ArrayBuffer data, string encoding)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFileSync.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.appendFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFile.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() - -fs.appendFile({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - data: 'some text', - encoding: 'utf8', - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - fs.appendFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'some text', 'utf8') -} catch(e) { - console.error(e) -} -``` */ - appendFileSync( - /** 要追加内容的文件路径 (本地路径) */ - filePath: string, - /** 要追加的文本或二进制数据 */ - data: string | ArrayBuffer, - /** 指定写入文件的字符编码 - * - * 参数 encoding 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - ): void - /** [FileSystemManager.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.close.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 关闭文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -// 打开文件 -fs.open({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+', - success(res) { - // 关闭文件 - fs.close({ - fd: res.fd - }) - } -}) -``` */ - close(option: FileSystemManagerCloseOption): void - /** [FileSystemManager.copyFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFile.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 复制文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.copyFile({ - srcPath: `${wx.env.USER_DATA_PATH}/hello.txt`, - destPath: `${wx.env.USER_DATA_PATH}/hello_copy.txt` - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - fs.copyFileSync( - `${wx.env.USER_DATA_PATH}/hello.txt`, - `${wx.env.USER_DATA_PATH}/hello_copy.txt` - ) -} catch(e) { - console.error(e) -} -``` */ - copyFile(option: CopyFileOption): void - /** [FileSystemManager.copyFileSync(string srcPath, string destPath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFileSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.copyFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFile.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.copyFile({ - srcPath: `${wx.env.USER_DATA_PATH}/hello.txt`, - destPath: `${wx.env.USER_DATA_PATH}/hello_copy.txt` - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - fs.copyFileSync( - `${wx.env.USER_DATA_PATH}/hello.txt`, - `${wx.env.USER_DATA_PATH}/hello_copy.txt` - ) -} catch(e) { - console.error(e) -} -``` */ - copyFileSync( - /** 源文件路径,支持本地路径 */ - srcPath: string, - /** 目标文件路径,支持本地路径 */ - destPath: string - ): void - /** [FileSystemManager.fstat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.fstat.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 获取文件的状态信息 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -// 打开文件 -fs.open({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+', - success(res) { - // 获取文件的状态信息 - fs.fstat({ - fd: res.fd, - success(res) { - console.log(res.stats) - } - }) - } -}) -``` */ - fstat(option: FstatOption): void - /** [FileSystemManager.ftruncate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.ftruncate.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 对文件内容进行截断操作 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -// 打开文件 -fs.open({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+', - success(res) { - // 对文件内容进行截断操作 - fs.ftruncate({ - fd: res.fd, - length: 10, // 从第10个字节开始截断文件 - success(res) { - console.log(res) - } - }) - } -}) -``` */ - ftruncate(option: FtruncateOption): void - /** [FileSystemManager.getFileInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getFileInfo.html) - * - * 在插件中使用:不支持 - * - * 获取该小程序下的 本地临时文件 或 本地缓存文件 信息 */ - getFileInfo(option: FileSystemManagerGetFileInfoOption): void - /** [FileSystemManager.getSavedFileList(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getSavedFileList.html) - * - * 在插件中使用:不支持 - * - * 获取该小程序下已保存的本地缓存文件列表 */ - getSavedFileList(option?: FileSystemManagerGetSavedFileListOption): void - /** [FileSystemManager.mkdir(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.mkdir.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 创建目录 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.mkdir({ - dirPath: `${wx.env.USER_DATA_PATH}/example`, - recursive: false - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - fs.mkdirSync(`${wx.env.USER_DATA_PATH}/example`, false) -} catch(e) { - console.error(e) -} -``` */ - mkdir(option: MkdirOption): void - /** [FileSystemManager.mkdirSync(string dirPath, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.mkdirSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.mkdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.mkdir.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.mkdir({ - dirPath: `${wx.env.USER_DATA_PATH}/example`, - recursive: false - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - fs.mkdirSync(`${wx.env.USER_DATA_PATH}/example`, false) -} catch(e) { - console.error(e) -} -``` */ - mkdirSync( - /** 创建的目录路径 (本地路径) */ - dirPath: string, - /** 需要基础库: `2.3.0` - * - * 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。 */ - recursive?: boolean - ): void - /** [FileSystemManager.open(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.open.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 打开文件,返回文件描述符 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.open({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+', - success(res) { - console.log(res.fd) - } -}) -``` */ - open(option: OpenOption): void - /** [FileSystemManager.read(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.read.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 读文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -const ab = new ArrayBuffer(1024) -// 打开文件 -fs.open({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+', - success(res) { - // 读取文件到 ArrayBuffer 中 - fs.read({ - fd: res.fd, - arrayBuffer: ab, - length: 10, - success(res) { - console.log(res) - } - }) - } -}) -``` */ - read(option: ReadOption): void - /** [FileSystemManager.readCompressedFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readCompressedFile.html) -* -* 需要基础库: `2.21.1` -* -* 在插件中使用:不支持 -* -* 读取指定压缩类型的本地文件内容 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() - -// 异步接口 -fs.readCompressedFile({ - filePath: '${wx.env.USER_DATA_PATH}/hello.br', - compressionAlgorithm: 'br', - success(res) { - console.log(res.data) - }, - fail(res) { - console.log('readCompressedFile fail', res) - } -}) - -// 同步接口 -const data = fs.readCompressedFileSync({ - filePath: '${wx.env.USER_DATA_PATH}/hello.br', - compressionAlgorithm: 'br', -}) -console.log(data) -``` */ - readCompressedFile(option: ReadCompressedFileOption): void - /** [FileSystemManager.readFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 读取本地文件内容。单个文件大小上限为100M。 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.readFile({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - encoding: 'utf8', - position: 0, - success(res) { - console.log(res.data) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.readFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'utf8', 0) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - readFile(option: ReadFileOption): void - /** [FileSystemManager.readZipEntry(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readZipEntry.html) -* -* 需要基础库: `2.17.3` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 读取压缩包内的文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -// 读取zip内某个或多个文件 -fs.readZipEntry({ - filePath: 'wxfile://from/to.zip', - entries: [{ - path: 'some_folder/my_file.txt', // zip内文件路径 - encoding: 'utf-8', // 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 - position: 0, // 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte - length: 10000, // 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte - }, { - path: 'other_folder/orther_file.txt', // zip内文件路径 - }], - success(res) { - console.log(res.entries) - // res.entries === { - // 'some_folder/my_file.txt': { - // errMsg: 'readZipEntry:ok', - // data: 'xxxxxx' - // }, - // 'other_folder/orther_file.txt': { - // data: (ArrayBuffer) - // } - // } - }, - fail(res) { - console.log(res.errMsg) - }, -}) - -// 读取zip内所有文件。允许指定统一的encoding。position、length则不再允许指定,分别默认为0和文件长度 -fs.readZipEntry({ - filePath: 'wxfile://from/to.zip', - entries: 'all' - encoding: 'utf-8', // 统一指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 - success(res) { - console.log(res.entries) - // res.entries === { - // 'some_folder/my_file.txt': { - // errMsg: 'readZipEntry:ok', - // data: 'xxxxxx' - // }, - // 'other_folder/orther_file.txt': { - // errMsg: 'readZipEntry:ok', - // data: 'xxxxxx' - // } - // } - }, - fail(res) { - console.log(res.errMsg) - }, -}) -``` */ - readZipEntry(option: ReadZipEntryOption): void - /** [FileSystemManager.readdir(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readdir.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 读取目录内文件列表 -* -* **注意事项 -* - readdir接口无法访问文件系统根路径(wxfile://)。 -* 示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.readdir({ - dirPath: `${wx.env.USER_DATA_PATH}/example`, - success(res) { - console.log(res.files) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.readdirSync(`${wx.env.USER_DATA_PATH}/example`) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - readdir(option: ReaddirOption): void - /** [FileSystemManager.removeSavedFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.removeSavedFile.html) - * - * 在插件中使用:不支持 - * - * 删除该小程序下已保存的本地缓存文件 */ - removeSavedFile(option: FileSystemManagerRemoveSavedFileOption): void - /** [FileSystemManager.rename(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rename.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 重命名文件。可以把文件从 oldPath 移动到 newPath -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.rename({ - oldPath: `${wx.env.USER_DATA_PATH}/hello.txt`, - newPath: `${wx.env.USER_DATA_PATH}/hello_new.txt`, - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.renameSync( - `${wx.env.USER_DATA_PATH}/hello.txt`, - `${wx.env.USER_DATA_PATH}/hello_new.txt` - ) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - rename(option: RenameOption): void - /** [FileSystemManager.renameSync(string oldPath, string newPath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.renameSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.rename](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rename.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.rename({ - oldPath: `${wx.env.USER_DATA_PATH}/hello.txt`, - newPath: `${wx.env.USER_DATA_PATH}/hello_new.txt`, - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.renameSync( - `${wx.env.USER_DATA_PATH}/hello.txt`, - `${wx.env.USER_DATA_PATH}/hello_new.txt` - ) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - renameSync( - /** 源文件路径,支持本地路径 */ - oldPath: string, - /** 新文件路径,支持本地路径 */ - newPath: string - ): void - /** [FileSystemManager.rmdir(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdir.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 删除目录 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.rmdir({ - dirPath: `${wx.env.USER_DATA_PATH}/example`, - recursive: false, - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.rmdirSync(`${wx.env.USER_DATA_PATH}/example`, false) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - rmdir(option: RmdirOption): void - /** [FileSystemManager.rmdirSync(string dirPath, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdirSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.rmdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdir.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.rmdir({ - dirPath: `${wx.env.USER_DATA_PATH}/example`, - recursive: false, - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.rmdirSync(`${wx.env.USER_DATA_PATH}/example`, false) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - rmdirSync( - /** 要删除的目录路径 (本地路径) */ - dirPath: string, - /** 需要基础库: `2.3.0` - * - * 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。 */ - recursive?: boolean - ): void - /** [FileSystemManager.saveFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFile.html) - * - * 在插件中使用:不支持 - * - * 保存临时文件到本地。此接口会移动临时文件,因此调用成功后,tempFilePath 将不可用。 */ - saveFile(option: FileSystemManagerSaveFileOption): void - /** [FileSystemManager.stat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.stat.html) - * - * 在插件中使用:需要基础库 `2.19.2` - * - * 获取文件 Stats 对象 */ - stat(option: StatOption): void - /** [FileSystemManager.truncate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.truncate.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 对文件内容进行截断操作 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.truncate({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - length: 10, // 从第10个字节开始截断 - success(res) { - console.log(res) - } -}) -``` */ - truncate(option: TruncateOption): void - /** [FileSystemManager.unlink(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlink.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 删除文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.unlink({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.unlinkSync(`${wx.env.USER_DATA_PATH}/hello.txt`) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - unlink(option: UnlinkOption): void - /** [FileSystemManager.unlinkSync(string filePath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlinkSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.unlink](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlink.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.unlink({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.unlinkSync(`${wx.env.USER_DATA_PATH}/hello.txt`) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - unlinkSync( - /** 要删除的文件路径 (本地路径) */ - filePath: string - ): void - /** [FileSystemManager.unzip(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unzip.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 解压文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.unzip({ - zipFilePath: `${wx.env.USER_DATA_PATH}/example.zip`, - targetPath: '${wx.env.USER_DATA_PATH}/example', - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) -``` */ - unzip(option: UnzipOption): void - /** [FileSystemManager.write(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.write.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 写入文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -// 打开文件 -fs.open({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+', - success(res) { - // 写入文件 - fs.write({ - fd: res.fd, - data: 'some text', - success(res) { - console.log(res.bytesWritten) - } - }) - } -}) -``` */ - write(option: WriteOption): void - /** [FileSystemManager.writeFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeFile.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 写文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.writeFile({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - data: 'some text or arrayBuffer', - encoding: 'utf8', - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.writeFileSync( - `${wx.env.USER_DATA_PATH}/hello.txt`, - 'some text or arrayBuffer', - 'utf8' - ) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - writeFile(option: WriteFileOption): void - /** [FileSystemManager.writeFileSync(string filePath, string|ArrayBuffer data, string encoding)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeFileSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.writeFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeFile.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.writeFile({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - data: 'some text or arrayBuffer', - encoding: 'utf8', - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.writeFileSync( - `${wx.env.USER_DATA_PATH}/hello.txt`, - 'some text or arrayBuffer', - 'utf8' - ) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - writeFileSync( - /** 要写入的文件路径 (本地路径) */ - filePath: string, - /** 要写入的文本或二进制数据 */ - data: string | ArrayBuffer, - /** 指定写入文件的字符编码 - * - * 参数 encoding 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1' - ): void - /** [[ReadResult](https://developers.weixin.qq.com/miniprogram/dev/api/file/ReadResult.html) FileSystemManager.readSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readSync.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 读文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -const ab = new ArrayBuffer(1024) -const fd = fs.openSync({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+' -}) -const res = fs.readSync({ - fd: fd, - arrayBuffer: ab, - length: 10 -}) -console.log(res) -``` */ - readSync(option: ReadSyncOption): ReadResult - /** [[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html) FileSystemManager.fstatSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.fstatSync.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 同步获取文件的状态信息 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -const fd = fs.openSync({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+' -}) -const stats = fs.fstatSync({fd: fd}) -console.log(stats) -``` */ - fstatSync(option: FstatSyncOption): Stats - /** [[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)|Array.<[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)> FileSystemManager.statSync(string path, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.statSync.html) - * - * 在插件中使用:需要基础库 `2.19.2` - * - * [FileSystemManager.stat](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.stat.html) 的同步版本 */ - statSync( - /** 文件/目录路径 (本地路径) */ - path: string, - /** 需要基础库: `2.3.0` - * - * 是否递归获取目录下的每个文件的 Stats 信息 */ - recursive?: boolean - ): Stats | Stats[] - /** [[WriteResult](https://developers.weixin.qq.com/miniprogram/dev/api/file/WriteResult.html) FileSystemManager.writeSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeSync.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 同步写入文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -const fd = fs.openSync({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+' -}) -const res = fs.writeSync({ - fd: fd, - data: 'some text' -}) -console.log(res.bytesWritten) -``` */ - writeSync(option: WriteSyncOption): WriteResult - /** [string FileSystemManager.openSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.openSync.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 同步打开文件,返回文件描述符 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -const fd = fs.openSync({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+' -}) -console.log(fd) -``` */ - openSync(option: OpenSyncOption): string - /** [string FileSystemManager.saveFileSync(string tempFilePath, string filePath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFileSync.html) - * - * 在插件中使用:不支持 - * - * [FileSystemManager.saveFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFile.html) 的同步版本 */ - saveFileSync( - /** 临时存储文件路径 (本地路径) */ - tempFilePath: string, - /** 要存储的文件路径 (本地路径) */ - filePath?: string - ): string - /** [string|ArrayBuffer FileSystemManager.readFileSync(string filePath, string encoding, number position, number length)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFileSync.html) -* -* 在插件中使用:需要基础库 `2.19.2` -* -* [FileSystemManager.readFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html) 的同步版本 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.readFile({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - encoding: 'utf8', - position: 0, - success(res) { - console.log(res.data) - }, - fail(res) { - console.error(res) - } -}) - -// 同步接口 -try { - const res = fs.readFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'utf8', 0) - console.log(res) -} catch(e) { - console.error(e) -} -``` */ - readFileSync( - /** 要读取的文件的路径 (本地路径) */ - filePath: string, - /** 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容 - * - * 参数 encoding 可选值: - * - 'ascii': ; - * - 'base64': ; - * - 'binary': ; - * - 'hex': ; - * - 'ucs2': 以小端序读取; - * - 'ucs-2': 以小端序读取; - * - 'utf16le': 以小端序读取; - * - 'utf-16le': 以小端序读取; - * - 'utf-8': ; - * - 'utf8': ; - * - 'latin1': ; */ - encoding?: - | 'ascii' - | 'base64' - | 'binary' - | 'hex' - | 'ucs2' - | 'ucs-2' - | 'utf16le' - | 'utf-16le' - | 'utf-8' - | 'utf8' - | 'latin1', - /** 需要基础库: `2.10.0` - * - * 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte */ - position?: number, - /** 需要基础库: `2.10.0` - * - * 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte */ - length?: number - ): string | ArrayBuffer - /** [undefined FileSystemManager.closeSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.closeSync.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 同步关闭文件 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -const fd = fs.openSync({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+' -}) - -// 关闭文件 -fs.closeSync({fd: fd}) -``` */ - closeSync(option: CloseSyncOption): undefined - /** [undefined FileSystemManager.ftruncateSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.ftruncateSync.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 对文件内容进行截断操作 -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -const fd = fs.openSync({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - flag: 'a+' -}) -fs.ftruncateSync({ - fd: fd, - length: 10 // 从第10个字节开始截断文件 -}) -``` */ - ftruncateSync(option: FtruncateSyncOption): undefined - /** [undefined FileSystemManager.truncateSync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.truncateSync.html) -* -* 需要基础库: `2.16.1` -* -* 在插件中使用:需要基础库 `2.19.2` -* -* 对文件内容进行截断操作 (truncate 的同步版本) -* -* **示例代码** -* -* ```js -const fs = wx.getFileSystemManager() -fs.truncateSync({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - length: 10, // 从第10个字节开始截断 -}) -``` */ - truncateSync(option: TruncateSyncOption): undefined - } - interface FstatSyncError { - /** 错误信息 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | - * | fail permission denied | 指定的 fd 路径没有读权限 | */ errMsg: string - /** 错误码 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | - * | fail permission denied | 指定的 fd 路径没有读权限 | */ errCode: number - } - interface FtruncateSyncError { - /** 错误信息 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | - * | fail permission denied | 指定的 fd 没有写权限 | - * | fail the maximum size of the file storage limit is exceeded | 存储空间不足 | - * | fail sdcard not mounted | android sdcard 挂载失败 | */ errMsg: string - /** 错误码 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | - * | fail permission denied | 指定的 fd 没有写权限 | - * | fail the maximum size of the file storage limit is exceeded | 存储空间不足 | - * | fail sdcard not mounted | android sdcard 挂载失败 | */ errCode: number - } - interface InnerAudioContext { - /** [InnerAudioContext.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.destroy.html) - * - * 在插件中使用:支持 - * - * 销毁当前实例 */ - destroy(): void - /** [InnerAudioContext.offCanplay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offCanplay.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频进入可以播放状态的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onCanplay(listener) -InnerAudioContext.offCanplay(listener) // 需传入与监听时同一个的函数对象 -``` */ - offCanplay( - /** onCanplay 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffCanplayCallback - ): void - /** [InnerAudioContext.offEnded(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offEnded.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频自然播放至结束的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onEnded(listener) -InnerAudioContext.offEnded(listener) // 需传入与监听时同一个的函数对象 -``` */ - offEnded( - /** onEnded 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffEndedCallback - ): void - /** [InnerAudioContext.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offError.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频播放错误事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onError(listener) -InnerAudioContext.offError(listener) // 需传入与监听时同一个的函数对象 -``` */ - offError( - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: InnerAudioContextOffErrorCallback - ): void - /** [InnerAudioContext.offPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offPause.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频暂停事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onPause(listener) -InnerAudioContext.offPause(listener) // 需传入与监听时同一个的函数对象 -``` */ - offPause( - /** onPause 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffPauseCallback - ): void - /** [InnerAudioContext.offPlay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offPlay.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频播放事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onPlay(listener) -InnerAudioContext.offPlay(listener) // 需传入与监听时同一个的函数对象 -``` */ - offPlay( - /** onPlay 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffPlayCallback - ): void - /** [InnerAudioContext.offSeeked(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offSeeked.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频完成跳转操作的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onSeeked(listener) -InnerAudioContext.offSeeked(listener) // 需传入与监听时同一个的函数对象 -``` */ - offSeeked( - /** onSeeked 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffSeekedCallback - ): void - /** [InnerAudioContext.offSeeking(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offSeeking.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频进行跳转操作的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onSeeking(listener) -InnerAudioContext.offSeeking(listener) // 需传入与监听时同一个的函数对象 -``` */ - offSeeking( - /** onSeeking 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffSeekingCallback - ): void - /** [InnerAudioContext.offStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offStop.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频停止事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onStop(listener) -InnerAudioContext.offStop(listener) // 需传入与监听时同一个的函数对象 -``` */ - offStop( - /** onStop 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffStopCallback - ): void - /** [InnerAudioContext.offTimeUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offTimeUpdate.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频播放进度更新事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onTimeUpdate(listener) -InnerAudioContext.offTimeUpdate(listener) // 需传入与监听时同一个的函数对象 -``` */ - offTimeUpdate( - /** onTimeUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffTimeUpdateCallback - ): void - /** [InnerAudioContext.offWaiting(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offWaiting.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:支持 -* -* 移除音频加载中事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InnerAudioContext.onWaiting(listener) -InnerAudioContext.offWaiting(listener) // 需传入与监听时同一个的函数对象 -``` */ - offWaiting( - /** onWaiting 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffWaitingCallback - ): void - /** [InnerAudioContext.onCanplay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onCanplay.html) - * - * 在插件中使用:支持 - * - * 监听音频进入可以播放状态的事件。但不保证后面可以流畅播放 */ - onCanplay( - /** 音频进入可以播放状态的事件的监听函数 */ - listener: OnCanplayCallback - ): void - /** [InnerAudioContext.onEnded(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onEnded.html) - * - * 在插件中使用:支持 - * - * 监听音频自然播放至结束的事件 */ - onEnded( - /** 音频自然播放至结束的事件的监听函数 */ - listener: OnEndedCallback - ): void - /** [InnerAudioContext.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onError.html) - * - * 在插件中使用:支持 - * - * 监听音频播放错误事件 - * - * **Tips** - * - * 1. errCode=100001 时,如若 errMsg 中有 INNERCODE -11828 ,请先检查 response header 是否缺少 Content-Length - * 2. errCode=100001 时,如若 errMsg 中有 systemErrCode:200333420,请检查文件编码格式和 fileExtension 是否一致 */ - onError( - /** 音频播放错误事件的监听函数 */ - listener: InnerAudioContextOnErrorCallback - ): void - /** [InnerAudioContext.onPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onPause.html) - * - * 在插件中使用:支持 - * - * 监听音频暂停事件 */ - onPause( - /** 音频暂停事件的监听函数 */ - listener: OnPauseCallback - ): void - /** [InnerAudioContext.onPlay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onPlay.html) - * - * 在插件中使用:支持 - * - * 监听音频播放事件 */ - onPlay( - /** 音频播放事件的监听函数 */ - listener: OnPlayCallback - ): void - /** [InnerAudioContext.onSeeked(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onSeeked.html) - * - * 在插件中使用:支持 - * - * 监听音频完成跳转操作的事件 */ - onSeeked( - /** 音频完成跳转操作的事件的监听函数 */ - listener: OnSeekedCallback - ): void - /** [InnerAudioContext.onSeeking(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onSeeking.html) - * - * 在插件中使用:支持 - * - * 监听音频进行跳转操作的事件 */ - onSeeking( - /** 音频进行跳转操作的事件的监听函数 */ - listener: OnSeekingCallback - ): void - /** [InnerAudioContext.onStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onStop.html) - * - * 在插件中使用:支持 - * - * 监听音频停止事件 */ - onStop( - /** 音频停止事件的监听函数 */ - listener: InnerAudioContextOnStopCallback - ): void - /** [InnerAudioContext.onTimeUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onTimeUpdate.html) - * - * 在插件中使用:支持 - * - * 监听音频播放进度更新事件 */ - onTimeUpdate( - /** 音频播放进度更新事件的监听函数 */ - listener: OnTimeUpdateCallback - ): void - /** [InnerAudioContext.onWaiting(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onWaiting.html) - * - * 在插件中使用:支持 - * - * 监听音频加载中事件。当音频因为数据不足,需要停下来加载时会触发 */ - onWaiting( - /** 音频加载中事件的监听函数 */ - listener: OnWaitingCallback - ): void - /** [InnerAudioContext.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.pause.html) - * - * 在插件中使用:支持 - * - * 暂停。暂停后的音频再播放会从暂停处开始播放 */ - pause(): void - /** [InnerAudioContext.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.play.html) - * - * 在插件中使用:支持 - * - * 播放 */ - play(): void - /** [InnerAudioContext.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.seek.html) - * - * 在插件中使用:支持 - * - * 跳转到指定位置 */ - seek( - /** 跳转的时间,单位 s。精确到小数点后 3 位,即支持 ms 级别精确度 */ - position: number - ): void - /** [InnerAudioContext.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.stop.html) - * - * 在插件中使用:支持 - * - * 停止。停止后的音频再播放会从头开始播放。 */ - stop(): void - } - interface IntersectionObserver { - /** [IntersectionObserver.disconnect()](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.disconnect.html) - * - * 在插件中使用:支持 - * - * 停止监听。回调函数将不再触发 */ - disconnect(): void - /** [IntersectionObserver.observe(string targetSelector, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.observe.html) - * - * 在插件中使用:支持 - * - * 指定目标节点并开始监听相交状态变化情况 */ - observe( - /** 选择器 */ - targetSelector: string, - /** 监听相交状态变化的回调函数 */ - callback: IntersectionObserverObserveCallback - ): void - /** [[IntersectionObserver](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.html) IntersectionObserver.relativeTo(string selector, Object margins)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.relativeTo.html) - * - * 在插件中使用:支持 - * - * 使用选择器指定一个节点,作为参照区域之一。 */ - relativeTo( - /** 选择器 */ - selector: string, - /** 用来扩展(或收缩)参照节点布局区域的边界 */ - margins?: Margins - ): IntersectionObserver - /** [[IntersectionObserver](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.html) IntersectionObserver.relativeToViewport(Object margins)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.relativeToViewport.html) -* -* 在插件中使用:支持 -* -* 指定页面显示区域作为参照区域之一 -* -* **示例代码** -* -* 下面的示例代码中,如果目标节点(用选择器 .target-class 指定)进入显示区域以下 100px 时,就会触发回调函数。 -* ```javascript -Page({ - onLoad: function(){ - wx.createIntersectionObserver().relativeToViewport({bottom: 100}).observe('.target-class', (res) => { - res.intersectionRatio // 相交区域占目标节点的布局区域的比例 - res.intersectionRect // 相交区域 - res.intersectionRect.left // 相交区域的左边界坐标 - res.intersectionRect.top // 相交区域的上边界坐标 - res.intersectionRect.width // 相交区域的宽度 - res.intersectionRect.height // 相交区域的高度 - }) - } -}) -``` */ - relativeToViewport( - /** 用来扩展(或收缩)参照节点布局区域的边界 */ - margins?: Margins - ): IntersectionObserver - } - interface InterstitialAd { - /** [InterstitialAd.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.destroy.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 销毁插屏广告实例。 */ - destroy(): void - /** [InterstitialAd.offClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offClose.html) -* -* 在插件中使用:不支持 -* -* 移除插屏广告关闭事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InterstitialAd.onClose(listener) -InterstitialAd.offClose(listener) // 需传入与监听时同一个的函数对象 -``` */ - offClose( - /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: UDPSocketOffCloseCallback - ): void - /** [InterstitialAd.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offError.html) -* -* 在插件中使用:不支持 -* -* 移除插屏错误事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InterstitialAd.onError(listener) -InterstitialAd.offError(listener) // 需传入与监听时同一个的函数对象 -``` */ - offError( - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: InterstitialAdOffErrorCallback - ): void - /** [InterstitialAd.offLoad(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offLoad.html) -* -* 在插件中使用:不支持 -* -* 移除插屏广告加载事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -InterstitialAd.onLoad(listener) -InterstitialAd.offLoad(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLoad( - /** onLoad 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLoadCallback - ): void - /** [InterstitialAd.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.onClose.html) - * - * 在插件中使用:不支持 - * - * 监听插屏广告关闭事件。 */ - onClose( - /** 插屏广告关闭事件的监听函数 */ - listener: UDPSocketOnCloseCallback - ): void - /** [InterstitialAd.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.onError.html) - * - * 在插件中使用:不支持 - * - * 监听插屏错误事件。 - * - * **错误码信息与解决方案表** - * - * 错误码是通过onError获取到的错误信息。调试期间,可以通过异常返回来捕获信息。 - * 在小程序发布上线之后,如果遇到异常问题,可以在[“运维中心“](https://mp.weixin.qq.com/)里面搜寻错误日志,还可以针对异常返回加上适当的监控信息。 - * - * | 代码 | 异常情况 | 理由 | 解决方案 | - * | ------ | -------------- | --------------- | -------------------------- | - * | 1000 | 后端错误调用失败 | 该项错误不是开发者的异常情况 | 一般情况下忽略一段时间即可恢复。 | - * | 1001 | 参数错误 | 使用方法错误 | 可以前往developers.weixin.qq.com确认具体教程(小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换。| - * | 1002 | 广告单元无效 | 可能是拼写错误、或者误用了其他APP的广告ID | 请重新前往mp.weixin.qq.com确认广告位ID。 | - * | 1003 | 内部错误 | 该项错误不是开发者的异常情况 | 一般情况下忽略一段时间即可恢复。| - * | 1004 | 无适合的广告 | 广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告 | 属于正常情况,且开发者需要针对这种情况做形态上的兼容。 | - * | 1005 | 广告组件审核中 | 你的广告正在被审核,无法展现广告 | 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。| - * | 1006 | 广告组件被驳回 | 你的广告审核失败,无法展现广告 | 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。| - * | 1007 | 广告组件被驳回 | 你的广告能力已经被封禁,封禁期间无法展现广告 | 请前往mp.weixin.qq.com确认小程序广告封禁状态。 | - * | 1008 | 广告单元已关闭 | 该广告位的广告能力已经被关闭 | 请前往mp.weixin.qq.com重新打开对应广告位的展现。| */ - onError( - /** 插屏错误事件的监听函数 */ - listener: InterstitialAdOnErrorCallback - ): void - /** [InterstitialAd.onLoad(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.onLoad.html) - * - * 在插件中使用:不支持 - * - * 监听插屏广告加载事件。 */ - onLoad( - /** 插屏广告加载事件的监听函数 */ - listener: OnLoadCallback - ): void - /** [Promise InterstitialAd.load()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.load.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 加载插屏广告。 */ - load(): Promise<any> - /** [Promise InterstitialAd.show()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.show.html) - * - * 在插件中使用:不支持 - * - * 显示插屏广告。 - * - * **错误码信息表** - * - * 如果插屏广告显示失败,InterstitialAd.show() 方法会返回一个rejected Promise,开发者可以获取到错误码及对应的错误信息。 - * - * | 代码 | 异常情况 | 理由 | - * | ------ | -------------- | -------------------------- | - * | 2001 | 触发频率限制 | 小程序启动一定时间内不允许展示插屏广告 | - * | 2002 | 触发频率限制 | 距离小程序插屏广告或者激励视频广告上次播放时间间隔不足,不允许展示插屏广告 | - * | 2003 | 触发频率限制 | 当前正在播放激励视频广告或者插屏广告,不允许再次展示插屏广告 | - * | 2004 | 广告渲染失败 | 该项错误不是开发者的异常情况,或因小程序页面切换导致广告渲染失败 | - * | 2005 | 广告调用异常 | 插屏广告实例不允许跨页面调用 | */ - show(): Promise<any> - } - interface IsoDep { - /** [IsoDep.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.close.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 断开连接 */ - close(option?: NdefCloseOption): void - /** [IsoDep.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.connect.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 连接 NFC 标签 */ - connect(option?: NdefConnectOption): void - /** [IsoDep.getHistoricalBytes(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.getHistoricalBytes.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取复位信息 */ - getHistoricalBytes(option?: GetHistoricalBytesOption): void - /** [IsoDep.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.getMaxTransceiveLength.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取最大传输长度 */ - getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void - /** [IsoDep.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.isConnected.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 检查是否已连接 */ - isConnected(option?: IsConnectedOption): void - /** [IsoDep.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.setTimeout.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 设置超时时间 */ - setTimeout(option: SetTimeoutOption): void - /** [IsoDep.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.transceive.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 发送数据 */ - transceive(option: TransceiveOption): void - } - interface Join1v1ChatError { - /** 错误信息 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | -20000 | not open 1v1 Chat | 未开通双人通话 | - * | -20001 | device not support | 当前设备不支持 | - * | -20002 | on call | 正在通话中 | - * | -20003 | occupied by other miniprogram | 其它小程序正在通话中 | - * | -30000 | system error | 内部系统错误 | - * | -30001 | wechat has no camera authorization | 微信缺失相机权限 | - * | -30002 | wechat has no record authorization | 微信缺失录音权限 | - * | -30003 | miniprogram has no record authorization | 小程序缺失录音权限 | - * | -30004 | miniprogram has no camera authorization | 小程序缺失相机权限 | - * | -1 | | 当前已在房间内 | - * | -2 | | 录音设备被占用,可能是当前正在使用微信内语音通话或系统通话 | - * | -3 | | 加入会话期间退出(可能是用户主动退出,或者退后台、来电等原因),因此加入失败 | - * | -1000 | | 系统错误 | */ errMsg: string - /** 错误码 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | -20000 | not open 1v1 Chat | 未开通双人通话 | - * | -20001 | device not support | 当前设备不支持 | - * | -20002 | on call | 正在通话中 | - * | -20003 | occupied by other miniprogram | 其它小程序正在通话中 | - * | -30000 | system error | 内部系统错误 | - * | -30001 | wechat has no camera authorization | 微信缺失相机权限 | - * | -30002 | wechat has no record authorization | 微信缺失录音权限 | - * | -30003 | miniprogram has no record authorization | 小程序缺失录音权限 | - * | -30004 | miniprogram has no camera authorization | 小程序缺失相机权限 | - * | -1 | | 当前已在房间内 | - * | -2 | | 录音设备被占用,可能是当前正在使用微信内语音通话或系统通话 | - * | -3 | | 加入会话期间退出(可能是用户主动退出,或者退后台、来电等原因),因此加入失败 | - * | -1000 | | 系统错误 | */ errCode: number - } - interface JoinVoIPChatError { - /** 错误信息 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | -1 | 当前已在房间内 | | - * | -2 | 录音设备被占用,可能是当前正在使用微信内语音通话或系统通话 | | - * | -3 | 加入会话期间退出(可能是用户主动退出,或者退后台、来电等原因),因此加入失败 | | - * | -1000 | 系统错误 | | */ errMsg: string - /** 错误码 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | -1 | 当前已在房间内 | | - * | -2 | 录音设备被占用,可能是当前正在使用微信内语音通话或系统通话 | | - * | -3 | 加入会话期间退出(可能是用户主动退出,或者退后台、来电等原因),因此加入失败 | | - * | -1000 | 系统错误 | | */ errCode: number - } - interface LivePlayerContext { - /** [LivePlayerContext.exitFullScreen(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.exitFullScreen.html) - * - * 在插件中使用:支持 - * - * 退出全屏 */ - exitFullScreen(option?: ExitFullScreenOption): void - /** [LivePlayerContext.exitPictureInPicture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.exitPictureInPicture.html) - * - * 在插件中使用:支持 - * - * 退出小窗,该方法可在任意页面调用 */ - exitPictureInPicture(option?: ExitPictureInPictureOption): void - /** [LivePlayerContext.mute(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.mute.html) - * - * 在插件中使用:支持 - * - * 静音 */ - mute(option?: MuteOption): void - /** [LivePlayerContext.pause(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.pause.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * - * 暂停 */ - pause(option?: PauseOption): void - /** [LivePlayerContext.play(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.play.html) - * - * 在插件中使用:支持 - * - * 播放 */ - play(option?: PlayOption): void - /** [LivePlayerContext.requestFullScreen(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.requestFullScreen.html) - * - * 在插件中使用:支持 - * - * 进入全屏 */ - requestFullScreen( - option: LivePlayerContextRequestFullScreenOption - ): void - /** [LivePlayerContext.requestPictureInPicture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.requestPictureInPicture.html) - * - * 需要基础库: `2.15.0` - * - * 在插件中使用:支持 - * - * 进入小窗 */ - requestPictureInPicture(option?: RequestPictureInPictureOption): void - /** [LivePlayerContext.resume(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.resume.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * - * 恢复 */ - resume(option?: ResumeOption): void - /** [LivePlayerContext.snapshot(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.snapshot.html) - * - * 需要基础库: `2.7.1` - * - * 在插件中使用:支持 - * - * 截图 */ - snapshot(option: LivePlayerContextSnapshotOption): void - /** [LivePlayerContext.stop(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.stop.html) - * - * 在插件中使用:支持 - * - * 停止 */ - stop(option?: StopOption): void - } - interface LivePusherContext { - /** [LivePusherContext.exitPictureInPicture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.exitPictureInPicture.html) - * - * 需要基础库: `2.25.0` - * - * 在插件中使用:支持 - * - * 退出小窗,该方法可在任意页面调用 */ - exitPictureInPicture(option?: ExitPictureInPictureOption): void - /** [LivePusherContext.pause(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.pause.html) - * - * 在插件中使用:支持 - * - * 暂停推流 */ - pause(option?: PauseOption): void - /** [LivePusherContext.pauseBGM(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.pauseBGM.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:支持 - * - * 暂停背景音 */ - pauseBGM(option?: PauseBGMOption): void - /** [LivePusherContext.playBGM(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.playBGM.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:支持 - * - * 播放背景音 */ - playBGM(option: PlayBGMOption): void - /** [LivePusherContext.resume(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.resume.html) - * - * 在插件中使用:支持 - * - * 恢复推流 */ - resume(option?: ResumeOption): void - /** [LivePusherContext.resumeBGM(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.resumeBGM.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:支持 - * - * 恢复背景音 */ - resumeBGM(option?: ResumeBGMOption): void - /** [LivePusherContext.sendMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.sendMessage.html) - * - * 需要基础库: `2.10.0` - * - * 在插件中使用:支持 - * - * 发送SEI消息 */ - sendMessage(option: SendMessageOption): void - /** [LivePusherContext.setBGMVolume(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.setBGMVolume.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:支持 - * - * 设置背景音音量 */ - setBGMVolume(option: SetBGMVolumeOption): void - /** [LivePusherContext.setMICVolume(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.setMICVolume.html) - * - * 需要基础库: `2.10.0` - * - * 在插件中使用:支持 - * - * 设置麦克风音量 */ - setMICVolume(option: SetMICVolumeOption): void - /** [LivePusherContext.snapshot(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.snapshot.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:支持 - * - * 快照 */ - snapshot(option: LivePusherContextSnapshotOption): void - /** [LivePusherContext.start(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.start.html) - * - * 在插件中使用:支持 - * - * 开始推流,同时开启摄像头预览 */ - start(option?: LivePusherContextStartOption): void - /** [LivePusherContext.startPreview(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.startPreview.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 开启摄像头预览 */ - startPreview(option?: StartPreviewOption): void - /** [LivePusherContext.stop(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.stop.html) - * - * 在插件中使用:支持 - * - * 停止推流,同时停止摄像头预览 */ - stop(option?: StopOption): void - /** [LivePusherContext.stopBGM(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.stopBGM.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:支持 - * - * 停止背景音 */ - stopBGM(option?: StopBGMOption): void - /** [LivePusherContext.stopPreview(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.stopPreview.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:支持 - * - * 关闭摄像头预览 */ - stopPreview(option?: StopPreviewOption): void - /** [LivePusherContext.switchCamera(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.switchCamera.html) - * - * 在插件中使用:支持 - * - * 切换前后摄像头 */ - switchCamera(option?: SwitchCameraOption): void - /** [LivePusherContext.toggleTorch(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.toggleTorch.html) - * - * 需要基础库: `2.1.0` - * - * 在插件中使用:支持 - * - * 切换手电筒 */ - toggleTorch(option?: ToggleTorchOption): void - } - interface LogManager { - /** [LogManager.debug()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.debug.html) - * - * 在插件中使用:不支持 - * - * 写 debug 日志 */ - debug( - /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过100Kb */ - ...args: any[] - ): void - /** [LogManager.info()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.info.html) - * - * 在插件中使用:不支持 - * - * 写 info 日志 */ - info( - /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过100Kb */ - ...args: any[] - ): void - /** [LogManager.log()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.log.html) - * - * 在插件中使用:不支持 - * - * 写 log 日志 */ - log( - /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过100Kb */ - ...args: any[] - ): void - /** [LogManager.warn()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.warn.html) - * - * 在插件中使用:不支持 - * - * 写 warn 日志 */ - warn( - /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过100Kb */ - ...args: any[] - ): void - } - interface MapContext { - /** [MapContext.addArc(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addArc.html) - * - * 需要基础库: `2.22.0` - * - * 在插件中使用:支持 - * - * 添加弧线,途经点与夹角必须设置一个。途经点必须在起终点有效坐标范围内,否则不能生成正确的弧线,同时设置夹角角度时,以夹角角度为准。夹角定义为起点到终点,与起点外切线逆时针旋转的角度。工具侧暂未支持。 */ - addArc(option: AddArcOption): void - /** [MapContext.addCustomLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addCustomLayer.html) - * - * 需要基础库: `2.12.0` - * - * 在插件中使用:支持 - * - * 添加个性化图层。图层创建[参考文档](https://lbs.qq.com/dev/console/customLayer/create) */ - addCustomLayer(option: AddCustomLayerOption): void - /** [MapContext.addGroundOverlay(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addGroundOverlay.html) - * - * 需要基础库: `2.14.0` - * - * 在插件中使用:支持 - * - * 创建自定义图片图层,图片会随着地图缩放而缩放。 */ - addGroundOverlay(option: AddGroundOverlayOption): void - /** [MapContext.addMarkers(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addMarkers.html) - * - * 需要基础库: `2.13.0` - * - * 在插件中使用:支持 - * - * 添加 marker。 */ - addMarkers(option: AddMarkersOption): void - /** [MapContext.addVisualLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addVisualLayer.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:支持 - * - * 添加可视化图层。需要刷新时,interval 可设置的最小值为 15 s。 */ - addVisualLayer(option: AddVisualLayerOption): void - /** [MapContext.fromScreenLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.fromScreenLocation.html) - * - * 需要基础库: `2.14.0` - * - * 在插件中使用:支持 - * - * 获取屏幕上的点对应的经纬度,坐标原点为地图左上角。 */ - fromScreenLocation(option: FromScreenLocationOption): void - /** [MapContext.getCenterLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getCenterLocation.html) - * - * 在插件中使用:支持 - * - * 获取当前地图中心的经纬度。返回的是 gcj02 坐标系,可以用于 [wx.openLocation()](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.openLocation.html) */ - getCenterLocation(option: GetCenterLocationOption): void - /** [MapContext.getRegion(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getRegion.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 获取当前地图的视野范围 */ - getRegion(option?: GetRegionOption): void - /** [MapContext.getRotate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getRotate.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:支持 - * - * 获取当前地图的旋转角 */ - getRotate(option?: GetRotateOption): void - /** [MapContext.getScale(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getScale.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 获取当前地图的缩放级别 */ - getScale(option?: GetScaleOption): void - /** [MapContext.getSkew(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getSkew.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:支持 - * - * 获取当前地图的倾斜角 */ - getSkew(option?: GetSkewOption): void - /** [MapContext.includePoints(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.includePoints.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:支持 - * - * 缩放视野展示所有经纬度 */ - includePoints(option: IncludePointsOption): void - /** [MapContext.initMarkerCluster(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.initMarkerCluster.html) - * - * 需要基础库: `2.13.0` - * - * 在插件中使用:支持 - * - * 初始化点聚合的配置,未调用时采用默认配置。 */ - initMarkerCluster(option: InitMarkerClusterOption): void - /** [MapContext.moveAlong(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.moveAlong.html) - * - * 需要基础库: `2.13.0` - * - * 在插件中使用:支持 - * - * 沿指定路径移动 `marker`,用于轨迹回放等场景。动画完成时触发回调事件,若动画进行中,对同一 `marker` 再次调用 `moveAlong` 方法,前一次的动画将被打断。 */ - moveAlong(option: MoveAlongOption): void - /** [MapContext.moveToLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.moveToLocation.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:支持 - * - * 将地图中心移置当前定位点,此时需设置地图组件 show-location 为true。[2.8.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起支持将地图中心移动到指定位置。 */ - moveToLocation(option?: MoveToLocationOption): void - /** [MapContext.on(string event, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.on.html) -* -* 需要基础库: `2.13.0` -* -* 在插件中使用:支持 -* -* 监听地图事件。 -* -* ### markerClusterCreate -* -* 缩放或拖动导致新的聚合簇产生时触发,仅返回新创建的聚合簇信息。 -* -* #### 返回参数 -* -* | 参数 | 类型 | 说明 | -* | --------- | ------ | --------- | -* | clusters | `Array<ClusterInfo>` | 聚合簇数据 | -* -* ### markerClusterClick -* -* 聚合簇的点击事件。 -* -* #### 返回参数 -* -* | 参数 | 类型 | 说明 | -* | --------- | ------------- | --------- | -* | cluster | ClusterInfo | 聚合簇 | -* -* #### ClusterInfo 结构 -* -* | 参数 | 类型 | 说明 | -* | ---------- | -------------------- | -------------------------- | -* | clusterId | Number | 聚合簇的 id | -* | center | LatLng | 聚合簇的坐标 | -* | markerIds | `Array<Number>` | 该聚合簇内的点标记数据数组 | -* -* **示例代码** -* -* ```js - MapContext.on('markerClusterCreate', (res) => {}) - MapContext.on('markerClusterClick', (res) => {}) -``` */ - on( - /** 事件名 - * - * 参数 event 可选值: - * - 'markerClusterCreate': ; - * - 'markerClusterClick': ; */ - event: 'markerClusterCreate' | 'markerClusterClick', - /** 事件的回调函数 */ - callback: (...args: any[]) => any - ): void - /** [MapContext.openMapApp(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.openMapApp.html) - * - * 需要基础库: `2.14.0` - * - * 在插件中使用:支持 - * - * 拉起地图APP选择导航。 */ - openMapApp(option: OpenMapAppOption): void - /** [MapContext.removeArc(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeArc.html) - * - * 需要基础库: `2.22.0` - * - * 在插件中使用:支持 - * - * 删除弧线。工具侧暂未支持。 */ - removeArc(option: RemoveArcOption): void - /** [MapContext.removeCustomLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeCustomLayer.html) - * - * 需要基础库: `2.12.0` - * - * 在插件中使用:支持 - * - * 移除个性化图层。 */ - removeCustomLayer(option: RemoveCustomLayerOption): void - /** [MapContext.removeGroundOverlay(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeGroundOverlay.html) - * - * 需要基础库: `2.14.0` - * - * 在插件中使用:支持 - * - * 移除自定义图片图层。 */ - removeGroundOverlay(option: RemoveGroundOverlayOption): void - /** [MapContext.removeMarkers(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeMarkers.html) - * - * 需要基础库: `2.13.0` - * - * 在插件中使用:支持 - * - * 移除 marker。 */ - removeMarkers(option: RemoveMarkersOption): void - /** [MapContext.removeVisualLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.removeVisualLayer.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:支持 - * - * 移除可视化图层。 */ - removeVisualLayer(option: RemoveVisualLayerOption): void - /** [MapContext.setBoundary(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.setBoundary.html) - * - * 需要基础库: `2.22.0` - * - * 在插件中使用:支持 - * - * 限制地图的显示范围。此接口同时会限制地图的最小缩放整数级别。 */ - setBoundary(option: SetBoundaryOption): void - /** [MapContext.setCenterOffset(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.setCenterOffset.html) - * - * 需要基础库: `2.10.0` - * - * 在插件中使用:支持 - * - * 设置地图中心点偏移,向后向下为增长,屏幕比例范围(0.25~0.75),默认偏移为[0.5, 0.5] */ - setCenterOffset(option: SetCenterOffsetOption): void - /** [MapContext.setLocMarkerIcon(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.setLocMarkerIcon.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:支持 - * - * 设置定位点图标,支持网络路径、本地路径、代码包路径 */ - setLocMarkerIcon(option: SetLocMarkerIconOption): void - /** [MapContext.toScreenLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.toScreenLocation.html) - * - * 需要基础库: `2.14.0` - * - * 在插件中使用:支持 - * - * 获取经纬度对应的屏幕坐标,坐标原点为地图左上角。 */ - toScreenLocation(option: ToScreenLocationOption): void - /** [MapContext.translateMarker(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.translateMarker.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:支持 - * - * 平移marker,带动画。 */ - translateMarker(option: TranslateMarkerOption): void - /** [MapContext.updateGroundOverlay(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.updateGroundOverlay.html) - * - * 需要基础库: `2.14.0` - * - * 在插件中使用:支持 - * - * 更新自定义图片图层。 */ - updateGroundOverlay(option: UpdateGroundOverlayOption): void - } - interface MediaAudioPlayer { - /** [Promise MediaAudioPlayer.addAudioSource([VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) source)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.addAudioSource.html) - * - * 在插件中使用:支持 - * - * 添加音频源 */ - addAudioSource( - /** [VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) - * - * 视频解码器实例。作为音频源添加到音频播放器中 */ - source: VideoDecoder - ): Promise<any> - /** [Promise MediaAudioPlayer.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.destroy.html) - * - * 在插件中使用:支持 - * - * 销毁播放器 */ - destroy(): Promise<any> - /** [Promise MediaAudioPlayer.removeAudioSource([VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) source)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.removeAudioSource.html) - * - * 在插件中使用:支持 - * - * 移除音频源 */ - removeAudioSource( - /** [VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) - * - * 视频解码器实例 */ - source: VideoDecoder - ): Promise<any> - /** [Promise MediaAudioPlayer.start()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.start.html) - * - * 在插件中使用:支持 - * - * 启动播放器 */ - start(): Promise<any> - /** [Promise MediaAudioPlayer.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.stop.html) - * - * 在插件中使用:支持 - * - * 停止播放器 */ - stop(): Promise<any> - } - interface MediaContainer { - /** [MediaContainer.addTrack([MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) track)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.addTrack.html) - * - * 需要基础库: `2.9.0` - * - * 在插件中使用:支持 - * - * 将音频或视频轨道添加到容器 */ - addTrack( - /** [MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) - * - * 要添加的音频或视频轨道 */ - track: MediaTrack - ): void - /** [MediaContainer.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.destroy.html) - * - * 需要基础库: `2.9.0` - * - * 在插件中使用:支持 - * - * 将容器销毁,释放资源 */ - destroy(): void - /** [MediaContainer.export()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.export.html) - * - * 需要基础库: `2.9.0` - * - * 在插件中使用:支持 - * - * 将容器内的轨道合并并导出视频文件 */ - export(): void - /** [MediaContainer.extractDataSource(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.extractDataSource.html) - * - * 需要基础库: `2.9.0` - * - * 在插件中使用:支持 - * - * 将传入的视频源分离轨道。不会自动将轨道添加到待合成的容器里。 */ - extractDataSource(option: ExtractDataSourceOption): void - /** [MediaContainer.removeTrack([MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) track)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.removeTrack.html) - * - * 需要基础库: `2.9.0` - * - * 在插件中使用:支持 - * - * 将音频或视频轨道从容器中移除 */ - removeTrack( - /** [MediaTrack](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaTrack.html) - * - * 要移除的音频或视频轨道 */ - track: MediaTrack - ): void - } - interface MediaQueryObserver { - /** [MediaQueryObserver.disconnect()](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/MediaQueryObserver.disconnect.html) - * - * 在插件中使用:支持 - * - * 停止监听。回调函数将不再触发 */ - disconnect(): void - /** [MediaQueryObserver.observe(Object descriptor, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/MediaQueryObserver.observe.html) - * - * 在插件中使用:支持 - * - * 开始监听页面 media query 变化情况 */ - observe( - /** media query 描述符 */ - descriptor: ObserveDescriptor, - /** 监听 media query 状态变化的回调函数 */ - callback: MediaQueryObserverObserveCallback - ): void - } - interface MediaRecorder { - /** [MediaRecorder.off(string eventName, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.off.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 取消监听录制事件。当对应事件触发时,该回调函数不再执行。 */ - off( - /** 事件名 */ - eventName: string, - /** 事件触发时执行的回调函数 */ - callback: (...args: any[]) => any - ): void - /** [MediaRecorder.on(string eventName, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.on.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 注册监听录制事件的回调函数。当对应事件触发时,回调函数会被执行。 */ - on( - /** 事件名 - * - * 参数 eventName 可选值: - * - 'start': 录制开始事件。; - * - 'stop': 录制结束事件。返回 {tempFilePath, duration, fileSize}; - * - 'pause': 录制暂停事件。; - * - 'resume': 录制继续事件。; - * - 'timeupdate': 录制时间更新事件。; */ - eventName: 'start' | 'stop' | 'pause' | 'resume' | 'timeupdate', - /** 事件触发时执行的回调函数 */ - callback: (...args: any[]) => any - ): void - /** [Promise MediaRecorder.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.destroy.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 销毁录制器 */ - destroy(): Promise<any> - /** [Promise MediaRecorder.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.pause.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 暂停录制 */ - pause(): Promise<any> - /** [Promise MediaRecorder.requestFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.requestFrame.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 请求下一帧录制,在 callback 里完成一帧渲染后开始录制当前帧 */ - requestFrame(callback: (...args: any[]) => any): Promise<any> - /** [Promise MediaRecorder.resume()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.resume.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 恢复录制 */ - resume(): Promise<any> - /** [Promise MediaRecorder.start()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.start.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 开始录制 */ - start(): Promise<any> - /** [Promise MediaRecorder.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.stop.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 结束录制 */ - stop(): Promise<any> - } - interface MifareClassic { - /** [MifareClassic.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.close.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 断开连接 */ - close(option?: NdefCloseOption): void - /** [MifareClassic.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.connect.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 连接 NFC 标签 */ - connect(option?: NdefConnectOption): void - /** [MifareClassic.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.getMaxTransceiveLength.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取最大传输长度 */ - getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void - /** [MifareClassic.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.isConnected.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 检查是否已连接 */ - isConnected(option?: IsConnectedOption): void - /** [MifareClassic.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.setTimeout.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 设置超时时间 */ - setTimeout(option: SetTimeoutOption): void - /** [MifareClassic.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.transceive.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 发送数据 */ - transceive(option: TransceiveOption): void - } - interface MifareUltralight { - /** [MifareUltralight.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.close.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 断开连接 */ - close(option?: NdefCloseOption): void - /** [MifareUltralight.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.connect.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 连接 NFC 标签 */ - connect(option?: NdefConnectOption): void - /** [MifareUltralight.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.getMaxTransceiveLength.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取最大传输长度 */ - getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void - /** [MifareUltralight.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.isConnected.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 检查是否已连接 */ - isConnected(option?: IsConnectedOption): void - /** [MifareUltralight.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.setTimeout.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 设置超时时间 */ - setTimeout(option: SetTimeoutOption): void - /** [MifareUltralight.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.transceive.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 发送数据 */ - transceive(option: TransceiveOption): void - } - interface NFCAdapter { - /** [NFCAdapter.offDiscovered(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.offDiscovered.html) -* -* 需要基础库: `2.11.2` -* -* 在插件中使用:支持 -* -* 移除 NFC Tag的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -NFCAdapter.onDiscovered(listener) -NFCAdapter.offDiscovered(listener) // 需传入与监听时同一个的函数对象 -``` */ - offDiscovered( - /** onDiscovered 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffDiscoveredCallback - ): void - /** [NFCAdapter.onDiscovered(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.onDiscovered.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 监听 NFC Tag */ - onDiscovered( - /** 的监听函数 */ - listener: OnDiscoveredCallback - ): void - /** [NFCAdapter.startDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.startDiscovery.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 */ - startDiscovery(option?: StartDiscoveryOption): void - /** [NFCAdapter.stopDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.stopDiscovery.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 */ - stopDiscovery(option?: StopDiscoveryOption): void - /** [[IsoDep](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/IsoDep.html) NFCAdapter.getIsoDep()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getIsoDep.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取IsoDep实例,实例支持ISO-DEP (ISO 14443-4)标准的读写 */ - getIsoDep(): IsoDep - /** [[MifareClassic](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.html) NFCAdapter.getMifareClassic()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getMifareClassic.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取MifareClassic实例,实例支持MIFARE Classic标签的读写 */ - getMifareClassic(): MifareClassic - /** [[MifareUltralight](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareUltralight.html) NFCAdapter.getMifareUltralight()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getMifareUltralight.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取MifareUltralight实例,实例支持MIFARE Ultralight标签的读写 */ - getMifareUltralight(): MifareUltralight - /** [[Ndef](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.html) NFCAdapter.getNdef()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNdef.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取Ndef实例,实例支持对NDEF格式的NFC标签上的NDEF数据的读写 */ - getNdef(): Ndef - /** [[NfcA](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.html) NFCAdapter.getNfcA()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNfcA.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取NfcA实例,实例支持NFC-A (ISO 14443-3A)标准的读写 */ - getNfcA(): NfcA - /** [[NfcB](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.html) NFCAdapter.getNfcB()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNfcB.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取NfcB实例,实例支持NFC-B (ISO 14443-3B)标准的读写 */ - getNfcB(): NfcB - /** [[NfcF](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.html) NFCAdapter.getNfcF()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNfcF.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取NfcF实例,实例支持NFC-F (JIS 6319-4)标准的读写 */ - getNfcF(): NfcF - /** [[NfcV](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.html) NFCAdapter.getNfcV()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.getNfcV.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取NfcV实例,实例支持NFC-V (ISO 15693)标准的读写 */ - getNfcV(): NfcV - } - interface NFCError { - /** 错误信息 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 0 | ok | 正常 | - * | 13000 | | 当前设备不支持NFC | - * | 13001 | | 当前设备支持NFC,但系统NFC开关未开启 | - * | 13002 | | 当前设备支持NFC,但不支持HCE | - * | 13003 | | AID列表参数格式错误 | - * | 13004 | | 未设置微信为默认NFC支付应用 | - * | 13005 | | 返回的指令不合法 | - * | 13006 | | 注册AID失败 | */ errMsg: string - /** 错误码 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 0 | ok | 正常 | - * | 13000 | | 当前设备不支持NFC | - * | 13001 | | 当前设备支持NFC,但系统NFC开关未开启 | - * | 13002 | | 当前设备支持NFC,但不支持HCE | - * | 13003 | | AID列表参数格式错误 | - * | 13004 | | 未设置微信为默认NFC支付应用 | - * | 13005 | | 返回的指令不合法 | - * | 13006 | | 注册AID失败 | */ errCode: number - } - interface Ndef { - /** [Ndef.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.close.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 断开连接 */ - close(option?: NdefCloseOption): void - /** [Ndef.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.connect.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 连接 NFC 标签 */ - connect(option?: NdefConnectOption): void - /** [Ndef.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.isConnected.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 检查是否已连接 */ - isConnected(option?: IsConnectedOption): void - /** [Ndef.offNdefMessage(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.offNdefMessage.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 取消监听 Ndef 消息 */ - offNdefMessage(callback: (...args: any[]) => any): void - /** [Ndef.onNdefMessage(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.onNdefMessage.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 监听 Ndef 消息 */ - onNdefMessage(callback: (...args: any[]) => any): void - /** [Ndef.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.setTimeout.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 设置超时时间 */ - setTimeout(option: SetTimeoutOption): void - /** [Ndef.writeNdefMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.writeNdefMessage.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 重写 Ndef 标签内容 */ - writeNdefMessage(option: WriteNdefMessageOption): void - } - interface NfcA { - /** [NfcA.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.close.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 断开连接 */ - close(option?: NdefCloseOption): void - /** [NfcA.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.connect.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 连接 NFC 标签 */ - connect(option?: NdefConnectOption): void - /** [NfcA.getAtqa(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.getAtqa.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取ATQA信息 */ - getAtqa(option?: GetAtqaOption): void - /** [NfcA.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.getMaxTransceiveLength.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取最大传输长度 */ - getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void - /** [NfcA.getSak(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.getSak.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取SAK信息 */ - getSak(option?: GetSakOption): void - /** [NfcA.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.isConnected.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 检查是否已连接 */ - isConnected(option?: IsConnectedOption): void - /** [NfcA.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.setTimeout.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 设置超时时间 */ - setTimeout(option: SetTimeoutOption): void - /** [NfcA.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.transceive.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 发送数据 */ - transceive(option: TransceiveOption): void - } - interface NfcB { - /** [NfcB.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.close.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 断开连接 */ - close(option?: NdefCloseOption): void - /** [NfcB.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.connect.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 连接 NFC 标签 */ - connect(option?: NdefConnectOption): void - /** [NfcB.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.getMaxTransceiveLength.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取最大传输长度 */ - getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void - /** [NfcB.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.isConnected.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 检查是否已连接 */ - isConnected(option?: IsConnectedOption): void - /** [NfcB.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.setTimeout.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 设置超时时间 */ - setTimeout(option: SetTimeoutOption): void - /** [NfcB.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcB.transceive.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 发送数据 */ - transceive(option: TransceiveOption): void - } - interface NfcF { - /** [NfcF.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.close.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 断开连接 */ - close(option?: NdefCloseOption): void - /** [NfcF.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.connect.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 连接 NFC 标签 */ - connect(option?: NdefConnectOption): void - /** [NfcF.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.getMaxTransceiveLength.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取最大传输长度 */ - getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void - /** [NfcF.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.isConnected.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 检查是否已连接 */ - isConnected(option?: IsConnectedOption): void - /** [NfcF.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.setTimeout.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 设置超时时间 */ - setTimeout(option: SetTimeoutOption): void - /** [NfcF.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcF.transceive.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 发送数据 */ - transceive(option: TransceiveOption): void - } - interface NfcV { - /** [NfcV.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.close.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 断开连接 */ - close(option?: NdefCloseOption): void - /** [NfcV.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.connect.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 连接 NFC 标签 */ - connect(option?: NdefConnectOption): void - /** [NfcV.getMaxTransceiveLength(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.getMaxTransceiveLength.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 获取最大传输长度 */ - getMaxTransceiveLength(option?: GetMaxTransceiveLengthOption): void - /** [NfcV.isConnected(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.isConnected.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 检查是否已连接 */ - isConnected(option?: IsConnectedOption): void - /** [NfcV.setTimeout(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.setTimeout.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 设置超时时间 */ - setTimeout(option: SetTimeoutOption): void - /** [NfcV.transceive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcV.transceive.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:支持 - * - * 发送数据 */ - transceive(option: TransceiveOption): void - } - interface Nfcrwerror { - /** 错误信息 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 13000 | 设备不支持NFC | | - * | 13001 | 系统NFC开关未打开 | | - * | 13010 | 未知错误 | | - * | 13019 | user is not authorized | 用户未授权 | - * | 13011 | invalid parameter | 参数无效 | - * | 13012 | parse NdefMessage failed | 将参数解析为NdefMessage失败 | - * | 13021 | NFC discovery already started | 已经开始NFC扫描 | - * | 13018 | NFC discovery has not started | 尝试在未开始NFC扫描时停止NFC扫描 | - * | 13022 | Tech already connected | 标签已经连接 | - * | 13023 | Tech has not connected | 尝试在未连接标签时断开连接 | - * | 13013 | NFC tag has not been discovered | 未扫描到NFC标签 | - * | 13014 | invalid tech | 无效的标签技术 | - * | 13015 | unavailable tech | 从标签上获取对应技术失败 | - * | 13024 | function not support | 当前标签技术不支持该功能 | - * | 13017 | system internal error | 相关读写操作失败 | - * | 13016 | connect fail | 连接失败 | */ errMsg: string - /** 错误码 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 13000 | 设备不支持NFC | | - * | 13001 | 系统NFC开关未打开 | | - * | 13010 | 未知错误 | | - * | 13019 | user is not authorized | 用户未授权 | - * | 13011 | invalid parameter | 参数无效 | - * | 13012 | parse NdefMessage failed | 将参数解析为NdefMessage失败 | - * | 13021 | NFC discovery already started | 已经开始NFC扫描 | - * | 13018 | NFC discovery has not started | 尝试在未开始NFC扫描时停止NFC扫描 | - * | 13022 | Tech already connected | 标签已经连接 | - * | 13023 | Tech has not connected | 尝试在未连接标签时断开连接 | - * | 13013 | NFC tag has not been discovered | 未扫描到NFC标签 | - * | 13014 | invalid tech | 无效的标签技术 | - * | 13015 | unavailable tech | 从标签上获取对应技术失败 | - * | 13024 | function not support | 当前标签技术不支持该功能 | - * | 13017 | system internal error | 相关读写操作失败 | - * | 13016 | connect fail | 连接失败 | */ errCode: number - } - interface NodesRef { - /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.boundingClientRect(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.boundingClientRect.html) -* -* 在插件中使用:支持 -* -* 添加节点的布局位置的查询请求。相对于显示区域,以像素为单位。其功能类似于 DOM 的 `getBoundingClientRect`。返回 `NodesRef` 对应的 `SelectorQuery`。 -* -* **示例代码** -* -* ```js -Page({ - getRect () { - wx.createSelectorQuery().select('#the-id').boundingClientRect(function(rect){ - rect.id // 节点的ID - rect.dataset // 节点的dataset - rect.left // 节点的左边界坐标 - rect.right // 节点的右边界坐标 - rect.top // 节点的上边界坐标 - rect.bottom // 节点的下边界坐标 - rect.width // 节点的宽度 - rect.height // 节点的高度 - }).exec() - }, - getAllRects () { - wx.createSelectorQuery().selectAll('.a-class').boundingClientRect(function(rects){ - rects.forEach(function(rect){ - rect.id // 节点的ID - rect.dataset // 节点的dataset - rect.left // 节点的左边界坐标 - rect.right // 节点的右边界坐标 - rect.top // 节点的上边界坐标 - rect.bottom // 节点的下边界坐标 - rect.width // 节点的宽度 - rect.height // 节点的高度 - }) - }).exec() - } -}) -``` */ - boundingClientRect( - /** 回调函数,在执行 `SelectorQuery.exec` 方法后,节点信息会在 `callback` 中返回。 */ - callback?: BoundingClientRectCallback - ): SelectorQuery - /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.context(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.context.html) -* -* 需要基础库: `2.4.2` -* -* 在插件中使用:支持 -* -* 添加节点的 Context 对象查询请求。目前支持 [VideoContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.html)、[CanvasContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html)、[LivePlayerContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.html)、[EditorContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/editor/EditorContext.html)和 [MapContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.html) 的获取。 -* -* **示例代码** -* -* ```js -Page({ - getContext () { - wx.createSelectorQuery().select('.the-video-class').context(function(res){ - console.log(res.context) // 节点对应的 Context 对象。如:选中的节点是 <video> 组件,那么此处即返回 VideoContext 对象 - }).exec() - } -}) -``` */ - context( - /** 回调函数,在执行 `SelectorQuery.exec` 方法后,返回节点信息。 */ - callback?: ContextCallback - ): SelectorQuery - /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.fields(Object fields, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.fields.html) -* -* 在插件中使用:支持 -* -* 获取节点的相关信息。需要获取的字段在fields中指定。返回值是 `nodesRef` 对应的 `selectorQuery` -* -* **注意** -* -* computedStyle 的优先级高于 size,当同时在 computedStyle 里指定了 width/height 和传入了 size: true,则优先返回 computedStyle 获取到的 width/height。 -* -* **示例代码** -* -* ```js -Page({ - getFields () { - wx.createSelectorQuery().select('#the-id').fields({ - dataset: true, - size: true, - scrollOffset: true, - properties: ['scrollX', 'scrollY'], - computedStyle: ['margin', 'backgroundColor'], - context: true, - }, function (res) { - res.dataset // 节点的dataset - res.width // 节点的宽度 - res.height // 节点的高度 - res.scrollLeft // 节点的水平滚动位置 - res.scrollTop // 节点的竖直滚动位置 - res.scrollX // 节点 scroll-x 属性的当前值 - res.scrollY // 节点 scroll-y 属性的当前值 - // 此处返回指定要返回的样式名 - res.margin - res.backgroundColor - res.context // 节点对应的 Context 对象 - }).exec() - } -}) -``` */ - fields( - fields: Fields, - /** 回调函数 */ - callback?: FieldsCallback - ): SelectorQuery - /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.node(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.node.html) -* -* 需要基础库: `2.7.0` -* -* 在插件中使用:支持 -* -* 获取 Node 节点实例。目前支持 [Canvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.html) 和 [ScrollViewContext](https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/ScrollViewContext.html) 的获取。 -* -* **示例代码** -* -* ```js -Page({ - getNode() { - wx.createSelectorQuery().select('.canvas').node(function(res){ - console.log(res.node) // 节点对应的 Canvas 实例。 - }).exec() - } -}) -``` */ - node( - /** 回调函数,在执行 `SelectorQuery.exec` 方法后,返回节点信息。 */ - callback?: NodeCallback - ): SelectorQuery - /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) NodesRef.scrollOffset(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.scrollOffset.html) -* -* 在插件中使用:支持 -* -* 添加节点的滚动位置查询请求。以像素为单位。节点必须是 `scroll-view` 或者 `viewport`,返回 `NodesRef` 对应的 `SelectorQuery`。 -* -* **示例代码** -* -* ```js -Page({ - getScrollOffset () { - wx.createSelectorQuery().selectViewport().scrollOffset(function(res){ - res.id // 节点的ID - res.dataset // 节点的dataset - res.scrollLeft // 节点的水平滚动位置 - res.scrollTop // 节点的竖直滚动位置 - }).exec() - } -}) -``` */ - scrollOffset( - /** 回调函数,在执行 `SelectorQuery.exec` 方法后,节点信息会在 `callback` 中返回。 */ - callback?: ScrollOffsetCallback - ): SelectorQuery - } - interface OffscreenCanvas { - /** [[Image](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Image.html) OffscreenCanvas.createImage()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.createImage.html) - * - * 需要基础库: `2.7.3` - * - * 在插件中使用:需要基础库 `2.16.1` - * - * 创建一个图片对象。支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。 - * - * **** - * - * 注意不允许混用 webgl 和 2d 画布创建的图片对象,使用时请注意尽量使用 canvas 自身的 `createImage` 创建图片对象。 */ - createImage(): Image - /** [[RenderingContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html) OffscreenCanvas.getContext(string contextType)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.getContext.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:需要基础库 `2.16.1` - * - * 该方法返回 OffscreenCanvas 的绘图上下文 - * - * **** - * - * 注意不允许混用 webgl 和 2d 绘图上下文,传入的 contextType 必须要与 `wx.createOffscreenCanvas` 传入的 type 类型一致。 */ - getContext( - /** 绘图上下文类型,需要与 createOffscreenCanvas 时传入的 type 一致 - * - * 参数 contextType 可选值: - * - 'webgl': webgl类型上下文; - * - '2d': 2d类型上下文; */ - contextType: 'webgl' | '2d' - ): any - } - interface OpenSyncError { - /** 错误信息 - * - * | 错误信息 | 说明 | - * | - | - | - * | fail no such file or directory "${filePath}" | 上级目录不存在 | */ errMsg: string - /** 错误码 - * - * | 错误信息 | 说明 | - * | - | - | - * | fail no such file or directory "${filePath}" | 上级目录不存在 | */ errCode: number - } - interface Performance { - /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> Performance.getEntries()](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.getEntries.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 该方法返回当前缓冲区中的所有性能数据 */ - getEntries(): PerformanceEntry[] - /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> Performance.getEntriesByName(string name, string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.getEntriesByName.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 获取当前缓冲区中所有名称为 [name] 且类型为 [entryType] 的性能数据 */ - getEntriesByName( - /** 名称 */ - name: string, - /** 类型 */ - entryType?: string - ): PerformanceEntry[] - /** [Array.<[PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html)> Performance.getEntriesByType(string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.getEntriesByType.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 获取当前缓冲区中所有类型为 [entryType] 的性能数据 */ - getEntriesByType( - /** 类型 */ - entryType: string - ): PerformanceEntry[] - /** [Performance.setBufferSize(number size)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.setBufferSize.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 设置缓冲区大小,默认缓冲 30 条性能数据 */ - setBufferSize(size: number): void - /** [[PerformanceObserver](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceObserver.html) Performance.createObserver(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.createObserver.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 创建全局性能事件监听器 */ - createObserver( - /** 回调函数 */ - callback: (...args: any[]) => any - ): PerformanceObserver - } - interface PerformanceObserver { - /** [PerformanceObserver.disconnect()](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceObserver.disconnect.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 停止监听 */ - disconnect(): void - /** [PerformanceObserver.observe(Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceObserver.observe.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 开始监听 */ - observe( - /** 设置 type 监听单个类型的指标,设置 entryTypes 监听多个类型指标。 */ - options: ObserveOption - ): void - } - interface ReadCompressedFileSyncError { - /** 错误信息 - * - * | 错误信息 | 说明 | - * | - | - | - * | fail decompress fail | 指定的 compressionAlgorithm 与文件实际压缩格式不符 | - * | fail no such file or directory, open ${filePath} | 指定的 filePath 所在目录不存在 | - * | fail permission denied, open ${dirPath} | 指定的 filePath 路径没有读权限 | */ errMsg: string - /** 错误码 - * - * | 错误信息 | 说明 | - * | - | - | - * | fail decompress fail | 指定的 compressionAlgorithm 与文件实际压缩格式不符 | - * | fail no such file or directory, open ${filePath} | 指定的 filePath 所在目录不存在 | - * | fail permission denied, open ${dirPath} | 指定的 filePath 路径没有读权限 | */ errCode: number - } - interface ReadSyncError { - /** 错误信息 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | - * | fail permission denied | 指定的 fd 路径没有读权限 | - * | fail the value of "offset" is out of range | 传入的 offset 不合法 | - * | fail the value of "length" is out of range | 传入的 length 不合法 | - * | fail sdcard not mounted | android sdcard 挂载失败 | */ errMsg: string - /** 错误码 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | - * | fail permission denied | 指定的 fd 路径没有读权限 | - * | fail the value of "offset" is out of range | 传入的 offset 不合法 | - * | fail the value of "length" is out of range | 传入的 length 不合法 | - * | fail sdcard not mounted | android sdcard 挂载失败 | */ errCode: number - } - interface RealtimeLogManager { - /** [Object RealtimeLogManager.getCurrentState()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.getCurrentState.html) - * - * 需要基础库: `2.19.4` - * - * 在插件中使用:不支持 - * - * 实时日志会将一定时间间隔内缓存的日志聚合上报,如果该时间内缓存的内容超出限制,则会被丢弃。此方法可以获取当前缓存剩余空间。 - * - * > 注意:基础库内部在对日志进行上报时会补充一些结构化数据,如果遇到上报溢出的情况也会补充警告日志,所以此方法获取到的当前占用信息会比预期的大一些。 */ - getCurrentState(): CurrentState - /** [RealtimeLogManager.addFilterMsg(string msg)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.addFilterMsg.html) - * - * 需要基础库: `2.8.1` - * - * 在插件中使用:不支持 - * - * 添加过滤关键字,暂不支持在插件使用 */ - addFilterMsg( - /** 是setFilterMsg的添加接口。用于设置多个过滤关键字。 */ - msg: string - ): void - /** [RealtimeLogManager.error()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.error.html) - * - * 需要基础库: `2.7.1` - * - * 在插件中使用:不支持 - * - * 写 error 日志,暂不支持在插件使用 */ - error( - /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过5Kb */ - ...args: any[] - ): void - /** [RealtimeLogManager.in(Page pageInstance)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.in.html) - * - * 需要基础库: `2.9.1` - * - * 在插件中使用:不支持 - * - * 设置实时日志page参数所在的页面,暂不支持在插件使用 */ - in( - /** page实例 */ - pageInstance: Page.TrivialInstance - ): void - /** [RealtimeLogManager.info()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.info.html) - * - * 需要基础库: `2.7.1` - * - * 在插件中使用:不支持 - * - * 写 info 日志,暂不支持在插件使用 */ - info( - /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过5Kb */ - ...args: any[] - ): void - /** [RealtimeLogManager.setFilterMsg(string msg)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.setFilterMsg.html) - * - * 需要基础库: `2.7.3` - * - * 在插件中使用:不支持 - * - * 设置过滤关键字,暂不支持在插件使用 */ - setFilterMsg( - /** 过滤关键字,最多不超过1Kb,可以在小程序管理后台根据设置的内容搜索得到对应的日志。 */ - msg: string - ): void - /** [RealtimeLogManager.warn()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.warn.html) - * - * 需要基础库: `2.7.1` - * - * 在插件中使用:不支持 - * - * 写 warn 日志,暂不支持在插件使用 */ - warn( - /** 日志内容,可以有任意多个。每次调用的参数的总大小不超过5Kb */ - ...args: any[] - ): void - /** [[RealtimeTagLogManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.html) RealtimeLogManager.tag(string tagName)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.tag.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:需要基础库 `2.16.0` - * - * 获取给定标签的日志管理器实例,目前只支持在插件使用 */ - tag( - /** 标签名 */ - tagName: string - ): RealtimeTagLogManager - } - interface RealtimeTagLogManager { - /** [RealtimeTagLogManager.addFilterMsg(string msg)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.addFilterMsg.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:需要基础库 `2.16.0` - * - * 添加过滤关键字 */ - addFilterMsg( - /** 是setFilterMsg的添加接口。用于设置多个过滤关键字。 */ - msg: string - ): void - /** [RealtimeTagLogManager.error(string key, Object|Array.<any>|number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.error.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:需要基础库 `2.16.0` - * - * 写 error 日志 */ - error( - /** 日志的 key */ - key: string, - /** 日志的值,每次调用的参数的总大小不超过5Kb */ - value: IAnyObject | any[] | number | string - ): void - /** [RealtimeTagLogManager.info(string key, Object|Array.<any>|number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.info.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:需要基础库 `2.16.0` - * - * 写 info 日志 */ - info( - /** 日志的 key */ - key: string, - /** 日志的值,每次调用的参数的总大小不超过5Kb */ - value: IAnyObject | any[] | number | string - ): void - /** [RealtimeTagLogManager.setFilterMsg(string msg)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.setFilterMsg.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:需要基础库 `2.16.0` - * - * 设置过滤关键字 */ - setFilterMsg( - /** 过滤关键字,最多不超过1Kb,可以在小程序管理后台根据设置的内容搜索得到对应的日志。 */ - msg: string - ): void - /** [RealtimeTagLogManager.warn(string key, Object|Array.<any>|number|string value)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeTagLogManager.warn.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:需要基础库 `2.16.0` - * - * 写 warn 日志 */ - warn( - /** 日志的 key */ - key: string, - /** 日志的值,每次调用的参数的总大小不超过5Kb */ - value: IAnyObject | any[] | number | string - ): void - } - interface RecorderManager { - /** [RecorderManager.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onError.html) - * - * 在插件中使用:支持 - * - * 监听录音错误事件 */ - onError( - /** 录音错误事件的监听函数 */ - listener: UDPSocketOnErrorCallback - ): void - /** [RecorderManager.onFrameRecorded(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onFrameRecorded.html) - * - * 在插件中使用:支持 - * - * 监听已录制完指定帧大小的文件事件。如果设置了 frameSize,则会回调此事件。 */ - onFrameRecorded( - /** 已录制完指定帧大小的文件事件的监听函数 */ - listener: OnFrameRecordedCallback - ): void - /** [RecorderManager.onInterruptionBegin(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onInterruptionBegin.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:支持 - * - * 监听录音因为受到系统占用而被中断开始事件。以下场景会触发此事件:微信语音聊天、微信视频聊天。此事件触发后,录音会被暂停。pause 事件在此事件后触发 */ - onInterruptionBegin( - /** 录音因为受到系统占用而被中断开始事件的监听函数 */ - listener: OnInterruptionBeginCallback - ): void - /** [RecorderManager.onInterruptionEnd(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onInterruptionEnd.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:支持 - * - * 监听录音中断结束事件。在收到 interruptionBegin 事件之后,小程序内所有录音会暂停,收到此事件之后才可再次录音成功。 */ - onInterruptionEnd( - /** 录音中断结束事件的监听函数 */ - listener: OnInterruptionEndCallback - ): void - /** [RecorderManager.onPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onPause.html) - * - * 在插件中使用:支持 - * - * 监听录音暂停事件 */ - onPause( - /** 录音暂停事件的监听函数 */ - listener: OnPauseCallback - ): void - /** [RecorderManager.onResume(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onResume.html) - * - * 在插件中使用:支持 - * - * 监听录音继续事件 */ - onResume( - /** 录音继续事件的监听函数 */ - listener: OnResumeCallback - ): void - /** [RecorderManager.onStart(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onStart.html) - * - * 在插件中使用:支持 - * - * 监听录音开始事件 */ - onStart( - /** 录音开始事件的监听函数 */ - listener: OnStartCallback - ): void - /** [RecorderManager.onStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onStop.html) - * - * 在插件中使用:支持 - * - * 监听录音结束事件 */ - onStop( - /** 录音结束事件的监听函数 */ - listener: RecorderManagerOnStopCallback - ): void - /** [RecorderManager.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.pause.html) - * - * 在插件中使用:支持 - * - * 暂停录音 */ - pause(): void - /** [RecorderManager.resume()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.resume.html) - * - * 在插件中使用:支持 - * - * 继续录音 */ - resume(): void - /** [RecorderManager.start(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.start.html) - * - * 在插件中使用:支持 - * - * 开始录音 - * - * **采样率与编码码率限制** - * - * 每种采样率有对应的编码码率范围有效值,设置不合法的采样率或编码码率会导致录音失败,具体对应关系如下表。 - * - * | 采样率 | 编码码率 | - * | ------ | -------------- | - * | 8000 | 16000 ~ 48000 | - * | 11025 | 16000 ~ 48000 | - * | 12000 | 24000 ~ 64000 | - * | 16000 | 24000 ~ 96000 | - * | 22050 | 32000 ~ 128000 | - * | 24000 | 32000 ~ 128000 | - * | 32000 | 48000 ~ 192000 | - * | 44100 | 64000 ~ 320000 | - * | 48000 | 64000 ~ 320000 | */ - start(option: RecorderManagerStartOption): void - /** [RecorderManager.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.stop.html) - * - * 在插件中使用:支持 - * - * 停止录音 */ - stop(): void - } - interface RequestTask { - /** [RequestTask.abort()](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.abort.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 中断请求任务 */ - abort(): void - /** [RequestTask.offChunkReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.offChunkReceived.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:支持 -* -* 移除 Transfer-Encoding Chunk Received 事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -RequestTask.onChunkReceived(listener) -RequestTask.offChunkReceived(listener) // 需传入与监听时同一个的函数对象 -``` */ - offChunkReceived( - /** onChunkReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffChunkReceivedCallback - ): void - /** [RequestTask.offHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.offHeadersReceived.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:支持 -* -* 移除 HTTP Response Header 事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -RequestTask.onHeadersReceived(listener) -RequestTask.offHeadersReceived(listener) // 需传入与监听时同一个的函数对象 -``` */ - offHeadersReceived( - /** onHeadersReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffHeadersReceivedCallback - ): void - /** [RequestTask.onChunkReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.onChunkReceived.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:支持 - * - * 监听 Transfer-Encoding Chunk Received 事件。当接收到新的chunk时触发。 */ - onChunkReceived( - /** Transfer-Encoding Chunk Received 事件的监听函数 */ - listener: OnChunkReceivedCallback - ): void - /** [RequestTask.onHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.onHeadersReceived.html) - * - * 需要基础库: `2.1.0` - * - * 在插件中使用:支持 - * - * 监听 HTTP Response Header 事件。会比请求完成事件更早 */ - onHeadersReceived( - /** HTTP Response Header 事件的监听函数 */ - listener: OnHeadersReceivedCallback - ): void - } - interface RewardedVideoAd { - /** [Promise RewardedVideoAd.load()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.load.html) - * - * 在插件中使用:不支持 - * - * 加载激励视频广告。 */ - load(): Promise<any> - /** [Promise RewardedVideoAd.show()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.show.html) - * - * 在插件中使用:不支持 - * - * 显示激励视频广告。激励视频广告将从屏幕下方推入。 */ - show(): Promise<any> - /** [RewardedVideoAd.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.destroy.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 销毁激励视频广告实例。 */ - destroy(): void - /** [RewardedVideoAd.offClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.offClose.html) -* -* 在插件中使用:不支持 -* -* 移除用户点击 `关闭广告` 按钮的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -RewardedVideoAd.onClose(listener) -RewardedVideoAd.offClose(listener) // 需传入与监听时同一个的函数对象 -``` */ - offClose( - /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: RewardedVideoAdOffCloseCallback - ): void - /** [RewardedVideoAd.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.offError.html) -* -* 在插件中使用:不支持 -* -* 移除激励视频错误事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -RewardedVideoAd.onError(listener) -RewardedVideoAd.offError(listener) // 需传入与监听时同一个的函数对象 -``` */ - offError( - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: RewardedVideoAdOffErrorCallback - ): void - /** [RewardedVideoAd.offLoad(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.offLoad.html) -* -* 在插件中使用:不支持 -* -* 移除激励视频广告加载事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -RewardedVideoAd.onLoad(listener) -RewardedVideoAd.offLoad(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLoad( - /** onLoad 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLoadCallback - ): void - /** [RewardedVideoAd.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.onClose.html) - * - * 在插件中使用:不支持 - * - * 监听用户点击 `关闭广告` 按钮的事件。 */ - onClose( - /** 用户点击 `关闭广告` 按钮的事件的监听函数 */ - listener: RewardedVideoAdOnCloseCallback - ): void - /** [RewardedVideoAd.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.onError.html) - * - * 在插件中使用:不支持 - * - * 监听激励视频错误事件。 - * - * **错误码信息与解决方案表** - * - * 错误码是通过onError获取到的错误信息。调试期间,可以通过异常返回来捕获信息。 - * 在小程序发布上线之后,如果遇到异常问题,可以在[“运维中心“](https://mp.weixin.qq.com/)里面搜寻错误日志,还可以针对异常返回加上适当的监控信息。 - * - * | 代码 | 异常情况 | 理由 | 解决方案 | - * | ------ | -------------- | --------------- | -------------------------- | - * | 1000 | 后端错误调用失败 | 该项错误不是开发者的异常情况 | 一般情况下忽略一段时间即可恢复。 | - * | 1001 | 参数错误 | 使用方法错误 | 可以前往developers.weixin.qq.com确认具体教程(小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换。| - * | 1002 | 广告单元无效 | 可能是拼写错误、或者误用了其他APP的广告ID | 请重新前往mp.weixin.qq.com确认广告位ID。 | - * | 1003 | 内部错误 | 该项错误不是开发者的异常情况 | 一般情况下忽略一段时间即可恢复。| - * | 1004 | 无适合的广告 | 广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告 | 属于正常情况,且开发者需要针对这种情况做形态上的兼容。 | - * | 1005 | 广告组件审核中 | 你的广告正在被审核,无法展现广告 | 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。| - * | 1006 | 广告组件被驳回 | 你的广告审核失败,无法展现广告 | 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。| - * | 1007 | 广告组件被驳回 | 你的广告能力已经被封禁,封禁期间无法展现广告 | 请前往mp.weixin.qq.com确认小程序广告封禁状态。 | - * | 1008 | 广告单元已关闭 | 该广告位的广告能力已经被关闭 | 请前往mp.weixin.qq.com重新打开对应广告位的展现。| */ - onError( - /** 激励视频错误事件的监听函数 */ - listener: RewardedVideoAdOnErrorCallback - ): void - /** [RewardedVideoAd.onLoad(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.onLoad.html) - * - * 在插件中使用:不支持 - * - * 监听激励视频广告加载事件。 */ - onLoad( - /** 激励视频广告加载事件的监听函数 */ - listener: OnLoadCallback - ): void - } - interface ScrollViewContext { - /** [ScrollViewContext.scrollIntoView(string selector)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/ScrollViewContext.scrollIntoView.html) - * - * 需要基础库: `2.14.4` - * - * 在插件中使用:支持 - * - * 滚动至指定位置 */ - scrollIntoView( - /** 元素选择器 */ - selector: string - ): void - /** [ScrollViewContext.scrollTo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/ScrollViewContext.scrollTo.html) - * - * 需要基础库: `2.14.4` - * - * 在插件中使用:支持 - * - * 滚动至指定位置 */ - scrollTo(option: ScrollToOption): void - } - interface SelectorQuery { - /** [[NodesRef](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.html) SelectorQuery.exec(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.exec.html) - * - * 在插件中使用:支持 - * - * 执行所有的请求。请求结果按请求次序构成数组,在callback的第一个参数中返回。 */ - exec( - /** 回调函数 */ - callback?: (...args: any[]) => any - ): NodesRef - /** [[NodesRef](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.html) SelectorQuery.select(string selector)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.select.html) - * - * 在插件中使用:支持 - * - * 在当前页面下选择第一个匹配选择器 `selector` 的节点。返回一个 `NodesRef` 对象实例,可以用于获取节点信息。 - * - * **selector 语法** - * - * selector类似于 CSS 的选择器,但仅支持下列语法。 - * - * - ID选择器:#the-id - * - class选择器(可以连续指定多个):.a-class.another-class - * - 子元素选择器:.the-parent > .the-child - * - 后代选择器:.the-ancestor .the-descendant - * - 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant - * - 多选择器的并集:#a-node, .some-other-nodes */ - select( - /** 选择器 */ - selector: string - ): NodesRef - /** [[NodesRef](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.html) SelectorQuery.selectAll(string selector)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.selectAll.html) - * - * 在插件中使用:支持 - * - * 在当前页面下选择匹配选择器 selector 的所有节点。 - * - * **selector 语法** - * - * selector类似于 CSS 的选择器,但仅支持下列语法。 - * - * - ID选择器:#the-id - * - class选择器(可以连续指定多个):.a-class.another-class - * - 子元素选择器:.the-parent > .the-child - * - 后代选择器:.the-ancestor .the-descendant - * - 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant - * - 多选择器的并集:#a-node, .some-other-nodes */ - selectAll( - /** 选择器 */ - selector: string - ): NodesRef - /** [[NodesRef](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/NodesRef.html) SelectorQuery.selectViewport()](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.selectViewport.html) - * - * 在插件中使用:支持 - * - * 选择显示区域。可用于获取显示区域的尺寸、滚动位置等信息。 */ - selectViewport(): NodesRef - /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) SelectorQuery.in(Component component)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.in.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:支持 -* -* 将选择器的选取范围更改为自定义组件 `component` 内。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)。 -* -* **示例代码** -* -* ```js -Component({ - queryMultipleNodes (){ - const query = wx.createSelectorQuery().in(this) - query.select('#the-id').boundingClientRect(function(res){ - res.top // 这个组件内 #the-id 节点的上边界坐标 - }).exec() - } -}) -``` */ - in( - /** 自定义组件实例 */ - component: Component.TrivialInstance | Page.TrivialInstance - ): SelectorQuery - } - interface SocketTask { - /** [SocketTask.close(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.close.html) - * - * 在插件中使用:支持 - * - * 关闭 WebSocket 连接 */ - close(option: SocketTaskCloseOption): void - /** [SocketTask.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onClose.html) - * - * 在插件中使用:支持 - * - * 监听 WebSocket 连接关闭事件 */ - onClose( - /** WebSocket 连接关闭事件的监听函数 */ - listener: SocketTaskOnCloseCallback - ): void - /** [SocketTask.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onError.html) - * - * 在插件中使用:支持 - * - * 监听 WebSocket 错误事件 */ - onError( - /** WebSocket 错误事件的监听函数 */ - listener: UDPSocketOnErrorCallback - ): void - /** [SocketTask.onMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onMessage.html) - * - * 在插件中使用:支持 - * - * 监听 WebSocket 接受到服务器的消息事件 */ - onMessage( - /** WebSocket 接受到服务器的消息事件的监听函数 */ - listener: SocketTaskOnMessageCallback - ): void - /** [SocketTask.onOpen(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.onOpen.html) - * - * 在插件中使用:支持 - * - * 监听 WebSocket 连接打开事件 */ - onOpen( - /** WebSocket 连接打开事件的监听函数 */ - listener: OnOpenCallback - ): void - /** [SocketTask.send(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.send.html) - * - * 在插件中使用:支持 - * - * 通过 WebSocket 连接发送数据 */ - send(option: SocketTaskSendOption): void - } - interface Stats { - /** [boolean Stats.isDirectory()](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.isDirectory.html) - * - * 在插件中使用:需要基础库 `2.19.2` - * - * 判断当前文件是否一个目录 */ - isDirectory(): boolean - /** [boolean Stats.isFile()](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.isFile.html) - * - * 在插件中使用:需要基础库 `2.19.2` - * - * 判断当前文件是否一个普通文件 */ - isFile(): boolean - } - interface TCPSocket { - /** [TCPSocket.bindWifi(Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.bindWifi.html) - * - * 需要基础库: `2.25.0` - * - * 在插件中使用:不支持 - * - * 将 TCP Socket 绑定到当前 wifi 网络,成功后会触发 onBindWifi 事件(仅安卓支持) */ - bindWifi(options: BindWifiOption): void - /** [TCPSocket.close()](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.close.html) - * - * 在插件中使用:不支持 - * - * 关闭连接 */ - close(): void - /** [TCPSocket.connect(Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.connect.html) - * - * 在插件中使用:不支持 - * - * 在给定的套接字上启动连接 */ - connect(options: TCPSocketConnectOption): void - /** [TCPSocket.offBindWifi(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offBindWifi.html) -* -* 需要基础库: `2.25.0` -* -* 在插件中使用:不支持 -* -* 移除当一个 socket 绑定当前 wifi 网络成功时触发该事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -TCPSocket.onBindWifi(listener) -TCPSocket.offBindWifi(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBindWifi( - /** onBindWifi 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBindWifiCallback - ): void - /** [TCPSocket.offClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offClose.html) -* -* 在插件中使用:不支持 -* -* 移除一旦 socket 完全关闭就发出该事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -TCPSocket.onClose(listener) -TCPSocket.offClose(listener) // 需传入与监听时同一个的函数对象 -``` */ - offClose( - /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: UDPSocketOffCloseCallback - ): void - /** [TCPSocket.offConnect(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offConnect.html) -* -* 在插件中使用:不支持 -* -* 移除当一个 socket 连接成功建立的时候触发该事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -TCPSocket.onConnect(listener) -TCPSocket.offConnect(listener) // 需传入与监听时同一个的函数对象 -``` */ - offConnect( - /** onConnect 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffConnectCallback - ): void - /** [TCPSocket.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offError.html) -* -* 在插件中使用:不支持 -* -* 移除当错误发生时触发的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -TCPSocket.onError(listener) -TCPSocket.offError(listener) // 需传入与监听时同一个的函数对象 -``` */ - offError( - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: UDPSocketOffErrorCallback - ): void - /** [TCPSocket.offMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.offMessage.html) -* -* 在插件中使用:不支持 -* -* 移除当接收到数据的时触发该事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -TCPSocket.onMessage(listener) -TCPSocket.offMessage(listener) // 需传入与监听时同一个的函数对象 -``` */ - offMessage( - /** onMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: TCPSocketOffMessageCallback - ): void - /** [TCPSocket.onBindWifi(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onBindWifi.html) - * - * 需要基础库: `2.25.0` - * - * 在插件中使用:不支持 - * - * 监听当一个 socket 绑定当前 wifi 网络成功时触发该事件 */ - onBindWifi( - /** 当一个 socket 绑定当前 wifi 网络成功时触发该事件的监听函数 */ - listener: OnBindWifiCallback - ): void - /** [TCPSocket.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onClose.html) - * - * 在插件中使用:不支持 - * - * 监听一旦 socket 完全关闭就发出该事件 */ - onClose( - /** 一旦 socket 完全关闭就发出该事件的监听函数 */ - listener: UDPSocketOnCloseCallback - ): void - /** [TCPSocket.onConnect(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onConnect.html) - * - * 在插件中使用:不支持 - * - * 监听当一个 socket 连接成功建立的时候触发该事件 */ - onConnect( - /** 当一个 socket 连接成功建立的时候触发该事件的监听函数 */ - listener: OnConnectCallback - ): void - /** [TCPSocket.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onError.html) - * - * 在插件中使用:不支持 - * - * 监听当错误发生时触发 */ - onError( - /** 的监听函数 */ - listener: UDPSocketOnErrorCallback - ): void - /** [TCPSocket.onMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.onMessage.html) - * - * 在插件中使用:不支持 - * - * 监听当接收到数据的时触发该事件 */ - onMessage( - /** 当接收到数据的时触发该事件的监听函数 */ - listener: TCPSocketOnMessageCallback - ): void - /** [TCPSocket.write(string|ArrayBuffer data)](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.write.html) - * - * 在插件中使用:不支持 - * - * 在 socket 上发送数据 */ - write( - /** 要发送的数据 */ - data: string | ArrayBuffer - ): void - } - interface TruncateSyncError { - /** 错误信息 - * - * | 错误信息 | 说明 | - * | - | - | - * | fail no such file or directory, open ${filePath} | 指定的 filePath 所在目录不存在 | - * | fail illegal operation on a directory, open "${filePath}" | 指定的 filePath 是一个已经存在的目录 | - * | fail permission denied, open ${dirPath} | 指定的 filePath 路径没有写权限 | - * | fail the maximum size of the file storage limit is exceeded | 存储空间不足 | - * | fail sdcard not mounted | android sdcard 挂载失败 | */ errMsg: string - /** 错误码 - * - * | 错误信息 | 说明 | - * | - | - | - * | fail no such file or directory, open ${filePath} | 指定的 filePath 所在目录不存在 | - * | fail illegal operation on a directory, open "${filePath}" | 指定的 filePath 是一个已经存在的目录 | - * | fail permission denied, open ${dirPath} | 指定的 filePath 路径没有写权限 | - * | fail the maximum size of the file storage limit is exceeded | 存储空间不足 | - * | fail sdcard not mounted | android sdcard 挂载失败 | */ errCode: number - } - interface UDPSocket { - /** [UDPSocket.close()](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.close.html) - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 关闭 UDP Socket 实例,相当于销毁。 在关闭之后,UDP Socket 实例不能再发送消息,每次调用 `UDPSocket.send` 将会触发错误事件,并且 message 事件回调函数也不会再也执行。在 `UDPSocket` 实例被创建后将被 Native 强引用,保证其不被 GC。在 `UDPSocket.close` 后将解除对其的强引用,让 UDPSocket 实例遵从 GC。 */ - close(): void - /** [UDPSocket.connect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.connect.html) - * - * 需要基础库: `2.15.0` - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 预先连接到指定的 IP 和 port,需要配合 write 方法一起使用 */ - connect(option: UDPSocketConnectOption): void - /** [UDPSocket.offClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.offClose.html) -* -* 在插件中使用:需要基础库 `2.11.1` -* -* 移除关闭事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -UDPSocket.onClose(listener) -UDPSocket.offClose(listener) // 需传入与监听时同一个的函数对象 -``` */ - offClose( - /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: UDPSocketOffCloseCallback - ): void - /** [UDPSocket.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.offError.html) -* -* 在插件中使用:需要基础库 `2.11.1` -* -* 移除错误事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -UDPSocket.onError(listener) -UDPSocket.offError(listener) // 需传入与监听时同一个的函数对象 -``` */ - offError( - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: UDPSocketOffErrorCallback - ): void - /** [UDPSocket.offListening(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.offListening.html) -* -* 在插件中使用:需要基础库 `2.11.1` -* -* 移除开始监听数据包消息的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -UDPSocket.onListening(listener) -UDPSocket.offListening(listener) // 需传入与监听时同一个的函数对象 -``` */ - offListening( - /** onListening 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffListeningCallback - ): void - /** [UDPSocket.offMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.offMessage.html) -* -* 在插件中使用:需要基础库 `2.11.1` -* -* 移除收到消息的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -UDPSocket.onMessage(listener) -UDPSocket.offMessage(listener) // 需传入与监听时同一个的函数对象 -``` */ - offMessage( - /** onMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: UDPSocketOffMessageCallback - ): void - /** [UDPSocket.onClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.onClose.html) - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 监听关闭事件 */ - onClose( - /** 关闭事件的监听函数 */ - listener: UDPSocketOnCloseCallback - ): void - /** [UDPSocket.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.onError.html) - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 监听错误事件 */ - onError( - /** 错误事件的监听函数 */ - listener: UDPSocketOnErrorCallback - ): void - /** [UDPSocket.onListening(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.onListening.html) - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 监听开始监听数据包消息的事件 */ - onListening( - /** 开始监听数据包消息的事件的监听函数 */ - listener: OnListeningCallback - ): void - /** [UDPSocket.onMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.onMessage.html) - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 监听收到消息的事件 */ - onMessage( - /** 收到消息的事件的监听函数 */ - listener: UDPSocketOnMessageCallback - ): void - /** [UDPSocket.send(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.send.html) - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 向指定的 IP 和 port 发送消息。基础库 2.9.0 起支持广播 (指定地址为 255.255.255.255)。 */ - send(option: UDPSocketSendOption): void - /** [UDPSocket.setTTL(number ttl)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.setTTL.html) - * - * 需要基础库: `2.18.0` - * - * 在插件中使用:支持 - * - * 设置 IP_TTL 套接字选项,用于设置一个 IP 数据包传输时允许的最大跳步数 */ - setTTL( - /** ttl 参数可以是 0 到 255 之间 */ - ttl: number - ): void - /** [UDPSocket.write()](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.write.html) - * - * 需要基础库: `2.15.0` - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 用法与 send 方法相同,如果没有预先调用 connect 则与 send 无差异(注意即使调用了 connect 也需要在本接口填入地址和端口参数) */ - write(): void - /** [number UDPSocket.bind(number port)](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.bind.html) - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 绑定一个系统随机分配的可用端口,或绑定一个指定的端口号 */ - bind( - /** 需要基础库: `2.9.0` - * - * 指定要绑定的端口号,不传则返回系统随机分配的可用端口 */ - port?: number - ): number - } - interface UpdateManager { - /** [UpdateManager.applyUpdate()](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.applyUpdate.html) - * - * 在插件中使用:不支持 - * - * 强制小程序重启并使用新版本。在小程序新版本下载完成后(即收到 `onUpdateReady` 回调)调用。 - * - * **示例代码** - * - * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ - applyUpdate(): void - /** [UpdateManager.onCheckForUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.onCheckForUpdate.html) - * - * 在插件中使用:不支持 - * - * 监听向微信后台请求检查更新结果事件。微信在小程序每次启动(包括热启动)时自动检查更新,不需由开发者主动触发。 - * - * **示例代码** - * - * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ - onCheckForUpdate( - /** 向微信后台请求检查更新结果事件的监听函数 */ - listener: OnCheckForUpdateCallback - ): void - /** [UpdateManager.onUpdateFailed(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.onUpdateFailed.html) - * - * 在插件中使用:不支持 - * - * 监听小程序更新失败事件。小程序有新版本,客户端主动触发下载(无需开发者触发),下载失败(可能是网络原因等)后回调 - * - * **示例代码** - * - * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ - onUpdateFailed( - /** 小程序更新失败事件的监听函数 */ - listener: OnUpdateFailedCallback - ): void - /** [UpdateManager.onUpdateReady(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.onUpdateReady.html) - * - * 在插件中使用:不支持 - * - * 监听小程序有版本更新事件。客户端主动触发下载(无需开发者触发),下载成功后回调 - * - * **示例代码** - * - * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ - onUpdateReady( - /** 小程序有版本更新事件的监听函数 */ - listener: OnUpdateReadyCallback - ): void - } - interface UploadTask { - /** [UploadTask.abort()](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.abort.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 中断上传任务 */ - abort(): void - /** [UploadTask.offHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.offHeadersReceived.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:支持 -* -* 移除 HTTP Response Header 事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -UploadTask.onHeadersReceived(listener) -UploadTask.offHeadersReceived(listener) // 需传入与监听时同一个的函数对象 -``` */ - offHeadersReceived( - /** onHeadersReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffHeadersReceivedCallback - ): void - /** [UploadTask.offProgressUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.offProgressUpdate.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:支持 -* -* 移除上传进度变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -UploadTask.onProgressUpdate(listener) -UploadTask.offProgressUpdate(listener) // 需传入与监听时同一个的函数对象 -``` */ - offProgressUpdate( - /** onProgressUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: UploadTaskOffProgressUpdateCallback - ): void - /** [UploadTask.onHeadersReceived(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.onHeadersReceived.html) - * - * 需要基础库: `2.1.0` - * - * 在插件中使用:支持 - * - * 监听 HTTP Response Header 事件。会比请求完成事件更早 */ - onHeadersReceived( - /** HTTP Response Header 事件的监听函数 */ - listener: OnHeadersReceivedCallback - ): void - /** [UploadTask.onProgressUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.onProgressUpdate.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 监听上传进度变化事件 */ - onProgressUpdate( - /** 上传进度变化事件的监听函数 */ - listener: UploadTaskOnProgressUpdateCallback - ): void - } - interface UserCryptoManager { - /** [UserCryptoManager.getLatestUserKey(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/crypto/UserCryptoManager.getLatestUserKey.html) -* -* 需要基础库: `2.17.3` -* -* 在插件中使用:不支持 -* -* 获取最新的用户加密密钥 -* -* **示例代码** -* -* ```js -const userCryptoManager = wx.getUserCryptoManager() -userCryptoManager.getLatestUserKey({ - success: res => { - const {encryptKey, iv, version, expireTime} = res - console.log(encryptKey, iv, version, expireTime) - } -}) -``` */ - getLatestUserKey(option?: GetLatestUserKeyOption): void - /** [UserCryptoManager.getRandomValues(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/crypto/UserCryptoManager.getRandomValues.html) -* -* 需要基础库: `2.17.3` -* -* 在插件中使用:不支持 -* -* 获取密码学安全随机数 -* -* **示例代码** -* -* ```js -wx.getRandomValues({ - length: 6 // 生成 6 个字节长度的随机数, - success: res => { - console.log(wx.arrayBufferToBase64(res.randomValues)) // 转换为 base64 字符串后打印 - } -}) -``` */ - getRandomValues(option: GetRandomValuesOption): void - } - interface VKCamera { - /** [Float32Array VKCamera.getProjectionMatrix(number near, number far)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKCamera.getProjectionMatrix.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 获取投影矩阵 */ - getProjectionMatrix( - /** 近视点 */ - near: number, - /** 远视点 */ - far: number - ): Float32Array - } - interface VKFrame { - /** [ArrayBuffer VKFrame.getCameraBuffer(number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFrame.getCameraBuffer.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 获取当前帧 rgba buffer。目前仅iOS端支持。按 aspect-fill 规则裁剪,此接口要求在创建 VKSession 对象时必须传入 gl 参数。此接口仅建议拿来做帧分析使用,上屏请使用 getCameraTexture 来代替。 */ - getCameraBuffer( - /** 宽度,受系统限制,必须是 16 的整数倍 */ - width: number, - /** 高度 */ - height: number - ): ArrayBuffer - /** [Float32Array VKFrame.getDisplayTransform()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFrame.getDisplayTransform.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 获取纹理调整矩阵。默认获取到的纹理是未经裁剪调整的纹理,此矩阵可用于在着色器中根据帧对象尺寸对纹理进行裁剪。 */ - getDisplayTransform(): Float32Array - /** [Object VKFrame.getCameraTexture(WebGLRenderingContext gl)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFrame.getCameraTexture.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 获取当前帧纹理,目前只支持 YUV 纹理。 */ - getCameraTexture( - /** 画布 */ - gl: WebGLRenderingContext - ): YUVTextureRes - } - interface VKSession { - /** [Array.<Object> VKSession.getAllMarker()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.getAllMarker.html) - * - * 需要基础库: `2.24.5` - * - * 在插件中使用:需要基础库 `2.24.5` - * - * 获取所有 marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.marker 为 true */ - getAllMarker(): VKMarker[] - /** [Array.<Object> VKSession.getAllOSDMarker()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.getAllOSDMarker.html) - * - * 需要基础库: `2.24.5` - * - * 在插件中使用:需要基础库 `2.24.5` - * - * 获取所有 OSD marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.OSD 为 true */ - getAllOSDMarker(): VKMarker[] - /** [Array.<Object> VKSession.hitTest(number x, number y, Object reset)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.hitTest.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 触摸检测,v1 版本只支持单平面(即 hitTest 生成一次平面后,后续 hitTest 均不会再生成平面,而是以之前生成的平面为基础进行检测)。如果需要重新识别其他平面,可以在调用此方法时将 reset 参数置为 true。 */ - hitTest( - /** 相对视窗的横坐标,取值范围为 [0, 1],0 为左边缘,1 为右边缘 */ - x: number, - /** 相对视窗的纵坐标,取值范围为 [0, 1],0 为上边缘,1 为下边缘 */ - y: number, - /** 是否需要重新识别其他平面,v2 版本不再需要此参数 */ - reset: IAnyObject - ): HitTestRes[] - /** [VKSession.cancelAnimationFrame(number requestID)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.cancelAnimationFrame.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 取消由 requestAnimationFrame 添加到计划中的动画帧请求。 */ - cancelAnimationFrame(requestID: number): void - /** [VKSession.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.destroy.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 销毁会话。 */ - destroy(): void - /** [VKSession.detectFace(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.detectFace.html) - * - * 需要基础库: `2.25.0` - * - * 在插件中使用:需要基础库 `2.25.0` - * - * 静态图像人脸关键点检测。当 wx.createVKSession 参数传入 {track: {face: {mode: 2} } } 时可用。用法详情[指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html)。安卓微信8.0.25开始支持,iOS微信8.0.24开始支持。 */ - detectFace(option: DetectFaceOption): void - /** [VKSession.off(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.off.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 取消监听会话事件。 */ - off( - /** 事件名称 */ - eventName: string, - /** 事件监听函数 */ - fn: (...args: any[]) => any - ): void - /** [VKSession.on(string eventName, function fn)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.on.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 监听会话事件。 */ - on( - /** 事件名称 - * - * 参数 eventName 可选值: - * - 'resize': 相机尺寸变化事件,回调参数为相机尺寸; - * - 'addAnchors': 增加 anchor 事件,回调参数为 [VKPlaneAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKPlaneAnchor.html)/[VKMarkerAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKMarkerAnchor.html)/[VKOSDAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKOSDAnchor.html) 列表(只有v2版本支持); - * - 'updateAnchors': 更新 anchor 事件,回调参数为 [VKPlaneAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKPlaneAnchor.html)/[VKMarkerAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKMarkerAnchor.html)/[VKOSDAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKOSDAnchor.html) 列表(只有v2版本支持) 或 [VKFaceAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFaceAnchor.html) 列表(v1、v2都支持); - * - 'removeAnchors': 删除 anchor 事件,回调参数为 [VKPlaneAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKPlaneAnchor.html)/[VKMarkerAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKMarkerAnchor.html)/[VKOSDAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKOSDAnchor.html) 列表(只有v2版本支持) 或 [VKFaceAnchor](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFaceAnchor.html) 列表(v1、v2都支持); */ - eventName: - | 'resize' - | 'addAnchors' - | 'updateAnchors' - | 'removeAnchors', - /** 事件监听函数 */ - fn: (...args: any[]) => any - ): void - /** [VKSession.removeMarker(number markerId)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.removeMarker.html) - * - * 需要基础库: `2.24.5` - * - * 在插件中使用:需要基础库 `2.24.5` - * - * 删除一个 marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.marker 为 true */ - removeMarker( - /** marker id */ - markerId: number - ): void - /** [VKSession.removeOSDMarker(number markerId)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.removeOSDMarker.html) - * - * 需要基础库: `2.24.5` - * - * 在插件中使用:需要基础库 `2.24.5` - * - * 删除一个 OSD marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.OSD 为 true */ - removeOSDMarker( - /** marker id */ - markerId: number - ): void - /** [VKSession.start(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.start.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 开启会话。 */ - start( - /** 开启会话回调 */ - callback: VKSessionStartCallback - ): void - /** [VKSession.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.stop.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 停止会话。 */ - stop(): void - /** [VKSession.updateOSDThreshold(number threshold)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.updateOSDThreshold.html) - * - * 需要基础库: `2.24.5` - * - * 在插件中使用:需要基础库 `2.24.5` - * - * 更新 OSD 识别精确度,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.OSD 为 true */ - updateOSDThreshold( - /** 阈值 */ - threshold: number - ): void - /** [[VKFrame](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKFrame.html) VKSession.getVKFrame(number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.getVKFrame.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 获取帧对象,每调用一次都会触发一次帧分析过程。 */ - getVKFrame( - /** 宽度 */ - width: number, - /** 高度 */ - height: number - ): VKFrame - /** [number VKSession.addMarker(string path)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.addMarker.html) - * - * 需要基础库: `2.24.5` - * - * 在插件中使用:需要基础库 `2.24.5` - * - * 添加一个 marker,要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.marker 为 true - * - * **使用提示** - * - * 注意事项: - * 1. 使用 addMarker 接口之前,需要在 createVKSession 的时候声明开启 marker 跟踪。即 wx.createVKSession({ track: { marker: true } }) - * 2. 可以添加多个 marker 图片,但不能重复添加相同的 marker 图片。 - * - * 对传入的图片有如下要求: - * 1. 格式:jpg/png 格式三通道彩图或者 1 通道灰度图 - * 2. 分辨率:尺寸在 480x480 ~ 1920x1920 之间,建议为 1080 分辨率 - * 3. 宽高比:在 1:1 ~ 16:9 之间,要求尽量方正,避免狭长的图片 - * 4. 质量:目标图像为平面模型,需要占画面主体,避免大面积留白,建议用扫描件 - * - * 示例: - * - * <img width="500px" src="https://res.wx.qq.com/op_res/sJPS5gttY4yQq-CmG9crrtaOpjb6Yc6mDhJKdUmrIpmtbWBMfAUAFavtKT6-tEZIh-8zT8tfBJBtvH048ge5Vw" alt="image.png" /> - * - * 建议: - * - * 1. 图片具有丰富的细节 - * 2. 避免重复单一的纹理,例如: - * - * <img width="500px" src="https://res.wx.qq.com/op_res/VfNcS-M6nPWWXq_CJ483Dq3iLsNXMvLiM6Wb5ZHOrVVGR2u5ixbQlbiSSuNHzVcMQQY5V0dvnlyOGihUIbyTvA" alt="image.png" /> - * <br> - * <img width="500px" src="https://res.wx.qq.com/op_res/VfNcS-M6nPWWXq_CJ483Dq-_lR2j4eOi23IOJ2LHFQY_PWufbx3s3uROgLi_flJMHQA8DNvlebs9UwumozPlXg" alt="image.png" /> - * <br> - * <img width="500px" src="https://res.wx.qq.com/op_res/VfNcS-M6nPWWXq_CJ483Dr9IaSPF18UPnz4KrbAhGW9pIb8oWxzHgmClGIRZK59N4gUnJh69yoQW1TFGqce8ew" alt="image.png" /> - * <br> - * - * 3. 避免使用柔和平滑边缘的纹理及大量渐变图像,例如: - * - * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCq6DPj88qSVwHFZiumbE0IMq9ibzbnhjewzUSa-n5_VgF_lF9g07FFHHYyrY14KTSfA" alt="image.png" /> - * - * 4. 避免模糊,建议采用高清、高对比度图像作为识别对象 - * 5. 建议图像有均匀的特征(角点)分布,正确示例: - * - * <img width="500px" src="https://res.wx.qq.com/op_res/sJPS5gttY4yQq-CmG9crrrBRWB_Cw2aFXAn1KY0YtfjnQ7WNt854gA8H2zfmZUztlFcJbdEHouBGs63hUO4Mxg" alt="image.png" /> - * - * 避免角点较少、中间大量空白、没有特征及角点的图像,错误示例: - * - * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCqzjY2LY-ylRjFS7TVD-cZsEE8TTB-xzR2YiWKhWyWg1bgpbRqQq-4l6OWPDii4S3Xg" alt="image.png" /> */ - addMarker( - /** 图片路径,目前只支持本地用户图片 */ - path: string - ): number - /** [number VKSession.addOSDMarker(string path)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.addOSDMarker.html) - * - * 需要基础库: `2.24.5` - * - * 在插件中使用:需要基础库 `2.24.5` - * - * 添加一个 OSD marker(one-shot detection marker),要求调 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 时传入的 track.OSD 为 true - * - * **使用提示** - * - * 注意事项: - * 1. 使用 addOSDMarker 接口之前,需要在 createVKSession 的时候声明开启 OSD 跟踪。即 wx.createVKSession({ track: { OSD: true } }) - * 2. 可以添加多个 OSDMarker 图片,但不能重复添加相同的 OSDMarker 图片。 - * - * 对传入的图片有如下要求: - * 1. 格式:jpg 格式彩色图片 - * 2. 分辨率:尺寸不低于 240x240 - * 3. 宽高比:在 1:1 ~ 16:9 之间,要求尽量方正,避免狭长的图片 - * 4. 质量:目标物体需要占画面主体,避免大面积留白,避免大面积文字,不能含其他物体。 - * - * 示例: - * - * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCq_Mq0ReXEA5nOzDIvnYYPttmwxn0V1e_yI6UUgkNT6K6aOQj2QRba5IHQglHULkrKg" alt="image.png" /> - * <br> - * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCqwiRcyGk9oenkCpd3vAHWSTSZPPJcgIrPzcpwnSpmk_9bMiCqUdS8Ds789Rjhy0CtA" alt="image.png" /> - * <br> - * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCqx8fYUYypBmFmB1_zX-APH06j1oMZDz7K0CE2To_982NDOB5fmM4Y2Rrr1uQF6J4gg" alt="image.png" /> - * <br> - * - * 建议: - * - * 1. 具有丰富的细节,避免纯色且形状特点不鲜明的物体,例如: - * - * <img width="500px" src="https://res.wx.qq.com/op_res/rg0BkiSl-LPBybgJtcQCq-6WwSZKlNbN-if0NCag-Dm6AmNJeBFi5dvR-bRZINlZmuA9G1e4wpngvhlr2z6CXQ" alt="image.png" /> - * - * 2. 避免模糊,最好采用高清图片 */ - addOSDMarker( - /** 图片路径,目前只支持本地用户图片 */ - path: string - ): number - /** [number VKSession.requestAnimationFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.requestAnimationFrame.html) - * - * 需要基础库: `2.20.0` - * - * 在插件中使用:需要基础库 `2.20.0` - * - * 在下次进行重绘时执行。 */ - requestAnimationFrame( - /** 执行的 callback */ - callback: (...args: any[]) => any - ): number - } - interface VideoContext { - /** [VideoContext.exitBackgroundPlayback()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.exitBackgroundPlayback.html) - * - * 需要基础库: `2.14.3` - * - * 在插件中使用:支持 - * - * 退出后台音频播放模式。 */ - exitBackgroundPlayback(): void - /** [VideoContext.exitFullScreen()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.exitFullScreen.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 退出全屏 */ - exitFullScreen(): void - /** [VideoContext.exitPictureInPicture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.exitPictureInPicture.html) - * - * 在插件中使用:支持 - * - * 退出小窗,该方法可在任意页面调用 */ - exitPictureInPicture(option?: ExitPictureInPictureOption): void - /** [VideoContext.hideStatusBar()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.hideStatusBar.html) - * - * 需要基础库: `2.1.0` - * - * 在插件中使用:支持 - * - * 隐藏状态栏,仅在iOS全屏下有效 */ - hideStatusBar(): void - /** [VideoContext.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.pause.html) - * - * 在插件中使用:支持 - * - * 暂停视频 */ - pause(): void - /** [VideoContext.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.play.html) - * - * 在插件中使用:支持 - * - * 播放视频 */ - play(): void - /** [VideoContext.playbackRate(number rate)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.playbackRate.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 设置倍速播放 */ - playbackRate( - /** 倍率,支持 0.5/0.8/1.0/1.25/1.5,2.6.3 起支持 2.0 倍速 */ - rate: number - ): void - /** [VideoContext.requestBackgroundPlayback()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.requestBackgroundPlayback.html) - * - * 需要基础库: `2.14.3` - * - * 在插件中使用:支持 - * - * 进入后台音频播放模式。 */ - requestBackgroundPlayback(): void - /** [VideoContext.requestFullScreen(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.requestFullScreen.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:支持 - * - * 进入全屏。若有自定义内容需在全屏时展示,需将内容节点放置到 video 节点内。 */ - requestFullScreen(option: VideoContextRequestFullScreenOption): void - /** [VideoContext.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.seek.html) - * - * 在插件中使用:支持 - * - * 跳转到指定位置 */ - seek( - /** 跳转到的位置,单位 s */ - position: number - ): void - /** [VideoContext.sendDanmu(Object data)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.sendDanmu.html) - * - * 在插件中使用:支持 - * - * 发送弹幕 */ - sendDanmu( - /** 弹幕内容 */ - data: Danmu - ): void - /** [VideoContext.showStatusBar()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.showStatusBar.html) - * - * 需要基础库: `2.1.0` - * - * 在插件中使用:支持 - * - * 显示状态栏,仅在iOS全屏下有效 */ - showStatusBar(): void - /** [VideoContext.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.stop.html) - * - * 需要基础库: `1.7.0` - * - * 在插件中使用:支持 - * - * 停止视频 */ - stop(): void - } - interface VideoDecoder { - /** [Object VideoDecoder.getFrameData()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.getFrameData.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 获取下一帧的解码数据 */ - getFrameData(): FrameDataOptions - /** [Promise VideoDecoder.remove()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.remove.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 移除解码器 */ - remove(): Promise<any> - /** [Promise VideoDecoder.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.seek.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 跳到某个时间点解码 */ - seek( - /** 跳转的解码位置,单位 ms */ - position: number - ): Promise<any> - /** [Promise VideoDecoder.start(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.start.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 开始解码 */ - start(option: VideoDecoderStartOption): Promise<any> - /** [Promise VideoDecoder.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.stop.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 停止解码 */ - stop(): Promise<any> - /** [VideoDecoder.off(string eventName, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.off.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 取消监听录制事件。当对应事件触发时,该回调函数不再执行 */ - off( - /** 事件名 */ - eventName: string, - /** 事件触发时执行的回调函数 */ - callback: (...args: any[]) => any - ): void - /** [VideoDecoder.on(string eventName, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.on.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 注册监听录制事件的回调函数。当对应事件触发时,回调函数会被执行 */ - on( - /** 事件名 - * - * 参数 eventName 可选值: - * - 'start': 开始事件。返回 {width, height}; - * - 'stop': 结束事件。; - * - 'seek': seek 完成事件。; - * - 'bufferchange': 缓冲区变化事件。; - * - 'ended': 解码结束事件。; */ - eventName: 'start' | 'stop' | 'seek' | 'bufferchange' | 'ended', - /** 事件触发时执行的回调函数 */ - callback: (...args: any[]) => any - ): void - } - interface WebAudioContext { - /** [AnalyserNode WebAudioContext.createAnalyser()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createAnalyser.html) - * - * 需要基础库: `2.22.0` - * - * 在插件中使用:不支持 - * - * 创建一个 AnalyserNode 。可以用来获取音频时间和频率数据,以及实现数据可视化。 */ - createAnalyser(): AnalyserNode - /** [BiquadFilterNode WebAudioContext.createBiquadFilter()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createBiquadFilter.html) - * - * 在插件中使用:不支持 - * - * 创建一个BiquadFilterNode */ - createBiquadFilter(): BiquadFilterNode - /** [BufferSourceNode WebAudioContext.createBufferSource()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createBufferSource.html) - * - * 在插件中使用:不支持 - * - * 创建一个BufferSourceNode实例,通过AudioBuffer对象来播放音频数据。 */ - createBufferSource(): BufferSourceNode - /** [ChannelMergerNode WebAudioContext.createChannelMerger(number numberOfInputs)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createChannelMerger.html) - * - * 在插件中使用:不支持 - * - * 创建一个ChannelMergerNode */ - createChannelMerger( - /** 输出流中需要保持的输入流的个数 */ - numberOfInputs: number - ): ChannelMergerNode - /** [ChannelSplitterNode WebAudioContext.createChannelSplitter(number numberOfOutputs)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createChannelSplitter.html) - * - * 在插件中使用:不支持 - * - * 创建一个ChannelSplitterNode */ - createChannelSplitter( - /** 要分别输出的输入音频流中的通道数 */ - numberOfOutputs: number - ): ChannelSplitterNode - /** [ConstantSourceNode WebAudioContext.createConstantSource()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createConstantSource.html) - * - * 在插件中使用:不支持 - * - * 创建一个ConstantSourceNode */ - createConstantSource(): ConstantSourceNode - /** [DelayNode WebAudioContext.createDelay(number maxDelayTime)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createDelay.html) - * - * 在插件中使用:不支持 - * - * 创建一个DelayNode */ - createDelay( - /** 最大延迟时间 */ - maxDelayTime: number - ): DelayNode - /** [DynamicsCompressorNode WebAudioContext.createDynamicsCompressor()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createDynamicsCompressor.html) - * - * 在插件中使用:不支持 - * - * 创建一个DynamicsCompressorNode */ - createDynamicsCompressor(): DynamicsCompressorNode - /** [GainNode WebAudioContext.createGain()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createGain.html) - * - * 在插件中使用:不支持 - * - * 创建一个GainNode */ - createGain(): GainNode - /** [IIRFilterNode WebAudioContext.createIIRFilter(Array.<number> feedforward, Array.<number> feedback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createIIRFilter.html) - * - * 在插件中使用:不支持 - * - * 创建一个IIRFilterNode */ - createIIRFilter( - /** 一个浮点值数组,指定IIR滤波器传递函数的前馈(分子)系数。 */ - feedforward: number[], - /** 一个浮点值数组,指定IIR滤波器传递函数的反馈(分母)系数。 */ - feedback: number[] - ): IIRFilterNode - /** [OscillatorNode WebAudioContext.createOscillator()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createOscillator.html) - * - * 在插件中使用:不支持 - * - * 创建一个OscillatorNode */ - createOscillator(): OscillatorNode - /** [PannerNode WebAudioContext.createPanner()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createPanner.html) - * - * 在插件中使用:不支持 - * - * 创建一个PannerNode */ - createPanner(): PannerNode - /** [PeriodicWaveNode WebAudioContext.createPeriodicWave(Float32Array real, Float32Array imag, object constraints)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createPeriodicWave.html) -* -* 在插件中使用:不支持 -* -* 创建一个PeriodicWaveNode -* -* **注意** -* -* `real`和`imag`数组必须拥有一样的长度,否则抛出错误 -* ```js -const real = new Float32Array(2) -const imag = new Float32Array(2) -real[0] = 0 -imag[0] = 0 -real[1] = 1 -imag[1] = 0 - -const waveNode = audioContext.createPeriodicWave(real, imag, {disableNormalization: true}) -``` */ - createPeriodicWave( - /** 一组余弦项(传统上是A项) */ - real: Float32Array, - /** 一组余弦项(传统上是A项) */ - imag: Float32Array, - /** 一个字典对象,它指定是否应该禁用规范化(默认启用规范化) */ - constraints: Constraints - ): PeriodicWaveNode - /** [Promise WebAudioContext.close()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.close.html) -* -* 在插件中使用:不支持 -* -* 关闭WebAudioContext -* -* **注意事项** -* -* 同步关闭对应的WebAudio上下文。close后会立即释放当前上下文的资源,<b>不要在close后再次访问state属性。</b> -* ```js -const audioCtx = wx.createWebAudioContext() -audioCtx.close().then(() => { - console.log(audioCtx.state) // bad case:不应该在close后再访问state -}) -``` */ - close(): Promise<any> - /** [Promise WebAudioContext.resume()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.resume.html) - * - * 在插件中使用:不支持 - * - * 同步恢复已经被暂停的WebAudioContext上下文 */ - resume(): Promise<any> - /** [Promise WebAudioContext.suspend()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.suspend.html) - * - * 在插件中使用:不支持 - * - * 同步暂停WebAudioContext上下文 */ - suspend(): Promise<any> - /** [ScriptProcessorNode WebAudioContext.createScriptProcessor(number bufferSize, number numberOfInputChannels, number numberOfOutputChannels)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createScriptProcessor.html) - * - * 在插件中使用:不支持 - * - * 创建一个ScriptProcessorNode */ - createScriptProcessor( - /** 缓冲区大小,以样本帧为单位 */ - bufferSize: number, - /** 用于指定输入node的声道的数量 */ - numberOfInputChannels: number, - /** 用于指定输出node的声道的数量 */ - numberOfOutputChannels: number - ): ScriptProcessorNode - /** [WaveShaperNode WebAudioContext.createWaveShaper()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createWaveShaper.html) - * - * 在插件中使用:不支持 - * - * 创建一个WaveShaperNode */ - createWaveShaper(): WaveShaperNode - /** [[AudioBuffer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.html) WebAudioContext.createBuffer(number numOfChannels, number length, number sampleRate)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.createBuffer.html) - * - * 在插件中使用:不支持 - * - * 创建一个AudioBuffer,代表着一段驻留在内存中的短音频 */ - createBuffer( - /** 定义了 buffer 中包含的声频通道数量的整数 */ - numOfChannels: number, - /** 代表 buffer 中的样本帧数的整数 */ - length: number, - /** 线性音频样本的采样率,即每一秒包含的关键帧的个数 */ - sampleRate: number - ): AudioBuffer - /** [[AudioBuffer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioBuffer.html) WebAudioContext.decodeAudioData()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.decodeAudioData.html) - * - * 在插件中使用:不支持 - * - * 异步解码一段资源为AudioBuffer。 */ - decodeAudioData(): AudioBuffer - } - interface WifiError { - /** 错误信息 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 0 | ok | 正常 | - * | 12000 | not init | 未先调用 `startWifi` 接口 | - * | 12001 | system not support | 当前系统不支持相关能力 | - * | 12002 | password error Wi-Fi | 密码错误 | - * | 12003 | connection timeout | 连接超时, 仅 Android 支持 | - * | 12004 | duplicate request | 重复连接 Wi-Fi | - * | 12005 | wifi not turned on | Android 特有,未打开 Wi-Fi 开关 | - * | 12006 | gps not turned on | Android 特有,未打开 GPS 定位开关 | - * | 12007 | user denied | 用户拒绝授权链接 Wi-Fi | - * | 12008 | invalid SSID | 无效 SSID | - * | 12009 | system config err | 系统运营商配置拒绝连接 Wi-Fi | - * | 12010 | system internal error | 系统其他错误,需要在 errmsg 打印具体的错误原因 | - * | 12011 | weapp in background | 应用在后台无法配置 Wi-Fi | - * | 12013 | wifi config may be expired | 系统保存的 Wi-Fi 配置过期,建议忘记 Wi-Fi 后重试,仅 Android 支持 | - * | 12014 | invalid WEP / WPA password | iOS 特有,无效的 WEP / WPA 密码 | */ errMsg: string - /** 错误码 - * - * | 错误码 | 错误信息 | 说明 | - * | - | - | - | - * | 0 | ok | 正常 | - * | 12000 | not init | 未先调用 `startWifi` 接口 | - * | 12001 | system not support | 当前系统不支持相关能力 | - * | 12002 | password error Wi-Fi | 密码错误 | - * | 12003 | connection timeout | 连接超时, 仅 Android 支持 | - * | 12004 | duplicate request | 重复连接 Wi-Fi | - * | 12005 | wifi not turned on | Android 特有,未打开 Wi-Fi 开关 | - * | 12006 | gps not turned on | Android 特有,未打开 GPS 定位开关 | - * | 12007 | user denied | 用户拒绝授权链接 Wi-Fi | - * | 12008 | invalid SSID | 无效 SSID | - * | 12009 | system config err | 系统运营商配置拒绝连接 Wi-Fi | - * | 12010 | system internal error | 系统其他错误,需要在 errmsg 打印具体的错误原因 | - * | 12011 | weapp in background | 应用在后台无法配置 Wi-Fi | - * | 12013 | wifi config may be expired | 系统保存的 Wi-Fi 配置过期,建议忘记 Wi-Fi 后重试,仅 Android 支持 | - * | 12014 | invalid WEP / WPA password | iOS 特有,无效的 WEP / WPA 密码 | */ errCode: number - } - interface Worker { - /** [ArrayBuffer Worker.getCameraFrameData()](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.getCameraFrameData.html) -* -* 需要基础库: `2.25.1` -* -* 在插件中使用:不支持 -* -* 获取摄像头当前帧图像,返回ArrayBuffer数据。仅限在 worker 线程中使用。 -* -* **示例代码** -* -* ```js -// app.js -const worker = wx.createWorker('workers/index.js', { - useExperimentalWorker: true -}) - -const cameraContext = wx.createCameraContext() -const cameraFrameListener = cameraContext.onCameraFrame(function() {}) -cameraFrameListener.start({ - worker: worker -}) -``` -* -* ```js -// workers/index.js -const data = worker.getCameraFrameData() -console.log(data) -``` */ - getCameraFrameData(): ArrayBuffer - /** [Worker.onMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.onMessage.html) - * - * 在插件中使用:不支持 - * - * 监听主线程/Worker 线程向当前线程发送的消息的事件。 */ - onMessage( - /** 主线程/Worker 线程向当前线程发送的消息的事件的监听函数 */ - listener: WorkerOnMessageCallback - ): void - /** [Worker.onProcessKilled(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.onProcessKilled.html) - * - * 在插件中使用:不支持 - * - * 监听 worker线程被系统回收事件(当iOS系统资源紧张时,worker线程存在被系统回收的可能,开发者可监听此事件并重新创建一个worker)。仅限在主线程 worker 对象上调用。 */ - onProcessKilled( - /** worker线程被系统回收事件的监听函数 */ - listener: OnProcessKilledCallback - ): void - /** [Worker.postMessage(Object message)](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.postMessage.html) -* -* 在插件中使用:不支持 -* -* 向主线程/Worker 线程发送的消息。 -* -* **示例代码** -* -* worker 线程中 -* ```js -worker.postMessage({ - msg: 'hello from worker' -}) -``` -* -* 主线程中 -* ```js -const worker = wx.createWorker('workers/request/index.js') - -worker.postMessage({ - msg: 'hello from main' -}) -``` -* -* **提醒** -* -* 在基础库版本2.20.2之前,postMessage仅支持传递可序列化的key-value对象。 -* 在基础库2.20.2之后,postMessage支持传递任意类型的数据。 */ - postMessage( - /** 需要发送的消息。 */ - message: IAnyObject - ): void - /** [Worker.terminate()](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.terminate.html) - * - * 在插件中使用:不支持 - * - * 结束当前 Worker 线程。仅限在主线程 worker 对象上调用。 */ - terminate(): void - } - interface WriteSyncError { - /** 错误信息 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | - * | fail permission denied | 指定的 fd 路径没有写权限 | - * | fail sdcard not mounted | android sdcard 挂载失败 | */ errMsg: string - /** 错误码 - * - * | 错误信息 | 说明 | - * | - | - | - * | bad file descriptor | 无效的文件描述符 | - * | fail permission denied | 指定的 fd 路径没有写权限 | - * | fail sdcard not mounted | android sdcard 挂载失败 | */ errCode: number - } - interface Wx { - /** [Array.<any> wx.batchGetStorageSync(Array.<string> keyList)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.batchGetStorageSync.html) -* -* 需要基础库: `2.25.0` -* -* 在插件中使用:不支持 -* -* 从本地缓存中同步批量获取指定 key 的内容。 -* -* **示例代码** -* -* ```js -try { - var valueList = wx.batchGetStorageSync(['key']) - if (valueList) { - // Do something with return value - } -} catch (e) { - // Do something when catch error -} -``` -* -* **** -* -* 对于多个key的读取, 批量读取在性能上优于多次getStorageSync读取 */ - batchGetStorageSync( - /** 本地缓存中指定的 key 数组 */ - keyList: string[] - ): any[] - /** [ArrayBuffer wx.base64ToArrayBuffer(string base64)](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.base64ToArrayBuffer.html) - * - * 需要基础库: `1.1.0` - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [2.4.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 - * - * 将 Base64 字符串转成 ArrayBuffer 对象 */ - base64ToArrayBuffer( - /** 要转化成 ArrayBuffer 对象的 Base64 字符串 */ - base64: string - ): ArrayBuffer - /** [Object wx.getAccountInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/account-info/wx.getAccountInfoSync.html) -* -* 需要基础库: `2.2.2` -* -* 在插件中使用:需要基础库 `2.2.2` -* -* 获取当前帐号信息。线上小程序版本号仅支持在正式版小程序中获取,开发版和体验版中无法获取。 -* -* **示例代码** -* -* ```js -const accountInfo = wx.getAccountInfoSync(); -console.log(accountInfo.miniProgram.appId) // 小程序 appId -console.log(accountInfo.plugin.appId) // 插件 appId -console.log(accountInfo.plugin.version) // 插件版本号, 'a.b.c' 这样的形式 -``` */ - getAccountInfoSync(): AccountInfo - /** [Object wx.getAppAuthorizeSetting()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getAppAuthorizeSetting.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.21.3` -* -* 获取微信APP授权设置 -* -* **示例代码** -* -* ```js -const appAuthorizeSetting = wx.getAppAuthorizeSetting() - -console.log(appAuthorizeSetting.albumAuthorized) -console.log(appAuthorizeSetting.bluetoothAuthorized) -console.log(appAuthorizeSetting.cameraAuthorized) -console.log(appAuthorizeSetting.locationAuthorized) -console.log(appAuthorizeSetting.locationReducedAccuracy) -console.log(appAuthorizeSetting.microphoneAuthorized) -console.log(appAuthorizeSetting.notificationAlertAuthorized) -console.log(appAuthorizeSetting.notificationAuthorized) -console.log(appAuthorizeSetting.notificationBadgeAuthorized) -console.log(appAuthorizeSetting.notificationSoundAuthorized) -console.log(appAuthorizeSetting.phoneCalendarAuthorized) -``` -* -* **返回值说明** -* -* `'authorized'` 表示已经获得授权,无需再次请求授权; -* `'denied'` 表示请求授权被拒绝,无法再次请求授权;(此情况需要引导用户[打开系统设置](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.openAppAuthorizeSetting.html),在设置页中打开权限) -* `'non determined'` 表示尚未请求授权,会在微信下一次调用系统相应权限时请求;(仅 iOS 会出现。此种情况下引导用户打开系统设置,不展示开关) */ - getAppAuthorizeSetting(): AppAuthorizeSetting - /** [Object wx.getAppBaseInfo()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getAppBaseInfo.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.21.3` -* -* 获取微信APP基础信息 -* -* **示例代码** -* -* ```js -const appBaseInfo = wx.getAppBaseInfo() - -console.log(appBaseInfo.SDKVersion) -console.log(appBaseInfo.enableDebug) -console.log(appBaseInfo.host) -console.log(appBaseInfo.language) -console.log(appBaseInfo.version) -console.log(appBaseInfo.theme) -``` */ - getAppBaseInfo(): AppBaseInfo - /** [Object wx.getBatteryInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/device/battery/wx.getBatteryInfoSync.html) - * - * 在插件中使用:需要基础库 `2.15.0` - * - * [wx.getBatteryInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/battery/wx.getBatteryInfo.html) 的同步版本 */ - getBatteryInfoSync(): GetBatteryInfoSyncResult - /** [Object wx.getDeviceInfo()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getDeviceInfo.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.21.3` -* -* 获取设备基础信息 -* -* **示例代码** -* -* ```js -const deviceInfo = wx.getDeviceInfo() - -console.log(deviceInfo.abi) -console.log(deviceInfo.benchmarkLevel) -console.log(deviceInfo.brand) -console.log(deviceInfo.model) -console.log(deviceInfo.platform) -console.log(deviceInfo.system) -``` */ - getDeviceInfo(): DeviceInfo - /** [Object wx.getEnterOptionsSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getEnterOptionsSync.html) - * - * 需要基础库: `2.9.4` - * - * 在插件中使用:需要基础库 `2.9.4` - * - * 获取本次小程序启动时的参数。如果当前是冷启动,则返回值与 [`App.onLaunch`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onLaunch-Object-object) 的回调参数一致;如果当前是热启动,则返回值与 [`App.onShow`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onShow-Object-object) 一致。 - * - * **返回有效 referrerInfo 的场景** - * - * | 场景值 | 场景 | appId含义 | - * | ------ | ------------------------------- | ---------- | - * | 1020 | 公众号 profile 页相关小程序列表 | 来源公众号 | - * | 1035 | 公众号自定义菜单 | 来源公众号 | - * | 1036 | App 分享消息卡片 | 来源App | - * | 1037 | 小程序打开小程序 | 来源小程序 | - * | 1038 | 从另一个小程序返回 | 来源小程序 | - * | 1043 | 公众号模板消息 | 来源公众号 | - * - * **不同 apiCategory 场景下的 API 限制** - * - * `X` 表示 API 被限制无法使用;不在表格中的 API 不限制。 - * - * | | default | nativeFunctionalized | browseOnly | embedded | - * |-|-|-|-|-| - * |navigateToMiniProgram | | `X` | `X` | | - * |openSetting | | | `X` | | - * |<button open-type="share"> | | `X` | `X` | `X` | - * |<button open-type="feedback"> | | | `X` | | - * |<button open-type="open-setting">| | | `X` | | - * |openEmbeddedMiniProgram | | `X` | `X` | `X` | - * - * **注意** - * - * 部分版本在无 `referrerInfo` 的时候会返回 `undefined`,建议使用 `options.referrerInfo && options.referrerInfo.appId` 进行判断。 */ - getEnterOptionsSync(): LaunchOptionsApp - /** [Object wx.getExptInfoSync(Array.<string> keys)](https://developers.weixin.qq.com/miniprogram/dev/api/data-analysis/wx.getExptInfoSync.html) - * - * 需要基础库: `2.17.0` - * - * 在插件中使用:不支持 - * - * 给定实验参数数组,获取对应的实验参数值 - * - * **提示** - * - * 假设实验参数有 `color`, `size` - * 调用 wx.getExptInfoSync() 会返回 `{color:'#fff',size:20}` 类似的结果 - * 而 wx.getExptInfoSync(['color']) 则只会返回 `{color:'#fff'}` */ - getExptInfoSync( - /** 实验参数数组,不填则获取所有实验参数 */ - keys?: string[] - ): IAnyObject - /** [Object wx.getExtConfigSync()](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfigSync.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:不支持 -* -* [wx.getExtConfig](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfig.html) 的同步版本。 -* -* **Tips** -* -* 1. 本接口暂时无法通过 [wx.canIUse](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.canIUse.html) 判断是否兼容,开发者需要自行判断 [wx.getExtConfigSync](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfigSync.html) 是否存在来兼容 -* -* **** -* -* ```js -let extConfig = wx.getExtConfigSync? wx.getExtConfigSync(): {} -console.log(extConfig) -``` */ - getExtConfigSync(): IAnyObject - /** [Object wx.getLaunchOptionsSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/life-cycle/wx.getLaunchOptionsSync.html) - * - * 需要基础库: `2.1.2` - * - * 在插件中使用:需要基础库 `2.9.4` - * - * 获取小程序启动时的参数。与 [`App.onLaunch`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onlaunchobject-object) 的回调参数一致。 - * - * **返回有效 referrerInfo 的场景** - * - * | 场景值 | 场景 | appId含义 | - * | ------ | ------------------------------- | ---------- | - * | 1020 | 公众号 profile 页相关小程序列表 | 来源公众号 | - * | 1035 | 公众号自定义菜单 | 来源公众号 | - * | 1036 | App 分享消息卡片 | 来源App | - * | 1037 | 小程序打开小程序 | 来源小程序 | - * | 1038 | 从另一个小程序返回 | 来源小程序 | - * | 1043 | 公众号模板消息 | 来源公众号 | - * | 1069 | 移动应用 | 来源App | - * - * **不同 apiCategory 场景下的 API 限制** - * - * `X` 表示 API 被限制无法使用;不在表格中的 API 不限制。 - * - * | | default | nativeFunctionalized | browseOnly | embedded | - * |-|-|-|-|-| - * |navigateToMiniProgram | | `X` | `X` | | - * |openSetting | | | `X` | | - * |<button open-type="share"> | | `X` | `X` | `X` | - * |<button open-type="feedback"> | | | `X` | | - * |<button open-type="open-setting">| | | `X` | | - * |openEmbeddedMiniProgram | | `X` | `X` | `X` | - * - * **注意** - * - * 部分版本在无`referrerInfo`的时候会返回 `undefined`,建议使用 `options.referrerInfo && options.referrerInfo.appId` 进行判断。 */ - getLaunchOptionsSync(): LaunchOptionsApp - /** [Object wx.getMenuButtonBoundingClientRect()](https://developers.weixin.qq.com/miniprogram/dev/api/ui/menu/wx.getMenuButtonBoundingClientRect.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 获取菜单按钮(右上角胶囊按钮)的布局位置信息。坐标信息以屏幕左上角为原点。 -* -* **示例代码** -* -* ```js -const res = wx.getMenuButtonBoundingClientRect() - -console.log(res.width) -console.log(res.height) -console.log(res.top) -console.log(res.right) -console.log(res.bottom) -console.log(res.left) -``` */ - getMenuButtonBoundingClientRect(): ClientRect - /** [Object wx.getStorageInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageInfoSync.html) -* -* 在插件中使用:不支持 -* -* [wx.getStorageInfo](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageInfo.html) 的同步版本 -* -* **示例代码** -* -* ```js -wx.getStorageInfo({ - success (res) { - console.log(res.keys) - console.log(res.currentSize) - console.log(res.limitSize) - } -}) -``` -* -* ```js -try { - const res = wx.getStorageInfoSync() - console.log(res.keys) - console.log(res.currentSize) - console.log(res.limitSize) -} catch (e) { - // Do something when catch error -} -``` */ - getStorageInfoSync(): GetStorageInfoSyncOption - /** [Object wx.getSystemInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoSync.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* [wx.getSystemInfo](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfo.html) 的同步版本 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/WkUCgXmS7mqO) -* -* ```js -wx.getSystemInfo({ - success (res) { - console.log(res.model) - console.log(res.pixelRatio) - console.log(res.windowWidth) - console.log(res.windowHeight) - console.log(res.language) - console.log(res.version) - console.log(res.platform) - } -}) -``` -* -* ```js -try { - const res = wx.getSystemInfoSync() - console.log(res.model) - console.log(res.pixelRatio) - console.log(res.windowWidth) - console.log(res.windowHeight) - console.log(res.language) - console.log(res.version) - console.log(res.platform) -} catch (e) { - // Do something when catch error -} -``` */ - getSystemInfoSync(): SystemInfo - /** [Object wx.getSystemSetting()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemSetting.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.21.3` -* -* 获取设备设置 -* -* **示例代码** -* -* ```js -const systemSetting = wx.getSystemSetting() - -console.log(systemSetting.bluetoothEnabled) -console.log(systemSetting.deviceOrientation) -console.log(systemSetting.locationEnabled) -console.log(systemSetting.wifiEnabled) -``` */ - getSystemSetting(): SystemSetting - /** [Object wx.getWindowInfo()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getWindowInfo.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.21.3` -* -* 获取窗口信息 -* -* **示例代码** -* -* ```js -const windowInfo = wx.getWindowInfo() - -console.log(windowInfo.pixelRatio) -console.log(windowInfo.screenWidth) -console.log(windowInfo.screenHeight) -console.log(windowInfo.windowWidth) -console.log(windowInfo.windowHeight) -console.log(windowInfo.statusBarHeight) -console.log(windowInfo.safeArea) -console.log(windowInfo.screenTop) -``` */ - getWindowInfo(): WindowInfo - /** [[Animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html) wx.createAnimation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/wx.createAnimation.html) - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 创建一个动画实例 [animation](https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/Animation.html)。调用实例的方法来描述动画。最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性。 */ - createAnimation(option: StepOption): Animation - /** [[AudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.html) wx.createAudioContext(string id, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createAudioContext.html) - * - * 在插件中使用:需要基础库 `1.9.6` - * @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 - * - * 创建 [audio](https://developers.weixin.qq.com/miniprogram/dev/component/audio.html) 上下文 [AudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.html) 对象。 */ - createAudioContext( - /** [audio](https://developers.weixin.qq.com/miniprogram/dev/component/audio.html) 组件的 id */ - id: string, - /** 在自定义组件下,当前组件实例的this,以操作组件内 [audio](https://developers.weixin.qq.com/miniprogram/dev/component/audio.html) 组件 */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): AudioContext - /** [[BackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.html) wx.getBackgroundAudioManager()](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 获取**全局唯一**的背景音频管理器。 - * 小程序切入后台,如果音频处于播放状态,可以继续播放。但是后台状态不能通过调用API操纵音频的播放状态。 - * - * 从微信客户端6.7.2版本开始,若需要在小程序切后台后继续播放音频,需要在 [app.json](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html) 中配置 `requiredBackgroundModes` 属性。开发版和体验版上可以直接生效,正式版还需通过审核。 */ - getBackgroundAudioManager(): BackgroundAudioManager - /** [[CacheManager](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/CacheManager.html) wx.createCacheManager(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/cachemanager/wx.createCacheManager.html) -* -* 需要基础库: `2.24.0` -* -* 在插件中使用:不支持 -* -* 创建缓存管理器 -* -* **示例代码** -* -* <a href="https://github.com/wechat-miniprogram/miniprogram-offline-demo" target="_blank">查看完整示例代码</a> -* -* ```js -const cacheManager = createCacheManager() -cacheManager.addRule(/https:\/\/(?:.*)/ig) // 表示所有 https 请求都匹配 - -cacheManager.on('request', evt => { - // 在弱网时接收到 wx.request 请求 - return new Promise((resolve, reject) => { - const matchRes = cm.match(evt) - if (matchRes && matchRes.data) { - // 有缓存,返回 - resolve(matchRes.data) - } else { - // 没缓存,抛错 - reject({ errMsg: 'no cache' }) - } - }) -}) -``` */ - createCacheManager(option: CreateCacheManagerOption): CacheManager - /** [[CameraContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.html) wx.createCameraContext()](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/wx.createCameraContext.html) - * - * 需要基础库: `1.6.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 创建 [camera](https://developers.weixin.qq.com/miniprogram/dev/component/camera.html) 上下文 [CameraContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/camera/CameraContext.html) 对象。 */ - createCameraContext(): CameraContext - /** [[CanvasContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) wx.createCanvasContext(string canvasId, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createCanvasContext.html) - * - * 在插件中使用:需要基础库 `1.9.6` - * @deprecated 基础库版本 [2.9.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [Canvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.html) 替换 - * - * 创建 canvas 的绘图上下文 [CanvasContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.html) 对象 */ - createCanvasContext( - /** 要获取上下文的 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件 canvas-id 属性 */ - canvasId: string, - /** 在自定义组件下,当前组件实例的this,表示在这个自定义组件下查找拥有 canvas-id 的 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) ,如果省略则不在任何自定义组件内查找 */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): CanvasContext - /** [[DownloadTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.html) wx.downloadFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 下载文件资源到本地。客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径 (本地路径),单次下载允许的最大文件为 200MB。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 -* -* 注意:请在服务端响应的 header 中指定合理的 `Content-Type` 字段,以保证客户端正确处理文件类型。 -* -* **示例代码** -* -* ```js -wx.downloadFile({ - url: 'https://example.com/audio/123', //仅为示例,并非真实的资源 - success (res) { - // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容 - if (res.statusCode === 200) { - wx.playVoice({ - filePath: res.tempFilePath - }) - } - } -}) -``` */ - downloadFile(option: DownloadFileOption): DownloadTask - /** [[FileSystemManager](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.html) wx.getFileSystemManager()](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.getFileSystemManager.html) - * - * 需要基础库: `1.9.9` - * - * 在插件中使用:需要基础库 `2.19.2` - * - * 获取全局唯一的文件管理器 */ - getFileSystemManager(): FileSystemManager - /** [[InnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.html) wx.createInnerAudioContext(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 创建内部 [audio](https://developers.weixin.qq.com/miniprogram/dev/component/audio.html) 上下文 [InnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.html) 对象。 -* -* **示例代码** -* -* ```js -const innerAudioContext = wx.createInnerAudioContext({ - useWebAudioImplement: false // 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项 -}) -innerAudioContext.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46' - -innerAudioContext.play() // 播放 - -innerAudioContext.pause() // 暂停 - -innerAudioContext.stop() // 停止 -``` */ - createInnerAudioContext( - option?: CreateInnerAudioContextOption - ): InnerAudioContext - /** [[IntersectionObserver](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/IntersectionObserver.html) wx.createIntersectionObserver(Object component, Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createIntersectionObserver.html) - * - * 需要基础库: `1.9.3` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 创建并返回一个 IntersectionObserver 对象实例。在自定义组件或包含自定义组件的页面中,应使用 `this.createIntersectionObserver([options])` 来代替。 - * - * **示例代码** - * - * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/LAbMxkmI7F2A) */ - createIntersectionObserver( - /** 自定义组件实例 */ - component: IAnyObject, - /** 选项 */ - options?: CreateIntersectionObserverOption - ): IntersectionObserver - /** [[InterstitialAd](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.html) wx.createInterstitialAd(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/wx.createInterstitialAd.html) - * - * 需要基础库: `2.6.0` - * - * 在插件中使用:需要基础库 `2.8.1` - * - * 创建插屏广告组件。请通过 [wx.getSystemInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoSync.html) 返回对象的 SDKVersion 判断基础库版本号后再使用该 API。每次调用该方法创建插屏广告都会返回一个全新的实例(小程序端的插屏广告实例不允许跨页面使用)。 */ - createInterstitialAd(option: CreateInterstitialAdOption): InterstitialAd - /** [[LivePlayerContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.html) wx.createLivePlayerContext(string id, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/wx.createLivePlayerContext.html) - * - * 需要基础库: `1.7.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 创建 [live-player](https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html) 上下文 [LivePlayerContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePlayerContext.html) 对象。建议使用 [wx.createSelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) 获取 context 对象。 */ - createLivePlayerContext( - /** [live-player](https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html) 组件的 id */ - id: string, - /** 在自定义组件下,当前组件实例的this,以操作组件内 [live-player](https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html) 组件 */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): LivePlayerContext - /** [[LivePusherContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.html) wx.createLivePusherContext()](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/wx.createLivePusherContext.html) - * - * 需要基础库: `1.7.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 创建 [live-pusher](https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html) 上下文 [LivePusherContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/live/LivePusherContext.html) 对象。 */ - createLivePusherContext(): LivePusherContext - /** [[LogManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/LogManager.html) wx.getLogManager(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.getLogManager.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:不支持 -* -* 获取日志管理器对象。 -* -* **示例代码** -* -* ```js -const logger = wx.getLogManager({level: 1}) -logger.log({str: 'hello world'}, 'basic log', 100, [1, 2, 3]) -logger.info({str: 'hello world'}, 'info log', 100, [1, 2, 3]) -logger.debug({str: 'hello world'}, 'debug log', 100, [1, 2, 3]) -logger.warn({str: 'hello world'}, 'warn log', 100, [1, 2, 3]) -``` */ - getLogManager(option: GetLogManagerOption): LogManager - /** [[MapContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.html) wx.createMapContext(string mapId, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/wx.createMapContext.html) - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 创建 [map](https://developers.weixin.qq.com/miniprogram/dev/component/map.html) 上下文 [MapContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.html) 对象。建议使用 [wx.createSelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) 获取 context 对象。 */ - createMapContext( - /** [map](https://developers.weixin.qq.com/miniprogram/dev/component/map.html) 组件的 id */ - mapId: string, - /** 在自定义组件下,当前组件实例的this,以操作组件内 [map](https://developers.weixin.qq.com/miniprogram/dev/component/map.html) 组件 */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): MapContext - /** [[MediaAudioPlayer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.html) wx.createMediaAudioPlayer()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createMediaAudioPlayer.html) -* -* 需要基础库: `2.13.0` -* -* 在插件中使用:支持 -* -* 创建媒体音频播放器对象 [MediaAudioPlayer](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.html) 对象,可用于播放视频解码器 [VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) 输出的音频。 -* -* **示例代码** -* -* ```js - // 创建视频解码器,具体参数见 createVideoDecoder 文档 - const videoDecoder = wx.createVideoDecoder() - // 创建媒体音频播放器 - const mediaAudioPlayer = wx.createMediaAudioPlayer() - // 启动视频解码器 - videoDecoder.start() - // 启动播放器 - mediaAudioPlayer.start().then(() => { - // 添加播放器音频来源 - mediaAudioPlayer.addAudioSource(videoDecoder).then(res => { - videoDecoder.getFrameData() // 建议在 requestAnimationFrame 里获取每一帧视频数据 - console.log(res) - }) - - // 移除播放器音频来源 - mediaAudioPlayer.removeAudioSource(videoDecoder).then() - // 停止播放器 - mediaAudioPlayer.stop().then() - // 销毁播放器 - mediaAudioPlayer.destroy().then() - // 设置播放器音量 - mediaAudioPlayer.volume = 0.5 - }) -``` -* -* **完整demo(小游戏)** -* -* - https://developers.weixin.qq.com/s/SF2duHmb7MjI */ - createMediaAudioPlayer(): MediaAudioPlayer - /** [[MediaContainer](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/MediaContainer.html) wx.createMediaContainer()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-processing/wx.createMediaContainer.html) - * - * 需要基础库: `2.9.0` - * - * 在插件中使用:需要基础库 `2.10.0` - * - * 创建音视频处理容器,最终可将容器中的轨道合成一个视频 */ - createMediaContainer(): MediaContainer - /** [[MediaRecorder](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.html) wx.createMediaRecorder(Object canvas, Object options)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/wx.createMediaRecorder.html) -* -* 需要基础库: `2.11.0` -* -* 在插件中使用:需要基础库 `2.11.0` -* -* 创建 WebGL 画面录制器,可逐帧录制在 WebGL 上渲染的画面并导出视频文件 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/MCz3kPmC7zpa) -* -* **低版本异步接口兼容** -* -* 对基础库 2.16.1 版本前的 mediaRecorder,所有的接口都没有返回 Promise 对象,若需要兼容低版本,则可采用如下方式的写法: -* ```javascript -// 启动 mediaRecorder -await new Promise(resolve => { - recorder.on('start', resolve) - recorder.start() -}) - -// 逐帧绘制 -while (frames--) { - await new Promise(resolve => recorder.requestFrame(resolve)) - render() -} - -// 绘制完成,生成视频 -const {tempFilePath} = await new Promise(resolve => { - recorder.on('stop', resolve) - recorder.stop() -}) -``` */ - createMediaRecorder( - /** WebGL 对象,通过 [SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) 获取到的 node 对象或通过 [wx.createOffscreenCanvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html) 创建的离屏 WebGL Canvas 对象 */ - canvas: IAnyObject, - options: CreateMediaRecorderOption - ): MediaRecorder - /** [[NFCAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.html) wx.getNFCAdapter()](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/wx.getNFCAdapter.html) - * - * 需要基础库: `2.11.2` - * - * 在插件中使用:需要基础库 `2.11.2` - * - * 获取 NFC 实例 - * - * **示例代码** - * - * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/1WsbDwmb75ig) */ - getNFCAdapter(): NFCAdapter - /** [[OffscreenCanvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.html) wx.createOffscreenCanvas(object object, number width, number height, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html) - * - * 需要基础库: `2.16.1` - * - * 在插件中使用:需要基础库 `2.16.1` - * - * 创建离屏 canvas 实例 - * - * **离屏 Canvas 类型不可混用** - * - * 由于 webgl canvas 和 2d canvas 的底层实现方式不同,因此必须要在调用 `wx.createOffscreenCanvas` 时提前指定类型。 - * - * 指定类型后,离屏 canvas `getContext(type)` 调用不允许混用,如不能对 webgl canvas 调用 `getContext('2d')`。 - * - * 同样的,不同类型 canvas 调用 `createImage` 创建的图片对象也不支持混用,使用时请注意尽量使用 canvas 自身的 `createImage` 创建图片对象。 - * - * **与 MediaRecorder 结合** - * - * 离屏 webgl canvas 支持作为参数传递给 [`wx.createMediaRecorder`](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/wx.createMediaRecorder.html), 离屏 2d canvas 暂不支持。 - * - * **旧版 createOffscreenCanvas** - * - * 旧版函数签名为 `wx.createOffscreenCanvas(width: number, height: number, this: object): OffscreenCanvas`,从基础库 2.7.0 开始支持 - * - * 从基础库 2.16.1 开始改为 `wx.createOffscreenCanvas(options: object): OffscreenCanvas`,向下兼容旧版入参。 - * 但需注意旧版入参只能创建 webgl 类型,如需创建 2d 类型则必须使用新版。 */ - createOffscreenCanvas( - /** 画布宽度 */ - width: number, - /** 画布高度 */ - height: number, - /** 在自定义组件下,当前组件实例的 this */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): OffscreenCanvas - /** [[OffscreenCanvas](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/OffscreenCanvas.html) wx.createOffscreenCanvas(object object, number width, number height, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html) - * - * 需要基础库: `2.16.1` - * - * 在插件中使用:需要基础库 `2.16.1` - * - * 创建离屏 canvas 实例 - * - * **离屏 Canvas 类型不可混用** - * - * 由于 webgl canvas 和 2d canvas 的底层实现方式不同,因此必须要在调用 `wx.createOffscreenCanvas` 时提前指定类型。 - * - * 指定类型后,离屏 canvas `getContext(type)` 调用不允许混用,如不能对 webgl canvas 调用 `getContext('2d')`。 - * - * 同样的,不同类型 canvas 调用 `createImage` 创建的图片对象也不支持混用,使用时请注意尽量使用 canvas 自身的 `createImage` 创建图片对象。 - * - * **与 MediaRecorder 结合** - * - * 离屏 webgl canvas 支持作为参数传递给 [`wx.createMediaRecorder`](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/wx.createMediaRecorder.html), 离屏 2d canvas 暂不支持。 - * - * **旧版 createOffscreenCanvas** - * - * 旧版函数签名为 `wx.createOffscreenCanvas(width: number, height: number, this: object): OffscreenCanvas`,从基础库 2.7.0 开始支持 - * - * 从基础库 2.16.1 开始改为 `wx.createOffscreenCanvas(options: object): OffscreenCanvas`,向下兼容旧版入参。 - * 但需注意旧版入参只能创建 webgl 类型,如需创建 2d 类型则必须使用新版。 */ - createOffscreenCanvas( - option: CreateOffscreenCanvasOption - ): OffscreenCanvas - /** [[Performance](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/Performance.html) wx.getPerformance()](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.getPerformance.html) -* -* 需要基础库: `2.11.0` -* -* 在插件中使用:支持 -* -* 获取当前小程序性能相关的信息。关于小程序启动性能优化的更多内容,请参考[启动性能指南](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips/start.html)。 -* -* **** -* -* 目前支持获取以下几类性能指标,具体内容请参考 [PerformanceEntry](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html): -* -* | 指标类型(entryType) | 指标名称 | 最低版本 | -* | ------------------- | ---------------- | ------ | -* | 路由(navigation) | route: 路由性能 | | -* | 路由(navigation) | appLaunch: 小程序启动耗时 | | -* | 渲染(render) | firstRender: 页面首次渲染耗时 | | -* | 渲染(render) | firstPaint: 页面首次绘制 | <2.21.2> | -* | 渲染(render) | firstContentfulPaint: 页面首次内容绘制 | <2.21.2> | -* | 渲染(render) | largestContentfulPaint: 页面最大内容绘制 | <2.23.1> | -* | 脚本(script) | evaluateScript: 注入脚本耗时 | | -* | 包加载(loadPackage)| downloadPackage: 代码包下载耗时 | <2.24.0> | -* | 资源(resource) | resourceTiming: 视图层资源加载耗时 | <2.24.0> | -* -* **示例代码** -* -* ```js -const performance = wx.getPerformance() -const observer = performance.createObserver((entryList) => { - console.log(entryList.getEntries()) -}) -observer.observe({ entryTypes: ['render', 'script', 'navigation'] }) -``` -* -* **注意** -* -* - 目前,当开启代码 [按需注入](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/lazyload.html) 时,`evaluateScript` 将仅包含公有部分代码(2.21.2 开始会区分公共部分/页面和组件的部分),页面和组件的代码注入的时间会包含在 `firstRender` 中(因为页面和组件的代码注入过程成为了首次渲染过程的一部分)。因此开启按需注入后,脚本耗时降低,渲染时间提高属于正常现象,优化效果可以关注整体启动耗时(`appLaunch`)来评估。 -* - firstPaint 和 firstContentfulPaint 指标在开启 vConsole 的情况下,由于绘制 vConsole 面板,会导致数据提前。 */ - getPerformance(): Performance - /** [[RealtimeLogManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/RealtimeLogManager.html) wx.getRealtimeLogManager()](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.getRealtimeLogManager.html) -* -* 需要基础库: `2.7.1` -* -* 在插件中使用:需要基础库 `2.16.0` -* -* 获取实时日志管理器对象。 -* -* **示例代码** -* -* ```js -// 小程序端 -const logger = wx.getRealtimeLogManager() -logger.info({str: 'hello world'}, 'info log', 100, [1, 2, 3]) -logger.error({str: 'hello world'}, 'error log', 100, [1, 2, 3]) -logger.warn({str: 'hello world'}, 'warn log', 100, [1, 2, 3]) - -// 插件端,基础库 2.16.0 版本后支持,只允许采用 key-value 的新格式上报 -const logManager = wx.getRealtimeLogManager() -const logger = logManager.tag('plugin-log1') -logger.info('key1', 'value1') -logger.error('key2', {str: 'value2'}) -logger.warn('key3', 'value3') -``` */ - getRealtimeLogManager(): RealtimeLogManager - /** [[RecorderManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.html) wx.getRecorderManager()](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.getRecorderManager.html) - * - * 需要基础库: `1.6.0` - * - * 在插件中使用:需要基础库 `1.9.94` - * - * 获取**全局唯一**的录音管理器 RecorderManager */ - getRecorderManager(): RecorderManager - /** [[RequestTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/RequestTask.html) wx.request(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 发起 HTTPS 网络请求。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 -* -* **data 参数说明** -* -* 最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下: -* - 对于 `GET` 方法的数据,会将数据转换成 query string(`encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...`) -* - 对于 `POST` 方法且 `header['content-type']` 为 `application/json` 的数据,会对数据进行 JSON 序列化 -* - 对于 `POST` 方法且 `header['content-type']` 为 `application/x-www-form-urlencoded` 的数据,会将数据转换成 query string `(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)` -* -* **示例代码** -* -* ```js -wx.request({ - url: 'example.php', //仅为示例,并非真实的接口地址 - data: { - x: '', - y: '' - }, - header: { - 'content-type': 'application/json' // 默认值 - }, - success (res) { - console.log(res.data) - } -}) -``` */ - request< - T extends string | IAnyObject | ArrayBuffer = - | string - | IAnyObject - | ArrayBuffer - >( - option: RequestOption<T> - ): RequestTask - /** [[RewardedVideoAd](https://developers.weixin.qq.com/miniprogram/dev/api/ad/RewardedVideoAd.html) wx.createRewardedVideoAd(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/wx.createRewardedVideoAd.html) - * - * 需要基础库: `2.0.4` - * - * 在插件中使用:需要基础库 `2.8.1` - * - * 创建激励视频广告组件。请通过 [wx.getSystemInfoSync()](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoSync.html) 返回对象的 SDKVersion 判断基础库版本号后再使用该 API(小游戏端要求 >= 2.0.4, 小程序端要求 >= 2.6.0)。调用该方法创建的激励视频广告是一个单例(小游戏端是全局单例,小程序端是页面内单例,在小程序端的单例对象不允许跨页面使用)。 */ - createRewardedVideoAd( - option: CreateRewardedVideoAdOption - ): RewardedVideoAd - /** [[SelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/SelectorQuery.html) wx.createSelectorQuery()](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) -* -* 需要基础库: `1.4.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 返回一个 SelectorQuery 对象实例。在自定义组件或包含自定义组件的页面中,应使用 `this.createSelectorQuery()` 来代替。 -* -* **示例代码** -* -* ```js -const query = wx.createSelectorQuery() -query.select('#the-id').boundingClientRect() -query.selectViewport().scrollOffset() -query.exec(function(res){ - res[0].top // #the-id节点的上边界坐标 - res[1].scrollTop // 显示区域的竖直滚动位置 -}) -``` */ - createSelectorQuery(): SelectorQuery - /** [[SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) wx.connectSocket(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.connectSocket.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** -* -* 创建一个 WebSocket 连接。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 -* -* **并发数** -* -* - 1.7.0 及以上版本,最多可以同时存在 5 个 WebSocket 连接。 -* - 1.7.0 以下版本,一个小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。 -* -* **示例代码** -* -* ```js -wx.connectSocket({ - url: 'wss://example.qq.com', - header:{ - 'content-type': 'application/json' - }, - protocols: ['protocol1'] -}) -``` */ - connectSocket(option: ConnectSocketOption): SocketTask - /** [[TCPSocket](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/TCPSocket.html) wx.createTCPSocket()](https://developers.weixin.qq.com/miniprogram/dev/api/network/tcp/wx.createTCPSocket.html) - * - * 需要基础库: `2.18.0` - * - * 在插件中使用:支持 - * - * 创建一个 TCP Socket 实例。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 - * - * **连接限制** - * - * - 允许与局域网内的非本机 IP 通信 - * - 允许与配置过的服务器域名通信,详见[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html) - * - 禁止与以下端口号连接:`1024 以下` `1099` `1433` `1521` `1719` `1720` `1723` `2049` `2375` `3128` `3306` `3389` `3659` `4045` `5060` `5061` `5432` `5984` `6379` `6000` `6566` `7001` `7002` `8000-8100` `8443` `8888` `9200` `9300` `10051` `10080` `11211` `27017` `27018` `27019` - * - 每 5 分钟内最多创建 20 个 TCPSocket */ - createTCPSocket(): TCPSocket - /** [[UDPSocket](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/UDPSocket.html) wx.createUDPSocket()](https://developers.weixin.qq.com/miniprogram/dev/api/network/udp/wx.createUDPSocket.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 创建一个 UDP Socket 实例。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 */ - createUDPSocket(): UDPSocket - /** [[UpdateManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html) wx.getUpdateManager()](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/wx.getUpdateManager.html) - * - * 需要基础库: `1.9.90` - * - * 在插件中使用:不支持 - * - * 获取**全局唯一**的版本更新管理器,用于管理小程序更新。关于小程序的更新机制,可以查看[运行机制](https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/operating-mechanism.html)文档。 - * - * **示例代码** - * - * [示例代码](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html#示例代码) */ - getUpdateManager(): UpdateManager - /** [[UploadTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/UploadTask.html) wx.uploadFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求,其中 `content-type` 为 `multipart/form-data`。使用前请注意阅读[相关说明](https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html)。 -* -* **示例代码** -* -* ```js -wx.chooseImage({ - success (res) { - const tempFilePaths = res.tempFilePaths - wx.uploadFile({ - url: 'https://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址 - filePath: tempFilePaths[0], - name: 'file', - formData: { - 'user': 'test' - }, - success (res){ - const data = res.data - //do something - } - }) - } -}) -``` */ - uploadFile(option: UploadFileOption): UploadTask - /** [[UserCryptoManager](https://developers.weixin.qq.com/miniprogram/dev/api/base/crypto/UserCryptoManager.html) wx.getUserCryptoManager()](https://developers.weixin.qq.com/miniprogram/dev/api/base/crypto/wx.getUserCryptoManager.html) - * - * 需要基础库: `2.17.3` - * - * 在插件中使用:不支持 - * - * 获取用户加密模块 */ - getUserCryptoManager(): UserCryptoManager - /** [[VKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/VKSession.html) wx.createVKSession(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) -* -* 需要基础库: `2.20.0` -* -* 在插件中使用:需要基础库 `2.20.0` -* -* 创建 vision kit 会话对象。 -* -* **示例代码** -* -* v1 版本:[VisionKit基础能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/visionkit-basic) -* v2 版本:[VisionKit-v2基础能力使用参考](https://github.com/wechat-miniprogram/miniprogram-demo/tree/master/miniprogram/packageAPI/pages/ar/visionkit-basic-v2) -* ```js -// 以下 demo 以 v2 为例 -// 创建 session 对象 -const ssession = wx.createVKSession({ - track: { - plane: {mode: 3}, - }, - version: 'v2', - gl, // WebGLRenderingContext -}) - -// 逐帧分析 -const onFrame = timestamp => { - // 开发者可以自己控制帧率 - const frame = session.getVKFrame(canvasWidth, canvasHeight) - if (frame) { - // 分析完毕,可以拿到帧对象 - doRender(frame) - } - - session.requestAnimationFrame(onFrame) -} -session.start(err => { - if (!err) session.requestAnimationFrame(onFrame) -}) - -// 渲染函数 -const doRender = frame => { - // ... -} -``` */ - createVKSession(option: VKConfig): VKSession - /** [[VideoContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.html) wx.createVideoContext(string id, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.createVideoContext.html) - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 创建 [video](https://developers.weixin.qq.com/miniprogram/dev/component/video.html) 上下文 [VideoContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/VideoContext.html) 对象。建议使用 [wx.createSelectorQuery](https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html) 获取 context 对象。 */ - createVideoContext( - /** [video](https://developers.weixin.qq.com/miniprogram/dev/component/video.html) 组件的 id */ - id: string, - /** 在自定义组件下,当前组件实例的this,以操作组件内 [video](https://developers.weixin.qq.com/miniprogram/dev/component/video.html) 组件 */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): VideoContext - /** [[VideoDecoder](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/VideoDecoder.html) wx.createVideoDecoder()](https://developers.weixin.qq.com/miniprogram/dev/api/media/video-decoder/wx.createVideoDecoder.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:需要基础库 `2.11.0` - * - * 创建视频解码器,可逐帧获取解码后的数据 */ - createVideoDecoder(): VideoDecoder - /** [[WebAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/WebAudioContext.html) wx.createWebAudioContext()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createWebAudioContext.html) - * - * 需要基础库: `2.19.0` - * - * 在插件中使用:不支持 - * - * 创建 WebAudio 上下文。 */ - createWebAudioContext(): WebAudioContext - /** [[Worker](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.html) wx.createWorker(string scriptPath, object options)](https://developers.weixin.qq.com/miniprogram/dev/api/worker/wx.createWorker.html) -* -* 需要基础库: `1.9.90` -* -* 在插件中使用:需要基础库 `2.18.1` -* -* 创建一个 Worker 线程 -* -* **示例代码** -* -* ```js -// 创建普通worker -wx.createWorker('workers/index.js') -``` -* ```js -function createNewWorker() { - const worker = wx.createWorker('workers/index.js', { - useExperimentalWorker: true - }) - // 监听worker被系统回收事件 - worker.onProcessKilled(() => { - // 重新创建一个worker - createNewWorker() - }) -} -// 创建实验worker -createNewWorker() -``` */ - createWorker( - /** worker 入口文件的**绝对路径** */ - scriptPath: string, - /** 可选参数 */ - options?: CreateWorkerOption - ): Worker - /** [any wx.getStorageSync(string key)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageSync.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 从本地缓存中同步获取指定 key 的内容。 -* -* **注意** -* -* storage 应只用来进行数据的持久化存储,不应用于运行时的数据传递或全局状态管理。启动过程中过多的同步读写存储,会显著影响启动耗时。 -* -* **示例代码** -* -* ```js -try { - var value = wx.getStorageSync('key') - if (value) { - // Do something with return value - } -} catch (e) { - // Do something when catch error -} -``` */ - getStorageSync<T = any>( - /** 本地缓存中指定的 key */ - key: string - ): T - /** [boolean wx.canIUse(string schema)](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.canIUse.html) -* -* 需要基础库: `1.1.1` -* -* 在插件中使用:不支持 -* -* 判断小程序的API,回调,参数,组件等是否在当前版本可用。 -* -* **参数说明** -* -* - `${API}` 代表 API 名字 -* - `${method}` 代表调用方式,有效值为return, success, object, callback -* - `${param}` 代表参数或者返回值 -* - `${option}` 代表参数的可选值或者返回值的属性 -* - `${component}` 代表组件名字 -* - `${attribute}` 代表组件属性 -* - `${option}` 代表组件属性的可选值 -* -* **示例代码** -* -* ```js -// 对象的属性或方法 -wx.canIUse('console.log') -wx.canIUse('CameraContext.onCameraFrame') -wx.canIUse('CameraFrameListener.start') -wx.canIUse('Image.src') - -// wx接口参数、回调或者返回值 -wx.canIUse('openBluetoothAdapter') -wx.canIUse('getSystemInfoSync.return.safeArea.left') -wx.canIUse('getSystemInfo.success.screenWidth') -wx.canIUse('showToast.object.image') -wx.canIUse('onCompassChange.callback.direction') -wx.canIUse('request.object.method.GET') - -// 组件的属性 -wx.canIUse('live-player') -wx.canIUse('text.selectable') -wx.canIUse('button.open-type.contact') -``` */ - canIUse( - /** 使用 `${API}.${method}.${param}.${option}` 或者 `${component}.${attribute}.${option}` 方式来调用 */ - schema: string - ): boolean - /** [boolean wx.isVKSupport(string version)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.isVKSupport.html) -* -* 需要基础库: `2.22.0` -* -* 在插件中使用:需要基础库 `2.22.0` -* -* 判断支持版本 -* -* **示例代码** -* -* ```js -const isSupportV2 = wx.isVKSupport('v2') -``` */ - isVKSupport( - /** 参数 version 可选值: - * - 'v1': 旧版本; - * - 'v2': v2 版本,目前只有 iOS 基础库 2.22.0 以上支持; */ - version: 'v1' | 'v2' - ): boolean - /** [string wx.arrayBufferToBase64(ArrayBuffer arrayBuffer)](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.arrayBufferToBase64.html) - * - * 需要基础库: `1.1.0` - * - * 在插件中使用:支持 - * @deprecated 基础库版本 [2.4.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 - * - * 将 ArrayBuffer 对象转成 Base64 字符串 */ - arrayBufferToBase64( - /** 要转换成 Base64 字符串的 ArrayBuffer 对象 */ - arrayBuffer: ArrayBuffer - ): string - /** [wx.addCard(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/card/wx.addCard.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:不支持 -* -* 批量添加卡券。只有通过 [认证](https://developers.weixin.qq.com/miniprogram/product/renzheng.html) 的小程序或文化互动类目的小游戏才能使用。更多文档请参考 [微信卡券接口文档](https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1490190158&version=1&lang=zh_CN&platform=2)。 -* -* **cardExt 说明** -* -* cardExt 是卡券的扩展参数,其值是一个 JSON 字符串。 -* -* **示例代码** -* -* ```js -wx.addCard({ - cardList: [ - { - cardId: '', - cardExt: '{"code": "", "openid": "", "timestamp": "", "signature":""}' - }, { - cardId: '', - cardExt: '{"code": "", "openid": "", "timestamp": "", "signature":""}' - } - ], - success (res) { - console.log(res.cardList) // 卡券添加结果 - } -}) -``` */ - addCard<T extends AddCardOption = AddCardOption>( - option: T - ): PromisifySuccessResult<T, AddCardOption> - /** [wx.addFileToFavorites(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/favorites/wx.addFileToFavorites.html) - * - * 需要基础库: `2.16.1` - * - * 在插件中使用:不支持 - * - * 收藏文件 */ - addFileToFavorites< - T extends AddFileToFavoritesOption = AddFileToFavoritesOption - >( - option: T - ): PromisifySuccessResult<T, AddFileToFavoritesOption> - /** [wx.addPhoneCalendar(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/calendar/wx.addPhoneCalendar.html) - * - * 需要基础库: `2.15.0` - * - * 在插件中使用:不支持 - * - * 向系统日历添加事件 */ - addPhoneCalendar< - T extends AddPhoneCalendarOption = AddPhoneCalendarOption - >( - option: T - ): PromisifySuccessResult<T, AddPhoneCalendarOption> - /** [wx.addPhoneContact(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/contact/wx.addPhoneContact.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 添加手机通讯录联系人。用户可以选择将该表单以「新增联系人」或「添加到已有联系人」的方式,写入手机系统通讯录。 */ - addPhoneContact< - T extends AddPhoneContactOption = AddPhoneContactOption - >( - option: T - ): PromisifySuccessResult<T, AddPhoneContactOption> - /** [wx.addPhoneRepeatCalendar(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/calendar/wx.addPhoneRepeatCalendar.html) - * - * 需要基础库: `2.15.0` - * - * 在插件中使用:不支持 - * - * 向系统日历添加重复事件 */ - addPhoneRepeatCalendar< - T extends AddPhoneRepeatCalendarOption = AddPhoneRepeatCalendarOption - >( - option: T - ): PromisifySuccessResult<T, AddPhoneRepeatCalendarOption> - /** [wx.addVideoToFavorites(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/favorites/wx.addVideoToFavorites.html) - * - * 需要基础库: `2.16.1` - * - * 在插件中使用:不支持 - * - * 收藏视频 */ - addVideoToFavorites< - T extends AddVideoToFavoritesOption = AddVideoToFavoritesOption - >( - option: T - ): PromisifySuccessResult<T, AddVideoToFavoritesOption> - /** [wx.authPrivateMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.authPrivateMessage.html) -* -* 需要基础库: `2.13.0` -* -* 在插件中使用:不支持 -* -* 验证私密消息。用法详情见 [小程序私密消息使用指南](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.html) -* -* **示例代码** -* -* ```js -wx.authPrivateMessage({ - shareTicket: 'xxxxxx', - success(res) { - console.log('authPrivateMessage success', res) - // res - // { - // errMsg: 'authPrivateMessage:ok' - // valid: true - // iv: 'xxxx', - // encryptedData: 'xxxxxx' - // } - }, - fail(res) { - console.log('authPrivateMessage fail', res) - } -}) -``` */ - authPrivateMessage(option?: AuthPrivateMessageOption): void - /** [wx.authorize(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorize.html) -* -* 需要基础库: `1.2.0` -* -* 在插件中使用:不支持 -* -* 提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。更多用法详见 [用户授权](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html)。 -* > 小程序插件可以使用 [wx.authorizeForMiniProgram](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorizeForMiniProgram.html) -* -* **示例代码** -* -* ```js -// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope -wx.getSetting({ - success(res) { - if (!res.authSetting['scope.record']) { - wx.authorize({ - scope: 'scope.record', - success () { - // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问 - wx.startRecord() - } - }) - } - } -}) -``` */ - authorize<T extends AuthorizeOption = AuthorizeOption>( - option: T - ): PromisifySuccessResult<T, AuthorizeOption> - /** [wx.authorizeForMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorizeForMiniProgram.html) -* -* 需要基础库: `2.14.4` -* -* 在插件中使用:需要基础库 `2.14.4` -* -* **仅小程序插件中能调用该接口**,用法同 [wx.authorize](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/authorize/wx.authorize.html)。目前仅支持三种 scope(见下) -* -* **示例代码** -* -* ```js -wx.authorizeForMiniProgram({ - scope: 'scope.record', - success () { - // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问 - wx.startRecord() - } -}) -``` */ - authorizeForMiniProgram(option: AuthorizeForMiniProgramOption): void - /** [wx.batchGetStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.batchGetStorage.html) -* -* 需要基础库: `2.25.0` -* -* 在插件中使用:不支持 -* -* 从本地缓存中异步批量获取指定 key 的内容。 -* -* **示例代码** -* -* ```js -wx.batchGetStorage({ - keyList: ['key'], - success (res) { - console.log(res) - } -}) -``` */ - batchGetStorage< - T extends BatchGetStorageOption = BatchGetStorageOption - >( - option: T - ): PromisifySuccessResult<T, BatchGetStorageOption> - /** [wx.batchSetStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.batchSetStorage.html) -* -* 需要基础库: `2.25.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 将数据批量存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。 -* -* **示例代码** -* -* ```js -wx.setStorage({ - key:"key", - data:"value" -}) -``` -* -* ```js -// 开启加密存储 -wx.batchSetStorage({ - kvList: { - key: 'key', - value: 'value', - } -}) -``` */ - batchSetStorage< - T extends BatchSetStorageOption = BatchSetStorageOption - >( - option: T - ): PromisifySuccessResult<T, BatchSetStorageOption> - /** [wx.batchSetStorageSync(KVArray kvList)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.batchSetStorageSync.html) -* -* 需要基础库: `2.25.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 将数据批量存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。 -* -* **示例代码** -* -* ```js -try { - wx.batchSetStorageSync([{key: 'key', value: 'value'}]) -} catch (e) { } -``` */ - batchSetStorageSync(kvList: KVArray): void - /** [wx.canvasGetImageData(Object object, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasGetImageData.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取 canvas 区域隐含的像素数据。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/yufmRjmZ7W8f) -* -* ```js -wx.canvasGetImageData({ - canvasId: 'myCanvas', - x: 0, - y: 0, - width: 100, - height: 100, - success(res) { - console.log(res.width) // 100 - console.log(res.height) // 100 - console.log(res.data instanceof Uint8ClampedArray) // true - console.log(res.data.length) // 100 * 100 * 4 - } -}) -``` */ - canvasGetImageData< - T extends CanvasGetImageDataOption = CanvasGetImageDataOption - >( - option: T, - /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件 */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): PromisifySuccessResult<T, CanvasGetImageDataOption> - /** [wx.canvasPutImageData(Object object, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasPutImageData.html) - * - * 需要基础库: `1.9.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 将像素数据绘制到画布。在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 <canvas> 组件 */ - canvasPutImageData< - T extends CanvasPutImageDataOption = CanvasPutImageDataOption - >( - option: T, - /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件 */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): PromisifySuccessResult<T, CanvasPutImageDataOption> - /** [wx.canvasToTempFilePath(Object object, Object this)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html) - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 把当前画布指定区域的内容导出生成指定大小的图片。在 `draw()` 回调里调用该方法才能保证图片导出成功。 */ - canvasToTempFilePath< - T extends CanvasToTempFilePathOption = CanvasToTempFilePathOption - >( - option: T, - /** 在自定义组件下,当前组件实例的this,以操作组件内 [canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html) 组件 */ - component?: Component.TrivialInstance | Page.TrivialInstance - ): PromisifySuccessResult<T, CanvasToTempFilePathOption> - /** [wx.checkIsOpenAccessibility(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accessibility/wx.checkIsOpenAccessibility.html) - * - * 需要基础库: `2.13.0` - * - * 在插件中使用:不支持 - * - * 检测是否开启视觉无障碍功能。 */ - checkIsOpenAccessibility< - T extends CheckIsOpenAccessibilityOption = CheckIsOpenAccessibilityOption - >( - option?: T - ): PromisifySuccessResult<T, CheckIsOpenAccessibilityOption> - /** [wx.checkIsSoterEnrolledInDevice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/soter/wx.checkIsSoterEnrolledInDevice.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:不支持 -* -* 获取设备内是否录入如指纹等生物信息的接口 -* -* **示例代码** -* -* ```js -wx.checkIsSoterEnrolledInDevice({ - checkAuthMode: 'fingerPrint', - success(res) { - console.log(res.isEnrolled) - } -}) -``` */ - checkIsSoterEnrolledInDevice< - T extends CheckIsSoterEnrolledInDeviceOption = CheckIsSoterEnrolledInDeviceOption - >( - option: T - ): PromisifySuccessResult<T, CheckIsSoterEnrolledInDeviceOption> - /** [wx.checkIsSupportSoterAuthentication(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/soter/wx.checkIsSupportSoterAuthentication.html) -* -* 需要基础库: `1.5.0` -* -* 在插件中使用:不支持 -* -* 获取本机支持的 SOTER 生物认证方式 -* -* **示例代码** -* -* ```js -wx.checkIsSupportSoterAuthentication({ - success(res) { - // res.supportMode = [] 不具备任何被SOTER支持的生物识别方式 - // res.supportMode = ['fingerPrint'] 只支持指纹识别 - // res.supportMode = ['fingerPrint', 'facial'] 支持指纹识别和人脸识别 - } -}) -``` */ - checkIsSupportSoterAuthentication< - T extends CheckIsSupportSoterAuthenticationOption = CheckIsSupportSoterAuthenticationOption - >( - option?: T - ): PromisifySuccessResult<T, CheckIsSupportSoterAuthenticationOption> - /** [wx.checkSession(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.checkSession.html) -* -* 在插件中使用:不支持 -* -* 检查登录态是否过期。 -* 通过 wx.login 接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用 wx.checkSession 接口检测当前用户登录态是否有效。 -* -* 登录态过期后开发者可以再调用 wx.login 获取新的用户登录态。调用成功说明当前 session_key 未过期,调用失败说明 session_key 已过期。 -* -* **示例代码** -* -* ```js -wx.checkSession({ - success () { - //session_key 未过期,并且在本生命周期一直有效 - }, - fail () { - // session_key 已经失效,需要重新执行登录流程 - wx.login() //重新登录 - } -}) -``` */ - checkSession<T extends CheckSessionOption = CheckSessionOption>( - option?: T - ): PromisifySuccessResult<T, CheckSessionOption> - /** [wx.chooseAddress(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/address/wx.chooseAddress.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.16.1` -* -* 获取用户收货地址。调起用户编辑收货地址原生界面,并在编辑完成后返回用户选择的地址。 -* ## 使用方法 -* 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) -* ## 申请开通 -* 暂只针对具备与地理位置强相关的使用场景的小程序开放,在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 -* 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/024hHnmd772y) -* ```js -wx.chooseAddress({ - success (res) { - console.log(res.userName) - console.log(res.postalCode) - console.log(res.provinceName) - console.log(res.cityName) - console.log(res.countyName) - console.log(res.detailInfo) - console.log(res.nationalCode) - console.log(res.telNumber) - } -}) -``` */ - chooseAddress<T extends ChooseAddressOption = ChooseAddressOption>( - option?: T - ): PromisifySuccessResult<T, ChooseAddressOption> - /** [wx.chooseContact(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/contact/wx.chooseContact.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 拉起手机通讯录,选择联系人。 */ - chooseContact(option?: ChooseContactOption): void - /** [wx.chooseImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseImage.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [2.21.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.chooseMedia](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html) 替换 -* -* 从本地相册选择图片或使用相机拍照。 -* -* **** -* -* ```js -wx.chooseImage({ - count: 1, - sizeType: ['original', 'compressed'], - sourceType: ['album', 'camera'], - success (res) { - // tempFilePath可以作为img标签的src属性显示图片 - const tempFilePaths = res.tempFilePaths - } -}) -``` */ - chooseImage<T extends ChooseImageOption = ChooseImageOption>( - option?: T - ): PromisifySuccessResult<T, ChooseImageOption> - /** [wx.chooseInvoice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/invoice/wx.chooseInvoice.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:需要基础库 `2.16.1` - * - * 选择用户已有的发票。 - * - * **通过 cardId 和 encryptCode 获得报销发票的信息** - * - * 请参考[微信电子发票文档](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21517918939oae3U)中,「查询报销发票信息」部分。 - * 其中 `access_token` 的获取请参考[auth.getAccessToken](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html)文档 */ - chooseInvoice<T extends ChooseInvoiceOption = ChooseInvoiceOption>( - option?: T - ): PromisifySuccessResult<T, ChooseInvoiceOption> - /** [wx.chooseInvoiceTitle(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/invoice/wx.chooseInvoiceTitle.html) -* -* 需要基础库: `1.5.0` -* -* 在插件中使用:需要基础库 `2.16.1` -* -* 选择用户的发票抬头。当前小程序必须关联一个公众号,且这个公众号是完成了[微信认证](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1496554031_RD4xe)的,才能调用 chooseInvoiceTitle。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/GJ4S9nmQ7x2E) -* -* ```js -wx.chooseInvoiceTitle({ - success(res) {} -}) -``` */ - chooseInvoiceTitle< - T extends ChooseInvoiceTitleOption = ChooseInvoiceTitleOption - >( - option?: T - ): PromisifySuccessResult<T, ChooseInvoiceTitleOption> - /** [wx.chooseLicensePlate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/license-plate/wx.chooseLicensePlate.html) - * - * 需要基础库: `2.19.0` - * - * 在插件中使用:不支持 - * - * 选择车牌号 */ - chooseLicensePlate< - T extends ChooseLicensePlateOption = ChooseLicensePlateOption - >( - option?: T - ): PromisifySuccessResult<T, ChooseLicensePlateOption> - /** [wx.chooseLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.chooseLocation.html) - * - * 在插件中使用:需要基础库 `1.9.6` - * - * @warning **为确保选择地理位置接口的合理使用,位置接口调整参考 [选择地理位置接口调整公告](https://developers.weixin.qq.com/community/develop/doc/0006e45df2cac030e6edf367c56001)** - * - * 打开地图选择位置。 - * ## 使用方法 - * 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) - * ## 申请开通 - * 暂只针对具备与地理位置强相关的使用场景的小程序开放,在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 - * 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 - * - * **示例** - * - * ![](https://res.wx.qq.com/op_res/WDFC8aB4FI8rJ9oEmbYfbH_Fl3EIv91471YVxezVfLRESkUuCgfODZcbOoyteKU4j-OLZa2EFKY9BDPd3g-tfg) */ - chooseLocation<T extends ChooseLocationOption = ChooseLocationOption>( - option: T - ): PromisifySuccessResult<T, ChooseLocationOption> - /** [wx.chooseMedia(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html) -* -* 需要基础库: `2.10.0` -* -* 在插件中使用:需要基础库 `2.11.1` -* -* 拍摄或从手机相册中选择图片或视频。 -* -* **示例代码** -* -* ```js -wx.chooseMedia({ - count: 9, - mediaType: ['image','video'], - sourceType: ['album', 'camera'], - maxDuration: 30, - camera: 'back', - success(res) { - console.log(res.tempFiles.tempFilePath) - console.log(res.tempFiles.size) - } -}) -``` */ - chooseMedia<T extends ChooseMediaOption = ChooseMediaOption>( - option: T - ): PromisifySuccessResult<T, ChooseMediaOption> - /** [wx.chooseMessageFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseMessageFile.html) -* -* 需要基础库: `2.5.0` -* -* 在插件中使用:不支持 -* -* 从客户端会话选择文件。 -* -* **** -* -* ```js -wx.chooseMessageFile({ - count: 10, - type: 'image', - success (res) { - // tempFilePath可以作为img标签的src属性显示图片 - const tempFilePaths = res.tempFiles - } -}) -``` */ - chooseMessageFile< - T extends ChooseMessageFileOption = ChooseMessageFileOption - >( - option: T - ): PromisifySuccessResult<T, ChooseMessageFileOption> - /** [wx.choosePoi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.choosePoi.html) - * - * 在插件中使用:不支持 - * - * @warning **为确保选择地理位置接口的合理使用,位置接口调整参考 [选择地理位置接口调整公告](https://developers.weixin.qq.com/community/develop/doc/0006e45df2cac030e6edf367c56001)** - * - * 打开POI列表选择位置,支持模糊定位(精确到市)和精确定位混选。 - * ## 使用方法 - * 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) - * ## 申请开通 - * 暂只针对具备与地理位置强相关的使用场景的小程序开放,在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 - * 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 - * - * **示例** - * - * ![](https://res.wx.qq.com/op_res/lzDsNyBNifLczyLX0ms7ZpPQysgAgdhrQTGzzTQPiXkAB2HJIf1Slvl4rnN9I1q0AT3xqoGTg98jMsNexDLbbA) */ - choosePoi<T extends ChoosePoiOption = ChoosePoiOption>( - option: T - ): PromisifySuccessResult<T, ChoosePoiOption> - /** [wx.chooseVideo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseVideo.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [2.21.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.chooseMedia](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html) 替换 -* -* 拍摄视频或从手机相册中选视频。 -* -* **示例代码** -* -* ```js -wx.chooseVideo({ - sourceType: ['album','camera'], - maxDuration: 60, - camera: 'back', - success(res) { - console.log(res.tempFilePath) - } -}) -``` */ - chooseVideo<T extends ChooseVideoOption = ChooseVideoOption>( - option: T - ): PromisifySuccessResult<T, ChooseVideoOption> - /** [wx.clearStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.clearStorage.html) -* -* 在插件中使用:不支持 -* -* 清理本地数据缓存。 -* -* **示例代码** -* -* ```js -wx.clearStorage() -``` -* -* ```js -try { - wx.clearStorageSync() -} catch(e) { - // Do something when catch error -} -``` */ - clearStorage<T extends ClearStorageOption = ClearStorageOption>( - option?: T - ): PromisifySuccessResult<T, ClearStorageOption> - /** [wx.clearStorageSync()](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.clearStorageSync.html) -* -* 在插件中使用:不支持 -* -* [wx.clearStorage](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.clearStorage.html) 的同步版本 -* -* **示例代码** -* -* ```js -wx.clearStorage() -``` -* -* ```js -try { - wx.clearStorageSync() -} catch(e) { - // Do something when catch error -} -``` */ - clearStorageSync(): void - /** [wx.closeBLEConnection(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.closeBLEConnection.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 断开与蓝牙低功耗设备的连接。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.closeBLEConnection({ - deviceId, - success (res) { - console.log(res) - } -}) -``` */ - closeBLEConnection< - T extends CloseBLEConnectionOption = CloseBLEConnectionOption - >( - option: T - ): PromisifySuccessResult<T, CloseBLEConnectionOption> - /** [wx.closeBluetoothAdapter(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.closeBluetoothAdapter.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 关闭蓝牙模块。调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,与 [wx.openBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html) 成对调用。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.closeBluetoothAdapter({ - success (res) { - console.log(res) - } -}) -``` */ - closeBluetoothAdapter< - T extends CloseBluetoothAdapterOption = CloseBluetoothAdapterOption - >( - option?: T - ): PromisifySuccessResult<T, CloseBluetoothAdapterOption> - /** [wx.closeSocket(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.closeSocket.html) -* -* 在插件中使用:不支持 -* -* @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** -* -* 关闭 WebSocket 连接。 -* -* **示例代码** -* -* ```js -wx.connectSocket({ - url: 'test.php' -}) - -//注意这里有时序问题, -//如果 wx.connectSocket 还没回调 wx.onSocketOpen,而先调用 wx.closeSocket,那么就做不到关闭 WebSocket 的目的。 -//必须在 WebSocket 打开期间调用 wx.closeSocket 才能关闭。 -wx.onSocketOpen(function() { - wx.closeSocket() -}) - -wx.onSocketClose(function(res) { - console.log('WebSocket 已关闭!') -}) -``` */ - closeSocket<T extends CloseSocketOption = CloseSocketOption>( - option?: T - ): PromisifySuccessResult<T, CloseSocketOption> - /** [wx.compressImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.compressImage.html) -* -* 需要基础库: `2.4.0` -* -* 在插件中使用:需要基础库 `2.12.0` -* -* 压缩图片接口,可选压缩质量 -* -* **示例代码** -* -* ```js -wx.compressImage({ - src: '', // 图片路径 - quality: 80 // 压缩质量 -}) -``` */ - compressImage<T extends CompressImageOption = CompressImageOption>( - option: T - ): PromisifySuccessResult<T, CompressImageOption> - /** [wx.compressVideo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.compressVideo.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:需要基础库 `2.11.1` - * - * 压缩视频接口。开发者可指定压缩质量 `quality` 进行压缩。当需要更精细的控制时,可指定 `bitrate`、`fps`、和 `resolution`,当 `quality` 传入时,这三个参数将被忽略。原视频的相关信息可通过 [getVideoInfo](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.getVideoInfo.html) 获取。 */ - compressVideo<T extends CompressVideoOption = CompressVideoOption>( - option: T - ): PromisifySuccessResult<T, CompressVideoOption> - /** [wx.connectWifi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.connectWifi.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 连接 Wi-Fi。若已知 Wi-Fi 信息,可以直接利用该接口连接。仅 Android 与 iOS 11 以上版本支持。 -* -* **示例代码** -* -* ```js -wx.connectWifi({ - SSID: '', - password: '', - success (res) { - console.log(res.errMsg) - } -}) -``` -* -* **注意** -* -* - Android 微信客户端 7.0.22 以上版本,connectWifi 的实现在 Android 10 及以上的手机无法生效,对于 Android 10 及以上版本,设备连接 wifi 之后,(受系统能力限制)其他进程无法使用当前连接的 wifi ;即连接上的 wifi 只对当前小程序有效,如果想要对整个系统生效,需要配置 maunal 来连接 wifi。 -* - iOS 系统底层没有给开发者提供因 wifi 密码错误而连接失败的事件,但用户可以收到密码错误的系统弹窗。建议开发者通过 onWifiConnected 事件来判断 wifi 是否连接成功;即设置定时器,若超时后仍没有 onWifiConnected 事件,则认定此次 wifi 连接无效。 -* - Android / iOS 在系统已经连上目标 wifi 的情况下,小程序再次连接目标 wifi,此时无论输入的密码是否正确,系统都会默认此次连接成功,且没有 onWifiConnected 事件。 -* - onWifiConnected 事件可能会返回空对象,此时代表 wifi 断开连接,开发者可忽略这种情况。 */ - connectWifi<T extends ConnectWifiOption = ConnectWifiOption>( - option: T - ): PromisifySuccessResult<T, ConnectWifiOption> - /** [wx.createBLEConnection(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 连接蓝牙低功耗设备。 -* -* 若小程序在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需再次进行搜索操作。 -* -* **注意** -* -* - 请保证尽量成对的调用 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 和 [wx.closeBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.closeBLEConnection.html) 接口。安卓如果重复调用 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 创建连接,有可能导致系统持有同一设备多个连接的实例,导致调用 `closeBLEConnection` 的时候并不能真正的断开与设备的连接。 -* - 蓝牙连接随时可能断开,建议监听 [wx.onBLEConnectionStateChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEConnectionStateChange.html) 回调事件,当蓝牙设备断开时按需执行重连操作 -* - 若对未连接的设备或已断开连接的设备调用数据读写操作的接口,会返回 10006 错误,建议进行重连操作。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.createBLEConnection({ - deviceId, - success (res) { - console.log(res) - } -}) -``` */ - createBLEConnection< - T extends CreateBLEConnectionOption = CreateBLEConnectionOption - >( - option: T - ): PromisifySuccessResult<T, CreateBLEConnectionOption> - /** [wx.createBLEPeripheralServer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/wx.createBLEPeripheralServer.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:需要基础库 `2.22.1` - * - * 建立本地作为蓝牙低功耗外围设备的服务端,可创建多个。 */ - createBLEPeripheralServer< - T extends CreateBLEPeripheralServerOption = CreateBLEPeripheralServerOption - >( - option?: T - ): PromisifySuccessResult<T, CreateBLEPeripheralServerOption> - /** [wx.createBufferURL(ArrayBuffer|TypedArray buffer)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.createBufferURL.html) - * - * 需要基础库: `2.14.0` - * - * 在插件中使用:不支持 - * - * 根据传入的 buffer 创建一个唯一的 URL 存在内存中 */ - createBufferURL( - /** 需要存入内存的二进制数据 */ - buffer: - | ArrayBuffer - | Int8Array - | Uint8Array - | Uint8ClampedArray - | Int16Array - | Uint16Array - | Int32Array - | Uint32Array - | Float32Array - | Float64Array - ): void - /** [wx.disableAlertBeforeUnload(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.disableAlertBeforeUnload.html) - * - * 需要基础库: `2.12.0` - * - * 在插件中使用:不支持 - * - * 关闭小程序页面返回询问对话框。 */ - disableAlertBeforeUnload(option?: DisableAlertBeforeUnloadOption): void - /** [wx.editImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.editImage.html) -* -* 需要基础库: `2.22.0` -* -* 在插件中使用:不支持 -* -* 编辑图片接口 -* -* **示例代码** -* -* ```js -wx.editImage({ - src: '', // 图片路径 -}) -``` */ - editImage(option: EditImageOption): void - /** [wx.enableAlertBeforeUnload(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.enableAlertBeforeUnload.html) - * - * 需要基础库: `2.12.0` - * - * 在插件中使用:不支持 - * - * 开启小程序页面返回询问对话框。 - * - * ## 弹窗条件 - * * 当用户在小程序内非首页页面/最底层页 - * * 官方导航栏上的的返回 - * * 全屏模式下自绘返回键 - * * android 系统 back 键时 - * - * ## 注意事项 - * * 手势滑动返回时不做拦截 - * * 在任何场景下,此功能都不应拦住用户退出小程序的行为 - * - * **示例代码** - * - * [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/MTPm9Cmh7VfT) */ - enableAlertBeforeUnload(option: EnableAlertBeforeUnloadOption): void - /** [wx.exitMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.exitMiniProgram.html) - * - * 需要基础库: `2.17.3` - * - * 在插件中使用:不支持 - * - * 退出当前小程序。必须有点击行为才能调用成功。 */ - exitMiniProgram< - T extends ExitMiniProgramOption = ExitMiniProgramOption - >( - option?: T - ): PromisifySuccessResult<T, ExitMiniProgramOption> - /** [wx.exitVoIPChat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.exitVoIPChat.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:需要基础库 `2.9.0` - * - * 退出(销毁)实时语音通话 */ - exitVoIPChat<T extends ExitVoIPChatOption = ExitVoIPChatOption>( - option?: T - ): PromisifySuccessResult<T, ExitVoIPChatOption> - /** [wx.faceDetect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/face/wx.faceDetect.html) - * - * 需要基础库: `2.18.0` - * - * 在插件中使用:需要基础库 `2.21.3` - * @deprecated 基础库版本 [2.25.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 - * - * 人脸检测,使用前需要通过 wx.initFaceDetect 进行一次初始化,推荐使用相机接口返回的帧数据。本接口不再维护,请使用 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 接口代替。详情参考[人脸检测指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html) */ - faceDetect(option: FaceDetectOption): void - /** [wx.getAvailableAudioSources(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.getAvailableAudioSources.html) - * - * 需要基础库: `2.1.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 获取当前支持的音频输入源 */ - getAvailableAudioSources< - T extends GetAvailableAudioSourcesOption = GetAvailableAudioSourcesOption - >( - option?: T - ): PromisifySuccessResult<T, GetAvailableAudioSourcesOption> - /** [wx.getBLEDeviceCharacteristics(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEDeviceCharacteristics.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取蓝牙低功耗设备某个服务中所有特征 (characteristic)。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.getBLEDeviceCharacteristics({ - // 这里的 deviceId 需要已经通过 wx.createBLEConnection 与对应设备建立链接 - deviceId, - // 这里的 serviceId 需要在 wx.getBLEDeviceServices 接口中获取 - serviceId, - success (res) { - console.log('device getBLEDeviceCharacteristics:', res.characteristics) - } -}) -``` */ - getBLEDeviceCharacteristics< - T extends GetBLEDeviceCharacteristicsOption = GetBLEDeviceCharacteristicsOption - >( - option: T - ): PromisifySuccessResult<T, GetBLEDeviceCharacteristicsOption> - /** [wx.getBLEDeviceRSSI(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEDeviceRSSI.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:需要基础库 `2.11.0` - * - * 获取蓝牙低功耗设备的信号强度 (Received Signal Strength Indication, RSSI)。 */ - getBLEDeviceRSSI< - T extends GetBLEDeviceRSSIOption = GetBLEDeviceRSSIOption - >( - option: T - ): PromisifySuccessResult<T, GetBLEDeviceRSSIOption> - /** [wx.getBLEDeviceServices(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEDeviceServices.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取蓝牙低功耗设备所有服务 (service)。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.getBLEDeviceServices({ - // 这里的 deviceId 需要已经通过 wx.createBLEConnection 与对应设备建立连接 - deviceId, - success (res) { - console.log('device services:', res.services) - } -}) -``` */ - getBLEDeviceServices< - T extends GetBLEDeviceServicesOption = GetBLEDeviceServicesOption - >( - option: T - ): PromisifySuccessResult<T, GetBLEDeviceServicesOption> - /** [wx.getBLEMTU(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.getBLEMTU.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.20.1` -* -* 获取蓝牙低功耗的最大传输单元。需在 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 调用成功后调用。 -* -* **注意** -* -* - 小程序中 MTU 为 ATT_MTU,包含 Op-Code 和 Attribute Handle 的长度,实际可以传输的数据长度为 `ATT_MTU - 3` -* - iOS 系统中 MTU 为固定值;安卓系统中,MTU 会在系统协商成功之后发生改变,建议使用 [wx.onBLEMTUChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEMTUChange.html) 监听。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.getBLEMTU({ - deviceId: '', - writeType: 'write', - success (res) { - console.log(res) - } -}) -``` */ - getBLEMTU<T extends GetBLEMTUOption = GetBLEMTUOption>( - option: T - ): PromisifySuccessResult<T, GetBLEMTUOption> - /** [wx.getBackgroundAudioPlayerState(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioPlayerState.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 -* -* 获取后台音乐播放状态。 -* -* **示例代码** -* -* ```js -wx.getBackgroundAudioPlayerState({ - success (res) { - const status = res.status - const dataUrl = res.dataUrl - const currentPosition = res.currentPosition - const duration = res.duration - const downloadPercent = res.downloadPercent - } -}) -``` */ - getBackgroundAudioPlayerState< - T extends GetBackgroundAudioPlayerStateOption = GetBackgroundAudioPlayerStateOption - >( - option?: T - ): PromisifySuccessResult<T, GetBackgroundAudioPlayerStateOption> - /** [wx.getBackgroundFetchData(object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.getBackgroundFetchData.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 拉取 backgroundFetch 客户端缓存数据。 - * 当调用接口时,若当次请求未结束,会先返回本地的旧数据(之前打开小程序时请求的),如果本地没有旧数据会返回失败,而不会等待请求完成。 */ - getBackgroundFetchData< - T extends GetBackgroundFetchDataOption = GetBackgroundFetchDataOption - >( - option: T - ): PromisifySuccessResult<T, GetBackgroundFetchDataOption> - /** [wx.getBackgroundFetchToken(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.getBackgroundFetchToken.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 获取设置过的自定义登录态。若无,则返回 fail。 */ - getBackgroundFetchToken< - T extends GetBackgroundFetchTokenOption = GetBackgroundFetchTokenOption - >( - option?: T - ): PromisifySuccessResult<T, GetBackgroundFetchTokenOption> - /** [wx.getBatteryInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/battery/wx.getBatteryInfo.html) - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 获取设备电量。同步 API [wx.getBatteryInfoSync](https://developers.weixin.qq.com/miniprogram/dev/api/device/battery/wx.getBatteryInfoSync.html) 在 iOS 上不可用。 */ - getBatteryInfo<T extends GetBatteryInfoOption = GetBatteryInfoOption>( - option?: T - ): PromisifySuccessResult<T, GetBatteryInfoOption> - /** [wx.getBeacons(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.getBeacons.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 获取所有已搜索到的 Beacon 设备 */ - getBeacons<T extends GetBeaconsOption = GetBeaconsOption>( - option?: T - ): PromisifySuccessResult<T, GetBeaconsOption> - /** [wx.getBluetoothAdapterState(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.getBluetoothAdapterState.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取本机蓝牙适配器状态。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.getBluetoothAdapterState({ - success (res) { - console.log(res) - } -}) -``` */ - getBluetoothAdapterState< - T extends GetBluetoothAdapterStateOption = GetBluetoothAdapterStateOption - >( - option?: T - ): PromisifySuccessResult<T, GetBluetoothAdapterStateOption> - /** [wx.getBluetoothDevices(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.getBluetoothDevices.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取在蓝牙模块生效期间所有搜索到的蓝牙设备。包括已经和本机处于连接状态的设备。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* -* ```js -// ArrayBuffer转16进度字符串示例 -function ab2hex(buffer) { - var hexArr = Array.prototype.map.call( - new Uint8Array(buffer), - function(bit) { - return ('00' + bit.toString(16)).slice(-2) - } - ) - return hexArr.join(''); -} -wx.getBluetoothDevices({ - success: function (res) { - console.log(res) - if (res.devices[0]) { - console.log(ab2hex(res.devices[0].advertisData)) - } - } -}) -``` -* -* **注意** -* -* - 该接口获取到的设备列表为**蓝牙模块生效期间所有搜索到的蓝牙设备**,若在蓝牙模块使用流程结束后未及时调用 [wx.closeBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.closeBluetoothAdapter.html) 释放资源,会存在调用该接口会返回之前的蓝牙使用流程中搜索到的蓝牙设备,可能设备已经不在用户身边,无法连接。 */ - getBluetoothDevices< - T extends GetBluetoothDevicesOption = GetBluetoothDevicesOption - >( - option?: T - ): PromisifySuccessResult<T, GetBluetoothDevicesOption> - /** [wx.getChannelsLiveInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.getChannelsLiveInfo.html) - * - * 需要基础库: `2.15.0` - * - * 在插件中使用:不支持 - * - * 获取视频号直播信息 */ - getChannelsLiveInfo(option: GetChannelsLiveInfoOption): void - /** [wx.getChannelsLiveNoticeInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.getChannelsLiveNoticeInfo.html) - * - * 需要基础库: `2.19.0` - * - * 在插件中使用:不支持 - * - * 获取视频号直播预告信息 */ - getChannelsLiveNoticeInfo(option: GetChannelsLiveNoticeInfoOption): void - /** [wx.getChannelsShareKey(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.getChannelsShareKey.html) - * - * 需要基础库: `2.22.1` - * - * 在插件中使用:不支持 - * - * 获取视频号直播卡片/视频卡片的分享来源,仅当卡片携带了分享信息、同时用户已授权该小程序获取视频号分享信息且启动场景值为 1177、1184、1195、1208 时可用。 */ - getChannelsShareKey(option?: GetChannelsShareKeyOption): void - /** [wx.getClipboardData(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/clipboard/wx.getClipboardData.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取系统剪贴板的内容 -* -* **示例代码** -* -* ```js -wx.getClipboardData({ - success (res){ - console.log(res.data) - } -}) -``` */ - getClipboardData< - T extends GetClipboardDataOption = GetClipboardDataOption - >( - option?: T - ): PromisifySuccessResult<T, GetClipboardDataOption> - /** [wx.getConnectedBluetoothDevices(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.getConnectedBluetoothDevices.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 根据主服务 UUID 获取已连接的蓝牙设备。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.getConnectedBluetoothDevices({ - services: ['FEE7'], - success (res) { - console.log(res) - } -}) -``` */ - getConnectedBluetoothDevices< - T extends GetConnectedBluetoothDevicesOption = GetConnectedBluetoothDevicesOption - >( - option: T - ): PromisifySuccessResult<T, GetConnectedBluetoothDevicesOption> - /** [wx.getConnectedWifi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.getConnectedWifi.html) - * - * 需要基础库: `1.6.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 获取已连接中的 Wi-Fi 信息。 */ - getConnectedWifi< - T extends GetConnectedWifiOption = GetConnectedWifiOption - >( - option: T - ): PromisifySuccessResult<T, GetConnectedWifiOption> - /** [wx.getExtConfig(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfig.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:不支持 -* -* 获取[第三方平台](https://developers.weixin.qq.com/miniprogram/dev/devtools/ext.html)自定义的数据字段。 -* -* **Tips** -* -* 1. 本接口暂时无法通过 [wx.canIUse](https://developers.weixin.qq.com/miniprogram/dev/api/base/wx.canIUse.html) 判断是否兼容,开发者需要自行判断 [wx.getExtConfig](https://developers.weixin.qq.com/miniprogram/dev/api/ext/wx.getExtConfig.html) 是否存在来兼容 -* -* **** -* -* ```js -if (wx.getExtConfig) { - wx.getExtConfig({ - success (res) { - console.log(res.extConfig) - } - }) -} -``` */ - getExtConfig<T extends GetExtConfigOption = GetExtConfigOption>( - option?: T - ): PromisifySuccessResult<T, GetExtConfigOption> - /** [wx.getFileInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.getFileInfo.html) -* -* 需要基础库: `1.4.0` -* -* 在插件中使用:不支持 -* -* @warning **该接口已停止维护,推荐使用 [FileSystemManager.getFileInfo](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getFileInfo.html)** -* -* 获取文件信息。 -* -* **示例代码** -* -* ```js -wx.getFileInfo({ - success (res) { - console.log(res.size) - console.log(res.digest) - } -}) -``` */ - getFileInfo<T extends WxGetFileInfoOption = WxGetFileInfoOption>( - option: T - ): PromisifySuccessResult<T, WxGetFileInfoOption> - /** [wx.getFuzzyLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getFuzzyLocation.html) -* -* 需要基础库: `2.25.0` -* -* 在插件中使用:支持 -* -* 获取当前的模糊地理位置。 -* ## 使用方法 -* 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) -* ## 申请开通 -* 暂只针对具备与地理位置强相关的使用场景的小程序开放,在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 从2022年7月14日开始在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 -* -* **示例代码** -* -* ```js - wx.getFuzzyLocation({ - type: 'wgs84', - success (res) { - const latitude = res.latitude - const longitude = res.longitude - } -}) - ``` */ - getFuzzyLocation(option: GetFuzzyLocationOption): void - /** [wx.getGroupEnterInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/group/wx.getGroupEnterInfo.html) -* -* 需要基础库: `2.10.4` -* -* 在插件中使用:不支持 -* -* 获取微信群聊场景下的小程序启动信息。群聊场景包括群聊小程序消息卡片、群待办、群工具。可用于获取当前群的 opengid。 -* ## 注意事项 -* - 基础库 v2.10.4 开始支持获取群工具小程序启动信息 -* - 基础库 v2.17.3 开始支持获取群聊小程序消息卡片、群待办小程序启动信息 -* -* **示例代码** -* -* ```js -wx.getGroupEnterInfo({ - success(res) { - // res - { - errMsg: 'getGroupEnterInfo:ok', - encryptedData: '', - iv: '' - } - }, - fail() { - - } -}) -``` -* -* 敏感数据有两种获取方式,一是使用 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) 。 -* 获取得到的开放数据为以下 json 结构(其中 opengid 为当前群的唯一标识): -* -* ```json -{ - "opengid": "OPENGID" -} -``` -* -* **Tips** -* -* - 如需要展示群名称,小程序可以使用[开放数据组件](https://developers.weixin.qq.com/miniprogram/dev/component/open-data.html) -* - 小游戏可以通过 `wx.getGroupInfo` 接口获取群名称 */ - getGroupEnterInfo(option: GetGroupEnterInfoOption): void - /** [wx.getHCEState(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.getHCEState.html) -* -* 需要基础库: `1.7.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 判断当前设备是否支持 HCE 能力。 -* -* **示例代码** -* -* ```js -wx.getHCEState({ - success (res) { - console.log(res.errCode) - } -}) -``` */ - getHCEState<T extends GetHCEStateOption = GetHCEStateOption>( - option?: T - ): PromisifySuccessResult<T, GetHCEStateOption> - /** [wx.getImageInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.getImageInfo.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取图片信息。网络图片需先配置download域名才能生效。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/Kd47Sbmr6yYu) -* -* ```js -wx.getImageInfo({ - src: 'images/a.jpg', - success (res) { - console.log(res.width) - console.log(res.height) - } -}) - -wx.chooseImage({ - success (res) { - wx.getImageInfo({ - src: res.tempFilePaths[0], - success (res) { - console.log(res.width) - console.log(res.height) - } - }) - } -}) -``` */ - getImageInfo<T extends GetImageInfoOption = GetImageInfoOption>( - option: T - ): PromisifySuccessResult<T, GetImageInfoOption> - /** [wx.getLocalIPAddress(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.getLocalIPAddress.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.21.3` -* -* 获取局域网IP地址 -* -* **示例代码** -* -* ```js -wx.getLocalIPAddress({ - success (res) { - const localip = res.localip - } -}) -``` */ - getLocalIPAddress(option: GetLocalIPAddressOption): void - /** [wx.getLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用。开启高精度定位,接口耗时会增加,可指定 highAccuracyExpireTime 作为超时时间。地图相关使用的坐标格式应为 gcj02。 -* 高频率调用会导致耗电,如有需要可使用持续定位接口 `wx.onLocationChange`。 -* 基础库 `2.17.0` 版本起 `wx.getLocation` 增加调用频率限制,[相关公告](https://developers.weixin.qq.com/community/develop/doc/000aee91a98d206bc6dbe722b51801)。 -* -* ## 使用方法 -* 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) -* -* ## 申请开通 -* 暂只针对如下类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 -* 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 -* -* ### 国内主体开放类目 -* -* | 一级类目/主体类型 | 二级类目 | 应用场景 | -* | -------------- | -------| -------- | -* | 电商平台 | / | 售卖商品线下发货、线下收货服务 | -* | 商家自营 | / | 提供售卖商品线下发货、线下收货服务、线下商超导览、导航服务 | -* | 医疗服务 | 公立医疗机构、三级私立医疗机构、其他私立医疗机构、就医服务、其他医学健康服务、药品(非处方药)销售、非处方药销售平台、医疗器械生产企业、医疗器械自营、医疗器械经营销售平台、互联网医院血液、干细胞服务、临床试验 | 1、实际物品/药品接收服务 2、基于地理位置取号并现场报到、附近医院导航等服务 | -* | 交通服务 | / | 代驾服务、租车网点导航等相关服务 | -* | 生活服务 | / | 上门服务作业等线下场景 | -* | 物流服务 | 收件/派件、查件、邮政、装卸搬运、快递柜、货物运输 | 快递/货物收发服务 | -* | 餐饮服务 | 点餐平台、外卖平台、餐饮服务场所/餐饮服务管理企业 | 线下送餐服务 | -* | 工具 | 天气、信息查询、办公、设备管理 | 与地理位置相关的服务,比如潮汐查询、海拔查询、天气查询、智能穿戴、智能门禁、与地理位置相关的打卡服务等 | -* | 金融 | 银行、非金融机构自营小额贷款/融资担保/商业保理、保险 | 提供线下网点预约、基于地理位置取号并现场报到、附近网点导航等服务 | -* | 旅游 | 景区服务、住宿服务 | 提供景区导航、导览服务、酒店导航服务 | -* | 汽车服务 | 维修保养、汽车用品、汽车经销商/4S店、汽车厂商、汽车预售、二手车 | 提供汽车售卖、维保洗美服务、查找附近的维修点/洗车网点等导航服务 | -* | IT科技 | 基础电信运营商、电信业务代理商 | 提供运营商线下网点的预约、基于地理位置取号并现场报到、网点导航等服务 | -* | 房地产服务 | 物业管理、房屋中介、房屋装修 | 提供房地产开发商及物业公司门店导览导航服务 | -* | 政务民生 | / | 提供政务单位相关业务 | -* | 政府主体帐号 | / | 提供政务单位相关业务 | -* -* ### 海外主体开放类目 -* -* | 一级类目/主体类型 | 二级类目 | 应用场景 | -* | -------------- | -------| -------- | -* | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | -* | 快递业与邮政 | / | 快递/货物收发服务 | -* | 餐饮 | / | 线下送餐服务 | -* | 电商平台 | / | 售卖商品线下发货、线下收货服务 | -* | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | -* | 跨境电商 | / | 提供售卖商品线下发货、收货服务、线下商超导览、导航服务 | -* | 本地服务 | 服装/鞋/箱包、玩具、家电/数码/手机、美妆/洗护、珠宝/饰品/眼镜/钟表、运动/户外/乐器、鲜花/园艺/工艺品、家居/家饰/家纺、办公/文具、机械/电子器件、酒、食品、百货、超市/便利店、宠物食品/用品 | 提供售卖商品线下发货、线下收货服务、线下商超导览、导航服务 | -* | 生活服务 | 家政、外送 | 上门服务作业等线下场景 | -* -* **示例代码** -* -* ```js - wx.getLocation({ - type: 'wgs84', - success (res) { - const latitude = res.latitude - const longitude = res.longitude - const speed = res.speed - const accuracy = res.accuracy - } -}) - ``` -* -* **注意** -* -* - `2.17.0 起 `wx.getLocation` 增加调用频率限制,[相关公告](https://developers.weixin.qq.com/community/develop/doc/000aee91a98d206bc6dbe722b51801) -* - 工具中定位模拟使用IP定位,可能会有一定误差。且工具目前仅支持 gcj02 坐标。 -* - 使用第三方服务进行逆地址解析时,请确认第三方服务默认的坐标系,正确进行坐标转换。 */ - getLocation<T extends GetLocationOption = GetLocationOption>( - option: T - ): PromisifySuccessResult<T, GetLocationOption> - /** [wx.getNetworkType(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.getNetworkType.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取网络类型 -* -* **示例代码** -* -* ```js -wx.getNetworkType({ - success (res) { - const networkType = res.networkType - } -}) -``` */ - getNetworkType<T extends GetNetworkTypeOption = GetNetworkTypeOption>( - option?: T - ): PromisifySuccessResult<T, GetNetworkTypeOption> - /** [wx.getRandomValues(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/crypto/wx.getRandomValues.html) -* -* 需要基础库: `2.15.0` -* -* 在插件中使用:不支持 -* -* 获取密码学安全随机数 -* -* **示例代码** -* -* ```js -wx.getRandomValues({ - length: 6 // 生成 6 个字节长度的随机数, - success: res => { - console.log(wx.arrayBufferToBase64(res.randomValues)) // 转换为 base64 字符串后打印 - } -}) -``` */ - getRandomValues< - T extends GetRandomValuesOption = GetRandomValuesOption - >( - option: T - ): PromisifySuccessResult<T, GetRandomValuesOption> - /** [wx.getSavedFileInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.getSavedFileInfo.html) -* -* 在插件中使用:不支持 -* -* @warning **该接口已停止维护,推荐使用 [FileSystemManager.getFileInfo](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getFileInfo.html)** -* -* 获取本地文件的文件信息。此接口只能用于获取已保存到本地的文件。 -* -* **示例代码** -* -* ```js -wx.getSavedFileList({ - success (res) { - console.log(res.fileList) - } -}) -``` */ - getSavedFileInfo< - T extends GetSavedFileInfoOption = GetSavedFileInfoOption - >( - option: T - ): PromisifySuccessResult<T, GetSavedFileInfoOption> - /** [wx.getSavedFileList(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.getSavedFileList.html) -* -* 在插件中使用:不支持 -* -* @warning **该接口已停止维护,推荐使用 [FileSystemManager.getSavedFileList](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.getSavedFileList.html)** -* -* 获取该小程序下已保存的本地缓存文件列表。 -* -* **示例代码** -* -* ```js -wx.getSavedFileList({ - success (res) { - console.log(res.fileList) - } -}) -``` */ - getSavedFileList< - T extends WxGetSavedFileListOption = WxGetSavedFileListOption - >( - option?: T - ): PromisifySuccessResult<T, WxGetSavedFileListOption> - /** [wx.getScreenBrightness(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.getScreenBrightness.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 获取屏幕亮度 - * - * **说明** - * - * - 若安卓系统设置中开启了自动调节亮度功能,则屏幕亮度会根据光线自动调整,该接口仅能获取自动调节亮度之前的值,而非实时的亮度值。 */ - getScreenBrightness< - T extends GetScreenBrightnessOption = GetScreenBrightnessOption - >( - option?: T - ): PromisifySuccessResult<T, GetScreenBrightnessOption> - /** [wx.getScreenRecordingState(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.getScreenRecordingState.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 查询用户是否在录屏。 - * - * **示例代码** - * - * ```js - * wx.getScreenRecordingState({ - * success: function (res) { - * console.log(res.state) - * }, - * }) */ - getScreenRecordingState(option?: GetScreenRecordingStateOption): void - /** [wx.getSelectedTextRange(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/keyboard/wx.getSelectedTextRange.html) -* -* 需要基础库: `2.7.0` -* -* 在插件中使用:不支持 -* -* 在input、textarea等focus之后,获取输入框的光标位置。注意:只有在focus的时候调用此接口才有效。 -* -* **示例代码** -* -* ```js -wx.getSelectedTextRange({ - complete: res => { - console.log('getSelectedTextRange res', res.start, res.end) - } -}) -``` */ - getSelectedTextRange< - T extends GetSelectedTextRangeOption = GetSelectedTextRangeOption - >( - option?: T - ): PromisifySuccessResult<T, GetSelectedTextRangeOption> - /** [wx.getSetting(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.getSetting.html) -* -* 需要基础库: `1.2.0` -* -* 在插件中使用:需要基础库 `2.6.3` -* -* 在插件中使用时,接口有以下不同: -* - `withSubscriptions` 无效(插件暂无订阅消息) -* - 返回值中的 `authSetting` 字段中是插件的权限(如用户信息功能页授权) -* - [2.14.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起返回值中有 `miniprogramAuthSetting` 字段,内容等于当前小程序 `getSetting` 的结果(不含订阅状态) -* -* 获取用户的当前设置。**返回值中只会出现小程序已经向用户请求过的[权限](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html)**。 -* -* **示例代码** -* -* ```js -wx.getSetting({ - success (res) { - console.log(res.authSetting) - // res.authSetting = { - // "scope.userInfo": true, - // "scope.userLocation": true - // } - } -}) -``` -* -* ```js -wx.getSetting({ - withSubscriptions: true, - success (res) { - console.log(res.authSetting) - // res.authSetting = { - // "scope.userInfo": true, - // "scope.userLocation": true - // } - console.log(res.subscriptionsSetting) - // res.subscriptionsSetting = { - // mainSwitch: true, // 订阅消息总开关 - // itemSettings: { // 每一项开关 - // SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息 - // SYS_MSG_TYPE_RANK: 'accept' - // zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息 - // ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban', - // } - // } - } -}) -``` */ - getSetting<T extends GetSettingOption = GetSettingOption>( - option?: T - ): PromisifySuccessResult<T, GetSettingOption> - /** [wx.getShareInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.getShareInfo.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 获取转发详细信息 -* -* **示例代码** -* -* 敏感数据获取方式 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) 。 -* 获取得到的开放数据为以下 json 结构(其中 openGId 为当前群的唯一标识): -* -* ```json -{ - "openGId": "OPENGID" -} -``` -* -* **Tips** -* -* - 如需要展示群名称,小程序可以使用 [开放数据组件](https://developers.weixin.qq.com/miniprogram/dev/component/open-data.html) -* - 小游戏可以通过 [`wx.getGroupInfo`](#) 接口获取群名称 */ - getShareInfo<T extends GetShareInfoOption = GetShareInfoOption>( - option: T - ): PromisifySuccessResult<T, GetShareInfoOption> - /** [wx.getStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorage.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 从本地缓存中异步获取指定 key 的内容。 -* -* **示例代码** -* -* ```js -wx.getStorage({ - key: 'key', - success (res) { - console.log(res.data) - } -}) -``` -* -* ```js -// 开启加密存储 -wx.setStorage({ - key: "key", - data: "value", - encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true - success() { - wx.getStorage({ - key: "key", - encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true - success(res) { - console.log(res.data) - } - }) - } -}) -``` */ - getStorage< - T = any, - U extends GetStorageOption<T> = GetStorageOption<T> - >( - option: U - ): PromisifySuccessResult<U, GetStorageOption<T>> - /** [wx.getStorageInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageInfo.html) -* -* 在插件中使用:不支持 -* -* 异步获取当前storage的相关信息。 -* -* **示例代码** -* -* ```js -wx.getStorageInfo({ - success (res) { - console.log(res.keys) - console.log(res.currentSize) - console.log(res.limitSize) - } -}) -``` -* -* ```js -try { - const res = wx.getStorageInfoSync() - console.log(res.keys) - console.log(res.currentSize) - console.log(res.limitSize) -} catch (e) { - // Do something when catch error -} -``` */ - getStorageInfo<T extends GetStorageInfoOption = GetStorageInfoOption>( - option?: T - ): PromisifySuccessResult<T, GetStorageInfoOption> - /** [wx.getSystemInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfo.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 获取系统信息。**由于历史原因,wx.getSystemInfo 是异步的调用格式,但是是同步返回,需要异步获取系统信息请使用 [wx.getSystemInfoAsync](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoAsync.html)。** -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/WkUCgXmS7mqO) -* -* ```js -wx.getSystemInfo({ - success (res) { - console.log(res.model) - console.log(res.pixelRatio) - console.log(res.windowWidth) - console.log(res.windowHeight) - console.log(res.language) - console.log(res.version) - console.log(res.platform) - } -}) -``` -* -* ```js -try { - const res = wx.getSystemInfoSync() - console.log(res.model) - console.log(res.pixelRatio) - console.log(res.windowWidth) - console.log(res.windowHeight) - console.log(res.language) - console.log(res.version) - console.log(res.platform) -} catch (e) { - // Do something when catch error -} -``` */ - getSystemInfo<T extends GetSystemInfoOption = GetSystemInfoOption>( - option?: T - ): PromisifySuccessResult<T, GetSystemInfoOption> - /** [wx.getSystemInfoAsync(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoAsync.html) -* -* 需要基础库: `2.14.1` -* -* 在插件中使用:不支持 -* -* 异步获取系统信息。需要一定的微信客户端版本支持,在不支持的客户端上,会使用同步实现来返回。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/WkUCgXmS7mqO) -* -* ```js -wx.getSystemInfoAsync({ - success (res) { - console.log(res.model) - console.log(res.pixelRatio) - console.log(res.windowWidth) - console.log(res.windowHeight) - console.log(res.language) - console.log(res.version) - console.log(res.platform) - } -}) -``` */ - getSystemInfoAsync(option?: GetSystemInfoAsyncOption): void - /** [wx.getUserInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html) -* -* 在插件中使用:需要基础库 `2.3.1` -* -* 在插件中使用时,需要在用户信息功能页中获得用户授权或满足一定条件后调用。否则将返回 fail。详见 [用户信息功能页](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages/user-info.html) -* -* @warning **用户头像昵称获取规则已调整,参考 [用户信息接口调整说明](https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801)、[小程序用户头像昵称获取规则调整公告](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)** -* -* 获取用户信息。 -* -* **示例代码** -* -* ```js -// 必须是在用户已经授权的情况下调用 -wx.getUserInfo({ - success: function(res) { - var userInfo = res.userInfo - var nickName = userInfo.nickName - var avatarUrl = userInfo.avatarUrl - var gender = userInfo.gender //性别 0:未知、1:男、2:女 - var province = userInfo.province - var city = userInfo.city - var country = userInfo.country - } -}) -``` -* -* 敏感数据有两种获取方式: -* 1. 使用 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) -* 2. 使用 [云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#云调用直接获取开放数据) -* 获取得到的开放数据为以下 json 结构: -* -* ```json -{ - "openId": "OPENID", - "nickName": "NICKNAME", - "gender": GENDER, - "city": "CITY", - "province": "PROVINCE", - "country": "COUNTRY", - "avatarUrl": "AVATARURL", - "unionId": "UNIONID", - "watermark": { - "appid":"APPID", - "timestamp":TIMESTAMP - } -} -``` -* -* **小程序用户信息组件示例代码** -* -* ```html -* <!-- 如果只是展示用户头像昵称,可以使用 <open-data /> 组件 --> -* <open-data type="userAvatarUrl"></open-data> -* <open-data type="userNickName"></open-data> -* <!-- 需要使用 button 来授权登录 --> -* <button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button> -* <view wx:else>请升级微信版本</view> -* ``` -* -* ```js -Page({ - data: { - canIUse: wx.canIUse('button.open-type.getUserInfo') - }, - onLoad: function() { - // 查看是否授权 - wx.getSetting({ - success (res){ - if (res.authSetting['scope.userInfo']) { - // 已经授权,可以直接调用 getUserInfo 获取头像昵称 - wx.getUserInfo({ - success: function(res) { - console.log(res.userInfo) - } - }) - } - } - }) - }, - bindGetUserInfo (e) { - console.log(e.detail.userInfo) - } -}) -``` */ - getUserInfo<T extends GetUserInfoOption = GetUserInfoOption>( - option: T - ): PromisifySuccessResult<T, GetUserInfoOption> - /** [wx.getUserProfile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html) -* -* 需要基础库: `2.10.4` -* -* 在插件中使用:不支持 -* -* @warning **用户头像昵称获取规则已调整,参考 [小程序用户头像昵称获取规则调整公告](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)** -* -* 获取用户信息。页面产生点击事件(例如 `button` 上 `bindtap` 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 `userInfo`。该接口用于替换 `wx.getUserInfo`,详见 [用户信息接口调整说明](https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?highLine=login)。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/tsJaq2mP7Mp4) -* -* **Bug & Tip** -* -* 1. `tip`:仅小程序中 `wx.getUserInfo` 接口进行调整,小游戏中不受影响; -* 2. `tip`:开发者工具中仅 2.10.4 及以上版本可访问 `wx.getUserProfile` 接口,在真机上可参考示例代码进行判断,无需根据版本号或者 `canIUse` 进行条件。 -* 3. `tip`:`wx.getUserProfile` 返回的加密数据中不包含 `openId` 和 `unionId` 字段。 -* 4. `bug`:开发者工具中 `2.10.4`~`2.16.1` 基础库版本通过 `<button open-type="getUserInfo">` 会返回真实数据,真机上此区间会按照公告返回匿名数据。 -* -* ```html -* <view class="container"> -* <view class="userinfo"> -* <block wx:if="{{!hasUserInfo}}"> -* <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button> -* <button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button> -* </block> -* <block wx:else> -* <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image> -* <text class="userinfo-nickname">{{userInfo.nickName}}</text> -* </block> -* </view> -* </view> -* ``` -* -* ```js -Page({ - data: { - userInfo: {}, - hasUserInfo: false, - canIUseGetUserProfile: false, - }, - onLoad() { - if (wx.getUserProfile) { - this.setData({ - canIUseGetUserProfile: true - }) - } - }, - getUserProfile(e) { - // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认 - // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 - wx.getUserProfile({ - desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 - success: (res) => { - this.setData({ - userInfo: res.userInfo, - hasUserInfo: true - }) - } - }) - }, - getUserInfo(e) { - // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息 - this.setData({ - userInfo: e.detail.userInfo, - hasUserInfo: true - }) - }, -}) -``` */ - getUserProfile<T extends GetUserProfileOption = GetUserProfileOption>( - option: T - ): PromisifySuccessResult<T, GetUserProfileOption> - /** [wx.getVideoInfo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.getVideoInfo.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:支持 - * - * 获取视频详细信息。 */ - getVideoInfo<T extends GetVideoInfoOption = GetVideoInfoOption>( - option: T - ): PromisifySuccessResult<T, GetVideoInfoOption> - /** [wx.getWeRunData(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html) -* -* 需要基础库: `1.2.0` -* -* 在插件中使用:不支持 -* -* 获取用户过去三十天微信运动步数。需要先调用 [wx.login](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html) 接口。步数信息会在用户主动进入小程序时更新。 -* -* **示例代码** -* -* ```js -wx.getWeRunData({ - success (res) { - // 拿 encryptedData 到开发者后台解密开放数据 - const encryptedData = res.encryptedData - // 或拿 cloudID 通过云调用直接获取开放数据 - const cloudID = res.cloudID - } -}) -``` -* -* **开放数据 JSON 结构** -* -* 敏感数据有两种获取方式,一是使用 [加密数据解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法) 。 -* 获取得到的开放数据为以下 json 结构: -* -* ```json -{ - "stepInfoList": [ - { - "timestamp": 1445866601, - "step": 100 - }, - { - "timestamp": 1445876601, - "step": 120 - } - ] -} -``` -* -* stepInfoList 中,每一项结构如下: -* -* | 属性 | 类型 | 说明 | -* | --- | ---- | --- | -* | timestamp | number | 时间戳,表示数据对应的时间 | -* | step | number | 微信运动步数 | */ - getWeRunData<T extends GetWeRunDataOption = GetWeRunDataOption>( - option?: T - ): PromisifySuccessResult<T, GetWeRunDataOption> - /** [wx.getWifiList(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.getWifiList.html) - * - * 需要基础库: `1.6.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 请求获取 Wi-Fi 列表。`wifiList` 数据会在 [`onGetWifiList`](#) 注册的回调中返回。 **Android 调用前需要 [用户授权](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html) scope.userLocation。** - * - * iOS 上将跳转到系统设置中的微信设置页,需要用户手动进入「无线局域网」设置页,并在系统扫描到设备后,小程序才能收到 onGetWifiList 回调。Android 不会跳转。 - * - * **注意** - * - * 因系统问题,本方法在 iOS 11.0 及 11.1 两个版本失效。但在 iOS 11.2 中已修复。 */ - getWifiList<T extends GetWifiListOption = GetWifiListOption>( - option?: T - ): PromisifySuccessResult<T, GetWifiListOption> - /** [wx.hideHomeButton(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.hideHomeButton.html) - * - * 需要基础库: `2.8.3` - * - * 在插件中使用:不支持 - * - * 隐藏返回首页按钮。微信7.0.7版本起,当用户打开的小程序最底层页面是非首页时,默认展示“返回首页”按钮,开发者可在页面 onShow 中调用 hideHomeButton 进行隐藏。 */ - hideHomeButton<T extends HideHomeButtonOption = HideHomeButtonOption>( - option?: T - ): PromisifySuccessResult<T, HideHomeButtonOption> - /** [wx.hideKeyboard(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/keyboard/wx.hideKeyboard.html) -* -* 需要基础库: `2.8.2` -* -* 在插件中使用:不支持 -* -* 在input、textarea等focus拉起键盘之后,手动调用此接口收起键盘 -* -* **示例代码** -* -* ```js -wx.hideKeyboard({ - complete: res => { - console.log('hideKeyboard res', res) - } -}) -``` */ - hideKeyboard<T extends HideKeyboardOption = HideKeyboardOption>( - option?: T - ): PromisifySuccessResult<T, HideKeyboardOption> - /** [wx.hideLoading(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.hideLoading.html) - * - * 需要基础库: `1.1.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 隐藏 loading 提示框 */ - hideLoading<T extends HideLoadingOption = HideLoadingOption>( - option?: T - ): PromisifySuccessResult<T, HideLoadingOption> - /** [wx.hideNavigationBarLoading(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.hideNavigationBarLoading.html) - * - * 在插件中使用:需要基础库 `2.1.0` - * - * 在插件中使用时,只能在当前插件的页面中调用 - * - * 在当前页面隐藏导航条加载动画 */ - hideNavigationBarLoading< - T extends HideNavigationBarLoadingOption = HideNavigationBarLoadingOption - >( - option?: T - ): PromisifySuccessResult<T, HideNavigationBarLoadingOption> - /** [wx.hideShareMenu(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.hideShareMenu.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 隐藏当前页面的转发按钮 -* -* **** -* -* ## 注意事项 -* - "shareAppMessage"表示“发送给朋友”按钮,"shareTimeline"表示“分享到朋友圈”按钮 -* - 隐藏“发送给朋友”按钮时必须同时隐藏“分享到朋友圈”按钮,隐藏“分享到朋友圈”按钮时则允许不隐藏“发送给朋友”按钮 -* -* **示例代码** -* -* ```js -wx.hideShareMenu({ - menus: ['shareAppMessage', 'shareTimeline'] -}) -``` */ - hideShareMenu<T extends HideShareMenuOption = HideShareMenuOption>( - option?: T - ): PromisifySuccessResult<T, HideShareMenuOption> - /** [wx.hideTabBar(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.hideTabBar.html) - * - * 需要基础库: `1.9.0` - * - * 在插件中使用:不支持 - * - * 隐藏 tabBar */ - hideTabBar<T extends HideTabBarOption = HideTabBarOption>( - option: T - ): PromisifySuccessResult<T, HideTabBarOption> - /** [wx.hideTabBarRedDot(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.hideTabBarRedDot.html) - * - * 需要基础库: `1.9.0` - * - * 在插件中使用:不支持 - * - * 隐藏 tabBar 某一项的右上角的红点 */ - hideTabBarRedDot< - T extends HideTabBarRedDotOption = HideTabBarRedDotOption - >( - option: T - ): PromisifySuccessResult<T, HideTabBarRedDotOption> - /** [wx.hideToast(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.hideToast.html) - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 隐藏消息提示框 */ - hideToast<T extends HideToastOption = HideToastOption>( - option?: T - ): PromisifySuccessResult<T, HideToastOption> - /** [wx.initFaceDetect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/face/wx.initFaceDetect.html) - * - * 需要基础库: `2.18.0` - * - * 在插件中使用:需要基础库 `2.21.3` - * @deprecated 基础库版本 [2.25.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 - * - * 初始化人脸检测。本接口不再维护,请使用 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 接口代替。详情参考[人脸检测指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html) */ - initFaceDetect(option?: InitFaceDetectOption): void - /** [wx.isBluetoothDevicePaired(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.isBluetoothDevicePaired.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:需要基础库 `2.19.1` - * - * 查询蓝牙设备是否配对,仅安卓支持。 */ - isBluetoothDevicePaired< - T extends IsBluetoothDevicePairedOption = IsBluetoothDevicePairedOption - >( - option: T - ): PromisifySuccessResult<T, IsBluetoothDevicePairedOption> - /** [wx.join1v1Chat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.join1v1Chat.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:不支持 - * - * 加入(创建)双人通话。 */ - join1v1Chat(option: Join1v1ChatOption): void - /** [wx.joinVoIPChat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.joinVoIPChat.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:需要基础库 `2.9.0` - * - * 加入 (创建) 实时语音通话,更多信息可见 [实时语音指南](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/voip-chat.html)。调用前需要用户授权 `scope.record`,若房间类型为视频房间需要用户授权 `scope.camera`。 */ - joinVoIPChat<T extends JoinVoIPChatOption = JoinVoIPChatOption>( - option: T - ): PromisifySuccessResult<T, JoinVoIPChatOption> - /** [wx.loadFontFace(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/font/wx.loadFontFace.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 动态加载网络字体,文件地址需为下载类型。[2.10.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html)起支持全局生效,需在 `app.js` 中调用。 -* -* 注意: -* 1. 字体文件返回的 contet-type 参考 [font](https://www.iana.org/assignments/media-types/media-types.xhtml#font),格式不正确时会解析失败。 -* 2. 字体链接必须是https(ios不支持http) -* 3. 字体链接必须是同源下的,或开启了cors支持,小程序的域名是`servicewechat.com` -* 4. 工具里提示 Faild to load font可以忽略 -* 5. [2.10.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 以前仅在调用页面生效。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/b6Zrajm67R2x) -* ```js -wx.loadFontFace({ - family: 'Bitstream Vera Serif Bold', - source: 'url("https://sungd.github.io/Pacifico.ttf")', - success: console.log -}) -``` */ - loadFontFace<T extends LoadFontFaceOption = LoadFontFaceOption>( - option: T - ): PromisifySuccessResult<T, LoadFontFaceOption> - /** [wx.login(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html) -* -* 在插件中使用:需要基础库 `2.3.1` -* -* 在插件中使用时,需要在用户信息功能页中获得用户授权或满足一定条件后调用。否则将返回 fail。详见 [用户信息功能页](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages/user-info.html) -* -* 调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。 -* -* **示例代码** -* -* ```js -wx.login({ - success (res) { - if (res.code) { - //发起网络请求 - wx.request({ - url: 'https://example.com/onLogin', - data: { - code: res.code - } - }) - } else { - console.log('登录失败!' + res.errMsg) - } - } -}) -``` */ - login<T extends LoginOption = LoginOption>( - option?: T - ): PromisifySuccessResult<T, LoginOption> - /** [wx.makeBluetoothPair(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.makeBluetoothPair.html) - * - * 需要基础库: `2.12.0` - * - * 在插件中使用:需要基础库 `2.12.0` - * - * 蓝牙配对接口,仅安卓支持。 - * - * 通常情况下(需要指定 `pin` 码或者密码时)系统会接管配对流程,直接调用 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 即可。该接口只应当在开发者不想让用户手动输入 `pin` 码且真机验证确认可以正常生效情况下用。 */ - makeBluetoothPair< - T extends MakeBluetoothPairOption = MakeBluetoothPairOption - >( - option: T - ): PromisifySuccessResult<T, MakeBluetoothPairOption> - /** [wx.makePhoneCall(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/phone/wx.makePhoneCall.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 拨打电话 -* -* **示例代码** -* -* ```js -wx.makePhoneCall({ - phoneNumber: '1340000' //仅为示例,并非真实的电话号码 -}) -``` */ - makePhoneCall<T extends MakePhoneCallOption = MakePhoneCallOption>( - option: T - ): PromisifySuccessResult<T, MakePhoneCallOption> - /** [wx.navigateBack(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateBack.html) - * - * 在插件中使用:需要基础库 `2.1.0` - * - * 在插件中使用时,只能在当前插件的页面中调用 - * - * 关闭当前页面,返回上一页面或多级页面。可通过 [getCurrentPages](https://developers.weixin.qq.com/miniprogram/dev/reference/api/getCurrentPages.html) 获取当前的页面栈,决定需要返回几层。 */ - navigateBack<T extends NavigateBackOption = NavigateBackOption>( - option?: T - ): PromisifySuccessResult<T, NavigateBackOption> - /** [wx.navigateBackMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateBackMiniProgram.html) -* -* 需要基础库: `1.3.0` -* -* 在插件中使用:不支持 -* -* 返回到上一个小程序。只有在当前小程序是被其他小程序打开时可以调用成功 -* -* 注意:**微信客户端 iOS 6.5.9,Android 6.5.10 及以上版本支持** -* -* **示例代码** -* -* ```js -wx.navigateBackMiniProgram({ - extraData: { - foo: 'bar' - }, - success(res) { - // 返回成功 - } -}) -``` */ - navigateBackMiniProgram< - T extends NavigateBackMiniProgramOption = NavigateBackMiniProgramOption - >( - option: T - ): PromisifySuccessResult<T, NavigateBackMiniProgramOption> - /** [wx.navigateTo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateTo.html) -* -* 在插件中使用:需要基础库 `2.2.2` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 [wx.navigateBack](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateBack.html) 可以返回到原页面。小程序中页面栈最多十层。 -* -* **示例代码** -* -* ```js -wx.navigateTo({ - url: 'test?id=1', - events: { - // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据 - acceptDataFromOpenedPage: function(data) { - console.log(data) - }, - someEvent: function(data) { - console.log(data) - } - ... - }, - success: function(res) { - // 通过eventChannel向被打开页面传送数据 - res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' }) - } -}) -``` -* -* ```javascript -//test.js -Page({ - onLoad: function(option){ - console.log(option.query) - const eventChannel = this.getOpenerEventChannel() - eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'}); - eventChannel.emit('someEvent', {data: 'test'}); - // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据 - eventChannel.on('acceptDataFromOpenerPage', function(data) { - console.log(data) - }) - } -}) -``` */ - navigateTo<T extends NavigateToOption = NavigateToOption>( - option: T - ): PromisifySuccessResult<T, NavigateToOption> - /** [wx.navigateToMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html) -* -* 需要基础库: `1.3.0` -* -* 在插件中使用:需要基础库 `2.18.1` -* -* 打开另一个小程序 -* -* **使用限制** -* -* ##### 需要用户触发跳转 -* 从 2.3.0 版本开始,若用户未点击小程序页面任意位置,则开发者将无法调用此接口自动跳转至其他小程序。 -* ##### 需要用户确认跳转 -* 从 2.3.0 版本开始,在跳转至其他小程序前,将统一增加弹窗,询问是否跳转,用户确认后才可以跳转其他小程序。如果用户点击取消,则回调 `fail cancel`。 -* ##### 无需声明跳转名单,不限跳转数量(众测中) -* 1. 从2020年4月24日起,使用跳转其他小程序功能将无需在全局配置中声明跳转名单,调用此接口时将不再校验所跳转的 AppID 是否在 navigateToMiniProgramAppIdList 中。 -* 2. 从2020年4月24日起,跳转其他小程序将不再受数量限制,使用此功能时请注意遵守运营规范。 -* -* **运营规范** -* -* 平台将坚决打击小程序盒子等互推行为,使用此功能时请严格遵守[《微信小程序平台运营规范》](https://developers.weixin.qq.com/miniprogram/product/#_5-10-%E4%BA%92%E6%8E%A8%E8%A1%8C%E4%B8%BA),若发现小程序违反运营规范将被下架处理。 -* -* **关于调试** -* -* - 在开发者工具上调用此 API 并不会真实的跳转到另外的小程序,但是开发者工具会校验本次调用跳转是否成功。[详情](https://developers.weixin.qq.com/miniprogram/dev/devtools/different.html#跳转小程序调试支持) -* - 开发者工具上支持被跳转的小程序处理接收参数的调试。[详情](https://developers.weixin.qq.com/miniprogram/dev/devtools/different.html#跳转小程序调试支持) -* -* **示例代码** -* -* ```js -wx.navigateToMiniProgram({ - appId: '', - path: 'page/index/index?id=123', - extraData: { - foo: 'bar' - }, - envVersion: 'develop', - success(res) { - // 打开成功 - } -}) -``` */ - navigateToMiniProgram< - T extends NavigateToMiniProgramOption = NavigateToMiniProgramOption - >( - option: T - ): PromisifySuccessResult<T, NavigateToMiniProgramOption> - /** [wx.nextTick(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/custom-component/wx.nextTick.html) -* -* 需要基础库: `2.2.3` -* -* 在插件中使用:需要基础库 `2.7.1` -* -* 延迟一部分操作到下一个时间片再执行。(类似于 setTimeout) -* -* **说明** -* -* 因为自定义组件中的 setData 和 triggerEvent 等接口本身是同步的操作,当这几个接口被连续调用时,都是在一个同步流程中执行完的,因此若逻辑不当可能会导致出错。 -* -* 一个极端的案例:当父组件的 setData 引发了子组件的 triggerEvent,进而使得父组件又进行了一次 setData,期间有通过 wx:if 语句对子组件进行卸载,就有可能引发奇怪的错误,所以对于不需要在一个同步流程内完成的逻辑,可以使用此接口延迟到下一个时间片再执行。 -* -* **示例代码** -* -* ```js -Component({ - doSth() { - this.setData({ number: 1 }) // 直接在当前同步流程中执行 - - wx.nextTick(() => { - this.setData({ number: 3 }) // 在当前同步流程结束后,下一个时间片执行 - }) - - this.setData({ number: 2 }) // 直接在当前同步流程中执行 - } -}) -``` */ - nextTick(callback: (...args: any[]) => any): void - /** [wx.notifyBLECharacteristicValueChange(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 启用蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征。注意:必须设备的特征支持 notify 或者 indicate 才可以成功调用。 -* -* 另外,必须先启用 [wx.notifyBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html) 才能监听到设备 `characteristicValueChange` 事件 -* -* **注意** -* -* - 订阅操作成功后需要设备主动更新特征的 value,才会触发 [wx.onBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLECharacteristicValueChange.html) 回调。 -* - 安卓平台上,在本接口调用成功后立即调用 [wx.writeBLECharacteristicValue](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html) 接口,在部分机型上会发生 10008 系统错误 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.notifyBLECharacteristicValueChange({ - state: true, // 启用 notify 功能 - // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 - deviceId, - // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 - serviceId, - // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 - characteristicId, - success (res) { - console.log('notifyBLECharacteristicValueChange success', res.errMsg) - } -}) -``` */ - notifyBLECharacteristicValueChange< - T extends NotifyBLECharacteristicValueChangeOption = NotifyBLECharacteristicValueChangeOption - >( - option: T - ): PromisifySuccessResult<T, NotifyBLECharacteristicValueChangeOption> - /** [wx.offAccelerometerChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.offAccelerometerChange.html) -* -* 需要基础库: `2.9.3` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除加速度数据事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onAccelerometerChange(listener) -wx.offAccelerometerChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offAccelerometerChange( - /** onAccelerometerChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffAccelerometerChangeCallback - ): void - /** [wx.offAppHide(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offAppHide.html) -* -* 需要基础库: `2.1.2` -* -* 在插件中使用:不支持 -* -* 移除小程序切后台事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onAppHide(listener) -wx.offAppHide(listener) // 需传入与监听时同一个的函数对象 -``` */ - offAppHide( - /** onAppHide 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffAppHideCallback - ): void - /** [wx.offAppShow(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offAppShow.html) -* -* 需要基础库: `2.1.2` -* -* 在插件中使用:不支持 -* -* 移除小程序切前台事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onAppShow(listener) -wx.offAppShow(listener) // 需传入与监听时同一个的函数对象 -``` */ - offAppShow( - /** onAppShow 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffAppShowCallback - ): void - /** [wx.offAudioInterruptionBegin(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offAudioInterruptionBegin.html) -* -* 需要基础库: `2.6.2` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 移除音频因为受到系统占用而被中断开始事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onAudioInterruptionBegin(listener) -wx.offAudioInterruptionBegin(listener) // 需传入与监听时同一个的函数对象 -``` */ - offAudioInterruptionBegin( - /** onAudioInterruptionBegin 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffAudioInterruptionBeginCallback - ): void - /** [wx.offAudioInterruptionEnd(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offAudioInterruptionEnd.html) -* -* 需要基础库: `2.6.2` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 移除音频中断结束事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onAudioInterruptionEnd(listener) -wx.offAudioInterruptionEnd(listener) // 需传入与监听时同一个的函数对象 -``` */ - offAudioInterruptionEnd( - /** onAudioInterruptionEnd 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffAudioInterruptionEndCallback - ): void - /** [wx.offBLECharacteristicValueChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.offBLECharacteristicValueChange.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除蓝牙低功耗设备的特征值变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onBLECharacteristicValueChange(listener) -wx.offBLECharacteristicValueChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBLECharacteristicValueChange( - /** onBLECharacteristicValueChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBLECharacteristicValueChangeCallback - ): void - /** [wx.offBLEConnectionStateChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.offBLEConnectionStateChange.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除蓝牙低功耗连接状态改变事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onBLEConnectionStateChange(listener) -wx.offBLEConnectionStateChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBLEConnectionStateChange( - /** onBLEConnectionStateChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBLEConnectionStateChangeCallback - ): void - /** [wx.offBLEMTUChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.offBLEMTUChange.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.20.1` -* -* 移除蓝牙低功耗的最大传输单元变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onBLEMTUChange(listener) -wx.offBLEMTUChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBLEMTUChange( - /** onBLEMTUChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBLEMTUChangeCallback - ): void - /** [wx.offBLEPeripheralConnectionStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/wx.offBLEPeripheralConnectionStateChanged.html) -* -* 需要基础库: `2.10.3` -* -* 在插件中使用:需要基础库 `2.22.1` -* -* 移除当前外围设备被连接或断开连接事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onBLEPeripheralConnectionStateChanged(listener) -wx.offBLEPeripheralConnectionStateChanged(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBLEPeripheralConnectionStateChanged( - /** onBLEPeripheralConnectionStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBLEPeripheralConnectionStateChangedCallback - ): void - /** [wx.offBeaconServiceChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.offBeaconServiceChange.html) -* -* 需要基础库: `2.8.1` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除 Beacon 服务状态变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onBeaconServiceChange(listener) -wx.offBeaconServiceChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBeaconServiceChange( - /** onBeaconServiceChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBeaconServiceChangeCallback - ): void - /** [wx.offBeaconUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.offBeaconUpdate.html) -* -* 需要基础库: `2.8.1` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除 Beacon 设备更新事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onBeaconUpdate(listener) -wx.offBeaconUpdate(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBeaconUpdate( - /** onBeaconUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBeaconUpdateCallback - ): void - /** [wx.offBluetoothAdapterStateChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.offBluetoothAdapterStateChange.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除蓝牙适配器状态变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onBluetoothAdapterStateChange(listener) -wx.offBluetoothAdapterStateChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBluetoothAdapterStateChange( - /** onBluetoothAdapterStateChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBluetoothAdapterStateChangeCallback - ): void - /** [wx.offBluetoothDeviceFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.offBluetoothDeviceFound.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除搜索到新设备的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onBluetoothDeviceFound(listener) -wx.offBluetoothDeviceFound(listener) // 需传入与监听时同一个的函数对象 -``` */ - offBluetoothDeviceFound( - /** onBluetoothDeviceFound 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffBluetoothDeviceFoundCallback - ): void - /** [wx.offCompassChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/compass/wx.offCompassChange.html) -* -* 需要基础库: `2.9.3` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除罗盘数据变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onCompassChange(listener) -wx.offCompassChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offCompassChange( - /** onCompassChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffCompassChangeCallback - ): void - /** [wx.offCopyUrl(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.offCopyUrl.html) -* -* 需要基础库: `2.14.3` -* -* 在插件中使用:不支持 -* -* 移除用户点击右上角菜单的「复制链接」按钮时触发的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onCopyUrl(listener) -wx.offCopyUrl(listener) // 需传入与监听时同一个的函数对象 -``` */ - offCopyUrl( - /** onCopyUrl 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffCopyUrlCallback - ): void - /** [wx.offDeviceMotionChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.offDeviceMotionChange.html) -* -* 需要基础库: `2.9.3` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除设备方向变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onDeviceMotionChange(listener) -wx.offDeviceMotionChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offDeviceMotionChange( - /** onDeviceMotionChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffDeviceMotionChangeCallback - ): void - /** [wx.offError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offError.html) -* -* 需要基础库: `2.1.2` -* -* 在插件中使用:不支持 -* -* 移除小程序错误事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onError(listener) -wx.offError(listener) // 需传入与监听时同一个的函数对象 -``` */ - offError( - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: WxOffErrorCallback - ): void - /** [wx.offGetWifiList(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.offGetWifiList.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除获取到 Wi-Fi 列表数据事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onGetWifiList(listener) -wx.offGetWifiList(listener) // 需传入与监听时同一个的函数对象 -``` */ - offGetWifiList( - /** onGetWifiList 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffGetWifiListCallback - ): void - /** [wx.offHCEMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.offHCEMessage.html) -* -* 需要基础库: `2.8.1` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除接收 NFC 设备消息事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onHCEMessage(listener) -wx.offHCEMessage(listener) // 需传入与监听时同一个的函数对象 -``` */ - offHCEMessage( - /** onHCEMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffHCEMessageCallback - ): void - /** [wx.offKeyboardHeightChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/keyboard/wx.offKeyboardHeightChange.html) -* -* 需要基础库: `2.9.2` -* -* 在插件中使用:不支持 -* -* 移除键盘高度变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onKeyboardHeightChange(listener) -wx.offKeyboardHeightChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offKeyboardHeightChange( - /** onKeyboardHeightChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffKeyboardHeightChangeCallback - ): void - /** [wx.offLazyLoadError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offLazyLoadError.html) -* -* 需要基础库: `2.24.3` -* -* 在插件中使用:不支持 -* -* 移除小程序异步组件加载失败事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onLazyLoadError(listener) -wx.offLazyLoadError(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLazyLoadError( - /** onLazyLoadError 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLazyLoadErrorCallback - ): void - /** [wx.offLocalServiceDiscoveryStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.offLocalServiceDiscoveryStop.html) -* -* 需要基础库: `2.4.0` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 移除 mDNS 服务停止搜索的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onLocalServiceDiscoveryStop(listener) -wx.offLocalServiceDiscoveryStop(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLocalServiceDiscoveryStop( - /** onLocalServiceDiscoveryStop 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLocalServiceDiscoveryStopCallback - ): void - /** [wx.offLocalServiceFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.offLocalServiceFound.html) -* -* 需要基础库: `2.4.0` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 移除 mDNS 服务发现的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onLocalServiceFound(listener) -wx.offLocalServiceFound(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLocalServiceFound( - /** onLocalServiceFound 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLocalServiceFoundCallback - ): void - /** [wx.offLocalServiceLost(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.offLocalServiceLost.html) -* -* 需要基础库: `2.4.0` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 移除 mDNS 服务离开的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onLocalServiceLost(listener) -wx.offLocalServiceLost(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLocalServiceLost( - /** onLocalServiceLost 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLocalServiceLostCallback - ): void - /** [wx.offLocalServiceResolveFail(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.offLocalServiceResolveFail.html) -* -* 需要基础库: `2.4.0` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 移除 mDNS 服务解析失败的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onLocalServiceResolveFail(listener) -wx.offLocalServiceResolveFail(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLocalServiceResolveFail( - /** onLocalServiceResolveFail 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLocalServiceResolveFailCallback - ): void - /** [wx.offLocationChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.offLocationChange.html) -* -* 需要基础库: `2.8.1` -* -* 在插件中使用:不支持 -* -* 移除实时地理位置变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onLocationChange(listener) -wx.offLocationChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLocationChange( - /** onLocationChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLocationChangeCallback - ): void - /** [wx.offLocationChangeError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.offLocationChangeError.html) -* -* 需要基础库: `2.19.5` -* -* 在插件中使用:不支持 -* -* 移除持续定位接口返回失败时触发。的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onLocationChangeError(listener) -wx.offLocationChangeError(listener) // 需传入与监听时同一个的函数对象 -``` */ - offLocationChangeError( - /** onLocationChangeError 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffLocationChangeErrorCallback - ): void - /** [wx.offMemoryWarning(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/memory/wx.offMemoryWarning.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:不支持 -* -* 移除内存不足告警事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onMemoryWarning(listener) -wx.offMemoryWarning(listener) // 需传入与监听时同一个的函数对象 -``` */ - offMemoryWarning( - /** onMemoryWarning 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffMemoryWarningCallback - ): void - /** [wx.offNetworkStatusChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.offNetworkStatusChange.html) -* -* 需要基础库: `2.9.3` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除网络状态变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onNetworkStatusChange(listener) -wx.offNetworkStatusChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offNetworkStatusChange( - /** onNetworkStatusChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffNetworkStatusChangeCallback - ): void - /** [wx.offNetworkWeakChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.offNetworkWeakChange.html) -* -* 需要基础库: `2.21.0` -* -* 在插件中使用:不支持 -* -* 移除弱网状态变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onNetworkWeakChange(listener) -wx.offNetworkWeakChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offNetworkWeakChange( - /** onNetworkWeakChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffNetworkWeakChangeCallback - ): void - /** [wx.offPageNotFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offPageNotFound.html) -* -* 需要基础库: `2.1.2` -* -* 在插件中使用:不支持 -* -* 移除小程序要打开的页面不存在事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onPageNotFound(listener) -wx.offPageNotFound(listener) // 需传入与监听时同一个的函数对象 -``` */ - offPageNotFound( - /** onPageNotFound 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffPageNotFoundCallback - ): void - /** [wx.offScreenRecordingStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.offScreenRecordingStateChanged.html) -* -* 需要基础库: `2.24.0` -* -* 在插件中使用:不支持 -* -* 移除用户录屏事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onScreenRecordingStateChanged(listener) -wx.offScreenRecordingStateChanged(listener) // 需传入与监听时同一个的函数对象 -``` */ - offScreenRecordingStateChanged( - /** onScreenRecordingStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffScreenRecordingStateChangedCallback - ): void - /** [wx.offThemeChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offThemeChange.html) -* -* 需要基础库: `2.11.0` -* -* 在插件中使用:不支持 -* -* 移除系统主题改变事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onThemeChange(listener) -wx.offThemeChange(listener) // 需传入与监听时同一个的函数对象 -``` */ - offThemeChange( - /** onThemeChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffThemeChangeCallback - ): void - /** [wx.offUnhandledRejection(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.offUnhandledRejection.html) -* -* 需要基础库: `2.10.0` -* -* 在插件中使用:不支持 -* -* 移除未处理的 Promise 拒绝事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onUnhandledRejection(listener) -wx.offUnhandledRejection(listener) // 需传入与监听时同一个的函数对象 -``` */ - offUnhandledRejection( - /** onUnhandledRejection 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffUnhandledRejectionCallback - ): void - /** [wx.offUserCaptureScreen(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.offUserCaptureScreen.html) - * - * 需要基础库: `2.9.3` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 在插件中使用时,只能在当前插件的页面中调用 - * - * 用户主动截屏事件。取消事件监听。 */ - offUserCaptureScreen( - /** 用户主动截屏事件的回调函数 */ - callback?: (...args: any[]) => any - ): void - /** [wx.offVoIPChatInterrupted(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPChatInterrupted.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除被动断开实时语音通话事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onVoIPChatInterrupted(listener) -wx.offVoIPChatInterrupted(listener) // 需传入与监听时同一个的函数对象 -``` */ - offVoIPChatInterrupted( - /** onVoIPChatInterrupted 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffVoIPChatInterruptedCallback - ): void - /** [wx.offVoIPChatMembersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPChatMembersChanged.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除实时语音通话成员在线状态变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onVoIPChatMembersChanged(listener) -wx.offVoIPChatMembersChanged(listener) // 需传入与监听时同一个的函数对象 -``` */ - offVoIPChatMembersChanged( - /** onVoIPChatMembersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffVoIPChatMembersChangedCallback - ): void - /** [wx.offVoIPChatSpeakersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPChatSpeakersChanged.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除实时语音通话成员通话状态变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onVoIPChatSpeakersChanged(listener) -wx.offVoIPChatSpeakersChanged(listener) // 需传入与监听时同一个的函数对象 -``` */ - offVoIPChatSpeakersChanged( - /** onVoIPChatSpeakersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffVoIPChatSpeakersChangedCallback - ): void - /** [wx.offVoIPChatStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPChatStateChanged.html) -* -* 需要基础库: `2.16.0` -* -* 在插件中使用:不支持 -* -* 移除房间状态变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onVoIPChatStateChanged(listener) -wx.offVoIPChatStateChanged(listener) // 需传入与监听时同一个的函数对象 -``` */ - offVoIPChatStateChanged( - /** onVoIPChatStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffVoIPChatStateChangedCallback - ): void - /** [wx.offVoIPVideoMembersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.offVoIPVideoMembersChanged.html) -* -* 需要基础库: `2.11.0` -* -* 在插件中使用:不支持 -* -* 移除实时语音通话成员视频状态变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onVoIPVideoMembersChanged(listener) -wx.offVoIPVideoMembersChanged(listener) // 需传入与监听时同一个的函数对象 -``` */ - offVoIPVideoMembersChanged( - /** onVoIPVideoMembersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffVoIPVideoMembersChangedCallback - ): void - /** [wx.offWifiConnected(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.offWifiConnected.html) -* -* 需要基础库: `2.9.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 移除连接上 Wi-Fi 的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onWifiConnected(listener) -wx.offWifiConnected(listener) // 需传入与监听时同一个的函数对象 -``` */ - offWifiConnected( - /** onWifiConnected 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffWifiConnectedCallback - ): void - /** [wx.offWifiConnectedWithPartialInfo(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.offWifiConnectedWithPartialInfo.html) -* -* 需要基础库: `2.22.0` -* -* 在插件中使用:需要基础库 `2.22.1` -* -* 移除连接上 Wi-Fi 的事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onWifiConnectedWithPartialInfo(listener) -wx.offWifiConnectedWithPartialInfo(listener) // 需传入与监听时同一个的函数对象 -``` */ - offWifiConnectedWithPartialInfo( - /** onWifiConnectedWithPartialInfo 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffWifiConnectedWithPartialInfoCallback - ): void - /** [wx.offWindowResize(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/window/wx.offWindowResize.html) -* -* 需要基础库: `2.3.0` -* -* 在插件中使用:不支持 -* -* 移除窗口尺寸变化事件的监听函数 -* -* **示例代码** -* -* ```js -const listener = function (res) { console.log(res) } - -wx.onWindowResize(listener) -wx.offWindowResize(listener) // 需传入与监听时同一个的函数对象 -``` */ - offWindowResize( - /** onWindowResize 传入的监听函数。不传此参数则移除所有监听函数。 */ - listener?: OffWindowResizeCallback - ): void - /** [wx.onAccelerometerChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.onAccelerometerChange.html) -* -* 在插件中使用:不支持 -* -* 监听加速度数据事件。频率根据 [wx.startAccelerometer()](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.startAccelerometer.html) 的 interval 参数, 接口调用后会自动开始监听。 -* -* **示例代码** -* -* ```js -wx.onAccelerometerChange(callback) -``` */ - onAccelerometerChange( - /** 加速度数据事件的监听函数 */ - listener: OnAccelerometerChangeCallback - ): void - /** [wx.onAppHide(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAppHide.html) - * - * 需要基础库: `2.1.2` - * - * 在插件中使用:不支持 - * - * 监听小程序切后台事件。该事件与 [`App.onHide`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onhide) 的回调时机一致。 */ - onAppHide( - /** 小程序切后台事件的监听函数 */ - listener: OnAppHideCallback - ): void - /** [wx.onAppShow(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAppShow.html) - * - * 需要基础库: `2.1.2` - * - * 在插件中使用:不支持 - * - * 监听小程序切前台事件。该事件与 [`App.onShow`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onshowobject-object) 的回调参数一致。 - * - * **返回有效 referrerInfo 的场景** - * - * | 场景值 | 场景 | appId含义 | - * | ------ | ------------------------------- | ---------- | - * | 1020 | 公众号 profile 页相关小程序列表 | 来源公众号 | - * | 1035 | 公众号自定义菜单 | 来源公众号 | - * | 1036 | App 分享消息卡片 | 来源App | - * | 1037 | 小程序打开小程序 | 来源小程序 | - * | 1038 | 从另一个小程序返回 | 来源小程序 | - * | 1043 | 公众号模板消息 | 来源公众号 | - * - * **不同 apiCategory 场景下的 API 限制** - * - * `X` 表示 API 被限制无法使用;不在表格中的 API 不限制。 - * - * | | default | nativeFunctionalized | browseOnly | embedded | - * |-|-|-|-|-| - * |navigateToMiniProgram | | `X` | `X` | | - * |openSetting | | | `X` | | - * |<button open-type="share"> | | `X` | `X` | `X` | - * |<button open-type="feedback"> | | | `X` | | - * |<button open-type="open-setting">| | | `X` | | - * |openEmbeddedMiniProgram | | `X` | `X` | `X` | - * - * **注意** - * - * 部分版本在无`referrerInfo`的时候会返回 `undefined`,建议使用 `options.referrerInfo && options.referrerInfo.appId` 进行判断。 */ - onAppShow( - /** 小程序切前台事件的监听函数 */ - listener: OnAppShowCallback - ): void - /** [wx.onAudioInterruptionBegin(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAudioInterruptionBegin.html) - * - * 需要基础库: `2.6.2` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 监听音频因为受到系统占用而被中断开始事件。以下场景会触发此事件:闹钟、电话、FaceTime 通话、微信语音聊天、微信视频聊天。此事件触发后,小程序内所有音频会暂停。 */ - onAudioInterruptionBegin( - /** 音频因为受到系统占用而被中断开始事件的监听函数 */ - listener: OnAudioInterruptionBeginCallback - ): void - /** [wx.onAudioInterruptionEnd(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onAudioInterruptionEnd.html) - * - * 需要基础库: `2.6.2` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 监听音频中断结束事件。在收到 onAudioInterruptionBegin 事件之后,小程序内所有音频会暂停,收到此事件之后才可再次播放成功 */ - onAudioInterruptionEnd( - /** 音频中断结束事件的监听函数 */ - listener: OnAudioInterruptionEndCallback - ): void - /** [wx.onBLECharacteristicValueChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLECharacteristicValueChange.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 监听蓝牙低功耗设备的特征值变化事件。必须先调用 [wx.notifyBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html) 接口才能接收到设备推送的 notification。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* -* ```js -// ArrayBuffer转16进制字符串示例 -function ab2hex(buffer) { - let hexArr = Array.prototype.map.call( - new Uint8Array(buffer), - function(bit) { - return ('00' + bit.toString(16)).slice(-2) - } - ) - return hexArr.join(''); -} -wx.onBLECharacteristicValueChange(function(res) { - console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`) - console.log(ab2hex(res.value)) -}) -``` */ - onBLECharacteristicValueChange( - /** 蓝牙低功耗设备的特征值变化事件的监听函数 */ - listener: OnBLECharacteristicValueChangeCallback - ): void - /** [wx.onBLEConnectionStateChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEConnectionStateChange.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 监听蓝牙低功耗连接状态改变事件。包括开发者主动连接或断开连接,设备丢失,连接异常断开等等 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.onBLEConnectionStateChange(function(res) { - // 该方法回调中可以用于处理连接意外断开等异常情况 - console.log(`device ${res.deviceId} state has changed, connected: ${res.connected}`) -}) -``` */ - onBLEConnectionStateChange( - /** 蓝牙低功耗连接状态改变事件的监听函数 */ - listener: OnBLEConnectionStateChangeCallback - ): void - /** [wx.onBLEMTUChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLEMTUChange.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.20.1` -* -* 监听蓝牙低功耗的最大传输单元变化事件(仅安卓触发)。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.onBLEMTUChange(function (res) { - console.log('bluetooth mtu is', res.mtu) -}) -``` */ - onBLEMTUChange( - /** 蓝牙低功耗的最大传输单元变化事件的监听函数 */ - listener: OnBLEMTUChangeCallback - ): void - /** [wx.onBLEPeripheralConnectionStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/wx.onBLEPeripheralConnectionStateChanged.html) - * - * 需要基础库: `2.10.3` - * - * 在插件中使用:需要基础库 `2.22.1` - * - * 监听当前外围设备被连接或断开连接事件 */ - onBLEPeripheralConnectionStateChanged( - /** 当前外围设备被连接或断开连接事件的监听函数 */ - listener: OnBLEPeripheralConnectionStateChangedCallback - ): void - /** [wx.onBackgroundAudioPause(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.onBackgroundAudioPause.html) - * - * 在插件中使用:不支持 - * @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 - * - * 监听音乐暂停事件。 */ - onBackgroundAudioPause( - /** 音乐暂停事件的监听函数 */ - listener: OnBackgroundAudioPauseCallback - ): void - /** [wx.onBackgroundAudioPlay(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.onBackgroundAudioPlay.html) - * - * 在插件中使用:不支持 - * @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 - * - * 监听音乐播放事件。 */ - onBackgroundAudioPlay( - /** 音乐播放事件的监听函数 */ - listener: OnBackgroundAudioPlayCallback - ): void - /** [wx.onBackgroundAudioStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.onBackgroundAudioStop.html) - * - * 在插件中使用:不支持 - * @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 - * - * 监听音乐停止事件。 */ - onBackgroundAudioStop( - /** 音乐停止事件的监听函数 */ - listener: OnBackgroundAudioStopCallback - ): void - /** [wx.onBackgroundFetchData(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.onBackgroundFetchData.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 监听收到 backgroundFetch 数据事件。如果监听时请求已经完成,则事件不会触发。建议和 [wx.getBackgroundFetchData](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.getBackgroundFetchData.html) 配合使用 */ - onBackgroundFetchData( - /** 收到 backgroundFetch 数据事件的监听函数 */ - listener: OnBackgroundFetchDataCallback - ): void - /** [wx.onBeaconServiceChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.onBeaconServiceChange.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 监听 Beacon 服务状态变化事件,仅能注册一个监听 */ - onBeaconServiceChange( - /** Beacon 服务状态变化事件的监听函数 */ - listener: OnBeaconServiceChangeCallback - ): void - /** [wx.onBeaconUpdate(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.onBeaconUpdate.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 监听 Beacon 设备更新事件,仅能注册一个监听 */ - onBeaconUpdate( - /** Beacon 设备更新事件的监听函数 */ - listener: OnBeaconUpdateCallback - ): void - /** [wx.onBluetoothAdapterStateChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.onBluetoothAdapterStateChange.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 监听蓝牙适配器状态变化事件 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.onBluetoothAdapterStateChange(function (res) { - console.log('adapterState changed, now is', res) -}) -``` */ - onBluetoothAdapterStateChange( - /** 蓝牙适配器状态变化事件的监听函数 */ - listener: OnBluetoothAdapterStateChangeCallback - ): void - /** [wx.onBluetoothDeviceFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.onBluetoothDeviceFound.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 监听搜索到新设备的事件 -* -* **注意** -* -* - 若在 [wx.onBluetoothDeviceFound](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.onBluetoothDeviceFound.html) 回调了某个设备,则此设备会添加到 [wx.getBluetoothDevices](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.getBluetoothDevices.html) 接口获取到的数组中。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* -* ```js -// ArrayBuffer转16进度字符串示例 -function ab2hex(buffer) { - var hexArr = Array.prototype.map.call( - new Uint8Array(buffer), - function(bit) { - return ('00' + bit.toString(16)).slice(-2) - } - ) - return hexArr.join(''); -} -wx.onBluetoothDeviceFound(function(res) { - var devices = res.devices; - console.log('new device list has founded') - console.dir(devices) - console.log(ab2hex(devices[0].advertisData)) -}) -``` -* -* **注意** -* -* - 蓝牙设备在被搜索到时,系统返回的 `name` 字段一般为广播包中的 `LocalName` 字段中的设备名称,而如果与蓝牙设备建立连接,系统返回的 `name` 字段会改为从蓝牙设备上获取到的 `GattName`。若需要动态改变设备名称并展示,建议使用 `localName` 字段。 -* - 安卓下部分机型需要有位置权限才能搜索到设备,需留意是否开启了位置权限 */ - onBluetoothDeviceFound( - /** 搜索到新设备的事件的监听函数 */ - listener: OnBluetoothDeviceFoundCallback - ): void - /** [wx.onCompassChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/compass/wx.onCompassChange.html) - * - * 在插件中使用:不支持 - * - * 监听罗盘数据变化事件。频率:5 次/秒,接口调用后会自动开始监听,可使用 wx.stopCompass 停止监听。 - * - * **accuracy 在 iOS/Android 的差异** - * - * 由于平台差异,accuracy 在 iOS/Android 的值不同。 - * - * - iOS:accuracy 是一个 number 类型的值,表示相对于磁北极的偏差。0 表示设备指向磁北,90 表示指向东,180 表示指向南,依此类推。 - * - Android:accuracy 是一个 string 类型的枚举值。 - * - * | 值 | 说明 | - * | --------------- | -------------------------------------------------------------------------------------- | - * | high | 高精度 | - * | medium | 中等精度 | - * | low | 低精度 | - * | no-contact | 不可信,传感器失去连接 | - * | unreliable | 不可信,原因未知 | - * | unknow ${value} | 未知的精度枚举值,即该 Android 系统此时返回的表示精度的 value 不是一个标准的精度枚举值 | */ - onCompassChange( - /** 罗盘数据变化事件的监听函数 */ - listener: OnCompassChangeCallback - ): void - /** [wx.onCopyUrl(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.onCopyUrl.html) - * - * 需要基础库: `2.14.3` - * - * 在插件中使用:不支持 - * - * 监听用户点击右上角菜单的「复制链接」按钮时触发的事件。本接口为 Beta 版本,暂只在 Android 平台支持。 */ - onCopyUrl( - /** 用户点击右上角菜单的「复制链接」按钮时触发的事件的监听函数 */ - listener: OnCopyUrlCallback - ): void - /** [wx.onDeviceMotionChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.onDeviceMotionChange.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:不支持 - * - * 监听设备方向变化事件。频率根据 [wx.startDeviceMotionListening()](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.startDeviceMotionListening.html) 的 interval 参数。可以使用 [wx.stopDeviceMotionListening()](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.stopDeviceMotionListening.html) 停止监听。 */ - onDeviceMotionChange( - /** 设备方向变化事件的监听函数 */ - listener: OnDeviceMotionChangeCallback - ): void - /** [wx.onError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onError.html) - * - * 需要基础库: `2.1.2` - * - * 在插件中使用:不支持 - * - * 监听小程序错误事件。如脚本错误或 API 调用报错等。该事件与 [`App.onError`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onerrorstring-error) 的回调时机与参数一致。 */ - onError( - /** 小程序错误事件的监听函数 */ - listener: WxOnErrorCallback - ): void - /** [wx.onGetWifiList(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.onGetWifiList.html) - * - * 需要基础库: `1.6.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 监听获取到 Wi-Fi 列表数据事件 */ - onGetWifiList( - /** 获取到 Wi-Fi 列表数据事件的监听函数 */ - listener: OnGetWifiListCallback - ): void - /** [wx.onGyroscopeChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.onGyroscopeChange.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 监听陀螺仪数据变化事件。频率根据 [wx.startGyroscope()](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.startGyroscope.html) 的 interval 参数。可以使用 [wx.stopGyroscope()](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.stopGyroscope.html) 停止监听。 */ - onGyroscopeChange( - /** 陀螺仪数据变化事件的监听函数 */ - listener: OnGyroscopeChangeCallback - ): void - /** [wx.onHCEMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.onHCEMessage.html) - * - * 需要基础库: `1.7.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 监听接收 NFC 设备消息事件。仅能注册一个监听 */ - onHCEMessage( - /** 接收 NFC 设备消息事件的监听函数 */ - listener: OnHCEMessageCallback - ): void - /** [wx.onKeyboardHeightChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/keyboard/wx.onKeyboardHeightChange.html) -* -* 需要基础库: `2.7.0` -* -* 在插件中使用:不支持 -* -* 监听键盘高度变化事件 -* -* **示例代码** -* -* ```js -wx.onKeyboardHeightChange(res => { - console.log(res.height) -}) -``` */ - onKeyboardHeightChange( - /** 键盘高度变化事件的监听函数 */ - listener: OnKeyboardHeightChangeCallback - ): void - /** [wx.onLazyLoadError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onLazyLoadError.html) - * - * 需要基础库: `2.24.3` - * - * 在插件中使用:不支持 - * - * 监听小程序异步组件加载失败事件。 - * - * **注意** - * - * - 加载异步组件通常需要下载分包,若分包下载超时,则会触发 errMsg 为 "loadSubpackage: timeout" 的回调,默认超时等待时间为 5 秒。 - * - 可以通过第二个参数指定超时时间(单位:ms),该设置全局有效,多次指定超时时间则覆盖前面。 - * - 分包确认下载失败时,会再次触发 errMsg 为 "loadSubpackage: fail" 的回调。 - * - 若在页面中使用该接口进行监听,请确保在必要时手动调用 offLazyLoadError 取消监听,以避免非预期的内存泄漏。 */ - onLazyLoadError( - /** 小程序异步组件加载失败事件的监听函数 */ - listener: OnLazyLoadErrorCallback - ): void - /** [wx.onLocalServiceDiscoveryStop(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.onLocalServiceDiscoveryStop.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 监听 mDNS 服务停止搜索的事件 */ - onLocalServiceDiscoveryStop( - /** mDNS 服务停止搜索的事件的监听函数 */ - listener: OnLocalServiceDiscoveryStopCallback - ): void - /** [wx.onLocalServiceFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.onLocalServiceFound.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 监听 mDNS 服务发现的事件 */ - onLocalServiceFound( - /** mDNS 服务发现的事件的监听函数 */ - listener: OnLocalServiceFoundCallback - ): void - /** [wx.onLocalServiceLost(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.onLocalServiceLost.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 监听 mDNS 服务离开的事件 */ - onLocalServiceLost( - /** mDNS 服务离开的事件的监听函数 */ - listener: OnLocalServiceLostCallback - ): void - /** [wx.onLocalServiceResolveFail(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.onLocalServiceResolveFail.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 监听 mDNS 服务解析失败的事件 */ - onLocalServiceResolveFail( - /** mDNS 服务解析失败的事件的监听函数 */ - listener: OnLocalServiceResolveFailCallback - ): void - /** [wx.onLocationChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChange.html) -* -* 需要基础库: `2.8.1` -* -* 在插件中使用:不支持 -* -* 监听实时地理位置变化事件,需结合 [wx.startLocationUpdateBackground](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdateBackground.html)、[wx.startLocationUpdate](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdate.html)使用。 -* -* ## 使用方法 -* 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) -* -* ## 申请开通 -* 暂只针对如下类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。 -* 接口权限申请入口将于2022年3月11日开始内测,于3月31日全量上线。并从4月18日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 -* -* ### 国内主体开放类目 -* -* | 一级类目/主体类型 | 二级类目 | 应用场景 | -* | -------------- | -------| -------- | -* | 电商平台 | / | 售卖商品线下发货、收货、送货服务 | -* | 商家自营 | / | 提供售卖商品线下发货、收货、送货服务、线下商超导览、导航服务 | -* | 医疗服务 | 公立医疗机构、三级私立医疗机构、其他私立医疗机构、就医服务、其他医学健康服务、药品(非处方药)销售、非处方药销售平台、医疗器械生产企业、医疗器械自营、医疗器械经营销售平台、互联网医院血液、干细胞服务、临床试验 | 1、实际物品/药品接收服务 2、基于地理位置取号并现场报到、附近医院导航等服务 | -* | 交通服务 | / | 代驾服务、租车网点导航等相关服务 | -* | 生活服务 | / | 上门服务作业等线下场景 | -* | 物流服务 | 收件/派件、查件、邮政、装卸搬运、快递柜、货物运输 | 快递/货物收发服务 | -* | 餐饮服务 | 点餐平台、外卖平台 | 线下送餐服务 | -* | 工具 | 天气、信息查询 | 与地理位置相关的服务,比如潮汐查询、海拔查询、天气查询等 | -* | 金融 | 保险 | 提供线下网点预约、基于地理位置取号并现场报到、附近网点导航等服务 | -* | 旅游 | 景区服务 | 提供景区导航、导览服务 | -* | 政务民生 | / | 提供政务单位相关业务 | -* | 政府主体帐号 | / | 提供政务单位相关业务 | -* -* ### 海外主体开放类目 -* | 一级类目/主体类型 | 二级类目 | 应用场景 | -* | -------------- | -------| -------- | -* | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | -* | 快递业与邮政 | / | 快递/货物收发服务 | -* | 餐饮 | / | 线下送餐服务 | -* | 电商平台 | / | 售卖商品线下发货、线下收货服务 | -* | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | -* | 跨境电商 | / | 提供售卖商品线下发货、收货服务、线下商超导览、导航服务 | -* | 本地服务 | 服装/鞋/箱包、玩具、家电/数码/手机、美妆/洗护、珠宝/饰品/眼镜/钟表、运动/户外/乐器、鲜花/园艺/工艺品、家居/家饰/家纺、办公/文具、机械/电子器件、酒、食品、百货/超市/便利店、宠物食品/用品 | 提供售卖商品线下发货、线下收货服务、线下商超导览、导航服务 | -* | 生活服务 | 家政、外送 | 上门服务作业等线下场景 | -* -* **示例代码** -* -* ```js - const _locationChangeFn = function(res) { - console.log('location change', res) - } - wx.onLocationChange(_locationChangeFn) - wx.offLocationChange(_locationChangeFn) -``` */ - onLocationChange( - /** 实时地理位置变化事件的监听函数 */ - listener: OnLocationChangeCallback - ): void - /** [wx.onLocationChangeError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChangeError.html) - * - * 需要基础库: `2.19.5` - * - * 在插件中使用:不支持 - * - * 监听持续定位接口返回失败时触发。 */ - onLocationChangeError( - /** 的监听函数 */ - listener: OnLocationChangeErrorCallback - ): void - /** [wx.onMemoryWarning(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/memory/wx.onMemoryWarning.html) - * - * 需要基础库: `2.0.2` - * - * 在插件中使用:不支持 - * - * 监听内存不足告警事件。 - * - * 当 iOS/Android 向小程序进程发出内存警告时,触发该事件。触发该事件不意味小程序被杀,大部分情况下仅仅是告警,开发者可在收到通知后回收一些不必要资源避免进一步加剧内存紧张。 - * - * **示例代码** - * - * ```js - * wx.onMemoryWarning(function () { - * console.log('onMemoryWarningReceive') - * }) - * `` */ - onMemoryWarning( - /** 内存不足告警事件的监听函数 */ - listener: OnMemoryWarningCallback - ): void - /** [wx.onNetworkStatusChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.onNetworkStatusChange.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:支持 -* -* 监听网络状态变化事件 -* -* **示例代码** -* -* ```js -wx.onNetworkStatusChange(function (res) { - console.log(res.isConnected) - console.log(res.networkType) -}) -``` */ - onNetworkStatusChange( - /** 网络状态变化事件的监听函数 */ - listener: OnNetworkStatusChangeCallback - ): void - /** [wx.onNetworkWeakChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/network/wx.onNetworkWeakChange.html) -* -* 需要基础库: `2.21.0` -* -* 在插件中使用:不支持 -* -* 监听弱网状态变化事件 -* -* **示例代码** -* -* ```js -wx.onNetworkWeakChange(function (res) { - console.log(res.weakNet) - console.log(res.networkType) -}) -// 取消监听 -wx.offNetworkWeakChange() -``` */ - onNetworkWeakChange( - /** 弱网状态变化事件的监听函数 */ - listener: OnNetworkWeakChangeCallback - ): void - /** [wx.onPageNotFound(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onPageNotFound.html) - * - * 需要基础库: `2.1.2` - * - * 在插件中使用:不支持 - * - * 监听小程序要打开的页面不存在事件。该事件与 [`App.onPageNotFound`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onpagenotfoundobject-object) 的回调时机一致。 - * - * **注意** - * - * - 开发者可以在回调中进行页面重定向,但必须在回调中**同步**处理,异步处理(例如 `setTimeout` 异步执行)无效。 - * - 若开发者没有调用 [wx.onPageNotFound](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onPageNotFound.html) 绑定监听,也没有声明 `App.onPageNotFound`,当跳转页面不存在时,将推入微信客户端原生的页面不存在提示页面。 - * - 如果回调中又重定向到另一个不存在的页面,将推入微信客户端原生的页面不存在提示页面,并且不再第二次回调。 */ - onPageNotFound( - /** 小程序要打开的页面不存在事件的监听函数 */ - listener: OnPageNotFoundCallback - ): void - /** [wx.onScreenRecordingStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.onScreenRecordingStateChanged.html) - * - * 需要基础库: `2.24.0` - * - * 在插件中使用:不支持 - * - * 监听用户录屏事件。 */ - onScreenRecordingStateChanged( - /** 用户录屏事件的监听函数 */ - listener: OnScreenRecordingStateChangedCallback - ): void - /** [wx.onSocketClose(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketClose.html) - * - * 在插件中使用:不支持 - * - * @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** - * - * 监听 WebSocket 连接关闭事件。 */ - onSocketClose( - /** WebSocket 连接关闭事件的监听函数 */ - listener: OnSocketCloseCallback - ): void - /** [wx.onSocketError(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketError.html) - * - * 在插件中使用:不支持 - * - * @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** - * - * 监听 WebSocket 错误事件。 */ - onSocketError( - /** WebSocket 错误事件的监听函数 */ - listener: OnSocketErrorCallback - ): void - /** [wx.onSocketMessage(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketMessage.html) - * - * 在插件中使用:不支持 - * - * @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** - * - * 监听 WebSocket 接受到服务器的消息事件。 */ - onSocketMessage( - /** WebSocket 接受到服务器的消息事件的监听函数 */ - listener: OnSocketMessageCallback - ): void - /** [wx.onSocketOpen(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.onSocketOpen.html) - * - * 在插件中使用:不支持 - * - * @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** - * - * 监听 WebSocket 连接打开事件。 */ - onSocketOpen( - /** WebSocket 连接打开事件的监听函数 */ - listener: OnSocketOpenCallback - ): void - /** [wx.onThemeChange(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onThemeChange.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 监听系统主题改变事件。该事件与 [`App.onThemeChange`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onThemeChange-Object-object) 的回调时机一致。 - * - * **注意** - * - * - 只有在全局配置"darkmode": true时才会触发此事件。 */ - onThemeChange( - /** 系统主题改变事件的监听函数 */ - listener: OnThemeChangeCallback - ): void - /** [wx.onUnhandledRejection(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html) - * - * 需要基础库: `2.10.0` - * - * 在插件中使用:不支持 - * - * 监听未处理的 Promise 拒绝事件。该事件与 [`App.onUnhandledRejection`](https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onUnhandledRejection-Object-object) 的回调时机与参数一致。 - * - * **注意** - * - * - 所有的 unhandledRejection 都可以被这一监听捕获,但只有 Error 类型的才会在小程序后台触发报警。 */ - onUnhandledRejection( - /** 未处理的 Promise 拒绝事件的监听函数 */ - listener: OnUnhandledRejectionCallback - ): void - /** [wx.onUserCaptureScreen(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.onUserCaptureScreen.html) -* -* 需要基础库: `1.4.0` -* -* 在插件中使用:不支持 -* -* 监听用户主动截屏事件。用户使用系统截屏按键截屏时触发,只能注册一个监听 -* -* **示例代码** -* -* ```js -wx.onUserCaptureScreen(function (res) { - console.log('用户截屏了') -}) -``` */ - onUserCaptureScreen( - /** 用户主动截屏事件的监听函数 */ - listener: OnUserCaptureScreenCallback - ): void - /** [wx.onVoIPChatInterrupted(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPChatInterrupted.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 监听被动断开实时语音通话事件。包括小游戏切入后端时断开 */ - onVoIPChatInterrupted( - /** 被动断开实时语音通话事件的监听函数 */ - listener: OnVoIPChatInterruptedCallback - ): void - /** [wx.onVoIPChatMembersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPChatMembersChanged.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 监听实时语音通话成员在线状态变化事件。有成员加入/退出通话时触发回调 */ - onVoIPChatMembersChanged( - /** 实时语音通话成员在线状态变化事件的监听函数 */ - listener: OnVoIPChatMembersChangedCallback - ): void - /** [wx.onVoIPChatSpeakersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPChatSpeakersChanged.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 监听实时语音通话成员通话状态变化事件。有成员开始/停止说话时触发回调 */ - onVoIPChatSpeakersChanged( - /** 实时语音通话成员通话状态变化事件的监听函数 */ - listener: OnVoIPChatSpeakersChangedCallback - ): void - /** [wx.onVoIPChatStateChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPChatStateChanged.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:不支持 - * - * 监听房间状态变化事件。 */ - onVoIPChatStateChanged( - /** 房间状态变化事件的监听函数 */ - listener: OnVoIPChatStateChangedCallback - ): void - /** [wx.onVoIPVideoMembersChanged(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.onVoIPVideoMembersChanged.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:不支持 - * - * 监听实时语音通话成员视频状态变化事件。 */ - onVoIPVideoMembersChanged( - /** 实时语音通话成员视频状态变化事件的监听函数 */ - listener: OnVoIPVideoMembersChangedCallback - ): void - /** [wx.onWifiConnected(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.onWifiConnected.html) - * - * 需要基础库: `1.6.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 监听连接上 Wi-Fi 的事件 */ - onWifiConnected( - /** 连接上 Wi-Fi 的事件的监听函数 */ - listener: OnWifiConnectedCallback - ): void - /** [wx.onWifiConnectedWithPartialInfo(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.onWifiConnectedWithPartialInfo.html) - * - * 需要基础库: `2.22.0` - * - * 在插件中使用:需要基础库 `2.22.1` - * - * 监听连接上 Wi-Fi 的事件 */ - onWifiConnectedWithPartialInfo( - /** 连接上 Wi-Fi 的事件的监听函数 */ - listener: OnWifiConnectedWithPartialInfoCallback - ): void - /** [wx.onWindowResize(function listener)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/window/wx.onWindowResize.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:不支持 - * - * 监听窗口尺寸变化事件 */ - onWindowResize( - /** 窗口尺寸变化事件的监听函数 */ - listener: OnWindowResizeCallback - ): void - /** [wx.openAppAuthorizeSetting(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.openAppAuthorizeSetting.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.21.3` -* -* 跳转系统微信授权管理页 -* -* **示例代码** -* -* ```js -wx.openAppAuthorizeSetting({ - success (res) { - console.log(res) - } -}) -``` */ - openAppAuthorizeSetting< - T extends OpenAppAuthorizeSettingOption = OpenAppAuthorizeSettingOption - >( - option?: T - ): PromisifySuccessResult<T, OpenAppAuthorizeSettingOption> - /** [wx.openBluetoothAdapter(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 初始化蓝牙模块。iOS 上开启主机/从机(外围设备)模式时需分别调用一次,并指定对应的 `mode`。 -* -* **object.fail 回调函数返回的 state 参数(仅 iOS)** -* -* | 状态码 | 说明 | -* | ------ | ------ | -* | 0 | 未知 | -* | 1 | 重置中 | -* | 2 | 不支持 | -* | 3 | 未授权 | -* | 4 | 未开启 | -* -* **注意** -* -* - 其他蓝牙相关 API 必须在 [wx.openBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html) 调用之后使用。否则 API 会返回错误(errCode=10000)。 -* - 在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,调用 [wx.openBluetoothAdapter](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html) 会返回错误(errCode=10001),表示手机蓝牙功能不可用。此时小程序蓝牙模块已经初始化完成,可通过 [wx.onBluetoothAdapterStateChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.onBluetoothAdapterStateChange.html) 监听手机蓝牙状态的改变,也可以调用蓝牙模块的所有API。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.openBluetoothAdapter({ - success (res) { - console.log(res) - } -}) -``` */ - openBluetoothAdapter< - T extends OpenBluetoothAdapterOption = OpenBluetoothAdapterOption - >( - option?: T - ): PromisifySuccessResult<T, OpenBluetoothAdapterOption> - /** [wx.openCard(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/card/wx.openCard.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:不支持 -* -* 查看微信卡包中的卡券。只有通过 [认证](https://developers.weixin.qq.com/miniprogram/product/renzheng.html) 的小程序或文化互动类目的小游戏才能使用。更多文档请参考 [微信卡券接口文档](https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=1490190158&version=1&lang=zh_CN&platform=2)。 -* -* **示例代码** -* -* ```js -wx.openCard({ - cardList: [{ - cardId: '', - code: '' - }, { - cardId: '', - code: '' - }], - success (res) { } -}) -``` */ - openCard<T extends OpenCardOption = OpenCardOption>( - option: T - ): PromisifySuccessResult<T, OpenCardOption> - /** [wx.openChannelsActivity(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.openChannelsActivity.html) - * - * 需要基础库: `2.19.2` - * - * 在插件中使用:不支持 - * - * 打开视频号视频 */ - openChannelsActivity(option: OpenChannelsActivityOption): void - /** [wx.openChannelsEvent(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.openChannelsEvent.html) - * - * 需要基础库: `2.21.0` - * - * 在插件中使用:不支持 - * - * 打开视频号活动页 */ - openChannelsEvent(option: OpenChannelsEventOption): void - /** [wx.openChannelsLive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.openChannelsLive.html) - * - * 需要基础库: `2.15.0` - * - * 在插件中使用:不支持 - * - * 打开视频号直播 */ - openChannelsLive(option: OpenChannelsLiveOption): void - /** [wx.openChannelsUserProfile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.openChannelsUserProfile.html) - * - * 需要基础库: `2.21.2` - * - * 在插件中使用:不支持 - * - * 打开视频号主页 */ - openChannelsUserProfile(option: OpenChannelsUserProfileOption): void - /** [wx.openCustomerServiceChat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/service-chat/wx.openCustomerServiceChat.html) -* -* 需要基础库: `2.19.0` -* -* 在插件中使用:不支持 -* -* 打开微信客服,页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用。了解更多信息,可以参考[微信客服介绍](https://work.weixin.qq.com/kf/)。 -* -* **示例代码** -* -* ```js -wx.openCustomerServiceChat({ - extInfo: {url: ''}, - corpId: '', - success(res) {} -}) -``` */ - openCustomerServiceChat(option: OpenCustomerServiceChatOption): void - /** [wx.openDocument(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.openDocument.html) - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 新开页面打开文档。微信客户端 `7.0.12` 版本前默认显示右上角菜单按钮,之后的版本默认不显示,需主动传入 `showMenu`。 */ - openDocument<T extends OpenDocumentOption = OpenDocumentOption>( - option: T - ): PromisifySuccessResult<T, OpenDocumentOption> - /** [wx.openEmbeddedMiniProgram(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.openEmbeddedMiniProgram.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:不支持 - * - * 打开半屏小程序。接入指引请参考 [半屏小程序能力](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/openEmbeddedMiniProgram.html)。 */ - openEmbeddedMiniProgram< - T extends OpenEmbeddedMiniProgramOption = OpenEmbeddedMiniProgramOption - >( - option: T - ): PromisifySuccessResult<T, OpenEmbeddedMiniProgramOption> - /** [wx.openLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.openLocation.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 使用微信内置地图查看位置 -* -* **示例代码** -* -* ```js - wx.getLocation({ - type: 'gcj02', //返回可以用于wx.openLocation的经纬度 - success (res) { - const latitude = res.latitude - const longitude = res.longitude - wx.openLocation({ - latitude, - longitude, - scale: 18 - }) - } -}) - ``` */ - openLocation<T extends OpenLocationOption = OpenLocationOption>( - option: T - ): PromisifySuccessResult<T, OpenLocationOption> - /** [wx.openSetting(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.openSetting.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.10.3` -* -* 调起客户端小程序设置界面,返回用户设置的操作结果。**设置界面只会出现小程序已经向用户请求过的[权限](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html)**。 -* -* **** -* -* - 注意:[2.3.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 版本开始,用户发生点击行为后,才可以跳转打开设置页,管理授权信息。[详情](https://developers.weixin.qq.com/community/develop/doc/000cea2305cc5047af5733de751008) -* -* **示例代码** -* -* ```js -wx.openSetting({ - success (res) { - console.log(res.authSetting) - // res.authSetting = { - // "scope.userInfo": true, - // "scope.userLocation": true - // } - } -}) -``` */ - openSetting<T extends OpenSettingOption = OpenSettingOption>( - option?: T - ): PromisifySuccessResult<T, OpenSettingOption> - /** [wx.openSystemBluetoothSetting(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.openSystemBluetoothSetting.html) -* -* 需要基础库: `2.20.1` -* -* 在插件中使用:需要基础库 `2.21.3` -* -* 跳转系统蓝牙设置页。仅支持安卓。 -* -* **示例代码** -* -* ```js -wx.openSystemBluetoothSetting({ - success (res) { - console.log(res) - } -}) -``` */ - openSystemBluetoothSetting< - T extends OpenSystemBluetoothSettingOption = OpenSystemBluetoothSettingOption - >( - option?: T - ): PromisifySuccessResult<T, OpenSystemBluetoothSettingOption> - /** [wx.openVideoEditor(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.openVideoEditor.html) - * - * 需要基础库: `2.12.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 打开视频编辑器 */ - openVideoEditor(option: OpenVideoEditorOption): void - /** [wx.pageScrollTo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/wx.pageScrollTo.html) -* -* 需要基础库: `1.4.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 将页面滚动到目标位置,支持选择器和滚动距离两种方式定位 -* -* **selector 语法** -* -* selector类似于 CSS 的选择器,但仅支持下列语法。 -* -* + ID选择器:#the-id -* + class选择器(可以连续指定多个):.a-class.another-class -* + 子元素选择器:.the-parent > .the-child -* + 后代选择器:.the-ancestor .the-descendant -* + 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant -* + 多选择器的并集:#a-node, .some-other-nodes -* -* **示例代码** -* -* ```js -wx.pageScrollTo({ - scrollTop: 0, - duration: 300 -}) -``` */ - pageScrollTo<T extends PageScrollToOption = PageScrollToOption>( - option: T - ): PromisifySuccessResult<T, PageScrollToOption> - /** [wx.pauseBackgroundAudio(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.pauseBackgroundAudio.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 -* -* 暂停播放音乐。 -* -* **示例代码** -* -* ```js -wx.pauseBackgroundAudio() -``` */ - pauseBackgroundAudio< - T extends PauseBackgroundAudioOption = PauseBackgroundAudioOption - >( - option?: T - ): PromisifySuccessResult<T, PauseBackgroundAudioOption> - /** [wx.pauseVoice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.pauseVoice.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 -* -* 暂停正在播放的语音。再次调用 [wx.playVoice](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.playVoice.html) 播放同一个文件时,会从暂停处开始播放。如果想从头开始播放,需要先调用 [wx.stopVoice](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.stopVoice.html)。 -* -* **示例代码** -* -* ```js -wx.startRecord({ - success (res) { - const tempFilePath = res.tempFilePath - wx.playVoice({ - filePath: tempFilePath - }) - - setTimeout(() => { wx.pauseVoice() }, 5000) - } -}) -``` */ - pauseVoice<T extends PauseVoiceOption = PauseVoiceOption>( - option?: T - ): PromisifySuccessResult<T, PauseVoiceOption> - /** [wx.playBackgroundAudio(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.playBackgroundAudio.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 -* -* 使用后台播放器播放音乐。对于微信客户端来说,只能同时有一个后台音乐在播放。当用户离开小程序后,音乐将暂停播放;当用户在其他小程序占用了音乐播放器,原有小程序内的音乐将停止播放。 -* -* **示例代码** -* -* ```js -wx.playBackgroundAudio({ - dataUrl: '', - title: '', - coverImgUrl: '' -}) -``` */ - playBackgroundAudio< - T extends PlayBackgroundAudioOption = PlayBackgroundAudioOption - >( - option: T - ): PromisifySuccessResult<T, PlayBackgroundAudioOption> - /** [wx.playVoice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.playVoice.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 -* -* 开始播放语音。同时只允许一个语音文件正在播放,如果前一个语音文件还没播放完,将中断前一个语音播放。 -* -* **示例代码** -* -* ```js -wx.startRecord({ - success (res) { - const tempFilePath = res.tempFilePath - wx.playVoice({ - filePath: tempFilePath, - complete () { } - }) - } -}) -``` */ - playVoice<T extends PlayVoiceOption = PlayVoiceOption>( - option: T - ): PromisifySuccessResult<T, PlayVoiceOption> - /** [wx.pluginLogin(Object args)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.pluginLogin.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:需要基础库 `2.20.1` - * - * __该接口仅在小程序插件中可调用__,调用接口获得插件用户标志凭证(code)。插件可以此凭证换取用于识别用户的标识 openpid。用户不同、宿主小程序不同或插件不同的情况下,该标识均不相同,即当且仅当同一个用户在同一个宿主小程序中使用同一个插件时,openpid 才会相同。 */ - pluginLogin(args?: PluginLoginOption): void - /** [wx.preloadAssets(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.preloadAssets.html) -* -* 需要基础库: `2.22.1` -* -* 在插件中使用:不支持 -* -* 为视图层预加载媒体资源文件, 目前支持:font,image -* -* **示例代码** -* -* ```js -wx.preloadAssets({ - data: [ - { - type: 'image', - src: imgUrl, - }, - ], - success(resp) { - console.log('preloadAssets success', resp) - }, - fail(err) { - console.log('preloadAssets fail', err) - }, -}) -``` -* -* **** -* -* - 开发过程中,可在开发者工具network面板查看预加载情况。 */ - preloadAssets(option: PreloadAssetsOption): void - /** [wx.preloadSkylineView(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.preloadSkylineView.html) - * - * 需要基础库: `2.24.7` - * - * 在插件中使用:需要基础库 `2.24.7` - * - * 预加载下个页面所需要的 [Skyline](https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/introduction.html) 运行环境。 */ - preloadSkylineView(option?: PreloadSkylineViewOption): void - /** [wx.preloadWebview(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.preloadWebview.html) - * - * 需要基础库: `2.15.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 预加载下个页面的 WebView。参见[预加载下个页面的时机](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips/runtime_nav.html#_2-4-控制预加载下个页面的时机) */ - preloadWebview(option?: PreloadWebviewOption): void - /** [wx.previewImage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.previewImage.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 在新页面中全屏预览图片。预览的过程中用户可以进行保存图片、发送给朋友等操作。 -* -* **支持长按识别的码** -* -* | 类型 | 说明 | 最低版本 | -* |------|------| -------| -* | 小程序码 | | -* | 微信个人码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | -* | 企业微信个人码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | -* | 普通群码 | 指仅包含微信用户的群,不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | -* | 互通群码 | 指既有微信用户也有企业微信用户的群,不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | -* | 公众号二维码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | -* -* **示例代码** -* -* ```js -wx.previewImage({ - current: '', // 当前显示图片的http链接 - urls: [] // 需要预览的图片http链接列表 -}) -``` */ - previewImage<T extends PreviewImageOption = PreviewImageOption>( - option: T - ): PromisifySuccessResult<T, PreviewImageOption> - /** [wx.previewMedia(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.previewMedia.html) - * - * 需要基础库: `2.12.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 预览图片和视频。 - * - * **支持长按识别的码** - * - * | 类型 | 说明 | 最低版本 | - * |------|------| -------| - * | 小程序码 | | - * | 微信个人码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | - * | 企业微信个人码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | - * | 普通群码 | 指仅包含微信用户的群,不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | - * | 互通群码 | 指既有微信用户也有企业微信用户的群,不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | - * | 公众号二维码 | 不支持小游戏 | [2.18.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) | */ - previewMedia<T extends PreviewMediaOption = PreviewMediaOption>( - option: T - ): PromisifySuccessResult<T, PreviewMediaOption> - /** [wx.reLaunch(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.reLaunch.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.3.1` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 关闭所有页面,打开到应用内的某个页面 -* -* **示例代码** -* -* ```js -wx.reLaunch({ - url: 'test?id=1' -}) -``` -* -* ```html -* // test -* Page({ -* onLoad (option) { -* console.log(option.query) -* } -* }) -* ``` */ - reLaunch<T extends ReLaunchOption = ReLaunchOption>( - option: T - ): PromisifySuccessResult<T, ReLaunchOption> - /** [wx.readBLECharacteristicValue(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.readBLECharacteristicValue.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 读取蓝牙低功耗设备特征值的二进制数据。注意:必须设备的特征支持 read 才可以成功调用。 -* -* **注意** -* -* - 并行调用多次会存在读失败的可能性。 -* - 接口读取到的信息需要在 [wx.onBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.onBLECharacteristicValueChange.html) 方法注册的回调中获取。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -// 必须在这里的回调才能获取 -wx.onBLECharacteristicValueChange(function(characteristic) { - console.log('characteristic value comed:', characteristic) -}) - -wx.readBLECharacteristicValue({ - // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 - deviceId, - // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 - serviceId, - // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 - characteristicId, - success (res) { - console.log('readBLECharacteristicValue:', res.errCode) - } -}) -``` */ - readBLECharacteristicValue< - T extends ReadBLECharacteristicValueOption = ReadBLECharacteristicValueOption - >( - option: T - ): PromisifySuccessResult<T, ReadBLECharacteristicValueOption> - /** [wx.redirectTo(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.redirectTo.html) -* -* 在插件中使用:需要基础库 `2.2.2` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。 -* -* **示例代码** -* -* ```js -wx.redirectTo({ - url: 'test?id=1' -}) -``` */ - redirectTo<T extends RedirectToOption = RedirectToOption>( - option: T - ): PromisifySuccessResult<T, RedirectToOption> - /** [wx.removeSavedFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.removeSavedFile.html) -* -* 在插件中使用:不支持 -* -* @warning **该接口已停止维护,推荐使用 [FileSystemManager.removeSavedFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.removeSavedFile.html)** -* -* 删除本地缓存文件。 -* -* **示例代码** -* -* ```js -wx.getSavedFileList({ - success (res) { - if (res.fileList.length > 0){ - wx.removeSavedFile({ - filePath: res.fileList[0].filePath, - complete (res) { - console.log(res) - } - }) - } - } -}) -``` */ - removeSavedFile< - T extends WxRemoveSavedFileOption = WxRemoveSavedFileOption - >( - option: T - ): PromisifySuccessResult<T, WxRemoveSavedFileOption> - /** [wx.removeStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.removeStorage.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 从本地缓存中移除指定 key。 -* -* **示例代码** -* -* ```js -wx.removeStorage({ - key: 'key', - success (res) { - console.log(res) - } -}) -``` -* -* ```js -try { - wx.removeStorageSync('key') -} catch (e) { - // Do something when catch error -} -``` */ - removeStorage<T extends RemoveStorageOption = RemoveStorageOption>( - option: T - ): PromisifySuccessResult<T, RemoveStorageOption> - /** [wx.removeStorageSync(string key)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.removeStorageSync.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* [wx.removeStorage](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.removeStorage.html) 的同步版本 -* -* **示例代码** -* -* ```js -wx.removeStorage({ - key: 'key', - success (res) { - console.log(res) - } -}) -``` -* -* ```js -try { - wx.removeStorageSync('key') -} catch (e) { - // Do something when catch error -} -``` */ - removeStorageSync( - /** 本地缓存中指定的 key */ - key: string - ): void - /** [wx.removeTabBarBadge(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.removeTabBarBadge.html) - * - * 需要基础库: `1.9.0` - * - * 在插件中使用:不支持 - * - * 移除 tabBar 某一项右上角的文本 */ - removeTabBarBadge< - T extends RemoveTabBarBadgeOption = RemoveTabBarBadgeOption - >( - option: T - ): PromisifySuccessResult<T, RemoveTabBarBadgeOption> - /** [wx.reportAnalytics(string eventName, Object data)](https://developers.weixin.qq.com/miniprogram/dev/api/data-analysis/wx.reportAnalytics.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 在插件中使用时,可以被正常调用,但目前不会进行统计展示 -* -* 自定义分析数据上报接口。使用前,需要在小程序管理后台自定义分析中新建事件,配置好事件名与字段。 -* -* **示例代码** -* -* ```js -wx.reportAnalytics('purchase', { - price: 120, - color: 'red' -}) -``` */ - reportAnalytics( - /** 事件名 */ - eventName: string, - /** 上报的自定义数据,key 为配置中的字段名,value 为上报的数据。 */ - data: IAnyObject - ): void - /** [wx.reportEvent(string eventId, object data)](https://developers.weixin.qq.com/miniprogram/dev/api/data-analysis/wx.reportEvent.html) - * - * 需要基础库: `2.14.4` - * - * 在插件中使用:不支持 - * - * 事件上报 */ - reportEvent( - /** 在 mp 实验系统中设置的事件英文名 */ - eventId: string, - /** 可被 JSON.stringify 的对象,将一起上报至系统 */ - data?: IAnyObject - ): void - /** [wx.reportMonitor(string name, number value)](https://developers.weixin.qq.com/miniprogram/dev/api/data-analysis/wx.reportMonitor.html) -* -* 需要基础库: `2.0.1` -* -* 在插件中使用:不支持 -* -* 自定义业务数据监控上报接口。 -* -* **使用说明** -* -* 使用前,需要在「小程序管理后台-运维中心-性能监控-业务数据监控」中新建监控事件,配置监控描述与告警类型。每一个监控事件对应唯一的监控ID,开发者最多可以创建128个监控事件。 -* -* **示例代码** -* -* ```js -wx.reportMonitor('1', 1) -``` */ - reportMonitor( - /** 监控ID,在「小程序管理后台」新建数据指标后获得 */ - name: string, - /** 上报数值,经处理后会在「小程序管理后台」上展示每分钟的上报总量 */ - value: number - ): void - /** [wx.reportPerformance(Number id, Number value, String|Array dimensions)](https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/wx.reportPerformance.html) -* -* 需要基础库: `2.9.2` -* -* 在插件中使用:需要基础库 `2.9.3` -* -* 小程序测速上报。使用前,需要在小程序管理后台配置。 -* -* **示例代码** -* -* ```js -wx.reportPerformance(1101, 680) -wx.reportPerformance(1101, 680, 'custom') -``` */ - reportPerformance( - /** 指标 id */ - id: number, - /** 需要上报的数值 */ - value: number, - /** 自定义维度 (选填) */ - dimensions?: string | any[] - ): void - /** [wx.requestOrderPayment(Object args)](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestOrderPayment.html) - * - * 需要基础库: `2.16.0` - * - * 在插件中使用:不支持 - * - * 仅接入了[自定义版交易组件](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/Introduction2)的小程序需要使用,普通小程序可直接使用 [`wx.requestPayment`](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html)。 - * - * **前置检查** - * - * 接入自定义版交易组件之后,若要发起微信支付,请先查询[需要校验的场景](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/check_scene)。 - * 在需要校验的场景中,发起微信支付时,必须使用该接口,需要按照要求传入相关的[订单信息](https://developers.weixin.qq.com/miniprogram/dev/framework/ministore/minishopopencomponent2/API/order/add_order)进行校验,校验通过后用户才可以完成当前订单的支付,非需要校验的场景则可以按照商家要求自行选择传入订单信息或不传入。 */ - requestOrderPayment< - T extends RequestOrderPaymentOption = RequestOrderPaymentOption - >( - args: T - ): PromisifySuccessResult<T, RequestOrderPaymentOption> - /** [wx.requestPayment(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html) -* -* 在插件中使用:不支持 -* -* 发起微信支付。调用前需在[小程序微信公众平台](https://mp.weixin.qq.com/) -功能-微信支付入口申请接入微信支付。了解更多信息,可以参考 [微信支付开发文档](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/api.shtml): -* - [开发指引](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter2_3.shtml) -* - [下单接口](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_2.shtml) -* - [支付接口](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_12.shtml) -* - 旧版本 (v2) -* - [开发指引](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1) -* - [支付接口](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3) -* -* 如果使用[云开发](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html),则 `wx.requestPayment` 所需参数可以通过云开发微信支付统一下单接口免鉴权获取、并可免证书、免签名的安全调用微信支付服务端接口、及接收异步支付结果回调,详见[云开发微信支付](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/wechatpay/wechatpay.html)。 -* -* **示例代码** -* -* ```js -wx.requestPayment({ - timeStamp: '', - nonceStr: '', - package: '', - signType: 'MD5', - paySign: '', - success (res) { }, - fail (res) { } -}) -``` -* -* 注:如果服务端有使用云开发,可以通过云开发微信支付[统一下单](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.unifiedOrder.html)接口免鉴权获取以上所需所有参数,示例: -* -* ```js -// 云函数代码 -const cloud = require('wx-server-sdk') -cloud.init({ - env: cloud.DYNAMIC_CURRENT_ENV -}) - -exports.main = async (event, context) => { - const res = await cloud.cloudPay.unifiedOrder({ - "body" : "小秋TIT店-超市", - "outTradeNo" : "1217752501201407033233368018", - "spbillCreateIp" : "127.0.0.1", - "subMchId" : "1900009231", - "totalFee" : 1, - "envId": "test-f0b102", - "functionName": "pay_cb" - }) - return res -} - -// 小程序代码 -wx.cloud.callFunction({ - name: '函数名', - data: { - // ... - }, - success: res => { - const payment = res.result.payment - wx.requestPayment({ - ...payment, - success (res) { - console.log('pay success', res) - }, - fail (err) { - console.error('pay fail', err) - } - }) - }, - fail: console.error, -}) -``` */ - requestPayment<T extends RequestPaymentOption = RequestPaymentOption>( - option: T - ): PromisifySuccessResult<T, RequestPaymentOption> - /** [wx.requestPluginPayment(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPluginPayment.html) -* -* 需要基础库: `2.22.1` -* -* 在插件中使用:需要基础库 `2.22.1` -* -* 插件中发起支付。 -* -* **Tip** -* -* 1. `tip`: 小程序与插件绑定在同一个open平台账号上且小程序与插件均为open账号的同主体/关联主体时,调用此接口将直接拉起支付收银台。 -* 1. `tip`: 这个接口本身可以在开发者工具中使用,但功能页的跳转目前不支持在开发者工具中调试,请在真机上测试。 -* 1. `tip`: 跳转支付功能页需要在 `app.json` 中配置 `"functionalPages": true` -* -* **示例代码** -* -* 具体用法及参数说明可参考 [插件支付文档](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages/request-payment.html) -* ```js -wx.requestPluginPayment({ - version: 'release', - fee: 1, - paymentArgs: {}, - currencyType: 'CNY', - success (res) { }, - fail (res) { } -}) -``` */ - requestPluginPayment(option: RequestPluginPaymentOption): void - /** [wx.requestSubscribeDeviceMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeDeviceMessage.html) -* -* 需要基础库: `2.20.0` -* -* 在插件中使用:不支持 -* -* 订阅设备消息接口,调用后弹出授权框,用户同意后会允许开发者给用户发送订阅模版消息。当用户点击“允许”按钮时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。 -* -* **错误码** -* -* | errCode | errMsg | 说明 | -* | ------- | ------------------------------------------------------ | -------------------------------------------------------------- | -* | 10001 | TmplIds can't be empty | tmplIds 为空 | -* | 10004 | Invalid template id | tmplId 参数类型错误 | -* | 20001 | No template data return, verify the template id exist | tmplId 为空 | -* | 20003 | Templates count out of max bounds | tmplId 数量超过上限 | -* | 19720726 | check sn_ticket fail | snTicket 不合法 | -* | 19720727 | sn_ticket expire | snTicket 过期 | -* | 19720728 | err_not_found_tid | tmplId 不存在 | -* | 19720736 | template_id do not match model_id | modelId 类型与 tmplId 类型不符 | -* -* **示例代码** -* -* ```js -wx.requestSubscribeDeviceMessage({ - tmplIds: ['xxxxx'], - sn: 'xxxx', - snTicket: 'xxxxx', - modelId: 'xxx', - success(res) { - console.log(res) - }, - fail(res) { - console.log(res) - } -}) -``` */ - requestSubscribeDeviceMessage< - T extends RequestSubscribeDeviceMessageOption = RequestSubscribeDeviceMessageOption - >( - option: T - ): PromisifySuccessResult<T, RequestSubscribeDeviceMessageOption> - /** [wx.requestSubscribeMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html) -* -* 需要基础库: `2.4.4` -* -* 在插件中使用:不支持 -* -* 调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 [wx.getSetting](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.getSetting.html) 接口可获取用户对相关模板消息的订阅状态。 -* -* ## 注意事项 -* - 一次性模板 id 和永久模板 id 不可同时使用。 -* - 低版本基础库2.4.4~2.8.3 已支持订阅消息接口调用,仅支持传入一个一次性 tmplId / 永久 tmplId。 -* - [2.8.2](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 版本开始,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。 -* - [2.10.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 版本开始,开发版和体验版小程序将禁止使用模板消息 formId。 -* - 一次授权调用里,每个tmplId对应的模板标题不能存在相同的,若出现相同的,只保留一个。 -* - [2.10.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 版本开始,支持订阅语音消息提醒,[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html) -* -* **错误码** -* -* | errCode | errMsg | 说明 | -* | ------- | ------------------------------------------------------ | -------------------------------------------------------------- | -* | 10001 | TmplIds can't be empty | 参数传空了 | -* | 10002 | Request list fail | 网络问题,请求消息列表失败 | -* | 10003 | Request subscribe fail | 网络问题,订阅请求发送失败 | -* | 10004 | Invalid template id | 参数类型错误 | -* | 10005 | Cannot show subscribe message UI | 无法展示 UI,一般是小程序这个时候退后台了导致的 | -* | 20001 | No template data return, verify the template id exist | 没有模板数据,一般是模板 ID 不存在 或者和模板类型不对应 导致的 | -* | 20002 | Templates type must be same | 模板消息类型 既有一次性的又有永久的 | -* | 20003 | Templates count out of max bounds | 模板消息数量超过上限 | -* | 20004 | The main switch is switched off | 用户关闭了主开关,无法进行订阅 | -* | 20005 | This mini program was banned from subscribing messages | 小程序被禁封 | -* | 20013 | Reject DeviceMsg Template | 不允许通过该接口订阅设备消息 | -* -* **示例代码** -* -* ```js -wx.requestSubscribeMessage({ - tmplIds: [''], - success (res) { } -}) -``` */ - requestSubscribeMessage< - T extends RequestSubscribeMessageOption = RequestSubscribeMessageOption - >( - option: T - ): PromisifySuccessResult<T, RequestSubscribeMessageOption> - /** [wx.reserveChannelsLive(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/channels/wx.reserveChannelsLive.html) - * - * 需要基础库: `2.19.0` - * - * 在插件中使用:不支持 - * - * 预约视频号直播 */ - reserveChannelsLive(option: ReserveChannelsLiveOption): void - /** [wx.revokeBufferURL(string url)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.revokeBufferURL.html) - * - * 需要基础库: `2.14.0` - * - * 在插件中使用:不支持 - * - * 根据 URL 销毁存在内存中的数据 */ - revokeBufferURL( - /** 需要销毁的二进制数据 URL */ - url: string - ): void - /** [wx.saveFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.saveFile.html) -* -* 在插件中使用:不支持 -* -* @warning **该接口已停止维护,推荐使用 [FileSystemManager.saveFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.saveFile.html)** -* -* 保存文件到本地。注意:**saveFile 会把临时文件移动,因此调用成功后传入的 tempFilePath 将不可用**。 -* -* **示例代码** -* -* ```js -wx.chooseImage({ - success: function(res) { - const tempFilePaths = res.tempFilePaths - wx.saveFile({ - tempFilePath: tempFilePaths[0], - success (res) { - const savedFilePath = res.savedFilePath - } - }) - } -}) -``` */ - saveFile<T extends WxSaveFileOption = WxSaveFileOption>( - option: T - ): PromisifySuccessResult<T, WxSaveFileOption> - /** [wx.saveFileToDisk(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.saveFileToDisk.html) -* -* 需要基础库: `2.11.0` -* -* 在插件中使用:需要基础库 `2.15.0` -* -* 保存文件系统的文件到用户磁盘,仅在 PC 端支持 -* -* **示例代码** -* -* ```js -wx.saveFileToDisk({ - filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, - success(res) { - console.log(res) - }, - fail(res) { - console.error(res) - } -}) -``` */ - saveFileToDisk(option: SaveFileToDiskOption): void - /** [wx.saveImageToPhotosAlbum(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.saveImageToPhotosAlbum.html) -* -* 需要基础库: `1.2.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 保存图片到系统相册。 -* -* **示例代码** -* -* ```js -wx.saveImageToPhotosAlbum({ - success(res) { } -}) -``` */ - saveImageToPhotosAlbum< - T extends SaveImageToPhotosAlbumOption = SaveImageToPhotosAlbumOption - >( - option: T - ): PromisifySuccessResult<T, SaveImageToPhotosAlbumOption> - /** [wx.saveVideoToPhotosAlbum(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.saveVideoToPhotosAlbum.html) -* -* 需要基础库: `1.2.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 保存视频到系统相册。支持mp4视频格式。 -* -* **示例代码** -* -* ```js -wx.saveVideoToPhotosAlbum({ - filePath: 'wxfile://xxx', - success (res) { - console.log(res.errMsg) - } -}) -``` */ - saveVideoToPhotosAlbum< - T extends SaveVideoToPhotosAlbumOption = SaveVideoToPhotosAlbumOption - >( - option: T - ): PromisifySuccessResult<T, SaveVideoToPhotosAlbumOption> - /** [wx.scanCode(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/scan/wx.scanCode.html) -* -* 需要基础库: `1.0.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 调起客户端扫码界面进行扫码 -* -* **示例代码** -* -* ```js -// 允许从相机和相册扫码 -wx.scanCode({ - success (res) { - console.log(res) - } -}) - -// 只允许从相机扫码 -wx.scanCode({ - onlyFromCamera: true, - success (res) { - console.log(res) - } -}) -``` */ - scanCode<T extends ScanCodeOption = ScanCodeOption>( - option: T - ): PromisifySuccessResult<T, ScanCodeOption> - /** [wx.seekBackgroundAudio(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.seekBackgroundAudio.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 -* -* 控制音乐播放进度。 -* -* **示例代码** -* -* ```js -wx.seekBackgroundAudio({ - position: 30 -}) -``` */ - seekBackgroundAudio< - T extends SeekBackgroundAudioOption = SeekBackgroundAudioOption - >( - option: T - ): PromisifySuccessResult<T, SeekBackgroundAudioOption> - /** [wx.sendHCEMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.sendHCEMessage.html) -* -* 需要基础库: `1.7.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 发送 NFC 消息。仅在安卓系统下有效。 -* -* **示例代码** -* -* ```js -const buffer = new ArrayBuffer(1) -const dataView = new DataView(buffer) -dataView.setUint8(0, 0) - -wx.startHCE({ - success (res) { - wx.onHCEMessage(function(res) { - if (res.messageType === 1) { - wx.sendHCEMessage({data: buffer}) - } - }) - } -}) -``` */ - sendHCEMessage<T extends SendHCEMessageOption = SendHCEMessageOption>( - option: T - ): PromisifySuccessResult<T, SendHCEMessageOption> - /** [wx.sendSms(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/sms/wx.sendSms.html) - * - * 需要基础库: `2.25.0` - * - * 在插件中使用:不支持 - * - * 拉起手机发送短信界面。 */ - sendSms(option: SendSmsOption): void - /** [wx.sendSocketMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.sendSocketMessage.html) -* -* 在插件中使用:不支持 -* -* @warning **推荐使用 [SocketTask](https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/SocketTask.html) 的方式去管理 webSocket 链接,每一条链路的生命周期都更加可控,同时存在多个 webSocket 的链接的情况下使用 wx 前缀的方法可能会带来一些和预期不一致的情况。** -* -* 通过 WebSocket 连接发送数据。需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。 -* -* **示例代码** -* -* ```js -let socketOpen = false -let socketMsgQueue = [] -wx.connectSocket({ - url: 'test.php' -}) - -wx.onSocketOpen(function(res) { - socketOpen = true - for (let i = 0; i < socketMsgQueue.length; i++){ - sendSocketMessage(socketMsgQueue[i]) - } - socketMsgQueue = [] -}) - -function sendSocketMessage(msg) { - if (socketOpen) { - wx.sendSocketMessage({ - data:msg - }) - } else { - socketMsgQueue.push(msg) - } -} -``` */ - sendSocketMessage< - T extends SendSocketMessageOption = SendSocketMessageOption - >( - option: T - ): PromisifySuccessResult<T, SendSocketMessageOption> - /** [wx.setBLEMTU(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.setBLEMTU.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:需要基础库 `2.11.0` - * - * 协商设置蓝牙低功耗的最大传输单元 (Maximum Transmission Unit, MTU)。需在 [wx.createBLEConnection](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.createBLEConnection.html) 调用成功后调用。仅安卓系统 5.1 以上版本有效,iOS 因系统限制不支持。 */ - setBLEMTU<T extends SetBLEMTUOption = SetBLEMTUOption>( - option: T - ): PromisifySuccessResult<T, SetBLEMTUOption> - /** [wx.setBackgroundColor(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/background/wx.setBackgroundColor.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:需要基础库 `2.4.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 动态设置窗口的背景色 -* -* **示例代码** -* -* ```js -wx.setBackgroundColor({ - backgroundColor: '#ffffff', // 窗口的背景色为白色 -}) - -wx.setBackgroundColor({ - backgroundColorTop: '#ffffff', // 顶部窗口的背景色为白色 - backgroundColorBottom: '#ffffff', // 底部窗口的背景色为白色 -}) -``` */ - setBackgroundColor< - T extends SetBackgroundColorOption = SetBackgroundColorOption - >( - option: T - ): PromisifySuccessResult<T, SetBackgroundColorOption> - /** [wx.setBackgroundFetchToken(object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/background-fetch/wx.setBackgroundFetchToken.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 设置自定义登录态,在周期性拉取数据时带上,便于第三方服务器验证请求合法性 */ - setBackgroundFetchToken< - T extends SetBackgroundFetchTokenOption = SetBackgroundFetchTokenOption - >( - option: T - ): PromisifySuccessResult<T, SetBackgroundFetchTokenOption> - /** [wx.setBackgroundTextStyle(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/background/wx.setBackgroundTextStyle.html) -* -* 需要基础库: `2.1.0` -* -* 在插件中使用:需要基础库 `2.4.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 动态设置下拉背景字体、loading 图的样式 -* -* **示例代码** -* -* ```js -wx.setBackgroundTextStyle({ - textStyle: 'dark' // 下拉背景字体、loading 图的样式为dark -}) -``` */ - setBackgroundTextStyle< - T extends SetBackgroundTextStyleOption = SetBackgroundTextStyleOption - >( - option: T - ): PromisifySuccessResult<T, SetBackgroundTextStyleOption> - /** [wx.setClipboardData(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/clipboard/wx.setClipboardData.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 设置系统剪贴板的内容。调用成功后,会弹出 toast 提示"内容已复制",持续 1.5s -* -* **示例代码** -* -* ```js -wx.setClipboardData({ - data: 'data', - success (res) { - wx.getClipboardData({ - success (res) { - console.log(res.data) // data - } - }) - } -}) -``` */ - setClipboardData< - T extends SetClipboardDataOption = SetClipboardDataOption - >( - option: T - ): PromisifySuccessResult<T, SetClipboardDataOption> - /** [wx.setEnable1v1Chat(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.setEnable1v1Chat.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:不支持 - * - * 开启双人通话。设置 `enable` 为 `false` 时,无法接听呼叫。 */ - setEnable1v1Chat(option: SetEnable1v1ChatOption): void - /** [wx.setEnableDebug(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.setEnableDebug.html) -* -* 需要基础库: `1.4.0` -* -* 在插件中使用:不支持 -* -* 设置是否打开调试开关。此开关对正式版也能生效。 -* -* **示例代码** -* -* ```javascript -// 打开调试 -wx.setEnableDebug({ - enableDebug: true -}) - -// 关闭调试 -wx.setEnableDebug({ - enableDebug: false -}) -``` -* -* **Tips** -* -* - 在正式版打开调试还有一种方法,就是先在开发版或体验版打开调试,再切到正式版就能看到vConsole。 */ - setEnableDebug<T extends SetEnableDebugOption = SetEnableDebugOption>( - option: T - ): PromisifySuccessResult<T, SetEnableDebugOption> - /** [wx.setInnerAudioOption(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.setInnerAudioOption.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:需要基础库 `2.10.0` - * - * 设置 [InnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.html) 的播放选项。设置之后对当前小程序全局生效。 - * - * **** - * - * ## 注意事项 - * - 为保证微信整体体验,speakerOn 为 true 时,客户端会忽略 mixWithOthers 参数的内容,强制与其它音频互斥 - * - 不支持在播放音频的过程中切换为扬声器播放,开发者如需切换可以先暂停当前播放的音频并记录下当前暂停的时间点,然后切换后重新从原来暂停的时间点开始播放音频 - * - 目前 wx.setInnerAudioOption 接口不兼容 wx.createWebAudioContext 接口,也不兼容 wx.createInnerAudioContext 开启 useWebAudioImplement 的情况,将在后续版本中支持 */ - setInnerAudioOption< - T extends SetInnerAudioOption = SetInnerAudioOption - >( - option: T - ): PromisifySuccessResult<T, SetInnerAudioOption> - /** [wx.setKeepScreenOn(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.setKeepScreenOn.html) -* -* 需要基础库: `1.4.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 设置是否保持常亮状态。仅在当前小程序生效,离开小程序后设置失效。 -* -* **示例代码** -* -* ```js -wx.setKeepScreenOn({ - keepScreenOn: true -}) -``` */ - setKeepScreenOn< - T extends SetKeepScreenOnOption = SetKeepScreenOnOption - >( - option: T - ): PromisifySuccessResult<T, SetKeepScreenOnOption> - /** [wx.setNavigationBarColor(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.setNavigationBarColor.html) - * - * 需要基础库: `1.4.0` - * - * 在插件中使用:需要基础库 `2.1.0` - * - * 在插件中使用时,只能在当前插件的页面中调用 - * - * 设置页面导航条颜色 */ - setNavigationBarColor< - T extends SetNavigationBarColorOption = SetNavigationBarColorOption - >( - option: T - ): PromisifySuccessResult<T, SetNavigationBarColorOption> - /** [wx.setNavigationBarTitle(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.setNavigationBarTitle.html) -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 动态设置当前页面的标题 -* -* **示例代码** -* -* ```js -wx.setNavigationBarTitle({ - title: '当前页面' -}) -``` */ - setNavigationBarTitle< - T extends SetNavigationBarTitleOption = SetNavigationBarTitleOption - >( - option: T - ): PromisifySuccessResult<T, SetNavigationBarTitleOption> - /** [wx.setScreenBrightness(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.setScreenBrightness.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 设置屏幕亮度 */ - setScreenBrightness< - T extends SetScreenBrightnessOption = SetScreenBrightnessOption - >( - option: T - ): PromisifySuccessResult<T, SetScreenBrightnessOption> - /** [wx.setStorage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorage.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。 -* -* **示例代码** -* -* ```js -wx.setStorage({ - key:"key", - data:"value" -}) -``` -* -* ```js -// 开启加密存储 -wx.setStorage({ - key: "key", - data: "value", - encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true - success() { - wx.getStorage({ - key: "key", - encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true - success(res) { - console.log(res.data) - } - }) - } -}) -``` */ - setStorage< - T = any, - U extends SetStorageOption<T> = SetStorageOption<T> - >( - option: U - ): PromisifySuccessResult<U, SetStorageOption<T>> - /** [wx.setStorageSync(string key, any data)](https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。 -* -* **注意** -* -* storage 应只用来进行数据的持久化存储,不应用于运行时的数据传递或全局状态管理。启动过程中过多的同步读写存储,会显著影响启动耗时。 -* -* **示例代码** -* -* ```js -try { - wx.setStorageSync('key', 'value') -} catch (e) { } -``` */ - setStorageSync<T = any>( - /** 本地缓存中指定的 key */ - key: string, - /** 需要存储的内容。只支持原生类型、Date、及能够通过`JSON.stringify`序列化的对象。 */ - data: T - ): void - /** [wx.setTabBarBadge(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.setTabBarBadge.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:不支持 -* -* 为 tabBar 某一项的右上角添加文本 -* -* **示例代码** -* -* ```js -wx.setTabBarBadge({ - index: 0, - text: '1' -}) -``` */ - setTabBarBadge<T extends SetTabBarBadgeOption = SetTabBarBadgeOption>( - option: T - ): PromisifySuccessResult<T, SetTabBarBadgeOption> - /** [wx.setTabBarItem(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.setTabBarItem.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:不支持 -* -* 动态设置 tabBar 某一项的内容,`2.7.0` 起图片支持临时文件和网络文件。 -* -* **示例代码** -* -* ```js -wx.setTabBarItem({ - index: 0, - text: 'text', - iconPath: '/path/to/iconPath', - selectedIconPath: '/path/to/selectedIconPath' -}) -``` */ - setTabBarItem<T extends SetTabBarItemOption = SetTabBarItemOption>( - option: T - ): PromisifySuccessResult<T, SetTabBarItemOption> - /** [wx.setTabBarStyle(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.setTabBarStyle.html) -* -* 需要基础库: `1.9.0` -* -* 在插件中使用:不支持 -* -* 动态设置 tabBar 的整体样式 -* -* **示例代码** -* -* ```js -wx.setTabBarStyle({ - color: '#FF0000', - selectedColor: '#00FF00', - backgroundColor: '#0000FF', - borderStyle: 'white' -}) -``` */ - setTabBarStyle<T extends SetTabBarStyleOption = SetTabBarStyleOption>( - option?: T - ): PromisifySuccessResult<T, SetTabBarStyleOption> - /** [wx.setTopBarText(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/sticky/wx.setTopBarText.html) -* -* 需要基础库: `1.4.3` -* -* 在插件中使用:不支持 -* @deprecated 基础库版本 [1.9.9](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 -* -* 动态设置置顶栏文字内容。只有当前小程序被置顶时能生效,如果当前小程序没有被置顶,也能调用成功,但是不会立即生效,只有在用户将这个小程序置顶后才换上设置的文字内容. -* -* **示例代码** -* -* ```js -wx.setTopBarText({ - text: 'hello, world!' -}) -``` -* -* **注意** -* -* - 调用成功后,需间隔 5s 才能再次调用此接口,如果在 5s 内再次调用此接口,会回调 fail,errMsg:"setTopBarText: fail invoke too frequently" */ - setTopBarText<T extends SetTopBarTextOption = SetTopBarTextOption>( - option: T - ): PromisifySuccessResult<T, SetTopBarTextOption> - /** [wx.setVisualEffectOnCapture(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/screen/wx.setVisualEffectOnCapture.html) - * - * 需要基础库: `2.20.1` - * - * 在插件中使用:需要基础库 `2.21.3` - * - * 设置截屏/录屏时屏幕表现,仅支持在 Android 端调用 */ - setVisualEffectOnCapture(option: SetVisualEffectOnCaptureOption): void - /** [wx.setWifiList(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.setWifiList.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 设置 `wifiList` 中 AP 的相关信息。在 `onGetWifiList` 回调后调用,**iOS特有接口**。 -* -* **注意** -* -* - 该接口只能在 `onGetWifiList` 回调之后才能调用。 -* - 此时客户端会挂起,等待小程序设置 Wi-Fi 信息,请务必尽快调用该接口,若无数据请传入一个空数组。 -* - 有可能随着周边 Wi-Fi 列表的刷新,单个流程内收到多次带有存在重复的 Wi-Fi 列表的回调。 -* -* **示例代码** -* -* ```js -wx.onGetWifiList(function(res) { - if (res.wifiList.length) { - wx.setWifiList({ - wifiList: [{ - SSID: res.wifiList[0].SSID, - BSSID: res.wifiList[0].BSSID, - password: '123456' - }] - }) - } else { - wx.setWifiList({ - wifiList: [] - }) - } -}) -wx.getWifiList() -``` */ - setWifiList<T extends SetWifiListOption = SetWifiListOption>( - option: T - ): PromisifySuccessResult<T, SetWifiListOption> - /** [wx.setWindowSize(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/window/wx.setWindowSize.html) - * - * 需要基础库: `2.10.1` - * - * 在插件中使用:不支持 - * @deprecated 基础库版本 [2.11.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 - * - * 设置窗口大小,该接口仅适用于 PC 平台,使用细则请参见指南 */ - setWindowSize(option: SetWindowSizeOption): void - /** [wx.shareFileMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.shareFileMessage.html) - * - * 需要基础库: `2.16.1` - * - * 在插件中使用:不支持 - * - * 转发文件到聊天 */ - shareFileMessage< - T extends ShareFileMessageOption = ShareFileMessageOption - >( - option: T - ): PromisifySuccessResult<T, ShareFileMessageOption> - /** [wx.shareToWeRun(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.shareToWeRun.html) - * - * 在插件中使用:不支持 - * - * 分享数据到微信运动。 */ - shareToWeRun<T extends ShareToWeRunOption = ShareToWeRunOption>( - option: T - ): PromisifySuccessResult<T, ShareToWeRunOption> - /** [wx.shareVideoMessage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.shareVideoMessage.html) - * - * 需要基础库: `2.16.1` - * - * 在插件中使用:不支持 - * - * 转发视频到聊天 */ - shareVideoMessage< - T extends ShareVideoMessageOption = ShareVideoMessageOption - >( - option: T - ): PromisifySuccessResult<T, ShareVideoMessageOption> - /** [wx.showActionSheet(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showActionSheet.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 显示操作菜单 -* -* **示例代码** -* -* ```js -wx.showActionSheet({ - itemList: ['A', 'B', 'C'], - success (res) { - console.log(res.tapIndex) - }, - fail (res) { - console.log(res.errMsg) - } -}) -``` -* -* **注意** -* -* - Android 6.7.2 以下版本,点击取消或蒙层时,回调 fail, errMsg 为 "fail cancel"; -* - Android 6.7.2 及以上版本 和 iOS 点击蒙层不会关闭模态弹窗,所以尽量避免使用「取消」分支中实现业务逻辑 */ - showActionSheet< - T extends ShowActionSheetOption = ShowActionSheetOption - >( - option: T - ): PromisifySuccessResult<T, ShowActionSheetOption> - /** [wx.showLoading(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 显示 loading 提示框。需主动调用 wx.hideLoading 才能关闭提示框 -* -* **示例代码** -* -* ```js -wx.showLoading({ - title: '加载中', -}) - -setTimeout(function () { - wx.hideLoading() -}, 2000) -``` -* -* **注意** -* -* - [wx.showLoading](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html) 和 [wx.showToast](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html) 同时只能显示一个 -* - [wx.showLoading](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html) 应与 [wx.hideLoading](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.hideLoading.html) 配对使用 */ - showLoading<T extends ShowLoadingOption = ShowLoadingOption>( - option: T - ): PromisifySuccessResult<T, ShowLoadingOption> - /** [wx.showModal(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showModal.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 显示模态对话框 -* -* **示例代码** -* -* ```js -wx.showModal({ - title: '提示', - content: '这是一个模态弹窗', - success (res) { - if (res.confirm) { - console.log('用户点击确定') - } else if (res.cancel) { - console.log('用户点击取消') - } - } -}) -``` -* -* **注意** -* -* - Android 6.7.2 以下版本,点击取消或蒙层时,回调 fail, errMsg 为 "fail cancel"; -* - Android 6.7.2 及以上版本 和 iOS 点击蒙层不会关闭模态弹窗,所以尽量避免使用「取消」分支中实现业务逻辑 -* - 自基础库 2.17.1 版本起,支持传入 editable 参数,显示带输入框的弹窗 */ - showModal<T extends ShowModalOption = ShowModalOption>( - option: T - ): PromisifySuccessResult<T, ShowModalOption> - /** [wx.showNavigationBarLoading(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/navigation-bar/wx.showNavigationBarLoading.html) - * - * 在插件中使用:需要基础库 `2.1.0` - * - * 在插件中使用时,只能在当前插件的页面中调用 - * - * 在当前页面显示导航条加载动画 */ - showNavigationBarLoading< - T extends ShowNavigationBarLoadingOption = ShowNavigationBarLoadingOption - >( - option?: T - ): PromisifySuccessResult<T, ShowNavigationBarLoadingOption> - /** [wx.showRedPackage(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/redpackage/wx.showRedPackage.html) - * - * 需要基础库: `2.10.0` - * - * 在插件中使用:不支持 - * - * 拉取h5领取红包封面页。获取参考红包封面地址参考 [微信红包封面开发平台](https://cover.weixin.qq.com/cgi-bin/mmcover-bin/readtemplate?t=page/index#/doc?page=introduce)。 */ - showRedPackage<T extends ShowRedPackageOption = ShowRedPackageOption>( - option: T - ): PromisifySuccessResult<T, ShowRedPackageOption> - /** [wx.showShareImageMenu(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.showShareImageMenu.html) - * - * 需要基础库: `2.14.3` - * - * 在插件中使用:需要基础库 `2.16.0` - * - * 打开分享图片弹窗,可以将图片发送给朋友、收藏或下载 */ - showShareImageMenu< - T extends ShowShareImageMenuOption = ShowShareImageMenuOption - >( - option: T - ): PromisifySuccessResult<T, ShowShareImageMenuOption> - /** [wx.showShareMenu(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.showShareMenu.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 显示当前页面的转发按钮 -* -* **** -* -* ## 注意事项 -* - "shareAppMessage"表示“发送给朋友”按钮,"shareTimeline"表示“分享到朋友圈”按钮 -* - 显示“分享到朋友圈”按钮时必须同时显示“发送给朋友”按钮,显示“发送给朋友”按钮时则允许不显示“分享到朋友圈”按钮 -* -* **示例代码** -* -* ```js -wx.showShareMenu({ - withShareTicket: true, - menus: ['shareAppMessage', 'shareTimeline'] -}) -``` */ - showShareMenu<T extends ShowShareMenuOption = ShowShareMenuOption>( - option: T - ): PromisifySuccessResult<T, ShowShareMenuOption> - /** [wx.showTabBar(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.showTabBar.html) - * - * 需要基础库: `1.9.0` - * - * 在插件中使用:不支持 - * - * 显示 tabBar */ - showTabBar<T extends ShowTabBarOption = ShowTabBarOption>( - option: T - ): PromisifySuccessResult<T, ShowTabBarOption> - /** [wx.showTabBarRedDot(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/tab-bar/wx.showTabBarRedDot.html) - * - * 需要基础库: `1.9.0` - * - * 在插件中使用:不支持 - * - * 显示 tabBar 某一项的右上角的红点 */ - showTabBarRedDot< - T extends ShowTabBarRedDotOption = ShowTabBarRedDotOption - >( - option: T - ): PromisifySuccessResult<T, ShowTabBarRedDotOption> - /** [wx.showToast(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 显示消息提示框 -* -* **示例代码** -* -* ```js -wx.showToast({ - title: '成功', - icon: 'success', - duration: 2000 -}) -``` -* -* **注意** -* -* - [wx.showLoading](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html) 和 [wx.showToast](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html) 同时只能显示一个 -* - [wx.showToast](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html) 应与 [wx.hideToast](https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.hideToast.html) 配对使用 */ - showToast<T extends ShowToastOption = ShowToastOption>( - option: T - ): PromisifySuccessResult<T, ShowToastOption> - /** [wx.startAccelerometer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.startAccelerometer.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 开始监听加速度数据。 -* -* **示例代码** -* -* ```js -wx.startAccelerometer({ - interval: 'game' -}) -``` -* -* **注意** -* -* - 根据机型性能、当前 CPU 与内存的占用情况,`interval` 的设置与实际 `wx.onAccelerometerChange()` 回调函数的执行频率会有一些出入。 */ - startAccelerometer< - T extends StartAccelerometerOption = StartAccelerometerOption - >( - option?: T - ): PromisifySuccessResult<T, StartAccelerometerOption> - /** [wx.startBeaconDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.startBeaconDiscovery.html) -* -* 需要基础库: `1.2.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 开始搜索附近的 Beacon 设备 -* -* **示例代码** -* -* ```js -wx.startBeaconDiscovery({ - success(res) { } -}) -``` */ - startBeaconDiscovery< - T extends StartBeaconDiscoveryOption = StartBeaconDiscoveryOption - >( - option: T - ): PromisifySuccessResult<T, StartBeaconDiscoveryOption> - /** [wx.startBluetoothDevicesDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.startBluetoothDevicesDiscovery.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 开始搜寻附近的蓝牙外围设备。 -* -* **此操作比较耗费系统资源,请在搜索到需要的设备后及时调用 [wx.stopBluetoothDevicesDiscovery](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.stopBluetoothDevicesDiscovery.html) 停止搜索。** -* -* **注意** -* -* - 考虑到蓝牙功能可以间接进行定位,安卓 6.0 及以上版本,无定位权限或定位开关未打开时,无法进行设备搜索。这种情况下,安卓 8.0.16 前,接口调用成功但无法扫描设备;8.0.16 及以上版本,会返回错误。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/m7klFDmZ72i1) -* -* ```js -// 以微信硬件平台的蓝牙智能灯为例,主服务的 UUID 是 FEE7。传入这个参数,只搜索主服务 UUID 为 FEE7 的设备 -wx.startBluetoothDevicesDiscovery({ - services: ['FEE7'], - success (res) { - console.log(res) - } -}) -``` */ - startBluetoothDevicesDiscovery< - T extends StartBluetoothDevicesDiscoveryOption = StartBluetoothDevicesDiscoveryOption - >( - option: T - ): PromisifySuccessResult<T, StartBluetoothDevicesDiscoveryOption> - /** [wx.startCompass(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/compass/wx.startCompass.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 开始监听罗盘数据 -* -* **示例代码** -* -* ```js -wx.startCompass() -``` */ - startCompass<T extends StartCompassOption = StartCompassOption>( - option?: T - ): PromisifySuccessResult<T, StartCompassOption> - /** [wx.startDeviceMotionListening(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.startDeviceMotionListening.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 开始监听设备方向的变化。 */ - startDeviceMotionListening< - T extends StartDeviceMotionListeningOption = StartDeviceMotionListeningOption - >( - option?: T - ): PromisifySuccessResult<T, StartDeviceMotionListeningOption> - /** [wx.startGyroscope(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.startGyroscope.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 开始监听陀螺仪数据。 */ - startGyroscope<T extends StartGyroscopeOption = StartGyroscopeOption>( - option?: T - ): PromisifySuccessResult<T, StartGyroscopeOption> - /** [wx.startHCE(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.startHCE.html) -* -* 需要基础库: `1.7.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 初始化 NFC 模块。(HCE 模式仅安卓支持) -* -* **示例代码** -* -* ```js -wx.startHCE({ - aid_list: ['F222222222'], - success (res) { - console.log(res.errMsg) - } -}) -``` */ - startHCE<T extends StartHCEOption = StartHCEOption>( - option: T - ): PromisifySuccessResult<T, StartHCEOption> - /** [wx.startLocalServiceDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.startLocalServiceDiscovery.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 开始搜索局域网下的 mDNS 服务。搜索的结果会通过 wx.onLocalService* 事件返回。 - * - * **注意** - * - * 1. 由于操作系统相关能力变更,iOS 微信客户端 7.0.18 及以上版本无法使用 mDNS 相关接口,安卓版本不受影响 - * 2. wx.startLocalServiceDiscovery 是一个消耗性能的行为,开始 30 秒后会自动 stop 并执行 wx.onLocalServiceDiscoveryStop 注册的回调函数。 - * 3. 在调用 wx.startLocalServiceDiscovery 后,在这次搜索行为停止后才能发起下次 wx.startLocalServiceDiscovery。停止本次搜索行为的操作包括调用 wx.stopLocalServiceDiscovery 和 30 秒后系统自动 stop 本次搜索。 */ - startLocalServiceDiscovery< - T extends StartLocalServiceDiscoveryOption = StartLocalServiceDiscoveryOption - >( - option: T - ): PromisifySuccessResult<T, StartLocalServiceDiscoveryOption> - /** [wx.startLocationUpdate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdate.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:需要基础库 `2.8.0` - * - * 开启小程序进入前台时接收位置消息。 - * ## 使用方法 - * 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) - * - * ## 申请开通 - * 暂只针对如下类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。从2022年7月14日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 - * - * ### 国内主体开放类目 - * - * | 一级类目/主体类型 | 二级类目 | 应用场景 | - * | -------------- | -------| -------- | - * | 电商平台 | / | 售卖商品线下发货、收货、送货服务 | - * | 商家自营 | / | 提供售卖商品线下发货、收货、送货服务、线下商超导览、导航服务 | - * | 医疗服务 | 公立医疗机构、三级私立医疗机构、其他私立医疗机构、就医服务、其他医学健康服务、药品(非处方药)销售、非处方药销售平台、医疗器械生产企业、医疗器械自营、医疗器械经营销售平台、互联网医院血液、干细胞服务、临床试验 | 1、实际物品/药品接收服务 2、基于地理位置取号并现场报到、附近医院导航等服务 | - * | 交通服务 | / | 代驾服务、租车网点导航等相关服务 | - * | 生活服务 | / | 上门服务作业等线下场景 | - * | 物流服务 | 收件/派件、查件、邮政、装卸搬运、快递柜、货物运输 | 快递/货物收发服务 | - * | 餐饮服务 | 点餐平台、外卖平台 | 线下送餐服务 | - * | 工具 | 天气、信息查询 | 与地理位置相关的服务,比如潮汐查询、海拔查询、天气查询等 | - * | 金融 | 保险 | 提供线下网点预约、基于地理位置取号并现场报到、附近网点导航等服务 | - * | 旅游 | 景区服务 | 提供景区导航、导览服务 | - * | 政务民生 | / | 提供政务单位相关业务 | - * | 政府主体帐号 | / | 提供政务单位相关业务 | - * - * ### 海外主体开放类目 - * | 一级类目/主体类型 | 二级类目 | 应用场景 | - * | -------------- | -------| -------- | - * | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | - * | 快递业与邮政 | / | 快递/货物收发服务 | - * | 餐饮 | / | 线下送餐服务 | - * | 电商平台 | / | 售卖商品线下发货、线下收货服务 | - * | 出行与交通 | / | 代驾服务、租车网点导航等相关服务 | - * | 跨境电商 | / | 提供售卖商品线下发货、收货服务、线下商超导览、导航服务 | - * | 本地服务 | 服装/鞋/箱包、玩具、家电/数码/手机、美妆/洗护、珠宝/饰品/眼镜/钟表、运动/户外/乐器、鲜花/园艺/工艺品、家居/家饰/家纺、办公/文具、机械/电子器件、酒、食品、百货/超市/便利店、宠物食品/用品 | 提供售卖商品线下发货、线下收货服务、线下商超导览、导航服务 | - * | 生活服务 | 家政、外送 | 上门服务作业等线下场景 | - * - * **注意** - * - * - 获取位置信息需配置[地理位置用途说明](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#permission)。 */ - startLocationUpdate< - T extends StartLocationUpdateOption = StartLocationUpdateOption - >( - option: T - ): PromisifySuccessResult<T, StartLocationUpdateOption> - /** [wx.startLocationUpdateBackground(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdateBackground.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:不支持 - * - * 开启小程序进入前后台时均接收位置消息,需引导用户开启[授权](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html#后台定位)。授权以后,小程序在运行中或进入后台均可接受位置消息变化。 - * ## 使用方法 - * 自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口,2022年7月14日前发布的小程序不受影响。[具体规则见公告](https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01) - * - * ## 申请开通 - * 暂只针对如下类目的小程序开放,需要先通过类目审核,再在小程序管理后台,「开发」-「开发管理」-「接口设置」中自助开通该接口权限。从2022年7月14日开始,在代码审核环节将检测该接口是否已完成开通,如未开通,将在代码提审环节进行拦截。 - * - * ### 国内主体开放类目 - * - * | 一级类目/主体类型 | 二级类目 | 应用场景 | - * | -------------- | -------| -------- | - * | 电商平台 | / | 在小程序内提供线下商超导览、导航服务 | - * | 商家自营 | / | 在小程序内提供线下商超导览、导航服务 | - * | 交通服务 | / | 代驾服务、打车出行、城市共享交通、实时导航服务等 | - * | 生活服务 | 跑腿、共享服务 | 含有B端小程序配送服务,基于地理位置共享工具类服务 | - * | 物流服务 | 收件/派件、查件、邮政、装卸搬运、快递柜、货物运输 | 提供B端小程序快递/货物收发服务 | - * | 餐饮服务 | 点餐平台、外卖平台 | 提供B端小程序餐饮配送服务、线下门店实时导航 | - * | 工具 | 健康管理 | 基于实时地理位置提供身体管理记录等服务 | - * | 旅游 | 景区服务、住宿服务 | 在小程序内提供景区导航、导览服务、酒店导航服务 | - * | 政务民生 | / | 提供政务单位相关业务 | - * | 政府主体帐号 | / | 提供政务单位相关业务 | - * - * ### 海外主体开放类目 - * | 一级类目/主体类型 | 二级类目 | 应用场景 | - * | -------------- | -------| -------- | - * | 交通服务 | / | 代驾服务、打车出行、城市共享交通、实时导航服务等 | - * | 生活服务 | 家政、外送 | 含有B端小程序配送服务,基于地理位置导航上门服务 | - * | 快递业与邮政 | / | 提供B端小程序快递/货物收发服务 | - * | 餐饮服务 | 外卖点餐 | 提供B端小程序餐饮配送服务、线下门店实时导航 | - * | 电商平台 | / | 在小程序内提供线下商超导览、导航服务 | - * | 跨境电商 | / | 在小程序内提供线下商超导览、导航服务 | - * | 本地服务 | 服装/鞋/箱包、玩具、家电/数码/手机、美妆/洗护、珠宝/饰品/眼镜/钟表、运动/户外/乐器、鲜花/园艺/工艺品、家居/家饰/家纺、办公/文具、机械/电子器件、酒、食品、百货/超市/便利店、宠物食品/用品 | 在小程序内提供线下商超导览、导航服务 | - * - * **注意** - * - * - 安卓微信7.0.6版本,iOS 7.0.5版本起支持该接口 - * - 需在app.json中配置requiredBackgroundModes: ['location']后使用 - * - 获取位置信息需配置[地理位置用途说明](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#permission)。 */ - startLocationUpdateBackground< - T extends StartLocationUpdateBackgroundOption = StartLocationUpdateBackgroundOption - >( - option: T - ): PromisifySuccessResult<T, StartLocationUpdateBackgroundOption> - /** [wx.startPullDownRefresh(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/pull-down-refresh/wx.startPullDownRefresh.html) -* -* 需要基础库: `1.5.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 开始下拉刷新。调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。 -* -* **示例代码** -* -* ```js -wx.startPullDownRefresh() -``` */ - startPullDownRefresh< - T extends StartPullDownRefreshOption = StartPullDownRefreshOption - >( - option?: T - ): PromisifySuccessResult<T, StartPullDownRefreshOption> - /** [wx.startRecord(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.startRecord.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getRecorderManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.getRecorderManager.html) 替换 -* -* 开始录音。当主动调用 [wx.stopRecord](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.stopRecord.html),或者录音超过1分钟时自动结束录音。当用户离开小程序时,此接口无法调用。 -* -* **示例代码** -* -* ```js -wx.startRecord({ - success (res) { - const tempFilePath = res.tempFilePath - } -}) -setTimeout(function () { - wx.stopRecord() // 结束录音 -}, 10000) -``` */ - startRecord<T extends WxStartRecordOption = WxStartRecordOption>( - option?: T - ): PromisifySuccessResult<T, WxStartRecordOption> - /** [wx.startSoterAuthentication(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/soter/wx.startSoterAuthentication.html) -* -* 需要基础库: `1.5.0` -* -* 在插件中使用:不支持 -* -* 开始 SOTER 生物认证。验证流程请参考[说明](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/bio-auth.html)。 -* -* **resultJSON 说明** -* -* 此数据为设备TEE中,将传入的challenge和TEE内其他安全信息组成的数据进行组装而来的JSON,对下述字段的解释如下表。例子如下: -* | 字段名 | 说明 | -* |---------|-------------------------------------------------------------------------------------------| -* | raw | 调用者传入的challenge | -* | fid | (仅Android支持)本次生物识别认证的生物信息编号(如指纹识别则是指纹信息在本设备内部编号) | -* | counter | 防重放特征参数 | -* | tee_n | TEE名称(如高通或者trustonic等) | -* | tee_v | TEE版本号 | -* | fp_n | 指纹以及相关逻辑模块提供商(如FPC等) | -* | fp_v | 指纹以及相关模块版本号 | -* | cpu_id | 机器唯一识别ID | -* | uid | 概念同Android系统定义uid,即应用程序编号 | -* -* ```json -{ - "raw":"msg", - "fid":"2", - "counter":123, - "tee_n":"TEE Name", - "tee_v":"TEE Version", - "fp_n":"Fingerprint Sensor Name", - "fp_v":"Fingerprint Sensor Version", - "cpu_id":"CPU Id", - "uid":"21" -} -``` -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/q3tCKkmJ7g2e) -* ```js -wx.startSoterAuthentication({ - requestAuthModes: ['fingerPrint'], - challenge: '123456', - authContent: '请用指纹解锁', - success(res) { - } -}) -``` */ - startSoterAuthentication< - T extends StartSoterAuthenticationOption = StartSoterAuthenticationOption - >( - option: T - ): PromisifySuccessResult<T, StartSoterAuthenticationOption> - /** [wx.startWifi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.startWifi.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 初始化 Wi-Fi 模块。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/8P7zrkmd7r2n) -* ```js -wx.startWifi({ - success (res) { - console.log(res.errMsg) - } -}) -``` */ - startWifi<T extends StartWifiOption = StartWifiOption>( - option?: T - ): PromisifySuccessResult<T, StartWifiOption> - /** [wx.stopAccelerometer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.stopAccelerometer.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 停止监听加速度数据。 -* -* **示例代码** -* -* ```js -wx.stopAccelerometer() -``` */ - stopAccelerometer< - T extends StopAccelerometerOption = StopAccelerometerOption - >( - option?: T - ): PromisifySuccessResult<T, StopAccelerometerOption> - /** [wx.stopBackgroundAudio(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.stopBackgroundAudio.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.2.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getBackgroundAudioManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/wx.getBackgroundAudioManager.html) 替换 -* -* 停止播放音乐。 -* -* **示例代码** -* -* ```js -wx.stopBackgroundAudio() -``` */ - stopBackgroundAudio< - T extends StopBackgroundAudioOption = StopBackgroundAudioOption - >( - option?: T - ): PromisifySuccessResult<T, StopBackgroundAudioOption> - /** [wx.stopBeaconDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/ibeacon/wx.stopBeaconDiscovery.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 停止搜索附近的 Beacon 设备 */ - stopBeaconDiscovery< - T extends StopBeaconDiscoveryOption = StopBeaconDiscoveryOption - >( - option?: T - ): PromisifySuccessResult<T, StopBeaconDiscoveryOption> - /** [wx.stopBluetoothDevicesDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.stopBluetoothDevicesDiscovery.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 停止搜寻附近的蓝牙外围设备。若已经找到需要的蓝牙设备并不需要继续搜索时,建议调用该接口停止蓝牙搜索。 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -wx.stopBluetoothDevicesDiscovery({ - success (res) { - console.log(res) - } -}) -``` */ - stopBluetoothDevicesDiscovery< - T extends StopBluetoothDevicesDiscoveryOption = StopBluetoothDevicesDiscoveryOption - >( - option?: T - ): PromisifySuccessResult<T, StopBluetoothDevicesDiscoveryOption> - /** [wx.stopCompass(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/compass/wx.stopCompass.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 停止监听罗盘数据 -* -* **示例代码** -* -* ```js -wx.stopCompass() -``` */ - stopCompass<T extends StopCompassOption = StopCompassOption>( - option?: T - ): PromisifySuccessResult<T, StopCompassOption> - /** [wx.stopDeviceMotionListening(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/motion/wx.stopDeviceMotionListening.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 停止监听设备方向的变化。 */ - stopDeviceMotionListening< - T extends StopDeviceMotionListeningOption = StopDeviceMotionListeningOption - >( - option?: T - ): PromisifySuccessResult<T, StopDeviceMotionListeningOption> - /** [wx.stopFaceDetect(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ai/face/wx.stopFaceDetect.html) - * - * 需要基础库: `2.18.0` - * - * 在插件中使用:需要基础库 `2.21.3` - * @deprecated 基础库版本 [2.25.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃 - * - * 停止人脸检测。本接口不再维护,请使用 [wx.createVKSession](https://developers.weixin.qq.com/miniprogram/dev/api/ai/visionkit/wx.createVKSession.html) 接口代替。详情参考[人脸检测指南文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/visionkit/face.html) */ - stopFaceDetect(option?: StopFaceDetectOption): void - /** [wx.stopGyroscope(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/gyroscope/wx.stopGyroscope.html) - * - * 需要基础库: `2.3.0` - * - * 在插件中使用:需要基础库 `2.9.1` - * - * 停止监听陀螺仪数据。 */ - stopGyroscope<T extends StopGyroscopeOption = StopGyroscopeOption>( - option?: T - ): PromisifySuccessResult<T, StopGyroscopeOption> - /** [wx.stopHCE(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc-hce/wx.stopHCE.html) -* -* 需要基础库: `1.7.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 关闭 NFC 模块。仅在安卓系统下有效。 -* -* **示例代码** -* -* ```js -wx.stopHCE({ - success (res) { - console.log(res.errMsg) - } -}) -``` */ - stopHCE<T extends StopHCEOption = StopHCEOption>( - option?: T - ): PromisifySuccessResult<T, StopHCEOption> - /** [wx.stopLocalServiceDiscovery(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/network/mdns/wx.stopLocalServiceDiscovery.html) - * - * 需要基础库: `2.4.0` - * - * 在插件中使用:需要基础库 `2.15.0` - * - * 停止搜索 mDNS 服务 */ - stopLocalServiceDiscovery< - T extends StopLocalServiceDiscoveryOption = StopLocalServiceDiscoveryOption - >( - option?: T - ): PromisifySuccessResult<T, StopLocalServiceDiscoveryOption> - /** [wx.stopLocationUpdate(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.stopLocationUpdate.html) - * - * 需要基础库: `2.8.0` - * - * 在插件中使用:需要基础库 `2.8.0` - * - * 关闭监听实时位置变化,前后台都停止消息接收 */ - stopLocationUpdate< - T extends StopLocationUpdateOption = StopLocationUpdateOption - >( - option?: T - ): PromisifySuccessResult<T, StopLocationUpdateOption> - /** [wx.stopPullDownRefresh(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/ui/pull-down-refresh/wx.stopPullDownRefresh.html) -* -* 需要基础库: `1.5.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 停止当前页面下拉刷新。 -* -* **示例代码** -* -* ```js -Page({ - onPullDownRefresh () { - wx.stopPullDownRefresh() - } -}) -``` */ - stopPullDownRefresh< - T extends StopPullDownRefreshOption = StopPullDownRefreshOption - >( - option?: T - ): PromisifySuccessResult<T, StopPullDownRefreshOption> - /** [wx.stopRecord(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.stopRecord.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.getRecorderManager](https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/wx.getRecorderManager.html) 替换 -* -* 停止录音。 -* -* **示例代码** -* -* ```js -wx.startRecord({ - success (res) { - const tempFilePath = res.tempFilePath - } -}) -setTimeout(function () { - wx.stopRecord() // 结束录音 -}, 10000) -``` */ - stopRecord<T extends WxStopRecordOption = WxStopRecordOption>( - option?: T - ): PromisifySuccessResult<T, WxStopRecordOption> - /** [wx.stopVoice(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.stopVoice.html) -* -* 在插件中使用:需要基础库 `1.9.6` -* @deprecated 基础库版本 [1.6.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起已废弃,请使用 [wx.createInnerAudioContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/wx.createInnerAudioContext.html) 替换 -* -* 结束播放语音。 -* -* **示例代码** -* -* ```js -wx.startRecord({ - success (res) { - const tempFilePath = res.tempFilePath - wx.playVoice({ - filePath: tempFilePath, - }) - - setTimeout(() => { wx.stopVoice() }, 5000) - } -}) -``` */ - stopVoice<T extends StopVoiceOption = StopVoiceOption>( - option?: T - ): PromisifySuccessResult<T, StopVoiceOption> - /** [wx.stopWifi(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/wx.stopWifi.html) -* -* 需要基础库: `1.6.0` -* -* 在插件中使用:需要基础库 `2.9.1` -* -* 关闭 Wi-Fi 模块。 -* -* **示例代码** -* -* ```js -wx.stopWifi({ - success (res) { - console.log(res.errMsg) - } -}) -``` */ - stopWifi<T extends StopWifiOption = StopWifiOption>( - option?: T - ): PromisifySuccessResult<T, StopWifiOption> - /** [wx.subscribeVoIPVideoMembers(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.subscribeVoIPVideoMembers.html) - * - * 需要基础库: `2.11.0` - * - * 在插件中使用:需要基础库 `2.11.0` - * - * 订阅视频画面成员。对于视频房间,当成员超过两人时需进行订阅,否则只能看到最先加入房间的两人画面。 */ - subscribeVoIPVideoMembers< - T extends SubscribeVoIPVideoMembersOption = SubscribeVoIPVideoMembersOption - >( - option: T - ): PromisifySuccessResult<T, SubscribeVoIPVideoMembersOption> - /** [wx.switchTab(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab.html) -* -* 在插件中使用:需要基础库 `2.3.1` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 -* -* **示例代码** -* -* ```json -// app.json -{ - "tabBar": { - "list": [{ - "pagePath": "index", - "text": "首页" - },{ - "pagePath": "other", - "text": "其他" - }] - } -} -``` -* -* ```js -wx.switchTab({ - url: '/index' -}) -``` */ - switchTab<T extends SwitchTabOption = SwitchTabOption>( - option: T - ): PromisifySuccessResult<T, SwitchTabOption> - /** [wx.updateShareMenu(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.updateShareMenu.html) -* -* 需要基础库: `1.2.0` -* -* 在插件中使用:需要基础库 `2.1.0` -* -* 在插件中使用时,只能在当前插件的页面中调用 -* -* 更新转发属性 -* -* **示例代码** -* -* ```js -wx.updateShareMenu({ - withShareTicket: true, - success () { } -}) -``` -* ```js -// 转发私密消息 -wx.updateShareMenu({ - isPrivateMessage: true, - activityId: 'xxx', - templateInfo: {}, - success () { }, - fail () {} -}) -``` */ - updateShareMenu< - T extends UpdateShareMenuOption = UpdateShareMenuOption - >( - option: T - ): PromisifySuccessResult<T, UpdateShareMenuOption> - /** [wx.updateVoIPChatMuteConfig(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/voip/wx.updateVoIPChatMuteConfig.html) - * - * 需要基础库: `2.7.0` - * - * 在插件中使用:需要基础库 `2.9.0` - * - * 更新实时语音静音设置 */ - updateVoIPChatMuteConfig< - T extends UpdateVoIPChatMuteConfigOption = UpdateVoIPChatMuteConfigOption - >( - option: T - ): PromisifySuccessResult<T, UpdateVoIPChatMuteConfigOption> - /** [wx.updateWeChatApp(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/base/update/wx.updateWeChatApp.html) - * - * 需要基础库: `2.12.0` - * - * 在插件中使用:需要基础库 `2.12.0` - * - * 更新客户端版本。当判断用户小程序所在客户端版本过低时,可使用该接口跳转到更新微信页面。 */ - updateWeChatApp< - T extends UpdateWeChatAppOption = UpdateWeChatAppOption - >( - option?: T - ): PromisifySuccessResult<T, UpdateWeChatAppOption> - /** [wx.vibrateLong(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/vibrate/wx.vibrateLong.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 使手机发生较长时间的振动(400 ms) */ - vibrateLong<T extends VibrateLongOption = VibrateLongOption>( - option?: T - ): PromisifySuccessResult<T, VibrateLongOption> - /** [wx.vibrateShort(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/vibrate/wx.vibrateShort.html) - * - * 需要基础库: `1.2.0` - * - * 在插件中使用:需要基础库 `1.9.6` - * - * 使手机发生较短时间的振动(15 ms)。仅在 iPhone `7 / 7 Plus` 以上及 Android 机型生效 */ - vibrateShort<T extends VibrateShortOption = VibrateShortOption>( - option: T - ): PromisifySuccessResult<T, VibrateShortOption> - /** [wx.writeBLECharacteristicValue(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html) -* -* 需要基础库: `1.1.0` -* -* 在插件中使用:需要基础库 `1.9.6` -* -* 向蓝牙低功耗设备特征值中写入二进制数据。注意:必须设备的特征支持 write 才可以成功调用。 -* -* **注意** -* -* - 并行调用多次会存在写失败的可能性。 -* - 小程序不会对写入数据包大小做限制,但系统与蓝牙设备会限制蓝牙 4.0 单次传输的数据大小,超过最大字节数后会发生写入错误,建议每次写入不超过 20 字节。 -* - 若单次写入数据过长,iOS 上存在系统不会有任何回调的情况(包括错误回调)。 -* - 安卓平台上,在调用 [wx.notifyBLECharacteristicValueChange](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.notifyBLECharacteristicValueChange.html) 成功后立即调用本接口,在部分机型上会发生 10008 系统错误 -* -* **示例代码** -* -* [在微信开发者工具中查看示例](https://developers.weixin.qq.com/s/pQU51zmz7a3K) -* ```js -// 向蓝牙设备发送一个0x00的16进制数据 -let buffer = new ArrayBuffer(1) -let dataView = new DataView(buffer) -dataView.setUint8(0, 0) - -wx.writeBLECharacteristicValue({ - // 这里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取 - deviceId, - // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取 - serviceId, - // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取 - characteristicId, - // 这里的value是ArrayBuffer类型 - value: buffer, - success (res) { - console.log('writeBLECharacteristicValue success', res.errMsg) - } -}) -``` */ - writeBLECharacteristicValue< - T extends WriteBLECharacteristicValueOption = WriteBLECharacteristicValueOption - >( - option: T - ): PromisifySuccessResult<T, WriteBLECharacteristicValueOption> - /** 小程序云开发 */ - cloud: WxCloud - /** 文件系统中的用户目录路径 */ - env: { USER_DATA_PATH: string } - } - - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AccessCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AccessFailCallback = (result: AccessFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AccessSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddArcCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddArcFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddArcSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddCardCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddCardFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddCardSuccessCallback = (result: AddCardSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddCustomLayerCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddCustomLayerFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddCustomLayerSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddFileToFavoritesCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type AddFileToFavoritesFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddFileToFavoritesSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddGroundOverlayCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddGroundOverlayFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddGroundOverlaySuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddMarkersCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddMarkersFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddMarkersSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddPhoneCalendarCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddPhoneCalendarFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddPhoneCalendarSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddPhoneContactCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddPhoneContactFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddPhoneContactSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddPhoneRepeatCalendarCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type AddPhoneRepeatCalendarFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type AddPhoneRepeatCalendarSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddServiceCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddServiceFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddServiceSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddVideoToFavoritesCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type AddVideoToFavoritesFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddVideoToFavoritesSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AddVisualLayerCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AddVisualLayerFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AddVisualLayerSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AppendFileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AppendFileFailCallback = (result: AppendFileFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AppendFileSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AuthPrivateMessageCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type AuthPrivateMessageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type AuthPrivateMessageSuccessCallback = ( - result: AuthPrivateMessageSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AuthorizeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type AuthorizeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type AuthorizeForMiniProgramCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type AuthorizeForMiniProgramFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type AuthorizeForMiniProgramSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type AuthorizeSuccessCallback = (res: GeneralCallbackResult) => void - /** 背景音频播放错误事件的监听函数 */ - type BackgroundAudioManagerOnErrorCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type BatchGetStorageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type BatchGetStorageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type BatchGetStorageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type BatchSetStorageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type BatchSetStorageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type BatchSetStorageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type BlurCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type BlurFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type BlurSuccessCallback = (res: GeneralCallbackResult) => void - /** 回调函数,在执行 `SelectorQuery.exec` 方法后,节点信息会在 `callback` 中返回。 */ - type BoundingClientRectCallback = ( - result: BoundingClientRectCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type CameraContextStartRecordSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type CameraContextStopRecordSuccessCallback = ( - result: StopRecordSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CanvasGetImageDataCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type CanvasGetImageDataFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type CanvasGetImageDataSuccessCallback = ( - result: CanvasGetImageDataSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CanvasPutImageDataCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type CanvasPutImageDataFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type CanvasPutImageDataSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CanvasToTempFilePathCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type CanvasToTempFilePathFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type CanvasToTempFilePathSuccessCallback = ( - result: CanvasToTempFilePathSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CheckIsOpenAccessibilityCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type CheckIsOpenAccessibilityFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type CheckIsOpenAccessibilitySuccessCallback = ( - option: CheckIsOpenAccessibilitySuccessCallbackOption - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CheckIsSoterEnrolledInDeviceCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type CheckIsSoterEnrolledInDeviceFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type CheckIsSoterEnrolledInDeviceSuccessCallback = ( - result: CheckIsSoterEnrolledInDeviceSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CheckIsSupportSoterAuthenticationCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type CheckIsSupportSoterAuthenticationFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type CheckIsSupportSoterAuthenticationSuccessCallback = ( - result: CheckIsSupportSoterAuthenticationSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CheckSessionCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type CheckSessionFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type CheckSessionSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseAddressCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ChooseAddressFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseAddressSuccessCallback = ( - result: ChooseAddressSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseContactCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ChooseContactFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseContactSuccessCallback = ( - option: ChooseContactSuccessCallbackOption - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseImageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ChooseImageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseImageSuccessCallback = ( - result: ChooseImageSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseInvoiceCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ChooseInvoiceFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseInvoiceSuccessCallback = ( - result: ChooseInvoiceSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseInvoiceTitleCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ChooseInvoiceTitleFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseInvoiceTitleSuccessCallback = ( - result: ChooseInvoiceTitleSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseLicensePlateCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ChooseLicensePlateFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseLicensePlateSuccessCallback = ( - result: ChooseLicensePlateSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseLocationCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ChooseLocationFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseLocationSuccessCallback = ( - result: ChooseLocationSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseMediaCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ChooseMediaFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseMediaSuccessCallback = ( - result: ChooseMediaSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseMessageFileCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ChooseMessageFileFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseMessageFileSuccessCallback = ( - result: ChooseMessageFileSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChoosePoiCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ChoosePoiFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChoosePoiSuccessCallback = ( - result: ChoosePoiSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ChooseVideoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ChooseVideoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ChooseVideoSuccessCallback = ( - result: ChooseVideoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ClearCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ClearFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ClearStorageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ClearStorageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ClearStorageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ClearSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CloseBLEConnectionCompleteCallback = (res: BluetoothError) => void - /** 接口调用失败的回调函数 */ - type CloseBLEConnectionFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type CloseBLEConnectionSuccessCallback = (res: BluetoothError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CloseBluetoothAdapterCompleteCallback = (res: BluetoothError) => void - /** 接口调用失败的回调函数 */ - type CloseBluetoothAdapterFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type CloseBluetoothAdapterSuccessCallback = (res: BluetoothError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CloseSocketCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type CloseSocketFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type CloseSocketSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CompressImageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type CompressImageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type CompressImageSuccessCallback = ( - result: CompressImageSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CompressVideoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type CompressVideoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type CompressVideoSuccessCallback = ( - result: CompressVideoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ConnectCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type ConnectFailCallback = (res: Nfcrwerror) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ConnectSocketCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ConnectSocketFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ConnectSocketSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ConnectSuccessCallback = (res: Nfcrwerror) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ConnectWifiCompleteCallback = (res: WifiError) => void - /** 接口调用失败的回调函数 */ - type ConnectWifiFailCallback = (res: WifiError) => void - /** 接口调用成功的回调函数 */ - type ConnectWifiSuccessCallback = (res: WifiError) => void - /** 回调函数,在执行 `SelectorQuery.exec` 方法后,返回节点信息。 */ - type ContextCallback = (result: ContextCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CopyFileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type CopyFileFailCallback = (result: CopyFileFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type CopyFileSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CreateBLEConnectionCompleteCallback = (res: BluetoothError) => void - /** 接口调用失败的回调函数 */ - type CreateBLEConnectionFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type CreateBLEConnectionSuccessCallback = (res: BluetoothError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type CreateBLEPeripheralServerCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type CreateBLEPeripheralServerFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type CreateBLEPeripheralServerSuccessCallback = ( - result: CreateBLEPeripheralServerSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type DisableAlertBeforeUnloadCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type DisableAlertBeforeUnloadFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type DisableAlertBeforeUnloadSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type DownloadFileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type DownloadFileFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type DownloadFileSuccessCallback = ( - result: DownloadFileSuccessCallbackResult - ) => void - /** onProgressUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ - type DownloadTaskOffProgressUpdateCallback = ( - result: DownloadTaskOnProgressUpdateListenerResult - ) => void - /** 下载进度变化事件的监听函数 */ - type DownloadTaskOnProgressUpdateCallback = ( - result: DownloadTaskOnProgressUpdateListenerResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type EditImageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type EditImageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type EditImageSuccessCallback = ( - result: EditImageSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type EnableAlertBeforeUnloadCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type EnableAlertBeforeUnloadFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type EnableAlertBeforeUnloadSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 事件监听函数 */ - type EventCallback = ( - /** 触发事件参数 */ - ...args: any - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ExitFullScreenCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ExitFullScreenFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ExitFullScreenSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ExitMiniProgramCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ExitMiniProgramFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ExitMiniProgramSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ExitPictureInPictureCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ExitPictureInPictureFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ExitPictureInPictureSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ExitVoIPChatCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ExitVoIPChatFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ExitVoIPChatSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type FaceDetectCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type FaceDetectFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type FaceDetectSuccessCallback = ( - result: FaceDetectSuccessCallbackResult - ) => void - /** 回调函数 */ - type FieldsCallback = ( - /** 节点的相关信息 */ - res: IAnyObject - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type FileSystemManagerCloseCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type FileSystemManagerCloseFailCallback = ( - result: CloseFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type FileSystemManagerCloseSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type FileSystemManagerGetFileInfoFailCallback = ( - result: GetFileInfoFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type FileSystemManagerGetFileInfoSuccessCallback = ( - result: FileSystemManagerGetFileInfoSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type FileSystemManagerGetSavedFileListSuccessCallback = ( - result: FileSystemManagerGetSavedFileListSuccessCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type FileSystemManagerRemoveSavedFileFailCallback = ( - result: RemoveSavedFileFailCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type FileSystemManagerSaveFileFailCallback = ( - result: SaveFileFailCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type FromScreenLocationCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type FromScreenLocationFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type FromScreenLocationSuccessCallback = ( - result: GetCenterLocationSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type FstatCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type FstatFailCallback = (result: FstatFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type FstatSuccessCallback = (result: FstatSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type FtruncateCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type FtruncateFailCallback = (result: FtruncateFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type FtruncateSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetAtqaCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type GetAtqaFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type GetAtqaSuccessCallback = (result: GetAtqaSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetAvailableAudioSourcesCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetAvailableAudioSourcesFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type GetAvailableAudioSourcesSuccessCallback = ( - result: GetAvailableAudioSourcesSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBLEDeviceCharacteristicsCompleteCallback = ( - res: BluetoothError - ) => void - /** 接口调用失败的回调函数 */ - type GetBLEDeviceCharacteristicsFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type GetBLEDeviceCharacteristicsSuccessCallback = ( - result: GetBLEDeviceCharacteristicsSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBLEDeviceRSSICompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetBLEDeviceRSSIFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetBLEDeviceRSSISuccessCallback = ( - result: GetBLEDeviceRSSISuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBLEDeviceServicesCompleteCallback = (res: BluetoothError) => void - /** 接口调用失败的回调函数 */ - type GetBLEDeviceServicesFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type GetBLEDeviceServicesSuccessCallback = ( - result: GetBLEDeviceServicesSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBLEMTUCompleteCallback = (res: BluetoothError) => void - /** 接口调用失败的回调函数 */ - type GetBLEMTUFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type GetBLEMTUSuccessCallback = ( - result: GetBLEMTUSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBackgroundAudioPlayerStateCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetBackgroundAudioPlayerStateFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type GetBackgroundAudioPlayerStateSuccessCallback = ( - result: GetBackgroundAudioPlayerStateSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBackgroundFetchDataCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetBackgroundFetchDataFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type GetBackgroundFetchDataSuccessCallback = ( - result: GetBackgroundFetchDataSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBackgroundFetchTokenCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetBackgroundFetchTokenFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type GetBackgroundFetchTokenSuccessCallback = ( - result: GetBackgroundFetchTokenSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBatteryInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetBatteryInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetBatteryInfoSuccessCallback = ( - result: GetBatteryInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBeaconsCompleteCallback = (res: BeaconError) => void - /** 接口调用失败的回调函数 */ - type GetBeaconsFailCallback = (res: BeaconError) => void - /** 接口调用成功的回调函数 */ - type GetBeaconsSuccessCallback = ( - result: GetBeaconsSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBluetoothAdapterStateCompleteCallback = ( - res: BluetoothError - ) => void - /** 接口调用失败的回调函数 */ - type GetBluetoothAdapterStateFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type GetBluetoothAdapterStateSuccessCallback = ( - result: GetBluetoothAdapterStateSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetBluetoothDevicesCompleteCallback = (res: BluetoothError) => void - /** 接口调用失败的回调函数 */ - type GetBluetoothDevicesFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type GetBluetoothDevicesSuccessCallback = ( - result: GetBluetoothDevicesSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetCenterLocationCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetCenterLocationFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetCenterLocationSuccessCallback = ( - result: GetCenterLocationSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetChannelsLiveInfoCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetChannelsLiveInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetChannelsLiveInfoSuccessCallback = ( - result: GetChannelsLiveInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetChannelsLiveNoticeInfoCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetChannelsLiveNoticeInfoFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type GetChannelsLiveNoticeInfoSuccessCallback = ( - result: GetChannelsLiveNoticeInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetChannelsShareKeyCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetChannelsShareKeyFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetChannelsShareKeySuccessCallback = ( - result: GetChannelsShareKeySuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetClipboardDataCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetClipboardDataFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetClipboardDataSuccessCallback = ( - option: GetClipboardDataSuccessCallbackOption - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetConnectedBluetoothDevicesCompleteCallback = ( - res: BluetoothError - ) => void - /** 接口调用失败的回调函数 */ - type GetConnectedBluetoothDevicesFailCallback = ( - res: BluetoothError - ) => void - /** 接口调用成功的回调函数 */ - type GetConnectedBluetoothDevicesSuccessCallback = ( - result: GetConnectedBluetoothDevicesSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetConnectedWifiCompleteCallback = (res: WifiError) => void - /** 接口调用失败的回调函数 */ - type GetConnectedWifiFailCallback = (res: WifiError) => void - /** 接口调用成功的回调函数 */ - type GetConnectedWifiSuccessCallback = ( - result: GetConnectedWifiSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetContentsCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetContentsFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetContentsSuccessCallback = ( - result: GetContentsSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetExtConfigCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetExtConfigFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetExtConfigSuccessCallback = ( - result: GetExtConfigSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetFileInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetFuzzyLocationCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetFuzzyLocationFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetFuzzyLocationSuccessCallback = ( - result: GetFuzzyLocationSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetGroupEnterInfoCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetGroupEnterInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetGroupEnterInfoSuccessCallback = ( - result: GetGroupEnterInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetHCEStateCompleteCallback = (res: NFCError) => void - /** 接口调用失败的回调函数 */ - type GetHCEStateFailCallback = (res: NFCError) => void - /** 接口调用成功的回调函数 */ - type GetHCEStateSuccessCallback = (res: NFCError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetHistoricalBytesCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type GetHistoricalBytesFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type GetHistoricalBytesSuccessCallback = ( - result: GetHistoricalBytesSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetImageInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetImageInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetImageInfoSuccessCallback = ( - result: GetImageInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetLatestUserKeyCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetLatestUserKeyFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetLatestUserKeySuccessCallback = ( - result: GetLatestUserKeySuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetLocalIPAddressCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetLocalIPAddressFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetLocalIPAddressSuccessCallback = ( - result: GetLocalIPAddressSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetLocationCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetLocationFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetLocationSuccessCallback = ( - result: GetLocationSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetMaxTransceiveLengthCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type GetMaxTransceiveLengthFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type GetMaxTransceiveLengthSuccessCallback = ( - result: GetMaxTransceiveLengthSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetNetworkTypeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetNetworkTypeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetNetworkTypeSuccessCallback = ( - result: GetNetworkTypeSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetRandomValuesCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetRandomValuesFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetRandomValuesSuccessCallback = ( - result: GetRandomValuesSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetRegionCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetRegionFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetRegionSuccessCallback = ( - result: GetRegionSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetRotateCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetRotateFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetRotateSuccessCallback = ( - result: GetRotateSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSakCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type GetSakFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type GetSakSuccessCallback = (result: GetSakSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSavedFileInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetSavedFileInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetSavedFileInfoSuccessCallback = ( - result: GetSavedFileInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSavedFileListCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetSavedFileListFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetScaleCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetScaleFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetScaleSuccessCallback = ( - result: GetScaleSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetScreenBrightnessCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetScreenBrightnessFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetScreenBrightnessSuccessCallback = ( - option: GetScreenBrightnessSuccessCallbackOption - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetScreenRecordingStateCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetScreenRecordingStateFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type GetScreenRecordingStateSuccessCallback = ( - result: GetScreenRecordingStateSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSelectedTextRangeCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetSelectedTextRangeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetSelectedTextRangeSuccessCallback = ( - result: GetSelectedTextRangeSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSelectionTextCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetSelectionTextFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetSelectionTextSuccessCallback = ( - result: GetSelectionTextSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSettingCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetSettingFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetSettingSuccessCallback = ( - result: GetSettingSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetShareInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetShareInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetShareInfoSuccessCallback = ( - result: GetGroupEnterInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSkewCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetSkewFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetSkewSuccessCallback = (result: GetSkewSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetStorageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetStorageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetStorageInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetStorageInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetStorageInfoSuccessCallback = ( - option: GetStorageInfoSuccessCallbackOption - ) => void - /** 接口调用成功的回调函数 */ - type GetStorageSuccessCallback<T = any> = ( - result: GetStorageSuccessCallbackResult<T> - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSystemInfoAsyncCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type GetSystemInfoAsyncFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetSystemInfoAsyncSuccessCallback = (result: SystemInfo) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetSystemInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetSystemInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetSystemInfoSuccessCallback = (result: SystemInfo) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetUserInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetUserInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetUserInfoSuccessCallback = ( - result: GetUserInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetUserProfileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetUserProfileFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetUserProfileSuccessCallback = ( - result: GetUserProfileSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetVideoInfoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetVideoInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetVideoInfoSuccessCallback = ( - result: GetVideoInfoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetWeRunDataCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type GetWeRunDataFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type GetWeRunDataSuccessCallback = ( - result: GetWeRunDataSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type GetWifiListCompleteCallback = (res: WifiError) => void - /** 接口调用失败的回调函数 */ - type GetWifiListFailCallback = (res: WifiError) => void - /** 接口调用成功的回调函数 */ - type GetWifiListSuccessCallback = (res: WifiError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type HideHomeButtonCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type HideHomeButtonFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type HideHomeButtonSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type HideKeyboardCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type HideKeyboardFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type HideKeyboardSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type HideLoadingCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type HideLoadingFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type HideLoadingSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type HideNavigationBarLoadingCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type HideNavigationBarLoadingFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type HideNavigationBarLoadingSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type HideShareMenuCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type HideShareMenuFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type HideShareMenuSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type HideTabBarCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type HideTabBarFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type HideTabBarRedDotCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type HideTabBarRedDotFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type HideTabBarRedDotSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type HideTabBarSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type HideToastCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type HideToastFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type HideToastSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type IncludePointsCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type IncludePointsFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type IncludePointsSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type InitFaceDetectCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type InitFaceDetectFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type InitFaceDetectSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type InitMarkerClusterCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type InitMarkerClusterFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type InitMarkerClusterSuccessCallback = (res: GeneralCallbackResult) => void - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - type InnerAudioContextOffErrorCallback = ( - result: InnerAudioContextOnErrorListenerResult - ) => void - /** 音频播放错误事件的监听函数 */ - type InnerAudioContextOnErrorCallback = ( - result: InnerAudioContextOnErrorListenerResult - ) => void - type InnerAudioContextOnStopCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type InsertDividerCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type InsertDividerFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type InsertDividerSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type InsertImageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type InsertImageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type InsertImageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type InsertTextCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type InsertTextFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type InsertTextSuccessCallback = (res: GeneralCallbackResult) => void - /** 监听相交状态变化的回调函数 */ - type IntersectionObserverObserveCallback = ( - result: IntersectionObserverObserveCallbackResult - ) => void - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - type InterstitialAdOffErrorCallback = ( - result: InterstitialAdOnErrorListenerResult - ) => void - /** 插屏错误事件的监听函数 */ - type InterstitialAdOnErrorCallback = ( - result: InterstitialAdOnErrorListenerResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type IsBluetoothDevicePairedCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type IsBluetoothDevicePairedFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type IsBluetoothDevicePairedSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type IsConnectedCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type IsConnectedFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type IsConnectedSuccessCallback = (res: Nfcrwerror) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type Join1v1ChatCompleteCallback = (res: Join1v1ChatError) => void - /** 接口调用失败的回调函数 */ - type Join1v1ChatFailCallback = (res: Join1v1ChatError) => void - /** 接口调用成功的回调函数 */ - type Join1v1ChatSuccessCallback = (res: Join1v1ChatError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type JoinVoIPChatCompleteCallback = (res: JoinVoIPChatError) => void - /** 接口调用失败的回调函数 */ - type JoinVoIPChatFailCallback = (res: JoinVoIPChatError) => void - /** 接口调用成功的回调函数 */ - type JoinVoIPChatSuccessCallback = ( - result: JoinVoIPChatSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type LivePlayerContextSnapshotSuccessCallback = ( - result: LivePlayerContextSnapshotSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type LivePusherContextSnapshotSuccessCallback = ( - result: LivePusherContextSnapshotSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type LoadFontFaceCompleteCallback = ( - result: LoadFontFaceCompleteCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type LoadFontFaceFailCallback = ( - result: LoadFontFaceCompleteCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type LoadFontFaceSuccessCallback = ( - result: LoadFontFaceCompleteCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type LoginCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type LoginFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type LoginSuccessCallback = (result: LoginSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type MakeBluetoothPairCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type MakeBluetoothPairFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type MakeBluetoothPairSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type MakePhoneCallCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type MakePhoneCallFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type MakePhoneCallSuccessCallback = (res: GeneralCallbackResult) => void - /** 监听 media query 状态变化的回调函数 */ - type MediaQueryObserverObserveCallback = ( - result: MediaQueryObserverObserveCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type MkdirCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type MkdirFailCallback = (result: MkdirFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type MkdirSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type MoveAlongCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type MoveAlongFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type MoveAlongSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type MoveToLocationCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type MoveToLocationFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type MoveToLocationSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type MuteCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type MuteFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type MuteSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type NavigateBackCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type NavigateBackFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type NavigateBackMiniProgramCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type NavigateBackMiniProgramFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type NavigateBackMiniProgramSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type NavigateBackSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type NavigateToCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type NavigateToFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type NavigateToMiniProgramCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type NavigateToMiniProgramFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type NavigateToMiniProgramSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type NavigateToSuccessCallback = ( - result: NavigateToSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type NdefCloseCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type NdefCloseFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type NdefCloseSuccessCallback = (res: Nfcrwerror) => void - /** 回调函数,在执行 `SelectorQuery.exec` 方法后,返回节点信息。 */ - type NodeCallback = (result: NodeCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type NotifyBLECharacteristicValueChangeCompleteCallback = ( - res: BluetoothError - ) => void - /** 接口调用失败的回调函数 */ - type NotifyBLECharacteristicValueChangeFailCallback = ( - res: BluetoothError - ) => void - /** 接口调用成功的回调函数 */ - type NotifyBLECharacteristicValueChangeSuccessCallback = ( - res: BluetoothError - ) => void - /** onAccelerometerChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffAccelerometerChangeCallback = (res: GeneralCallbackResult) => void - /** onAppHide 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffAppHideCallback = (res: GeneralCallbackResult) => void - /** onAppShow 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffAppShowCallback = (res: GeneralCallbackResult) => void - /** onAudioInterruptionBegin 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffAudioInterruptionBeginCallback = ( - res: GeneralCallbackResult - ) => void - /** onAudioInterruptionEnd 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffAudioInterruptionEndCallback = (res: GeneralCallbackResult) => void - /** onBLECharacteristicValueChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBLECharacteristicValueChangeCallback = ( - result: OnBLECharacteristicValueChangeListenerResult - ) => void - /** onBLEConnectionStateChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBLEConnectionStateChangeCallback = ( - result: OnBLEConnectionStateChangeListenerResult - ) => void - /** onBLEMTUChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBLEMTUChangeCallback = ( - result: OnBLEMTUChangeListenerResult - ) => void - /** onBLEPeripheralConnectionStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBLEPeripheralConnectionStateChangedCallback = ( - result: OnBLEPeripheralConnectionStateChangedListenerResult - ) => void - /** onBeaconServiceChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBeaconServiceChangeCallback = (res: GeneralCallbackResult) => void - /** onBeaconUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBeaconUpdateCallback = (res: GeneralCallbackResult) => void - /** onBindWifi 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBindWifiCallback = (res: GeneralCallbackResult) => void - /** onBluetoothAdapterStateChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBluetoothAdapterStateChangeCallback = ( - result: OnBluetoothAdapterStateChangeListenerResult - ) => void - /** onBluetoothDeviceFound 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffBluetoothDeviceFoundCallback = (res: GeneralCallbackResult) => void - /** onCanplay 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffCanplayCallback = (res: GeneralCallbackResult) => void - /** onCharacteristicReadRequest 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffCharacteristicReadRequestCallback = ( - result: OnCharacteristicReadRequestListenerResult - ) => void - /** onCharacteristicSubscribed 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffCharacteristicSubscribedCallback = ( - result: OnCharacteristicSubscribedListenerResult - ) => void - /** onCharacteristicUnsubscribed 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffCharacteristicUnsubscribedCallback = ( - result: OnCharacteristicSubscribedListenerResult - ) => void - /** onCharacteristicWriteRequest 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffCharacteristicWriteRequestCallback = ( - result: OnCharacteristicWriteRequestListenerResult - ) => void - /** onChunkReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffChunkReceivedCallback = ( - result: OnChunkReceivedListenerResult - ) => void - /** onCompassChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffCompassChangeCallback = (res: GeneralCallbackResult) => void - /** onConnect 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffConnectCallback = (res: GeneralCallbackResult) => void - /** onCopyUrl 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffCopyUrlCallback = (result: OnCopyUrlListenerResult) => void - /** onDeviceMotionChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffDeviceMotionChangeCallback = (res: GeneralCallbackResult) => void - /** onDiscovered 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffDiscoveredCallback = (result: OnDiscoveredListenerResult) => void - /** onEnded 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffEndedCallback = (res: GeneralCallbackResult) => void - /** onGetWifiList 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffGetWifiListCallback = (result: OnGetWifiListListenerResult) => void - /** onHCEMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffHCEMessageCallback = (result: OnHCEMessageListenerResult) => void - /** onHeadersReceived 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffHeadersReceivedCallback = ( - result: OnHeadersReceivedListenerResult - ) => void - /** onKeyboardHeightChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffKeyboardHeightChangeCallback = ( - result: OnKeyboardHeightChangeListenerResult - ) => void - /** onLazyLoadError 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffLazyLoadErrorCallback = ( - result: OnLazyLoadErrorListenerResult - ) => void - /** onListening 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffListeningCallback = (res: GeneralCallbackResult) => void - /** onLoad 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffLoadCallback = (res: GeneralCallbackResult) => void - /** onLocalServiceDiscoveryStop 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffLocalServiceDiscoveryStopCallback = ( - res: GeneralCallbackResult - ) => void - /** onLocalServiceFound 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffLocalServiceFoundCallback = ( - result: OnLocalServiceFoundListenerResult - ) => void - /** onLocalServiceLost 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffLocalServiceLostCallback = ( - result: OnLocalServiceLostListenerResult - ) => void - /** onLocalServiceResolveFail 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffLocalServiceResolveFailCallback = ( - result: OnLocalServiceLostListenerResult - ) => void - /** onLocationChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffLocationChangeCallback = ( - result: OnLocationChangeListenerResult - ) => void - /** onLocationChangeError 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffLocationChangeErrorCallback = ( - result: OnLocationChangeErrorListenerResult - ) => void - /** onMemoryWarning 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffMemoryWarningCallback = ( - result: OnMemoryWarningListenerResult - ) => void - /** onNetworkStatusChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffNetworkStatusChangeCallback = (res: GeneralCallbackResult) => void - /** onNetworkWeakChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffNetworkWeakChangeCallback = ( - result: OnNetworkWeakChangeListenerResult - ) => void - /** onPageNotFound 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffPageNotFoundCallback = ( - result: OnPageNotFoundListenerResult - ) => void - /** onPause 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffPauseCallback = (res: GeneralCallbackResult) => void - /** onPlay 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffPlayCallback = (res: GeneralCallbackResult) => void - /** onScreenRecordingStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffScreenRecordingStateChangedCallback = ( - result: OnScreenRecordingStateChangedListenerResult - ) => void - /** onSeeked 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffSeekedCallback = (res: GeneralCallbackResult) => void - /** onSeeking 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffSeekingCallback = (res: GeneralCallbackResult) => void - /** onStop 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffStopCallback = (res: GeneralCallbackResult) => void - /** onThemeChange 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffThemeChangeCallback = (result: OnThemeChangeListenerResult) => void - /** onTimeUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffTimeUpdateCallback = (res: GeneralCallbackResult) => void - /** onUnhandledRejection 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffUnhandledRejectionCallback = ( - result: OnUnhandledRejectionListenerResult - ) => void - /** onVoIPChatInterrupted 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffVoIPChatInterruptedCallback = ( - result: OnVoIPChatInterruptedListenerResult - ) => void - /** onVoIPChatMembersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffVoIPChatMembersChangedCallback = ( - result: OnVoIPChatMembersChangedListenerResult - ) => void - /** onVoIPChatSpeakersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffVoIPChatSpeakersChangedCallback = ( - result: OnVoIPChatSpeakersChangedListenerResult - ) => void - /** onVoIPChatStateChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffVoIPChatStateChangedCallback = ( - result: OnVoIPChatStateChangedListenerResult - ) => void - /** onVoIPVideoMembersChanged 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffVoIPVideoMembersChangedCallback = ( - result: OnVoIPVideoMembersChangedListenerResult - ) => void - /** onWaiting 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffWaitingCallback = (res: GeneralCallbackResult) => void - /** onWifiConnected 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffWifiConnectedCallback = ( - result: OnWifiConnectedListenerResult - ) => void - /** onWifiConnectedWithPartialInfo 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffWifiConnectedWithPartialInfoCallback = ( - result: OnWifiConnectedWithPartialInfoListenerResult - ) => void - /** onWindowResize 传入的监听函数。不传此参数则移除所有监听函数。 */ - type OffWindowResizeCallback = ( - result: OnWindowResizeListenerResult - ) => void - /** 加速度数据事件的监听函数 */ - type OnAccelerometerChangeCallback = ( - result: OnAccelerometerChangeListenerResult - ) => void - /** 小程序切后台事件的监听函数 */ - type OnAppHideCallback = (res: GeneralCallbackResult) => void - /** 小程序切前台事件的监听函数 */ - type OnAppShowCallback = ( - /** 启动参数 */ - options: LaunchOptionsApp - ) => void - /** 音频因为受到系统占用而被中断开始事件的监听函数 */ - type OnAudioInterruptionBeginCallback = (res: GeneralCallbackResult) => void - /** 音频中断结束事件的监听函数 */ - type OnAudioInterruptionEndCallback = (res: GeneralCallbackResult) => void - /** 蓝牙低功耗设备的特征值变化事件的监听函数 */ - type OnBLECharacteristicValueChangeCallback = ( - result: OnBLECharacteristicValueChangeListenerResult - ) => void - /** 蓝牙低功耗连接状态改变事件的监听函数 */ - type OnBLEConnectionStateChangeCallback = ( - result: OnBLEConnectionStateChangeListenerResult - ) => void - /** 蓝牙低功耗的最大传输单元变化事件的监听函数 */ - type OnBLEMTUChangeCallback = (result: OnBLEMTUChangeListenerResult) => void - /** 当前外围设备被连接或断开连接事件的监听函数 */ - type OnBLEPeripheralConnectionStateChangedCallback = ( - result: OnBLEPeripheralConnectionStateChangedListenerResult - ) => void - /** 音乐暂停事件的监听函数 */ - type OnBackgroundAudioPauseCallback = (res: GeneralCallbackResult) => void - /** 音乐播放事件的监听函数 */ - type OnBackgroundAudioPlayCallback = (res: GeneralCallbackResult) => void - /** 音乐停止事件的监听函数 */ - type OnBackgroundAudioStopCallback = (res: GeneralCallbackResult) => void - /** 收到 backgroundFetch 数据事件的监听函数 */ - type OnBackgroundFetchDataCallback = ( - result: OnBackgroundFetchDataListenerResult - ) => void - /** Beacon 服务状态变化事件的监听函数 */ - type OnBeaconServiceChangeCallback = ( - result: OnBeaconServiceChangeListenerResult - ) => void - /** Beacon 设备更新事件的监听函数 */ - type OnBeaconUpdateCallback = (result: OnBeaconUpdateListenerResult) => void - /** 当一个 socket 绑定当前 wifi 网络成功时触发该事件的监听函数 */ - type OnBindWifiCallback = (res: GeneralCallbackResult) => void - /** 蓝牙适配器状态变化事件的监听函数 */ - type OnBluetoothAdapterStateChangeCallback = ( - result: OnBluetoothAdapterStateChangeListenerResult - ) => void - /** 搜索到新设备的事件的监听函数 */ - type OnBluetoothDeviceFoundCallback = ( - result: OnBluetoothDeviceFoundListenerResult - ) => void - /** 回调函数 */ - type OnCameraFrameCallback = (result: OnCameraFrameCallbackResult) => void - type OnCanplayCallback = (res: GeneralCallbackResult) => void - /** 已连接的设备请求读当前外围设备的特征值事件的监听函数 */ - type OnCharacteristicReadRequestCallback = ( - result: OnCharacteristicReadRequestListenerResult - ) => void - /** 特征订阅事件的监听函数 */ - type OnCharacteristicSubscribedCallback = ( - result: OnCharacteristicSubscribedListenerResult - ) => void - /** 取消特征订阅事件的监听函数 */ - type OnCharacteristicUnsubscribedCallback = ( - result: OnCharacteristicSubscribedListenerResult - ) => void - /** 已连接的设备请求写当前外围设备的特征值事件的监听函数 */ - type OnCharacteristicWriteRequestCallback = ( - result: OnCharacteristicWriteRequestListenerResult - ) => void - /** 向微信后台请求检查更新结果事件的监听函数 */ - type OnCheckForUpdateCallback = ( - result: OnCheckForUpdateListenerResult - ) => void - /** Transfer-Encoding Chunk Received 事件的监听函数 */ - type OnChunkReceivedCallback = ( - result: OnChunkReceivedListenerResult - ) => void - /** 罗盘数据变化事件的监听函数 */ - type OnCompassChangeCallback = ( - result: OnCompassChangeListenerResult - ) => void - /** 当一个 socket 连接成功建立的时候触发该事件的监听函数 */ - type OnConnectCallback = (res: GeneralCallbackResult) => void - /** 用户点击右上角菜单的「复制链接」按钮时触发的事件的监听函数 */ - type OnCopyUrlCallback = (result: OnCopyUrlListenerResult) => void - /** 设备方向变化事件的监听函数 */ - type OnDeviceMotionChangeCallback = ( - result: OnDeviceMotionChangeListenerResult - ) => void - /** 的监听函数 */ - type OnDiscoveredCallback = (result: OnDiscoveredListenerResult) => void - type OnEndedCallback = (res: GeneralCallbackResult) => void - /** 已录制完指定帧大小的文件事件的监听函数 */ - type OnFrameRecordedCallback = ( - result: OnFrameRecordedListenerResult - ) => void - /** 获取到 Wi-Fi 列表数据事件的监听函数 */ - type OnGetWifiListCallback = (result: OnGetWifiListListenerResult) => void - /** 陀螺仪数据变化事件的监听函数 */ - type OnGyroscopeChangeCallback = ( - result: OnGyroscopeChangeListenerResult - ) => void - /** 接收 NFC 设备消息事件的监听函数 */ - type OnHCEMessageCallback = (result: OnHCEMessageListenerResult) => void - /** HTTP Response Header 事件的监听函数 */ - type OnHeadersReceivedCallback = ( - result: OnHeadersReceivedListenerResult - ) => void - /** 录音因为受到系统占用而被中断开始事件的监听函数 */ - type OnInterruptionBeginCallback = (res: GeneralCallbackResult) => void - /** 录音中断结束事件的监听函数 */ - type OnInterruptionEndCallback = (res: GeneralCallbackResult) => void - /** 键盘高度变化事件的监听函数 */ - type OnKeyboardHeightChangeCallback = ( - result: OnKeyboardHeightChangeListenerResult - ) => void - /** 小程序异步组件加载失败事件的监听函数 */ - type OnLazyLoadErrorCallback = ( - result: OnLazyLoadErrorListenerResult - ) => void - /** 开始监听数据包消息的事件的监听函数 */ - type OnListeningCallback = (res: GeneralCallbackResult) => void - type OnLoadCallback = (res: GeneralCallbackResult) => void - /** mDNS 服务停止搜索的事件的监听函数 */ - type OnLocalServiceDiscoveryStopCallback = ( - res: GeneralCallbackResult - ) => void - /** mDNS 服务发现的事件的监听函数 */ - type OnLocalServiceFoundCallback = ( - result: OnLocalServiceFoundListenerResult - ) => void - /** mDNS 服务离开的事件的监听函数 */ - type OnLocalServiceLostCallback = ( - result: OnLocalServiceLostListenerResult - ) => void - /** mDNS 服务解析失败的事件的监听函数 */ - type OnLocalServiceResolveFailCallback = ( - result: OnLocalServiceLostListenerResult - ) => void - /** 实时地理位置变化事件的监听函数 */ - type OnLocationChangeCallback = ( - result: OnLocationChangeListenerResult - ) => void - /** 的监听函数 */ - type OnLocationChangeErrorCallback = ( - result: OnLocationChangeErrorListenerResult - ) => void - /** 内存不足告警事件的监听函数 */ - type OnMemoryWarningCallback = ( - result: OnMemoryWarningListenerResult - ) => void - /** 网络状态变化事件的监听函数 */ - type OnNetworkStatusChangeCallback = ( - result: OnNetworkStatusChangeListenerResult - ) => void - /** 弱网状态变化事件的监听函数 */ - type OnNetworkWeakChangeCallback = ( - result: OnNetworkWeakChangeListenerResult - ) => void - /** 用户在系统音乐播放面板点击下一曲事件的监听函数 */ - type OnNextCallback = (res: GeneralCallbackResult) => void - /** WebSocket 连接打开事件的监听函数 */ - type OnOpenCallback = (result: OnOpenListenerResult) => void - /** 小程序要打开的页面不存在事件的监听函数 */ - type OnPageNotFoundCallback = (result: OnPageNotFoundListenerResult) => void - type OnPauseCallback = (res: GeneralCallbackResult) => void - type OnPlayCallback = (res: GeneralCallbackResult) => void - /** 用户在系统音乐播放面板点击上一曲事件的监听函数 */ - type OnPrevCallback = (res: GeneralCallbackResult) => void - /** worker线程被系统回收事件的监听函数 */ - type OnProcessKilledCallback = (res: GeneralCallbackResult) => void - /** 录音继续事件的监听函数 */ - type OnResumeCallback = (res: GeneralCallbackResult) => void - /** 用户录屏事件的监听函数 */ - type OnScreenRecordingStateChangedCallback = ( - result: OnScreenRecordingStateChangedListenerResult - ) => void - type OnSeekedCallback = (res: GeneralCallbackResult) => void - type OnSeekingCallback = (res: GeneralCallbackResult) => void - /** WebSocket 连接关闭事件的监听函数 */ - type OnSocketCloseCallback = ( - result: SocketTaskOnCloseListenerResult - ) => void - /** WebSocket 错误事件的监听函数 */ - type OnSocketErrorCallback = (result: GeneralCallbackResult) => void - /** WebSocket 接受到服务器的消息事件的监听函数 */ - type OnSocketMessageCallback = ( - result: SocketTaskOnMessageListenerResult - ) => void - /** WebSocket 连接打开事件的监听函数 */ - type OnSocketOpenCallback = (result: OnSocketOpenListenerResult) => void - /** 录音开始事件的监听函数 */ - type OnStartCallback = (res: GeneralCallbackResult) => void - /** 系统主题改变事件的监听函数 */ - type OnThemeChangeCallback = (result: OnThemeChangeListenerResult) => void - type OnTimeUpdateCallback = (res: GeneralCallbackResult) => void - /** 未处理的 Promise 拒绝事件的监听函数 */ - type OnUnhandledRejectionCallback = ( - result: OnUnhandledRejectionListenerResult - ) => void - /** 小程序更新失败事件的监听函数 */ - type OnUpdateFailedCallback = (res: GeneralCallbackResult) => void - /** 小程序有版本更新事件的监听函数 */ - type OnUpdateReadyCallback = (res: GeneralCallbackResult) => void - /** 用户主动截屏事件的监听函数 */ - type OnUserCaptureScreenCallback = (res: GeneralCallbackResult) => void - /** 被动断开实时语音通话事件的监听函数 */ - type OnVoIPChatInterruptedCallback = ( - result: OnVoIPChatInterruptedListenerResult - ) => void - /** 实时语音通话成员在线状态变化事件的监听函数 */ - type OnVoIPChatMembersChangedCallback = ( - result: OnVoIPChatMembersChangedListenerResult - ) => void - /** 实时语音通话成员通话状态变化事件的监听函数 */ - type OnVoIPChatSpeakersChangedCallback = ( - result: OnVoIPChatSpeakersChangedListenerResult - ) => void - /** 房间状态变化事件的监听函数 */ - type OnVoIPChatStateChangedCallback = ( - result: OnVoIPChatStateChangedListenerResult - ) => void - /** 实时语音通话成员视频状态变化事件的监听函数 */ - type OnVoIPVideoMembersChangedCallback = ( - result: OnVoIPVideoMembersChangedListenerResult - ) => void - /** 音频加载中事件的监听函数 */ - type OnWaitingCallback = (res: GeneralCallbackResult) => void - /** 连接上 Wi-Fi 的事件的监听函数 */ - type OnWifiConnectedCallback = ( - result: OnWifiConnectedListenerResult - ) => void - /** 连接上 Wi-Fi 的事件的监听函数 */ - type OnWifiConnectedWithPartialInfoCallback = ( - result: OnWifiConnectedWithPartialInfoListenerResult - ) => void - /** 窗口尺寸变化事件的监听函数 */ - type OnWindowResizeCallback = (result: OnWindowResizeListenerResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenAppAuthorizeSettingCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type OpenAppAuthorizeSettingFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type OpenAppAuthorizeSettingSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenBluetoothAdapterCompleteCallback = (res: BluetoothError) => void - /** 接口调用失败的回调函数 */ - type OpenBluetoothAdapterFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type OpenBluetoothAdapterSuccessCallback = (res: BluetoothError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenCardCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type OpenCardFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenCardSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenChannelsActivityCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type OpenChannelsActivityFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenChannelsActivitySuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenChannelsEventCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type OpenChannelsEventFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenChannelsEventSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenChannelsLiveCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type OpenChannelsLiveFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenChannelsLiveSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenChannelsUserProfileCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type OpenChannelsUserProfileFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type OpenChannelsUserProfileSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenCustomerServiceChatCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type OpenCustomerServiceChatFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type OpenCustomerServiceChatSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenDocumentCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type OpenDocumentFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenDocumentSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenEmbeddedMiniProgramCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type OpenEmbeddedMiniProgramFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type OpenEmbeddedMiniProgramSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type OpenFailCallback = (result: OpenFailCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenLocationCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type OpenLocationFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenLocationSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenMapAppCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type OpenMapAppFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenMapAppSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenSettingCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type OpenSettingFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenSettingSuccessCallback = ( - result: OpenSettingSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type OpenSuccessCallback = (result: OpenSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenSystemBluetoothSettingCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type OpenSystemBluetoothSettingFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type OpenSystemBluetoothSettingSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type OpenVideoEditorCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type OpenVideoEditorFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type OpenVideoEditorSuccessCallback = ( - result: OpenVideoEditorSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PageScrollToCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PageScrollToFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PageScrollToSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PauseBGMCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PauseBGMFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PauseBGMSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PauseBackgroundAudioCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type PauseBackgroundAudioFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PauseBackgroundAudioSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PauseCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PauseFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PauseSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PauseVoiceCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PauseVoiceFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PauseVoiceSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PlayBGMCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PlayBGMFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PlayBGMSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PlayBackgroundAudioCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type PlayBackgroundAudioFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PlayBackgroundAudioSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PlayCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PlayFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PlaySuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PlayVoiceCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PlayVoiceFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PlayVoiceSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PluginLoginCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PluginLoginFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PluginLoginSuccessCallback = ( - result: PluginLoginSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PreloadAssetsCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PreloadAssetsFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PreloadAssetsSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PreloadSkylineViewCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type PreloadSkylineViewFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PreloadSkylineViewSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PreloadWebviewCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PreloadWebviewFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PreloadWebviewSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PreviewImageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PreviewImageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PreviewImageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type PreviewMediaCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type PreviewMediaFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type PreviewMediaSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ReLaunchCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ReLaunchFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ReLaunchSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ReadBLECharacteristicValueCompleteCallback = ( - res: BluetoothError - ) => void - /** 接口调用失败的回调函数 */ - type ReadBLECharacteristicValueFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type ReadBLECharacteristicValueSuccessCallback = ( - res: BluetoothError - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ReadCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ReadCompressedFileCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ReadCompressedFileFailCallback = ( - result: ReadCompressedFileFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type ReadCompressedFileSuccessCallback = ( - result: ReadCompressedFileSuccessCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ReadFailCallback = (result: ReadFailCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ReadFileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ReadFileFailCallback = (result: ReadFileFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ReadFileSuccessCallback = ( - result: ReadFileSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type ReadSuccessCallback = (result: ReadSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ReadZipEntryCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ReadZipEntryFailCallback = ( - result: ReadZipEntryFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type ReadZipEntrySuccessCallback = ( - result: ReadZipEntrySuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ReaddirCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ReaddirFailCallback = (result: ReaddirFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ReaddirSuccessCallback = (result: ReaddirSuccessCallbackResult) => void - /** 录音结束事件的监听函数 */ - type RecorderManagerOnStopCallback = (result: OnStopListenerResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RedirectToCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RedirectToFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RedirectToSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RedoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RedoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RedoSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveArcCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RemoveArcFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveArcSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveCustomLayerCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RemoveCustomLayerFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveCustomLayerSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveFormatCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RemoveFormatFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveFormatSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveGroundOverlayCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RemoveGroundOverlayFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveGroundOverlaySuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveMarkersCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RemoveMarkersFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveMarkersSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveSavedFileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveSavedFileSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveServiceCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RemoveServiceFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveServiceSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveStorageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RemoveStorageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveStorageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveTabBarBadgeCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RemoveTabBarBadgeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveTabBarBadgeSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RemoveVisualLayerCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RemoveVisualLayerFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RemoveVisualLayerSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RenameCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RenameFailCallback = (result: RenameFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RenameSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RequestCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RequestFailCallback = (err: Err) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RequestFullScreenCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RequestFullScreenFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RequestFullScreenSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RequestOrderPaymentCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RequestOrderPaymentFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RequestOrderPaymentSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RequestPaymentCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RequestPaymentFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RequestPaymentSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RequestPictureInPictureCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RequestPictureInPictureFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type RequestPictureInPictureSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RequestPluginPaymentCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RequestPluginPaymentFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RequestPluginPaymentSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RequestSubscribeDeviceMessageCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RequestSubscribeDeviceMessageFailCallback = ( - result: RequestSubscribeDeviceMessageFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type RequestSubscribeDeviceMessageSuccessCallback = ( - result: RequestSubscribeDeviceMessageSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RequestSubscribeMessageCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type RequestSubscribeMessageFailCallback = ( - result: RequestSubscribeMessageFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type RequestSubscribeMessageSuccessCallback = ( - result: RequestSubscribeMessageSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type RequestSuccessCallback< - T extends string | IAnyObject | ArrayBuffer = - | string - | IAnyObject - | ArrayBuffer - > = (result: RequestSuccessCallbackResult<T>) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ResumeBGMCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ResumeBGMFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ResumeBGMSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ResumeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ResumeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ResumeSuccessCallback = (res: GeneralCallbackResult) => void - /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ - type RewardedVideoAdOffCloseCallback = ( - result: RewardedVideoAdOnCloseListenerResult - ) => void - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - type RewardedVideoAdOffErrorCallback = ( - result: RewardedVideoAdOnErrorListenerResult - ) => void - /** 用户点击 `关闭广告` 按钮的事件的监听函数 */ - type RewardedVideoAdOnCloseCallback = ( - result: RewardedVideoAdOnCloseListenerResult - ) => void - /** 激励视频错误事件的监听函数 */ - type RewardedVideoAdOnErrorCallback = ( - result: RewardedVideoAdOnErrorListenerResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type RmdirCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type RmdirFailCallback = (result: RmdirFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type RmdirSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SaveFileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SaveFileSuccessCallback = ( - result: SaveFileSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SaveFileToDiskCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SaveFileToDiskFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SaveFileToDiskSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SaveImageToPhotosAlbumCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SaveImageToPhotosAlbumFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type SaveImageToPhotosAlbumSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SaveVideoToPhotosAlbumCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SaveVideoToPhotosAlbumFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type SaveVideoToPhotosAlbumSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ScanCodeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ScanCodeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ScanCodeSuccessCallback = ( - result: ScanCodeSuccessCallbackResult - ) => void - /** 回调函数,在执行 `SelectorQuery.exec` 方法后,节点信息会在 `callback` 中返回。 */ - type ScrollOffsetCallback = (result: ScrollOffsetCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SeekBackgroundAudioCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SeekBackgroundAudioFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SeekBackgroundAudioSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SendCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SendFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SendHCEMessageCompleteCallback = (res: NFCError) => void - /** 接口调用失败的回调函数 */ - type SendHCEMessageFailCallback = (res: NFCError) => void - /** 接口调用成功的回调函数 */ - type SendHCEMessageSuccessCallback = (res: NFCError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SendMessageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SendMessageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SendMessageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SendSmsCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SendSmsFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SendSmsSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SendSocketMessageCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SendSocketMessageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SendSocketMessageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SendSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetBGMVolumeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetBGMVolumeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetBGMVolumeSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetBLEMTUCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetBLEMTUFailCallback = (result: SetBLEMTUFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetBLEMTUSuccessCallback = ( - result: SetBLEMTUSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetBackgroundColorCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SetBackgroundColorFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetBackgroundColorSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetBackgroundFetchTokenCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SetBackgroundFetchTokenFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type SetBackgroundFetchTokenSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetBackgroundTextStyleCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SetBackgroundTextStyleFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type SetBackgroundTextStyleSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetBoundaryCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetBoundaryFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetBoundarySuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetCenterOffsetCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetCenterOffsetFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetCenterOffsetSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetClipboardDataCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetClipboardDataFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetClipboardDataSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetContentsCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetContentsFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetContentsSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetEnable1v1ChatCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetEnable1v1ChatFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetEnable1v1ChatSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetEnableDebugCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetEnableDebugFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetEnableDebugSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetInnerAudioOptionCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SetInnerAudioOptionFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetInnerAudioOptionSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetKeepScreenOnCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetKeepScreenOnFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetKeepScreenOnSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetLocMarkerIconCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetLocMarkerIconFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetLocMarkerIconSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetMICVolumeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetMICVolumeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetMICVolumeSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetNavigationBarColorCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SetNavigationBarColorFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type SetNavigationBarColorSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetNavigationBarTitleCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SetNavigationBarTitleFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type SetNavigationBarTitleSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetScreenBrightnessCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SetScreenBrightnessFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetScreenBrightnessSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetStorageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetStorageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetStorageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetTabBarBadgeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetTabBarBadgeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetTabBarBadgeSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetTabBarItemCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetTabBarItemFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetTabBarItemSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetTabBarStyleCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetTabBarStyleFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetTabBarStyleSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetTimeoutCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type SetTimeoutFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type SetTimeoutSuccessCallback = (res: Nfcrwerror) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetTopBarTextCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetTopBarTextFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetTopBarTextSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetVisualEffectOnCaptureCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SetVisualEffectOnCaptureFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type SetVisualEffectOnCaptureSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetWifiListCompleteCallback = (res: WifiError) => void - /** 接口调用失败的回调函数 */ - type SetWifiListFailCallback = (res: WifiError) => void - /** 接口调用成功的回调函数 */ - type SetWifiListSuccessCallback = (res: WifiError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetWindowSizeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetWindowSizeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetWindowSizeSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SetZoomCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SetZoomFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SetZoomSuccessCallback = (result: SetZoomSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShareFileMessageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShareFileMessageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShareFileMessageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShareToWeRunCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShareToWeRunFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShareToWeRunSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShareVideoMessageCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ShareVideoMessageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShareVideoMessageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowActionSheetCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShowActionSheetFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowActionSheetSuccessCallback = ( - result: ShowActionSheetSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowLoadingCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShowLoadingFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowLoadingSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowModalCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShowModalFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowModalSuccessCallback = ( - result: ShowModalSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowNavigationBarLoadingCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ShowNavigationBarLoadingFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type ShowNavigationBarLoadingSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowRedPackageCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShowRedPackageFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowRedPackageSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowShareImageMenuCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type ShowShareImageMenuFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowShareImageMenuSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowShareMenuCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShowShareMenuFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowShareMenuSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowTabBarCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShowTabBarFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowTabBarRedDotCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShowTabBarRedDotFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowTabBarRedDotSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowTabBarSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ShowToastCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ShowToastFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ShowToastSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SnapshotCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SnapshotFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SocketTaskCloseFailCallback = (res: GeneralCallbackResult) => void - /** WebSocket 连接关闭事件的监听函数 */ - type SocketTaskOnCloseCallback = ( - result: SocketTaskOnCloseListenerResult - ) => void - /** WebSocket 接受到服务器的消息事件的监听函数 */ - type SocketTaskOnMessageCallback = ( - result: SocketTaskOnMessageListenerResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartAccelerometerCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StartAccelerometerFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StartAccelerometerSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartAdvertisingCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StartAdvertisingFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StartAdvertisingSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartBeaconDiscoveryCompleteCallback = (res: BeaconError) => void - /** 接口调用失败的回调函数 */ - type StartBeaconDiscoveryFailCallback = (res: BeaconError) => void - /** 接口调用成功的回调函数 */ - type StartBeaconDiscoverySuccessCallback = (res: BeaconError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartBluetoothDevicesDiscoveryCompleteCallback = ( - res: BluetoothError - ) => void - /** 接口调用失败的回调函数 */ - type StartBluetoothDevicesDiscoveryFailCallback = ( - res: BluetoothError - ) => void - /** 接口调用成功的回调函数 */ - type StartBluetoothDevicesDiscoverySuccessCallback = ( - res: BluetoothError - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartCompassCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StartCompassFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StartCompassSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartDeviceMotionListeningCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StartDeviceMotionListeningFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type StartDeviceMotionListeningSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartDiscoveryCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type StartDiscoveryFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type StartDiscoverySuccessCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type StartFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartGyroscopeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StartGyroscopeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StartGyroscopeSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartHCECompleteCallback = (res: NFCError) => void - /** 接口调用失败的回调函数 */ - type StartHCEFailCallback = (res: NFCError) => void - /** 接口调用成功的回调函数 */ - type StartHCESuccessCallback = (res: NFCError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartLocalServiceDiscoveryCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StartLocalServiceDiscoveryFailCallback = ( - result: StartLocalServiceDiscoveryFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type StartLocalServiceDiscoverySuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartLocationUpdateBackgroundCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StartLocationUpdateBackgroundFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type StartLocationUpdateBackgroundSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartLocationUpdateCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StartLocationUpdateFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StartLocationUpdateSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartPreviewCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StartPreviewFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StartPreviewSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartPullDownRefreshCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StartPullDownRefreshFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StartPullDownRefreshSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartRecordCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StartRecordFailCallback = (res: GeneralCallbackResult) => void - /** 超过录制时长上限时会结束录像并触发此回调,录像异常退出时也会触发此回调 */ - type StartRecordTimeoutCallback = ( - result: StartRecordTimeoutCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartSoterAuthenticationCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StartSoterAuthenticationFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type StartSoterAuthenticationSuccessCallback = ( - result: StartSoterAuthenticationSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type StartSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StartWifiCompleteCallback = (res: WifiError) => void - /** 接口调用失败的回调函数 */ - type StartWifiFailCallback = (res: WifiError) => void - /** 接口调用成功的回调函数 */ - type StartWifiSuccessCallback = (res: WifiError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StatCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StatFailCallback = (result: StatFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StatSuccessCallback = (result: StatSuccessCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopAccelerometerCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StopAccelerometerFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopAccelerometerSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopAdvertisingCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopAdvertisingFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopAdvertisingSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopBGMCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopBGMFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopBGMSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopBackgroundAudioCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StopBackgroundAudioFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopBackgroundAudioSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopBeaconDiscoveryCompleteCallback = (res: BeaconError) => void - /** 接口调用失败的回调函数 */ - type StopBeaconDiscoveryFailCallback = (res: BeaconError) => void - /** 接口调用成功的回调函数 */ - type StopBeaconDiscoverySuccessCallback = (res: BeaconError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopBluetoothDevicesDiscoveryCompleteCallback = ( - res: BluetoothError - ) => void - /** 接口调用失败的回调函数 */ - type StopBluetoothDevicesDiscoveryFailCallback = ( - res: BluetoothError - ) => void - /** 接口调用成功的回调函数 */ - type StopBluetoothDevicesDiscoverySuccessCallback = ( - res: BluetoothError - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopCompassCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopCompassFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopCompassSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopDeviceMotionListeningCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StopDeviceMotionListeningFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type StopDeviceMotionListeningSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopDiscoveryCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type StopDiscoveryFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type StopDiscoverySuccessCallback = (res: Nfcrwerror) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopFaceDetectCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopFaceDetectFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopFaceDetectSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopGyroscopeCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopGyroscopeFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopGyroscopeSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopHCECompleteCallback = (res: NFCError) => void - /** 接口调用失败的回调函数 */ - type StopHCEFailCallback = (res: NFCError) => void - /** 接口调用成功的回调函数 */ - type StopHCESuccessCallback = (res: NFCError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopLocalServiceDiscoveryCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StopLocalServiceDiscoveryFailCallback = ( - result: StopLocalServiceDiscoveryFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type StopLocalServiceDiscoverySuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopLocationUpdateCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StopLocationUpdateFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopLocationUpdateSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopPreviewCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopPreviewFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopPreviewSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopPullDownRefreshCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type StopPullDownRefreshFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopPullDownRefreshSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopRecordCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopRecordFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopVoiceCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type StopVoiceFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type StopVoiceSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type StopWifiCompleteCallback = (res: WifiError) => void - /** 接口调用失败的回调函数 */ - type StopWifiFailCallback = (res: WifiError) => void - /** 接口调用成功的回调函数 */ - type StopWifiSuccessCallback = (res: WifiError) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SubscribeVoIPVideoMembersCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type SubscribeVoIPVideoMembersFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type SubscribeVoIPVideoMembersSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SwitchCameraCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SwitchCameraFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SwitchCameraSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type SwitchTabCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type SwitchTabFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type SwitchTabSuccessCallback = (res: GeneralCallbackResult) => void - /** onMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ - type TCPSocketOffMessageCallback = ( - result: TCPSocketOnMessageListenerResult - ) => void - /** 当接收到数据的时触发该事件的监听函数 */ - type TCPSocketOnMessageCallback = ( - result: TCPSocketOnMessageListenerResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type TakePhotoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type TakePhotoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type TakePhotoSuccessCallback = ( - result: TakePhotoSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ToScreenLocationCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ToScreenLocationFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ToScreenLocationSuccessCallback = ( - result: ToScreenLocationSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type ToggleTorchCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type ToggleTorchFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type ToggleTorchSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type TransceiveCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type TransceiveFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type TransceiveSuccessCallback = ( - result: TransceiveSuccessCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type TranslateMarkerCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type TranslateMarkerFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type TranslateMarkerSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type TruncateCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type TruncateFailCallback = (result: TruncateFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type TruncateSuccessCallback = (res: GeneralCallbackResult) => void - /** onClose 传入的监听函数。不传此参数则移除所有监听函数。 */ - type UDPSocketOffCloseCallback = (res: GeneralCallbackResult) => void - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - type UDPSocketOffErrorCallback = (result: GeneralCallbackResult) => void - /** onMessage 传入的监听函数。不传此参数则移除所有监听函数。 */ - type UDPSocketOffMessageCallback = ( - result: UDPSocketOnMessageListenerResult - ) => void - type UDPSocketOnCloseCallback = (res: GeneralCallbackResult) => void - type UDPSocketOnErrorCallback = (result: GeneralCallbackResult) => void - /** 收到消息的事件的监听函数 */ - type UDPSocketOnMessageCallback = ( - result: UDPSocketOnMessageListenerResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type UndoCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type UndoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type UndoSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type UnlinkCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type UnlinkFailCallback = (result: UnlinkFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type UnlinkSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type UnzipCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type UnzipFailCallback = (result: UnzipFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type UnzipSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type UpdateGroundOverlayCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type UpdateGroundOverlayFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type UpdateGroundOverlaySuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type UpdateShareMenuCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type UpdateShareMenuFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type UpdateShareMenuSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type UpdateVoIPChatMuteConfigCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type UpdateVoIPChatMuteConfigFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type UpdateVoIPChatMuteConfigSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type UpdateWeChatAppCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type UpdateWeChatAppFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type UpdateWeChatAppSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type UploadFileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type UploadFileFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type UploadFileSuccessCallback = ( - result: UploadFileSuccessCallbackResult - ) => void - /** onProgressUpdate 传入的监听函数。不传此参数则移除所有监听函数。 */ - type UploadTaskOffProgressUpdateCallback = ( - result: UploadTaskOnProgressUpdateListenerResult - ) => void - /** 上传进度变化事件的监听函数 */ - type UploadTaskOnProgressUpdateCallback = ( - result: UploadTaskOnProgressUpdateListenerResult - ) => void - /** 开启会话回调 */ - type VKSessionStartCallback = ( - /** 参数 status 可选值: - * - 0: 成功; - * - 2000001: 参数错误; - * - 2003000: 会话不可用; - * - 2000000: 系统错误; - * - 2000002: 设备不支持; - * - 2000003: 系统不支持; - * - 2000004: 设备不支持; - * - 2003001: 未开启系统相机权限; - * - 2003002: 未开启小程序相机权限; */ - status: - | 0 - | 2000001 - | 2003000 - | 2000000 - | 2000002 - | 2000003 - | 2000004 - | 2003001 - | 2003002 - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type VibrateLongCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type VibrateLongFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type VibrateLongSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type VibrateShortCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type VibrateShortFailCallback = ( - result: VibrateShortFailCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type VibrateShortSuccessCallback = (res: GeneralCallbackResult) => void - /** 主线程/Worker 线程向当前线程发送的消息的事件的监听函数 */ - type WorkerOnMessageCallback = ( - result: WorkerOnMessageListenerResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type WriteBLECharacteristicValueCompleteCallback = ( - res: BluetoothError - ) => void - /** 接口调用失败的回调函数 */ - type WriteBLECharacteristicValueFailCallback = (res: BluetoothError) => void - /** 接口调用成功的回调函数 */ - type WriteBLECharacteristicValueSuccessCallback = ( - res: BluetoothError - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type WriteCharacteristicValueCompleteCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用失败的回调函数 */ - type WriteCharacteristicValueFailCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type WriteCharacteristicValueSuccessCallback = ( - res: GeneralCallbackResult - ) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type WriteCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type WriteFailCallback = (result: WriteFailCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type WriteFileCompleteCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type WriteFileFailCallback = (result: WriteFileFailCallbackResult) => void - /** 接口调用成功的回调函数 */ - type WriteFileSuccessCallback = (res: GeneralCallbackResult) => void - /** 接口调用结束的回调函数(调用成功、失败都会执行) */ - type WriteNdefMessageCompleteCallback = (res: Nfcrwerror) => void - /** 接口调用失败的回调函数 */ - type WriteNdefMessageFailCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type WriteNdefMessageSuccessCallback = (res: Nfcrwerror) => void - /** 接口调用成功的回调函数 */ - type WriteSuccessCallback = (result: WriteSuccessCallbackResult) => void - /** 接口调用失败的回调函数 */ - type WxGetFileInfoFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type WxGetFileInfoSuccessCallback = ( - result: WxGetFileInfoSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type WxGetSavedFileListSuccessCallback = ( - result: WxGetSavedFileListSuccessCallbackResult - ) => void - /** onError 传入的监听函数。不传此参数则移除所有监听函数。 */ - type WxOffErrorCallback = (res: GeneralCallbackResult) => void - /** 小程序错误事件的监听函数 */ - type WxOnErrorCallback = ( - /** 错误信息,包含堆栈 */ - error: string - ) => void - /** 接口调用失败的回调函数 */ - type WxRemoveSavedFileFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用失败的回调函数 */ - type WxSaveFileFailCallback = (res: GeneralCallbackResult) => void - /** 接口调用成功的回调函数 */ - type WxStartRecordSuccessCallback = ( - result: StartRecordSuccessCallbackResult - ) => void - /** 接口调用成功的回调函数 */ - type WxStopRecordSuccessCallback = (res: GeneralCallbackResult) => void -} diff --git a/scr/weichat_work/typings/types/wx/lib.wx.app.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.app.d.ts deleted file mode 100644 index ef90d8e..0000000 --- a/scr/weichat_work/typings/types/wx/lib.wx.app.d.ts +++ /dev/null @@ -1,270 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) 2022 Tencent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -***************************************************************************** */ - -declare namespace WechatMiniprogram.App { - interface ReferrerInfo { - /** 来源小程序或公众号或App的 appId - * - * 以下场景支持返回 referrerInfo.appId: - * - 1020(公众号 profile 页相关小程序列表): appId - * - 1035(公众号自定义菜单):来源公众号 appId - * - 1036(App 分享消息卡片):来源应用 appId - * - 1037(小程序打开小程序):来源小程序 appId - * - 1038(从另一个小程序返回):来源小程序 appId - * - 1043(公众号模板消息):来源公众号 appId - */ - appId: string - /** 来源小程序传过来的数据,scene=1037或1038时支持 */ - extraData?: any - } - - type SceneValues = - | 1001 - | 1005 - | 1006 - | 1007 - | 1008 - | 1011 - | 1012 - | 1013 - | 1014 - | 1017 - | 1019 - | 1020 - | 1023 - | 1024 - | 1025 - | 1026 - | 1027 - | 1028 - | 1029 - | 1030 - | 1031 - | 1032 - | 1034 - | 1035 - | 1036 - | 1037 - | 1038 - | 1039 - | 1042 - | 1043 - | 1044 - | 1045 - | 1046 - | 1047 - | 1048 - | 1049 - | 1052 - | 1053 - | 1056 - | 1057 - | 1058 - | 1059 - | 1064 - | 1067 - | 1069 - | 1071 - | 1072 - | 1073 - | 1074 - | 1077 - | 1078 - | 1079 - | 1081 - | 1082 - | 1084 - | 1089 - | 1090 - | 1091 - | 1092 - | 1095 - | 1096 - | 1097 - | 1099 - | 1102 - | 1124 - | 1125 - | 1126 - | 1129 - - interface LaunchShowOption { - /** 打开小程序的路径 */ - path: string - /** 打开小程序的query */ - query: IAnyObject - /** 打开小程序的场景值 - * - 1001:发现栏小程序主入口,「最近使用」列表(基础库2.2.4版本起包含「我的小程序」列表) - * - 1005:微信首页顶部搜索框的搜索结果页 - * - 1006:发现栏小程序主入口搜索框的搜索结果页 - * - 1007:单人聊天会话中的小程序消息卡片 - * - 1008:群聊会话中的小程序消息卡片 - * - 1011:扫描二维码 - * - 1012:长按图片识别二维码 - * - 1013:扫描手机相册中选取的二维码 - * - 1014:小程序模板消息 - * - 1017:前往小程序体验版的入口页 - * - 1019:微信钱包(微信客户端7.0.0版本改为支付入口) - * - 1020:公众号 profile 页相关小程序列表 - * - 1023:安卓系统桌面图标 - * - 1024:小程序 profile 页 - * - 1025:扫描一维码 - * - 1026:发现栏小程序主入口,「附近的小程序」列表 - * - 1027:微信首页顶部搜索框搜索结果页「使用过的小程序」列表 - * - 1028:我的卡包 - * - 1029:小程序中的卡券详情页 - * - 1030:自动化测试下打开小程序 - * - 1031:长按图片识别一维码 - * - 1032:扫描手机相册中选取的一维码 - * - 1034:微信支付完成页 - * - 1035:公众号自定义菜单 - * - 1036:App 分享消息卡片 - * - 1037:小程序打开小程序 - * - 1038:从另一个小程序返回 - * - 1039:摇电视 - * - 1042:添加好友搜索框的搜索结果页 - * - 1043:公众号模板消息 - * - 1044:带 shareTicket 的小程序消息卡片 [详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) - * - 1045:朋友圈广告 - * - 1046:朋友圈广告详情页 - * - 1047:扫描小程序码 - * - 1048:长按图片识别小程序码 - * - 1049:扫描手机相册中选取的小程序码 - * - 1052:卡券的适用门店列表 - * - 1053:搜一搜的结果页 - * - 1056:聊天顶部音乐播放器右上角菜单 - * - 1057:钱包中的银行卡详情页 - * - 1058:公众号文章 - * - 1059:体验版小程序绑定邀请页 - * - 1064:微信首页连Wi-Fi状态栏 - * - 1067:公众号文章广告 - * - 1069:移动应用 - * - 1071:钱包中的银行卡列表页 - * - 1072:二维码收款页面 - * - 1073:客服消息列表下发的小程序消息卡片 - * - 1074:公众号会话下发的小程序消息卡片 - * - 1077:摇周边 - * - 1078:微信连Wi-Fi成功提示页 - * - 1079:微信游戏中心 - * - 1081:客服消息下发的文字链 - * - 1082:公众号会话下发的文字链 - * - 1084:朋友圈广告原生页 - * - 1089:微信聊天主界面下拉,「最近使用」栏(基础库2.2.4版本起包含「我的小程序」栏) - * - 1090:长按小程序右上角菜单唤出最近使用历史 - * - 1091:公众号文章商品卡片 - * - 1092:城市服务入口 - * - 1095:小程序广告组件 - * - 1096:聊天记录 - * - 1097:微信支付签约页 - * - 1099:页面内嵌插件 - * - 1102:公众号 profile 页服务预览 - * - 1124:扫“一物一码”打开小程序 - * - 1125:长按图片识别“一物一码” - * - 1126:扫描手机相册中选取的“一物一码” - * - 1129:微信爬虫访问 [详情](https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/sitemap.html) - */ - scene: SceneValues - /** shareTicket,详见 [获取更多转发信息]((转发#获取更多转发信息)) */ - shareTicket: string - /** 当场景为由从另一个小程序或公众号或App打开时,返回此字段 */ - referrerInfo?: ReferrerInfo - } - - interface PageNotFoundOption { - /** 不存在页面的路径 */ - path: string - /** 打开不存在页面的 query */ - query: IAnyObject - /** 是否本次启动的首个页面(例如从分享等入口进来,首个页面是开发者配置的分享页面) */ - isEntryPage: boolean - } - - interface Option { - /** 生命周期回调—监听小程序初始化 - * - * 小程序初始化完成时触发,全局只触发一次。 - */ - onLaunch(options: LaunchShowOption): void - /** 生命周期回调—监听小程序显示 - * - * 小程序启动,或从后台进入前台显示时 - */ - onShow(options: LaunchShowOption): void - /** 生命周期回调—监听小程序隐藏 - * - * 小程序从前台进入后台时 - */ - onHide(): void - /** 错误监听函数 - * - * 小程序发生脚本错误,或者 api - */ - onError(/** 错误信息,包含堆栈 */ error: string): void - /** 页面不存在监听函数 - * - * 小程序要打开的页面不存在时触发,会带上页面信息回调该函数 - * - * **注意:** - * 1. 如果开发者没有添加 `onPageNotFound` 监听,当跳转页面不存在时,将推入微信客户端原生的页面不存在提示页面。 - * 2. 如果 `onPageNotFound` 回调中又重定向到另一个不存在的页面,将推入微信客户端原生的页面不存在提示页面,并且不再回调 `onPageNotFound`。 - * - * 最低基础库: 1.9.90 - */ - onPageNotFound(options: PageNotFoundOption): void - /** - * 小程序有未处理的 Promise 拒绝时触发。也可以使用 [wx.onUnhandledRejection](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html) 绑定监听。注意事项请参考 [wx.onUnhandledRejection](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html)。 - * **参数**:与 [wx.onUnhandledRejection](https://developers.weixin.qq.com/miniprogram/dev/api/base/app/app-event/wx.onUnhandledRejection.html) 一致 - */ - onUnhandledRejection: OnUnhandledRejectionCallback - /** - * 系统切换主题时触发。也可以使用 wx.onThemeChange 绑定监听。 - * - * 最低基础库: 2.11.0 - */ - onThemeChange: OnThemeChangeCallback - } - - type Instance<T extends IAnyObject> = Option & T - type Options<T extends IAnyObject> = Partial<Option> & - T & - ThisType<Instance<T>> - type TrivialInstance = Instance<IAnyObject> - - interface Constructor { - <T extends IAnyObject>(options: Options<T>): void - } - - interface GetAppOption { - /** 在 `App` 未定义时返回默认实现。当App被调用时,默认实现中定义的属性会被覆盖合并到App中。一般用于独立分包 - * - * 最低基础库: 2.2.4 - */ - allowDefault?: boolean - } - - interface GetApp { - <T extends IAnyObject = IAnyObject>(opts?: GetAppOption): Instance<T> - } -} - -declare let App: WechatMiniprogram.App.Constructor -declare let getApp: WechatMiniprogram.App.GetApp diff --git a/scr/weichat_work/typings/types/wx/lib.wx.behavior.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.behavior.d.ts deleted file mode 100644 index f33605b..0000000 --- a/scr/weichat_work/typings/types/wx/lib.wx.behavior.d.ts +++ /dev/null @@ -1,68 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) 2022 Tencent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -***************************************************************************** */ - -declare namespace WechatMiniprogram.Behavior { - type BehaviorIdentifier = string - type Instance< - TData extends DataOption, - TProperty extends PropertyOption, - TMethod extends MethodOption, - TCustomInstanceProperty extends IAnyObject = Record<string, never> - > = Component.Instance<TData, TProperty, TMethod, TCustomInstanceProperty> - type TrivialInstance = Instance<IAnyObject, IAnyObject, IAnyObject> - type TrivialOption = Options<IAnyObject, IAnyObject, IAnyObject> - type Options< - TData extends DataOption, - TProperty extends PropertyOption, - TMethod extends MethodOption, - TCustomInstanceProperty extends IAnyObject = Record<string, never> - > = Partial<Data<TData>> & - Partial<Property<TProperty>> & - Partial<Method<TMethod>> & - Partial<OtherOption> & - Partial<Lifetimes> & - ThisType<Instance<TData, TProperty, TMethod, TCustomInstanceProperty>> - interface Constructor { - < - TData extends DataOption, - TProperty extends PropertyOption, - TMethod extends MethodOption, - TCustomInstanceProperty extends IAnyObject = Record<string, never> - >( - options: Options<TData, TProperty, TMethod, TCustomInstanceProperty> - ): BehaviorIdentifier - } - - type DataOption = Component.DataOption - type PropertyOption = Component.PropertyOption - type MethodOption = Component.MethodOption - type Data<D extends DataOption> = Component.Data<D> - type Property<P extends PropertyOption> = Component.Property<P> - type Method<M extends MethodOption> = Component.Method<M> - - type DefinitionFilter = Component.DefinitionFilter - type Lifetimes = Component.Lifetimes - - type OtherOption = Omit<Component.OtherOption, 'options'> -} -/** 注册一个 `behavior`,接受一个 `Object` 类型的参数。*/ -declare let Behavior: WechatMiniprogram.Behavior.Constructor diff --git a/scr/weichat_work/typings/types/wx/lib.wx.cloud.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.cloud.d.ts deleted file mode 100644 index 95c43d3..0000000 --- a/scr/weichat_work/typings/types/wx/lib.wx.cloud.d.ts +++ /dev/null @@ -1,979 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) 2022 Tencent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -***************************************************************************** */ - -interface IAPIError { - errMsg: string -} - -interface IAPIParam<T = any> { - config?: ICloudConfig - success?: (res: T) => void - fail?: (err: IAPIError) => void - complete?: (val: T | IAPIError) => void -} - -interface IAPISuccessParam { - errMsg: string -} - -type IAPICompleteParam = IAPISuccessParam | IAPIError - -type IAPIFunction<T, P extends IAPIParam<T>> = (param?: P) => Promise<T> - -interface IInitCloudConfig { - env?: - | string - | { - database?: string - functions?: string - storage?: string - } - traceUser?: boolean -} - -interface ICloudConfig { - env?: string - traceUser?: boolean -} - -interface IICloudAPI { - init: (config?: IInitCloudConfig) => void - [api: string]: AnyFunction | IAPIFunction<any, any> -} - -interface ICloudService { - name: string - - getAPIs: () => { [name: string]: IAPIFunction<any, any> } -} - -interface ICloudServices { - [serviceName: string]: ICloudService -} - -interface ICloudMetaData { - session_id: string -} - -declare class InternalSymbol {} - -interface AnyObject { - [x: string]: any -} - -type AnyArray = any[] - -type AnyFunction = (...args: any[]) => any - -/** - * extend wx with cloud - */ -interface WxCloud { - init: (config?: ICloudConfig) => void - - callFunction(param: OQ<ICloud.CallFunctionParam>): void - callFunction( - param: RQ<ICloud.CallFunctionParam> - ): Promise<ICloud.CallFunctionResult> - - uploadFile(param: OQ<ICloud.UploadFileParam>): WechatMiniprogram.UploadTask - uploadFile( - param: RQ<ICloud.UploadFileParam> - ): Promise<ICloud.UploadFileResult> - - downloadFile( - param: OQ<ICloud.DownloadFileParam> - ): WechatMiniprogram.DownloadTask - downloadFile( - param: RQ<ICloud.DownloadFileParam> - ): Promise<ICloud.DownloadFileResult> - - getTempFileURL(param: OQ<ICloud.GetTempFileURLParam>): void - getTempFileURL( - param: RQ<ICloud.GetTempFileURLParam> - ): Promise<ICloud.GetTempFileURLResult> - - deleteFile(param: OQ<ICloud.DeleteFileParam>): void - deleteFile( - param: RQ<ICloud.DeleteFileParam> - ): Promise<ICloud.DeleteFileResult> - - database: (config?: ICloudConfig) => DB.Database - - CloudID: ICloud.ICloudIDConstructor - CDN: ICloud.ICDNConstructor - - callContainer(param: OQ<ICloud.CallContainerParam>): void - callContainer( - param: RQ<ICloud.CallContainerParam> - ): Promise<ICloud.CallContainerResult> - - connectContainer(param: OQ<ICloud.ConnectContainerParam>): void - connectContainer( - param: RQ<ICloud.ConnectContainerParam> - ): Promise<ICloud.ConnectContainerResult> -} - -declare namespace ICloud { - interface ICloudAPIParam<T = any> extends IAPIParam<T> { - config?: ICloudConfig - } - - // === API: callFunction === - type CallFunctionData = AnyObject - - interface CallFunctionResult extends IAPISuccessParam { - result: AnyObject | string | undefined - } - - interface CallFunctionParam extends ICloudAPIParam<CallFunctionResult> { - name: string - data?: CallFunctionData - slow?: boolean - } - // === end === - - // === API: container === - type CallContainerData = AnyObject - - interface CallContainerResult extends IAPISuccessParam { - data: any - statusCode: number - header: Record<string, any> - callID: string - } - - interface CallContainerParam extends ICloudAPIParam<CallContainerResult> { - path: string - service?: string - method?: string - header?: Record<string, any> - data?: any // string, object, ArrayBuffer - dataType?: string - responseType?: string - timeout?: number - verbose?: boolean - followRedirect?: boolean - } - - interface ConnectContainerResult extends IAPISuccessParam { - socketTask: WechatMiniprogram.SocketTask - } - - interface ConnectSocketOptions extends IAPIParam<void> { - header?: Record<string, string> - protocols?: string[] - tcpNoDelay?: boolean - perMessageDeflate?: boolean - timeout?: number - } - - type ConnectContainerParam = Omit< - ConnectSocketOptions, - 'success' | 'fail' | 'complete' - > & - ICloudAPIParam<ConnectContainerResult> & { - service: string - path?: string - } - // === end === - - // === API: uploadFile === - interface UploadFileResult extends IAPISuccessParam { - fileID: string - statusCode: number - } - - interface UploadFileParam extends ICloudAPIParam<UploadFileResult> { - cloudPath: string - filePath: string - header?: AnyObject - } - // === end === - - // === API: downloadFile === - interface DownloadFileResult extends IAPISuccessParam { - tempFilePath: string - statusCode: number - } - - interface DownloadFileParam extends ICloudAPIParam<DownloadFileResult> { - fileID: string - cloudPath?: string - } - // === end === - - // === API: getTempFileURL === - interface GetTempFileURLResult extends IAPISuccessParam { - fileList: GetTempFileURLResultItem[] - } - - interface GetTempFileURLResultItem { - fileID: string - tempFileURL: string - maxAge: number - status: number - errMsg: string - } - - interface GetTempFileURLParam extends ICloudAPIParam<GetTempFileURLResult> { - fileList: string[] - } - // === end === - - // === API: deleteFile === - interface DeleteFileResult extends IAPISuccessParam { - fileList: DeleteFileResultItem[] - } - - interface DeleteFileResultItem { - fileID: string - status: number - errMsg: string - } - - interface DeleteFileParam extends ICloudAPIParam<DeleteFileResult> { - fileList: string[] - } - // === end === - - // === API: CloudID === - abstract class CloudID { - constructor(cloudID: string) - } - - interface ICloudIDConstructor { - new (cloudId: string): CloudID - (cloudId: string): CloudID - } - // === end === - - // === API: CDN === - abstract class CDN { - target: string | ArrayBuffer | ICDNFilePathSpec - constructor(target: string | ArrayBuffer | ICDNFilePathSpec) - } - - interface ICDNFilePathSpec { - type: 'filePath' - filePath: string - } - - interface ICDNConstructor { - new (options: string | ArrayBuffer | ICDNFilePathSpec): CDN - (options: string | ArrayBuffer | ICDNFilePathSpec): CDN - } - // === end === -} - -// === Database === -declare namespace DB { - /** - * The class of all exposed cloud database instances - */ - class Database { - readonly config: ICloudConfig - readonly command: DatabaseCommand - readonly Geo: IGeo - readonly serverDate: () => ServerDate - readonly RegExp: IRegExpConstructor - - private constructor() - - collection(collectionName: string): CollectionReference - } - - class CollectionReference extends Query { - readonly collectionName: string - - private constructor(name: string, database: Database) - - doc(docId: string | number): DocumentReference - - add(options: OQ<IAddDocumentOptions>): void - add(options: RQ<IAddDocumentOptions>): Promise<IAddResult> - } - - class DocumentReference { - private constructor(docId: string | number, database: Database) - - field(object: Record<string, any>): this - - get(options: OQ<IGetDocumentOptions>): void - get(options?: RQ<IGetDocumentOptions>): Promise<IQuerySingleResult> - - set(options: OQ<ISetSingleDocumentOptions>): void - set(options?: RQ<ISetSingleDocumentOptions>): Promise<ISetResult> - - update(options: OQ<IUpdateSingleDocumentOptions>): void - update( - options?: RQ<IUpdateSingleDocumentOptions> - ): Promise<IUpdateResult> - - remove(options: OQ<IRemoveSingleDocumentOptions>): void - remove( - options?: RQ<IRemoveSingleDocumentOptions> - ): Promise<IRemoveResult> - - watch(options: IWatchOptions): RealtimeListener - } - - class RealtimeListener { - // "And Now His Watch Is Ended" - close: () => Promise<void> - } - - class Query { - where(condition: IQueryCondition): Query - - orderBy(fieldPath: string, order: string): Query - - limit(max: number): Query - - skip(offset: number): Query - - field(object: Record<string, any>): Query - - get(options: OQ<IGetDocumentOptions>): void - get(options?: RQ<IGetDocumentOptions>): Promise<IQueryResult> - - count(options: OQ<ICountDocumentOptions>): void - count(options?: RQ<ICountDocumentOptions>): Promise<ICountResult> - - watch(options: IWatchOptions): RealtimeListener - } - - interface DatabaseCommand { - eq(val: any): DatabaseQueryCommand - neq(val: any): DatabaseQueryCommand - gt(val: any): DatabaseQueryCommand - gte(val: any): DatabaseQueryCommand - lt(val: any): DatabaseQueryCommand - lte(val: any): DatabaseQueryCommand - in(val: any[]): DatabaseQueryCommand - nin(val: any[]): DatabaseQueryCommand - - geoNear(options: IGeoNearCommandOptions): DatabaseQueryCommand - geoWithin(options: IGeoWithinCommandOptions): DatabaseQueryCommand - geoIntersects( - options: IGeoIntersectsCommandOptions - ): DatabaseQueryCommand - - and( - ...expressions: Array<DatabaseLogicCommand | IQueryCondition> - ): DatabaseLogicCommand - or( - ...expressions: Array<DatabaseLogicCommand | IQueryCondition> - ): DatabaseLogicCommand - nor( - ...expressions: Array<DatabaseLogicCommand | IQueryCondition> - ): DatabaseLogicCommand - not(expression: DatabaseLogicCommand): DatabaseLogicCommand - - exists(val: boolean): DatabaseQueryCommand - - mod(divisor: number, remainder: number): DatabaseQueryCommand - - all(val: any[]): DatabaseQueryCommand - elemMatch(val: any): DatabaseQueryCommand - size(val: number): DatabaseQueryCommand - - set(val: any): DatabaseUpdateCommand - remove(): DatabaseUpdateCommand - inc(val: number): DatabaseUpdateCommand - mul(val: number): DatabaseUpdateCommand - min(val: number): DatabaseUpdateCommand - max(val: number): DatabaseUpdateCommand - rename(val: string): DatabaseUpdateCommand - bit(val: number): DatabaseUpdateCommand - - push(...values: any[]): DatabaseUpdateCommand - pop(): DatabaseUpdateCommand - shift(): DatabaseUpdateCommand - unshift(...values: any[]): DatabaseUpdateCommand - addToSet(val: any): DatabaseUpdateCommand - pull(val: any): DatabaseUpdateCommand - pullAll(val: any): DatabaseUpdateCommand - - project: { - slice(val: number | [number, number]): DatabaseProjectionCommand - } - - aggregate: { - __safe_props__?: Set<string> - - abs(val: any): DatabaseAggregateCommand - add(val: any): DatabaseAggregateCommand - addToSet(val: any): DatabaseAggregateCommand - allElementsTrue(val: any): DatabaseAggregateCommand - and(val: any): DatabaseAggregateCommand - anyElementTrue(val: any): DatabaseAggregateCommand - arrayElemAt(val: any): DatabaseAggregateCommand - arrayToObject(val: any): DatabaseAggregateCommand - avg(val: any): DatabaseAggregateCommand - ceil(val: any): DatabaseAggregateCommand - cmp(val: any): DatabaseAggregateCommand - concat(val: any): DatabaseAggregateCommand - concatArrays(val: any): DatabaseAggregateCommand - cond(val: any): DatabaseAggregateCommand - convert(val: any): DatabaseAggregateCommand - dateFromParts(val: any): DatabaseAggregateCommand - dateToParts(val: any): DatabaseAggregateCommand - dateFromString(val: any): DatabaseAggregateCommand - dateToString(val: any): DatabaseAggregateCommand - dayOfMonth(val: any): DatabaseAggregateCommand - dayOfWeek(val: any): DatabaseAggregateCommand - dayOfYear(val: any): DatabaseAggregateCommand - divide(val: any): DatabaseAggregateCommand - eq(val: any): DatabaseAggregateCommand - exp(val: any): DatabaseAggregateCommand - filter(val: any): DatabaseAggregateCommand - first(val: any): DatabaseAggregateCommand - floor(val: any): DatabaseAggregateCommand - gt(val: any): DatabaseAggregateCommand - gte(val: any): DatabaseAggregateCommand - hour(val: any): DatabaseAggregateCommand - ifNull(val: any): DatabaseAggregateCommand - in(val: any): DatabaseAggregateCommand - indexOfArray(val: any): DatabaseAggregateCommand - indexOfBytes(val: any): DatabaseAggregateCommand - indexOfCP(val: any): DatabaseAggregateCommand - isArray(val: any): DatabaseAggregateCommand - isoDayOfWeek(val: any): DatabaseAggregateCommand - isoWeek(val: any): DatabaseAggregateCommand - isoWeekYear(val: any): DatabaseAggregateCommand - last(val: any): DatabaseAggregateCommand - let(val: any): DatabaseAggregateCommand - literal(val: any): DatabaseAggregateCommand - ln(val: any): DatabaseAggregateCommand - log(val: any): DatabaseAggregateCommand - log10(val: any): DatabaseAggregateCommand - lt(val: any): DatabaseAggregateCommand - lte(val: any): DatabaseAggregateCommand - ltrim(val: any): DatabaseAggregateCommand - map(val: any): DatabaseAggregateCommand - max(val: any): DatabaseAggregateCommand - mergeObjects(val: any): DatabaseAggregateCommand - meta(val: any): DatabaseAggregateCommand - min(val: any): DatabaseAggregateCommand - millisecond(val: any): DatabaseAggregateCommand - minute(val: any): DatabaseAggregateCommand - mod(val: any): DatabaseAggregateCommand - month(val: any): DatabaseAggregateCommand - multiply(val: any): DatabaseAggregateCommand - neq(val: any): DatabaseAggregateCommand - not(val: any): DatabaseAggregateCommand - objectToArray(val: any): DatabaseAggregateCommand - or(val: any): DatabaseAggregateCommand - pow(val: any): DatabaseAggregateCommand - push(val: any): DatabaseAggregateCommand - range(val: any): DatabaseAggregateCommand - reduce(val: any): DatabaseAggregateCommand - reverseArray(val: any): DatabaseAggregateCommand - rtrim(val: any): DatabaseAggregateCommand - second(val: any): DatabaseAggregateCommand - setDifference(val: any): DatabaseAggregateCommand - setEquals(val: any): DatabaseAggregateCommand - setIntersection(val: any): DatabaseAggregateCommand - setIsSubset(val: any): DatabaseAggregateCommand - setUnion(val: any): DatabaseAggregateCommand - size(val: any): DatabaseAggregateCommand - slice(val: any): DatabaseAggregateCommand - split(val: any): DatabaseAggregateCommand - sqrt(val: any): DatabaseAggregateCommand - stdDevPop(val: any): DatabaseAggregateCommand - stdDevSamp(val: any): DatabaseAggregateCommand - strcasecmp(val: any): DatabaseAggregateCommand - strLenBytes(val: any): DatabaseAggregateCommand - strLenCP(val: any): DatabaseAggregateCommand - substr(val: any): DatabaseAggregateCommand - substrBytes(val: any): DatabaseAggregateCommand - substrCP(val: any): DatabaseAggregateCommand - subtract(val: any): DatabaseAggregateCommand - sum(val: any): DatabaseAggregateCommand - switch(val: any): DatabaseAggregateCommand - toBool(val: any): DatabaseAggregateCommand - toDate(val: any): DatabaseAggregateCommand - toDecimal(val: any): DatabaseAggregateCommand - toDouble(val: any): DatabaseAggregateCommand - toInt(val: any): DatabaseAggregateCommand - toLong(val: any): DatabaseAggregateCommand - toObjectId(val: any): DatabaseAggregateCommand - toString(val: any): DatabaseAggregateCommand - toLower(val: any): DatabaseAggregateCommand - toUpper(val: any): DatabaseAggregateCommand - trim(val: any): DatabaseAggregateCommand - trunc(val: any): DatabaseAggregateCommand - type(val: any): DatabaseAggregateCommand - week(val: any): DatabaseAggregateCommand - year(val: any): DatabaseAggregateCommand - zip(val: any): DatabaseAggregateCommand - } - } - - class DatabaseAggregateCommand {} - - enum LOGIC_COMMANDS_LITERAL { - AND = 'and', - OR = 'or', - NOT = 'not', - NOR = 'nor' - } - - class DatabaseLogicCommand { - and(...expressions: DatabaseLogicCommand[]): DatabaseLogicCommand - or(...expressions: DatabaseLogicCommand[]): DatabaseLogicCommand - nor(...expressions: DatabaseLogicCommand[]): DatabaseLogicCommand - not(expression: DatabaseLogicCommand): DatabaseLogicCommand - } - - enum QUERY_COMMANDS_LITERAL { - // comparison - EQ = 'eq', - NEQ = 'neq', - GT = 'gt', - GTE = 'gte', - LT = 'lt', - LTE = 'lte', - IN = 'in', - NIN = 'nin', - // geo - GEO_NEAR = 'geoNear', - GEO_WITHIN = 'geoWithin', - GEO_INTERSECTS = 'geoIntersects', - // element - EXISTS = 'exists', - // evaluation - MOD = 'mod', - // array - ALL = 'all', - ELEM_MATCH = 'elemMatch', - SIZE = 'size' - } - - class DatabaseQueryCommand extends DatabaseLogicCommand { - eq(val: any): DatabaseLogicCommand - neq(val: any): DatabaseLogicCommand - gt(val: any): DatabaseLogicCommand - gte(val: any): DatabaseLogicCommand - lt(val: any): DatabaseLogicCommand - lte(val: any): DatabaseLogicCommand - in(val: any[]): DatabaseLogicCommand - nin(val: any[]): DatabaseLogicCommand - - exists(val: boolean): DatabaseLogicCommand - - mod(divisor: number, remainder: number): DatabaseLogicCommand - - all(val: any[]): DatabaseLogicCommand - elemMatch(val: any): DatabaseLogicCommand - size(val: number): DatabaseLogicCommand - - geoNear(options: IGeoNearCommandOptions): DatabaseLogicCommand - geoWithin(options: IGeoWithinCommandOptions): DatabaseLogicCommand - geoIntersects( - options: IGeoIntersectsCommandOptions - ): DatabaseLogicCommand - } - - enum PROJECTION_COMMANDS_LITERAL { - SLICE = 'slice' - } - - class DatabaseProjectionCommand {} - - enum UPDATE_COMMANDS_LITERAL { - // field - SET = 'set', - REMOVE = 'remove', - INC = 'inc', - MUL = 'mul', - MIN = 'min', - MAX = 'max', - RENAME = 'rename', - // bitwise - BIT = 'bit', - // array - PUSH = 'push', - POP = 'pop', - SHIFT = 'shift', - UNSHIFT = 'unshift', - ADD_TO_SET = 'addToSet', - PULL = 'pull', - PULL_ALL = 'pullAll' - } - - class DatabaseUpdateCommand {} - - class Batch {} - - /** - * A contract that all API provider must adhere to - */ - class APIBaseContract< - PromiseReturn, - CallbackReturn, - Param extends IAPIParam, - Context = any - > { - getContext(param: Param): Context - - /** - * In case of callback-style invocation, this function will be called - */ - getCallbackReturn(param: Param, context: Context): CallbackReturn - - getFinalParam<T extends Param>(param: Param, context: Context): T - - run<T extends Param>(param: T): Promise<PromiseReturn> - } - - interface IGeoPointConstructor { - new (longitude: number, latitide: number): GeoPoint - new (geojson: IGeoJSONPoint): GeoPoint - (longitude: number, latitide: number): GeoPoint - (geojson: IGeoJSONPoint): GeoPoint - } - - interface IGeoMultiPointConstructor { - new (points: GeoPoint[] | IGeoJSONMultiPoint): GeoMultiPoint - (points: GeoPoint[] | IGeoJSONMultiPoint): GeoMultiPoint - } - - interface IGeoLineStringConstructor { - new (points: GeoPoint[] | IGeoJSONLineString): GeoLineString - (points: GeoPoint[] | IGeoJSONLineString): GeoLineString - } - - interface IGeoMultiLineStringConstructor { - new ( - lineStrings: GeoLineString[] | IGeoJSONMultiLineString - ): GeoMultiLineString - ( - lineStrings: GeoLineString[] | IGeoJSONMultiLineString - ): GeoMultiLineString - } - - interface IGeoPolygonConstructor { - new (lineStrings: GeoLineString[] | IGeoJSONPolygon): GeoPolygon - (lineStrings: GeoLineString[] | IGeoJSONPolygon): GeoPolygon - } - - interface IGeoMultiPolygonConstructor { - new (polygons: GeoPolygon[] | IGeoJSONMultiPolygon): GeoMultiPolygon - (polygons: GeoPolygon[] | IGeoJSONMultiPolygon): GeoMultiPolygon - } - - interface IGeo { - Point: IGeoPointConstructor - MultiPoint: IGeoMultiPointConstructor - LineString: IGeoLineStringConstructor - MultiLineString: IGeoMultiLineStringConstructor - Polygon: IGeoPolygonConstructor - MultiPolygon: IGeoMultiPolygonConstructor - } - - interface IGeoJSONPoint { - type: 'Point' - coordinates: [number, number] - } - - interface IGeoJSONMultiPoint { - type: 'MultiPoint' - coordinates: Array<[number, number]> - } - - interface IGeoJSONLineString { - type: 'LineString' - coordinates: Array<[number, number]> - } - - interface IGeoJSONMultiLineString { - type: 'MultiLineString' - coordinates: Array<Array<[number, number]>> - } - - interface IGeoJSONPolygon { - type: 'Polygon' - coordinates: Array<Array<[number, number]>> - } - - interface IGeoJSONMultiPolygon { - type: 'MultiPolygon' - coordinates: Array<Array<Array<[number, number]>>> - } - - type IGeoJSONObject = - | IGeoJSONPoint - | IGeoJSONMultiPoint - | IGeoJSONLineString - | IGeoJSONMultiLineString - | IGeoJSONPolygon - | IGeoJSONMultiPolygon - - abstract class GeoPoint { - longitude: number - latitude: number - - constructor(longitude: number, latitude: number) - - toJSON(): Record<string, any> - toString(): string - } - - abstract class GeoMultiPoint { - points: GeoPoint[] - - constructor(points: GeoPoint[]) - - toJSON(): IGeoJSONMultiPoint - toString(): string - } - - abstract class GeoLineString { - points: GeoPoint[] - - constructor(points: GeoPoint[]) - - toJSON(): IGeoJSONLineString - toString(): string - } - - abstract class GeoMultiLineString { - lines: GeoLineString[] - - constructor(lines: GeoLineString[]) - - toJSON(): IGeoJSONMultiLineString - toString(): string - } - - abstract class GeoPolygon { - lines: GeoLineString[] - - constructor(lines: GeoLineString[]) - - toJSON(): IGeoJSONPolygon - toString(): string - } - - abstract class GeoMultiPolygon { - polygons: GeoPolygon[] - - constructor(polygons: GeoPolygon[]) - - toJSON(): IGeoJSONMultiPolygon - toString(): string - } - - type GeoInstance = - | GeoPoint - | GeoMultiPoint - | GeoLineString - | GeoMultiLineString - | GeoPolygon - | GeoMultiPolygon - - interface IGeoNearCommandOptions { - geometry: GeoPoint - maxDistance?: number - minDistance?: number - } - - interface IGeoWithinCommandOptions { - geometry: GeoPolygon | GeoMultiPolygon - } - - interface IGeoIntersectsCommandOptions { - geometry: - | GeoPoint - | GeoMultiPoint - | GeoLineString - | GeoMultiLineString - | GeoPolygon - | GeoMultiPolygon - } - - interface IServerDateOptions { - offset: number - } - - abstract class ServerDate { - readonly options: IServerDateOptions - constructor(options?: IServerDateOptions) - } - - interface IRegExpOptions { - regexp: string - options?: string - } - - interface IRegExpConstructor { - new (options: IRegExpOptions): RegExp - (options: IRegExpOptions): RegExp - } - - abstract class RegExp { - readonly regexp: string - readonly options: string - constructor(options: IRegExpOptions) - } - - type DocumentId = string | number - - interface IDocumentData { - _id?: DocumentId - [key: string]: any - } - - type IDBAPIParam = IAPIParam - - interface IAddDocumentOptions extends IDBAPIParam { - data: IDocumentData - } - - type IGetDocumentOptions = IDBAPIParam - - type ICountDocumentOptions = IDBAPIParam - - interface IUpdateDocumentOptions extends IDBAPIParam { - data: IUpdateCondition - } - - interface IUpdateSingleDocumentOptions extends IDBAPIParam { - data: IUpdateCondition - } - - interface ISetDocumentOptions extends IDBAPIParam { - data: IUpdateCondition - } - - interface ISetSingleDocumentOptions extends IDBAPIParam { - data: IUpdateCondition - } - - interface IRemoveDocumentOptions extends IDBAPIParam { - query: IQueryCondition - } - - type IRemoveSingleDocumentOptions = IDBAPIParam - - interface IWatchOptions { - // server realtime data init & change event - onChange: (snapshot: ISnapshot) => void - // error while connecting / listening - onError: (error: any) => void - } - - interface ISnapshot { - id: number - docChanges: ISingleDBEvent[] - docs: Record<string, any> - type?: SnapshotType - } - - type SnapshotType = 'init' - - interface ISingleDBEvent { - id: number - dataType: DataType - queueType: QueueType - docId: string - doc: Record<string, any> - updatedFields?: Record<string, any> - removedFields?: string[] - } - - type DataType = 'init' | 'update' | 'replace' | 'add' | 'remove' | 'limit' - - type QueueType = 'init' | 'enqueue' | 'dequeue' | 'update' - - interface IQueryCondition { - [key: string]: any - } - - type IStringQueryCondition = string - - interface IQueryResult extends IAPISuccessParam { - data: IDocumentData[] - } - - interface IQuerySingleResult extends IAPISuccessParam { - data: IDocumentData - } - - interface IUpdateCondition { - [key: string]: any - } - - type IStringUpdateCondition = string - - interface IAddResult extends IAPISuccessParam { - _id: DocumentId - } - - interface IUpdateResult extends IAPISuccessParam { - stats: { - updated: number - // created: number, - } - } - - interface ISetResult extends IAPISuccessParam { - _id: DocumentId - stats: { - updated: number - created: number - } - } - - interface IRemoveResult extends IAPISuccessParam { - stats: { - removed: number - } - } - - interface ICountResult extends IAPISuccessParam { - total: number - } -} - -type Optional<T> = { [K in keyof T]+?: T[K] } - -type OQ< - T extends Optional< - Record<'complete' | 'success' | 'fail', (...args: any[]) => any> - > -> = - | (RQ<T> & Required<Pick<T, 'success'>>) - | (RQ<T> & Required<Pick<T, 'fail'>>) - | (RQ<T> & Required<Pick<T, 'complete'>>) - | (RQ<T> & Required<Pick<T, 'success' | 'fail'>>) - | (RQ<T> & Required<Pick<T, 'success' | 'complete'>>) - | (RQ<T> & Required<Pick<T, 'fail' | 'complete'>>) - | (RQ<T> & Required<Pick<T, 'fail' | 'complete' | 'success'>>) - -type RQ< - T extends Optional< - Record<'complete' | 'success' | 'fail', (...args: any[]) => any> - > -> = Pick<T, Exclude<keyof T, 'complete' | 'success' | 'fail'>> diff --git a/scr/weichat_work/typings/types/wx/lib.wx.component.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.component.d.ts deleted file mode 100644 index c744fe1..0000000 --- a/scr/weichat_work/typings/types/wx/lib.wx.component.d.ts +++ /dev/null @@ -1,676 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) 2022 Tencent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -***************************************************************************** */ - -declare namespace WechatMiniprogram.Component { - type Instance< - TData extends DataOption, - TProperty extends PropertyOption, - TMethod extends Partial<MethodOption>, - TCustomInstanceProperty extends IAnyObject = {}, - TIsPage extends boolean = false - > = InstanceProperties & - InstanceMethods<TData> & - TMethod & - (TIsPage extends true ? Page.ILifetime : {}) & - TCustomInstanceProperty & { - /** 组件数据,**包括内部数据和属性值** */ - data: TData & PropertyOptionToData<TProperty> - /** 组件数据,**包括内部数据和属性值**(与 `data` 一致) */ - properties: TData & PropertyOptionToData<TProperty> - } - type TrivialInstance = Instance< - IAnyObject, - IAnyObject, - IAnyObject, - IAnyObject - > - type TrivialOption = Options<IAnyObject, IAnyObject, IAnyObject, IAnyObject> - type Options< - TData extends DataOption, - TProperty extends PropertyOption, - TMethod extends MethodOption, - TCustomInstanceProperty extends IAnyObject = {}, - TIsPage extends boolean = false - > = Partial<Data<TData>> & - Partial<Property<TProperty>> & - Partial<Method<TMethod, TIsPage>> & - Partial<OtherOption> & - Partial<Lifetimes> & - ThisType< - Instance< - TData, - TProperty, - TMethod, - TCustomInstanceProperty, - TIsPage - > - > - interface Constructor { - < - TData extends DataOption, - TProperty extends PropertyOption, - TMethod extends MethodOption, - TCustomInstanceProperty extends IAnyObject = {}, - TIsPage extends boolean = false - >( - options: Options< - TData, - TProperty, - TMethod, - TCustomInstanceProperty, - TIsPage - > - ): string - } - type DataOption = Record<string, any> - type PropertyOption = Record<string, AllProperty> - type MethodOption = Record<string, Function> - - interface Data<D extends DataOption> { - /** 组件的内部数据,和 `properties` 一同用于组件的模板渲染 */ - data?: D - } - interface Property<P extends PropertyOption> { - /** 组件的对外属性,是属性名到属性设置的映射表 */ - properties: P - } - interface Method<M extends MethodOption, TIsPage extends boolean = false> { - /** 组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用,参见 [组件间通信与事件](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html) */ - methods: M & (TIsPage extends true ? Partial<Page.ILifetime> : {}) - } - type PropertyType = - | StringConstructor - | NumberConstructor - | BooleanConstructor - | ArrayConstructor - | ObjectConstructor - | null - type ValueType<T extends PropertyType> = T extends null - ? any - : T extends StringConstructor - ? string - : T extends NumberConstructor - ? number - : T extends BooleanConstructor - ? boolean - : T extends ArrayConstructor - ? any[] - : T extends ObjectConstructor - ? IAnyObject - : never - type FullProperty<T extends PropertyType> = { - /** 属性类型 */ - type: T - /** 属性初始值 */ - value?: ValueType<T> - /** 属性值被更改时的响应函数 */ - observer?: - | string - | (( - newVal: ValueType<T>, - oldVal: ValueType<T>, - changedPath: Array<string | number> - ) => void) - /** 属性的类型(可以指定多个) */ - optionalTypes?: ShortProperty[] - } - type AllFullProperty = - | FullProperty<StringConstructor> - | FullProperty<NumberConstructor> - | FullProperty<BooleanConstructor> - | FullProperty<ArrayConstructor> - | FullProperty<ObjectConstructor> - | FullProperty<null> - type ShortProperty = - | StringConstructor - | NumberConstructor - | BooleanConstructor - | ArrayConstructor - | ObjectConstructor - | null - type AllProperty = AllFullProperty | ShortProperty - type PropertyToData<T extends AllProperty> = T extends ShortProperty - ? ValueType<T> - : FullPropertyToData<Exclude<T, ShortProperty>> - type FullPropertyToData<T extends AllFullProperty> = ValueType<T['type']> - // type FullPropertyToData<T extends AllFullProperty> = unknown extends T['value'] ? ValueType<T['type']> : T['value'] - type PropertyOptionToData<P extends PropertyOption> = { - [name in keyof P]: PropertyToData<P[name]> - } - - interface InstanceProperties { - /** 组件的文件路径 */ - is: string - /** 节点id */ - id: string - /** 节点dataset */ - dataset: Record<string, string> - } - - interface InstanceMethods<D extends DataOption> { - /** `setData` 函数用于将数据从逻辑层发送到视图层 - *(异步),同时改变对应的 `this.data` 的值(同步)。 - * - * **注意:** - * - * 1. **直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致**。 - * 1. 仅支持设置可 JSON 化的数据。 - * 1. 单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。 - * 1. 请不要把 data 中任何一项的 value 设为 `undefined` ,否则这一项将不被设置并可能遗留一些潜在问题。 - */ - setData( - /** 这次要改变的数据 - * - * 以 `key: value` 的形式表示,将 `this.data` 中的 `key` 对应的值改变成 `value`。 - * - * 其中 `key` 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,如 `array[2].message`,`a.b.c.d`,并且不需要在 this.data 中预先定义。 - */ - data: Partial<D> & IAnyObject, - /** setData引起的界面更新渲染完毕后的回调函数,最低基础库: `1.5.0` */ - callback?: () => void - ): void - - /** 检查组件是否具有 `behavior` (检查时会递归检查被直接或间接引入的所有behavior) */ - hasBehavior(behavior: Behavior.BehaviorIdentifier): void - /** 触发事件,参见组件事件 */ - triggerEvent<DetailType = any>( - name: string, - detail?: DetailType, - options?: TriggerEventOption - ): void - /** 创建一个 SelectorQuery 对象,选择器选取范围为这个组件实例内 */ - createSelectorQuery(): SelectorQuery - /** 创建一个 IntersectionObserver 对象,选择器选取范围为这个组件实例内 */ - createIntersectionObserver( - options: CreateIntersectionObserverOption - ): IntersectionObserver - /** 使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象(会被 `wx://component-export` 影响) */ - selectComponent(selector: string): TrivialInstance - /** 使用选择器选择组件实例节点,返回匹配到的全部组件实例对象组成的数组 */ - selectAllComponents(selector: string): TrivialInstance[] - /** - * 选取当前组件节点所在的组件实例(即组件的引用者),返回它的组件实例对象(会被 `wx://component-export` 影响) - * - * 最低基础库版本:[`2.8.2`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - **/ - selectOwnerComponent(): TrivialInstance - /** 获取这个关系所对应的所有关联节点,参见 组件间关系 */ - getRelationNodes(relationKey: string): TrivialInstance[] - /** - * 立刻执行 callback ,其中的多个 setData 之间不会触发界面绘制(只有某些特殊场景中需要,如用于在不同组件同时 setData 时进行界面绘制同步) - * - * 最低基础库版本:[`2.4.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - **/ - groupSetData(callback?: () => void): void - /** - * 返回当前页面的 custom-tab-bar 的组件实例 - * - * 最低基础库版本:[`2.6.2`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - **/ - getTabBar(): TrivialInstance - /** - * 返回页面标识符(一个字符串),可以用来判断几个自定义组件实例是不是在同一个页面内 - * - * 最低基础库版本:[`2.7.1`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - **/ - getPageId(): string - /** - * 执行关键帧动画,详见[动画](https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html) - * - * 最低基础库版本:[`2.9.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - **/ - animate( - selector: string, - keyFrames: KeyFrame[], - duration: number, - callback?: () => void - ): void - /** - * 执行关键帧动画,详见[动画](https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html) - * - * 最低基础库版本:[`2.9.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - **/ - animate( - selector: string, - keyFrames: ScrollTimelineKeyframe[], - duration: number, - scrollTimeline: ScrollTimelineOption - ): void - /** - * 清除关键帧动画,详见[动画](https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html) - * - * 最低基础库版本:[`2.9.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - **/ - clearAnimation(selector: string, callback: () => void): void - /** - * 清除关键帧动画,详见[动画](https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html) - * - * 最低基础库版本:[`2.9.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - **/ - clearAnimation( - selector: string, - options?: ClearAnimationOptions, - callback?: () => void - ): void - /** - * 当从另一页面跳转到该页面时,获得与来源页面实例通信当事件通道,详见 [wx.navigateTo]((wx.navigateTo)) - * - * 最低基础库版本:[`2.7.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - getOpenerEventChannel(): EventChannel - /** - * 获取更新性能统计信息,详见 [获取更新性能统计信息]((custom-component/update-perf-stat)) - * - * - * 最低基础库版本:[`2.12.0`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - setUpdatePerformanceListener<WithDataPath extends boolean = false>( - options: SetUpdatePerformanceListenerOption<WithDataPath>, - callback?: UpdatePerformanceListener<WithDataPath> - ): void - } - - interface ComponentOptions { - /** - * [启用多slot支持](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#组件wxml的slot) - */ - multipleSlots?: boolean - /** - * [组件样式隔离](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#组件样式隔离) - */ - addGlobalClass?: boolean - /** - * [组件样式隔离](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#组件样式隔离) - */ - styleIsolation?: - | 'isolated' - | 'apply-shared' - | 'shared' - | 'page-isolated' - | 'page-apply-shared' - | 'page-shared' - /** - * [纯数据字段](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/pure-data.html) 是一些不用于界面渲染的 data 字段,可以用于提升页面更新性能。从小程序基础库版本 2.8.2 开始支持。 - */ - pureDataPattern?: RegExp - /** - * [虚拟化组件节点](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html#%E8%99%9A%E6%8B%9F%E5%8C%96%E7%BB%84%E4%BB%B6%E8%8A%82%E7%82%B9) 使自定义组件内部的第一层节点由自定义组件本身完全决定。从小程序基础库版本 [`2.11.2`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 开始支持 */ - virtualHost?: boolean - } - - interface TriggerEventOption { - /** 事件是否冒泡 - * - * 默认值: `false` - */ - bubbles?: boolean - /** 事件是否可以穿越组件边界,为false时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部 - * - * 默认值: `false` - */ - composed?: boolean - /** 事件是否拥有捕获阶段 - * - * 默认值: `false` - */ - capturePhase?: boolean - } - - interface RelationOption { - /** 目标组件的相对关系 */ - type: 'parent' | 'child' | 'ancestor' | 'descendant' - /** 关系生命周期函数,当关系被建立在页面节点树中时触发,触发时机在组件attached生命周期之后 */ - linked?(target: TrivialInstance): void - /** 关系生命周期函数,当关系在页面节点树中发生改变时触发,触发时机在组件moved生命周期之后 */ - linkChanged?(target: TrivialInstance): void - /** 关系生命周期函数,当关系脱离页面节点树时触发,触发时机在组件detached生命周期之后 */ - unlinked?(target: TrivialInstance): void - /** 如果这一项被设置,则它表示关联的目标节点所应具有的behavior,所有拥有这一behavior的组件节点都会被关联 */ - target?: string - } - - interface PageLifetimes { - /** 页面生命周期回调—监听页面显示 - * - * 页面显示/切入前台时触发。 - */ - show(): void - /** 页面生命周期回调—监听页面隐藏 - * - * 页面隐藏/切入后台时触发。 如 `navigateTo` 或底部 `tab` 切换到其他页面,小程序切入后台等。 - */ - hide(): void - /** 页面生命周期回调—监听页面尺寸变化 - * - * 所在页面尺寸变化时执行 - */ - resize(size: Page.IResizeOption): void - } - - type DefinitionFilter = <T extends TrivialOption>( - /** 使用该 behavior 的 component/behavior 的定义对象 */ - defFields: T, - /** 该 behavior 所使用的 behavior 的 definitionFilter 函数列表 */ - definitionFilterArr?: DefinitionFilter[] - ) => void - - interface Lifetimes { - /** 组件生命周期声明对象,组件的生命周期:`created`、`attached`、`ready`、`moved`、`detached` 将收归到 `lifetimes` 字段内进行声明,原有声明方式仍旧有效,如同时存在两种声明方式,则 `lifetimes` 字段内声明方式优先级最高 - * - * 最低基础库: `2.2.3` */ - lifetimes: Partial<{ - /** - * 在组件实例刚刚被创建时执行,注意此时不能调用 `setData` - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - created(): void - /** - * 在组件实例进入页面节点树时执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - attached(): void - /** - * 在组件在视图层布局完成后执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - ready(): void - /** - * 在组件实例被移动到节点树另一个位置时执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - moved(): void - /** - * 在组件实例被从页面节点树移除时执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - detached(): void - /** - * 每当组件方法抛出错误时执行 - * - * 最低基础库版本:[`2.4.1`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - error(err: Error): void - }> - /** - * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 - * - * 在组件实例刚刚被创建时执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - created(): void - /** - * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 - * - * 在组件实例进入页面节点树时执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - attached(): void - /** - * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 - * - * 在组件在视图层布局完成后执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - ready(): void - /** - * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 - * - * 在组件实例被移动到节点树另一个位置时执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - moved(): void - /** - * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 - * - * 在组件实例被从页面节点树移除时执行 - * - * 最低基础库版本:[`1.6.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - detached(): void - /** - * @deprecated 旧式的定义方式,基础库 `2.2.3` 起请在 lifetimes 中定义 - * - * 每当组件方法抛出错误时执行 - * - * 最低基础库版本:[`2.4.1`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - error(err: Error): void - } - - interface OtherOption { - /** 类似于mixins和traits的组件间代码复用机制,参见 [behaviors](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/behaviors.html) */ - behaviors: Behavior.BehaviorIdentifier[] - /** - * 组件数据字段监听器,用于监听 properties 和 data 的变化,参见 [数据监听器](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/observer.html) - * - * 最低基础库版本:[`2.6.1`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) - */ - observers: Record<string, (...args: any[]) => any> - /** 组件间关系定义,参见 [组件间关系](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html) */ - relations: { - [componentName: string]: RelationOption - } - /** 组件接受的外部样式类,参见 [外部样式类](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html) */ - externalClasses?: string[] - /** 组件所在页面的生命周期声明对象,参见 [组件生命周期](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html) - * - * 最低基础库版本: [`2.2.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) */ - pageLifetimes?: Partial<PageLifetimes> - /** 一些选项(文档中介绍相关特性时会涉及具体的选项设置,这里暂不列举) */ - options: ComponentOptions - - /** 定义段过滤器,用于自定义组件扩展,参见 [自定义组件扩展](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/extend.html) - * - * 最低基础库版本: [`2.2.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) */ - definitionFilter?: DefinitionFilter - /** - * 组件自定义导出,当使用 `behavior: wx://component-export` 时,这个定义段可以用于指定组件被 selectComponent 调用时的返回值,参见 [组件间通信与事件](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html) - * 最低基础库版本: [`2.2.3`](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) */ - export: () => IAnyObject - } - - interface KeyFrame { - /** 关键帧的偏移,范围[0-1] */ - offset?: number - /** 动画缓动函数 */ - ease?: string - /** 基点位置,即 CSS transform-origin */ - transformOrigin?: string - /** 背景颜色,即 CSS background-color */ - backgroundColor?: string - /** 底边位置,即 CSS bottom */ - bottom?: number | string - /** 高度,即 CSS height */ - height?: number | string - /** 左边位置,即 CSS left */ - left?: number | string - /** 宽度,即 CSS width */ - width?: number | string - /** 不透明度,即 CSS opacity */ - opacity?: number | string - /** 右边位置,即 CSS right */ - right?: number | string - /** 顶边位置,即 CSS top */ - top?: number | string - /** 变换矩阵,即 CSS transform matrix */ - matrix?: number[] - /** 三维变换矩阵,即 CSS transform matrix3d */ - matrix3d?: number[] - /** 旋转,即 CSS transform rotate */ - rotate?: number - /** 三维旋转,即 CSS transform rotate3d */ - rotate3d?: number[] - /** X 方向旋转,即 CSS transform rotateX */ - rotateX?: number - /** Y 方向旋转,即 CSS transform rotateY */ - rotateY?: number - /** Z 方向旋转,即 CSS transform rotateZ */ - rotateZ?: number - /** 缩放,即 CSS transform scale */ - scale?: number[] - /** 三维缩放,即 CSS transform scale3d */ - scale3d?: number[] - /** X 方向缩放,即 CSS transform scaleX */ - scaleX?: number - /** Y 方向缩放,即 CSS transform scaleY */ - scaleY?: number - /** Z 方向缩放,即 CSS transform scaleZ */ - scaleZ?: number - /** 倾斜,即 CSS transform skew */ - skew?: number[] - /** X 方向倾斜,即 CSS transform skewX */ - skewX?: number - /** Y 方向倾斜,即 CSS transform skewY */ - skewY?: number - /** 位移,即 CSS transform translate */ - translate?: Array<number | string> - /** 三维位移,即 CSS transform translate3d */ - translate3d?: Array<number | string> - /** X 方向位移,即 CSS transform translateX */ - translateX?: number | string - /** Y 方向位移,即 CSS transform translateY */ - translateY?: number | string - /** Z 方向位移,即 CSS transform translateZ */ - translateZ?: number | string - } - interface ClearAnimationOptions { - /** 基点位置,即 CSS transform-origin */ - transformOrigin?: boolean - /** 背景颜色,即 CSS background-color */ - backgroundColor?: boolean - /** 底边位置,即 CSS bottom */ - bottom?: boolean - /** 高度,即 CSS height */ - height?: boolean - /** 左边位置,即 CSS left */ - left?: boolean - /** 宽度,即 CSS width */ - width?: boolean - /** 不透明度,即 CSS opacity */ - opacity?: boolean - /** 右边位置,即 CSS right */ - right?: boolean - /** 顶边位置,即 CSS top */ - top?: boolean - /** 变换矩阵,即 CSS transform matrix */ - matrix?: boolean - /** 三维变换矩阵,即 CSS transform matrix3d */ - matrix3d?: boolean - /** 旋转,即 CSS transform rotate */ - rotate?: boolean - /** 三维旋转,即 CSS transform rotate3d */ - rotate3d?: boolean - /** X 方向旋转,即 CSS transform rotateX */ - rotateX?: boolean - /** Y 方向旋转,即 CSS transform rotateY */ - rotateY?: boolean - /** Z 方向旋转,即 CSS transform rotateZ */ - rotateZ?: boolean - /** 缩放,即 CSS transform scale */ - scale?: boolean - /** 三维缩放,即 CSS transform scale3d */ - scale3d?: boolean - /** X 方向缩放,即 CSS transform scaleX */ - scaleX?: boolean - /** Y 方向缩放,即 CSS transform scaleY */ - scaleY?: boolean - /** Z 方向缩放,即 CSS transform scaleZ */ - scaleZ?: boolean - /** 倾斜,即 CSS transform skew */ - skew?: boolean - /** X 方向倾斜,即 CSS transform skewX */ - skewX?: boolean - /** Y 方向倾斜,即 CSS transform skewY */ - skewY?: boolean - /** 位移,即 CSS transform translate */ - translate?: boolean - /** 三维位移,即 CSS transform translate3d */ - translate3d?: boolean - /** X 方向位移,即 CSS transform translateX */ - translateX?: boolean - /** Y 方向位移,即 CSS transform translateY */ - translateY?: boolean - /** Z 方向位移,即 CSS transform translateZ */ - translateZ?: boolean - } - interface ScrollTimelineKeyframe { - composite?: 'replace' | 'add' | 'accumulate' | 'auto' - easing?: string - offset?: number | null - [property: string]: string | number | null | undefined - } - interface ScrollTimelineOption { - /** 指定滚动元素的选择器(只支持 scroll-view),该元素滚动时会驱动动画的进度 */ - scrollSource: string - /** 指定滚动的方向。有效值为 horizontal 或 vertical */ - orientation?: string - /** 指定开始驱动动画进度的滚动偏移量,单位 px */ - startScrollOffset: number - /** 指定停止驱动动画进度的滚动偏移量,单位 px */ - endScrollOffset: number - /** 起始和结束的滚动范围映射的时间长度,该时间可用于与关键帧动画里的时间 (duration) 相匹配,单位 ms */ - timeRange: number - } - - interface SetUpdatePerformanceListenerOption<WithDataPath> { - /** 是否返回变更的 data 字段信息 */ - withDataPaths?: WithDataPath - } - interface UpdatePerformanceListener<WithDataPath> { - (res: UpdatePerformance<WithDataPath>): void - } - interface UpdatePerformance<WithDataPath> { - /** 此次更新过程的 ID */ - updateProcessId: number - /** 对于子更新,返回它所属的更新过程 ID */ - parentUpdateProcessId?: number - /** 是否是被合并更新,如果是,则 updateProcessId 表示被合并到的更新过程 ID */ - isMergedUpdate: boolean - /** 此次更新的 data 字段信息,只有 withDataPaths 设为 true 时才会返回 */ - dataPaths: WithDataPath extends true ? string[] : undefined - /** 此次更新进入等待队列时的时间戳 */ - pendingStartTimestamp: number - /** 更新运算开始时的时间戳 */ - updateStartTimestamp: number - /** 更新运算结束时的时间戳 */ - updateEndTimestamp: number - } -} -/** Component构造器可用于定义组件,调用Component构造器时可以指定组件的属性、数据、方法等。 - * - * * 使用 `this.data` 可以获取内部数据和属性值,但不要直接修改它们,应使用 `setData` 修改。 - * * 生命周期函数无法在组件方法中通过 `this` 访问到。 - * * 属性名应避免以 data 开头,即不要命名成 `dataXyz` 这样的形式,因为在 WXML 中, `data-xyz=""` 会被作为节点 dataset 来处理,而不是组件属性。 - * * 在一个组件的定义和使用时,组件的属性名和 data 字段相互间都不能冲突(尽管它们位于不同的定义段中)。 - * * 从基础库 `2.0.9` 开始,对象类型的属性和 data 字段中可以包含函数类型的子字段,即可以通过对象类型的属性字段来传递函数。低于这一版本的基础库不支持这一特性。 - * * `bug` : 对于 type 为 Object 或 Array 的属性,如果通过该组件自身的 `this.setData` 来改变属性值的一个子字段,则依旧会触发属性 observer ,且 observer 接收到的 `newVal` 是变化的那个子字段的值, `oldVal` 为空, `changedPath` 包含子字段的字段名相关信息。 - */ -declare let Component: WechatMiniprogram.Component.Constructor diff --git a/scr/weichat_work/typings/types/wx/lib.wx.event.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.event.d.ts deleted file mode 100644 index 08edd87..0000000 --- a/scr/weichat_work/typings/types/wx/lib.wx.event.d.ts +++ /dev/null @@ -1,1435 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) 2022 Tencent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -***************************************************************************** */ - -declare namespace WechatMiniprogram { - interface Target<DataSet extends IAnyObject = IAnyObject> { - /** 事件组件的 id */ - id: string - /** 当前组件的类型 */ - tagName?: string - /** 事件组件上由 `data-` 开头的自定义属性组成的集合 */ - dataset: DataSet - /** 距离页面顶部的偏移量 */ - offsetTop: number - /** 距离页面左边的偏移量 */ - offsetLeft: number - } - - /** 基础事件参数 */ - interface BaseEvent< - Mark extends IAnyObject = IAnyObject, - CurrentTargetDataset extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = CurrentTargetDataset - > { - /** 事件类型 */ - type: string - /** 页面打开到触发事件所经过的毫秒数 */ - timeStamp: number - /** 事件冒泡路径上所有由 `mark:` 开头的自定义属性组成的集合 */ - mark?: Mark - /** 触发事件的源组件 */ - target: Target<TargetDataset> - /** 事件绑定的当前组件 */ - currentTarget: Target<CurrentTargetDataset> - } - - /** 自定义事件 */ - interface CustomEvent< - Detail extends IAnyObject = IAnyObject, - Mark extends IAnyObject = IAnyObject, - CurrentTargetDataset extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = CurrentTargetDataset - > extends BaseEvent<Mark, CurrentTargetDataset, TargetDataset> { - /** 额外的信息 */ - detail: Detail - } - - /** Touch 对象 */ - interface TouchDetail { - /** 距离页面可显示区域 (屏幕除去导航条) 左上角距离,横向为 X 轴 */ - clientX: number - /** 距离页面可显示区域 (屏幕除去导航条) 左上角距离,纵向为 Y 轴 */ - clientY: number - /** 触摸点的标识符 */ - identifier: number - /** 距离文档左上角的距离,文档的左上角为原点,横向为 X 轴 */ - pageX: number - /** 距离文档左上角的距离,文档的左上角为原点,纵向为 Y 轴 */ - pageY: number - } - - /** canvas Touch 对象 */ - interface TouchCanvasDetail { - /** 触摸点的标识符 */ - identifier: number - /** 距离 Canvas 左上角的距离,Canvas 的左上角为原点 ,横向为X轴 */ - x: number - /** 距离 Canvas 左上角的距离,Canvas 的左上角为原点 纵向为Y轴 */ - y: number - } - - /** 触摸事件 */ - interface Touch< - Detail extends IAnyObject = IAnyObject, - T extends TouchDetail | TouchCanvasDetail = TouchDetail, - Mark extends IAnyObject = IAnyObject, - CurrentTargetDataset extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = CurrentTargetDataset - > extends CustomEvent<Detail, Mark, CurrentTargetDataset, TargetDataset> { - /** 触摸事件,当前停留在屏幕中的触摸点信息的数组 */ - touches: T[] - /** 触摸事件,当前变化的触摸点信息的数组 */ - changedTouches: T[] - } - - /** 触摸事件响应 */ - type TouchEvent< - Detail extends IAnyObject = IAnyObject, - Mark extends IAnyObject = IAnyObject, - CurrentTargetDataset extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = CurrentTargetDataset - > = Touch<Detail, TouchDetail, Mark, CurrentTargetDataset, TargetDataset> - - /** canvas 触摸事件响应 */ - interface TouchCanvas< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > extends Touch<never, TouchCanvasDetail, Mark, never, TargetDataset> { - // canvas 中的触摸事件不可冒泡,所以没有 currentTarget。 - currentTarget: never - } - - /** - * 图片加载成功时触发 - * - * 最低基础库: 2.1.0 - */ - type CoverImageLoad< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 图片宽度 */ - width: number - /** 图片高度 */ - height: number - }, - Mark, - TargetDataset - > - - /** - * 图片加载失败时触发 - * - * 最低基础库: 2.1.0 - */ - type CoverImageError = CustomEvent<GeneralCallbackResult> - - /** - * 拖动过程中触发的事件,event.detail = {x, y, source} - * - * 最低基础库: 1.9.90 - */ - type MovableViewChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - x: number - y: number - /** - * 产生移动的原因 - * - * - `touch` 拖动 - * - `touch-out-of-bounds` 超出移动范围 - * - `out-of-bounds` 超出移动范围后的回弹 - * - `friction` 惯性 - * - `空字符串` setData - */ - source: - | 'touch' - | 'touch-out-of-bounds' - | 'out-of-bounds' - | 'friction' - | '' - }, - Mark, - TargetDataset - > - - /** - * 缩放过程中触发的事件 - * - * event.detail = {x, y, scale} - * - * x 和 y 字段在 2.1.0 之后支持 - * - * 最低基础库: 1.9.90 - */ - type MovableViewScale< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 最低基础库: 2.1.0 */ - x: number - /** 最低基础库: 2.1.0 */ - y: number - scale: number - }, - Mark, - TargetDataset - > - - /** - * 滑动开始事件 (同时开启 enhanced 属性后生效) - * - * detail { scrollTop, scrollLeft } - * - * 最低基础库: 2.12.0 - */ - type ScrollViewDragStart< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - scrollTop: number - scrollLeft: number - }, - Mark, - TargetDataset - > - - /** - * 滑动事件 (同时开启 enhanced 属性后生效) - * - * detail { scrollTop, scrollLeft } - * - * 最低基础库: 2.12.0 - */ - type ScrollViewDragging< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - scrollTop: number - scrollLeft: number - }, - Mark, - TargetDataset - > - - /** - * 滑动结束事件 (同时开启 enhanced 属性后生效) - * - * detail { scrollTop, scrollLeft } - * - * 最低基础库: 2.12.0 - */ - type ScrollViewDragEnd< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - scrollTop: number - scrollLeft: number - }, - Mark, - TargetDataset - > - - /** 滚动到顶部/左边时触发 */ - type ScrollViewScrollToUpper< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - direction: 'top' | 'left' - }, - Mark, - TargetDataset - > - - /** 滚动到底部/右边时触发 */ - type ScrollViewScrollToLower< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - direction: 'bottom' | 'right' - }, - Mark, - TargetDataset - > - - /** - * 滚动时触发 - * - * event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY} - */ - type ScrollViewScroll< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - scrollLeft: number - scrollTop: number - scrollHeight: number - scrollWidth: number - deltaX: number - deltaY: number - }, - Mark, - TargetDataset - > - - type ScrollViewRefresherPulling< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent<never, Mark, TargetDataset> - - type ScrollViewRefresherRefresh< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent<never, Mark, TargetDataset> - - type ScrollViewRefresherRestore< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent<never, Mark, TargetDataset> - - type ScrollViewRefresherAbort< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent<never, Mark, TargetDataset> - - /** - * current 改变时会触发 change 事件 - * - * event.detail = {current, source} - * - * **Tip**: 如果在 bindchange 的事件回调函数中使用 setData 改变 current 值,则有可能导致 setData 被不停地调用,因而通常情况下请在改变 current 值前检测 source 字段来判断是否是由于用户触摸引起。 - */ - type SwiperChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - current: number - /** - * 表示导致变更的原因 - * - * - `autoplay` 自动播放导致 swiper 变化; - * - `touch` 用户划动引起 swiper 变化; - * - 其它原因将用空字符串表示。 - * - * 最低基础库: 1.4.0 - */ - source: '' | 'autoplay' | 'touch' - /** 该 swiper-item 的标识符 */ - currentItemId: string - }, - Mark, - TargetDataset - > - - /** - * swiper-item 的位置发生改变时会触发 transition 事件 - * - * event.detail = {dx: dx, dy: dy} - * - * 最低基础库: 2.4.3 - */ - type SwiperTransition< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - dx: number - dy: number - }, - Mark, - TargetDataset - > - - /** - * 动画结束时会触发 animationfinish 事件 - * - * 最低基础库: 1.9.0 - */ - type SwiperAnimationFinish< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = SwiperChange<Mark, TargetDataset> - - /** - * progress 动画完成事件 - * - * 最低基础库 2.4.1 - */ - type ProgressActiveEnd< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - curPercent: number - }, - Mark, - TargetDataset - > - - /** - * 用户点击该按钮时,会返回获取到的用户信息,回调的 detail 数据与 `wx. getUserInfo` 返回的一致,`open-type="getUserInfo"` 时有效 - * - * 最低基础库: 1.3.0 - */ - type ButtonGetUserInfo = CustomEvent< - GeneralCallbackResult & GetUserInfoSuccessCallbackResult - > - - /** - * 客服消息回调,`open-type="contact"` 时有效 - * - * 最低基础库: 1.5.0 - */ - type ButtonContact = CustomEvent<GeneralCallbackResult> - - /** - * 获取用户手机号回调,`open-type=getPhoneNumber` 时有效 - * - * 最低基础库: 1.2.0 - */ - type ButtonGetPhoneNumber = CustomEvent< - GeneralCallbackResult & Partial<GetWeRunDataSuccessCallbackResult> - > - - /** - * 当使用开放能力时,发生错误的回调,`open-type=launchApp` 时有效 - * - * 最低基础库: 1.9.5 - */ - type ButtonError = CustomEvent<GeneralCallbackResult> - - /** - * 在打开授权设置页后回调,`open-type=openSetting` 时有效 - * - * 最低基础库: 2.0.7 - */ - type ButtonOpenSetting = CustomEvent< - GeneralCallbackResult & OpenSettingSuccessCallbackResult - > - - /** - * 打开 APP 成功的回调,`open-type=launchApp` 时有效 - * - * 最低基础库: 2.4.4 - */ - type ButtonLaunchApp = CustomEvent<GeneralCallbackResult> - - /** - * checkbox-group 中选中项发生改变时触发 change 事件 - * - * detail = { value: ['选中的checkbox 的 value 的数组'] } - */ - type CheckboxGroupChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 选中的 checkbox 的 value 的数组 */ - value: string[] - }, - Mark, - TargetDataset - > - - /** - * 编辑器初始化完成时触发 - * - * 最低基础库: 2.7.0 - */ - type EditorReady< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent<never, Mark, TargetDataset> - - /** - * 编辑器聚焦时触发 - * - * event.detail = {html, text, delta} - * - * 最低基础库: 2.7.0 - */ - type EditorFocus< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - html: string - text: string - // eslint-disable-next-line @typescript-eslint/no-explicit-any - delta: any[] - }, - Mark, - TargetDataset - > - - /** - * 编辑器失去焦点时触发 - * - * detail = {html, text, delta} - * - * 最低基础库: 2.7.0 - */ - type EditorBlur< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = EditorFocus<Mark, TargetDataset> - - /** - * 编辑器内容改变时触发 - * - * detail = {html, text, delta} - * - * 最低基础库: 2.7.0 - */ - type EditorInput< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = EditorFocus<Mark, TargetDataset> - - /** - * 通过 Context 方法改变编辑器内样式时触发,返回选区已设置的样式 - * - * 最低基础库: 2.7.0 - */ - type EditorStatusChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - Partial<{ - align: 'left' | 'center' | 'right' | 'justify' - bold: 'strong' - italic: 'em' - underline: true - strike: 'del' - lineHeight: string - letterSpacing: string - marginTop: string - marginBottom: string - fontFamily: string - fontSize: string - color: string - backgroundColor: string - list: 'checked' | 'unchecked' | 'ordered' | 'bullet' - indent: number - header: number - script: 'sub' | 'super' - direction: 'rtl' - }>, - Mark, - TargetDataset - > - - /** - * 携带 form 中的数据触发 submit 事件 - * - * event.detail = {value : {'name': 'value'} , formId: ''} - */ - type FormSubmit< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - formId?: unknown - target: Target - /** 表单中的数据,需要在表单组件中加上 name 来作为 key。 */ - value: IAnyObject - }, - Mark, - TargetDataset - > - - /** 表单重置时会触发 reset 事件 */ - type FormReset< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - target: Target - }, - Mark, - TargetDataset - > - - /** 键盘输入时触发 - * - * event.detail = {value, cursor, keyCode} - * - * 处理函数可以直接 return 一个字符串,将替换输入框的内容。 - */ - type Input< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 输入框内容 */ - value: string - /** 光标位置 */ - cursor: number - /** keyCode 为键值 (目前工具还不支持返回keyCode参数) `2.1.0` 起支持 */ - keyCode?: number - }, - Mark, - TargetDataset - > - - /** - * 输入框聚焦时触发 - * - * event.detail = { value, height } - */ - type InputFocus< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 输入框内容 */ - value: string - /** 键盘高度, 在基础库 `1.9.90` 起支持 */ - height: number - }, - Mark, - TargetDataset - > - - /** - * 输入框失去焦点时触发 - * - * event.detail = {value: value} - */ - type InputBlur< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 输入框内容 */ - value: string - }, - Mark, - TargetDataset - > - - /** - * 点击完成按钮时触发 - * - * event.detail = {value: value} - */ - type InputConfirm< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 输入框内容 */ - value: string - }, - Mark, - TargetDataset - > - - /** - * 键盘高度发生变化的时候触发此事件 - * - * event.detail = {height: height, duration: duration} - * - * **tip**: 键盘高度发生变化,keyboardheightchange 事件可能会多次触发,开发者对于相同的 height 值应该忽略掉 - * - * 最低基础库: `2.7.0` - */ - type InputKeyboardHeightChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 键盘高度 */ - height: number - duration: number - }, - Mark, - TargetDataset - > - - /** - * 取消选择时触发 - * - * 最低基础库: 1.9.90 - */ - type PickerCancel< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent<never, Mark, TargetDataset> - - /** - * value 改变时触发 change 事件 - * - * event.detail = {value} - * - * 当 mode = region 时 (最低基础库: 1.4.0) - * - * value 改变时触发 change 事件,event.detail = {value, code, postcode},其中字段 code 是统计用区划代码,postcode 是邮政编码 - */ - type PickerChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** - * 当 mode = selector 时, 返回当前选择的 value - * - * 当 mode = multiSelector 时, 返回一个索引数组 - * - * 当 mode = time | date 时, 返回 `"12:01"` | `"2016-09-01"` - * - * 当 mode = region 时, 返回 `["广东省", "广州市", "海珠区"]` - */ - value: string | number[] | [string, string, string] - /** 统计用区划代码 当 mode = region 时有效 (最低基础库: 1.4.0) */ - code: [string, string, string] - /** 邮政编码 当 mode = region 时有效 (最低基础库: 1.4.0) */ - postcode: string - }, - Mark, - TargetDataset - > - - /** 列改变时触发 当 `mode = multiSelector` 时有效 */ - type PickerColumnChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 修改的列 */ - column: number - value: number - }, - Mark, - TargetDataset - > - - /** - * 滚动选择时触发 change 事件 - * - * event.detail = {value} - */ - type PickerViewChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** value 为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项 (下标从 0 开始) */ - value: number[] - }, - Mark, - TargetDataset - > - - /** - * 当滚动选择开始时候触发事件 - * - * 最低基础库: 2.3.1 - */ - type PickerViewPickStart< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent<never, Mark, TargetDataset> - - /** - * 当滚动选择结束时候触发事件 - * - * 最低基础库: 2.3.1 - */ - type PickerViewPickEnd< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent<never, Mark, TargetDataset> - - /** radio-group 切换事件 */ - type RadioGroupChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - /** radio-group 中选中项的 value */ - { - value: string - }, - Mark, - TargetDataset - > - - /** - * 完成一次拖动后触发的事件 - * - * event.detail = {value} - */ - type SliderChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** slider 的数值 0 - 100 */ - value: number - }, - Mark, - TargetDataset - > - - /** - * 拖动过程中触发的事件 - * - * event.detail = {value} - * - * 最低基础库: 1.7.0 - */ - type SliderChanging< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = SliderChange<Mark, TargetDataset> - - /** - * checked 改变时触发 change 事件 - * - * event.detail={ value} - */ - type SwitchChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - value: boolean - }, - Mark, - TargetDataset - > - - /** - * 输入框聚焦时触发 - * - * event.detail = { value, height },height 为键盘高度 - * - * 在基础库 1.9.90 起支持 - */ - type TextareaFocus< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = InputFocus<Mark, TargetDataset> - - /** - * 输入框失去焦点时触发 - * - * event.detail = {value, cursor} - * - * **tip**: textarea 的 blur 事件会晚于页面上的 tap 事件,如果需要在 button 的点击事件获取 textarea,可以使用 form 的 bindsubmit。 - */ - type TextareaBlur< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = InputBlur<Mark, TargetDataset> - - /** - * 输入框行数变化时调用 - * - * event.detail = {height: 0, heightRpx: 0, lineCount: 0} - */ - type TextareaLineChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = CustomEvent< - { - /** 输入框高度(px) */ - height: number - /** 输入框高度(rpx) */ - heightRpx: number - /** 行数 */ - lineCount: number - /** 行高 */ - lineHeight: number - }, - Mark, - TargetDataset - > - - /** - * 当键盘输入时,触发 input 事件 - * - * event.detail = {value, cursor, keyCode} - * - * keyCode 为键值,目前工具还不支持返回 keyCode 参数。 - * - * **tip**: 不建议在多行文本上对用户的输入进行修改,所以 **bindinput 处理函数的返回值并不会反映到 textarea 上** - */ - type TextareaInput< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = Input<Mark, TargetDataset> - - /** - * 点击完成时, 触发 confirm 事件 - * - * event.detail = {value: value} - */ - type TextareaConfirm< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = InputConfirm<Mark, TargetDataset> - - /** - * 键盘高度发生变化的时候触发此事件 - * - * event.detail = {height: height, duration: duration} - * - * **tip**: 键盘高度发生变化,keyboardheightchange事件可能会多次触发,开发者对于相同的height值应该忽略掉 - * - * 最低基础库: 2.7.0 - */ - type TextareaKeyboardHeightChange< - Mark extends IAnyObject = IAnyObject, - TargetDataset extends IAnyObject = IAnyObject - > = InputKeyboardHeightChange<Mark, TargetDataset> - - /** - * 功能页返回,且操作成功时触发, detail 格式与具体功能页相关 - * - * 最低基础库: 2.1.0 - */ - type FunctionalNavigatorSuccess< - Detail extends IAnyObject = IAnyObject - > = CustomEvent<Detail, never, never> - - /** - * 功能页返回,且操作失败时触发, detail 格式与具体功能页相关 - * - * 最低基础库: 2.1.0 - */ - type FunctionalNavigatorFail< - Detail extends IAnyObject = IAnyObject - > = CustomEvent<Detail, never, never> - - /** - * 当 `target="miniProgram"` 时有效,跳转小程序成功 - * - * 最低基础库: 2.0.7 - */ - type NavigatorSuccess = CustomEvent - /** - * 当 `target="miniProgram"` 时有效,跳转小程序失败 - * - * `tips`: 需要用户确认跳转 从 2.3.0 版本开始,在跳转至其他小程序前,将统一增加弹窗,询问是否跳转,用户确认后才可以跳转其他小程序。如果用户点击取消,则回调 fail cancel。 - * - * 最低基础库: 2.0.7 - */ - type NavigatorFail = CustomEvent - /** - * 当 `target="miniProgram"` 时有效,跳转小程序完成 - * - * 最低基础库: 2.0.7 - */ - type NavigatorComplete = CustomEvent - - /** - * 当发生错误时触发 error 事件 - * - * detail = {errMsg:MediaError.code} - */ - type AudioError = CustomEvent<{ - /** - * MediaError.code - * - * - 1 获取资源被用户禁止 - * - 2 网络错误 - * - 3 解码错误 - * - 4 不合适资源 - */ - errMsg: 1 | 2 | 3 | 4 - }> - - /** 当开始/继续播放时触发play事件 */ - type AudioPlay = CustomEvent - - /** 当暂停播放时触发 pause 事件 */ - type AudioPause = CustomEvent - - /** - * 当播放进度改变时触发 timeupdate 事件 - * - * detail = {currentTime, duration} - */ - type AudioTimeUpdate = CustomEvent<{ - currentTime: number - duration: number - }> - - /** 当播放到末尾时触发 ended 事件 */ - type AudioEnded = CustomEvent - - /** 摄像头在非正常终止时触发,如退出后台等情况 */ - type CameraStop = CustomEvent - - /** 用户不允许使用摄像头时触发 */ - type CameraError = CustomEvent - - /** - * 相机初始化完成时触发 - * - * 最低基础库: 2.7.0 - */ - type CameraInitDone = CustomEvent - - /** - * 在扫码识别成功时触发,仅在 mode="scanCode" 时生效 - * - * 最低基础库: 2.1.0 - */ - type CameraScanCode = CustomEvent - - /** 当错误发生时触发,event.detail = {errMsg} */ - type ImageError = CoverImageError - /** 当图片载入完毕时触发,event.detail = {height, width} */ - type ImageLoad = CoverImageLoad - - /** - * 播放状态变化事件,detail = {code} - * - * 最低基础库 1.7.0 - */ - type LivePlayerStateChange = CustomEvent<{ - /** - * 状态码 - * - * - `2001` 已经连接服务器 - * - `2002` 已经连接服务器,开始拉流 - * - `2003` 网络接收到首个视频数据包(IDR) - * - `2004` 视频播放开始 - * - `2005` 视频播放进度 - * - `2006` 视频播放结束 - * - `2007` 视频播放Loading - * - `2008` 解码器启动 - * - `2009` 视频分辨率改变 - * - `-2301` 网络断连,且经多次重连抢救无效,更多重试请自行重启播放 - * - `-2302` 获取加速拉流地址失败 - * - `2101` 当前视频帧解码失败 - * - `2102` 当前音频帧解码失败 - * - `2103` 网络断连, 已启动自动重连 - * - `2104` 网络来包不稳: 可能是下行带宽不足,或由于主播端出流不均匀 - * - `2105` 当前视频播放出现卡顿 - * - `2106` 硬解启动失败,采用软解 - * - `2107` 当前视频帧不连续,可能丢帧 - * - `2108` 当前流硬解第一个I帧失败,SDK自动切软解 - * - `3001` RTMP -DNS解析失败 - * - `3002` RTMP服务器连接失败 - * - `3003` RTMP服务器握手失败 - * - `3005` RTMP 读/写失败 - */ - code: number - }> - - /** - * 全屏变化事件,detail = {direction, fullScreen} - * - * 最低基础库 1.7.0 - */ - type LivePlayerFullScreenChange = CustomEvent<{ - direction: 'vertical' | 'horizontal' - fullScreen: boolean - }> - - /** - * 网络状态通知,detail = {info} - * - * 最低基础库 1.9.0 - */ - type LivePlayerNetStatus = CustomEvent<{ - /** - * 网络状态数据 - * - * - * - `videoBitrate` 当前视频编/码器输出的比特率,单位 kbps - * - `audioBitrate` 当前音频编/码器输出的比特率,单位 kbps - * - `videoFPS` 当前视频帧率 - * - `videoGOP` 当前视频 GOP,也就是每两个关键帧(I帧)间隔时长,单位 s - * - `netSpeed` 当前的发送/接收速度 - * - `netJitter` 网络抖动情况,抖动越大,网络越不稳定 - * - `videoWidth` 视频画面的宽度 - * - `videoHeight` 视频画面的高度 - */ - info: - | 'videoBitrate' - | 'audioBitrate' - | 'videoFPS' - | 'videoGOP' - | 'netSpeed' - | 'netJitter' - | 'videoWidth' - | 'videoHeight' - }> - - /** - * 状态变化事件,detail = {code} - * - * 最低基础库: 1.7.0 - */ - type LivePusherStateChange = CustomEvent<{ - /** - * 状态码 - * - * - `1001` 已经连接推流服务器 - * - `1002` 已经与服务器握手完毕,开始推流 - * - `1003` 打开摄像头成功 - * - `1004` 录屏启动成功 - * - `1005` 推流动态调整分辨率 - * - `1006` 推流动态调整码率 - * - `1007` 首帧画面采集完成 - * - `1008` 编码器启动 - * - `-1301` 打开摄像头失败 - * - `-1302` 打开麦克风失败 - * - `-1303` 视频编码失败 - * - `-1304` 音频编码失败 - * - `-1305` 不支持的视频分辨率 - * - `-1306` 不支持的音频采样率 - * - `-1307` 网络断连,且经多次重连抢救无效,更多重试请自行重启推流 - * - `-1308` 开始录屏失败,可能是被用户拒绝 - * - `-1309` 录屏失败,不支持的Android系统版本,需要5.0以上的系统 - * - `-1310` 录屏被其他应用打断了 - * - `-1311` Android Mic打开成功,但是录不到音频数据 - * - `-1312` 录屏动态切横竖屏失败 - * - `1101` 网络状况不佳: 上行带宽太小,上传数据受阻 - * - `1102` 网络断连, 已启动自动重连 - * - `1103` 硬编码启动失败,采用软编码 - * - `1104` 视频编码失败 - * - `1105` 新美颜软编码启动失败,采用老的软编码 - * - `1106` 新美颜软编码启动失败,采用老的软编码 - * - `3001` RTMP -DNS解析失败 - * - `3002` RTMP服务器连接失败 - * - `3003` RTMP服务器握手失败 - * - `3004` RTMP服务器主动断开,请检查推流地址的合法性或防盗链有效期 - * - `3005` RTMP 读/写失败 - */ - code: number - }> - - /** - * 网络状态通知,detail = {info} - * - * 最低基础库: 1.9.0 - */ - type LivePusherNetStatus = CustomEvent<{ - /** - * 网络状态数据 - * - * -`videoBitrate` 当前视频编/码器输出的比特率,单位 kbps - * -`audioBitrate` 当前音频编/码器输出的比特率,单位 kbps - * -`videoFPS` 当前视频帧率 - * -`videoGOP` 当前视频 GOP,也就是每两个关键帧(I帧)间隔时长,单位 s - * -`netSpeed` 当前的发送/接收速度 - * -`netJitter` 网络抖动情况,抖动越大,网络越不稳定 - * -`videoWidth` 视频画面的宽度 - * -`videoHeight` 视频画面的高度 - */ - info: - | 'videoBitrate' - | 'audioBitrate' - | 'videoFPS' - | 'videoGOP' - | 'netSpeed' - | 'netJitter' - | 'videoWidth' - | 'videoHeight' - }> - - /** - * 渲染错误事件,detail = {errMsg, errCode} - * - * `tip`: 开发者工具上暂不支持 live-pusher - * - * 最低基础库: 1.7.4 - */ - type LivePusherError = CustomEvent<{ - errMsg: string - /** - * 错误码 - * - * - `10001` 用户禁止使用摄像头 - * - `10002` 用户禁止使用录音 - * - `10003` 背景音资源 (BGM) 加载失败 - * - `10004` 等待画面资源 (waiting-image) 加载失败 - */ - errCode: number - }> - - /** - * 背景音开始播放时触发 - * - * 最低基础库: 2.4.0 - */ - type LivePusherBgmStart = CustomEvent - - /** - * 背景音进度变化时触发,detail = {progress, duration} - * - * 最低基础库: 2.4.0 - */ - type LivePusherBgmProgress = CustomEvent<{ - progress: number - duration: number - }> - - /** - * 背景音播放完成时触发 - * - * 最低基础库: 2.4.0 - */ - type LivePusherBgmComplete = CustomEvent - - /** 当开始/继续播放时触发play事件 */ - type VideoPlay = CustomEvent - - /** 当暂停播放时触发 pause 事件 */ - type VideoPause = CustomEvent - - /** 当播放到末尾时触发 ended 事件 */ - type VideoEnded = CustomEvent - - /** 播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次 */ - type VideoTimeUpdate = CustomEvent<{ - currentTime: number - duration: number - }> - - /** - * 视频进入和退出全屏时触发,event.detail = {fullScreen, direction} - * - * 最低基础库: 1.4.0 - */ - type VideoFullScreenChange = CustomEvent<{ - fullScreen: boolean - direction: 'vertical' | 'horizontal' - }> - - /** - * 视频出现缓冲时触发 - * - * 最低基础库: 1.7.0 - */ - type VideoWaiting = CustomEvent - - /** - * 视频播放出错时触发 - * - * 最低基础库: 1.7.0 - */ - type VideoError = CustomEvent - - /** - * 加载进度变化时触发,只支持一段加载。 - * - * 最低基础库: 2.4.0 - */ - type VideoPregress = CustomEvent<{ - /** 百分比 */ - buffered: number - }> - - /** - * 加载进度变化时触发,只支持一段加载。 - * - * 最低基础库: 2.4.0 - */ - type VoipRoomError = CustomEvent - - /** - * 点击地图时触发 - * - * 2.9.0 起返回经纬度信息 - */ - type MapTap = CustomEvent<{ - /** 经度,最低基础库 2.9.0 */ - longitude: number - /** 纬度,最低基础库 2.9.0 */ - latitude: number - }> - - /** - * 点击标记点时触发 - * - * e.detail = {markerId} - */ - type MarkerTap = CustomEvent<{ - /** 标记点 ID */ - markerId: number - }> - - /** - * 点击 label 时触发 - * - * e.detail = {markerId} - * - * 最低基础库: 2.9.0 - */ - type LabelTap = MarkerTap - - /** - * 点击控件时触发 - * - * e.detail = {controlId} - */ - type ControlTap = CustomEvent<{ - /** 控件 ID */ - controlId: number - }> - - /** - * 点击 label 时触发 - * - * e.detail = {markerId} - * - * 最低基础库: 1.2.0 - */ - type CalloutTap = MarkerTap - - /** - * 在地图渲染更新完成时触发 - * - * 最低基础库: 1.6.0 - */ - type MapUpdated = CustomEvent - - /** - * 在地图渲染更新完成时触发 - * - * 最低基础库: 1.6.0 - */ - type RegionChange = CustomEvent<{ - /** 旋转程度,最低基础库 2.3.0 */ - rotate: number - /** 缩放程度,最低基础库 2.3.0 */ - skew: number - }> & - ( - | { - /** - * 视野变化开始、结束时触发 - * - * 视野变化开始为 `begin` - */ - type: 'begin' - /** - * 导致视野变化的原因 - * - * - gesture: 用户手势 - * - update: 调用接口导致 - */ - causedBy: 'gesture' | 'update' - } - | { - /** - * 视野变化结束时触发 - * - * 视野变化结束为 `end` - */ - type: 'end' - /** - * 导致视野变化的原因 - * - * - drag: 拖动地图导致 - * - scale: 缩放导致 - * - update: 调用接口导致 - */ - causedBy: 'drag' | 'scale' | 'update' - } - ) - - /** - * 广告加载成功的回调 - * - * 最低基础库: 2.2.1 - */ - type AdLoad = CustomEvent - - /** - * 广告加载失败的回调,event.detail = {errCode: 1002} - * - * `tip`: 监听到error回调后,开发者可以针对性的处理,比如隐藏广告组件的父容器,以保证用户体验,但不要移除广告组件,否则将无法收到bindload的回调。 - * - * 最低基础库: 2.2.1 - */ - type AdError = CustomEvent<{ - /** - * 错误码 - * - * - `1000` 后端错误调用失败 该项错误不是开发者的异常情况 一般情况下忽略一段时间即可恢复。 - * - `1001` 参数错误 使用方法错误 可以前往developers.weixin.qq.com 确认具体教程 (小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换)。 - * - `1002` 广告单元无效 可能是拼写错误、或者误用了其他APP的广告ID 请重新前往mp.weixin.qq.com确认广告位ID。 - * - `1003` 内部错误 该项错误不是开发者的异常情况 一般情况下忽略一段时间即可恢复。 - * - `1004` 无适合的广告 广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告 属于正常情况,且开发者需要针对这种情况做形态上的兼容。 - * - `1005` 广告组件审核中 你的广告正在被审核,无法展现广告 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。 - * - `1006` 广告组件被驳回 你的广告审核失败,无法展现广告 请前往mp.weixin.qq.com确认审核状态,且开发者需要针对这种情况做形态上的兼容。 - * - `1007` 广告组件被驳回 你的广告能力已经被封禁,封禁期间无法展现广告 请前往mp.weixin.qq.com确认小程序广告封禁状态。 - * - `1008` 广告单元已关闭 该广告位的广告能力已经被关闭 请前往mp.weixin.qq.com重新打开对应广告位的展现。 - */ - errCode: number - }> - - /** - * 广告关闭的回调 - * - * 最低基础库: 2.6.5 - */ - type AdClose = CustomEvent - - /** - * 网页向小程序 postMessage 时,会在特定时机 (小程序后退、组件销毁、分享) 触发并收到消息。e.detail = { data } - * - * 最低基础库: 1.6.4 - */ - type WebviewMessage = CustomEvent<{ - /** 多次 postMessage 的参数组成的数组 */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - data: any[] - }> - - /** - * 网页加载成功时候触发此事件。e.detail = { src } - * - * 最低基础库: 1.6.4 - */ - type WebviewLoad = CustomEvent<{ - src: string - }> - - /** - * 网页加载失败的时候触发此事件。e.detail = { src } - * - * 最低基础库: 1.6.4 - */ - type WebviewError = CustomEvent<{ - src: string - }> -} diff --git a/scr/weichat_work/typings/types/wx/lib.wx.page.d.ts b/scr/weichat_work/typings/types/wx/lib.wx.page.d.ts deleted file mode 100644 index 4e1cb51..0000000 --- a/scr/weichat_work/typings/types/wx/lib.wx.page.d.ts +++ /dev/null @@ -1,263 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) 2022 Tencent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -***************************************************************************** */ - -declare namespace WechatMiniprogram.Page { - type Instance< - TData extends DataOption, - TCustom extends CustomOption - > = OptionalInterface<ILifetime> & - InstanceProperties & - InstanceMethods<TData> & - Data<TData> & - TCustom - type Options< - TData extends DataOption, - TCustom extends CustomOption - > = (TCustom & - Partial<Data<TData>> & - Partial<ILifetime> & { - options?: Component.ComponentOptions - }) & - ThisType<Instance<TData, TCustom>> - type TrivialInstance = Instance<IAnyObject, IAnyObject> - interface Constructor { - <TData extends DataOption, TCustom extends CustomOption>( - options: Options<TData, TCustom> - ): void - } - interface ILifetime { - /** 生命周期回调—监听页面加载 - * - * 页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。 - */ - onLoad( - /** 打开当前页面路径中的参数 */ - query: Record<string, string | undefined> - ): void | Promise<void> - /** 生命周期回调—监听页面显示 - * - * 页面显示/切入前台时触发。 - */ - onShow(): void | Promise<void> - /** 生命周期回调—监听页面初次渲染完成 - * - * 页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。 - * - - * 注意:对界面内容进行设置的 API 如`wx.setNavigationBarTitle`,请在`onReady`之后进行。 - */ - onReady(): void | Promise<void> - /** 生命周期回调—监听页面隐藏 - * - * 页面隐藏/切入后台时触发。 如 `navigateTo` 或底部 `tab` 切换到其他页面,小程序切入后台等。 - */ - onHide(): void | Promise<void> - /** 生命周期回调—监听页面卸载 - * - * 页面卸载时触发。如`redirectTo`或`navigateBack`到其他页面时。 - */ - onUnload(): void | Promise<void> - /** 监听用户下拉动作 - * - * 监听用户下拉刷新事件。 - * - 需要在`app.json`的`window`选项中或页面配置中开启`enablePullDownRefresh`。 - * - 可以通过`wx.startPullDownRefresh`触发下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。 - * - 当处理完数据刷新后,`wx.stopPullDownRefresh`可以停止当前页面的下拉刷新。 - */ - onPullDownRefresh(): void | Promise<void> - /** 页面上拉触底事件的处理函数 - * - * 监听用户上拉触底事件。 - * - 可以在`app.json`的`window`选项中或页面配置中设置触发距离`onReachBottomDistance`。 - * - 在触发距离内滑动期间,本事件只会被触发一次。 - */ - onReachBottom(): void | Promise<void> - /** 用户点击右上角转发 - * - * 监听用户点击页面内转发按钮(`<button>` 组件 `open-type="share"`)或右上角菜单“转发”按钮的行为,并自定义转发内容。 - * - * **注意:只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮** - * - * 此事件需要 return 一个 Object,用于自定义转发内容 - */ - onShareAppMessage( - /** 分享发起来源参数 */ - options: IShareAppMessageOption - ): ICustomShareContent | void - /** - * 监听右上角菜单“分享到朋友圈”按钮的行为,并自定义分享内容 - * - * 本接口为 Beta 版本,暂只在 Android 平台支持,详见 [分享到朋友圈 (Beta)](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share-timeline.html) - * - * 基础库 2.11.3 开始支持,低版本需做兼容处理。 - */ - onShareTimeline(): ICustomTimelineContent | void - - /** 页面滚动触发事件的处理函数 - * - * 监听用户滑动页面事件。 - */ - onPageScroll( - /** 页面滚动参数 */ - options: IPageScrollOption - ): void | Promise<void> - - /** 当前是 tab 页时,点击 tab 时触发,最低基础库: `1.9.0` */ - onTabItemTap( - /** tab 点击参数 */ - options: ITabItemTapOption - ): void | Promise<void> - - /** 窗口尺寸改变时触发,最低基础库:`2.4.0` */ - onResize( - /** 窗口尺寸参数 */ - options: IResizeOption - ): void | Promise<void> - - /** - * 监听用户点击右上角菜单“收藏”按钮的行为,并自定义收藏内容。 - * 基础库 2.10.3,安卓 7.0.15 版本起支持,iOS 暂不支持 - */ - onAddToFavorites(options: IAddToFavoritesOption): IAddToFavoritesContent - } - interface InstanceProperties { - /** 页面的文件路径 */ - is: string - - /** 到当前页面的路径 */ - route: string - - /** 打开当前页面路径中的参数 */ - options: Record<string, string | undefined> - } - - type DataOption = Record<string, any> - type CustomOption = Record<string, any> - - type InstanceMethods<D extends DataOption> = Component.InstanceMethods<D> - - interface Data<D extends DataOption> { - /** 页面的初始数据 - * - * `data` 是页面第一次渲染使用的**初始数据**。 - * - * 页面加载时,`data` 将会以`JSON`字符串的形式由逻辑层传至渲染层,因此`data`中的数据必须是可以转成`JSON`的类型:字符串,数字,布尔值,对象,数组。 - * - * 渲染层可以通过 `WXML` 对数据进行绑定。 - */ - data: D - } - - interface ICustomShareContent { - /** 转发标题。默认值:当前小程序名称 */ - title?: string - /** 转发路径,必须是以 / 开头的完整路径。默认值:当前页面 path */ - path?: string - /** 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持PNG及JPG。显示图片长宽比是 5:4,最低基础库: `1.5.0`。默认值:使用默认截图 */ - imageUrl?: string - } - - interface ICustomTimelineContent { - /** 自定义标题,即朋友圈列表页上显示的标题。默认值:当前小程序名称 */ - title?: string - /** 自定义页面路径中携带的参数,如 `path?a=1&b=2` 的 “?” 后面部分 默认值:当前页面路径携带的参数 */ - query?: string - /** 自定义图片路径,可以是本地文件路径、代码包文件路径或者网络图片路径。支持 PNG 及 JPG。显示图片长宽比是 1:1。默认值:默认使用小程序 Logo*/ - imageUrl?: string - } - - interface IPageScrollOption { - /** 页面在垂直方向已滚动的距离(单位px) */ - scrollTop: number - } - - interface IShareAppMessageOption { - /** 转发事件来源。 - * - * 可选值: - * - `button`:页面内转发按钮; - * - `menu`:右上角转发菜单。 - * - * 最低基础库: `1.2.4` - */ - from: 'button' | 'menu' | string - /** 如果 `from` 值是 `button`,则 `target` 是触发这次转发事件的 `button`,否则为 `undefined` - * - * 最低基础库: `1.2.4` */ - target: any - /** 页面中包含`<web-view>`组件时,返回当前`<web-view>`的url - * - * 最低基础库: `1.6.4` - */ - webViewUrl?: string - } - - interface ITabItemTapOption { - /** 被点击tabItem的序号,从0开始,最低基础库: `1.9.0` */ - index: string - /** 被点击tabItem的页面路径,最低基础库: `1.9.0` */ - pagePath: string - /** 被点击tabItem的按钮文字,最低基础库: `1.9.0` */ - text: string - } - - interface IResizeOption { - size: { - /** 变化后的窗口宽度,单位 px */ - windowWidth: number - /** 变化后的窗口高度,单位 px */ - windowHeight: number - } - } - - interface IAddToFavoritesOption { - /** 页面中包含web-view组件时,返回当前web-view的url */ - webviewUrl?: string - } - - interface IAddToFavoritesContent { - /** 自定义标题,默认值:页面标题或账号名称 */ - title?: string - /** 自定义图片,显示图片长宽比为 1:1,默认值:页面截图 */ - imageUrl?: string - /** 自定义query字段,默认值:当前页面的query */ - query?: string - } - - interface GetCurrentPages { - (): Array<Instance<IAnyObject, IAnyObject>> - } -} - -/** - * 注册小程序中的一个页面。接受一个 `Object` 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。 - */ -declare let Page: WechatMiniprogram.Page.Constructor -/** - * 获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页面。 - - * __注意:__ - - * - __不要尝试修改页面栈,会导致路由以及页面状态错误。__ - * - 不要在 `App.onLaunch` 的时候调用 `getCurrentPages()`,此时 `page` 还没有生成。 - */ -declare let getCurrentPages: WechatMiniprogram.Page.GetCurrentPages