diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 115cc02..0000000
--- a/.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/.gitignore b/.gitignore
deleted file mode 100644
index 9f11b75..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.idea/
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..b6b1ecf
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 已忽略包含查询文件的默认文件夹
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
diff --git a/.idea/bodyWeight.iml b/.idea/bodyWeight.iml
new file mode 100644
index 0000000..c956989
--- /dev/null
+++ b/.idea/bodyWeight.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..58834d0
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+ {}
+ {
+ "isMigrated": true
+}
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..4d2b7fb
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index 960990f..0000000
--- a/README.md
+++ /dev/null
@@ -1,1138 +0,0 @@
-# 乐福蓝牙秤
-## 设备接入指南
-### 介绍
-本文档提供了小程序设备接入的指导,以确保秤设备能够成功连接到程序并正常工作。
-### 流程图
-#### 通过设备列表获取设备信息
-
-
-#### 操作测量流程
-
-
-#### 数据解析
-
-
-### 准备工作
-在开始设备接入之前,请确保您已经完成以下准备工作
-确认设备已经按照制造商的说明正确组装和连接。
-确保设备所需的供电已经连接,并处于正常工作状态。
-准备好所需的网络连接信息,如Wi-Fi名称和密码。
-申请蓝牙插件和使用身体数据解析接口申请与使用步骤如下:
-#### 申请与使用步骤
-1. 申请蓝牙插件:请访问蓝牙秤插件申请地址 [https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx0ffb48417ce6345c](https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx0ffb48417ce6345c),在该页面进行申请。
-
-2. 申请身体数据解析AppId 和 AppSecret:请访问身体数据解析申请地址 [https://uniquehealth.lefuenergy.com/unique-open-web/index.html](https://uniquehealth.lefuenergy.com/unique-open-web/index.html),在该页面进行申请。
-
-3. 申请蓝牙插件和开放官网注册账号:请访问开放官网注册页面,填写相关信息进行账号注册。
-
-4. 生成 AppId 和 AppSecret:在注册成功后,登录开放官网,点击Appkey管理,生成你的 AppId 和 AppSecret。
-
-5. 下载示例代码:请访问示例代码地址 [https://gitee.com/shenzhen-lfscale/bluetoothkit-webwidgetdemo.git](https://gitee.com/shenzhen-lfscale/bluetoothkit-webwidgetdemo.git),下载示例代码到本地。
-
-6. 开发插件功能:根据你的需求,使用示例代码进行开发,将你的 AppId 和 AppSecret 配置到代码中。
-
-以上是申请和使用蓝牙插件以及申请身体数据解析的流程。
-#### 导入插件
-将所申请的插件导入到你的应用程序中,确保插件可以正常使用。
-
-### 获取设备列表
-#### 注册设备蓝牙列表获取回调
-在你的应用程序中注册回调函数,用于获取设备的蓝牙列表。当回调触发时,你可以获取到可用设备的列表。
-#### 调用开启start方法
-调用相应的方法来开启设备的蓝牙功能,以便进行蓝牙设备的连接和通信。
-#### 设备蓝牙列表获取
-通过设备蓝牙列表回调,获取到可用设备的蓝牙列表。这些设备通常是附近的蓝牙设备。
-#### 选择蓝牙列表中需要连接的设备
-根据你的需求,在蓝牙列表中选择需要连接的设备,记录选择的蓝牙对象。
-
-### 选择连接蓝牙设备测量流程
-#### 进入设备详情页
-打开设备的详情页,显示设备的详细信息和配置选项。
-#### 注册监听相关回调
-- 注册蓝牙连接设备回调
-在你的应用程序中注册回调函数,用于处理设备的蓝牙连接事件。当设备成功连接时,回调函数将被触发。
-- 注册蓝牙监听秤端数据回调
-注册回调函数,用于监听来自秤端的数据。当踩秤有新的数据传输时,回调函数将被触发。
-- 注册蓝牙设备自动断连回调
-注册回调函数,用于处理设备自动断开连接的事件。当设备断开连接时,回调函数将被触。
-- 注册蓝牙锁定数据回调
-注册回调函数,用于处理来自秤端的锁定数据。当秤端锁定数据可用时,回调函数将被触发。
-- 注册蓝牙连接状态回调
-注册回调函数,用于处理蓝牙连接状态的变化。当蓝牙连接状态发生改变时,回调函数将被触发。
-- 注册蓝牙修改设备回调
-注册回调函数,用于处理对设备进行修改的事件。当设备配置发生改变时,回调函数将被触发。
-- 注册域名修改回调
-在域名修改的接口中,添加回调函数的参数。当域名修改成功后,调用回调函数,并传递修改成功的状态。
-- 注册WiFi配网SN回调
-在WiFi配网SN的接口中,添加回调函数的参数。当WiFi配网SN修改成功后,调用回调函数,并传递修改成功的SN数据。
-#### 踩秤
-用户踩上秤盘,使秤处于活跃状态。
-#### 调用开启方法
-调用相应的方法,开启设备的测量功能。
-#### 停止扫描
-停止扫描附近的蓝牙设备,以节省电力和资源。
-#### 连接蓝牙设备
-根据用户选择的设备,进行蓝牙设备的连接。连接设备回调开始处理开启过程数据监听。
-#### 蓝牙连接设备秤端相关配置操作
-- 设备单位修改方法
-秤端单位修改成功触发设备配置回调方法返回修改成功或失败状态
-- 设备域名修改方法
-秤端域名修改成功触发回调方法成功状态
-- 设备wifi配网ssid与passwd方法
-秤端wifi配网成功触发回调方法返回修改成功snData值
-#### 上秤测量
-在设备连接成功后,进行秤端的测量操作。
-#### 秤端数据回调方法返回秤端数据显示
-当秤端传输数据时,回调函数将被触发,将秤端数据显示给用户。
-#### 秤端锁定数据回调方法返回秤端锁定数据显示
-当秤端锁定数据可用时,回调函数将被触发,将锁定的数据显示给用户。
-#### 完成测量
-用户完成测量操作,准备进行数据解析和显示。
-
-### 解析数据
-#### 根据申请的AppID与Key获取请求token
-#### 拿锁定数据测量值请求数据解析接口
-将锁定的数据发送给数据解析接口,请求解析数据的结果。
-#### 得到身体数据解析值
-接收数据解析接口返回的解析结果,得到身体数据的解析值。
-#### 显示测量
-将解析得到的身体数据显示给用户,完成整个测量过程。
-
-
-## 方法说明
-### plugin.Blue
-
-plugin.Blue 是一系列控制蓝牙设备的命令和函数的封装,可以用于在项目中连接和通信蓝牙秤设备。以下是该插件所支持的命令和函数:
-
-**重要!插件1.0.5以上版本如无法扫描出设备 需要调用setDeviceSetting设置相应的蓝牙秤配置**
-**setDeviceSetting**设置蓝牙设备搜索的设备数组列表 新名字的秤需向开发者注册设备项:
-```setDeviceSetting(devicesList: array): void```
-
-**start**开始蓝牙扫描,参数devicesName为设备名称的数组,autoFlag是否自动连接秤端 默认为是:
-```start(devicesName: array, autoFlag: Boolean): void```
-
-**stop**停止蓝牙扫描,关闭所有事件监听与关闭蓝牙秤连接,通常用于业务结束后需要调用:
-```stop(): void```
-
-**disconnect**关闭蓝牙秤连接:
-```disconnect(fn: function): object```
-
-
-**createBLEConnection**接受一个蓝牙秤设备对象 连接后触发`deviceConnect`回调
-```createBLEConnection(device: object): object```
-
-
-**stopBluetoothDevicesDiscovery**停止扫描设备回调
-```stopBluetoothDevicesDiscovery(fn: function): object```
-
-**visibleLog** 是否打印插件内部日志
-```visibleLog(flag: boolean):void```
-
-### plugin.ScaleAction
-
-plugin.ScaleAction APP操作是蓝牙秤端的通用方法,切换蓝牙秤的单位和开启监听蓝牙秤数据
-
-
-**configWifi** 蓝牙配网 - 该功能用于蓝牙WiFi秤,在给秤配置网络时使用
-```
-// 首先确保已经绑定了蓝牙WiFi秤 2、用户输入Wifi账号和密码 3、发起连接设备 4、plugin.bus.subscribe("snData")方法返回sn码,此时秤上的WiFi图标会先闪烁(连接路由器中),再常量(连接路由器成功并获取到sn)将sn传给Server验证秤是否已经完成注册 7、Server返回成功,则配网成功,否则配网失败
-configWifi(ssid: string, password:string): void
-```
-
-**configDomain** 修改秤端服务器域名 修改后调用configWifi开始蓝牙配网
-```
-// 首先确保已经绑定了蓝牙WiFi秤
-发起蓝牙配网是先更新秤端服务器域名 防止域名调试篡改
-configDomain(domain: string): void
-```
-
-
-**startDataProgress**蓝牙秤端发送数据 需要在设备连接成功后即`deviceConnect`回调中使用
-```
-startDataProgress(): void
-// 示例
-plugin.bus.subscribe("deviceConnect", (res) => {
- // 必须调用 不然无法获得秤端数据
- plugin.ScaleAction.startDataProgress()
-});
-
-```
-
-**fetchDeviceHistoryData**
-```
-fetchDeviceHistoryData(): void
-// 示例
-plugin.bus.subscribe("syncDeviceHistorySuccess", (res) => {
- //同步历史数据成功回调
-});
-
-```
-
-**deleteDeviceHistoryData**
-```
-deleteDeviceHistoryData(): void
-// 示例
-plugin.bus.subscribe("deleteDeviceHistoryDataSuccess", (res) => {
- //删除历史数据成功回调
-});
-```
-
-**syncDeviceSetting**
-体重秤syncDeviceSetting 传入对象键值对
-
-| Property | Value | Value |
-| ---------------- | ------- | ------- |
-| gender | 0 | 性别对应 Plugin.PPBluetoothDefine.PPDeviceGenderType|
-| unit | 0 | 单位对应 Plugin.PPBluetoothDefine.PPDeviceUnit |
-| isAthleteMode | false | 孕妇 |
-| isPregnantMode | false | 运动员模式 |
-| age | 23 | 年龄 |
-| height | 123 | 身高 |
-
-**食物秤**syncDeviceSetting 传入对象键值对
-
-| Property | Value | Value |
-| ---------------- | ------- | ------- |
-| unit | 0 | 单位对应 Plugin.PPBluetoothDefine.PPDeviceUnit |
-| isBuzzerGateMode | false | 开启蜂鸣 |
-| isToZeroMode | false | 食物称置零 |
-
-```
-syncDeviceSetting(): object
-// 体重秤示例
-plugin.ScaleAction.syncDeviceSetting({
- gender:0,
- unit:0,
- isAthleteMode:false,
- isPregnantMode:false,
- age:23,
- height:123,
-})
-
-// 食物秤示例 食物称只能修改单一项
-plugin.ScaleAction.syncDeviceSetting({
- isBuzzerGateMode: true,
-})
-plugin.ScaleAction.syncDeviceSetting({
- unit: 0,
-})
-plugin.ScaleAction.syncDeviceSetting({
- isToZeroMode: true,
-})
-
-```
-
-
-**historyData** 获取历史带历史过程数据
-其中res为对象键值为
-
-| Property | Value | 描述 |
-| -------------- | ------- | ------- |
-| isPlus | true | 是否是正数 |
-| isOverload | false | 是否超载 |
-| weight | 0 | 重量放大了100倍 |
-| resistance | 0 | 阻抗 |
-| isEnd | false | 本次测量是否结束 |
-| isHeartRating | false | 心律是否测量中 |
-| heartRate | 0 | 心律 |
-| unit | 0 | 设备单位 对应Plugin.PPBluetoothDefine.PPDeviceUnit |
-```
- plugin.bus.subscribe("historyData", (res) => {
- console.log("historyData", res);
- });
-```
-
-
-**devicesModel** 获取设备模型设备模型可以根据Plugin.PPBluetoothDefine了解秤相关信息
-
-```
- plugin.bus.subscribe("devicesModel", (res) => {
- console.log("devicesModel", res);
- });
-```
-
-
-**devicesInfo** 获取设备内置信息
-
-```
- plugin.bus.subscribe("devicesInfo", (res) => {
- console.log("devicesInfo", res);
- });
-```
-
-
-**syncDeviceTimeSuccess** 时间同步 时间同步成功回调
-
-```
- plugin.bus.subscribe("syncDeviceTimeSuccess", (res) => {
- console.log("syncDeviceTimeSuccess", res);
- });
-```
-
-
-**syncDeviceHistorySuccess** 同步历史数据回调
-
-```
- plugin.bus.subscribe("syncDeviceHistorySuccess", (res) => {
- console.log("syncDeviceHistorySuccess", res);
- });
-```
-
-
-**deleteDeviceHistoryDataSuccess** 历史数据删除成功回调
-
-```
- plugin.bus.subscribe("deleteDeviceHistoryDataSuccess", (res) => {
- console.log("deleteDeviceHistoryDataSuccess", res);
- });
-```
-
-
-**deviceWillDisconnect** 设备将要断连回调
-
-```
- plugin.bus.subscribe("deviceWillDisconnect", (res) => {
- console.log("deviceWillDisconnect", res);
- });
-```
-### plugin.bus
- plugin.bus通信蓝牙设备,用于监听蓝牙以及秤端的数据与状态,以下是该插件所支持的命令:
-
-**connectState** 蓝牙与蓝牙秤状态监听
-
-```
- plugin.bus.subscribe("connectState", (res) => {
- console.log("connectState", res);
- });
-```
-
-**unitChange** 蓝牙秤单位切换状态监听
-
-```
- plugin.bus.subscribe("unitChange", (res) => {
- console.log("unitChange", res);
- });
-```
-
-**devicesList** 获取过滤后的附近设备列表
-
-```
- plugin.bus.subscribe("devicesList", (res) => {
- console.log("devicesList", res);
- });
-```
-
-**getDeviceInfo** 获取附件所有附近设备信息 自动连接autoFlag不为false时有数据
-
-```
- plugin.bus.subscribe("getDeviceInfo", (res) => {
- console.log("getDeviceInfo", res);
- });
-```
-
-**deviceConnect** 蓝牙秤设备成功连接后连接中状态监听
-
-```
- plugin.bus.subscribe("deviceConnect", (res) => {
- plugin.ScaleAction.startDataProgress()
- });
-```
-
-**progressData** 蓝牙秤端过程数据,监听不稳定体重的实时状态
-其中res为对象键值为
-
-| Property | Value | 描述 |
-| -------------- | ------- | ------- |
-| isPlus | true | 是否是正数 |
-| isOverload | false | 是否超载 |
-| weight | 0 | 重量放大了100倍 |
-| resistance | 0 | 阻抗 |
-| isEnd | false | 本次测量是否结束 |
-| isHeartRating | false | 心律是否测量中 |
-| heartRate | 0 | 心律 |
-| unit | 0 | 设备单位 对应Plugin.PPBluetoothDefine.PPDeviceUnit |
-
-**食物秤**中res为对象键值为
-
-| Property | Value | 描述 |
-| -------------- | ------- | ------- |
-| isPlus | true | 是否是正数 |
-| isOverload | false | 是否超载 |
-| weight | 0 | 重量放大了100倍 |
-| isEnd | false | 本次测量是否结束 |
-| unit | 0 | 设备单位 对应Plugin.PPBluetoothDefine.PPDeviceUnit |
-
-```
- plugin.bus.subscribe("progressData", (res) => {
- console.log("progressData", res);
- });
-
-```
-
-
-**lockData** 蓝牙秤端完成测量锁定数据,锁定的体重和阻抗
-
-```
- plugin.bus.subscribe("lockData", (res) => {
- console.log("lockData", res);
- });
-```
-
-
-**heartRate** 蓝牙秤端锁定心率值,必须根据已有秤功能调用
-
-```
- plugin.bus.subscribe("heartRate", (res) => {
- console.log("heartRate", res);
- });
-```
-
-**snData** 配网成功后返回sn码 sn码用于请求验证秤是否已经完成注册
-
-```
- plugin.bus.subscribe("snData", (res) => {
- console.log("snData", res);
- });
-```
-
-**domainChange** 修改域名成功后返回提示
-
-```
- plugin.bus.subscribe("domainChange", (res) => {
- console.log("domainChange", res);
- });
-```
-
-
-### plugin.getDeviceSettingList
-
-**插件1.0.5以上版本新增api**
-
-***plugin.getDeviceSettingList*** 获取设置设备列表
-```
-//获取设备设置列表用于用户添加扫描设备
-plugin.getDeviceSettingList({
- url: baseUrl,
- data: {
- appKey: appInfo.appKey
- },
- header: {
- "token": bodyToken,
- "Accept-Language": wx.getStorageSync("lang") || 'zh'
- }
-}).then((res)=>{
- if (res.data.code == 200) {
- plugin.Blue.setDeviceSetting(res.data.data)
- console.log("plugin==", plugin.PPBluetoothDefine)
- }
-})
-```
-
-***plugin.getAcLfBodyData*** 交流秤数据解析
-```
-// 设备device 根据plugin.Blue.getDeviceModel 获取设备类型deviceConnectType 根据相应的类型请求解析
-var param = {
- weightKg: 60,
- impedance: 5076001,
- sex: 1, 0(女) 1(男)
- age: 22,
- height: 170,
- heartRate: 80,
- token: '必传',
- }
- plugin.getAcLfBodyData({url:url,data:param,header:{ "token":res.data.data.token,"Accept-Language":"zh"}}).then(res => {
- console.log('解析结果',res)
-})
-```
-
-
-### plugin.getDcLfBodyData
-***plugin.getDcLfBodyData*** 直流秤数据解析
-```
-// 设备device 根据plugin.Blue.getDeviceModel 获取设备类型deviceConnectType 根据相应的类型请求解析
-var param = {
- "age":23,
- "heartRate":0,
- "height":123,
- "impedance":0,
- "peopleType":0,
- "sex":0,
- "weightKg":66.6,
- }
- plugin.getDcLfBodyData({url:url,data:param,header:{ "token":res.data.data.token,"Accept-Language":"zh"}}).then(res => {
- console.log('解析结果',res)
-})
-```
-
-
-### plugin.refreshToken
-***plugin.refreshToken*** 刷新token
-```
-
-// 使用refreshToken与解析数据方法结合示例
-function refreshFn() {
- this.refreshToken(() => {
- callDcLfBodyData(param);
- }, true);
-}
-
-async function refreshToken(fn, flag) {
- let bodyToken = localStorage.getItem('bodyToken');
- let bodyTokenTime = localStorage.getItem('bodyTokenTime');
- if (!bodyToken || bodyTokenTime * 1000 < +new Date() || flag) {
- let res = await plugin.refreshToken({
- url: 'https://uniquehealth.lefuenergy.com',
- data: {
- "appSecret": "插件开发者申请",
- "appKey": "插件开发者申请"
- }
- });
- console.log("res", res);
- if (res.data.code == 200) {
- localStorage.setItem('bodyToken', res.data.data.token);
- localStorage.setItem('bodyTokenTime', res.data.data.expireTime);
- fn();
- }
- } else {
- fn();
- }
-}
-
-function handleResponse(res) {
- console.log("res-=-=-|||", res.data.data);
- if (res.data.code == 200) {
-
- // 获取解析数据操作
-
- } else if (res.data.code == 401) {
- this.refreshToken(() => {
- callDcLfBodyData(param);
- }, true);
- }
-}
-
-function handleResponseList(res) {
- console.log("res-=-=-|||", res.data.data);
- if (res.data.code == 200) {
- // 获取解析数据操作
- } else if (res.data.code == 401) {
- this.refreshToken(() => {
- getDeviceSettingList(param);
- }, true);
- }
-}
-
-function getDeviceSettingList(param){
- let bodyToken = localStorage.getItem('bodyToken');
- plugin.getDeviceSettingList({
- url: 'https://uniquehealth.lefuenergy.com',
- data: param,
- header: {
- "token": bodyToken,
- "Accept-Language": localStorage.getItem("lang") || 'zh'
- }
- }).then(handleResponseList);
-}
-
-
-function callDcLfBodyData(param) {
- let bodyToken = localStorage.getItem('bodyToken');
- plugin.getDcLfBodyData({
- url: 'https://uniquehealth.lefuenergy.com',
- data: param,
- header: {
- "token": bodyToken,
- "Accept-Language": localStorage.getItem("lang") || 'zh'
- }
- }).then(handleResponse);
-}
-
-
-
-```
-
-## Torre协议测量
-
-### Torre测量流程
-
-连接设备后 必须先调用更新MTU接口 再调用开始测量接口后数据返回
-```
-
-let getActiveProtocol = null
-plugin.bus.subscribe("deviceConnect", (res) => {
- console.log('成功连接设备')
- // 获取协议调用方法
- getActiveProtocol = plugin.ScaleAction.getActiveProtocol()
- // 更新MTU
- getActiveProtocol.codeUpdateMTU((res) => {
- console.log("codeUpdateMTU", res)
- })
-});
-//开始测量
-activeProtocol.codeStartMeasure((res) => {
- console.log("res", res)
-})
-//监听到数据变化
-plugin.bus.subscribe("progressData", (res) => {console.log(res)})
-//获得测量结果
-plugin.bus.subscribe("lockData", (res) => {console.log(res)})
-
-```
-
-### 配网流程
-
-配网需要先调用获取wifi列表接口 返回数据后再进行配网
-
-```
-let getActiveProtocol = plugin.ScaleAction.getActiveProtocol()
-activeProtocol.dataFindSurroundDevice((res) => {
- console.log("wifiList", res)
- activeProtocol.dataConfigNetWork({
- domain: "http://domain",
- ssid: 'IT32',
- password: 'whs123456'
- }, (res) => {
- console.log("dataConfigNetWork", res)
- })
-})
-
-```
-
-
-开始测量
-下发此指令后设备才会上报称重情况
-参数:无
-handler: 0设置成功 1设置失败
-```
-codeStartMeasure((status) => {})
-```
-
-保活指令
-推荐首次连接成功后每10秒调用一次,可以保证设备不会主动断开连接
-```
-sendKeepAliveCode()
-```
-
-停止测量
-停止设备的测量操作
-参数:无
-handler: 0设置成功 1设置失败
-```
-codeStopMeasure((status) => {})
-```
-
-获取设备单位
-获取设备当前的单位信息
-参数:无
-```
-codeFetchUnit((status) => {})
-```
-
-修改设备单位
-修改设备的单位信息
-参数:无
-unit: 单位
-0x00:单位kg
-0x01:单位lb
-0x02:单位斤
-0x03:单位st
-0x04:单位st:lb
-handler:
-0x00:设置成功
-0x01:设置失败
-```
-codeChangeUnit(unit,(status) => {})
-```
-
-同步设备时间
-同步设备的时间
-参数:无
-```
-codeSyncTime((status) => {})
-```
-
-获取设备屏幕亮度
-获取设备当前的屏幕亮度
-```
-codeFetchScreenLuminance((status)=>{})
-```
-
-设置设备屏幕亮度
-设置设备的屏幕亮度
-```
-codeSetScreenLuminance(50,(status)=>{})
-```
-
-清除设备数据
-清除设备中的不同类型的数据
-参数-
-cmd:
-0x00:清除所有设备数据(用户信息、历史数据、配网数据、设置信息)
-0x01:清除用户信息
-0x02:清除历史数据
-0x03:清除配网状态
-0x04:清除设置信息
-handler:
-0x00:成功
-0x01:失败
-```
-codeClearDeviceData("00",(status)=>{})
-```
-
-获取心率开关状态
-获取设备当前的心率测量开关状态
-参数:无
-```
-codeFetchHeartRateSwitch((status)=>{})
-```
-
-打开心率测量
-打开设备的心率测量功能
-参数:无
-```
-codeOpenHeartRateSwitch((status)=>{})
-```
-
-关闭心率测量
-关闭设备的心率测量功能
-参数:无
-```
-codeCloseHeartRateSwitch((status)=>{})
-```
-
-获取阻抗开关状态
-获取设备当前的阻抗测量开关状态
-参数:无
-```
-codeFetchImpedanceSwitch((status)=>{})
-```
-
-打开阻抗测量
-打开设备的阻抗测量功能
-参数:无
-```
-codeOpenImpedanceSwitch((status)=>{})
-```
-
-关闭阻抗测量
-关闭设备的阻抗测量功能
-参数:无
-```
-codeCloseImpedanceSwitch((status)=>{})
-```
-
-获取设备配网状态
-获取设备当前的配网状态
-参数:无
-```
-codeFetchWifiConfig((status)=>{})
-```
-
-退出配网模式
-退出设备的配网模式
-参数:无
-```
-dataExitWifiConfig((status)=>{})
-```
-
-获取设备当前配置热点的ssid
-获取设备当前配置的热点SSID名称
-参数:无
-handler: ssid名称
-```
-dataFetchConfigNetworkSSID((status)=>{})
-```
-
-设置设备绑定状态
-设置设备的绑定状态
-参数:无
-handler:
-0:设置成功
-1:设置失败
-```
-codeSetBindingState((status)=>{})
-```
-
-设置设备未绑定状态
-设置设备的未绑定状态
-参数:无
-handler:
-0:设置成功
-1:设置失败
-```
-codeSetUnbindingState((status)=>{})
-```
-
-获取设备绑定状态
-获取设备当前的绑定状态
-参数:无
-```
-codeFetchBindingState((status)=>{})
-```
-
-开启抱婴模式
-开启设备的抱婴模式
-参数:
-step: 第几次上称(0/1)
-weight: 上次上称时的重量(step为0时传0)
-handler:
-0:设置成功
-1:设置失败
-
-```
-codeEnableBabyModel(0,0,fn)
-```
-退出抱婴模式
-退出设备的抱婴模式
-参数:无
-handler:
-0:设置成功
-1:设置失败
-
-```
-codeExitBabyModel((status)=>{})
-```
-
-
-更新MTU
-更新设备的MTU(最大传输单元)
-参数:无
-handler:
-0:设置成功
-1:设置失败
-
-```
-codeUpdateMTU((status)=>{})
-
-```
-
-发现周围的可连接热点
-搜索周围的可连接WiFi热点
-参数:无
-handler: 返回结果,包含热点名称和强度的数组对象
-
-```
-dataFindSurroundDevice((list)=>{})
-
-```
-
-获取WIFI MAC地址
-获取设备的WiFi MAC地址
-参数:无
-handler: WiFi MAC地址,示例:MAC 地址:01:02:03:04:05:06(当MAC地址为00:00:00:00:00:00时表示获取不到)
-
-```
-codeFetchWifiMac((mac)=>{})
-
-```
-
-通过WIFI进行OTA升级
-使用WiFi进行设备的OTA(空中固件升级)
-参数:无
-handler: 进度和失败状态
-
-```
-codeOtaUpdate((status)=>{})
-
-```
-
-获取设备端用户列表
-获取设备端的用户ID列表
-参数:无
-handler: 返回设备端所有用户的userId
-
-```
-dataFetchUserID((list)=>{})
-
-```
-
-删除用户
-删除设备端的用户信息
-参数:无
-userModel: 单个用户信息,包含userId和memberId
-handler:
-0:设置成功
-1:设置失败
-
-```
-dataDeleteUser({userID: "15820440620", memberID: "1885639"},(status)=>{})
-```
-
-
-获取某个用户下所有成员的历史记录
-获取某个用户下所有成员的历史记录
-参数:无
-userModel: 用户对象,userId为必传项
-handler: 历史数据结果
-
-```
-dataFetchHistoryData({userID: "15820440620"},(status)=>{})
-dataHistoricalDataStatusReport((res) => {console.log("历史数据", res)})
-```
-
-
-选中测量用户
-用于测量过程中指定测量用户,指定后不需要在设备端进行选择
-参数-userModel: 单个用户信息,包含userId和memberId
-handler:
-0:设置成功
-1:设置失败
-
-```
-dataSelectUser({userID: "15820440620", memberID: "1885639", }, (status) => {})
-```
-同步单个用户给设备
-将单个用户信息同步给设备,如果设备中已存在该用户,则会更新用户信息;如果不存在,则会插入。
-参数-infos: 单个用户信息,包含各个属性的值(参考代码注释)
-handler:
-0:设置成功
-1:设置失败
-```
-dataSyncUserInfo({
- userID: "15820440621",
- memberID: "1885629",
- age: "25",
- gender: 0,
- height: "158",
- isAthleteMode: 0,
- currentWeight: "55",
- deviceHeaderIndex: 0,
- targetWeight: "54",
- idealWeight: "52.8",
- recentData: [{
- weightKg: 59.00,
- timeStamp: 1677046795028
- },
- {
- weightKg: 58.79,
- timeStamp: 1692264965631
- },
- {
- weightKg: 52.20,
- timeStamp: 1693894960948
- },
- {
- weightKg: 46.50,
- timeStamp: 1694051103700
- },
- {
- weightKg: 61.95,
- timeStamp: 1694159727308
- },
- {
- weightKg: 61.59,
- timeStamp: 1694232070904
- },
- {
- weightKg: 62.35,
- timeStamp: 1694425016834
- },
- ],
- userName: "名字",
- },(status)=>{})
-```
-配置热点
-配置设备连接的WiFi热点信息
-参数-model: 包含用于连接热点的信息(domain, ssid, password)
-handler: 配网过程中的状态和错误码
-
-```
-dataConfigNetWork({domain:"domain", ssid:"ssid", password:"password"},(status)=>{})
-```
-
-## 常量与枚举值
-### plugin.PPBluetoothDefine
-以下是对给定的枚举类型介绍:
-
-### PPDeviceConnectType (设备连接类型)
-
-- `PPDeviceConnectTypeUnknow` (未知)
-- `PPDeviceConnectTypeBleAdv` (蓝牙广播秤)
-- `PPDeviceConnectTypeBleConnect` (蓝牙连接秤)
-
-### PPDeviceType (设备类型)
-
-- `PPDeviceTypeUnknow` (未知)
-- `PPDeviceTypeCF` (体脂秤)
-- `PPDeviceTypeCE` (体重秤)
-- `PPDeviceTypeCB` (婴儿秤)
-- `PPDeviceTypeCA` (厨房秤)
-
-### PPDeviceProtocolType (设备蓝牙协议版本)
-
-- `PPDeviceProtocolTypeUnknow` (未知)
-- `PPDeviceProtocolTypeV2` (2.x版本)
-- `PPDeviceProtocolTypeV3` (3.x版本)
-- `PPDeviceProtocolTypeTorre` (torre版本)
-
-### PPDeviceCalcuteType (测脂计算方式)
-
-- `PPDeviceCalcuteTypeUnknow` (未知)
-- `PPDeviceCalcuteTypeInScale` (秤端计算)
-- `PPDeviceCalcuteTypeDirect` (直流算法)
-- `PPDeviceCalcuteTypeAlternate` (交流算法)
-- `PPDeviceCalcuteTypeAlternate8` (8电极交流算法)
-- `PPDeviceCalcuteTypeAlternateNormal` (默认计算库直接用合泰返回的体脂率)
-- `PPDeviceCalcuteTypeNeedNot` (无需计算)
-
-### PPDevicePowerType (设备供电方式)
-
-- `PPDevicePowerTypeUnknow` (未知)
-- `PPDevicePowerTypeBattery` (电池)
-- `PPDevicePowerTypeSolar` (太阳能)
-- `PPDevicePowerTypeCharge` (充电)
-
-### PPDeviceFuncType (设备功能类型)
-
-- `PPDeviceFuncTypeWeight` (称重)
-- `PPDeviceFuncTypeFat` (测脂)
-- `PPDeviceFuncTypeHeartRate` (心律)
-- `PPDeviceFuncTypeHistory` (历史)
-- `PPDeviceFuncTypeSafe` (孕妇)
-- `PPDeviceFuncTypeBMDJ` (闭目单脚)
-- `PPDeviceFuncTypeBaby` (抱婴模式)
-- `PPDeviceFuncTypeWifi` (wifi配网)
-
-### PPDeviceAccuracyType (设备精度)
-
-- `PPDeviceAccuracyTypeUnknow` (未知)
-- `PPDeviceAccuracyTypePoint01` (0.1KG精度)
-- `PPDeviceAccuracyTypePoint005` (0.05KG精度)
-- `PPDeviceAccuracyTypePoint001` (0.01KG精度)
-- `PPDeviceAccuracyTypePointG` (1G精度)
-- `PPDeviceAccuracyTypePoint01G` (0.1G精度)
-
-### PPDeviceUnitType (设备具有的单位)
-
-- `PPDeviceUnitTypeKG(KG)`
-- `PPDeviceUnitTypeLB(LB)`
-- `PPDeviceUnitTypeSTLB(STLB)`
-- `PPDeviceUnitTypeJin(Jin)`
-- `PPDeviceUnitTypeG(G)`
-- `PPDeviceUnitTypeLBOZ(LBOZ)`
-- `PPDeviceUnitTypeOZ(FLOZ)`
-- `PPDeviceUnitTypeMLWater(MLWater)`
-- `PPDeviceUnitTypeMLMilk(MLMilk)`
-- `PPDeviceUnitTypeFLOZWater(FLOZWater)`
-- `PPDeviceUnitTypeFLOZMilk(FLOZMilk)`
-- `PPDeviceUnitTypeST(ST)`
-
-### PPDeviceUnit (用户使用的单位)
-
-- `PPUnitKG(KG)`
-- `PPUnitLB(LB)`
-- `PPUnitST(ST)`
-- `PPUnitJin(Jin)`
-- `PPUnitSTLB(STLB)`
-- `PPUnitG(G)`
-- `PPUnitLBOZ(LBOZ)`
-- `PPUnitOZ(OZ)`
-- `PPUnitMLWater(MLWater)`
-- `PPUnitMLMilk(MLMilk)`
-- `PPUnitFLOZWater(FLOZWater)`
-- `PPUnitFLOZMilk(FLOZMilk)`
-
-### PPDeviceGenderType (性别)
-
-- `PPDeviceGenderTypeFemale` (女性)
-- `PPDeviceGenderTypeMale` (男性)
-
-### PPWIFIConfigState (配网错误状态)
-
-- `PPWIFIConfigStateUnknow`
-- `PPWIFIConfigStateStart`
-- `PPWIFIConfigStateStartSuccess`
-- `PPWIFIConfigStateStartFailed`
-- `PPWIFIConfigStateDomainSendStart`
-- `PPWIFIConfigStateDomainSendSuccess`
-- `PPWIFIConfigStateDomainSendFailed`
-- `PPWIFIConfigStateDomainSendCode`
-- `PPWIFIConfigStateDomainSendCodeSuccess`
-- `PPWIFIConfigStateDomainSendCodeFailed`
-- `PPWIFIConfigStateSSIDSendStart`
-- `PPWIFIConfigStateSSIDSendSuccess`
-- `PPWIFIConfigStateSSIDSendFailed`
-- `PPWIFIConfigStateSSIDSendCode`
-- `PPWIFIConfigStateSSIDSendCodeSuccess`
-- `PPWIFIConfigStateSSIDSendCodeFailed`
-- `PPWIFIConfigStatePasswordSendStart`
-- `PPWIFIConfigStatePasswordSendSuccess`
-- `PPWIFIConfigStatePasswordSendFailed`
-- `PPWIFIConfigStatePasswordSendCode`
-- `PPWIFIConfigStatePasswordSendCodeSuccess`
-- `PPWIFIConfigStatePasswordSendCodeFailed`
-- `PPWIFIConfigStateRegist`
-- `PPWIFIConfigStateRegistSuccess`
-- `PPWIFIConfigStateRegistFailedTimeOut`
-- `PPWIFIConfigStateRegistFailedConnect`
-- `PPWIFIConfigStateRegistFailedHTTP`
-- `PPWIFIConfigStateRegistFailedHTTPS`
-- `PPWIFIConfigStateRegistFailedRegist`
-- `PPWIFIConfigStateRegistFailedCommand`
-
-### plugin.BLUE_STATE
-connectState 状态
-BLUE_STATE对应值为
-
-| 常量名 | 描述 |
-| --- | --- |
-| UNAVAILABLE | 蓝牙不可用 |
-| READY | 蓝牙准备就绪 |
-| SCANING | 正在搜索... |
-| CONNECTSUCCESS | 连接成功 |
-| CONNECTFAILED | 连接失败, 请重试! |
-| WIFISUCCESS | 配网成功 |
-
-## 使用插件示例
-
-https://gitee.com/shenzhen-lfscale/bluetoothkit-webwidgetdemo.git
-
-app.json 的 plugins 字段加入组件插件路径:
-```
- "plugins": {
- "ppScale-plugin": {
- "version": "版本号",
- "provider": "插件appid"
- }
- },
-```
-
-index.json 的 usingComponents 字段加入组件插件路径:
-```
- "ppScale": "plugin://ppScale-plugin/ppScale"
-```
-
-index.wxml 页面中使用:
-```
-
-```
-
-## 常见问题
-### 开启扫描但不到设备
-需要确认系统蓝牙与应用权限蓝牙是否开启
-如果开启依旧无法扫描到蓝牙 需要开启位置信息 部分移动设备需要开启移动信息才能扫描到设备
-是否为真机调试 开发者工具部分版本真机调试蓝牙无法使用 需要换成预览模式调试开发
-### wifi配网后如何判断成功
-wifi配网需要确认路由器wi-Fi频段是否为2.4GHz
-调用wifi配网api 如果wifi配网成功则snData会返回回调方法 如果30秒内snData监听没有回调则为配网失败
-### ios有数据返回 安卓无数据返回
-确认页面是否在上一层页调用了插件stop方法 安卓端stop方法执行满导致新注册测量页面回调被清空 需要延迟几百毫秒再注册回调方法
-### 如何获取ios真实mac地址
-注册秤模型回调 连接成功秤后 返回秤模型回调拥有设备真实mac地址
-### 传入设备对象获取到秤端模型
-秤端模型需要设备对象的advertisData 对象复制后advertisData里的二进制数据丢失导致无法计算出设备模型
-复制设备对象时需要记录advertisData的二进制值 advertisData有真实值才能获得真实的秤模型
-### ios无法配网成功
-**ios配网成功必须满足的选项 如iPhone11如下**
-- 蓝牙秤确保配网时已经连接且里热点手机不远
-- iPhone11开启的热点可被其他手机扫描到
-- iPhone11为关闭wifi状态
-- 域名与wifi名密码正确
-
-
-
-
-
-
-
-
diff --git a/app.js b/app.js
deleted file mode 100644
index 0d34ec5..0000000
--- a/app.js
+++ /dev/null
@@ -1,335 +0,0 @@
-App({
- onLaunch() {
- this.initPpScale();
- },
-
- globalData: {
- // wx.request 请求的服务地址
- wxRequestUrl: "https://device.shuziweidao.com/gateway/",
- // wxRequestUrl: "http://192.168.1.207:8889/",
-
- // 秤的所有信息
- ppScale: {
- version: "",
-
- plugin: null,
- activeProtocol: null,
- domain1: "http://device.shuziweidao.com:80/gateway", // 老版本 没有鉴权
- domain2: "http://device.shuziweidao.com:80/weight", // 新版本 有鉴权
- // domain1: "http://192.168.1.207:8889", // 老版本 没有鉴权
- // domain2: "http://192.168.1.207:8889/weight", // 新版本 有鉴权
- wifi: {
- ssid: "",
- password: ""
- },
- options: {
- key: "lefudc91611833e18d94",
- secret: "eQ50JYimMp0X7uhNLj6D3lTEk4TUUvEG7dvaqKM9t1U="
- },
- device: {
- setting: [{
- "advLength": 999,
- "calorieStatus": 0,
- "createBy": null,
- "deviceAccuracyType": 2,
- "deviceCalcuteType": 3,
- "deviceConnectType": 2,
- "deviceFuncType": 223,
- "deviceName": "CF568_G",
- "devicePowerType": 3,
- "deviceProtocolType": 3,
- "deviceType": 1,
- "deviceUnitType": "0,1,11",
- "id": 65,
- "imgUrl": null,
- "macAddressStart": 6,
- "remark": null,
- "sign": "FF",
- "status": 0,
- "uhStatus": 1,
- "updateBy": null
- }, {
- "advLength": 999,
- "calorieStatus": 0,
- "createBy": null,
- "deviceAccuracyType": 2,
- "deviceCalcuteType": 3,
- "deviceConnectType": 2,
- "deviceFuncType": 223,
- "deviceName": "YX-B4-568-BW",
- "devicePowerType": 3,
- "deviceProtocolType": 3,
- "deviceType": 1,
- "deviceUnitType": "0,1,11",
- "id": 65,
- "imgUrl": null,
- "macAddressStart": 6,
- "remark": null,
- "sign": "FF",
- "status": 0,
- "uhStatus": 1,
- "updateBy": null
- }, {
- "advLength": 999,
- "calorieStatus": 0,
- "createBy": null,
- "deviceAccuracyType": 2,
- "deviceCalcuteType": 4,
- "deviceConnectType": 2,
- "deviceFuncType": 65759,
- "deviceName": "CF636_G",
- "devicePowerType": 3,
- "deviceProtocolType": 3,
- "deviceType": 1,
- "deviceUnitType": "0,1,2",
- "id": 216,
- "imgUrl": null,
- "macAddressStart": 6,
- "remark": null,
- "sign": "FF",
- "status": 0,
- "uhStatus": 1,
- "updateBy": null
- }, {
- "advLength": 999,
- "calorieStatus": 0,
- "createBy": null,
- "deviceAccuracyType": 2,
- "deviceCalcuteType": 4,
- "deviceConnectType": 2,
- "deviceFuncType": 65759,
- "deviceName": "YX-B8-636-BW",
- "devicePowerType": 3,
- "deviceProtocolType": 3,
- "deviceType": 1,
- "deviceUnitType": "0,1,2",
- "id": 216,
- "imgUrl": null,
- "macAddressStart": 6,
- "remark": null,
- "sign": "FF",
- "status": 0,
- "uhStatus": 1,
- "updateBy": null
- }, {
- "advLength": 999,
- "calorieStatus": 0,
- "createBy": null,
- "deviceAccuracyType": 2,
- "deviceCalcuteType": 4,
- "deviceConnectType": 2,
- "deviceFuncType": 223,
- "deviceName": "CF577",
- "devicePowerType": 3,
- "deviceProtocolType": 3,
- "deviceType": 1,
- "deviceUnitType": "0,1,11",
- "id": 51,
- "imgUrl": null,
- "macAddressStart": 6,
- "remark": null,
- "sign": "FF",
- "status": 0,
- "uhStatus": 1,
- "updateBy": null
- }], // 即将要搜索周边秤的配置
- list: [], // 根据配置搜索到秤的列表
- name: "",
- mac: null, // 选中的设备mac地址/SN码
- connection: null, // 默认选中连接的设备
- connectState: null, // 当前连接设备的状态
- },
- reconnect: {
- count: 0, // 当前已重连次数
- max: 3, // 最大重连次数
- timer: null // 重连定时器
- }
- },
-
- _callbacks: {} // 用于存储所有 globalData 属性的监听回调
- },
-
- initPpScale() {
- this.globalData.ppScale.plugin = requirePlugin('ppScale-plugin');
- },
-
- // 保活定时器引用
- _keepAliveTimer: null,
-
- /**
- * 启动保活定时器,每 15 秒发送一次保活指令
- * 内部已做去重处理,重复调用安全
- */
- startKeepAlive() {
- this.stopKeepAlive();
- this._keepAliveTimer = setInterval(() => {
- if (this.globalData.ppScale.activeProtocol) {
- this.globalData.ppScale.activeProtocol.sendKeepAliveCode();
- }
- }, 15000);
- },
-
- /**
- * 清除保活定时器
- */
- stopKeepAlive() {
- if (this._keepAliveTimer) {
- clearInterval(this._keepAliveTimer);
- this._keepAliveTimer = null;
- }
- },
-
- /**
- * 页面离开时的统一清理:停止保活 + 重置重连计数 + connectState 置空 + 停止蓝牙
- */
- cleanupConnection() {
- this.stopKeepAlive();
- this.resetReconnectCount();
- this.setGlobalData('ppScale.device.connectState', null);
- this.globalData.ppScale.plugin.Blue.stop();
- },
-
- /**
- * 注册全局 bus 事件监听(connectState / syncDeviceTimeSuccess / deviceWillDisconnect)
- * 依赖 Blue.stop() 清空订阅,onShow 时直接调用,无需标志位
- */
- registerBusListeners() {
- const plugin = this.globalData.ppScale.plugin;
-
- // 蓝牙连接状态监听
- plugin.bus.subscribe('connectState', (res) => {
- console.log("app.js ===> connectState", res);
- this.setGlobalData('ppScale.device.connectState', res);
- if (res == plugin.BLUE_STATE.CONNECTSUCCESS) {
- this.globalData.ppScale.reconnect.count = 0;
- this.startKeepAlive();
- }
- if (res == plugin.BLUE_STATE.CONNECTFAILED) {
- this.stopKeepAlive();
- this.reconnectDevice();
- }
- wx.hideLoading();
- });
-
- // 同步时间
- plugin.bus.subscribe('syncDeviceTimeSuccess', (res) => {
- console.log("app.js ===> syncDeviceTimeSuccess", res);
- });
-
- // 设备自动断开监听
- plugin.bus.subscribe('deviceWillDisconnect', (res) => {
- console.log("app.js ===> deviceWillDisconnect", res);
- this.stopKeepAlive();
- this.setGlobalData('ppScale.device.connectState', plugin.BLUE_STATE.CONNECTFAILED);
- });
- },
-
- /**
- * 自动重连设备,最多重试 max 次,超过后停止,由用户手动重连
- * 只在配置页(configureDevice)活跃时执行,防止跨页面干扰
- */
- reconnectDevice() {
- const reconnect = this.globalData.ppScale.reconnect;
-
- // 仅在配置页活跃时执行重连
- const pages = getCurrentPages();
- const currentPage = pages[pages.length - 1];
- if (!currentPage || !currentPage.route || !currentPage.route.includes('configureDevice')) {
- console.log("app.js ===> 非配置页,跳过自动重连");
- return;
- }
-
- if (reconnect.count >= reconnect.max) {
- console.log("app.js ===> 自动重连已达上限,等待用户手动重试");
- return;
- }
-
- reconnect.count++;
- console.log(`app.js ===> 自动重连第 ${reconnect.count}/${reconnect.max} 次`);
-
- // 延迟 2 秒后重连,避免连续冲突
- if (reconnect.timer) {
- clearTimeout(reconnect.timer);
- }
- reconnect.timer = setTimeout(() => {
- this.globalData.ppScale.plugin.Blue.disconnect((disres) => {
- if (disres.errCode == 0) {
- console.log("app.js ===> 断开成功,开始重新扫描设备");
- this.globalData.ppScale.plugin.Blue.startBluetoothDevicesDiscovery();
- } else {
- console.log("app.js ===> 断开失败,errCode:", disres.errCode);
- }
- });
- }, 2000);
- },
-
- /**
- * 重置重连计数,用于用户手动点击重试或页面离开时调用
- */
- resetReconnectCount() {
- const reconnect = this.globalData.ppScale.reconnect;
- reconnect.count = 0;
- if (reconnect.timer) {
- clearTimeout(reconnect.timer);
- reconnect.timer = null;
- }
- },
-
- /**
- * 注册 globalData 某个属性的监听
- * @param {string} keyPath 要监听的 globalData 属性路径,例如 'ppScale.device.connectState'
- * @param {function} callback 属性变化时执行的回调函数 (newValue, oldValue) => {}
- */
- watch(keyPath, callback) {
- if (!this.globalData._callbacks[keyPath]) {
- this.globalData._callbacks[keyPath] = [];
- }
- this.globalData._callbacks[keyPath].push(callback);
- },
-
- /**
- * 取消 globalData 某个属性的监听
- * @param {string} keyPath 要取消监听的 globalData 属性路径
- * @param {function} callback 之前注册的回调函数
- */
- unwatch(keyPath, callback) {
- if (this.globalData._callbacks[keyPath]) {
- this.globalData._callbacks[keyPath] = this.globalData._callbacks[keyPath].filter(cb => cb !== callback);
- }
- },
-
- /**
- * 设置 globalData 的值并触发所有相关监听器
- * 支持点表示法设置嵌套属性,例如 'ppScale.device.connectState'
- * @param {string} keyPath 要设置的 globalData 属性路径
- * @param {*} value 要设置的新值
- */
- setGlobalData(keyPath, value) {
- const keys = keyPath.split('.');
- let current = this.globalData;
- let oldValue = undefined;
-
- // 遍历到目标属性的父级
- for (let i = 0; i < keys.length - 1; i++) {
- if (!current[keys[i]]) {
- current[keys[i]] = {}; // 如果路径不存在,创建空对象
- }
- current = current[keys[i]];
- }
-
- // 获取旧值
- oldValue = current[keys[keys.length - 1]];
-
- // 只有当值发生变化时才更新并通知
- if (oldValue !== value) {
- current[keys[keys.length - 1]] = value; // 设置新值
-
- // 触发监听器
- if (this.globalData._callbacks[keyPath]) {
- this.globalData._callbacks[keyPath].forEach(callback => {
- callback(value, oldValue);
- });
- }
- }
- },
-})
\ No newline at end of file
diff --git a/app.json b/app.json
deleted file mode 100644
index 0412fd3..0000000
--- a/app.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "pages": [
- "pages/home/home",
- "pages/help/help",
- "pages/searchDevice/searchDevice",
- "pages/configureDevice/configureDevice",
- "pages/my/my"
- ],
- "window": {
- "navigationBarTitleText": "",
- "navigationBarTextStyle": "black",
- "navigationBarBackgroundColor": "#ffffff"
- },
- "tabBar": {
- "color": "#808080",
- "selectedColor": "#1385FA",
- "borderStyle": "white",
- "list": [
- {
- "pagePath": "pages/home/home",
- "iconPath": "/images/tabBar/home.png",
- "selectedIconPath": "/images/tabBar/home_.png",
- "text": "首页"
- },
- {
- "pagePath": "pages/my/my",
- "iconPath": "/images/tabBar/my.png",
- "selectedIconPath": "/images/tabBar/my_.png",
- "text": "我的"
- }
- ]
- },
- "style": "v2",
- "plugins": {
- "ppScale-plugin": {
- "version": "0.0.24",
- "provider": "wx0826af4e4908f524"
- }
- },
- "permission": {
- "scope.userLocation": {
- "desc": "您的位置信息将用于发现附近的蓝牙设备,以便连接蓝牙秤。"
- }
- },
- "requiredPrivateInfos": [
- "getLocation"
- ],
- "sitemapLocation": "sitemap.json",
- "lazyCodeLoading": "requiredComponents"
-}
\ No newline at end of file
diff --git a/app.wxss b/app.wxss
deleted file mode 100644
index 5d4946a..0000000
--- a/app.wxss
+++ /dev/null
@@ -1,43 +0,0 @@
-page {
- width: 100%;
- height: 100%;
- box-sizing: border-box;
- background-color: #F5F7FB;
-}
-
-image {
- width: 100%;
- height: 100%;
-}
-
-button {
- all: unset;
- display: inline-block;
-}
-
-button::after {
- display: none;
-}
-
-.scrollView {
- width: 100%;
- height: 100%;
-}
-
-.arrowAfter {
- position: relative;
-}
-
-.arrowAfter::after {
- position: absolute;
- right: 6rpx;
- top: 0;
- bottom: 0;
- margin: auto;
- content: "";
- width: 12rpx;
- height: 12rpx;
- border-left: 5rpx solid #b6b6b6;
- border-top: 5rpx solid #b6b6b6;
- transform: rotate(135deg);
-}
\ No newline at end of file
diff --git a/components/configureDevice_1/configureDevice_1.js b/components/configureDevice_1/configureDevice_1.js
deleted file mode 100644
index 197ff65..0000000
--- a/components/configureDevice_1/configureDevice_1.js
+++ /dev/null
@@ -1,32 +0,0 @@
-const app = getApp();
-
-Component({
- data: {
- devices: []
- },
-
- // 生命周期方法
- lifetimes: {
- attached() {
- this.setData({
- devices: app.globalData.ppScale.device.list
- })
- },
- detached() {
- this.setData({
- devices: []
- })
- }
- },
-
- // 组件的方法
- methods: {
- selectDevice(e) {
- let device = this.data.devices[e.currentTarget.dataset.i];
- this.triggerEvent('deviceEvent', {
- device: device,
- status: true
- });
- }
- }
-});
\ No newline at end of file
diff --git a/components/configureDevice_1/configureDevice_1.json b/components/configureDevice_1/configureDevice_1.json
deleted file mode 100644
index 62389a9..0000000
--- a/components/configureDevice_1/configureDevice_1.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "component": true,
- "usingComponents": {}
- }
\ No newline at end of file
diff --git a/components/configureDevice_1/configureDevice_1.wxml b/components/configureDevice_1/configureDevice_1.wxml
deleted file mode 100644
index a225e21..0000000
--- a/components/configureDevice_1/configureDevice_1.wxml
+++ /dev/null
@@ -1,17 +0,0 @@
-
- 蓝牙
- 可用设备
-
-
-
-
-
-
-
- {{item.name}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/components/configureDevice_1/configureDevice_1.wxss b/components/configureDevice_1/configureDevice_1.wxss
deleted file mode 100644
index d75a98f..0000000
--- a/components/configureDevice_1/configureDevice_1.wxss
+++ /dev/null
@@ -1,70 +0,0 @@
-.configureDevice1 {
- width: 100%;
- height: 100%;
- padding: 60rpx 60rpx 0;
- box-sizing: border-box;
-}
-
-.title {
- color: #252535;
- width: 100%;
- height: 48rpx;
- font-size: 48rpx;
- font-weight: bold;
- line-height: 48rpx;
- margin-bottom: 48rpx;
-}
-
-.describe {
- color: #B6B6B6;
- width: 100%;
- height: 30rpx;
- font-size: 30rpx;
- line-height: 30rpx;
- margin-bottom: 40rpx;
-}
-
-.deviceName {
- width: 100%;
- height: calc(100% - 166rpx);
-}
-
-.deviceName>view {
- width: 100%;
- height: 80rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- margin-bottom: 32rpx;
-}
-
-.deviceName>view>view:nth-of-type(1) {
- width: 80rpx;
- height: 80rpx;
- overflow: hidden;
- border-radius: 50%;
- margin-right: 22rpx;
-}
-
-.deviceName>view>view:nth-of-type(2) {
- flex: 1;
- width: 0;
-}
-
-.deviceName>view>view:nth-of-type(2)>view:nth-of-type(1) {
- color: #252535;
- width: 100%;
- height: 32rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 32rpx;
-}
-
-.deviceName>view>view:nth-of-type(2)>view:nth-of-type(2) {
- color: #808080;
- width: 100%;
- height: 28rpx;
- font-size: 28rpx;
- line-height: 28rpx;
- margin-top: 10rpx;
-}
\ No newline at end of file
diff --git a/components/configureDevice_2/configureDevice_2.js b/components/configureDevice_2/configureDevice_2.js
deleted file mode 100644
index d2dacf7..0000000
--- a/components/configureDevice_2/configureDevice_2.js
+++ /dev/null
@@ -1,315 +0,0 @@
-const app = getApp();
-import $ from "../../utils/request";
-
-/**
- * 根据生日计算年龄
- * @param {string} birthday 生日字符串,如 "1990-05-20"
- * @returns {number|null} 年龄,无法计算时返回 null
- */
-function calcAge(birthday) {
- if (!birthday) return null;
- let birthDate = new Date(birthday.replace(/-/g, '/'));
- if (isNaN(birthDate.getTime())) return null;
- let today = new Date();
- let age = today.getFullYear() - birthDate.getFullYear();
- let monthDiff = today.getMonth() - birthDate.getMonth();
- // 未过生日则减一岁
- if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
- age--;
- }
- return age;
-}
-
-Component({
- data: {
- BLUE_STATE: {},
- device: null,
- connectState: "",
- userList: [],
- },
-
- // 存储回调函数的引用,以便在 detached 时取消监听
- _connectStateWatcher: null,
-
- lifetimes: {
- attached() {
- console.log(`[Component] connectState 获取: ${app.globalData.ppScale.device.connectState}`);
- this.setData({
- BLUE_STATE: app.globalData.ppScale.plugin.BLUE_STATE,
- connectState: app.globalData.ppScale.device.connectState,
- device: app.globalData.ppScale.device.connection
- })
- this._connectStateWatcher = (newValue, oldValue) => {
- console.log(`[Component] connectState 变化: ${oldValue} -> ${newValue}`);
- this.setData({
- connectState: newValue || ''
- });
- };
- app.watch('ppScale.device.connectState', this._connectStateWatcher);
-
- this.fetchUserList();
- },
- detached() {
- if (this._connectStateWatcher) {
- app.unwatch('ppScale.device.connectState', this._connectStateWatcher);
- }
- }
- },
-
- // 组件的方法
- methods: {
- // 长按型号区域初始化设备
- onDeviceLongPress() {
- wx.showModal({
- title: "提示",
- content: "确定要初始化设备吗?将清除设备中的所有数据(用户信息、历史数据、配网数据、设置信息)。",
- success: (res) => {
- if (res.confirm) {
- if (!app.globalData.ppScale.activeProtocol) {
- wx.showToast({ title: "设备未连接,请重试", icon: "none" });
- return;
- }
- wx.showLoading({ title: "正在初始化设备...", mask: true });
- app.globalData.ppScale.activeProtocol.codeClearDeviceData("00", (status) => {
- wx.hideLoading();
- if (status == 0) {
- wx.showToast({ title: "设备初始化成功", icon: "success" });
- // 断开蓝牙连接并返回上一页
- app.globalData.ppScale.plugin.Blue.stop();
- setTimeout(() => {
- wx.navigateBack({ delta: 1 });
- }, 1500);
- } else {
- wx.showToast({ title: "设备初始化失败,请重试", icon: "none" });
- }
- });
- }
- }
- });
- },
-
- // 手动重连设备
- connectedDevice() {
- app.resetReconnectCount();
- this.triggerEvent('connectedDeviceEvent', {
- device: this.data.device
- });
- },
-
- addUser() {
- if (this.data.userList.length >= 10) {
- wx.showToast({
- title: "超过最大用户数",
- icon: "none"
- });
- return;
- }
- // 列表为空时,第一个用户只能是员工(主用户)
- const isFirstUser = this.data.userList.length === 0;
- this.selectComponent("#configureDevice2AddUser").showModal(isFirstUser);
- },
-
- getAddUserInfo() {
- this.fetchUserList();
- },
-
- // 获取设备绑定的用户列表
- fetchUserList() {
- if (!app.globalData.ppScale.device.mac) {
- wx.showToast({ title: '设备 MAC 地址为空,请重新连接', icon: 'none' });
- return;
- }
- let sn = app.globalData.ppScale.device.mac.replace(/:/g, '');
- $.ajax("weighingScale/v2/select/user", { sn }, "GET", true, "正在获取用户列表...").then(res => {
- if (res.result && res.result.length) {
- let list = res.result.map(user => {
- // 没有 age 时通过 birthday 计算
- if (!user.age && user.birthday) {
- user.age = calcAge(user.birthday);
- }
- return user;
- });
- this.setData({ userList: list });
- } else {
- this.setData({ userList: [] });
- }
- }).catch(() => {
- wx.showToast({
- title: "用户列表获取失败",
- icon: "none"
- })
- })
- },
-
- // 删除用户
- delUserClick(e) {
- let id = e.currentTarget.dataset.id;
- const userList = this.data.userList;
- const target = userList.find(u => u.id === id);
-
- // 主用户(userType=1)有子用户时不允许删除
- if (target && target.userType === 1) {
- const hasSubUser = userList.some(u => u.userType === 0);
- if (hasSubUser) {
- wx.showToast({ title: "请先删除所有普通用户", icon: "none" });
- return;
- }
- }
- wx.showModal({
- title: "提示",
- content: "确定要删除该用户吗?",
- success: (res) => {
- if (res.confirm) {
- $.ajax("weighingScale/v2/del/user", { id }, "DELETE", true, "正在删除...", "application/x-www-form-urlencoded").then(() => {
- wx.showToast({
- title: "删除成功",
- icon: "success"
- })
- setTimeout(() => {
- this.fetchUserList();
- }, 1500)
- }).catch(() => {
- wx.showToast({
- title: "删除失败,请重试",
- icon: "none"
- })
- })
- }
- }
- })
- },
-
- setUserInfo() {
- if (this.data.connectState != this.data.BLUE_STATE.CONNECTSUCCESS && this.data.connectState != this.data.BLUE_STATE.WIFISUCCESS) {
- wx.showToast({
- title: "设备连接失败,请重试。",
- icon: "none"
- })
- return;
- }
-
- let userList = this.data.userList;
- if (!userList.length) {
- wx.showToast({
- title: "暂无用户信息,请先添加用户",
- icon: "none"
- })
- return;
- }
-
- // 找出主用户,所有用户下发时 userID 统一使用主用户的 userId
- const mainUser = userList.find(u => u.userType === 1);
- if (!mainUser) {
- wx.showToast({ title: "未找到主用户,请先添加员工用户", icon: "none" });
- return;
- }
- const mainUserId = mainUser.userId;
-
- wx.showLoading({ title: "正在同步用户数据...", mask: true });
-
- // 第一步:清除秤上所有用户信息(15秒超时保护)
- let clearTimer = setTimeout(() => {
- wx.hideLoading();
- wx.showToast({ title: "清除设备数据超时,请重试", icon: "none" });
- }, 15000);
-
- app.globalData.ppScale.activeProtocol.codeClearDeviceData("01", (clearRes) => {
- clearTimeout(clearTimer);
- console.log("codeClearDeviceData res", clearRes);
- if (clearRes !== 0x00) {
- wx.hideLoading();
- wx.showToast({ title: "同步用户失败,请重试", icon: "none" });
- return;
- }
-
- // 第二步:全量下发本地用户列表
- let syncIndex = 0;
- let syncTimer = null;
-
- // 清除超时定时器
- const clearSyncTimer = () => {
- if (syncTimer) {
- clearTimeout(syncTimer);
- syncTimer = null;
- }
- };
-
- // 重置超时定时器,10秒无响应则认定失败
- const resetSyncTimer = () => {
- clearSyncTimer();
- syncTimer = setTimeout(() => {
- console.log("dataSyncUserInfo 超时,第" + (syncIndex + 1) + "个用户下发超时");
- wx.hideLoading();
- wx.showToast({ title: "用户信息下发超时,请重试", icon: "none" });
- }, 15000);
- };
-
- const syncNext = () => {
- if (syncIndex >= userList.length) {
- // 全部下发完成,清除定时器
- clearSyncTimer();
- wx.hideLoading();
- wx.showToast({ title: "用户信息同步成功", icon: "success" });
- setTimeout(() => {
- this._checkWifiAndNext();
- }, 1500);
- return;
- }
- const user = userList[syncIndex];
- // 主用户 memberID 为空,子用户 memberID 为子用户自己的 userId
- const memberID = user.userId === mainUserId ? "" : user.userId;
- wx.showLoading({ title: "正在下发第" + (syncIndex + 1) + "/" + userList.length + "个用户...", mask: true });
- // 每次下发前重置10秒超时定时器
- resetSyncTimer();
- app.globalData.ppScale.activeProtocol.dataSyncUserInfo({
- userID: mainUserId,
- userName: user.realname,
- memberID: memberID,
- age: user.age || '',
- gender: user.sex === 2 ? 0 : user.sex,
- height: user.height || '',
- isAthleteMode: 0,
- deviceHeaderIndex: syncIndex,
- currentWeight: user.weight || '',
- targetWeight: "",
- idealWeight: "",
- recentData: [],
- }, (res) => {
- console.log("dataSyncUserInfo res", res, "user:", user.realname, "userID:", mainUserId, "memberID:", memberID);
- if (res == 0) {
- // 成功:重置定时器,继续下发下一个用户
- resetSyncTimer();
- syncIndex++;
- syncNext();
- } else {
- // 失败自动重试当前用户,重置定时器
- resetSyncTimer();
- syncNext();
- }
- });
- };
- syncNext();
- });
- },
-
- /**
- * 同步完成后检测配网状态,决定跳转到哪一步
- * 已配网(0x01) → progressIndex: 3,跳过配网步骤
- * 未配网 → progressIndex: 2,进入配网步骤
- */
- _checkWifiAndNext() {
- wx.showLoading({ title: "正在检测配网状态...", mask: true });
- app.globalData.ppScale.activeProtocol.codeFetchWifiConfig((res) => {
- wx.hideLoading();
- if (res === undefined || res === null) {
- // 获取失败,自动重试
- this._checkWifiAndNext();
- return;
- }
- // 0x01 表示已配网,跳过配网步骤直接进入下一步
- const progressIndex = res === 0x01 ? 3 : 2;
- this.triggerEvent('deviceEvent', { status: true, progressIndex });
- });
- },
- }
-});
\ No newline at end of file
diff --git a/components/configureDevice_2/configureDevice_2.json b/components/configureDevice_2/configureDevice_2.json
deleted file mode 100644
index 8d3db77..0000000
--- a/components/configureDevice_2/configureDevice_2.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "component": true,
- "usingComponents": {
- "configureDevice_2_addUser": "/components/configureDevice_2_addUser/configureDevice_2_addUser"
- }
- }
\ No newline at end of file
diff --git a/components/configureDevice_2/configureDevice_2.wxml b/components/configureDevice_2/configureDevice_2.wxml
deleted file mode 100644
index a3ed9c8..0000000
--- a/components/configureDevice_2/configureDevice_2.wxml
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{item.realname}}
-
-
-
-
-
-
-
-
-
- {{item.age}}
-
-
-
- 身高:{{item.height}}cm
-
- 体重:{{item.weight}}kg
-
-
- -
-
-
-
-
-
-
-
-
-
-
- 暂无用户数据
-
-
-
-
- 添加用户
- 下一步
-
-
- 请认真填写和完善员工健康信息,用于计算身体数据及运动卡路里消耗等,以便准确的分析数据。(填写数据同时,踩亮蓝牙称并与其保持连接)。
-
-
-
-
\ No newline at end of file
diff --git a/components/configureDevice_2/configureDevice_2.wxss b/components/configureDevice_2/configureDevice_2.wxss
deleted file mode 100644
index 3dffc9e..0000000
--- a/components/configureDevice_2/configureDevice_2.wxss
+++ /dev/null
@@ -1,281 +0,0 @@
-
-input {
- width: 100%;
- height: 58rpx;
- font-size: 28rpx;
- line-height: 58rpx;
-}
-
-.placeholderClass {
- color: #B6B6B6;
- height: 58rpx;
- font-size: 28rpx;
- line-height: 58rpx;
-}
-
-.valueClass {
- color: #77849E;
- height: 58rpx;
- font-size: 28rpx;
- font-weight: bold;
- line-height: 58rpx;
-}
-
-.configureDevice2 {
- width: 100%;
- height: 100%;
- display: flex;
- flex-flow: column;
-}
-
-.header {
- width: 100%;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- padding: 30rpx 40rpx;
- box-sizing: border-box;
- border-bottom: 1rpx solid #EAECF1;
-}
-
-.header>view:nth-of-type(1) {
- flex: 1;
-}
-
-.header>view:nth-of-type(1)>view:nth-of-type(1) {
- color: #252535;
- height: 32rpx;
- font-weight: bold;
- font-size: 32rpx;
- line-height: 32rpx;
- margin-bottom: 16rpx;
-}
-
-.header>view:nth-of-type(1)>view:nth-of-type(2) {
- color: #808080;
- height: 26rpx;
- font-size: 26rpx;
- line-height: 26rpx;
-}
-
-.header>view:nth-of-type(2) {
- height: 28rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
-}
-
-.header>view:nth-of-type(2)>view:nth-of-type(1) {
- width: 12rpx;
- height: 12rpx;
- border-radius: 50%;
- margin-right: 14rpx;
-}
-
-.header>view:nth-of-type(2)>view:nth-of-type(2) {
- height: 28rpx;
- font-weight: bold;
- font-size: 28rpx;
- line-height: 28rpx;
-}
-
-.section {
- flex: 1;
- overflow: hidden;
- width: 100%;
- display: flex;
- flex-flow: column;
-}
-
-.from {
- width: 100%;
- padding: 24rpx 0;
- flex: 1;
- overflow: hidden;
-}
-
-.scrollViewContent {
- width: 100%;
- padding: 0 30rpx;
- box-sizing: border-box;
-}
-
-.userList {
- width: 100%;
- height: 162rpx;
- border-radius: 16px;
- padding: 0 30rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- box-sizing: border-box;
- margin-bottom: 24rpx;
- border: 1rpx solid #E6E6EA;
-}
-
-.userAvatar {
- width: 90rpx;
- height: 90rpx;
- box-sizing: border-box;
- overflow: hidden;
- border-radius: 50%;
- margin-right: 24rpx;
-}
-
-.userInfo {
- flex: 1;
- margin-right: 24rpx;
-}
-
-.userInfo_1 {
- width: 100%;
- height: 32rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- margin-bottom: 20rpx;
-}
-
-.userInfo_1>view:nth-of-type(1) {
- color: #333333;
- font-size: 30rpx;
- height: 32rpx;
- font-weight: bold;
- line-height: 32rpx;
- margin-right: 20rpx;
-}
-
-.userInfo_1>view:nth-of-type(2) {
- height: 32rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- padding: 0 8rpx;
- border-radius: 8rpx;
-}
-
-.userInfo_1 .man {
- background: linear-gradient(90deg, #54D9FC 0%, #6FC1FB 100%);
-}
-
-.userInfo_1 .woman {
- background: linear-gradient(90deg, #FF91B6 0%, #FD6C9D 100%);
-}
-
-.userInfo_1>view:nth-of-type(2)>view:nth-of-type(1) {
- width: 20rpx;
- height: 20rpx;
- display: flex;
- align-items: center;
- margin-right: 4rpx;
-}
-
-.userInfo_1>view:nth-of-type(2)>view:nth-of-type(2) {
- color: #FFFFFF;
- height: 32rpx;
- font-weight: bold;
- font-size: 22rpx;
- line-height: 32rpx;
-}
-
-.userInfo_2 {
- width: 100%;
- height: 26rpx;
- display: flex;
- align-items: center;
- flex-wrap: nowrap;
-}
-
-.userInfo_2>view {
- color: #77849E;
- height: 26rpx;
- font-size: 26rpx;
- line-height: 26rpx;
-}
-
-.userInfo_2>view:nth-of-type(2) {
- margin: 0 20rpx;
- width: 4rpx;
- height: 24rpx;
- border-radius: 1rpx;
- background-color: #EAECF1;
-}
-
-.delUser {
- color: #FFFFFF;
- width: 40rpx;
- height: 40rpx;
- font-size: 36rpx;
- font-weight: bold;
- line-height: 34rpx;
- text-align: center;
- border-radius: 50%;
- background-color: #F24439;
-}
-
-.nullData {
- width: 100%;
- padding: 200rpx 0 250rpx;
-}
-
-.nullData>view:first-of-type {
- width: 230rpx;
- height: 160rpx;
- margin: 0 auto 15rpx;
-}
-
-.nullData>view:last-of-type {
- color: #B6B6B6;
- height: 30rpx;
- font-size: 30rpx;
- line-height: 30rpx;
- text-align: center;
-}
-
-.btn {
- width: 100%;
- padding: 0 55rpx;
- box-sizing: border-box;
-}
-
-.btn>view:nth-of-type(1) {
- color: #1385FA;
- width: 100%;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- text-align: center;
- line-height: 86rpx;
- border-radius: 44rpx;
- margin-bottom: 40rpx;
- box-sizing: border-box;
- border: 1px solid #1385FA;
-}
-
-.btn>view:nth-of-type(2) {
- color: #FFFFFF;
- width: 100%;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- text-align: center;
- line-height: 86rpx;
- border-radius: 44rpx;
- margin-bottom: 40rpx;
- box-sizing: border-box;
- background-color: #1385FA;
- border: 1px solid #1385FA;
-}
-
-.describe {
- color: #77849E;
- width: 100%;
- font-size: 24rpx;
- line-height: 40rpx;
- padding: 0 30rpx 20rpx;
- box-sizing: border-box;
-}
-
-.describe text {
- color: #F24439;
-}
\ No newline at end of file
diff --git a/components/configureDevice_2_addUser/configureDevice_2_addUser.js b/components/configureDevice_2_addUser/configureDevice_2_addUser.js
deleted file mode 100644
index d5a3172..0000000
--- a/components/configureDevice_2_addUser/configureDevice_2_addUser.js
+++ /dev/null
@@ -1,257 +0,0 @@
-import $ from "../../utils/request";
-const app = getApp();
-
-Component({
- properties: {
-
- },
- data: {
- animationData: null,
- modalStatus: false,
- // 是否是第一个用户(主用户),true 时只能选员工
- isFirstUser: false,
- // 用户类型:employee=员工,family=家庭用户
- userType: 'employee',
- // 员工模式
- workNo: "",
- userInfo: null,
- // 家庭用户模式 - 手动填写
- familyInfo: {
- name: '',
- sex: 1,
- birthday: '',
- height: '',
- weight: ''
- },
- // 性别选择器选项
- genderOptions: ['男', '女'],
- genderIndex: 0,
- },
- lifetimes: {
- // 在组件实例进入页面节点树时执行
- attached() {
-
- },
-
- // 在组件实例被从页面节点树移除时执行
- detached() {
-
- },
- },
- methods: {
- // 显示对话框
- showModal(isFirstUser = false) {
- this.setData({ isFirstUser: !!isFirstUser });
- // 先瞬间将弹窗移到屏幕下方(duration:0,不产生过渡)
- let initAnim = wx.createAnimation({ duration: 0 });
- initAnim.translateY(1200).step();
- this.setData({ animationData: initAnim.export(), modalStatus: true });
- // 留一帧让渲染生效,再执行滑入动画
- setTimeout(() => {
- let animation = wx.createAnimation({ duration: 300, timingFunction: 'ease' });
- animation.translateY(0).step();
- this.setData({ animationData: animation.export() });
- }, 50);
- },
-
- // 隐藏对话框
- hideModal() {
- // 执行滑出动画
- let animation = wx.createAnimation({ duration: 300, timingFunction: 'ease' });
- animation.translateY(1200).step();
- this.setData({ animationData: animation.export() });
- // 等动画结束后再隐藏节点
- setTimeout(() => {
- this.setData({ modalStatus: false });
- }, 300);
- },
-
- // 关闭弹窗并重置所有数据
- closeModal() {
- this.setData({
- isFirstUser: false,
- userType: 'employee',
- workNo: "",
- userInfo: null,
- familyInfo: {
- name: '',
- sex: 1,
- birthday: '',
- height: '',
- weight: ''
- },
- genderIndex: 0,
- });
- this.hideModal();
- },
-
- // 切换用户类型,同时清空所有已填数据
- switchUserType(e) {
- // 主用户模式下禁止切换
- if (this.data.isFirstUser) return;
- const type = e.currentTarget.dataset.type;
- if (type === this.data.userType) return;
- this.setData({
- userType: type,
- workNo: "",
- userInfo: null,
- familyInfo: {
- name: '',
- sex: 1,
- birthday: '',
- height: '',
- weight: ''
- },
- genderIndex: 0,
- });
- },
-
- // 监听工号输入(员工模式),输入满 8 位时自动查询
- onWorkNoInput(e) {
- const value = e.detail.value;
- this.setData({ workNo: value, userInfo: null });
- if (value.trim().length === 8) {
- this.searchUser();
- }
- },
-
- // 监听身高输入(员工模式)
- onHeightInput(e) {
- this.setData({ 'userInfo.height': e.detail.value });
- },
-
- // 监听体重输入(员工模式)
- onWeightInput(e) {
- this.setData({ 'userInfo.weight': e.detail.value });
- },
-
- // 监听家庭用户姓名输入
- onFamilyNameInput(e) {
- this.setData({ 'familyInfo.name': e.detail.value });
- },
-
- // 监听家庭用户性别选择
- onFamilyGenderChange(e) {
- const index = e.detail.value;
- // 1=男,2=女
- this.setData({
- genderIndex: index,
- 'familyInfo.sex': index === '0' || index === 0 ? 1 : 2
- });
- },
-
- // 监听家庭用户生日选择
- onFamilyBirthdayChange(e) {
- this.setData({ 'familyInfo.birthday': e.detail.value });
- },
-
- // 监听家庭用户身高输入
- onFamilyHeightInput(e) {
- this.setData({ 'familyInfo.height': e.detail.value });
- },
-
- // 监听家庭用户体重输入
- onFamilyWeightInput(e) {
- this.setData({ 'familyInfo.weight': e.detail.value });
- },
-
- // 根据工号查询用户信息(员工模式)
- searchUser() {
- let workNo = this.data.workNo.trim();
- if (!workNo) {
- wx.showToast({
- title: "请输入工号",
- icon: "none"
- })
- return;
- }
- let sn = app.globalData.ppScale.device.mac.replace(/:/g, '');
- $.ajax("weighingScale/v2/getUserInfoByWkno", {
- workNo: workNo,
- sn: sn
- }, "GET", true, "正在查询...").then(res => {
- if (res.result) {
- this.setData({ userInfo: res.result });
- } else {
- this.setData({ userInfo: null });
- wx.showToast({
- title: "未查询到该工号的用户信息",
- icon: "none"
- })
- }
- }).catch((err) => {
- console.log(err);
- this.setData({ userInfo: null });
- wx.showToast({
- title: (err && err.message) || "查询失败",
- icon: "none"
- })
- })
- },
-
- // 确定提交
- submit() {
- const sn = app.globalData.ppScale.device.mac.replace(/:/g, '');
-
- if (this.data.userType === 'employee') {
- // 员工模式:必须先查询到用户信息
- if (!this.data.userInfo) {
- wx.showToast({ title: "请先查询用户信息", icon: "none" });
- return;
- }
- let userInfo = this.data.userInfo;
- if (!userInfo.height) {
- wx.showToast({ title: "请输入身高", icon: "none" });
- return;
- }
- if (!userInfo.weight) {
- wx.showToast({ title: "请输入体重", icon: "none" });
- return;
- }
- userInfo.sn = sn;
- $.ajax("weighingScale/v2/edit/user", userInfo, "POST", true, "正在添加...").then(res => {
- wx.showToast({ title: "添加成功", icon: "success" });
- this.triggerEvent('returnDate', { userInfo });
- this.closeModal();
- }).catch(() => {
- wx.showToast({ title: "添加失败,请重试", icon: "none" });
- });
-
- } else {
- // 家庭用户模式:校验手动填写的字段
- const familyInfo = this.data.familyInfo;
- if (!familyInfo.name.trim()) {
- wx.showToast({ title: "请输入姓名", icon: "none" });
- return;
- }
- if (!familyInfo.birthday) {
- wx.showToast({ title: "请选择生日", icon: "none" });
- return;
- }
- if (!familyInfo.height) {
- wx.showToast({ title: "请输入身高", icon: "none" });
- return;
- }
- if (!familyInfo.weight) {
- wx.showToast({ title: "请输入体重", icon: "none" });
- return;
- }
- const submitData = {
- realname: familyInfo.name.trim(),
- sex: familyInfo.sex,
- birthday: familyInfo.birthday,
- height: familyInfo.height,
- weight: familyInfo.weight,
- sn: sn
- };
- $.ajax("weighingScale/v2/edit/user", submitData, "POST", true, "正在添加...").then(res => {
- wx.showToast({ title: "添加成功", icon: "success" });
- this.triggerEvent('returnDate', { userInfo: submitData });
- this.closeModal();
- }).catch(() => {
- wx.showToast({ title: "添加失败,请重试", icon: "none" });
- });
- }
- }
- }
-});
diff --git a/components/configureDevice_2_addUser/configureDevice_2_addUser.json b/components/configureDevice_2_addUser/configureDevice_2_addUser.json
deleted file mode 100644
index fba482a..0000000
--- a/components/configureDevice_2_addUser/configureDevice_2_addUser.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "component": true
-}
\ No newline at end of file
diff --git a/components/configureDevice_2_addUser/configureDevice_2_addUser.wxml b/components/configureDevice_2_addUser/configureDevice_2_addUser.wxml
deleted file mode 100644
index 7fcf8d0..0000000
--- a/components/configureDevice_2_addUser/configureDevice_2_addUser.wxml
+++ /dev/null
@@ -1,165 +0,0 @@
-
-
-
-
-
-
-
-
-
- 员工
- 家庭用户
-
-
-
-
-
-
- 工号:
-
-
-
-
-
-
- 姓名:
-
-
-
- {{userInfo.realname || ''}}
-
-
-
-
-
-
-
-
-
-
- 性别:
-
-
-
- {{userInfo.sex === 1 ? '男' : userInfo.sex === 2 ? '女' : ''}}
-
-
-
-
-
-
-
-
-
-
- 生日:
-
-
-
- {{userInfo.birthday || ''}}
-
-
-
-
-
-
-
-
-
-
- 身高:
-
-
-
-
- cm
-
-
-
-
- 体重:
-
-
-
-
- kg
-
-
-
-
-
-
-
-
- 姓名:
-
-
-
-
-
-
- 性别:
-
-
-
-
- {{genderOptions[genderIndex]}}
-
-
-
-
-
-
-
-
- 生日:
-
-
-
-
- {{familyInfo.birthday || '请选择生日'}}
-
-
-
-
-
-
-
-
- 身高:
-
-
-
-
- cm
-
-
-
-
- 体重:
-
-
-
-
- kg
-
-
-
-
-
-
-
diff --git a/components/configureDevice_2_addUser/configureDevice_2_addUser.wxss b/components/configureDevice_2_addUser/configureDevice_2_addUser.wxss
deleted file mode 100644
index 106455a..0000000
--- a/components/configureDevice_2_addUser/configureDevice_2_addUser.wxss
+++ /dev/null
@@ -1,215 +0,0 @@
-.modalBg {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background-color: #000;
- opacity: 0.2;
- overflow: hidden;
- z-index: 10;
-}
-
-.modal {
- height: 1200rpx;
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- z-index: 11;
- display: flex;
- flex-flow: column;
- overflow: hidden;
- background-color: #ffffff;
- border-radius: 30rpx 30rpx 0 0;
-}
-
-.header {
- height: 150rpx;
- width: 100%;
- padding-top: 30rpx;
- box-sizing: border-box;
-}
-
-.header>view:nth-of-type(1) {
- width: 72rpx;
- height: 6rpx;
- border-radius: 3rpx;
- margin: 0 auto 40rpx;
- background-color: #77849E;
-}
-
-.header>view:nth-of-type(2) {
- color: #252535;
- height: 32rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 32rpx;
- text-align: center;
-}
-
-.seaction {
- flex: 1;
- padding: 0 30rpx;
- overflow: hidden;
-}
-
-.seaction>view:last-of-type {
- margin-bottom: 0;
-}
-
-.select {
- width: 100%;
- height: 80rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- padding: 4rpx;
- box-sizing: border-box;
- margin-bottom: 40rpx;
- border-radius: 16rpx;
- background-color: #F3F5F8;
-}
-
-.select>view {
- color: #808080;
- flex: 1;
- width: 0;
- height: 72rpx;
- line-height: 72rpx;
- font-size: 32rpx;
- border-radius: 16rpx;
- text-align: center;
-}
-
-.selectActive {
- color: #1385FA !important;
- font-weight: bold;
- background-color: #FFFFFF;
-}
-
-.only,
-.input,
-.inputUnit {
- width: 100%;
- height: 102rpx;
- display: flex;
- flex-wrap: nowrap;
- margin-bottom: 32rpx;
-}
-
-.only>view:nth-of-type(1),
-.input>view:nth-of-type(1),
-.inputUnit>view:nth-of-type(1) {
- color: #333333;
- height: 102rpx;
- font-size: 32rpx;
- line-height: 102rpx;
-}
-
-.only>view:nth-of-type(2),
-.inputUnit>view:nth-of-type(2) {
- flex: 1;
- width: 0;
- height: 102rpx;
- padding: 0 30rpx;
- border-radius: 16rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- border: 1rpx solid #E6E6EA;
-}
-
-.only>view:nth-of-type(2)>view:nth-of-type(1),
-.inputUnit>view:nth-of-type(2)>view:nth-of-type(1) {
- flex: 1;
- width: 0;
- color: #252535;
- font-size: 32rpx;
- font-weight: 500;
- height: 100rpx;
- line-height: 100rpx;
-}
-
-.only>view:nth-of-type(2)>view:nth-of-type(2),
-.inputUnit>view:nth-of-type(2)>view:nth-of-type(2) {
- color: #77849E;
- height: 28rpx;
- font-size: 28rpx;
- line-height: 28rpx;
-}
-
-.input>view:nth-of-type(2) {
- flex: 1;
- width: 0;
- height: 102rpx;
- padding: 0 30rpx;
- border-radius: 16rpx;
- border: 1rpx solid #E6E6EA;
-}
-
-.input>view:nth-of-type(2) input,
-.inputUnit>view:nth-of-type(2)>view:nth-of-type(1) input {
- width: 100%;
- height: 100%;
- color: #252535;
- font-size: 32rpx;
- font-weight: 500;
-}
-
-.inputUnit>view:nth-of-type(2) {
-
-}
-
-.searchBtn {
- color: #FFFFFF;
- width: 120rpx;
- height: 102rpx;
- font-size: 28rpx;
- font-weight: bold;
- text-align: center;
- line-height: 102rpx;
- margin-left: 16rpx;
- border-radius: 16rpx;
- background-color: #1385FA;
-}
-
-.footer {
- width: 100%;
- padding: 0 30rpx;
- height: 120rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- justify-content: space-between;
- box-sizing: border-box;
- background-color: #FFFFFF;
- border-top: 1rpx solid #EAECF1;
-}
-
-.footer>view:nth-of-type(1) {
- color: #1385FA;
- width: 330rpx;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- border-radius: 44rpx;
- text-align: center;
- line-height: 86rpx;
- box-sizing: border-box;
- border: 1rpx solid #1385FA;
-}
-
-.footer>view:nth-of-type(2) {
- color: #FFFFFF;
- width: 330rpx;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- border-radius: 44rpx;
- text-align: center;
- line-height: 86rpx;
- box-sizing: border-box;
- background-color: #1385FA;
- border: 1rpx solid #1385FA;
-}
\ No newline at end of file
diff --git a/components/configureDevice_3/configureDevice_3.js b/components/configureDevice_3/configureDevice_3.js
deleted file mode 100644
index 95c8cd2..0000000
--- a/components/configureDevice_3/configureDevice_3.js
+++ /dev/null
@@ -1,143 +0,0 @@
-const app = getApp();
-
-Component({
- data: {
- progress: 0,
- // loading=正在获取,failed=获取失败,success=获取成功
- wifiStatus: 'loading',
- wifiList: [],
-
- selectWifi: null,
- type: true,
- selectWifiPWD: ""
- },
-
- lifetimes: {
- attached() {
- // WiFi 列表获取由父页面在 activeProtocol 就绪后显式调用,此处不自动触发
- },
- detached() {
- console.log('configureDevice3 detached');
- }
- },
-
- // 组件的方法
- methods: {
- initWifi() {
- this.setData({ wifiStatus: 'loading' });
- wx.showLoading({ title: "正在获取Wi-Fi列表...", mask: true });
- const activeProtocol = app.globalData.ppScale.activeProtocol;
- if (!activeProtocol) {
- wx.hideLoading();
- this.setData({ wifiStatus: 'failed' });
- return;
- }
- // 15秒超时:断开设备静默重连
- const timer = setTimeout(() => {
- wx.hideLoading();
- this.setData({ wifiStatus: 'failed' });
- // 延长时间 失败调用退出wifi配网
- activeProtocol.dataExitWifiConfig((res) => {
- console.log("dataExitWifiConfig", res)
- })
- }, 15000);
- // 延时两秒后再调用接口
- setTimeout(() => {
- activeProtocol.dataFindSurroundDevice((res) => {
- console.log("wifi列表", res)
- clearTimeout(timer);
- wx.hideLoading();
- if (res.length === 0) {
- activeProtocol.dataExitWifiConfig((res) => {
- console.log("dataExitWifiConfig", res)
- })
- this.setData({ wifiStatus: 'failed' });
- return;
- }
- this.setData({ wifiList: res, wifiStatus: 'success' });
- });
- }, 2000);
- },
-
- // 最小化后重连,重置所有状态并重新获取 WiFi 列表
- reInitWifi() {
- this.setData({
- progress: 0,
- wifiStatus: 'loading',
- wifiList: [],
- selectWifi: null,
- selectWifiPWD: ""
- });
- this.initWifi();
- },
-
- selectDevice(e) {
- this.setData({
- progress: 1,
- selectWifi: e.currentTarget.dataset.item,
- })
- },
-
- inputTypeChange() {
- this.setData({
- type: !this.data.type
- })
- },
-
- passwordInput(e) {
- this.setData({
- selectWifiPWD: e.detail.value
- })
- },
-
- setWifiPWD() {
- this.setData({ progress: 2 });
-
- let version = app.globalData.ppScale.version;
- if (version === 'domain1') {
- app.globalData.ppScale.activeProtocol.dataConfigNetWork({
- domain: app.globalData.ppScale.domain1,
- ssid: this.data.selectWifi.ssid,
- password: this.data.selectWifiPWD
- }, (res) => {
- console.log("setNetwork.js dataConfigNetWork 1", res);
- this.netWorkCallBack(res);
- });
- }
- if (version === 'domain2') {
- app.globalData.ppScale.activeProtocol.dataConfigUserNetWork({
- domain: app.globalData.ppScale.domain2,
- ssid: this.data.selectWifi.ssid,
- password: this.data.selectWifiPWD,
- userName: "apiUser",
- userPassword: "3acebb95eb49577e9c2a2082589b9bd6",
- }, (res) => {
- console.log("setNetwork.js dataConfigUserNetWork 2", res);
- this.netWorkCallBack(res);
- });
- }
- },
-
- netWorkCallBack(res) {
- if(res == 23) {
- app.globalData.ppScale.wifi.ssid = this.data.selectWifi.ssid;
- app.globalData.ppScale.wifi.password = this.data.selectWifiPWD;
-
- this.triggerEvent('deviceEvent', {
- status: true
- });
- } else {
- app.globalData.ppScale.plugin.Blue.stop();
- wx.showToast({
- icon: "none",
- title: "配网失败,错误码:" + res
- })
- setTimeout(() => {
- wx.navigateBack({
- delta: 2
- })
- }, 1500)
- }
- }
- }
-});
\ No newline at end of file
diff --git a/components/configureDevice_3/configureDevice_3.json b/components/configureDevice_3/configureDevice_3.json
deleted file mode 100644
index 62389a9..0000000
--- a/components/configureDevice_3/configureDevice_3.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "component": true,
- "usingComponents": {}
- }
\ No newline at end of file
diff --git a/components/configureDevice_3/configureDevice_3.wxml b/components/configureDevice_3/configureDevice_3.wxml
deleted file mode 100644
index 592cf00..0000000
--- a/components/configureDevice_3/configureDevice_3.wxml
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
- 可用Wi-Fi
- 网络列表(设备暂不支持5GWi-Fi网络)
-
-
-
-
-
-
-
-
-
-
-
- {{item.ssid}}
-
-
-
-
-
-
-
-
-
-
-
- 正在获取WiFi列表中...
-
-
- 获取WiFi失败,点击重试
-
-
-
-
-
-
-
-
- 输入Wi-Fi密码
-
-
-
-
-
- {{selectWifi.ssid}}
-
-
- 密码
-
-
-
-
-
-
-
-
-
-
-
-
-
- 连接
-
-
-
-
-
-
-
- 设备正在配对网络中,请稍等...
- 请持续站在秤上,耐心等待
-
-
-
\ No newline at end of file
diff --git a/components/configureDevice_3/configureDevice_3.wxss b/components/configureDevice_3/configureDevice_3.wxss
deleted file mode 100644
index 2b836cb..0000000
--- a/components/configureDevice_3/configureDevice_3.wxss
+++ /dev/null
@@ -1,226 +0,0 @@
-.configureDevice3 {
- width: 100%;
- height: 100%;
-}
-
-.progress0 {
- width: 100%;
- height: 100%;
- padding-top: 60rpx;
- box-sizing: border-box;
-}
-
-.progress0_title {
- width: 100%;
- padding: 0 60rpx;
- box-sizing: border-box;
- margin-bottom: 40rpx;
-}
-
-.progress0_title>view:nth-of-type(1) {
- color: #252535;
- width: 100%;
- height: 48rpx;
- font-size: 48rpx;
- font-weight: bold;
- line-height: 48rpx;
- margin-bottom: 48rpx;
-}
-
-.progress0_title>view:nth-of-type(2) {
- color: #B6B6B6;
- width: 100%;
- height: 30rpx;
- font-size: 30rpx;
- line-height: 30rpx;
-}
-
-.nullData {
- width: 100%;
- padding: 200rpx 0 250rpx;
-}
-
-.nullData>view:first-of-type {
- width: 230rpx;
- height: 160rpx;
- margin: 0 auto 15rpx;
-}
-
-.nullData>view:last-of-type {
- color: #B6B6B6;
- height: 30rpx;
- font-size: 30rpx;
- line-height: 30rpx;
- text-align: center;
-}
-
-.progress0_content {
- width: 100%;
- height: calc(100% - 166rpx);
-}
-
-.scrollView {
- width: 100%;
- height: 100%;
-}
-
-.scrollViewContent {
- width: 100%;
- padding: 0 60rpx;
- box-sizing: border-box;
-}
-
-.scrollViewContent>view {
- width: 100%;
- height: 80rpx;
- display: flex;
- flex-wrap: nowrap;
- margin-bottom: 32rpx;
-}
-
-.scrollViewContent>view>view:nth-of-type(1) {
- width: 80rpx;
- height: 80rpx;
- margin-right: 24rpx;
-}
-
-.scrollViewContent>view>view:nth-of-type(2) {
- color: #252535;
- flex: 1;
- width: 0;
- height: 80rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 80rpx;
-}
-
-
-.progress1 {
- width: 100%;
- height: 100%;
- padding: 60rpx 30rpx 0;
- box-sizing: border-box;
-}
-
-.progress1_title {
- color: #252535;
- width: 100%;
- height: 48rpx;
- font-size: 48rpx;
- font-weight: bold;
- line-height: 48rpx;
- margin-bottom: 48rpx;
-}
-
-.progress1_form {
- width: 100%;
- margin-bottom: 64rpx;
-}
-
-.progress1_form>view {
- width: 100%;
- height: 96rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- padding: 0 24rpx;
- box-sizing: border-box;
- border-radius: 16rpx;
- background-color: #F6F6F6;
-}
-
-.progress1_form>view:first-of-type {
- margin-bottom: 32rpx;
-}
-
-.progress1_form>view>view:nth-of-type(1) {
- color: #252535;
- width: 100rpx;
- height: 96rpx;
- line-height: 96rpx;
- font-size: 32rpx;
- font-weight: bold;
-}
-
-.progress1_form>view:first-of-type>view:nth-of-type(1) {
- padding: 24rpx 45rpx 24rpx 7rpx;
- box-sizing: border-box;
- display: flex;
- align-items: center;
-}
-
-.progress1_form>view>view:nth-of-type(2) {
- color: #252535;
- flex: 1;
- width: 0;
- height: 96rpx;
- font-size: 32rpx;
- line-height: 96rpx;
-}
-
-.progress1_form>view>view:nth-of-type(2) input {
- color: #252535;
- width: 100%;
- height: 96rpx;
- font-size: 32rpx;
- line-height: 96rpx;
-}
-
-.placeholderClass {
- color: #B6B6B6;
- height: 96rpx;
- font-size: 32rpx;
- line-height: 96rpx;
-}
-
-.progress1_form>view>view:nth-of-type(3) {
- width: 56rpx;
- height: 56rpx;
-}
-
-.progress1_btn {
- color: #FFFFFF;
- width: 580rpx;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 88rpx;
- margin: 0 auto;
- text-align: center;
- border-radius: 44rpx;
- background-color: #1385FA;
-}
-
-
-.progress2 {
- width: 100%;
- height: 100%;
- padding: 90rpx 62rpx 0;
- box-sizing: border-box;
-}
-
-.progress2>view:nth-of-type(1) {
- width: 565rpx;
- height: 500rpx;
- margin: 0 auto;
-}
-
-.progress2>view:nth-of-type(2) {
- color: #1385FA;
- width: 100%;
- height: 36rpx;
- font-size: 36rpx;
- font-weight: bold;
- line-height: 36rpx;
- text-align: center;
- margin-bottom: 28rpx;
-}
-
-.progress2>view:nth-of-type(3) {
- color: #808080;
- width: 100%;
- height: 30rpx;
- font-size: 30rpx;
- text-align: center;
- line-height: 30rpx;
-}
\ No newline at end of file
diff --git a/components/configureDevice_4/configureDevice_4.js b/components/configureDevice_4/configureDevice_4.js
deleted file mode 100644
index a1ba63f..0000000
--- a/components/configureDevice_4/configureDevice_4.js
+++ /dev/null
@@ -1,61 +0,0 @@
-const app = getApp();
-import $ from "../../utils/request";
-
-Component({
- data: {},
-
- methods: {
- bindOk() {
- this.triggerEvent('deviceEvent', { status: true });
- },
-
- // 开始 OTA 升级
- startOtaUpgrade() {
- const ppScale = app.globalData.ppScale;
- const activeProtocol = ppScale.activeProtocol;
-
- if (!activeProtocol) {
- wx.showToast({ title: '设备未连接,请重新连接', icon: 'none' });
- return;
- }
-
- ppScale.plugin.bus.subscribe("deviceInfo", (res) => {
- console.log("===》deviceInfo", res);
-
- // 解析固件版本号:格式 "006.005.004.305" → [mcu, ble, wifi, res]
- const [mcuVer, bleVer, wifiVer, resVer] = (res.firmwareRevision || "").split(".");
-
- $.ajax("weighingScale/v2/select/user", {
- type: res.modelNumber
- }, "GET", false, "").then(serverRes => {
- if (serverRes.result) {
- /**
- * 判断服务端版本是否大于设备端版本(需要升级)
- * @param {string} deviceVer - 设备端单段版本,如 "006"
- * @param {string} serverVer - 服务端完整版本,如 "0.0.6"
- * @returns {boolean} true 表示服务端版本更新,需要升级
- */
- const isServerNewer = (deviceVer, serverVer) => {
- // 设备端单段数字化(去前导零),如 "006" → 6
- const deviceNum = parseInt(deviceVer, 10);
- // 服务端版本各段累乘1000合并为整数,如 "0.0.6" → 6,"1.0.2" → 1002
- const serverNum = (serverVer || "").split(".").map(v => parseInt(v, 10)).reduce((acc, v) => acc * 1000 + v, 0);
- return serverNum > deviceNum;
- };
-
- const needUpdate = isServerNewer(mcuVer, serverRes.result.mcuVersion) || isServerNewer(bleVer, serverRes.result.bleVersion) || isServerNewer(wifiVer, serverRes.result.wifiVersion) || isServerNewer(resVer, serverRes.result.resVersion);
-
- if (needUpdate) {
- // status: false = 成功,true = 失败
- activeProtocol.codeOtaUpdate((status) => {
- console.log("OTA 升级结果:", status);
- });
- }
- }
- }).catch(() => {
- wx.showToast({ title: '获取最新版本失败', icon: 'none' });
- });
- });
- }
- }
-});
diff --git a/components/configureDevice_4/configureDevice_4.json b/components/configureDevice_4/configureDevice_4.json
deleted file mode 100644
index 62389a9..0000000
--- a/components/configureDevice_4/configureDevice_4.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "component": true,
- "usingComponents": {}
- }
\ No newline at end of file
diff --git a/components/configureDevice_4/configureDevice_4.wxml b/components/configureDevice_4/configureDevice_4.wxml
deleted file mode 100644
index 7d29bcf..0000000
--- a/components/configureDevice_4/configureDevice_4.wxml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
- 绑定成功
-
-
- 随时随地同步测量数据
-
- 完成
-
diff --git a/components/configureDevice_4/configureDevice_4.wxss b/components/configureDevice_4/configureDevice_4.wxss
deleted file mode 100644
index 4180d91..0000000
--- a/components/configureDevice_4/configureDevice_4.wxss
+++ /dev/null
@@ -1,102 +0,0 @@
-.configureDevice4 {
- width: 100%;
- height: 100%;
- padding: 105rpx 55rpx 0;
- box-sizing: border-box;
-}
-
-.icon {
- width: 100%;
- margin-bottom: 400rpx;
-}
-
-.icon>view:first-of-type {
- width: 360rpx;
- height: 295rpx;
- margin: 0 auto 50rpx;
-}
-
-.icon>view:last-of-type {
- color: #252535;
- width: 100%;
- height: 40rpx;
- font-size: 40rpx;
- font-weight: bold;
- line-height: 40rpx;
- text-align: center;
-}
-
-.describe {
- color: #B6B6B6;
- width: 100%;
- height: 26rpx;
- font-size: 28rpx;
- line-height: 28rpx;
- text-align: center;
- margin-bottom: 46rpx;
-}
-
-.btn {
- color: #FFFFFF;
- width: 100%;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 88rpx;
- text-align: center;
- border-radius: 44rpx;
- margin-bottom: 45rpx;
- background-color: #1385FA;
-}
-
-.ota {
- color: #1385FA;
- width: 100%;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 86rpx;
- text-align: center;
- border-radius: 44rpx;
- box-sizing: border-box;
- border: 1rpx solid #1385FA;
-}
-
-/* OTA 升级进度样式 */
-.ota-progress-container {
- width: 100%;
- margin-bottom: 30rpx;
- padding: 20rpx;
- background-color: #F5F5F5;
- border-radius: 12rpx;
- box-sizing: border-box;
-}
-
-.ota-message {
- color: #252535;
- font-size: 28rpx;
- margin-bottom: 15rpx;
- text-align: center;
-}
-
-.progress-bar {
- width: 100%;
- height: 8rpx;
- background-color: #E0E0E0;
- border-radius: 4rpx;
- overflow: hidden;
- margin-bottom: 10rpx;
-}
-
-.progress-fill {
- height: 100%;
- background-color: #1385FA;
- transition: width 0.3s ease;
-}
-
-.progress-text {
- color: #1385FA;
- font-size: 24rpx;
- text-align: center;
- font-weight: bold;
-}
diff --git a/components/replaceNetwork_1/replaceNetwork_1.js b/components/replaceNetwork_1/replaceNetwork_1.js
deleted file mode 100644
index 496631d..0000000
--- a/components/replaceNetwork_1/replaceNetwork_1.js
+++ /dev/null
@@ -1,45 +0,0 @@
-const app = getApp();
-
-Component({
- data: {
- wifiList: []
- },
-
- // 生命周期方法
- lifetimes: {
- attached() {
-
- },
- detached() {
-
- }
- },
-
- // 组件的方法
- methods: {
- getWiFiList() {
- wx.showLoading({
- title: "正在获取Wi-Fi列表...",
- mask: true
- });
- const activeProtocol = app.globalData.ppScale.activeProtocol;
- if (!activeProtocol) {
- wx.hideLoading();
- wx.showToast({ title: '设备未连接,请重试', icon: 'none' });
- return;
- }
- activeProtocol.dataFindSurroundDevice((res) => {
- console.log("connectedDevice ===》dataFindSurroundDevice", res);
- wx.hideLoading();
- this.setData({ wifiList: Array.isArray(res) ? res : [] });
- });
- },
-
- selectDevice(e) {
- this.triggerEvent('wifiEvent', {
- status: true,
- data: e.currentTarget.dataset.item
- });
- }
- }
-});
\ No newline at end of file
diff --git a/components/replaceNetwork_1/replaceNetwork_1.json b/components/replaceNetwork_1/replaceNetwork_1.json
deleted file mode 100644
index 7e37c03..0000000
--- a/components/replaceNetwork_1/replaceNetwork_1.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "component": true,
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/components/replaceNetwork_1/replaceNetwork_1.wxml b/components/replaceNetwork_1/replaceNetwork_1.wxml
deleted file mode 100644
index 9b3d120..0000000
--- a/components/replaceNetwork_1/replaceNetwork_1.wxml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 可用Wi-Fi
- 网络列表(设备暂不支持5GWi-Fi网络)
-
-
-
-
-
-
-
-
-
- {{item.ssid}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/components/replaceNetwork_1/replaceNetwork_1.wxss b/components/replaceNetwork_1/replaceNetwork_1.wxss
deleted file mode 100644
index caf0cf3..0000000
--- a/components/replaceNetwork_1/replaceNetwork_1.wxss
+++ /dev/null
@@ -1,71 +0,0 @@
-.replaceNetwork1 {
- width: 100%;
- height: 100%;
- padding-top: 60rpx;
- box-sizing: border-box;
-}
-
-.title {
- width: 100%;
- padding: 0 60rpx;
- box-sizing: border-box;
- margin-bottom: 40rpx;
-}
-
-.title>view:nth-of-type(1) {
- color: #252535;
- width: 100%;
- height: 48rpx;
- font-size: 48rpx;
- font-weight: bold;
- line-height: 48rpx;
- margin-bottom: 48rpx;
-}
-
-.title>view:nth-of-type(2) {
- color: #B6B6B6;
- width: 100%;
- height: 30rpx;
- font-size: 30rpx;
- line-height: 30rpx;
-}
-
-.content {
- width: 100%;
- height: calc(100% - 166rpx);
-}
-
-.scrollView {
- width: 100%;
- height: 100%;
-}
-
-.scrollViewContent {
- width: 100%;
- padding: 0 60rpx;
- box-sizing: border-box;
-}
-
-.scrollViewContent>view {
- width: 100%;
- height: 80rpx;
- display: flex;
- flex-wrap: nowrap;
- margin-bottom: 32rpx;
-}
-
-.scrollViewContent>view>view:nth-of-type(1) {
- width: 80rpx;
- height: 80rpx;
- margin-right: 24rpx;
-}
-
-.scrollViewContent>view>view:nth-of-type(2) {
- color: #252535;
- flex: 1;
- width: 0;
- height: 80rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 80rpx;
-}
\ No newline at end of file
diff --git a/components/replaceNetwork_2/replaceNetwork_2.js b/components/replaceNetwork_2/replaceNetwork_2.js
deleted file mode 100644
index e883677..0000000
--- a/components/replaceNetwork_2/replaceNetwork_2.js
+++ /dev/null
@@ -1,56 +0,0 @@
-const app = getApp();
-
-Component({
- properties: {
- ssid: {
- type: String,
- value: ""
- }
- },
-
- data: {
- type: true,
-
- ssid: "",
- password: ""
- },
-
- // 生命周期方法
- lifetimes: {
- attached() {
-
- },
- detached() {
-
- }
- },
-
- // 组件的方法
- methods: {
- setWiFiName() {
- this.setData({
- ssid: this.properties.ssid,
- type: true,
- })
- },
-
- passwordInput(e) {
- this.setData({
- password: e.detail.value
- })
- },
-
- inputTypeChange() {
- this.setData({
- type: !this.data.type
- })
- },
-
- setWifiPWD() {
- this.triggerEvent('wifiEvent', {
- status: true,
- data: this.data.password
- });
- }
- }
-});
\ No newline at end of file
diff --git a/components/replaceNetwork_2/replaceNetwork_2.json b/components/replaceNetwork_2/replaceNetwork_2.json
deleted file mode 100644
index 7e37c03..0000000
--- a/components/replaceNetwork_2/replaceNetwork_2.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "component": true,
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/components/replaceNetwork_2/replaceNetwork_2.wxml b/components/replaceNetwork_2/replaceNetwork_2.wxml
deleted file mode 100644
index bb0f310..0000000
--- a/components/replaceNetwork_2/replaceNetwork_2.wxml
+++ /dev/null
@@ -1,36 +0,0 @@
-
- 输入Wi-Fi密码
-
-
-
-
-
- {{ssid}}
-
-
- 密码
-
-
-
-
-
-
-
-
-
-
-
-
-
- 连接
-
\ No newline at end of file
diff --git a/components/replaceNetwork_2/replaceNetwork_2.wxss b/components/replaceNetwork_2/replaceNetwork_2.wxss
deleted file mode 100644
index eb36896..0000000
--- a/components/replaceNetwork_2/replaceNetwork_2.wxss
+++ /dev/null
@@ -1,95 +0,0 @@
-.replaceNetwork2 {
- width: 100%;
- height: 100%;
- padding: 60rpx 30rpx 0;
- box-sizing: border-box;
-}
-
-.title {
- color: #252535;
- width: 100%;
- height: 48rpx;
- font-size: 48rpx;
- font-weight: bold;
- line-height: 48rpx;
- margin-bottom: 48rpx;
-}
-
-.form {
- width: 100%;
- margin-bottom: 64rpx;
-}
-
-.form>view {
- width: 100%;
- height: 96rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- padding: 0 24rpx;
- box-sizing: border-box;
- border-radius: 16rpx;
- background-color: #F6F6F6;
-}
-
-.form>view:first-of-type {
- margin-bottom: 32rpx;
-}
-
-.form>view>view:nth-of-type(1) {
- color: #252535;
- width: 100rpx;
- height: 96rpx;
- line-height: 96rpx;
- font-size: 32rpx;
- font-weight: bold;
-}
-
-.form>view:first-of-type>view:nth-of-type(1) {
- padding: 24rpx 45rpx 24rpx 7rpx;
- box-sizing: border-box;
- display: flex;
- align-items: center;
-}
-
-.form>view>view:nth-of-type(2) {
- color: #252535;
- flex: 1;
- width: 0;
- height: 96rpx;
- font-size: 32rpx;
- line-height: 96rpx;
-}
-
-.form>view>view:nth-of-type(2) input {
- color: #252535;
- width: 100%;
- height: 96rpx;
- font-size: 32rpx;
- line-height: 96rpx;
-}
-
-.placeholderClass {
- color: #B6B6B6;
- height: 96rpx;
- font-size: 32rpx;
- line-height: 96rpx;
-}
-
-.form>view>view:nth-of-type(3) {
- width: 56rpx;
- height: 56rpx;
-}
-
-.btn {
- color: #FFFFFF;
- width: 580rpx;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 88rpx;
- margin: 0 auto;
- text-align: center;
- border-radius: 44rpx;
- background-color: #1385FA;
-}
\ No newline at end of file
diff --git a/components/replaceNetwork_3/replaceNetwork_3.js b/components/replaceNetwork_3/replaceNetwork_3.js
deleted file mode 100644
index 16357f5..0000000
--- a/components/replaceNetwork_3/replaceNetwork_3.js
+++ /dev/null
@@ -1,90 +0,0 @@
-const app = getApp();
-import $ from "../../utils/request";
-
-Component({
- properties: {
- ssid: {
- type: String,
- value: ""
- },
- password: {
- type: String,
- value: ""
- }
- },
-
- data: {
-
- },
-
- // 生命周期方法
- lifetimes: {
- attached() {
- this.setNerwork();
- },
- detached() {
- }
- },
-
- // 组件的方法
- methods: {
- setNerwork() {
- let ssid = this.properties.ssid;
- let password = this.properties.password;
- let version = app.globalData.ppScale.version;
- if (version === 'domain1') {
- app.globalData.ppScale.activeProtocol.dataConfigNetWork({
- domain: app.globalData.ppScale.domain1,
- ssid: ssid,
- password: password
- }, (res) => {
- console.log("setNetwork.js dataConfigNetWork 1", res);
- this.netWorkCallBack(res);
- });
- }
- if (version === 'domain2') {
- app.globalData.ppScale.activeProtocol.dataConfigUserNetWork({
- domain: app.globalData.ppScale.domain2,
- ssid: ssid,
- password: password,
- userName: "apiUser",
- userPassword: "3acebb95eb49577e9c2a2082589b9bd6"
- }, (res) => {
- console.log("setNetwork.js dataConfigUserNetWork 2", res);
- this.netWorkCallBack(res);
- });
- }
- },
-
- netWorkCallBack(res) {
- if(res === 23) {
- app.globalData.ppScale.wifi.ssid = this.properties.ssid;
- app.globalData.ppScale.wifi.password = this.properties.password;
-
- let scaleDeviceId = app.globalData.ppScale.device.mac.replace(/:/g, '');
- if(scaleDeviceId) {
- let params = {
- equipmentCode: scaleDeviceId,
- wifiName: this.properties.ssid
- };
- $.ajax("weighingScale/edit/device", params, "POST").then((res) => {
- this.triggerEvent('wifiEvent', {
- status: true
- });
- })
- }
- } else {
- app.globalData.ppScale.plugin.Blue.stop();
- wx.showToast({
- icon: "none",
- title: "配网失败,错误码:" + res
- })
- setTimeout(() => {
- this.triggerEvent('wifiEvent', {
- status: false
- });
- }, 1500)
- }
- }
- }
-});
\ No newline at end of file
diff --git a/components/replaceNetwork_3/replaceNetwork_3.json b/components/replaceNetwork_3/replaceNetwork_3.json
deleted file mode 100644
index 7e37c03..0000000
--- a/components/replaceNetwork_3/replaceNetwork_3.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "component": true,
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/components/replaceNetwork_3/replaceNetwork_3.wxml b/components/replaceNetwork_3/replaceNetwork_3.wxml
deleted file mode 100644
index 705078b..0000000
--- a/components/replaceNetwork_3/replaceNetwork_3.wxml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
- 设备正在配对网络中,请稍等...
- 请持续站在秤上,耐心等待
-
\ No newline at end of file
diff --git a/components/replaceNetwork_3/replaceNetwork_3.wxss b/components/replaceNetwork_3/replaceNetwork_3.wxss
deleted file mode 100644
index 2dc1157..0000000
--- a/components/replaceNetwork_3/replaceNetwork_3.wxss
+++ /dev/null
@@ -1,32 +0,0 @@
-.replaceNetwork3 {
- width: 100%;
- height: 100%;
- padding: 90rpx 62rpx 0;
- box-sizing: border-box;
-}
-
-.replaceNetwork3>view:nth-of-type(1) {
- width: 565rpx;
- height: 500rpx;
- margin: 0 auto;
-}
-
-.replaceNetwork3>view:nth-of-type(2) {
- color: #1385FA;
- width: 100%;
- height: 36rpx;
- font-size: 36rpx;
- font-weight: bold;
- line-height: 36rpx;
- text-align: center;
- margin-bottom: 28rpx;
-}
-
-.replaceNetwork3>view:nth-of-type(3) {
- color: #808080;
- width: 100%;
- height: 30rpx;
- font-size: 30rpx;
- text-align: center;
- line-height: 30rpx;
-}
\ No newline at end of file
diff --git a/components/replaceNetwork_4/replaceNetwork_4.js b/components/replaceNetwork_4/replaceNetwork_4.js
deleted file mode 100644
index d636823..0000000
--- a/components/replaceNetwork_4/replaceNetwork_4.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const app = getApp();
-
-Component({
- data: {
-
- },
-
- // 生命周期方法
- lifetimes: {
- attached() {
-
- },
- detached() {
-
- }
- },
-
- // 组件的方法
- methods: {
- replaceNetworkOk() {
- wx.navigateBack({
- delta: 1
- })
- }
- }
-});
\ No newline at end of file
diff --git a/components/replaceNetwork_4/replaceNetwork_4.json b/components/replaceNetwork_4/replaceNetwork_4.json
deleted file mode 100644
index 7e37c03..0000000
--- a/components/replaceNetwork_4/replaceNetwork_4.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "component": true,
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/components/replaceNetwork_4/replaceNetwork_4.wxml b/components/replaceNetwork_4/replaceNetwork_4.wxml
deleted file mode 100644
index b9051d5..0000000
--- a/components/replaceNetwork_4/replaceNetwork_4.wxml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
- Wi-Fi 切换成功
-
-
- 随时随地同步测量数据
-
- 完成
-
\ No newline at end of file
diff --git a/components/replaceNetwork_4/replaceNetwork_4.wxss b/components/replaceNetwork_4/replaceNetwork_4.wxss
deleted file mode 100644
index 72e7366..0000000
--- a/components/replaceNetwork_4/replaceNetwork_4.wxss
+++ /dev/null
@@ -1,49 +0,0 @@
-.replaceNetwork4 {
- width: 100%;
- height: 100%;
- padding: 105rpx 55rpx 0;
- box-sizing: border-box;
-}
-
-.icon {
- width: 100%;
- margin-bottom: 475rpx;
-}
-
-.icon>view:first-of-type {
- width: 360rpx;
- height: 295rpx;
- margin: 0 auto 50rpx;
-}
-
-.icon>view:last-of-type {
- color: #252535;
- width: 100%;
- height: 40rpx;
- font-size: 40rpx;
- font-weight: bold;
- line-height: 40rpx;
- text-align: center;
-}
-
-.describe {
- color: #B6B6B6;
- width: 100%;
- height: 26rpx;
- font-size: 28rpx;
- line-height: 28rpx;
- text-align: center;
- margin-bottom: 46rpx;
-}
-
-.btn {
- color: #FFFFFF;
- width: 100%;
- height: 88rpx;
- font-size: 32rpx;
- font-weight: bold;
- line-height: 88rpx;
- text-align: center;
- border-radius: 44rpx;
- background-color: #1385FA;
-}
diff --git a/images/configureDevice/bluetooth.png b/images/configureDevice/bluetooth.png
deleted file mode 100644
index adde03a..0000000
Binary files a/images/configureDevice/bluetooth.png and /dev/null differ
diff --git a/images/configureDevice/close.png b/images/configureDevice/close.png
deleted file mode 100644
index 6e32387..0000000
Binary files a/images/configureDevice/close.png and /dev/null differ
diff --git a/images/configureDevice/configureDevice_3_icon.png b/images/configureDevice/configureDevice_3_icon.png
deleted file mode 100644
index 9974df8..0000000
Binary files a/images/configureDevice/configureDevice_3_icon.png and /dev/null differ
diff --git a/images/configureDevice/configureDevice_4_icon.png b/images/configureDevice/configureDevice_4_icon.png
deleted file mode 100644
index 6c7a21e..0000000
Binary files a/images/configureDevice/configureDevice_4_icon.png and /dev/null differ
diff --git a/images/configureDevice/man.png b/images/configureDevice/man.png
deleted file mode 100644
index dc04314..0000000
Binary files a/images/configureDevice/man.png and /dev/null differ
diff --git a/images/configureDevice/null.png b/images/configureDevice/null.png
deleted file mode 100644
index 89ba90f..0000000
Binary files a/images/configureDevice/null.png and /dev/null differ
diff --git a/images/configureDevice/open.png b/images/configureDevice/open.png
deleted file mode 100644
index 2b2c650..0000000
Binary files a/images/configureDevice/open.png and /dev/null differ
diff --git a/images/configureDevice/userAvatarMan.png b/images/configureDevice/userAvatarMan.png
deleted file mode 100644
index fd9351a..0000000
Binary files a/images/configureDevice/userAvatarMan.png and /dev/null differ
diff --git a/images/configureDevice/userAvatarWoman.png b/images/configureDevice/userAvatarWoman.png
deleted file mode 100644
index e3f0ceb..0000000
Binary files a/images/configureDevice/userAvatarWoman.png and /dev/null differ
diff --git a/images/configureDevice/wifi.png b/images/configureDevice/wifi.png
deleted file mode 100644
index a0882a8..0000000
Binary files a/images/configureDevice/wifi.png and /dev/null differ
diff --git a/images/configureDevice/wifiPwd.png b/images/configureDevice/wifiPwd.png
deleted file mode 100644
index 2999896..0000000
Binary files a/images/configureDevice/wifiPwd.png and /dev/null differ
diff --git a/images/configureDevice/woman.png b/images/configureDevice/woman.png
deleted file mode 100644
index b694515..0000000
Binary files a/images/configureDevice/woman.png and /dev/null differ
diff --git a/images/devices/CF568_G.png b/images/devices/CF568_G.png
deleted file mode 100644
index d4e3516..0000000
Binary files a/images/devices/CF568_G.png and /dev/null differ
diff --git a/images/devices/CF577.png b/images/devices/CF577.png
deleted file mode 100644
index 128435b..0000000
Binary files a/images/devices/CF577.png and /dev/null differ
diff --git a/images/devices/CF636_G.png b/images/devices/CF636_G.png
deleted file mode 100644
index f77d79f..0000000
Binary files a/images/devices/CF636_G.png and /dev/null differ
diff --git a/images/devices/YX-B4-568-BW.png b/images/devices/YX-B4-568-BW.png
deleted file mode 100644
index d4e3516..0000000
Binary files a/images/devices/YX-B4-568-BW.png and /dev/null differ
diff --git a/images/devices/YX-B8-636-BW.png b/images/devices/YX-B8-636-BW.png
deleted file mode 100644
index f77d79f..0000000
Binary files a/images/devices/YX-B8-636-BW.png and /dev/null differ
diff --git a/images/home/bg.jpg b/images/home/bg.jpg
deleted file mode 100644
index f23f89d..0000000
Binary files a/images/home/bg.jpg and /dev/null differ
diff --git a/images/home/user.png b/images/home/user.png
deleted file mode 100644
index 8d7c532..0000000
Binary files a/images/home/user.png and /dev/null differ
diff --git a/images/my/1.png b/images/my/1.png
deleted file mode 100644
index 74e4e7b..0000000
Binary files a/images/my/1.png and /dev/null differ
diff --git a/images/my/2.png b/images/my/2.png
deleted file mode 100644
index 04262ff..0000000
Binary files a/images/my/2.png and /dev/null differ
diff --git a/images/my/3.png b/images/my/3.png
deleted file mode 100644
index ed9edac..0000000
Binary files a/images/my/3.png and /dev/null differ
diff --git a/images/my/user.png b/images/my/user.png
deleted file mode 100644
index 8d7c532..0000000
Binary files a/images/my/user.png and /dev/null differ
diff --git a/images/replaceNetwork/bluetooth.png b/images/replaceNetwork/bluetooth.png
deleted file mode 100644
index adde03a..0000000
Binary files a/images/replaceNetwork/bluetooth.png and /dev/null differ
diff --git a/images/replaceNetwork/close.png b/images/replaceNetwork/close.png
deleted file mode 100644
index 6e32387..0000000
Binary files a/images/replaceNetwork/close.png and /dev/null differ
diff --git a/images/replaceNetwork/configureDevice_3_icon.png b/images/replaceNetwork/configureDevice_3_icon.png
deleted file mode 100644
index 9974df8..0000000
Binary files a/images/replaceNetwork/configureDevice_3_icon.png and /dev/null differ
diff --git a/images/replaceNetwork/configureDevice_4_icon.png b/images/replaceNetwork/configureDevice_4_icon.png
deleted file mode 100644
index 6c7a21e..0000000
Binary files a/images/replaceNetwork/configureDevice_4_icon.png and /dev/null differ
diff --git a/images/replaceNetwork/open.png b/images/replaceNetwork/open.png
deleted file mode 100644
index 2b2c650..0000000
Binary files a/images/replaceNetwork/open.png and /dev/null differ
diff --git a/images/replaceNetwork/wifi.png b/images/replaceNetwork/wifi.png
deleted file mode 100644
index a0882a8..0000000
Binary files a/images/replaceNetwork/wifi.png and /dev/null differ
diff --git a/images/replaceNetwork/wifiPwd.png b/images/replaceNetwork/wifiPwd.png
deleted file mode 100644
index 2999896..0000000
Binary files a/images/replaceNetwork/wifiPwd.png and /dev/null differ
diff --git a/images/searchDevice/icon.png b/images/searchDevice/icon.png
deleted file mode 100644
index 8304216..0000000
Binary files a/images/searchDevice/icon.png and /dev/null differ
diff --git a/images/share/share.jpg b/images/share/share.jpg
deleted file mode 100644
index 3d6c7fc..0000000
Binary files a/images/share/share.jpg and /dev/null differ
diff --git a/images/tabBar/home.png b/images/tabBar/home.png
deleted file mode 100644
index 186b569..0000000
Binary files a/images/tabBar/home.png and /dev/null differ
diff --git a/images/tabBar/home_.png b/images/tabBar/home_.png
deleted file mode 100644
index 3fe72ed..0000000
Binary files a/images/tabBar/home_.png and /dev/null differ
diff --git a/images/tabBar/my.png b/images/tabBar/my.png
deleted file mode 100644
index 52b5312..0000000
Binary files a/images/tabBar/my.png and /dev/null differ
diff --git a/images/tabBar/my_.png b/images/tabBar/my_.png
deleted file mode 100644
index 4383c26..0000000
Binary files a/images/tabBar/my_.png and /dev/null differ
diff --git a/miniprogram/app.json b/miniprogram/app.json
new file mode 100644
index 0000000..951caaa
--- /dev/null
+++ b/miniprogram/app.json
@@ -0,0 +1,62 @@
+{
+ "pages": [
+ "pages/login/login",
+ "pages/searchDevice/searchDevice",
+ "pages/connectedDevice/connectedDevice",
+ "pages/connectedWifi/connectedWifi",
+ "pages/supplementPersonal/supplementPersonal",
+ "pages/home/home",
+ "pages/equipment/equipment",
+ "pages/data/data",
+ "pages/my/my"
+ ],
+ "window": {
+ "navigationBarBackgroundColor": "#ffffff",
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "智能体重秤"
+ },
+ "style": "v2",
+ "rendererOptions": {
+ "skyline": {
+ "defaultDisplayBlock": true,
+ "disableABTest": true,
+ "sdkVersionBegin": "3.0.0",
+ "sdkVersionEnd": "15.255.255"
+ }
+ },
+ "componentFramework": "glass-easel",
+ "sitemapLocation": "sitemap.json",
+ "lazyCodeLoading": "requiredComponents",
+ "tabBar": {
+ "color": "#999999",
+ "selectedColor": "#000000",
+ "backgroundColor": "#ffffff",
+ "borderStyle": "black",
+ "list": [
+ {
+ "pagePath": "pages/home/home",
+ "text": "首页",
+ "iconPath": "images/tabBar/home_default.png",
+ "selectedIconPath": "images/tabBar/home.png"
+ },
+ {
+ "pagePath": "pages/equipment/equipment",
+ "text": "设备",
+ "iconPath": "images/tabBar/equipment_default.png",
+ "selectedIconPath": "images/tabBar/equipment.png"
+ },
+ {
+ "pagePath": "pages/data/data",
+ "text": "数据",
+ "iconPath": "images/tabBar/data_default.png",
+ "selectedIconPath": "images/tabBar/data.png"
+ },
+ {
+ "pagePath": "pages/my/my",
+ "text": "我的",
+ "iconPath": "images/tabBar/my_default.png",
+ "selectedIconPath": "images/tabBar/my.png"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/app.less b/miniprogram/app.less
new file mode 100644
index 0000000..46d816e
--- /dev/null
+++ b/miniprogram/app.less
@@ -0,0 +1,22 @@
+/**app.wxss**/
+@import "./styles/index.less";
+
+page {
+ width: 100%;
+ height: 100vh;
+ overflow: hidden;
+ box-sizing: border-box;
+ background: var(--color-bg);
+ /* 左右边距不加全局,避免全屏元素被挤 */
+}
+
+/* 需要页面标准边距的业务容器,在 WXML 根节点使用 */
+.page-container {
+ padding-left: var(--page-padding-x);
+ padding-right: var(--page-padding-x);
+}
+
+image {
+ width: 100%;
+ height: 100%;
+}
\ No newline at end of file
diff --git a/miniprogram/app.ts b/miniprogram/app.ts
new file mode 100644
index 0000000..1af73a8
--- /dev/null
+++ b/miniprogram/app.ts
@@ -0,0 +1,18 @@
+// 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/miniprogram/components/navigation-bar/navigation-bar.json b/miniprogram/components/navigation-bar/navigation-bar.json
new file mode 100644
index 0000000..4a20f17
--- /dev/null
+++ b/miniprogram/components/navigation-bar/navigation-bar.json
@@ -0,0 +1,5 @@
+{
+ "component": true,
+ "styleIsolation": "apply-shared",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/miniprogram/components/navigation-bar/navigation-bar.less b/miniprogram/components/navigation-bar/navigation-bar.less
new file mode 100644
index 0000000..8bd379e
--- /dev/null
+++ b/miniprogram/components/navigation-bar/navigation-bar.less
@@ -0,0 +1,96 @@
+.weui-navigation-bar {
+ --weui-FG-0:rgba(0,0,0,.9);
+ --height: 44px;
+ --left: 16px;
+}
+.weui-navigation-bar .android {
+ --height: 48px;
+}
+
+.weui-navigation-bar {
+ overflow: hidden;
+ color: var(--weui-FG-0);
+ flex: none;
+}
+
+.weui-navigation-bar__inner {
+ position: relative;
+ top: 0;
+ left: 0;
+ height: calc(var(--height) + env(safe-area-inset-top));
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ padding-top: env(safe-area-inset-top);
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.weui-navigation-bar__left {
+ position: relative;
+ padding-left: var(--left);
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ height: 100%;
+ box-sizing: border-box;
+}
+
+.weui-navigation-bar__btn_goback_wrapper {
+ padding: 11px 18px 11px 16px;
+ margin: -11px -18px -11px -16px;
+}
+
+.weui-navigation-bar__btn_goback_wrapper.weui-active {
+ opacity: 0.5;
+}
+
+.weui-navigation-bar__btn_goback {
+ font-size: 12px;
+ width: 12px;
+ height: 24px;
+ -webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;
+ mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%;
+ -webkit-mask-size: cover;
+ mask-size: cover;
+ background-color: var(--weui-FG-0);
+}
+
+.weui-navigation-bar__center {
+ font-size: 17px;
+ text-align: center;
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ font-weight: bold;
+ flex: 1;
+ height: 100%;
+}
+
+.weui-navigation-bar__loading {
+ margin-right: 4px;
+ align-items: center;
+}
+
+.weui-loading {
+ font-size: 16px;
+ width: 16px;
+ height: 16px;
+ display: block;
+ background: transparent url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='80px' height='80px' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23606060' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23606060' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23606060' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A") no-repeat;
+ background-size: 100%;
+ margin-left: 0;
+ animation: loading linear infinite 1s;
+}
+
+@keyframes loading {
+ from {
+ transform: rotate(0);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
diff --git a/miniprogram/components/navigation-bar/navigation-bar.ts b/miniprogram/components/navigation-bar/navigation-bar.ts
new file mode 100644
index 0000000..4466e8e
--- /dev/null
+++ b/miniprogram/components/navigation-bar/navigation-bar.ts
@@ -0,0 +1,105 @@
+Component({
+ options: {
+ multipleSlots: true // 在组件定义时的选项中启用多slot支持
+ },
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ extClass: {
+ type: String,
+ value: ''
+ },
+ title: {
+ type: String,
+ value: ''
+ },
+ background: {
+ type: String,
+ value: ''
+ },
+ color: {
+ type: String,
+ value: ''
+ },
+ back: {
+ type: Boolean,
+ value: true
+ },
+ loading: {
+ type: Boolean,
+ value: false
+ },
+ homeButton: {
+ type: Boolean,
+ value: false,
+ },
+ animated: {
+ // 显示隐藏的时候opacity动画效果
+ type: Boolean,
+ value: true
+ },
+ show: {
+ // 显示隐藏导航,隐藏的时候navigation-bar的高度占位还在
+ type: Boolean,
+ value: true,
+ observer: '_showChange'
+ },
+ // back为true的时候,返回的页面深度
+ delta: {
+ type: Number,
+ value: 1
+ },
+ },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ displayStyle: ''
+ },
+ lifetimes: {
+ attached() {
+ const rect = wx.getMenuButtonBoundingClientRect()
+ wx.getSystemInfo({
+ success: (res) => {
+ const isAndroid = res.platform === 'android'
+ const isDevtools = res.platform === 'devtools'
+ this.setData({
+ ios: !isAndroid,
+ innerPaddingRight: `padding-right: ${res.windowWidth - rect.left}px`,
+ leftWidth: `width: ${res.windowWidth - rect.left }px`,
+ safeAreaTop: isDevtools || isAndroid ? `height: calc(var(--height) + ${res.safeArea.top}px); padding-top: ${res.safeArea.top}px` : ``
+ })
+ }
+ })
+ },
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ _showChange(show: boolean) {
+ const animated = this.data.animated
+ let displayStyle = ''
+ if (animated) {
+ displayStyle = `opacity: ${
+ show ? '1' : '0'
+ };transition:opacity 0.5s;`
+ } else {
+ displayStyle = `display: ${show ? '' : 'none'}`
+ }
+ this.setData({
+ displayStyle
+ })
+ },
+ back() {
+ const data = this.data
+ if (data.delta) {
+ wx.navigateBack({
+ delta: data.delta
+ })
+ }
+ this.triggerEvent('back', { delta: data.delta }, {})
+ }
+ },
+})
diff --git a/miniprogram/components/navigation-bar/navigation-bar.wxml b/miniprogram/components/navigation-bar/navigation-bar.wxml
new file mode 100644
index 0000000..be9a663
--- /dev/null
+++ b/miniprogram/components/navigation-bar/navigation-bar.wxml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/miniprogram/images/login/bg.jpg b/miniprogram/images/login/bg.jpg
new file mode 100644
index 0000000..2c119ab
Binary files /dev/null and b/miniprogram/images/login/bg.jpg differ
diff --git a/miniprogram/images/my/关于我们@2x.png b/miniprogram/images/my/关于我们@2x.png
new file mode 100644
index 0000000..3dcc2fd
Binary files /dev/null and b/miniprogram/images/my/关于我们@2x.png differ
diff --git a/miniprogram/images/tabBar/.gitkeep b/miniprogram/images/tabBar/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/miniprogram/images/tabBar/data.png b/miniprogram/images/tabBar/data.png
new file mode 100644
index 0000000..c203668
Binary files /dev/null and b/miniprogram/images/tabBar/data.png differ
diff --git a/miniprogram/images/tabBar/data_default.png b/miniprogram/images/tabBar/data_default.png
new file mode 100644
index 0000000..a837ba7
Binary files /dev/null and b/miniprogram/images/tabBar/data_default.png differ
diff --git a/miniprogram/images/tabBar/equipment.png b/miniprogram/images/tabBar/equipment.png
new file mode 100644
index 0000000..d0002ff
Binary files /dev/null and b/miniprogram/images/tabBar/equipment.png differ
diff --git a/miniprogram/images/tabBar/equipment_default.png b/miniprogram/images/tabBar/equipment_default.png
new file mode 100644
index 0000000..779f3b6
Binary files /dev/null and b/miniprogram/images/tabBar/equipment_default.png differ
diff --git a/miniprogram/images/tabBar/home.png b/miniprogram/images/tabBar/home.png
new file mode 100644
index 0000000..70d8fb1
Binary files /dev/null and b/miniprogram/images/tabBar/home.png differ
diff --git a/miniprogram/images/tabBar/home_default.png b/miniprogram/images/tabBar/home_default.png
new file mode 100644
index 0000000..5f52e32
Binary files /dev/null and b/miniprogram/images/tabBar/home_default.png differ
diff --git a/miniprogram/images/tabBar/my.png b/miniprogram/images/tabBar/my.png
new file mode 100644
index 0000000..54b2ec9
Binary files /dev/null and b/miniprogram/images/tabBar/my.png differ
diff --git a/miniprogram/images/tabBar/my_default.png b/miniprogram/images/tabBar/my_default.png
new file mode 100644
index 0000000..8825219
Binary files /dev/null and b/miniprogram/images/tabBar/my_default.png differ
diff --git a/miniprogram/images/设计图/10、设备管理 副本.png b/miniprogram/images/设计图/10、设备管理 副本.png
new file mode 100644
index 0000000..25ba3bc
Binary files /dev/null and b/miniprogram/images/设计图/10、设备管理 副本.png differ
diff --git a/miniprogram/images/设计图/11、历史数据 副本.png b/miniprogram/images/设计图/11、历史数据 副本.png
new file mode 100644
index 0000000..7cd741a
Binary files /dev/null and b/miniprogram/images/设计图/11、历史数据 副本.png differ
diff --git a/miniprogram/images/设计图/12、我的 副本.png b/miniprogram/images/设计图/12、我的 副本.png
new file mode 100644
index 0000000..a27e6dd
Binary files /dev/null and b/miniprogram/images/设计图/12、我的 副本.png differ
diff --git a/miniprogram/images/设计图/13、测量报告 副本.png b/miniprogram/images/设计图/13、测量报告 副本.png
new file mode 100644
index 0000000..517790e
Binary files /dev/null and b/miniprogram/images/设计图/13、测量报告 副本.png differ
diff --git a/miniprogram/images/设计图/14、设备成员 副本.png b/miniprogram/images/设计图/14、设备成员 副本.png
new file mode 100644
index 0000000..5ef4493
Binary files /dev/null and b/miniprogram/images/设计图/14、设备成员 副本.png differ
diff --git a/miniprogram/images/设计图/15、设备未连接 副本.png b/miniprogram/images/设计图/15、设备未连接 副本.png
new file mode 100644
index 0000000..3d6eba1
Binary files /dev/null and b/miniprogram/images/设计图/15、设备未连接 副本.png differ
diff --git a/miniprogram/images/设计图/16、添加成员 副本.png b/miniprogram/images/设计图/16、添加成员 副本.png
new file mode 100644
index 0000000..f44ca58
Binary files /dev/null and b/miniprogram/images/设计图/16、添加成员 副本.png differ
diff --git a/miniprogram/images/设计图/17、编辑成员 副本.png b/miniprogram/images/设计图/17、编辑成员 副本.png
new file mode 100644
index 0000000..0160a1d
Binary files /dev/null and b/miniprogram/images/设计图/17、编辑成员 副本.png differ
diff --git a/miniprogram/images/设计图/18、删除成员 副本.png b/miniprogram/images/设计图/18、删除成员 副本.png
new file mode 100644
index 0000000..2b67d49
Binary files /dev/null and b/miniprogram/images/设计图/18、删除成员 副本.png differ
diff --git a/miniprogram/images/设计图/19、已有成员 副本.png b/miniprogram/images/设计图/19、已有成员 副本.png
new file mode 100644
index 0000000..c426895
Binary files /dev/null and b/miniprogram/images/设计图/19、已有成员 副本.png differ
diff --git a/miniprogram/images/设计图/1、体重秤~微信登录页 副本.png b/miniprogram/images/设计图/1、体重秤~微信登录页 副本.png
new file mode 100644
index 0000000..b219269
Binary files /dev/null and b/miniprogram/images/设计图/1、体重秤~微信登录页 副本.png differ
diff --git a/miniprogram/images/设计图/2、搜索设备 副本.png b/miniprogram/images/设计图/2、搜索设备 副本.png
new file mode 100644
index 0000000..c1a88a2
Binary files /dev/null and b/miniprogram/images/设计图/2、搜索设备 副本.png differ
diff --git a/miniprogram/images/设计图/3、搜索设备~未搜索到设备 副本.png b/miniprogram/images/设计图/3、搜索设备~未搜索到设备 副本.png
new file mode 100644
index 0000000..60160f6
Binary files /dev/null and b/miniprogram/images/设计图/3、搜索设备~未搜索到设备 副本.png differ
diff --git a/miniprogram/images/设计图/4、WiFi连接 副本.png b/miniprogram/images/设计图/4、WiFi连接 副本.png
new file mode 100644
index 0000000..38ede67
Binary files /dev/null and b/miniprogram/images/设计图/4、WiFi连接 副本.png differ
diff --git a/miniprogram/images/设计图/5、未找到WiFi连接 副本.png b/miniprogram/images/设计图/5、未找到WiFi连接 副本.png
new file mode 100644
index 0000000..8ea7eab
Binary files /dev/null and b/miniprogram/images/设计图/5、未找到WiFi连接 副本.png differ
diff --git a/miniprogram/images/设计图/6、输入WiFi密码 副本.png b/miniprogram/images/设计图/6、输入WiFi密码 副本.png
new file mode 100644
index 0000000..6cbbca3
Binary files /dev/null and b/miniprogram/images/设计图/6、输入WiFi密码 副本.png differ
diff --git a/miniprogram/images/设计图/7、完善个人信息 副本.png b/miniprogram/images/设计图/7、完善个人信息 副本.png
new file mode 100644
index 0000000..b6e5d57
Binary files /dev/null and b/miniprogram/images/设计图/7、完善个人信息 副本.png differ
diff --git a/miniprogram/images/设计图/8、体重秤~首页 副本.png b/miniprogram/images/设计图/8、体重秤~首页 副本.png
new file mode 100644
index 0000000..34f7065
Binary files /dev/null and b/miniprogram/images/设计图/8、体重秤~首页 副本.png differ
diff --git a/miniprogram/images/设计图/9、体重秤~首页~暂无数据 副本.png b/miniprogram/images/设计图/9、体重秤~首页~暂无数据 副本.png
new file mode 100644
index 0000000..a071c17
Binary files /dev/null and b/miniprogram/images/设计图/9、体重秤~首页~暂无数据 副本.png differ
diff --git a/miniprogram/pages/connectedDevice/connectedDevice.js b/miniprogram/pages/connectedDevice/connectedDevice.js
new file mode 100644
index 0000000..0217210
--- /dev/null
+++ b/miniprogram/pages/connectedDevice/connectedDevice.js
@@ -0,0 +1,4 @@
+Page({
+ data: {},
+ onLoad() {}
+})
diff --git a/miniprogram/pages/connectedDevice/connectedDevice.json b/miniprogram/pages/connectedDevice/connectedDevice.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/miniprogram/pages/connectedDevice/connectedDevice.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/connectedDevice/connectedDevice.less b/miniprogram/pages/connectedDevice/connectedDevice.less
new file mode 100644
index 0000000..e69de29
diff --git a/miniprogram/pages/connectedDevice/connectedDevice.wxml b/miniprogram/pages/connectedDevice/connectedDevice.wxml
new file mode 100644
index 0000000..20ff7ab
--- /dev/null
+++ b/miniprogram/pages/connectedDevice/connectedDevice.wxml
@@ -0,0 +1 @@
+connectedDevice 占位
diff --git a/miniprogram/pages/connectedWifi/connectedWifi.js b/miniprogram/pages/connectedWifi/connectedWifi.js
new file mode 100644
index 0000000..0217210
--- /dev/null
+++ b/miniprogram/pages/connectedWifi/connectedWifi.js
@@ -0,0 +1,4 @@
+Page({
+ data: {},
+ onLoad() {}
+})
diff --git a/miniprogram/pages/connectedWifi/connectedWifi.json b/miniprogram/pages/connectedWifi/connectedWifi.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/miniprogram/pages/connectedWifi/connectedWifi.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/connectedWifi/connectedWifi.less b/miniprogram/pages/connectedWifi/connectedWifi.less
new file mode 100644
index 0000000..e69de29
diff --git a/miniprogram/pages/connectedWifi/connectedWifi.wxml b/miniprogram/pages/connectedWifi/connectedWifi.wxml
new file mode 100644
index 0000000..8ca26c7
--- /dev/null
+++ b/miniprogram/pages/connectedWifi/connectedWifi.wxml
@@ -0,0 +1 @@
+connectedWifi 占位
diff --git a/miniprogram/pages/data/data.json b/miniprogram/pages/data/data.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/miniprogram/pages/data/data.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/data/data.ts b/miniprogram/pages/data/data.ts
new file mode 100644
index 0000000..d9046bc
--- /dev/null
+++ b/miniprogram/pages/data/data.ts
@@ -0,0 +1,5 @@
+Page({
+ data: {},
+
+ onLoad() {},
+})
diff --git a/miniprogram/pages/data/data.wxml b/miniprogram/pages/data/data.wxml
new file mode 100644
index 0000000..eefb861
--- /dev/null
+++ b/miniprogram/pages/data/data.wxml
@@ -0,0 +1,3 @@
+
+ 数据
+
diff --git a/miniprogram/pages/data/data.wxss b/miniprogram/pages/data/data.wxss
new file mode 100644
index 0000000..c108c6c
--- /dev/null
+++ b/miniprogram/pages/data/data.wxss
@@ -0,0 +1,6 @@
+.container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+}
diff --git a/miniprogram/pages/equipment/equipment.json b/miniprogram/pages/equipment/equipment.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/miniprogram/pages/equipment/equipment.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/equipment/equipment.ts b/miniprogram/pages/equipment/equipment.ts
new file mode 100644
index 0000000..d9046bc
--- /dev/null
+++ b/miniprogram/pages/equipment/equipment.ts
@@ -0,0 +1,5 @@
+Page({
+ data: {},
+
+ onLoad() {},
+})
diff --git a/miniprogram/pages/equipment/equipment.wxml b/miniprogram/pages/equipment/equipment.wxml
new file mode 100644
index 0000000..9ef6915
--- /dev/null
+++ b/miniprogram/pages/equipment/equipment.wxml
@@ -0,0 +1,3 @@
+
+ 设备
+
diff --git a/miniprogram/pages/equipment/equipment.wxss b/miniprogram/pages/equipment/equipment.wxss
new file mode 100644
index 0000000..c108c6c
--- /dev/null
+++ b/miniprogram/pages/equipment/equipment.wxss
@@ -0,0 +1,6 @@
+.container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+}
diff --git a/miniprogram/pages/home/home.json b/miniprogram/pages/home/home.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/miniprogram/pages/home/home.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/home/home.ts b/miniprogram/pages/home/home.ts
new file mode 100644
index 0000000..d9046bc
--- /dev/null
+++ b/miniprogram/pages/home/home.ts
@@ -0,0 +1,5 @@
+Page({
+ data: {},
+
+ onLoad() {},
+})
diff --git a/miniprogram/pages/home/home.wxml b/miniprogram/pages/home/home.wxml
new file mode 100644
index 0000000..53354b6
--- /dev/null
+++ b/miniprogram/pages/home/home.wxml
@@ -0,0 +1,3 @@
+
+ 首页
+
diff --git a/miniprogram/pages/home/home.wxss b/miniprogram/pages/home/home.wxss
new file mode 100644
index 0000000..c108c6c
--- /dev/null
+++ b/miniprogram/pages/home/home.wxss
@@ -0,0 +1,6 @@
+.container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+}
diff --git a/miniprogram/pages/login/login.js b/miniprogram/pages/login/login.js
new file mode 100644
index 0000000..f3fdf4a
--- /dev/null
+++ b/miniprogram/pages/login/login.js
@@ -0,0 +1,12 @@
+Page({
+ data: {
+ loading: false,
+ },
+
+ /* 微信一键登录 */
+ onLogin() {
+ wx.navigateTo({
+ url: '/pages/connectedDevice/connectedDevice'
+ })
+ }
+})
diff --git a/miniprogram/pages/login/login.json b/miniprogram/pages/login/login.json
new file mode 100644
index 0000000..b16ef3e
--- /dev/null
+++ b/miniprogram/pages/login/login.json
@@ -0,0 +1,4 @@
+{
+ "navigationStyle": "custom",
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/login/login.less b/miniprogram/pages/login/login.less
new file mode 100644
index 0000000..706265a
--- /dev/null
+++ b/miniprogram/pages/login/login.less
@@ -0,0 +1,56 @@
+.bg {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+}
+
+.login {
+ position: relative;
+ z-index: 2;
+ width: 100%;
+ height: 100vh;
+ box-sizing: border-box;
+ padding: 300rpx 85rpx 88rpx;
+ display: flex;
+ flex-direction: column;
+
+ .title {
+ color: #FFFFFF;
+ width: 100%;
+ height: 80rpx;
+ font-size: 80rpx;
+ text-align: center;
+ font-weight: bold;
+ line-height: 80rpx;
+ margin-bottom: 48rpx;
+ }
+
+ .subTitle {
+ color: #FFFFFF;
+ width: 100%;
+ height: 40rpx;
+ font-size: 40rpx;
+ line-height: 40rpx;
+ font-weight: 500;
+ text-align: center;
+ }
+
+ .loginBtn {
+ color: #FFFFFF;
+ width: 100%;
+ height: 88rpx;
+ line-height: 88rpx;
+ font-size: 32rpx;
+ font-weight: bold;
+ text-align: center;
+ background: #252535;
+ border-radius: 44rpx;
+ border: 2rpx solid #FFFFFF;
+ margin-top: auto;
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/pages/login/login.wxml b/miniprogram/pages/login/login.wxml
new file mode 100644
index 0000000..8f6e6c8
--- /dev/null
+++ b/miniprogram/pages/login/login.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ 智能体重秤
+ 设备智联 · 掌握健康
+ 微信一键登录
+
\ No newline at end of file
diff --git a/miniprogram/pages/my/my.json b/miniprogram/pages/my/my.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/miniprogram/pages/my/my.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/my/my.ts b/miniprogram/pages/my/my.ts
new file mode 100644
index 0000000..d9046bc
--- /dev/null
+++ b/miniprogram/pages/my/my.ts
@@ -0,0 +1,5 @@
+Page({
+ data: {},
+
+ onLoad() {},
+})
diff --git a/miniprogram/pages/my/my.wxml b/miniprogram/pages/my/my.wxml
new file mode 100644
index 0000000..cfa51eb
--- /dev/null
+++ b/miniprogram/pages/my/my.wxml
@@ -0,0 +1,3 @@
+
+ 我的
+
diff --git a/miniprogram/pages/my/my.wxss b/miniprogram/pages/my/my.wxss
new file mode 100644
index 0000000..c108c6c
--- /dev/null
+++ b/miniprogram/pages/my/my.wxss
@@ -0,0 +1,6 @@
+.container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+}
diff --git a/miniprogram/pages/searchDevice/searchDevice.js b/miniprogram/pages/searchDevice/searchDevice.js
new file mode 100644
index 0000000..0217210
--- /dev/null
+++ b/miniprogram/pages/searchDevice/searchDevice.js
@@ -0,0 +1,4 @@
+Page({
+ data: {},
+ onLoad() {}
+})
diff --git a/miniprogram/pages/searchDevice/searchDevice.json b/miniprogram/pages/searchDevice/searchDevice.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/miniprogram/pages/searchDevice/searchDevice.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/searchDevice/searchDevice.less b/miniprogram/pages/searchDevice/searchDevice.less
new file mode 100644
index 0000000..e69de29
diff --git a/miniprogram/pages/searchDevice/searchDevice.wxml b/miniprogram/pages/searchDevice/searchDevice.wxml
new file mode 100644
index 0000000..9a348df
--- /dev/null
+++ b/miniprogram/pages/searchDevice/searchDevice.wxml
@@ -0,0 +1 @@
+searchDevice 占位
diff --git a/miniprogram/pages/supplementPersonal/supplementPersonal.js b/miniprogram/pages/supplementPersonal/supplementPersonal.js
new file mode 100644
index 0000000..0217210
--- /dev/null
+++ b/miniprogram/pages/supplementPersonal/supplementPersonal.js
@@ -0,0 +1,4 @@
+Page({
+ data: {},
+ onLoad() {}
+})
diff --git a/miniprogram/pages/supplementPersonal/supplementPersonal.json b/miniprogram/pages/supplementPersonal/supplementPersonal.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/miniprogram/pages/supplementPersonal/supplementPersonal.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/miniprogram/pages/supplementPersonal/supplementPersonal.less b/miniprogram/pages/supplementPersonal/supplementPersonal.less
new file mode 100644
index 0000000..e69de29
diff --git a/miniprogram/pages/supplementPersonal/supplementPersonal.wxml b/miniprogram/pages/supplementPersonal/supplementPersonal.wxml
new file mode 100644
index 0000000..3acee47
--- /dev/null
+++ b/miniprogram/pages/supplementPersonal/supplementPersonal.wxml
@@ -0,0 +1 @@
+supplementPersonal 占位
diff --git a/miniprogram/sitemap.json b/miniprogram/sitemap.json
new file mode 100644
index 0000000..ca02add
--- /dev/null
+++ b/miniprogram/sitemap.json
@@ -0,0 +1,7 @@
+{
+ "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/miniprogram/styles/index.less b/miniprogram/styles/index.less
new file mode 100644
index 0000000..a997abc
--- /dev/null
+++ b/miniprogram/styles/index.less
@@ -0,0 +1,7 @@
+/* ================================================================
+ * 全局主题变量聚合入口
+ * ----------------------------------------------------------------
+ * 由 app.less 引入,Less 编译期合并到 app.wxss,无运行时开销。
+ * ================================================================ */
+@import "./theme.less";
+@import "./spacing.less";
diff --git a/miniprogram/styles/spacing.less b/miniprogram/styles/spacing.less
new file mode 100644
index 0000000..2726329
--- /dev/null
+++ b/miniprogram/styles/spacing.less
@@ -0,0 +1,9 @@
+/* ================================================================
+ * 全局主题变量(Design Token)—— 间距
+ * ----------------------------------------------------------------
+ * 规则:业务代码只允许引用本文件中的语义变量,严禁直接写硬编码值。
+ * ================================================================ */
+page {
+ /* 页面边距 —— 仅用于 page 级容器横向 padding */
+ --page-padding-x: 30rpx; /* 页面左右统一边距 */
+}
diff --git a/miniprogram/styles/theme.less b/miniprogram/styles/theme.less
new file mode 100644
index 0000000..9358be9
--- /dev/null
+++ b/miniprogram/styles/theme.less
@@ -0,0 +1,52 @@
+/* ================================================================
+ * 全局主题变量(Design Token)—— 颜色
+ * ----------------------------------------------------------------
+ * 规则:样式类型禁止混用。即使颜色值相同,也必须按语义独立定义,
+ * 业务代码只允许引用本文件中的语义变量,严禁直接写色值。
+ * 分组:品牌色 / 文字色 / 背景色 / 按钮色 / 线条色 / 状态色 / 阴影色
+ * ================================================================ */
+page {
+ /* 品牌色 —— 主色调,用于链接、强调、聚焦等品牌表达 */
+ --color-primary: #000000; /* 主色 */
+ --color-primary-disabled: #cccccc; /* 主色禁用态 */
+
+ /* 文字色 —— 仅用于 color 属性,禁止用于按钮/背景 */
+ --color-text: #333333; /* 一级正文 */
+ --color-text-secondary: #999999; /* 二级辅助文字 */
+ --color-text-placeholder: #cccccc; /* 占位文字 */
+ --color-text-inverse: #ffffff; /* 反白文字(深底上的白字) */
+ --color-text-disabled: #cccccc; /* 禁用文字 */
+
+ /* 背景色 —— 仅用于容器 background,禁止用于按钮 */
+ --color-bg: #f5f5f5; /* 页面底色 */
+ --color-bg-card: #ffffff; /* 卡片/容器底色 */
+ --color-bg-elevated: #ffffff; /* 浮层/弹框底色 */
+ --color-bg-mask: rgba(0, 0, 0, 0.5); /* 弹框蒙层(action-sheet/confirm) */
+
+ /* 按钮色 —— 仅用于按钮组件,与文字色/背景色完全解耦 */
+ --color-btn-primary: #000000; /* 主按钮底色 */
+ --color-btn-primary-text: #ffffff; /* 主按钮文字 */
+ --color-btn-default: #ffffff; /* 默认按钮底色 */
+ --color-btn-default-text: #333333; /* 默认按钮文字 */
+ --color-btn-default-border: #e5e5e5; /* 默认按钮边框 */
+ --color-btn-disabled: #cccccc; /* 禁用按钮底色 */
+ --color-btn-disabled-text: #ffffff; /* 禁用按钮文字 */
+ --color-btn-danger: #fa5151; /* 危险按钮底色(删除等) */
+ --color-btn-danger-text: #ffffff; /* 危险按钮文字 */
+ --color-btn-link: #000000; /* 链接按钮文字色 */
+
+ /* 线条色 —— 仅用于 border,禁止用于文字/背景 */
+ --color-border: #e5e5e5; /* 常规边框 */
+ --color-border-light: #f0f0f0; /* 浅边框 */
+ --color-divider: #eeeeee; /* 分割线 */
+
+ /* 状态色 —— 成功/警告/危险/信息提示 */
+ --color-success: #07c160; /* 成功(微信绿) */
+ --color-warning: #ff9500; /* 警告(橙) */
+ --color-danger: #fa5151; /* 危险/错误(红) */
+ --color-info: #1677ff; /* 信息(蓝) */
+
+ /* 阴影色 —— 仅用于 box-shadow */
+ --color-shadow: rgba(0, 0, 0, 0.08); /* 常规阴影 */
+ --color-shadow-card: rgba(0, 0, 0, 0.04); /* 卡片浅阴影 */
+}
diff --git a/miniprogram/utils/util.ts b/miniprogram/utils/util.ts
new file mode 100644
index 0000000..69a2e19
--- /dev/null
+++ b/miniprogram/utils/util.ts
@@ -0,0 +1,19 @@
+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/package.json b/package.json
new file mode 100644
index 0000000..5f731b7
--- /dev/null
+++ b/package.json
@@ -0,0 +1,15 @@
+{
+ "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/pages/configureDevice/configureDevice.js b/pages/configureDevice/configureDevice.js
deleted file mode 100644
index f1584f1..0000000
--- a/pages/configureDevice/configureDevice.js
+++ /dev/null
@@ -1,269 +0,0 @@
-const app = getApp();
-const ppScale = app.globalData.ppScale;
-
-Page({
- data: {
- progress: {
- index: 0,
- data: ['配置蓝牙', '初始化用户信息', '配备网络', '完成']
- },
-
- progressNext: false,
- device: null
- },
-
- onLoad() {
- // 一次性数据初始化,订阅逻辑在 onShow 中注册
- },
-
- // 记录 stop() 调用时间,用于 onShow 动态计算安全延迟
- _stopTime: 0,
-
- onShow() {
- console.log("configureDevice onShow");
- const elapsed = Date.now() - (this._stopTime || 0);
- const delay = Math.max(0, 500 - elapsed);
- setTimeout(() => {
- // 注册 app 级别的全局 bus 订阅(stop() 已清空,直接重新订阅)
- app.registerBusListeners();
-
- // 页面级 bus 订阅
- ppScale.plugin.bus.subscribe("devicesModel", (res) => {
- console.log("===》devicesModel", res);
- ppScale.device.mac = res.deviceMac;
- this._macReady = true;
- this._tryProgress();
- });
-
- ppScale.plugin.bus.subscribe("deviceConnect", (res) => {
- console.log('===》deviceConnect', res);
- ppScale.plugin.ScaleAction.startDataProgress(true);
- ppScale.activeProtocol = ppScale.plugin.ScaleAction.getActiveProtocol();
-
- let currentStep = this.data.progress.index;
-
- // 步骤 1/2/3:最小化后重连,只需恢复连接状态
- if (currentStep >= 1) {
- ppScale.activeProtocol.codeUpdateMTU((mtuRes) => {
- console.log("===》重连 codeUpdateMTU", mtuRes);
- ppScale.device.name = this.data.device.name;
- ppScale.device.connection = this.data.device;
- wx.hideLoading();
- if (currentStep === 2) {
- const comp = this.selectComponent('#configureDevice3');
- if (comp) comp.reInitWifi();
- }
- });
- return;
- }
-
- // 步骤 0:首次连接设备
- ppScale.activeProtocol.codeUpdateMTU((mtuRes) => {
- console.log("===》codeUpdateMTU", mtuRes);
- ppScale.activeProtocol.codeSyncTime((codeSyncTime) => {
- console.log("===》codeSyncTime", codeSyncTime);
- wx.hideLoading();
- ppScale.device.name = this.data.device.name;
- ppScale.device.connection = this.data.device;
- const nameArr = this.data.device.name.split("-");
- ppScale.version = nameArr.length === 5 ? "domain2" : "domain1";
- this._connectReady = true;
- this._tryProgress();
- });
- });
- });
-
- // 如果之前已选择过设备,自动扫描并重连
- if (this.data.device) {
- wx.showLoading({ title: "正在重新连接...", mask: true });
- ppScale.plugin.bus.subscribe("devicesList", (res) => {
- let fIndex = res.findIndex(item => item.deviceId === this.data.device.deviceId);
- if (fIndex >= 0) {
- ppScale.plugin.Blue.stopBluetoothDevicesDiscovery();
- ppScale.plugin.Blue.createBLEConnection(res[fIndex]);
- }
- });
- }
-
- // 通过完整链路重新初始化蓝牙(权限检查 → 打开适配器 → start)
- this.checkBluetoothPermissionAndInit();
- }, delay);
- },
-
- // 选择了某个设备
- deviceChange(e) {
- let status = e.detail.status;
- if (status) {
- wx.showLoading({
- title: "蓝牙配对中...",
- mask: true
- });
- this.setData({
- progressNext: true
- })
- let device = e.detail.device;
- this.connectedDevice_(device);
- }
- },
-
- connectedDevice(e) {
- app.resetReconnectCount();
- wx.showLoading({ title: "正在尝试连接...", mask: true });
- this.setData({ progressNext: false });
- let device = e.detail.device;
- // 先断开旧连接再重新连接
- ppScale.plugin.Blue.disconnect((disres) => {
- this.connectedDevice_(device);
- });
- },
-
- connectedDevice_(device) {
- if (device) {
- this.setData({
- device: device
- })
- ppScale.plugin.Blue.createBLEConnection(device);
- }
- },
-
- setDeviceUserList(e) {
- let { status, progressIndex } = e.detail;
- if (status) {
- // progressIndex 由子组件根据配网状态决定:2=进入配网,3=跳过配网
- if (progressIndex !== undefined) {
- this.setProgressTo(progressIndex);
- } else {
- this.setProgress();
- }
- }
- },
-
- setDeviceConfig(e) {
- let status = e.detail.status;
- if (status) {
- this.setProgress();
- }
- },
-
- setConfigSuccessful() {
- app.cleanupConnection();
- wx.switchTab({
- url: "/pages/home/home"
- })
- },
-
- setProgress() {
- const newIndex = this.data.progress.index + 1;
- this.setProgressTo(newIndex);
- },
-
- // 直接跳转到指定步骤,统一处理各步骤的初始化副作用
- setProgressTo(newIndex) {
- this.setData({ "progress.index": newIndex });
- // 进入步骤2(配网)时,等待组件渲染完成后由父页面显式触发 WiFi 列表获取
- if (newIndex === 2) {
- setTimeout(() => {
- const comp = this.selectComponent('#configureDevice3');
- if (comp) comp.initWifi();
- }, 300);
- }
- // 进入步骤3(OTA升级)时,等待组件渲染完成后由父页面显式触发升级
- if (newIndex === 3) {
- setTimeout(() => {
- const comp = this.selectComponent('#configureDevice4');
- if (comp) comp.startOtaUpgrade();
- }, 300);
- }
- },
-
- // 连接完成 + mac 获取完成,双条件满足后才进入下一步
- _connectReady: false,
- _macReady: false,
- _tryProgress() {
- if (this._connectReady && this._macReady && this.data.progressNext) {
- this._connectReady = false;
- this._macReady = false;
- this.setData({ progressNext: false });
- this.setProgress();
- }
- },
-
- checkBluetoothPermissionAndInit() {
- wx.getSetting({
- success: (res) => {
- if (res.authSetting['scope.bluetooth']) {
- this.openBluetoothAdapter();
- } else {
- wx.authorize({
- scope: 'scope.bluetooth',
- success: () => {
- this.openBluetoothAdapter();
- },
- fail: () => {
- wx.hideLoading();
- wx.showModal({
- title: '提示',
- content: '蓝牙权限被拒绝,无法连接设备。是否前往设置开启?',
- confirmText: '去开启',
- cancelText: '不开启',
- success: (modalRes) => {
- if (modalRes.confirm) {
- wx.openSetting();
- }
- }
- });
- }
- });
- }
- },
- fail: () => {
- wx.hideLoading();
- }
- });
- },
-
- openBluetoothAdapter() {
- wx.openBluetoothAdapter({
- success: () => {
- // 蓝牙适配器打开成功,设置设备配置后启动扫描
- let setting = ppScale.device.setting;
- ppScale.plugin.Blue.setDeviceSetting(setting);
- let deviceNames = setting.map(item => item.deviceName);
- ppScale.plugin.Blue.start(deviceNames, false);
- },
- fail: (err) => {
- wx.hideLoading();
- if (err.errCode === 10001) {
- wx.showModal({
- title: "提示",
- content: "请确保手机蓝牙已开启。",
- showCancel: false
- });
- }
- }
- });
- },
-
- onHide() {
- console.log("configureDevice onHide");
- app.cleanupConnection();
- // 配网步骤:立即清空 WiFi 列表(stop 后数据已失效)
- if (this.data.progress.index === 2) {
- const comp = this.selectComponent('#configureDevice3');
- if (comp) {
- comp.setData({ progress: 0, wifiList: [], selectWifi: null, selectWifiPWD: "" });
- }
- }
- this._connectReady = false;
- this._macReady = false;
- this._stopTime = Date.now();
- },
-
- onUnload() {
- console.log("configureDevice onUnload");
- app.cleanupConnection();
- this._connectReady = false;
- this._macReady = false;
- this._stopTime = Date.now();
- }
-})
\ No newline at end of file
diff --git a/pages/configureDevice/configureDevice.json b/pages/configureDevice/configureDevice.json
deleted file mode 100644
index f2baf7f..0000000
--- a/pages/configureDevice/configureDevice.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "usingComponents": {
- "configureDevice1": "/components/configureDevice_1/configureDevice_1",
- "configureDevice2": "/components/configureDevice_2/configureDevice_2",
- "configureDevice3": "/components/configureDevice_3/configureDevice_3",
- "configureDevice4": "/components/configureDevice_4/configureDevice_4"
- },
- "navigationBarTitleText": "配置蓝牙",
- "disableScroll": true
-}
\ No newline at end of file
diff --git a/pages/configureDevice/configureDevice.wxml b/pages/configureDevice/configureDevice.wxml
deleted file mode 100644
index 06c05bb..0000000
--- a/pages/configureDevice/configureDevice.wxml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
- {{progress.index >= index ? '' : index + 1}}
-
- {{item}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pages/configureDevice/configureDevice.wxss b/pages/configureDevice/configureDevice.wxss
deleted file mode 100644
index 81c4ea6..0000000
--- a/pages/configureDevice/configureDevice.wxss
+++ /dev/null
@@ -1,82 +0,0 @@
-.configureDevice {
- width: 100%;
- height: 100%;
- position: relative;
- padding: 0 30rpx 20rpx;
- box-sizing: border-box;
-}
-
-.configureDevice::before {
- content: '';
- position: absolute;
- z-index: -1;
- top: 0;
- left: 0;
- right: 0;
- width: 100%;
- height: 550rpx;
- background: linear-gradient(0deg, #F5F7FB 0%, #D8EAFD 100%);
-}
-
-.progress {
- width: 100%;
- height: 160rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- justify-content: space-between;
-}
-
-.progressList {
- flex: 1;
-}
-
-.progressList>view:nth-of-type(1) {
- width: 52rpx;
- height: 52rpx;
- overflow: hidden;
- border-radius: 50%;
- display: flex;
- position: relative;
- align-items: center;
- justify-content: center;
- margin: 0 auto 20rpx;
-}
-
-.progressList>view:nth-of-type(1)::before {
- content: "";
-}
-
-.progressList>view:nth-of-type(1)::after {
- content: "";
-}
-
-.progressList>view:nth-of-type(1)>view {
- color: #FFFFFF;
- font-size: 24rpx;
- font-weight: bold;
- line-height: 40rpx;
- overflow: hidden;
- border-radius: 50%;
- text-align: center;
-}
-
-.progressList>view:nth-of-type(2) {
- color: #77849E;
- height: 24rpx;
- font-size: 24rpx;
- line-height: 24rpx;
- text-align: center;
-}
-
-.active {
- color: #3194FB !important;
- font-weight: bold !important;
-}
-
-.content {
- width: 100%;
- border-radius: 16rpx;
- height: calc(100% - 160rpx);
- background-color: #FFFFFF;
-}
\ No newline at end of file
diff --git a/pages/help/help.js b/pages/help/help.js
deleted file mode 100644
index fb01f1d..0000000
--- a/pages/help/help.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// pages/help/help.js
-Page({
-
- /**
- * 页面的初始数据
- */
- data: {
-
- },
-
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad(options) {
-
- },
-
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady() {
-
- },
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow() {
-
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide() {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload() {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh() {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom() {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage() {
-
- }
-})
\ No newline at end of file
diff --git a/pages/help/help.json b/pages/help/help.json
deleted file mode 100644
index 302df2e..0000000
--- a/pages/help/help.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "navigationBarTitleText": "帮助信息",
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/pages/help/help.wxml b/pages/help/help.wxml
deleted file mode 100644
index 90f3c60..0000000
--- a/pages/help/help.wxml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-pages/help/help.wxml
\ No newline at end of file
diff --git a/pages/help/help.wxss b/pages/help/help.wxss
deleted file mode 100644
index 7217615..0000000
--- a/pages/help/help.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* pages/help/help.wxss */
\ No newline at end of file
diff --git a/pages/home/home.js b/pages/home/home.js
deleted file mode 100644
index d9221c9..0000000
--- a/pages/home/home.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import $ from "../../utils/request";
-
-Page({
- data: {
- token: null,
- },
-
- onShow() {
- let token = wx.getStorageSync("token") || null;
- this.setData({
- token: token,
- // deviceList: []
- })
- },
-
- // 点击登录或注册
- openLoginOrReg(e) {
- let bol = e.currentTarget.dataset.bol;
- wx.login({
- success: (res) => {
- if (res.code) {
- this.checkOpenIdLogin(res.code, bol);
- } else {
- wx.showToast({
- icon: "none",
- title: "登录失败,请稍后再试!",
- })
- }
- }
- })
- },
-
- // 微信一键登录
- checkOpenIdLogin(code, bol) {
- let params = {
- code: code
- };
- $.ajax("weighingScale/v2/checkOpenIdLogin", params, "POST", true, "加载中...").then((res) => {
- wx.setStorageSync("token", res.result.token);
- this.setData({
- token: res.result.token
- })
-
- if(bol) {
- this.openSearchDevice();
- }
- })
- },
-
- // 添加设备
- openSearchDevice() {
- wx.navigateTo({
- url: "/pages/searchDevice/searchDevice"
- })
- },
-
- // 点击查看帮助
- openHelp() {
- wx.navigateTo({
- url: "/pages/help/help"
- })
- },
-
- onShareAppMessage() {
- return {
- title: '智能蓝牙秤',
- path: '/pages/home/home',
- imageUrl: '/images/share/share.jpg',
- }
- }
-})
\ No newline at end of file
diff --git a/pages/home/home.json b/pages/home/home.json
deleted file mode 100644
index 7930213..0000000
--- a/pages/home/home.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "usingComponents": {},
- "navigationStyle": "custom",
- "disableScroll": true
-}
\ No newline at end of file
diff --git a/pages/home/home.wxml b/pages/home/home.wxml
deleted file mode 100644
index 0133bf8..0000000
--- a/pages/home/home.wxml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- 已登录
-
-
- 登录/注册
-
-
- 智能蓝牙秤
- 注重更好的健康生活品质
-
-
-
- 请添加设备
- 添加设备后,解锁更多体验
-
- 添加设备
-
-
- 添加设备
-
- 无法连接设备? 点击查看
-
-
\ No newline at end of file
diff --git a/pages/home/home.wxss b/pages/home/home.wxss
deleted file mode 100644
index e315a4d..0000000
--- a/pages/home/home.wxss
+++ /dev/null
@@ -1,130 +0,0 @@
-.bg {
- position: absolute;
- z-index: 1;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- width: 100%;
- height: 100%;
-}
-
-.home {
- position: relative;
- z-index: 2;
- width: 100%;
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- padding: 215rpx 60rpx 30rpx;
- box-sizing: border-box;
-}
-
-.title {
- width: 100%;
-}
-
-.title>view:nth-of-type(1) {
- width: 100%;
- height: 80rpx;
- display: flex;
- flex-wrap: nowrap;
- margin-bottom: 56rpx;
-}
-
-.title>view:nth-of-type(1)>view:first-of-type {
- width: 80rpx;
- height: 80rpx;
- overflow: hidden;
- border-radius: 50%;
- margin-right: 20rpx;
-}
-
-.title>view:nth-of-type(1)>view:last-of-type {
- color: #FFFFFF;
- height: 80rpx;
- line-height: 80rpx;
- font-size: 28rpx;
- font-weight: bold;
- padding-right: 26rpx;
-}
-
-.title>view:nth-of-type(1)>view:last-of-type::after {
- border-left: 5rpx solid #ffffff;
- border-top: 5rpx solid #ffffff;
-}
-
-.title>view:nth-of-type(2) {
- color: #FFFFFF;
- height: 58rpx;
- font-size: 58rpx;
- font-weight: bold;
- line-height: 58rpx;
- margin-bottom: 34rpx;
-}
-
-.title>view:nth-of-type(3) {
- color: #FFFFFF;
- height: 32rpx;
- font-size: 32rpx;
- line-height: 32rpx;
- margin-bottom: 48rpx;
-}
-
-.title>view:nth-of-type(4) {
- width: 120rpx;
- height: 6rpx;
- border-radius: 3rpx;
- background-color: #FFFFFF;
-}
-
-.addDevice {
- width: 580rpx;
- margin: 0 auto;
-}
-
-.addDevice>view:nth-of-type(1) {
- color: #FFFFFF;
- width: 100%;
- height: 36rpx;
- font-size: 36rpx;
- font-weight: bold;
- text-align: center;
- line-height: 36rpx;
- margin-bottom: 30rpx;
-}
-
-.addDevice>view:nth-of-type(2) {
- color: #FFFFFF;
- width: 100%;
- height: 30rpx;
- font-size: 30rpx;
- text-align: center;
- line-height: 30rpx;
- margin-bottom: 80rpx;
-}
-
-.addDevice>view:nth-of-type(3) {
- color: #FFFFFF;
- width: 100%;
- height: 106rpx;
- font-size: 32rpx;
- font-weight: bold;
- text-align: center;
- line-height: 106rpx;
- border-radius: 16rpx;
- box-sizing: border-box;
- margin-bottom: 10rpx;
- border: 1rpx solid #FFFFFF;
-}
-
-.addDevice>view:nth-of-type(4) {
- width: 100%;
- color: #FFFFFF;
- font-size: 30rpx;
- height: 70rpx;
- line-height: 70rpx;
- text-align: center;
- text-decoration-line: underline;
-}
\ No newline at end of file
diff --git a/pages/my/my.js b/pages/my/my.js
deleted file mode 100644
index 08fd0eb..0000000
--- a/pages/my/my.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import $ from "../../utils/request";
-
-Page({
- data: {
- token: null
- },
-
- onShow() {
- let token = wx.getStorageSync("token") || null;
- this.setData({
- token: token
- })
- },
-
- openLoginOrReg() {
- if (!this.data.token) {
- this.starLogin().then(() => {
-
- }).catch(() => {
- wx.showToast({
- title: "登录失败,请重试!",
- icon: "none"
- })
- })
- }
- },
-
- wifiChange() {
- wx.navigateTo({
- url: "/pages/searchDevice/searchDevice"
- })
- },
-
- starLogin() {
- return new Promise((resolve, reject) => {
- wx.login({
- success: (res) => {
- if (res.code) {
- let params = {
- code: res.code
- };
- $.ajax("weighingScale/v2/checkOpenIdLogin", params, "POST", true, "登录中...").then((res) => {
- wx.setStorageSync("token", res.result.token);
- this.setData({
- token: res.result.token,
- })
- resolve();
- }).catch((err) => {
- reject();
- })
- } else {
- reject();
- }
- }
- })
- })
- },
-
- // 退出登录
- exitLogin() {
- wx.showModal({
- title: "提示",
- content: "你确定要退出登录吗?",
- success: (res) => {
- if (res.confirm) {
- $.ajax("weighingScale/logout", {}, "POST", true, "正在退出登录...").then(res => {
- wx.showToast({
- icon: "none",
- title: res.message
- })
- setTimeout(() => {
- wx.clearStorageSync();
- wx.switchTab({
- url: "/pages/home/home"
- })
- }, 1500)
- })
- }
- }
- })
- },
-
- onShareAppMessage() {
- return {
- title: '智能蓝牙秤',
- path: '/pages/home/home',
- imageUrl: '/images/share/share.jpg',
- }
- }
-})
\ No newline at end of file
diff --git a/pages/my/my.json b/pages/my/my.json
deleted file mode 100644
index 7930213..0000000
--- a/pages/my/my.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "usingComponents": {},
- "navigationStyle": "custom",
- "disableScroll": true
-}
\ No newline at end of file
diff --git a/pages/my/my.wxml b/pages/my/my.wxml
deleted file mode 100644
index ba3a353..0000000
--- a/pages/my/my.wxml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
- 已登录
- 未登录
-
-
-
-
-
-
- 我的服务
-
-
-
-
- 更换网络
-
-
-
-
-
-
- 隐私协议
-
-
-
-
-
-
-
- 退出登录
-
-
diff --git a/pages/my/my.wxss b/pages/my/my.wxss
deleted file mode 100644
index 64c76a5..0000000
--- a/pages/my/my.wxss
+++ /dev/null
@@ -1,167 +0,0 @@
-.userInfo {
- width: 100%;
- /* height: 488rpx; */
- margin-bottom: 24rpx;
- box-sizing: border-box;
- padding: 185rpx 40rpx 0;
- background: linear-gradient(#F3F9FD 0%, #FFFFFF 100%);
-}
-
-.user {
- width: 100%;
- height: 136rpx;
- display: flex;
- flex-wrap: nowrap;
- padding-bottom: 23px;
- /* margin-bottom: 46rpx; */
-}
-
-.user>view:first-of-type {
- width: 126rpx;
- height: 126rpx;
- margin-right: 24rpx;
- border-radius: 50%;
- border: 5rpx solid #FFFFFF;
-}
-
-.user>view:last-of-type {
- color: #252536;
- flex: 1;
- height: 136rpx;
- font-size: 40rpx;
- font-weight: bold;
- line-height: 136rpx;
-}
-
-.info {
- width: 100%;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
-}
-
-.info>view:nth-of-type(1),
-.info>view:nth-of-type(3),
-.info>view:nth-of-type(5) {
- flex: 1;
-}
-
-.info>view:nth-of-type(2n) {
- width: 2rpx;
- height: 52rpx;
- background-color: #EAECF1;
-}
-
-.info>view>view:first-of-type {
- color: #394356;
- width: 100%;
- height: 28rpx;
- font-size: 28rpx;
- line-height: 28rpx;
- text-align: center;
- margin-bottom: 18rpx;
-}
-
-.info>view>view:last-of-type {
- color: #394356;
- width: 100%;
- height: 36rpx;
- font-size: 36rpx;
- font-weight: bold;
- line-height: 36rpx;
- text-align: center;
-}
-
-.content {
- width: 100%;
- padding: 0 30rpx;
- box-sizing: border-box;
- margin-bottom: 600rpx;
- /* margin-bottom: 480rpx; */
-}
-
-.content .arrowAfter::after {
- right: 36rpx;
-}
-
-.service {
- width: 100%;
- margin-bottom: 24rpx;
- border-radius: 16rpx;
- background-color: #FFFFFF;
-}
-
-.title {
- color: #394356;
- width: 100%;
- height: 96rpx;
- line-height: 96rpx;
- padding: 0 30rpx;
- font-size: 30rpx;
- font-weight: bold;
- box-sizing: border-box;
- border-bottom: 1rpx solid #EAECF1;
-}
-
-.list {
- width: 100%;
- height: 96rpx;
- padding: 0 30rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- box-sizing: border-box;
- border-bottom: 1rpx solid #EAECF1;
-}
-
-.list:last-of-type {
- border-bottom: none;
-}
-
-.list>view:nth-of-type(1) {
- width: 56rpx;
- height: 56rpx;
- margin-right: 30rpx;
-}
-
-.list>view:nth-of-type(2) {
- flex: 1;
- color: #394356;
- height: 96rpx;
- line-height: 96rpx;
- font-size: 32rpx;
- font-weight: bold;
-}
-
-.list>view:nth-of-type(3) {
- color: #77849E;
- height: 96rpx;
- font-size: 28rpx;
- line-height: 96rpx;
- padding-right: 34rpx;
-}
-
-.agreement {
- width: 100%;
- border-radius: 16rpx;
- background-color: #FFFFFF;
-}
-
-.btn {
- width: 100%;
- padding: 0 85rpx;
- box-sizing: border-box;
-}
-
-.btn>view {
- color: #1385FA;
- width: 580rpx;
- height: 88rpx;
- line-height: 88rpx;
- font-size: 32rpx;
- border-radius: 44rpx;
- text-align: center;
- background-color: #F5F7FB;
- border: 1rpx solid #1385FA;
-
-}
\ No newline at end of file
diff --git a/pages/replaceNetwork/replaceNetwork.js b/pages/replaceNetwork/replaceNetwork.js
deleted file mode 100644
index cf0ca7e..0000000
--- a/pages/replaceNetwork/replaceNetwork.js
+++ /dev/null
@@ -1,281 +0,0 @@
-const app = getApp();
-import $ from "../../utils/request";
-
-Page({
- data: {
- progress: 0,
-
- BLUE_STATE: {},
- connectState: "",
-
- device: null,
- wifiInfo: {
- ssid: "",
- password: ""
- }
- },
-
- // 存储回调函数的引用,以便在 onUnload 时取消监听
- _connectStateWatcher: null,
-
- onLoad(options) {
- // 一次性数据初始化
- this.checkBluetoothPermissionAndInit();
-
- console.log(`[replaceNetwork] connectState 获取: ${app.globalData.ppScale.device.connectState}`);
- this.setData({
- BLUE_STATE: app.globalData.ppScale.plugin.BLUE_STATE,
- connectState: app.globalData.ppScale.device.connectState
- })
- this._connectStateWatcher = (newValue, oldValue) => {
- console.log(`[replaceNetwork] connectState 变化: ${oldValue} -> ${newValue}`);
- this.setData({
- connectState: newValue || ''
- });
- };
- app.watch('ppScale.device.connectState', this._connectStateWatcher);
- },
-
- onShow() {
- console.log("replaceNetwork onShow");
- setTimeout(() => {
- // 注册 app 级别的全局 bus 订阅(stop() 已清空,直接重新订阅)
- app.registerBusListeners();
-
- // 页面级 bus 订阅
- app.globalData.ppScale.plugin.bus.subscribe("devicesModel", (res) => {
- console.log("replaceNetwork ===》devicesModel", res);
- app.globalData.ppScale.device.mac = res.deviceMac;
- });
-
- app.globalData.ppScale.plugin.bus.subscribe("deviceConnect", (res) => {
- console.log('replaceNetwork ===》deviceConnect', res);
- app.globalData.ppScale.plugin.ScaleAction.startDataProgress(true);
- app.globalData.ppScale.activeProtocol = app.globalData.ppScale.plugin.ScaleAction.getActiveProtocol();
- app.globalData.ppScale.activeProtocol.codeUpdateMTU((mtuRes) => {
- console.log("replaceNetwork ===》codeUpdateMTU", mtuRes);
- app.globalData.ppScale.device.name = this.data.device.name;
- app.globalData.ppScale.device.connection = this.data.device;
- const nameArr = this.data.device.name.split("-");
- app.globalData.ppScale.version = nameArr.length === 5 ? "domain2" : "domain1";
- wx.hideLoading();
- if (this.data.progress === 0) {
- const comp = this.selectComponent('#replaceNetwork1Component');
- if (comp) comp.getWiFiList();
- }
- });
- });
-
- // 通过完整链路重新初始化蓝牙(权限检查 → 打开蓝牙 → 获取设备 → start)
- this.checkBluetoothPermissionAndInit();
- }, 300);
- },
-
- checkBluetoothPermissionAndInit() {
- wx.showLoading({
- title: "正在检查蓝牙权限...",
- mask: true
- });
- wx.getSetting({
- success: (res) => {
- if (res.authSetting['scope.bluetooth']) {
- this.openBluetoothAdapter();
- } else {
- wx.authorize({
- scope: 'scope.bluetooth',
- success: () => {
- this.openBluetoothAdapter();
- },
- fail: (err) => {
- wx.hideLoading();
- wx.showModal({
- title: '提示',
- content: '您拒绝了蓝牙权限,将无法连接蓝牙秤。是否前往设置开启?',
- confirmText: '去开启',
- cancelText: '不开启',
- success: (modalRes) => {
- if (modalRes.confirm) {
- wx.openSetting({
- success: (settingRes) => {
- console.log('openSetting success', settingRes);
- },
- fail: (settingErr) => {
- wx.navigateBack({
- delta: 1
- });
- }
- });
- } else {
- wx.navigateBack({
- delta: 1
- });
- }
- }
- });
- }
- });
- }
- },
- fail: (err) => {
- wx.hideLoading();
- wx.showToast({
- title: '获取权限设置失败',
- icon: 'none'
- });
- setTimeout(() => {
- wx.navigateBack({
- delta: 1
- });
- }, 1500)
- }
- });
- },
-
- openBluetoothAdapter() {
- wx.showLoading({
- title: "正在初始化蓝牙...",
- mask: true
- });
- wx.openBluetoothAdapter({
- success: () => {
- this.getDeviceSettingList();
- },
- fail: (err) => {
- wx.hideLoading();
- if (err.errCode === 10001) {
- wx.showModal({
- title: "提示",
- content: "请确保手机蓝牙已开启。",
- showCancel: false,
- success: () => {
- wx.navigateBack({
- delta: 1
- });
- }
- });
- } else if (err.errMsg && err.errMsg.includes('permission denied')) {
- wx.showModal({
- title: '提示',
- content: '蓝牙权限仍被拒绝,无法使用蓝牙功能。',
- showCancel: false,
- success: () => {
- wx.navigateBack({
- delta: 1
- });
- }
- });
- } else {
- wx.showToast({
- title: `蓝牙适配器打开失败: ${err.errMsg || err.errCode}`,
- icon: 'none',
- success: () => {
- wx.navigateBack({
- delta: 1
- });
- }
- });
- }
- },
- });
- },
-
- // 获取自己已经配对上的设备
- getDeviceSettingList() {
- let params = {};
- $.ajax("weighingScale/list/device", params, "GET", true, "获取设备列表").then((res) => {
- wx.showLoading({
- title: "正在寻找设备...",
- mask: true
- });
-
- app.globalData.ppScale.device.list = [];
- let seviceList = app.globalData.ppScale.device.setting.find((item) => {
- return item.deviceName === res.result[0].type
- });
- if (!seviceList) {
- wx.hideLoading();
- wx.showToast({ title: '未找到匹配的设备类型', icon: 'none' });
- return;
- }
- app.globalData.ppScale.plugin.Blue.setDeviceSetting([seviceList]);
- app.globalData.ppScale.plugin.Blue.start(res.result[0].type, false);
- app.globalData.ppScale.plugin.bus.subscribe("devicesList", (res_) => {
- console.log("searchDevice ===> devicesList", res_);
- let fIndex = res_.findIndex(item => item.deviceId === res.result[0].deviceId);
- if (fIndex >= 0) {
- app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery();
- wx.showLoading({ title: "正在连接设备...", mask: true });
- this.setData({ device: res_[fIndex] });
- app.globalData.ppScale.plugin.Blue.createBLEConnection(res_[fIndex]);
- }
- });
- })
- },
-
- // 手动重连设备
- connectedDevice() {
- app.resetReconnectCount();
- let device = this.data.device;
- if(device) {
- wx.showLoading({
- title: "正在重新连接设备...",
- mask: true
- });
- app.globalData.ppScale.plugin.Blue.disconnect((disres) => {
- if (disres.errCode == 0) {
- app.globalData.ppScale.plugin.Blue.createBLEConnection(device);
- } else {
- app.globalData.ppScale.plugin.Blue.createBLEConnection(device);
- }
- });
- }
- },
-
- // 选择了某个wifi
- wifiSSIDChange(e) {
- let status = e.detail.status;
- if(status) {
- this.setData({
- ['wifiInfo.ssid']: e.detail.data.ssid,
- progress: this.data.progress + 1
- })
- }
- },
-
- // 设置wifi密码
- wifiPWDChange(e) {
- let status = e.detail.status;
- if(status) {
- this.setData({
- ['wifiInfo.password']: e.detail.data,
- progress: this.data.progress + 1
- })
- }
- },
-
- wifiSetChange(e) {
- let status = e.detail.status;
- if(status) {
- this.setData({
- progress: this.data.progress + 1
- })
- } else {
- this.setData({
- progress: 0
- })
- }
- },
-
- onHide() {
- console.log("replaceNetwork onHide");
- app.cleanupConnection();
- },
-
- onUnload() {
- console.log("replaceNetwork onUnload");
- app.cleanupConnection();
- if (this._connectStateWatcher) {
- app.unwatch('ppScale.device.connectState', this._connectStateWatcher);
- }
- }
-})
\ No newline at end of file
diff --git a/pages/replaceNetwork/replaceNetwork.json b/pages/replaceNetwork/replaceNetwork.json
deleted file mode 100644
index a1738f6..0000000
--- a/pages/replaceNetwork/replaceNetwork.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "usingComponents": {
- "replaceNetwork1": "/components/replaceNetwork_1/replaceNetwork_1",
- "replaceNetwork2": "/components/replaceNetwork_2/replaceNetwork_2",
- "replaceNetwork3": "/components/replaceNetwork_3/replaceNetwork_3",
- "replaceNetwork4": "/components/replaceNetwork_4/replaceNetwork_4"
- },
- "navigationBarTitleText": "更换Wi-Fi"
-}
\ No newline at end of file
diff --git a/pages/replaceNetwork/replaceNetwork.wxml b/pages/replaceNetwork/replaceNetwork.wxml
deleted file mode 100644
index 13d1525..0000000
--- a/pages/replaceNetwork/replaceNetwork.wxml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pages/replaceNetwork/replaceNetwork.wxss b/pages/replaceNetwork/replaceNetwork.wxss
deleted file mode 100644
index 35511a6..0000000
--- a/pages/replaceNetwork/replaceNetwork.wxss
+++ /dev/null
@@ -1,69 +0,0 @@
-.replaceNetwork {
- width: 100%;
- height: 100%;
- display: flex;
- flex-flow: column;
- padding: 24rpx 30rpx;
- box-sizing: border-box;
-}
-
-.header {
- width: 100%;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
- padding: 30rpx 40rpx;
- box-sizing: border-box;
- border-radius: 16rpx;
- margin-bottom: 24rpx;
- background-color: #ffffff;
-}
-
-.header>view:nth-of-type(1) {
- flex: 1;
-}
-
-.header>view:nth-of-type(1)>view:nth-of-type(1) {
- color: #252535;
- height: 32rpx;
- font-weight: bold;
- font-size: 32rpx;
- line-height: 32rpx;
- margin-bottom: 16rpx;
-}
-
-.header>view:nth-of-type(1)>view:nth-of-type(2) {
- color: #808080;
- height: 26rpx;
- font-size: 26rpx;
- line-height: 26rpx;
-}
-
-.header>view:nth-of-type(2) {
- height: 28rpx;
- display: flex;
- flex-wrap: nowrap;
- align-items: center;
-}
-
-.header>view:nth-of-type(2)>view:nth-of-type(1) {
- width: 12rpx;
- height: 12rpx;
- border-radius: 50%;
- margin-right: 14rpx;
-}
-
-.header>view:nth-of-type(2)>view:nth-of-type(2) {
- height: 28rpx;
- font-weight: bold;
- font-size: 28rpx;
- line-height: 28rpx;
-}
-
-
-.section {
- flex: 1;
- overflow: hidden;
- border-radius: 16rpx;
- background-color: #ffffff;
-}
diff --git a/pages/searchDevice/searchDevice.js b/pages/searchDevice/searchDevice.js
deleted file mode 100644
index b3bd417..0000000
--- a/pages/searchDevice/searchDevice.js
+++ /dev/null
@@ -1,251 +0,0 @@
-const app = getApp();
-
-Page({
- data: {
- initText: "",
- devicesList: [],
- searchDevicesList: true,
- isShowingModal: false, // 控制模态框是否正在显示
- },
-
- onLoad(options) {
- // 一次性数据初始化(蓝牙初始化在 onShow 中统一处理)
- },
-
- onShow() {
- this.checkBluetoothPermissionAndInit();
- },
-
- async checkBluetoothPermissionAndInit() {
- if (this.data.isShowingModal) {
- return;
- }
-
- this.setData({
- initText: "正在检查蓝牙及位置权限..."
- });
-
- try {
- const settingRes = await wx.getSetting();
- const hasBluetoothPermission = settingRes.authSetting['scope.bluetooth'];
- const hasLocationPermission = settingRes.authSetting['scope.userLocation'];
-
- if (hasBluetoothPermission && hasLocationPermission) {
- this.openBluetoothAdapter();
- } else {
- let scopeToRequest = [];
- let permissionNames = [];
-
- if (!hasBluetoothPermission) {
- scopeToRequest.push('scope.bluetooth');
- permissionNames.push('蓝牙');
- }
- if (!hasLocationPermission) {
- scopeToRequest.push('scope.userLocation');
- permissionNames.push('位置');
- }
-
- if (scopeToRequest.length > 0) {
- try {
- // 逐个授权所有缺失的权限
- for (const scope of scopeToRequest) {
- await wx.authorize({ scope });
- }
- this.openBluetoothAdapter();
- } catch (authErr) {
- if (this.data.isShowingModal) {
- return;
- }
- this.setData({
- isShowingModal: true
- });
-
- wx.showModal({
- title: '提示',
- content: `小程序需要您的${permissionNames.join('和')}权限才能正常使用蓝牙功能。请前往手机设置开启。`,
- confirmText: '去开启',
- cancelText: '不开启',
- success: (modalRes) => {
- this.setData({
- isShowingModal: false
- });
- if (modalRes.confirm) {
- wx.openSetting({
- success: (settingRes) => {
- this.checkBluetoothPermissionAndInit();
- },
- fail: (settingErr) => {
- wx.navigateBack({
- delta: 1
- });
- }
- });
- } else {
- this.setData({
- initText: "权限被拒绝。"
- });
- wx.navigateBack({
- delta: 1
- });
- }
- },
- fail: () => {
- this.setData({
- isShowingModal: false
- });
- }
- });
- }
- }
- }
- } catch (err) {
- if (this.data.isShowingModal) {
- return;
- }
- this.setData({
- isShowingModal: true
- });
-
- wx.showToast({
- title: '获取权限设置失败',
- icon: 'none',
- duration: 2000,
- success: () => {
- this.setData({
- isShowingModal: false
- });
- wx.navigateBack({
- delta: 1
- });
- },
- fail: () => {
- this.setData({
- isShowingModal: false
- });
- wx.navigateBack({
- delta: 1
- });
- }
- });
- }
- },
-
- async openBluetoothAdapter() {
- if (this.data.isShowingModal) {
- return;
- }
-
- this.setData({
- initText: "正在初始化蓝牙..."
- });
-
- try {
- await wx.openBluetoothAdapter();
- this.setData({
- initText: "蓝牙初始化成功"
- });
- this.getDeviceSettingList();
- } catch (err) {
- this.setData({
- initText: "蓝牙初始化失败。"
- });
-
- if (this.data.isShowingModal) {
- return;
- }
- this.setData({
- isShowingModal: true
- });
-
- let modalContent = '';
- if (err.errCode === 10001) {
- modalContent = "请确保手机蓝牙已开启。";
- } else if (err.errMsg && (err.errMsg.includes('permission denied') || err.errCode === 10003)) {
- modalContent = '蓝牙或位置权限仍被拒绝,无法使用蓝牙功能。';
- } else {
- wx.showToast({
- title: `蓝牙适配器打开失败: ${err.errMsg || err.errCode}`,
- icon: 'none',
- duration: 2000,
- success: () => {
- this.setData({
- isShowingModal: false
- });
- wx.navigateBack({
- delta: 1
- });
- },
- fail: () => {
- this.setData({
- isShowingModal: false
- });
- wx.navigateBack({
- delta: 1
- });
- }
- });
- return;
- }
-
- wx.showModal({
- title: "提示",
- content: modalContent,
- showCancel: false,
- success: () => {
- this.setData({
- isShowingModal: false
- });
- wx.navigateBack({
- delta: 1
- });
- },
- fail: () => {
- this.setData({
- isShowingModal: false
- });
- }
- });
- }
- },
-
- getDeviceSettingList() {
- // app.globalData.ppScale.plugin.Blue.visibleLog(true);
- this.setData({
- initText: "设备搜索中..."
- });
- app.globalData.ppScale.device.list = [];
- let seviceList = app.globalData.ppScale.device.setting;
- app.globalData.ppScale.plugin.Blue.setDeviceSetting(seviceList);
- let deviceNames = seviceList.map(item => item.deviceName);
- app.globalData.ppScale.plugin.Blue.start(deviceNames, false);
- app.globalData.ppScale.plugin.bus.subscribe("devicesList", (res) => {
- // console.log("searchDevice ===> devicesList", res);
- this.setData({
- devicesList: res
- });
- this.selectDevice();
- });
- },
-
- selectDevice() {
- if(this.data.devicesList && this.data.devicesList.length && this.data.searchDevicesList) {
- this.setData({
- searchDevicesList: false
- });
- setTimeout(() => {
- app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery();
- app.globalData.ppScale.device.list = this.data.devicesList;
- wx.redirectTo({
- url: "/pages/configureDevice/configureDevice"
- })
- }, 1000);
- }
- },
-
- onUnload() {
- app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery();
- this.setData({
- isShowingModal: false
- });
- }
-})
\ No newline at end of file
diff --git a/pages/searchDevice/searchDevice.json b/pages/searchDevice/searchDevice.json
deleted file mode 100644
index 58616d8..0000000
--- a/pages/searchDevice/searchDevice.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "usingComponents": {},
- "navigationBarTitleText": "搜索设备",
- "disableScroll": true
-}
\ No newline at end of file
diff --git a/pages/searchDevice/searchDevice.wxml b/pages/searchDevice/searchDevice.wxml
deleted file mode 100644
index 0a6d437..0000000
--- a/pages/searchDevice/searchDevice.wxml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{initText}}
- 请轻轻踩秤,保证屏幕亮起
-
\ No newline at end of file
diff --git a/pages/searchDevice/searchDevice.wxss b/pages/searchDevice/searchDevice.wxss
deleted file mode 100644
index f2149ff..0000000
--- a/pages/searchDevice/searchDevice.wxss
+++ /dev/null
@@ -1,78 +0,0 @@
-page {
- width: 100%;
- height: 100%;
- padding-top: 120rpx;
- box-sizing: border-box;
- background-color: #FFFFFF;
-}
-
-.icon {
- width: 556rpx;
- height: 556rpx;
- position: relative;
- margin: 0 auto 120rpx;
-}
-
-.icon>view:nth-of-type(1) {
- position: absolute;
- z-index: 3;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- margin: auto;
- width: 200rpx;
- height: 200rpx;
- border-radius: 50%;
-}
-
-.icon>view:nth-of-type(2),
-.icon>view:nth-of-type(3) {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- margin: auto;
- width: 200rpx;
- height: 200rpx;
- border-radius: 50%;
- animation: expand 2s infinite;
-}
-
-@keyframes expand {
- 0% {
- width: 200rpx;
- height: 200rpx;
- background-color: #3194FB;
- }
- 100% {
- width: 556rpx;
- height: 556rpx;
- background-color: rgba(0, 0, 0, 0);
- }
-}
-
-.description {
- width: 100%;
-}
-
-.description>view:nth-of-type(1) {
- color: #252535;
- width: 100%;
- height: 36rpx;
- font-size: 36rpx;
- font-weight: bold;
- line-height: 36rpx;
- text-align: center;
- margin-bottom: 30rpx;
-}
-
-.description>view:nth-of-type(2) {
- color: #808080;
- width: 100%;
- height: 30rpx;
- font-size: 30rpx;
- line-height: 30rpx;
- text-align: center;
-}
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
index 5dd5a18..66ce98a 100644
--- a/project.config.json
+++ b/project.config.json
@@ -1,24 +1,27 @@
{
- "appid": "wx6c71f3ebcdcddffd",
+ "description": "项目配置文件",
+ "miniprogramRoot": "miniprogram/",
"compileType": "miniprogram",
- "libVersion": "3.8.5",
- "packOptions": {
- "ignore": [],
- "include": []
- },
"setting": {
- "coverView": true,
- "es6": true,
- "postcss": true,
- "minified": true,
- "enhance": true,
- "showShadowRootInWxmlPanel": true,
- "packNpmRelationList": [],
+ "useCompilerPlugins": [
+ "typescript",
+ "less"
+ ],
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
+ "coverView": false,
+ "postcss": false,
+ "minified": false,
+ "enhance": false,
+ "showShadowRootInWxmlPanel": false,
+ "packNpmRelationList": [],
+ "ignoreUploadUnusedFiles": true,
+ "compileHotReLoad": false,
+ "skylineRenderEnable": true,
+ "es6": false,
"compileWorklet": false,
"uglifyFileName": false,
"uploadWithSourceMap": true,
@@ -26,16 +29,23 @@
"minifyWXSS": true,
"minifyWXML": true,
"localPlugins": false,
- "disableUseStrict": false,
- "useCompilerPlugins": false,
"condition": false,
"swc": false,
- "disableSWC": true
+ "disableSWC": true,
+ "disableUseStrict": false
},
+ "simulatorType": "wechat",
+ "simulatorPluginLibVersion": {},
"condition": {},
+ "srcMiniprogramRoot": "miniprogram/",
"editorSetting": {
- "tabIndent": "tab",
+ "tabIndent": "insertSpaces",
"tabSize": 4
},
- "simulatorPluginLibVersion": {}
+ "libVersion": "2.32.3",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "appid": "wx6c71f3ebcdcddffd"
}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
index ae231f0..7c2ff81 100644
--- a/project.private.config.json
+++ b/project.private.config.json
@@ -1,24 +1,21 @@
{
- "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "libVersion": "2.32.3",
"projectname": "bodyWeight",
"setting": {
- "compileHotReLoad": true,
- "urlCheck": false,
- "bigPackageSizeSupport": true,
- "coverView": true,
+ "urlCheck": true,
+ "coverView": false,
"lazyloadPlaceholderEnable": false,
- "skylineRenderEnable": false,
+ "skylineRenderEnable": true,
"preloadBackgroundData": false,
"autoAudits": false,
"useApiHook": true,
- "useApiHostProcess": true,
- "showShadowRootInWxmlPanel": true,
+ "showShadowRootInWxmlPanel": false,
"useStaticServer": false,
"useLanDebug": false,
"showES6CompileOption": false,
+ "compileHotReLoad": true,
+ "bigPackageSizeSupport": false,
"checkInvalidKey": true,
"ignoreDevUnusedFiles": true
- },
- "libVersion": "3.14.2",
- "condition": {}
+ }
}
\ No newline at end of file
diff --git a/sitemap.json b/sitemap.json
deleted file mode 100644
index cd24f35..0000000
--- a/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/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..6149fb7
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,32 @@
+{
+ "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/typings/index.d.ts b/typings/index.d.ts
new file mode 100644
index 0000000..3ee60c8
--- /dev/null
+++ b/typings/index.d.ts
@@ -0,0 +1,8 @@
+///
+
+interface IAppOption {
+ globalData: {
+ userInfo?: WechatMiniprogram.UserInfo,
+ }
+ userInfoReadyCallback?: WechatMiniprogram.GetUserInfoSuccessCallback,
+}
\ No newline at end of file
diff --git a/typings/types/index.d.ts b/typings/types/index.d.ts
new file mode 100644
index 0000000..a5e8a7c
--- /dev/null
+++ b/typings/types/index.d.ts
@@ -0,0 +1 @@
+///
diff --git a/typings/types/wx/index.d.ts b/typings/types/wx/index.d.ts
new file mode 100644
index 0000000..db82722
--- /dev/null
+++ b/typings/types/wx/index.d.ts
@@ -0,0 +1,74 @@
+/*! *****************************************************************************
+Copyright (c) 2021 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]>
+}
+
+declare const console: WechatMiniprogram.Console
+declare const 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
diff --git a/typings/types/wx/lib.wx.api.d.ts b/typings/types/wx/lib.wx.api.d.ts
new file mode 100644
index 0000000..4c6047a
--- /dev/null
+++ b/typings/types/wx/lib.wx.api.d.ts
@@ -0,0 +1,19671 @@
+/*! *****************************************************************************
+Copyright (c) 2021 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 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 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 每月重复 */
+ repeatInterval?: string
+ /** 接口调用成功的回调函数 */
+ success?: AddPhoneRepeatCalendarSuccessCallback
+ }
+ interface AddServiceOption {
+ /** 描述service的Object */
+ service: BLEPeripheralService
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: AddServiceCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: AddServiceFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: AddServiceSuccessCallback
+ }
+ /** 广播自定义参数 */
+ interface AdvertiseReqObj {
+ /** 当前Service是否可连接 */
+ connectable?: boolean
+ /** 广播中deviceName字段,默认为空 */
+ deviceName?: string
+ /** 广播的制造商信息, 仅安卓支持 */
+ manufacturerData?: ManufacturerData[]
+ /** 要广播的serviceUuid列表 */
+ serviceUuids?: string[]
+ }
+ /** animationData */
+ interface AnimationExportResult {
+ actions: IAnyObject[]
+ }
+ /** 动画效果 */
+ interface AnimationOption {
+ /** 动画变化时间,单位 ms */
+ duration?: number
+ /** 动画变化方式
+ *
+ * 可选值:
+ * - 'linear': 动画从头到尾的速度是相同的;
+ * - 'easeIn': 动画以低速开始;
+ * - 'easeOut': 动画以低速结束;
+ * - 'easeInOut': 动画以低速开始和结束; */
+ timingFunc?: 'linear' | 'easeIn' | 'easeOut' | 'easeInOut'
+ }
+ 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 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 {
+ /** 是否授权通讯地址,已取消此项授权,会默认返回true */
+ 'scope.address'?: 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 列表]((authorize#scope-列表))
+ *
+ * 可选值:
+ * - 'scope.record': ;
+ * - 'scope.writePhotosAlbum': ;
+ * - 'scope.camera': ; */
+ scope: 'scope.record' | 'scope.writePhotosAlbum' | 'scope.camera'
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: AuthorizeForMiniProgramCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: AuthorizeForMiniProgramFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: AuthorizeForMiniProgramSuccessCallback
+ }
+ interface AuthorizeOption {
+ /** 需要获取权限的 scope,详见 [scope 列表]((authorize#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
+ }
+ interface BLEPeripheralServerCloseOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SocketTaskCloseCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SocketTaskCloseFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: SocketTaskCloseSuccessCallback
+ }
+ /** 描述service的Object */
+ interface BLEPeripheralService {
+ /** characteristics列表 */
+ characteristics: Characteristic[]
+ /** service 的 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
+ /** 播放速度。范围 0.5-2.0,默认为 1。(Android 需要 6 及以上版本)
+ *
+ * 最低基础库: `2.11.0` */
+ playbackRate: number
+ /** 音频协议。默认值为 'http',设置 'hls' 可以支持播放 HLS 协议的直播音频。
+ *
+ * 最低基础库: `1.9.94` */
+ protocol: 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 BlueToothDevice {
+ /** 当前蓝牙设备的信号强度 */
+ RSSI: number
+ /** 当前蓝牙设备的广播数据段中的 ManufacturerData 数据段。 */
+ advertisData: ArrayBuffer
+ /** 当前蓝牙设备的广播数据段中的 ServiceUUIDs 数据段 */
+ advertisServiceUUIDs: string[]
+ /** 用于区分设备的 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
+ }
+ interface CameraContextStartRecordOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: StartRecordCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: StartRecordFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: CameraContextStartRecordSuccessCallback
+ /** 超过30s或页面 `onHide` 时会结束录像 */
+ timeoutCallback?: StartRecordTimeoutCallback
+ }
+ interface CameraContextStopRecordOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: StopRecordCompleteCallback
+ /** 启动视频压缩,压缩效果同`chooseVideo` */
+ compressed?: boolean
+ /** 接口调用失败的回调函数 */
+ fail?: StopRecordFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: CameraContextStopRecordSuccessCallback
+ }
+ interface CameraFrameListenerStartOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: StartCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: StartFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: StartSuccessCallback
+ }
+ /** 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)
+ *
+ * 最低基础库: `2.7.0` */
+ interface Canvas {
+ /** 画布高度 */
+ height: number
+ /** 画布宽度 */
+ width: number
+ }
+ /** canvas 组件的绘图上下文。CanvasContext 是旧版的接口, 新版 Canvas 2D 接口与 Web 一致。 */
+ interface CanvasContext {
+ /** 填充颜色。用法同 [CanvasContext.setFillStyle()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFillStyle.html)。
+ *
+ * 最低基础库: `1.9.90` */
+ fillStyle: string | CanvasGradient
+ /** 当前字体样式的属性。符合 [CSS font 语法](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font) 的 DOMString 字符串,至少需要提供字体大小和字体族名。默认值为 10px sans-serif。
+ *
+ * 最低基础库: `1.9.90` */
+ font: string
+ /** 全局画笔透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 */
+ globalAlpha: number
+ /** 在绘制新形状时应用的合成操作的类型。目前安卓版本只适用于 `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
+ *
+ * 最低基础库: `1.9.90` */
+ globalCompositeOperation: string
+ /** 线条的端点样式。用法同 [CanvasContext.setLineCap()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineCap.html)。
+ *
+ * 最低基础库: `1.9.90` */
+ lineCap: string
+ /** 虚线偏移量,初始值为0
+ *
+ * 最低基础库: `1.9.90` */
+ lineDashOffset: number
+ /** 线条的交点样式。用法同 [CanvasContext.setLineJoin()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html)。
+ *
+ * 可选值:
+ * - 'bevel': 斜角;
+ * - 'round': 圆角;
+ * - 'miter': 尖角;
+ *
+ * 最低基础库: `1.9.90` */
+ lineJoin: 'bevel' | 'round' | 'miter'
+ /** 线条的宽度。用法同 [CanvasContext.setLineWidth()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineWidth.html)。
+ *
+ * 最低基础库: `1.9.90` */
+ lineWidth: number
+ /** 最大斜接长度。用法同 [CanvasContext.setMiterLimit()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setMiterLimit.html)。
+ *
+ * 最低基础库: `1.9.90` */
+ miterLimit: number
+ /** 阴影的模糊级别
+ *
+ * 最低基础库: `1.9.90` */
+ shadowBlur: number
+ /** 阴影的颜色
+ *
+ * 最低基础库: `1.9.90` */
+ shadowColor: number
+ /** 阴影相对于形状在水平方向的偏移
+ *
+ * 最低基础库: `1.9.90` */
+ shadowOffsetX: number
+ /** 阴影相对于形状在竖直方向的偏移
+ *
+ * 最低基础库: `1.9.90` */
+ shadowOffsetY: number
+ /** 边框颜色。用法同 [CanvasContext.setStrokeStyle()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setStrokeStyle.html)。
+ *
+ * 最低基础库: `1.9.90` */
+ 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
+ /** 目标文件的类型
+ *
+ * 可选值:
+ * - 'jpg': jpg 图片;
+ * - 'png': png 图片;
+ *
+ * 最低基础库: `1.7.0` */
+ fileType?: 'jpg' | 'png'
+ /** 指定的画布区域的高度
+ *
+ * 最低基础库: `1.2.0` */
+ height?: number
+ /** 图片的质量,目前仅对 jpg 有效。取值范围为 (0, 1],不在范围内时当作 1.0 处理。
+ *
+ * 最低基础库: `1.7.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
+ }
+ 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
+ /** 错误信息 */
+ errMsg: string
+ /** 收货地址国家码 */
+ nationalCode: string
+ /** 邮编 */
+ postalCode: string
+ /** 国标收货地址第一级地址 */
+ provinceName: string
+ /** 收货人手机号码 */
+ telNumber: string
+ /** 收货人姓名 */
+ userName: 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 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: string
+ /** 经度,浮点数,范围为-180~180,负数表示西经。使用 gcj02 国测局坐标系 */
+ longitude: string
+ /** 位置名称 */
+ name: string
+ errMsg: string
+ }
+ interface ChooseMediaOption {
+ /** 仅在 sourceType 为 camera 时生效,使用前置或后置摄像头
+ *
+ * 可选值:
+ * - 'back': 使用后置摄像头;
+ * - 'front': 使用前置摄像头; */
+ camera?: 'back' | 'front'
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ChooseMediaCompleteCallback
+ /** 最多可以选择的文件个数 */
+ count?: number
+ /** 接口调用失败的回调函数 */
+ fail?: ChooseMediaFailCallback
+ /** 拍摄视频最长拍摄时间,单位秒。时间范围为 3s 至 30s 之间 */
+ maxDuration?: number
+ /** 文件类型
+ *
+ * 可选值:
+ * - 'image': 只能拍摄图片或从相册选择图片;
+ * - 'video': 只能拍摄视频或从相册选择视频; */
+ mediaType?: Array<'image' | 'video'>
+ /** 仅对 mediaType 为 image 时有效,是否压缩所选文件 */
+ sizeType?: string[]
+ /** 图片和视频选择的来源
+ *
+ * 可选值:
+ * - 'album': 从相册选择;
+ * - 'camera': 使用相机拍摄; */
+ sourceType?: Array<'album' | 'camera'>
+ /** 接口调用成功的回调函数 */
+ success?: ChooseMediaSuccessCallback
+ }
+ interface ChooseMediaSuccessCallbackResult {
+ /** 本地临时文件列表 */
+ tempFiles: MediaFile[]
+ /** 文件类型,有效值有 image 、video */
+ type: string
+ errMsg: string
+ }
+ interface ChooseMessageFileOption {
+ /** 最多可以选择的文件个数,可以 0~100 */
+ count: number
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ChooseMessageFileCompleteCallback
+ /** 根据文件拓展名过滤,仅 type==file 时有效。每一项都不能是空字符串。默认不过滤。
+ *
+ * 最低基础库: `2.6.0` */
+ extension?: string[]
+ /** 接口调用失败的回调函数 */
+ fail?: ChooseMessageFileFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ChooseMessageFileSuccessCallback
+ /** 所选的文件的类型
+ *
+ * 可选值:
+ * - 'all': 从所有文件选择;
+ * - 'video': 只能选择视频文件;
+ * - 'image': 只能选择图片文件;
+ * - 'file': 可以选择除了图片和视频之外的其它的文件; */
+ type?: 'all' | 'video' | 'image' | 'file'
+ }
+ interface ChooseMessageFileSuccessCallbackResult {
+ /** 返回选择的文件的本地临时文件对象数组 */
+ tempFiles: ChooseFile[]
+ 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 CloseBLEConnectionOption {
+ /** 用于区分设备的 id */
+ deviceId: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: CloseBLEConnectionCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: CloseBLEConnectionFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: CloseBLEConnectionSuccessCallback
+ }
+ interface CloseBluetoothAdapterOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: CloseBluetoothAdapterCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: CloseBluetoothAdapterFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: CloseBluetoothAdapterSuccessCallback
+ }
+ interface CloseSocketOption {
+ /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */
+ code?: number
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: CloseSocketCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: CloseSocketFailCallback
+ /** 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。 */
+ reason?: string
+ /** 接口调用成功的回调函数 */
+ success?: CloseSocketSuccessCallback
+ }
+ /** 颜色。可以用以下几种方式来表示 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 ConnectOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ConnectCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: ConnectFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ConnectSuccessCallback
+ }
+ 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
+ /** 建立 TCP 连接的时候的 TCP_NODELAY 设置
+ *
+ * 最低基础库: `2.4.0` */
+ 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
+ /** 接口调用成功的回调函数 */
+ success?: ConnectWifiSuccessCallback
+ }
+ 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 CreateIntersectionObserverOption {
+ /** 初始的相交比例,如果调用时检测到的相交比例与这个值不相等且达到阈值,则会触发一次监听器的回调函数。 */
+ initialRatio?: number
+ /** 是否同时观测多个目标节点(而非一个),如果设为 true ,observe 的 targetSelector 将选中多个节点(注意:同时选中过多节点将影响渲染性能)
+ *
+ * 最低基础库: `2.0.0` */
+ 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 CreateRewardedVideoAdOption {
+ /** 广告单元 id */
+ adUnitId: string
+ /** 是否启用多例模式,默认为false
+ *
+ * 最低基础库: `2.8.0` */
+ multiton?: boolean
+ }
+ /** 可选参数 */
+ interface CreateWorkerOption {
+ /** 是否使用实验worker。在iOS下,实验worker的JS运行效率比非实验worker提升近十倍,如需在worker内进行重度计算的建议开启此选项。
+ *
+ * 最低基础库: `2.13.0` */
+ useExperimentalWorker?: boolean
+ }
+ /** 弹幕内容 */
+ 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 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` */
+ profile: DownloadProfile
+ /** 开发者服务器返回的 HTTP 状态码 */
+ statusCode: number
+ /** 临时文件路径 (本地路径)。没传入 filePath 指定文件存储路径时会返回,下载后的文件会存储到一个临时文件 */
+ tempFilePath: string
+ errMsg: string
+ }
+ /** 网络请求过程中一些调试信息
+ *
+ * 最低基础库: `2.10.4` */
+ interface DownloadProfile {
+ /** 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
+ /** 评估的网络状态 slow 2g/2g/3g/4g */
+ estimate_nettype: string
+ /** 组件准备好使用 HTTP 请求抓取资源的时间,这发生在检查本地缓存之前 */
+ fetchStart: number
+ /** 协议层根据多个请求评估当前网络的 rtt(仅供参考) */
+ httpRttEstimate: number
+ /** 当前请求的IP */
+ peerIP: string
+ /** 当前请求的端口 */
+ port: number
+ /** 收到字节数 */
+ 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 DownloadTaskOnProgressUpdateCallbackResult {
+ /** 下载进度百分比 */
+ progress: number
+ /** 预期需要下载的数据总长度,单位 Bytes */
+ totalBytesExpectedToWrite: number
+ /** 已经下载的数据长度,单位 Bytes */
+ totalBytesWritten: number
+ }
+ interface EnableAlertBeforeUnloadOption {
+ /** 询问对话框内容 */
+ message: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: EnableAlertBeforeUnloadCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: EnableAlertBeforeUnloadFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: EnableAlertBeforeUnloadSuccessCallback
+ }
+ interface ExitFullScreenOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ExitFullScreenCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: ExitFullScreenFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ExitFullScreenSuccessCallback
+ }
+ interface ExitPictureInPictureOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ExitPictureInPictureCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: ExitPictureInPictureFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ExitPictureInPictureSuccessCallback
+ }
+ interface ExitVoIPChatOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ExitVoIPChatCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: ExitVoIPChatFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ExitVoIPChatSuccessCallback
+ }
+ interface ExtractDataSourceOption {
+ /** 视频源地址,只支持本地文件 */
+ source: string
+ }
+ interface Fields {
+ /** 指定样式名列表,返回节点对应样式名的当前值
+ *
+ * 最低基础库: `2.1.0` */
+ computedStyle?: string[]
+ /** 是否返回节点对应的 Context 对象
+ *
+ * 最低基础库: `2.4.2` */
+ context?: boolean
+ /** 是否返回节点 dataset */
+ dataset?: boolean
+ /** 是否返回节点 id */
+ id?: boolean
+ /** 是否返回节点 mark */
+ mark?: boolean
+ /** 是否返回节点对应的 Node 实例
+ *
+ * 最低基础库: `2.7.0` */
+ 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 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 {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: FromScreenLocationCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: FromScreenLocationFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: FromScreenLocationSuccessCallback
+ }
+ 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 */
+ deviceId: string
+ /** 蓝牙服务 uuid,需要使用 `getBLEDeviceServices` 获取 */
+ 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 {
+ /** 信号强度 */
+ RSSI: number
+ errMsg: string
+ }
+ interface GetBLEDeviceServicesOption {
+ /** 蓝牙设备 id */
+ deviceId: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetBLEDeviceServicesCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetBLEDeviceServicesFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: GetBLEDeviceServicesSuccessCallback
+ }
+ interface GetBLEDeviceServicesSuccessCallbackResult {
+ /** 设备服务列表 */
+ services: BLEService[]
+ 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 */
+ fetchType: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetBackgroundFetchDataCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetBackgroundFetchDataFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: GetBackgroundFetchDataSuccessCallback
+ }
+ interface GetBackgroundFetchTokenOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetBackgroundFetchTokenCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetBackgroundFetchTokenFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: GetBackgroundFetchTokenSuccessCallback
+ }
+ interface GetBatteryInfoOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetBatteryInfoCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetBatteryInfoFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: GetBatteryInfoSuccessCallback
+ }
+ interface GetBatteryInfoSuccessCallbackResult {
+ /** 是否正在充电中 */
+ isCharging: boolean
+ /** 设备电量,范围 1 - 100 */
+ level: string
+ errMsg: string
+ }
+ interface GetBatteryInfoSyncResult {
+ /** 是否正在充电中 */
+ isCharging: boolean
+ /** 设备电量,范围 1 - 100 */
+ level: string
+ }
+ interface GetBeaconsOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetBeaconsCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetBeaconsFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: GetBeaconsSuccessCallback
+ }
+ interface GetBeaconsSuccessCallbackResult {
+ /** iBeacon 设备列表 */
+ beacons: IBeaconInfo[]
+ 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
+ /** 接口调用成功的回调函数 */
+ success?: GetCenterLocationSuccessCallback
+ }
+ interface GetCenterLocationSuccessCallbackResult {
+ /** 纬度 */
+ latitude: number
+ /** 经度 */
+ longitude: number
+ errMsg: string
+ }
+ interface GetClipboardDataOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetClipboardDataCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetClipboardDataFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: GetClipboardDataSuccessCallback
+ }
+ interface GetClipboardDataSuccessCallbackOption {
+ /** 剪贴板的内容 */
+ data: string
+ }
+ interface GetConnectedBluetoothDevicesOption {
+ /** 蓝牙设备主 service 的 uuid 列表 */
+ services: string[]
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetConnectedBluetoothDevicesCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetConnectedBluetoothDevicesFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: GetConnectedBluetoothDevicesSuccessCallback
+ }
+ interface GetConnectedBluetoothDevicesSuccessCallbackResult {
+ /** 搜索到的设备列表 */
+ devices: BluetoothDeviceInfo[]
+ errMsg: string
+ }
+ interface GetConnectedWifiOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetConnectedWifiCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetConnectedWifiFailCallback
+ /** 接口调用成功的回调函数 */
+ 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 GetGroupEnterInfoOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetGroupEnterInfoCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetGroupEnterInfoFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: GetGroupEnterInfoSuccessCallback
+ }
+ interface GetGroupEnterInfoSuccessCallbackResult {
+ /** 敏感数据对应的云 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)
+ *
+ * 最低基础库: `2.7.0` */
+ 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
+ /** [拍照时设备方向](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;
+ *
+ * 最低基础库: `1.9.90` */
+ orientation:
+ | 'up'
+ | 'up-mirrored'
+ | 'down'
+ | 'down-mirrored'
+ | 'left-mirrored'
+ | 'right'
+ | 'right-mirrored'
+ | 'left'
+ /** 图片的本地路径 */
+ path: string
+ /** 图片格式
+ *
+ * 最低基础库: `1.9.90` */
+ type: string
+ /** 图片原始宽度,单位px。不考虑旋转。 */
+ width: number
+ errMsg: string
+ }
+ interface GetLocationOption {
+ /** 传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度
+ *
+ * 最低基础库: `1.6.0` */
+ altitude?: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: GetLocationCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: GetLocationFailCallback
+ /** 高精度定位超时时间(ms),指定时间内返回最高精度,该值3000ms以上高精度定位才有效果
+ *
+ * 最低基础库: `2.9.0` */
+ highAccuracyExpireTime?: number
+ /** 开启高精度定位
+ *
+ * 最低基础库: `2.9.0` */
+ isHighAccuracy?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: GetLocationSuccessCallback
+ /** wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 */
+ type?: string
+ }
+ interface GetLocationSuccessCallbackResult {
+ /** 位置的精确度 */
+ accuracy: number
+ /** 高度,单位 m
+ *
+ * 最低基础库: `1.2.0` */
+ altitude: number
+ /** 水平精度,单位 m
+ *
+ * 最低基础库: `1.2.0` */
+ horizontalAccuracy: number
+ /** 纬度,范围为 -90~90,负数表示南纬 */
+ latitude: number
+ /** 经度,范围为 -180~180,负数表示西经 */
+ longitude: number
+ /** 速度,单位 m/s */
+ speed: number
+ /** 垂直精度,单位 m(Android 无法获取,返回 0)
+ *
+ * 最低基础库: `1.2.0` */
+ verticalAccuracy: number
+ errMsg: string
+ }
+ interface GetLogManagerOption {
+ /** 取值为0/1,取值为0表示是否会把 `App`、`Page` 的生命周期函数和 `wx` 命名空间下的函数调用写入日志,取值为1则不会。默认值是 0
+ *
+ * 最低基础库: `2.3.2` */
+ 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 {
+ /** 网络类型
+ *
+ * 可选值:
+ * - 'wifi': wifi 网络;
+ * - '2g': 2g 网络;
+ * - '3g': 3g 网络;
+ * - '4g': 4g 网络;
+ * - '5g': 5g 网络;
+ * - 'unknown': Android 下不常见的网络类型;
+ * - 'none': 无网络; */
+ networkType: 'wifi' | '2g' | '3g' | '4g' | '5g' | 'unknown' | 'none'
+ 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 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
+ /** 是否同时获取用户订阅消息的订阅状态,默认不获取。注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。
+ *
+ * 最低基础库: `2.10.1` */
+ 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)
+ *
+ * 用户订阅消息设置,接口参数`withSubscriptions`值为`true`时才会返回。
+ *
+ * 最低基础库: `2.10.1` */
+ 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
+ /** 超时时间,单位 ms
+ *
+ * 最低基础库: `1.9.90` */
+ 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
+ /** 接口调用失败的回调函数 */
+ 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 {
+ /** 敏感数据对应的云 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)
+ *
+ * 最低基础库: `2.7.0` */
+ cloudID: string
+ /** 包括敏感数据在内的完整用户信息的加密数据,详见 [用户数据的签名验证和加解密]((signature#加密数据解密算法)) */
+ encryptedData: string
+ /** 加密算法的初始向量,详见 [用户数据的签名验证和加解密]((signature#加密数据解密算法)) */
+ 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 {
+ /** [UserInfo](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/UserInfo.html)
+ *
+ * 用户信息对象 */
+ 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 {
+ /** 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见[云调用直接获取开放数据](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-cloud)
+ *
+ * 最低基础库: `2.7.0` */
+ 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
+ /** 接口调用成功的回调函数 */
+ success?: HideLoadingSuccessCallback
+ }
+ interface HideNavigationBarLoadingOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: HideNavigationBarLoadingCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: HideNavigationBarLoadingFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: HideNavigationBarLoadingSuccessCallback
+ }
+ interface HideShareMenuOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: HideShareMenuCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: HideShareMenuFailCallback
+ /** 本接口为 Beta 版本,暂只在 Android 平台支持。需要隐藏的转发按钮名称列表,默认['shareAppMessage', 'shareTimeline']。按钮名称合法值包含 "shareAppMessage"、"shareTimeline" 两种
+ *
+ * 最低基础库: `2.11.3` */
+ 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
+ /** 接口调用成功的回调函数 */
+ success?: HideToastSuccessCallback
+ }
+ interface IBeaconInfo {
+ /** iBeacon 设备的距离 */
+ accuracy: number
+ /** iBeacon 设备的主 id */
+ major: string
+ /** iBeacon 设备的次 id */
+ minor: string
+ /** 表示设备距离的枚举值 */
+ proximity: number
+ /** 表示设备的信号强度 */
+ rssi: number
+ /** iBeacon 设备广播的 uuid */
+ uuid: string
+ }
+ /** 图片对象
+ *
+ * 最低基础库: `2.7.0` */
+ interface Image {
+ /** 图片的真实高度 */
+ height: number
+ /** 图片加载发生错误后触发的回调函数 */
+ onerror: (...args: any[]) => any
+ /** 图片加载完成后触发的回调函数 */
+ onload: (...args: any[]) => any
+ /** 图片的 URL。v2.11.0 起支持传递 base64 Data URI */
+ src: string
+ /** 图片的真实宽度 */
+ width: number
+ }
+ /** ImageData 对象
+ *
+ * 最低基础库: `2.9.0` */
+ 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 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
+ /** 播放速度。范围 0.5-2.0,默认为 1。(Android 需要 6 及以上版本)
+ *
+ * 最低基础库: `2.11.0` */
+ playbackRate: number
+ /** 音频资源的地址,用于直接播放。[2.2.3](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 开始支持云文件ID */
+ src: string
+ /** 开始播放的位置(单位:s),默认为 0 */
+ startTime: number
+ /** 音量。范围 0~1。默认为 1
+ *
+ * 最低基础库: `1.9.90` */
+ volume: number
+ }
+ interface InnerAudioContextOnErrorCallbackResult {
+ /**
+ *
+ * 可选值:
+ * - 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
+ /** 接口调用成功的回调函数 */
+ success?: InsertImageSuccessCallback
+ /** 图片宽度(pixels/百分比) */
+ width?: string
+ }
+ interface InsertTextOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: InsertTextCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: InsertTextFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: InsertTextSuccessCallback
+ /** 文本内容 */
+ text?: string
+ }
+ interface IntersectionObserverObserveCallbackResult {
+ /** 目标边界 */
+ boundingClientRect: BoundingClientRectResult
+ /** 相交比例 */
+ intersectionRatio: number
+ /** 相交区域的边界 */
+ intersectionRect: IntersectionRectResult
+ /** 参照区域的边界 */
+ relativeRect: RelativeRectResult
+ /** 相交检测时的时间戳 */
+ time: number
+ }
+ /** 相交区域的边界 */
+ interface IntersectionRectResult {
+ /** 下边界 */
+ bottom: number
+ /** 高度 */
+ height: number
+ /** 左边界 */
+ left: number
+ /** 右边界 */
+ right: number
+ /** 上边界 */
+ top: number
+ /** 宽度 */
+ width: number
+ }
+ interface InterstitialAdOnErrorCallbackResult {
+ /** 错误码
+ *
+ * 可选值:
+ * - 1000: 后端接口调用失败;
+ * - 1001: 参数错误;
+ * - 1002: 广告单元无效;
+ * - 1003: 内部错误;
+ * - 1004: 无合适的广告;
+ * - 1005: 广告组件审核中;
+ * - 1006: 广告组件被驳回;
+ * - 1007: 广告组件被封禁;
+ * - 1008: 广告单元已关闭; */
+ errCode: 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008
+ /** 错误信息 */
+ errMsg: string
+ }
+ interface IsConnectedOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: IsConnectedCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: IsConnectedFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: IsConnectedSuccessCallback
+ }
+ 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 LaunchOptionsApp {
+ /** 打开的文件信息数组,只有从聊天素材场景打开(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
+ /** 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
+ /** 图片的质量,默认原图。有效值为 raw、compressed
+ *
+ * 最低基础库: `2.10.0` */
+ quality?: string
+ /** 接口调用成功的回调函数 */
+ success?: LivePlayerContextSnapshotSuccessCallback
+ }
+ interface LivePlayerContextSnapshotSuccessCallbackResult {
+ /** 图片的高度 */
+ height: string
+ /** 图片文件的临时路径 (本地路径) */
+ tempImagePath: string
+ /** 图片的宽度 */
+ width: string
+ errMsg: string
+ }
+ interface LivePusherContextSnapshotOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SnapshotCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SnapshotFailCallback
+ /** 图片的质量,默认原图。有效值为 raw、compressed
+ *
+ * 最低基础库: `2.10.0` */
+ quality?: string
+ /** 接口调用成功的回调函数 */
+ success?: LivePusherContextSnapshotSuccessCallback
+ }
+ interface LivePusherContextSnapshotSuccessCallbackResult {
+ /** 图片的高度 */
+ height: string
+ /** 图片文件的临时路径 */
+ tempImagePath: string
+ /** 图片的宽度 */
+ width: string
+ errMsg: string
+ }
+ 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 LoginOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: LoginCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: LoginFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: LoginSuccessCallback
+ /** 超时时间,单位ms
+ *
+ * 最低基础库: `1.9.90` */
+ timeout?: number
+ }
+ interface LoginSuccessCallbackResult {
+ /** 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 [auth.code2Session](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html),使用 code 换取 openid 和 session_key 等信息 */
+ code: string
+ errMsg: string
+ }
+ interface MakeBluetoothPairOption {
+ /** 蓝牙设备 id */
+ deviceId: string
+ /** pin 码,Base64 格式。 */
+ pin: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: MakeBluetoothPairCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: MakeBluetoothPairFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: MakeBluetoothPairSuccessCallback
+ /** 超时时间 */
+ timeout?: number
+ }
+ interface MakePhoneCallOption {
+ /** 需要拨打的电话号码 */
+ phoneNumber: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: MakePhoneCallCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: MakePhoneCallFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: MakePhoneCallSuccessCallback
+ }
+ /** 广播的制造商信息, 仅安卓支持 */
+ 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
+ }
+ /** 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
+ /** 视频的高度 */
+ 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'
+ }
+ /** 可通过 [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) 音频或视频轨道,可以对轨道进行一些操作
+ *
+ * 最低基础库: `2.9.0` */
+ interface MediaTrack {
+ /** 轨道长度,只读 */
+ duration: number
+ /** 轨道类型,只读
+ *
+ * 可选值:
+ * - 'audio': 音频轨道;
+ * - 'video': 视频轨道; */
+ kind: 'audio' | 'video'
+ /** 音量,音频轨道下有效,可写 */
+ volume: number
+ }
+ /** 小程序帐号信息 */
+ interface MiniProgram {
+ /** 小程序 appId */
+ appId: string
+ /** 小程序版本
+ *
+ * 可选值:
+ * - 'develop': 开发版;
+ * - 'trial': 体验版;
+ * - 'release': 正式版;
+ *
+ * 最低基础库: `2.10.0` */
+ envVersion: 'develop' | 'trial' | 'release'
+ /** 线上小程序版本号
+ *
+ * 最低基础库: `2.10.2` */
+ version: string
+ }
+ interface MkdirFailCallbackResult {
+ /** 错误信息
+ *
+ * 可选值:
+ * - 'fail no such file or directory ${dirPath}': 上级目录不存在;
+ * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有写权限;
+ * - 'fail file already exists ${dirPath}': 有同名文件或目录;
+ * - 'fail sdcard not mounted': Android sdcard 挂载失败; */
+ errMsg: string
+ }
+ interface MkdirOption {
+ /** 创建的目录路径 (本地路径) */
+ dirPath: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: MkdirCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: MkdirFailCallback
+ /** 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。
+ *
+ * 最低基础库: `2.3.0` */
+ 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
+ /** 接口调用成功的回调函数 */
+ 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 NodeCallbackResult {
+ /** 节点对应的 Node 实例 */
+ node: IAnyObject
+ }
+ interface NotifyBLECharacteristicValueChangeOption {
+ /** 蓝牙特征值的 uuid */
+ characteristicId: string
+ /** 蓝牙设备 id */
+ deviceId: string
+ /** 蓝牙特征值对应服务的 uuid */
+ serviceId: string
+ /** 是否启用 notify */
+ state: boolean
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: NotifyBLECharacteristicValueChangeCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: NotifyBLECharacteristicValueChangeFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: NotifyBLECharacteristicValueChangeSuccessCallback
+ }
+ /** 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
+ }
+ interface OnAccelerometerChangeCallbackResult {
+ /** X 轴 */
+ x: number
+ /** Y 轴 */
+ y: number
+ /** Z 轴 */
+ z: number
+ }
+ interface OnAppShowCallbackResult {
+ /** 打开的文件信息数组,只有从聊天素材场景打开(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
+ /** shareTicket,详见[获取更多转发信息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html) */
+ shareTicket?: string
+ }
+ interface OnBLECharacteristicValueChangeCallbackResult {
+ /** 蓝牙特征值的 uuid */
+ characteristicId: string
+ /** 蓝牙设备 id */
+ deviceId: string
+ /** 蓝牙特征值对应服务的 uuid */
+ serviceId: string
+ /** 特征值最新的值 */
+ value: ArrayBuffer
+ }
+ interface OnBLEConnectionStateChangeCallbackResult {
+ /** 是否处于已连接状态 */
+ connected: boolean
+ /** 蓝牙设备ID */
+ deviceId: string
+ }
+ interface OnBLEPeripheralConnectionStateChangedCallbackResult {
+ /** 连接目前状态 */
+ connected: boolean
+ /** 连接状态变化的设备 id */
+ deviceId: string
+ /** server 的 uuid */
+ serverId: string
+ }
+ interface OnBackgroundFetchDataCallbackResult {
+ /** 缓存数据类别 (periodic) */
+ fetchType: string
+ /** 缓存数据 */
+ fetchedData: string
+ /** 客户端拿到缓存数据的时间戳 */
+ timeStamp: number
+ }
+ interface OnBeaconServiceChangeCallbackResult {
+ /** 服务目前是否可用 */
+ available: boolean
+ /** 目前是否处于搜索状态 */
+ discovering: boolean
+ }
+ interface OnBeaconUpdateCallbackResult {
+ /** 当前搜寻到的所有 iBeacon 设备列表 */
+ beacons: IBeaconInfo[]
+ }
+ interface OnBluetoothAdapterStateChangeCallbackResult {
+ /** 蓝牙适配器是否可用 */
+ available: boolean
+ /** 蓝牙适配器是否处于搜索状态 */
+ discovering: boolean
+ }
+ interface OnBluetoothDeviceFoundCallbackResult {
+ /** 新搜索到的设备列表 */
+ devices: BlueToothDevice[]
+ }
+ interface OnCameraFrameCallbackResult {
+ /** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */
+ data: ArrayBuffer
+ /** 图像数据矩形的高度 */
+ height: number
+ /** 图像数据矩形的宽度 */
+ width: number
+ }
+ interface OnCharacteristicReadRequestCallbackResult {
+ /** 唯一标识码,调用 writeCharacteristicValue 时使用 */
+ callbackId: number
+ /** characteristic对应的uuid */
+ characteristicId: string
+ /** service对应的uuid */
+ serviceId: string
+ }
+ interface OnCharacteristicSubscribedCallbackResult {
+ /** characteristic对应的uuid */
+ characteristicId: string
+ /** service对应的uuid */
+ serviceId: string
+ }
+ interface OnCharacteristicWriteRequestCallbackResult {
+ /** 唯一标识码,调用 writeCharacteristicValue 时使用 */
+ callbackId: number
+ /** characteristic对应的uuid */
+ characteristicId: string
+ /** service对应的uuid */
+ serviceId: string
+ /** 请求写入的特征值数据 */
+ value: ArrayBuffer
+ }
+ interface OnCheckForUpdateCallbackResult {
+ /** 是否有新版本 */
+ hasUpdate: boolean
+ }
+ interface OnCompassChangeCallbackResult {
+ /** 精度
+ *
+ * 最低基础库: `2.4.0` */
+ accuracy: number | string
+ /** 面对的方向度数 */
+ direction: number
+ }
+ interface OnCopyUrlCallbackResult {
+ /** 用短链打开小程序时当前页面携带的查询字符串。小程序中使用时,应在进入页面时调用 `wx.onCopyUrl` 自定义 `query`,退出页面时调用 `wx.offCopyUrl`,防止影响其它页面。 */
+ query: string
+ }
+ interface OnDeviceMotionChangeCallbackResult {
+ /** 当 手机坐标 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 OnDiscoveredCallbackResult {
+ /** NdefMessage 数组,消息格式为 {id: ArrayBuffer, type: ArrayBuffer, payload: ArrayBuffer} */
+ messages: any[]
+ /** tech 数组,用于匹配NFC卡片具体可以使用什么标准(NfcA等实例)处理 */
+ techs: any[]
+ }
+ interface OnFrameRecordedCallbackResult {
+ /** 录音分片数据 */
+ frameBuffer: ArrayBuffer
+ /** 当前帧是否正常录音结束前的最后一帧 */
+ isLastFrame: boolean
+ }
+ interface OnGetWifiListCallbackResult {
+ /** Wi-Fi 列表数据 */
+ wifiList: WifiInfo[]
+ }
+ interface OnGyroscopeChangeCallbackResult {
+ /** x 轴的角速度 */
+ x: number
+ /** y 轴的角速度 */
+ y: number
+ /** z 轴的角速度 */
+ z: number
+ }
+ interface OnHCEMessageCallbackResult {
+ /** `messageType=1` 时 ,客户端接收到 NFC 设备的指令 */
+ data: ArrayBuffer
+ /** 消息类型
+ *
+ * 可选值:
+ * - 1: HCE APDU Command类型,小程序需对此指令进行处理,并调用 sendHCEMessage 接口返回处理指令;
+ * - 2: 设备离场事件类型; */
+ messageType: 1 | 2
+ /** `messageType=2` 时,原因 */
+ reason: number
+ }
+ interface OnHeadersReceivedCallbackResult {
+ /** 开发者服务器返回的 HTTP Response Header */
+ header: IAnyObject
+ }
+ interface OnKeyboardHeightChangeCallbackResult {
+ /** 键盘高度 */
+ height: number
+ }
+ interface OnLocalServiceFoundCallbackResult {
+ /** 服务的 ip 地址 */
+ ip: string
+ /** 服务的端口 */
+ port: number
+ /** 服务的名称 */
+ serviceName: string
+ /** 服务的类型 */
+ serviceType: string
+ }
+ interface OnLocalServiceLostCallbackResult {
+ /** 服务的名称 */
+ serviceName: string
+ /** 服务的类型 */
+ serviceType: string
+ }
+ interface OnLocationChangeCallbackResult {
+ /** 位置的精确度 */
+ accuracy: number
+ /** 高度,单位 m
+ *
+ * 最低基础库: `1.2.0` */
+ altitude: number
+ /** 水平精度,单位 m
+ *
+ * 最低基础库: `1.2.0` */
+ horizontalAccuracy: number
+ /** 纬度,范围为 -90~90,负数表示南纬 */
+ latitude: number
+ /** 经度,范围为 -180~180,负数表示西经 */
+ longitude: number
+ /** 速度,单位 m/s */
+ speed: number
+ /** 垂直精度,单位 m(Android 无法获取,返回 0)
+ *
+ * 最低基础库: `1.2.0` */
+ verticalAccuracy: number
+ }
+ interface OnMemoryWarningCallbackResult {
+ /** 内存告警等级,只有 Android 才有,对应系统宏定义
+ *
+ * 可选值:
+ * - 5: TRIM_MEMORY_RUNNING_MODERATE;
+ * - 10: TRIM_MEMORY_RUNNING_LOW;
+ * - 15: TRIM_MEMORY_RUNNING_CRITICAL; */
+ level: 5 | 10 | 15
+ }
+ interface OnNetworkStatusChangeCallbackResult {
+ /** 当前是否有网络连接 */
+ isConnected: boolean
+ /** 网络类型
+ *
+ * 可选值:
+ * - 'wifi': wifi 网络;
+ * - '2g': 2g 网络;
+ * - '3g': 3g 网络;
+ * - '4g': 4g 网络;
+ * - 'unknown': Android 下不常见的网络类型;
+ * - 'none': 无网络; */
+ networkType: 'wifi' | '2g' | '3g' | '4g' | 'unknown' | 'none'
+ }
+ interface OnOpenCallbackResult {
+ /** 连接成功的 HTTP 响应 Header
+ *
+ * 最低基础库: `2.0.0` */
+ header: IAnyObject
+ /** 网络请求过程中一些调试信息
+ *
+ * 最低基础库: `2.10.4` */
+ profile: SocketProfile
+ }
+ interface OnPageNotFoundCallbackResult {
+ /** 是否本次启动的首个页面(例如从分享等入口进来,首个页面是开发者配置的分享页面) */
+ isEntryPage: boolean
+ /** 不存在页面的路径 (代码包路径) */
+ path: string
+ /** 打开不存在页面的 query 参数 */
+ query: IAnyObject
+ }
+ interface OnSocketOpenCallbackResult {
+ /** 连接成功的 HTTP 响应 Header
+ *
+ * 最低基础库: `2.0.0` */
+ header: IAnyObject
+ }
+ interface OnStopCallbackResult {
+ /** 录音总时长,单位:ms */
+ duration: number
+ /** 录音文件大小,单位:Byte */
+ fileSize: number
+ /** 录音文件的临时路径 (本地路径) */
+ tempFilePath: string
+ }
+ interface OnThemeChangeCallbackResult {
+ /** 系统当前的主题,取值为`light`或`dark`
+ *
+ * 可选值:
+ * - 'dark': 深色主题;
+ * - 'light': 浅色主题; */
+ theme: 'dark' | 'light'
+ }
+ interface OnUnhandledRejectionCallbackResult {
+ /** 被拒绝的 Promise 对象 */
+ promise: Promise
+ /** 拒绝原因,一般是一个 Error 对象 */
+ reason: string
+ }
+ interface OnVoIPChatInterruptedCallbackResult {
+ /** 错误码 */
+ errCode: number
+ /** 调用结果(错误原因) */
+ errMsg: string
+ }
+ interface OnVoIPChatMembersChangedCallbackResult {
+ /** 错误码 */
+ errCode: number
+ /** 调用结果 */
+ errMsg: string
+ /** 还在实时语音通话中的成员 openId 名单 */
+ openIdList: string[]
+ }
+ interface OnVoIPChatSpeakersChangedCallbackResult {
+ /** 错误码 */
+ errCode: number
+ /** 调用结果(错误原因) */
+ errMsg: string
+ /** 还在实时语音通话中的成员 openId 名单 */
+ openIdList: string[]
+ }
+ interface OnVoIPVideoMembersChangedCallbackResult {
+ /** 错误码 */
+ errCode: number
+ /** 调用结果 */
+ errMsg: string
+ /** 开启视频的成员名单 */
+ openIdList: string[]
+ }
+ interface OnWifiConnectedCallbackResult {
+ /** [WifiInfo](https://developers.weixin.qq.com/miniprogram/dev/api/device/wifi/WifiInfo.html)
+ *
+ * Wi-Fi 信息 */
+ wifi: WifiInfo
+ }
+ interface OnWindowResizeCallbackResult {
+ size: Size
+ }
+ interface OpenBluetoothAdapterOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: OpenBluetoothAdapterCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: OpenBluetoothAdapterFailCallback
+ /** 蓝牙模式,可作为主/从设备,仅 iOS 需要。
+ *
+ * 可选值:
+ * - 'central': 主机模式;
+ * - 'peripheral': 从机模式;
+ *
+ * 最低基础库: `2.10.0` */
+ 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 OpenDocumentOption {
+ /** 文件路径 (本地路径) ,可通过 downloadFile 获得 */
+ filePath: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: OpenDocumentCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: OpenDocumentFailCallback
+ /** 文件类型,指定文件类型打开文件
+ *
+ * 可选值:
+ * - 'doc': doc 格式;
+ * - 'docx': docx 格式;
+ * - 'xls': xls 格式;
+ * - 'xlsx': xlsx 格式;
+ * - 'ppt': ppt 格式;
+ * - 'pptx': pptx 格式;
+ * - 'pdf': pdf 格式;
+ *
+ * 最低基础库: `1.4.0` */
+ fileType?: 'doc' | 'docx' | 'xls' | 'xlsx' | 'ppt' | 'pptx' | 'pdf'
+ /** 是否显示右上角菜单
+ *
+ * 最低基础库: `2.11.0` */
+ showMenu?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: OpenDocumentSuccessCallback
+ }
+ 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 OpenSettingOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: OpenSettingCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: OpenSettingFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: OpenSettingSuccessCallback
+ /** 是否同时获取用户订阅消息的订阅状态,默认不获取。注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。
+ *
+ * 最低基础库: `2.10.3` */
+ 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)
+ *
+ * 用户订阅消息设置,接口参数`withSubscriptions`值为`true`时才会返回。
+ *
+ * 最低基础库: `2.10.3` */
+ subscriptionsSetting: SubscriptionsSetting
+ errMsg: string
+ }
+ 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
+ /** 滚动到页面的目标位置,单位 px */
+ scrollTop?: number
+ /** 选择器
+ *
+ * 最低基础库: `2.7.3` */
+ selector?: string
+ /** 接口调用成功的回调函数 */
+ success?: PageScrollToSuccessCallback
+ }
+ /** Canvas 2D API 的接口 Path2D 用来声明路径,此路径稍后会被CanvasRenderingContext2D 对象使用。CanvasRenderingContext2D 接口的 路径方法 也存在于 Path2D 这个接口中,允许你在 canvas 中根据需要创建可以保留并重用的路径。
+ *
+ * 最低基础库: `2.11.0` */
+ 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
+ }
+ /** PerformanceObserver 对象, 用于监听性能相关事件
+ *
+ * 最低基础库: `2.11.0` */
+ interface PerformanceObserver {
+ /** 获取当前支持的所有性能指标类型 */
+ supportedEntryTypes: any[]
+ }
+ 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 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` */
+ showmenu?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: PreviewImageSuccessCallback
+ }
+ interface PreviewMediaOption {
+ /** 需要预览的资源列表 */
+ sources: MediaSource[]
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: PreviewMediaCompleteCallback
+ /** 当前显示的资源序号 */
+ current?: number
+ /** 接口调用失败的回调函数 */
+ fail?: PreviewMediaFailCallback
+ /** 是否显示长按菜单
+ *
+ * 最低基础库: `2.13.0` */
+ showmenu?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: PreviewMediaSuccessCallback
+ }
+ 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 ReadFileFailCallbackResult {
+ /** 错误信息
+ *
+ * 可选值:
+ * - 'fail no such file or directory, open ${filePath}': 指定的 filePath 所在目录不存在;
+ * - 'fail permission denied, open ${dirPath}': 指定的 filePath 路径没有读权限;
+ * - 'fail sdcard not mounted': Android sdcard 挂载失败; */
+ 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
+ /** 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte
+ *
+ * 最低基础库: `2.10.0` */
+ length?: number
+ /** 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte
+ *
+ * 最低基础库: `2.10.0` */
+ position?: number
+ /** 接口调用成功的回调函数 */
+ success?: ReadFileSuccessCallback
+ }
+ interface ReadFileSuccessCallbackResult {
+ /** 文件内容 */
+ data: string | ArrayBuffer
+ 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 {
+ /** 指定录音的音频输入源,可通过 [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;
+ *
+ * 最低基础库: `2.1.0` */
+ 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 格式。 */
+ frameSize?: number
+ /** 录音通道数
+ *
+ * 可选值:
+ * - 1: 1 个通道;
+ * - 2: 2 个通道; */
+ numberOfChannels?: 1 | 2
+ /** 采样率
+ *
+ * 可选值:
+ * - 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 Rect {
+ /** 下边界坐标,单位:px */
+ bottom: number
+ /** 高度,单位:px */
+ height: number
+ /** 左边界坐标,单位:px */
+ left: number
+ /** 右边界坐标,单位:px */
+ right: number
+ /** 上边界坐标,单位:px */
+ top: number
+ /** 宽度,单位:px */
+ width: number
+ }
+ 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 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 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' | '其他'
+ /** 开启 cache
+ *
+ * 最低基础库: `2.10.4` */
+ enableCache?: boolean
+ /** 开启 http2
+ *
+ * 最低基础库: `2.10.4` */
+ enableHttp2?: boolean
+ /** 开启 quic
+ *
+ * 最低基础库: `2.10.4` */
+ enableQuic?: boolean
+ /** 接口调用失败的回调函数 */
+ fail?: RequestFailCallback
+ /** 设置请求的 header,header 中不能设置 Referer。
+ *
+ * `content-type` 默认为 `application/json` */
+ header?: IAnyObject
+ /** 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'
+ /** 响应的数据类型
+ *
+ * 可选值:
+ * - 'text': 响应的数据为文本;
+ * - 'arraybuffer': 响应的数据为 ArrayBuffer;
+ *
+ * 最低基础库: `1.7.0` */
+ responseType?: 'text' | 'arraybuffer'
+ /** 接口调用成功的回调函数 */
+ success?: RequestSuccessCallback
+ /** 超时时间,单位为毫秒
+ *
+ * 最低基础库: `2.10.0` */
+ timeout?: number
+ }
+ 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
+ }
+ /** 网络请求过程中一些调试信息
+ *
+ * 最低基础库: `2.10.4` */
+ 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
+ /** 评估的网络状态 slow 2g/2g/3g/4g */
+ estimate_nettype: string
+ /** 组件准备好使用 HTTP 请求抓取资源的时间,这发生在检查本地缓存之前 */
+ fetchStart: number
+ /** 协议层根据多个请求评估当前网络的 rtt(仅供参考) */
+ httpRttEstimate: number
+ /** 当前请求的IP */
+ peerIP: string
+ /** 当前请求的端口 */
+ port: number
+ /** 收到字节数 */
+ 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 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
+ > {
+ /** 开发者服务器返回的 cookies,格式为字符串数组
+ *
+ * 最低基础库: `2.10.0` */
+ cookies: string[]
+ /** 开发者服务器返回的数据 */
+ data: T
+ /** 开发者服务器返回的 HTTP Response Header
+ *
+ * 最低基础库: `1.2.0` */
+ header: IAnyObject
+ /** 网络请求过程中一些调试信息
+ *
+ * 最低基础库: `2.10.4` */
+ profile: RequestProfile
+ /** 开发者服务器返回的 HTTP 状态码 */
+ statusCode: number
+ errMsg: string
+ }
+ interface ResumeBGMOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ResumeBGMCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: ResumeBGMFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ResumeBGMSuccessCallback
+ }
+ interface ResumeOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ResumeCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: ResumeFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ResumeSuccessCallback
+ }
+ interface RewardedVideoAdOnCloseCallbackResult {
+ /** 视频是否是在用户完整观看的情况下被关闭的
+ *
+ * 最低基础库: `2.1.0` */
+ isEnded: boolean
+ }
+ interface RewardedVideoAdOnErrorCallbackResult {
+ /** 错误码
+ *
+ * 可选值:
+ * - 1000: 后端接口调用失败;
+ * - 1001: 参数错误;
+ * - 1002: 广告单元无效;
+ * - 1003: 内部错误;
+ * - 1004: 无合适的广告;
+ * - 1005: 广告组件审核中;
+ * - 1006: 广告组件被驳回;
+ * - 1007: 广告组件被封禁;
+ * - 1008: 广告单元已关闭;
+ *
+ * 最低基础库: `2.2.2` */
+ 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
+ /** 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。
+ *
+ * 最低基础库: `2.3.0` */
+ recursive?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: RmdirSuccessCallback
+ }
+ /** 在竖屏正方向下的安全区域
+ *
+ * 最低基础库: `2.7.0` */
+ 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
+ /** 扫码类型
+ *
+ * 可选值:
+ * - 'barCode': 一维码;
+ * - 'qrCode': 二维码;
+ * - 'datamatrix': Data Matrix 码;
+ * - 'pdf417': PDF417 条码;
+ *
+ * 最低基础库: `1.7.0` */
+ 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
+ }
+ /** 增强 ScrollView 实例
+ *
+ * 最低基础库: `2.14.4` */
+ 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 {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SendMessageCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SendMessageFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: SendMessageSuccessCallback
+ }
+ interface SendSocketMessageOption {
+ /** 需要发送的内容 */
+ data: string | ArrayBuffer
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SendSocketMessageCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SendSocketMessageFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: SendSocketMessageSuccessCallback
+ }
+ interface SetBGMVolumeOption {
+ /** 音量大小,范围是 0-1 */
+ volume: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SetBGMVolumeCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SetBGMVolumeFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: SetBGMVolumeSuccessCallback
+ }
+ interface SetBLEMTUOption {
+ /** 用于区分设备的 id */
+ deviceId: string
+ /** 最大传输单元(22,512) 区间内,单位 bytes */
+ mtu: number
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SetBLEMTUCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SetBLEMTUFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: SetBLEMTUSuccessCallback
+ }
+ 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 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 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 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 最亮 */
+ value: number
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SetScreenBrightnessCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SetScreenBrightnessFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: SetScreenBrightnessSuccessCallback
+ }
+ interface SetStorageOption {
+ /** 需要存储的内容。只支持原生类型、Date、及能够通过`JSON.stringify`序列化的对象。 */
+ data: T
+ /** 本地缓存中指定的 key */
+ key: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SetStorageCompleteCallback
+ /** 接口调用失败的回调函数 */
+ 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 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 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
+ /** 提示的内容,editable 为 true 时,会输入框默认文本 */
+ content?: string
+ /** 是否显示输入框
+ *
+ * 最低基础库: `2.15.0` */
+ editable?: boolean
+ /** 接口调用失败的回调函数 */
+ fail?: ShowModalFailCallback
+ /** 输入框提示文本
+ *
+ * 最低基础库: `2.15.0` */
+ placeholderText?: string
+ /** 是否显示取消按钮 */
+ showCancel?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: ShowModalSuccessCallback
+ /** 提示的标题 */
+ title?: string
+ }
+ interface ShowModalSuccessCallbackResult {
+ /** 为 true 时,表示用户点击了取消(用于 Android 系统区分点击蒙层关闭还是点击取消按钮关闭)
+ *
+ * 最低基础库: `1.1.0` */
+ 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
+ /** 本接口为 Beta 版本,暂只在 Android 平台支持。需要显示的转发按钮名称列表,默认['shareAppMessage']。按钮名称合法值包含 "shareAppMessage"、"shareTimeline" 两种
+ *
+ * 最低基础库: `2.11.3` */
+ 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'
+ /** 自定义图标的本地路径,image 的优先级高于 icon
+ *
+ * 最低基础库: `1.1.0` */
+ 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?: SocketTaskCloseCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SocketTaskCloseFailCallback
+ /** 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。 */
+ reason?: string
+ /** 接口调用成功的回调函数 */
+ success?: SocketTaskCloseSuccessCallback
+ }
+ interface SocketTaskOnCloseCallbackResult {
+ /** 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。 */
+ code: number
+ /** 一个可读的字符串,表示连接被关闭的原因。 */
+ reason: string
+ }
+ interface SocketTaskOnMessageCallbackResult {
+ /** 服务器返回的消息 */
+ data: string | ArrayBuffer
+ }
+ interface SocketTaskSendOption {
+ /** 需要发送的内容 */
+ data: string | ArrayBuffer
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: SendCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: SendFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: SendSuccessCallback
+ }
+ interface StartAccelerometerOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: StartAccelerometerCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: StartAccelerometerFailCallback
+ /** 监听加速度数据回调函数的执行频率
+ *
+ * 可选值:
+ * - 'game': 适用于更新游戏的回调频率,在 20ms/次 左右;
+ * - 'ui': 适用于更新 UI 的回调频率,在 60ms/次 左右;
+ * - 'normal': 普通的回调频率,在 200ms/次 左右;
+ *
+ * 最低基础库: `2.1.0` */
+ 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 {
+ /** iBeacon 设备广播的 uuid 列表 */
+ uuids: string[]
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: StartBeaconDiscoveryCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: StartBeaconDiscoveryFailCallback
+ /** 是否校验蓝牙开关,仅在 iOS 下有效 */
+ ignoreBluetoothAvailable?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: StartBeaconDiscoverySuccessCallback
+ }
+ interface StartBluetoothDevicesDiscoveryOption {
+ /** 是否允许重复上报同一设备。如果允许重复上报,则 [wx.onBlueToothDeviceFound](#) 方法会多次上报同一设备,但是 RSSI 值会有不同。 */
+ allowDuplicatesKey?: boolean
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: StartBluetoothDevicesDiscoveryCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: StartBluetoothDevicesDiscoveryFailCallback
+ /** 上报设备的间隔。0 表示找到新设备立即上报,其他数值根据传入的间隔上报。 */
+ interval?: number
+ /** 扫描模式,越高扫描越快,也越耗电, 仅安卓 7.0.12 及以上支持。
+ *
+ * 可选值:
+ * - 'low': 低;
+ * - 'medium': 中;
+ * - 'high': 高; */
+ powerLevel?: 'low' | 'medium' | 'high'
+ /** 要搜索的蓝牙设备主 service 的 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
+ }
+ interface StartLocationUpdateOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: StartLocationUpdateCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: StartLocationUpdateFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: StartLocationUpdateSuccessCallback
+ }
+ 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
+ /** 是否递归获取目录下的每个文件的 Stats 信息
+ *
+ * 最低基础库: `2.3.0` */
+ recursive?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: StatSuccessCallback
+ }
+ interface StatSuccessCallbackResult {
+ /** [Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)|Object
+ *
+ * 当 recursive 为 false 时,res.stats 是一个 Stats 对象。当 recursive 为 true 且 path 是一个目录的路径时,res.stats 是一个 Object,key 以 path 为根路径的相对路径,value 是该路径对应的 Stats 对象。 */
+ stats: Stats | IAnyObject
+ 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 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](/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
+ /** 允许微信使用相册的开关(仅 iOS 有效)
+ *
+ * 最低基础库: `2.6.0` */
+ albumAuthorized: boolean
+ /** 设备性能等级(仅 Android)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50)
+ *
+ * 最低基础库: `1.8.0` */
+ benchmarkLevel: number
+ /** 蓝牙的系统开关
+ *
+ * 最低基础库: `2.6.0` */
+ bluetoothEnabled: boolean
+ /** 设备品牌
+ *
+ * 最低基础库: `1.5.0` */
+ brand: string
+ /** 允许微信使用摄像头的开关
+ *
+ * 最低基础库: `2.6.0` */
+ cameraAuthorized: boolean
+ /** 设备方向
+ *
+ * 可选值:
+ * - 'portrait': 竖屏;
+ * - 'landscape': 横屏; */
+ deviceOrientation: 'portrait' | 'landscape'
+ /** 是否已打开调试。可通过右上角菜单或 [wx.setEnableDebug](https://developers.weixin.qq.com/miniprogram/dev/api/base/debug/wx.setEnableDebug.html) 打开调试。
+ *
+ * 最低基础库: `2.15.0` */
+ enableDebug: boolean
+ /** 用户字体大小(单位px)。以微信客户端「我-设置-通用-字体大小」中的设置为准
+ *
+ * 最低基础库: `1.5.0` */
+ fontSizeSetting: number
+ /** 微信设置的语言 */
+ 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
+ /** 允许微信通知带有提醒的开关(仅 iOS 有效)
+ *
+ * 最低基础库: `2.6.0` */
+ notificationAlertAuthorized: boolean
+ /** 允许微信通知的开关
+ *
+ * 最低基础库: `2.6.0` */
+ notificationAuthorized: boolean
+ /** 允许微信通知带有标记的开关(仅 iOS 有效)
+ *
+ * 最低基础库: `2.6.0` */
+ notificationBadgeAuthorized: boolean
+ /** 允许微信通知带有声音的开关(仅 iOS 有效)
+ *
+ * 最低基础库: `2.6.0` */
+ notificationSoundAuthorized: boolean
+ /** 设备像素比 */
+ pixelRatio: number
+ /** 客户端平台 */
+ platform: string
+ /** 在竖屏正方向下的安全区域
+ *
+ * 最低基础库: `2.7.0` */
+ safeArea: SafeArea
+ /** 屏幕高度,单位px
+ *
+ * 最低基础库: `1.1.0` */
+ screenHeight: number
+ /** 屏幕宽度,单位px
+ *
+ * 最低基础库: `1.1.0` */
+ screenWidth: number
+ /** 状态栏的高度,单位px
+ *
+ * 最低基础库: `1.9.0` */
+ statusBarHeight: number
+ /** 操作系统及版本 */
+ system: string
+ /** 微信版本号 */
+ version: string
+ /** Wi-Fi 的系统开关
+ *
+ * 最低基础库: `2.6.0` */
+ wifiEnabled: boolean
+ /** 可使用窗口高度,单位px */
+ windowHeight: number
+ /** 可使用窗口宽度,单位px */
+ windowWidth: number
+ /** 系统当前主题,取值为`light`或`dark`,全局配置`"darkmode":true`时才能获取,否则为 undefined (不支持小游戏)
+ *
+ * 可选值:
+ * - 'dark': 深色主题;
+ * - 'light': 浅色主题;
+ *
+ * 最低基础库: `2.11.0` */
+ theme?: 'dark' | 'light'
+ }
+ interface TakePhotoOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: TakePhotoCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: TakePhotoFailCallback
+ /** 成像质量
+ *
+ * 可选值:
+ * - 'high': 高质量;
+ * - 'normal': 普通质量;
+ * - 'low': 低质量; */
+ quality?: 'high' | 'normal' | 'low'
+ /** 接口调用成功的回调函数 */
+ 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 {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ToScreenLocationCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: ToScreenLocationFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ToScreenLocationSuccessCallback
+ }
+ interface ToScreenLocationSuccessCallbackResult {
+ /** x 坐标值 */
+ x: number
+ /** y 坐标值 */
+ y: number
+ errMsg: string
+ }
+ interface ToggleTorchOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: ToggleTorchCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: ToggleTorchFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: ToggleTorchSuccessCallback
+ }
+ 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 UDPSocketOnErrorCallbackResult {
+ /** 错误信息 */
+ errMsg: string
+ }
+ interface UDPSocketOnMessageCallbackResult {
+ /** 收到的消息 */
+ message: ArrayBuffer
+ /** 消息来源的结构化信息 */
+ remoteInfo: RemoteInfo
+ }
+ interface UDPSocketSendOption {
+ /** 要发消息的地址。在基础库 2.9.3 及之前版本可以是一个和本机同网段的 IP 地址,也可以是在安全域名列表内的域名地址;在基础库 2.9.4 及之后版本,可以是任意 IP 和域名 */
+ address: string
+ /** 要发送的数据 */
+ message: string | ArrayBuffer
+ /** 要发送消息的端口号 */
+ port: number
+ /** 发送数据的长度,仅当 message 为 ArrayBuffer 类型时有效 */
+ length?: number
+ /** 发送数据的偏移量,仅当 message 为 ArrayBuffer 类型时有效 */
+ offset?: number
+ }
+ 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 {
+ /** 动态消息的 activityId。通过 [updatableMessage.createActivityId](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.createActivityId.html) 接口获取
+ *
+ * 最低基础库: `2.4.0` */
+ activityId?: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: UpdateShareMenuCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: UpdateShareMenuFailCallback
+ /** 是否是私密消息。详见 [小程序私密消息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.html)
+ *
+ * 最低基础库: `2.13.0` */
+ isPrivateMessage?: boolean
+ /** 是否是动态消息,详见[动态消息](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/updatable-message.html)
+ *
+ * 最低基础库: `2.4.0` */
+ isUpdatableMessage?: boolean
+ /** 接口调用成功的回调函数 */
+ success?: UpdateShareMenuSuccessCallback
+ /** 动态消息的模板信息
+ *
+ * 最低基础库: `2.4.0` */
+ templateInfo?: UpdatableMessageFrontEndTemplateInfo
+ /** 群待办消息的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)
+ *
+ * 最低基础库: `2.11.0` */
+ 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 UploadTaskOnProgressUpdateCallbackResult {
+ /** 上传进度百分比 */
+ progress: number
+ /** 预期需要上传的数据总长度,单位 Bytes */
+ totalBytesExpectedToSend: number
+ /** 已经上传的数据长度,单位 Bytes */
+ totalBytesSent: number
+ }
+ /** 用户信息 */
+ interface UserInfo {
+ /** 用户头像图片的 URL。URL 最后一个数值代表正方形头像大小(有 0、46、64、96、132 数值可选,0 代表 640x640 的正方形头像,46 表示 46x46 的正方形头像,剩余数值以此类推。默认132),用户没有头像时该项为空。若用户更换头像,原有头像 URL 将失效。 */
+ avatarUrl: string
+ /** 用户所在城市 */
+ city: string
+ /** 用户所在国家 */
+ country: string
+ /** 用户性别
+ *
+ * 可选值:
+ * - 0: 未知;
+ * - 1: 男性;
+ * - 2: 女性; */
+ gender: 0 | 1 | 2
+ /** 显示 country,province,city 所用的语言
+ *
+ * 可选值:
+ * - 'en': 英文;
+ * - 'zh_CN': 简体中文;
+ * - 'zh_TW': 繁体中文; */
+ language: 'en' | 'zh_CN' | 'zh_TW'
+ /** 用户昵称 */
+ nickName: string
+ /** 用户所在省份 */
+ province: string
+ }
+ interface VibrateLongOption {
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: VibrateLongCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: VibrateLongFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: VibrateLongSuccessCallback
+ }
+ interface VibrateShortOption {
+ /** 震动强度类型,有效值为:heavy、medium、light
+ *
+ * 最低基础库: `2.13.0` */
+ type: string
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: VibrateShortCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: VibrateShortFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: VibrateShortSuccessCallback
+ }
+ interface VideoContextRequestFullScreenOption {
+ /** 设置全屏时视频的方向,不指定则根据宽高比自动判断。
+ *
+ * 可选值:
+ * - 0: 正常竖向;
+ * - 90: 屏幕逆时针90度;
+ * - -90: 屏幕顺时针90度;
+ *
+ * 最低基础库: `1.7.0` */
+ direction?: 0 | 90 | -90
+ }
+ interface VideoDecoderStartOption {
+ /** 需要解码的视频源文件。基础库 2.13.0 以下的版本只支持本地路径。 2.13.0 开始支持 http:// 和 https:// 协议的远程路径。 */
+ source: string
+ /** 解码模式。0:按 pts 解码;1:以最快速度解码 */
+ mode?: number
+ }
+ /** 提供预设的 Wi-Fi 信息列表 */
+ interface WifiData {
+ /** Wi-Fi 的 BSSID */
+ BSSID?: string
+ /** Wi-Fi 的 SSID */
+ SSID?: string
+ /** Wi-Fi 设备密码 */
+ password?: string
+ }
+ /** Wifi 信息 */
+ interface WifiInfo {
+ /** Wi-Fi 的 BSSID */
+ BSSID: string
+ /** Wi-Fi 的 SSID */
+ SSID: string
+ /** Wi-Fi 频段单位 MHz
+ *
+ * 最低基础库: `2.12.0` */
+ frequency: number
+ /** Wi-Fi 是否安全 */
+ secure: boolean
+ /** Wi-Fi 信号强度 */
+ signalStrength: number
+ }
+ interface WorkerOnMessageCallbackResult {
+ /** 主线程/Worker 线程向当前线程发送的消息 */
+ message: IAnyObject
+ }
+ interface WriteBLECharacteristicValueOption {
+ /** 蓝牙特征值的 uuid */
+ characteristicId: string
+ /** 蓝牙设备 id */
+ deviceId: string
+ /** 蓝牙特征值对应服务的 uuid */
+ serviceId: string
+ /** 蓝牙设备特征值对应的二进制值 */
+ value: ArrayBuffer
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: WriteBLECharacteristicValueCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: WriteBLECharacteristicValueFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: WriteBLECharacteristicValueSuccessCallback
+ }
+ interface WriteCharacteristicValueObject {
+ /** characteristic对应的uuid */
+ characteristicId: string
+ /** 是否需要通知主机value已更新 */
+ needNotify: boolean
+ /** service 的 uuid */
+ serviceId: string
+ /** 特征值对应的二进制值 */
+ value: ArrayBuffer
+ /** 可选,处理回包时使用 */
+ callbackId?: number
+ /** 接口调用结束的回调函数(调用成功、失败都会执行) */
+ complete?: WriteCharacteristicValueCompleteCallback
+ /** 接口调用失败的回调函数 */
+ fail?: WriteCharacteristicValueFailCallback
+ /** 接口调用成功的回调函数 */
+ success?: WriteCharacteristicValueSuccessCallback
+ }
+ 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 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 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 AudioContext {
+ /** [AudioContext.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.pause.html)
+ *
+ * 暂停音频。 */
+ pause(): void
+ /** [AudioContext.play()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.play.html)
+ *
+ * 播放音频。 */
+ play(): void
+ /** [AudioContext.seek(number position)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.seek.html)
+ *
+ * 跳转到指定位置。 */
+ seek(
+ /** 跳转位置,单位 s */
+ position: number
+ ): void
+ /** [AudioContext.setSrc(string src)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/AudioContext.setSrc.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 callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicReadRequest.html)
+ *
+ * 取消监听已连接的设备请求读当前外围设备的特征值事件
+ *
+ * 最低基础库: `2.10.3` */
+ offCharacteristicReadRequest(
+ /** 已连接的设备请求读当前外围设备的特征值事件的回调函数 */
+ callback?: OffCharacteristicReadRequestCallback
+ ): void
+ /** [BLEPeripheralServer.offCharacteristicSubscribed(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicSubscribed.html)
+ *
+ * 取消监听特征值订阅事件
+ *
+ * 最低基础库: `2.13.0` */
+ offCharacteristicSubscribed(
+ /** 特征值订阅事件的回调函数 */
+ callback?: OffCharacteristicSubscribedCallback
+ ): void
+ /** [BLEPeripheralServer.offCharacteristicUnsubscribed(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicUnsubscribed.html)
+ *
+ * 取消监听取消特征值订阅事件
+ *
+ * 最低基础库: `2.13.0` */
+ offCharacteristicUnsubscribed(
+ /** 取消特征值订阅事件的回调函数 */
+ callback?: OffCharacteristicUnsubscribedCallback
+ ): void
+ /** [BLEPeripheralServer.offCharacteristicWriteRequest(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.offCharacteristicWriteRequest.html)
+ *
+ * 取消监听已连接的设备请求写当前外围设备的特征值事件
+ *
+ * 最低基础库: `2.10.3` */
+ offCharacteristicWriteRequest(
+ /** 已连接的设备请求写当前外围设备的特征值事件的回调函数 */
+ callback?: OffCharacteristicWriteRequestCallback
+ ): void
+ /** [BLEPeripheralServer.onCharacteristicReadRequest(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicReadRequest.html)
+ *
+ * 监听已连接的设备请求读当前外围设备的特征值事件。收到该消息后需要立刻调用 `writeCharacteristicValue` 写回数据,否则主机不会收到响应。
+ *
+ * 最低基础库: `2.10.3` */
+ onCharacteristicReadRequest(
+ /** 已连接的设备请求读当前外围设备的特征值事件的回调函数 */
+ callback: OnCharacteristicReadRequestCallback
+ ): void
+ /** [BLEPeripheralServer.onCharacteristicSubscribed(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicSubscribed.html)
+ *
+ * 监听特征值订阅事件,仅 iOS 支持。
+ *
+ * 最低基础库: `2.13.0` */
+ onCharacteristicSubscribed(
+ /** 特征值订阅事件的回调函数 */
+ callback: OnCharacteristicSubscribedCallback
+ ): void
+ /** [BLEPeripheralServer.onCharacteristicUnsubscribed(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicUnsubscribed.html)
+ *
+ * 监听取消特征值订阅事件,仅 iOS 支持。
+ *
+ * 最低基础库: `2.13.0` */
+ onCharacteristicUnsubscribed(
+ /** 取消特征值订阅事件的回调函数 */
+ callback: OnCharacteristicUnsubscribedCallback
+ ): void
+ /** [BLEPeripheralServer.onCharacteristicWriteRequest(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-peripheral/BLEPeripheralServer.onCharacteristicWriteRequest.html)
+ *
+ * 监听已连接的设备请求写当前外围设备的特征值事件。收到该消息后需要立刻调用 `writeCharacteristicValue` 写回数据,否则主机不会收到响应。
+ *
+ * 最低基础库: `2.10.3` */
+ onCharacteristicWriteRequest(
+ /** 已连接的设备请求写当前外围设备的特征值事件的回调函数 */
+ callback: 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` */
+ 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 callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onCanplay.html)
+ *
+ * 监听背景音频进入可播放状态事件。 但不保证后面可以流畅播放 */
+ onCanplay(
+ /** 背景音频进入可播放状态事件的回调函数 */
+ callback: OnCanplayCallback
+ ): void
+ /** [BackgroundAudioManager.onEnded(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onEnded.html)
+ *
+ * 监听背景音频自然播放结束事件 */
+ onEnded(
+ /** 背景音频自然播放结束事件的回调函数 */
+ callback: OnEndedCallback
+ ): void
+ /** [BackgroundAudioManager.onError(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onError.html)
+ *
+ * 监听背景音频播放错误事件 */
+ onError(
+ /** 背景音频播放错误事件的回调函数 */
+ callback: BackgroundAudioManagerOnErrorCallback
+ ): void
+ /** [BackgroundAudioManager.onNext(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onNext.html)
+ *
+ * 监听用户在系统音乐播放面板点击下一曲事件(仅iOS) */
+ onNext(
+ /** 用户在系统音乐播放面板点击下一曲事件的回调函数 */
+ callback: OnNextCallback
+ ): void
+ /** [BackgroundAudioManager.onPause(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPause.html)
+ *
+ * 监听背景音频暂停事件 */
+ onPause(
+ /** 背景音频暂停事件的回调函数 */
+ callback: OnPauseCallback
+ ): void
+ /** [BackgroundAudioManager.onPlay(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPlay.html)
+ *
+ * 监听背景音频播放事件 */
+ onPlay(
+ /** 背景音频播放事件的回调函数 */
+ callback: OnPlayCallback
+ ): void
+ /** [BackgroundAudioManager.onPrev(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onPrev.html)
+ *
+ * 监听用户在系统音乐播放面板点击上一曲事件(仅iOS) */
+ onPrev(
+ /** 用户在系统音乐播放面板点击上一曲事件的回调函数 */
+ callback: OnPrevCallback
+ ): void
+ /** [BackgroundAudioManager.onSeeked(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onSeeked.html)
+ *
+ * 监听背景音频完成跳转操作事件 */
+ onSeeked(
+ /** 背景音频完成跳转操作事件的回调函数 */
+ callback: OnSeekedCallback
+ ): void
+ /** [BackgroundAudioManager.onSeeking(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onSeeking.html)
+ *
+ * 监听背景音频开始跳转操作事件 */
+ onSeeking(
+ /** 背景音频开始跳转操作事件的回调函数 */
+ callback: OnSeekingCallback
+ ): void
+ /** [BackgroundAudioManager.onStop(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onStop.html)
+ *
+ * 监听背景音频停止事件 */
+ onStop(
+ /** 背景音频停止事件的回调函数 */
+ callback: InnerAudioContextOnStopCallback
+ ): void
+ /** [BackgroundAudioManager.onTimeUpdate(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onTimeUpdate.html)
+ *
+ * 监听背景音频播放进度更新事件,只有小程序在前台时会回调。 */
+ onTimeUpdate(
+ /** 背景音频播放进度更新事件的回调函数 */
+ callback: OnTimeUpdateCallback
+ ): void
+ /** [BackgroundAudioManager.onWaiting(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManager.onWaiting.html)
+ *
+ * 监听音频加载中事件。当音频因为数据不足,需要停下来加载时会触发 */
+ onWaiting(
+ /** 音频加载中事件的回调函数 */
+ callback: 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 BluetoothError {
+ /** 错误信息
+ *
+ * | 错误码 | 错误信息 | 说明 |
+ * | - | - | - |
+ * | 0 | ok | 正常 |
+ * | -1 | already connet | 已连接 |
+ * | 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 connet | 已连接 |
+ * | 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 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)
+*
+* 获取 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()
+```
+*
+* 最低基础库: `2.7.0` */
+ 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)
+ *
+ * 取消由 requestAnimationFrame 添加到计划中的动画帧请求。支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。
+ *
+ * 最低基础库: `2.7.0` */
+ 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)
+ *
+ * 创建一个 ImageData 对象。仅支持在 2D Canvas 中使用。
+ *
+ * 最低基础库: `2.9.0` */
+ 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)
+ *
+ * 创建一个图片对象。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。
+ *
+ * 最低基础库: `2.7.0` */
+ 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)
+ *
+ * 创建 Path2D 对象
+ *
+ * 最低基础库: `2.11.0` */
+ 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)
+ *
+ * 该方法返回 Canvas 的绘图上下文
+ *
+ * ****
+ *
+ * 支持获取 2D 和 WebGL 绘图上下文
+ *
+ * 最低基础库: `2.7.0` */
+ getContext(contextType: string): any
+ /** [number Canvas.requestAnimationFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.requestAnimationFrame.html)
+ *
+ * 在下次进行重绘时执行。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。
+ *
+ * 最低基础库: `2.7.0` */
+ 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)
+ *
+ * 返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。
+ *
+ * 最低基础库: `2.11.0` */
+ 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)
+*
+* 创建一条弧线。
+*
+* - 创建一个圆可以指定起始弧度为 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()
+```
+*
+* 
+*
+* 针对 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` */
+ 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)
+*
+* 开始创建一个路径。需要调用 `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()
+```
+*
+*  */
+ 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)
+*
+* 创建三次方贝塞尔曲线路径。曲线的起始点为路径中前一个点。
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+*
+* 
+*
+* 针对 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)
+*
+* 清除画布上在该矩形区域内的内容
+*
+* **示例代码**
+*
+*
+* 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()
+```
+*  */
+ clearRect(
+ /** 矩形路径左上角的横坐标 */
+ x: number,
+ /** 矩形路径左上角的纵坐标 */
+ y: number,
+ /** 矩形路径的宽度 */
+ width: number,
+ /** 矩形路径的高度 */
+ height: number
+ ): void
+ /** [CanvasContext.clip()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.clip.html)
+*
+* 从原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。可以在使用 `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()
+ }
+})
+```
+* 
+*
+* 最低基础库: `1.6.0` */
+ clip(): void
+ /** [CanvasContext.closePath()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.closePath.html)
+*
+* 关闭一个路径。会连接起点和终点。如果关闭路径后没有调用 `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()
+```
+* 
+*
+* ```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()
+```
+*
+*  */
+ closePath(): void
+ /** [CanvasContext.createPattern(string image, string repetition)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.createPattern.html)
+ *
+ * 对指定的图像创建模式的方法,可在指定的方向上重复元图像
+ *
+ * 最低基础库: `1.9.90` */
+ 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)
+*
+* 将之前在绘图上下文中的描述(路径、变形、样式)画到 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)
+```
+* 
+*
+* **示例代码**
+*
+*
+* 第二次 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()
+```
+*  */
+ 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)
+*
+* 绘制图像到画布
+*
+* **示例代码**
+*
+*
+*
+* 有三个版本的写法:
+*
+* - 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()
+ }
+})
+
+```
+*  */
+ 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)
+*
+* 绘制图像到画布
+*
+* **示例代码**
+*
+*
+*
+* 有三个版本的写法:
+*
+* - 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()
+ }
+})
+
+```
+*  */
+ 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)
+*
+* 绘制图像到画布
+*
+* **示例代码**
+*
+*
+*
+* 有三个版本的写法:
+*
+* - 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()
+ }
+})
+
+```
+*  */
+ 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)
+*
+* 对当前路径中的内容进行填充。默认的填充色为黑色。
+*
+* **示例代码**
+*
+*
+*
+* 如果当前路径没有闭合,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() 包含进去。
+*
+* 
+*
+* ```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()
+```
+*
+*  */
+ fill(): void
+ /** [CanvasContext.fillRect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.fillRect.html)
+*
+* 填充一个矩形。用 [`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()
+```
+*  */
+ 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)
+*
+* 在画布上绘制被填充的文本
+*
+* **示例代码**
+*
+*
+* ```javascript
+const ctx = wx.createCanvasContext('myCanvas')
+
+ctx.setFontSize(20)
+ctx.fillText('Hello', 20, 20)
+ctx.fillText('MINA', 100, 100)
+
+ctx.draw()
+```
+*  */
+ 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)
+*
+* 增加一个新点,然后创建一条从上次指定点到目标点的线。用 `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()
+```
+*  */
+ 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)
+*
+* 把路径移动到画布中的指定点,不创建线条。用 `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()
+```
+*  */
+ 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)
+*
+* 创建二次贝塞尔曲线路径。曲线的起始点为路径中前一个点。
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+*
+* 
+*
+* 针对 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)
+*
+* 创建一个矩形路径。需要用 [`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()
+```
+*  */
+ rect(
+ /** 矩形路径左上角的横坐标 */
+ x: number,
+ /** 矩形路径左上角的纵坐标 */
+ y: number,
+ /** 矩形路径的宽度 */
+ width: number,
+ /** 矩形路径的高度 */
+ height: number
+ ): void
+ /** [CanvasContext.restore()](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.restore.html)
+*
+* 恢复之前保存的绘图上下文。
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+*  */
+ restore(): void
+ /** [CanvasContext.rotate(number rotate)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.rotate.html)
+*
+* 以原点为中心顺时针旋转当前坐标轴。多次调用旋转的角度会叠加。原点可以用 `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()
+```
+*  */
+ 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)
+*
+* 保存绘图上下文。
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+*  */
+ save(): void
+ /** [CanvasContext.scale(number scaleWidth, number scaleHeight)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.scale.html)
+*
+* 在调用后,之后创建的路径其横纵坐标会被缩放。多次调用倍数会相乘。
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+*  */
+ 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)
+*
+* 设置填充色。
+*
+* **代码示例**
+*
+*
+* ```js
+const ctx = wx.createCanvasContext('myCanvas')
+ctx.setFillStyle('red')
+ctx.fillRect(10, 10, 150, 75)
+ctx.draw()
+```
+* 
+* @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) 替换
+* */
+ setFillStyle(
+ /** 填充的颜色,默认颜色为 black。 */
+ color: string | CanvasGradient
+ ): void
+ /** [CanvasContext.setFontSize(number fontSize)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setFontSize.html)
+*
+* 设置字体的字号
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+* 
+* @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) 替换
+* */
+ setFontSize(
+ /** 字体的字号 */
+ fontSize: number
+ ): void
+ /** [CanvasContext.setGlobalAlpha(number alpha)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setGlobalAlpha.html)
+*
+* 设置全局画笔透明度。
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+* 
+* @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) 替换
+* */
+ setGlobalAlpha(
+ /** 透明度。范围 0-1,0 表示完全透明,1 表示完全不透明。 */
+ alpha: number
+ ): void
+ /** [CanvasContext.setLineCap(string lineCap)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineCap.html)
+*
+* 设置线条的端点样式
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+* 
+* @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) 替换
+* */
+ 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)
+*
+* 设置虚线样式。
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+* 
+*
+* 最低基础库: `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) 替换
+* */
+ setLineDash(
+ /** 一组描述交替绘制线段和间距(坐标空间单位)长度的数字 */
+ pattern: number[],
+ /** 虚线偏移量 */
+ offset: number
+ ): void
+ /** [CanvasContext.setLineJoin(string lineJoin)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setLineJoin.html)
+*
+* 设置线条的交点样式
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+* 
+* @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) 替换
+* */
+ 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)
+*
+* 设置线条的宽度
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+*
+* 
+* @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) 替换
+* */
+ setLineWidth(
+ /** 线条的宽度,单位px */
+ lineWidth: number
+ ): void
+ /** [CanvasContext.setMiterLimit(number miterLimit)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setMiterLimit.html)
+*
+* 设置最大斜接长度。斜接长度指的是在两条线交汇处内角和外角之间的距离。当 [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()
+```
+* 
+* @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) 替换
+* */
+ 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)
+*
+* 设定阴影样式。
+*
+* **示例代码**
+*
+*
+* ```javascript
+const ctx = wx.createCanvasContext('myCanvas')
+ctx.setFillStyle('red')
+ctx.setShadow(10, 50, 50, 'blue')
+ctx.fillRect(10, 10, 150, 75)
+ctx.draw()
+```
+* 
+* @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) 替换
+* */
+ 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)
+*
+* 设置描边颜色。
+*
+* **代码示例**
+*
+*
+* ```js
+const ctx = wx.createCanvasContext('myCanvas')
+ctx.setStrokeStyle('red')
+ctx.strokeRect(10, 10, 150, 75)
+ctx.draw()
+```
+* 
+* @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) 替换
+* */
+ setStrokeStyle(
+ /** 描边的颜色,默认颜色为 black。 */
+ color: string | CanvasGradient
+ ): void
+ /** [CanvasContext.setTextAlign(string align)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.setTextAlign.html)
+*
+* 设置文字的对齐
+*
+* **示例代码**
+*
+*
+*
+* ```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()
+```
+*
+* 
+*
+* 最低基础库: `1.1.0` */
+ 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)
+*
+* 设置文字的竖直对齐
+*
+* **示例代码**
+*
+*
+* ```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()
+```
+* 
+*
+* 最低基础库: `1.4.0` */
+ 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` */
+ 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)
+*
+* 画出当前路径的边框。默认颜色色为黑色。
+*
+* **示例代码**
+*
+*
+* ```javascript
+const ctx = wx.createCanvasContext('myCanvas')
+ctx.moveTo(10, 10)
+ctx.lineTo(100, 10)
+ctx.lineTo(100, 100)
+ctx.stroke()
+ctx.draw()
+```
+* 
+*
+* 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()
+```
+*
+*  */
+ stroke(): void
+ /** [CanvasContext.strokeRect(number x, number y, number width, number height)](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/CanvasContext.strokeRect.html)
+*
+* 画一个矩形(非填充)。 用 [`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()
+```
+*  */
+ 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)
+ *
+ * 给定的 (x, y) 位置绘制文本描边的方法
+ *
+ * 最低基础库: `1.9.90` */
+ 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` */
+ 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)
+*
+* 对当前坐标系的原点 (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()
+```
+*
+*  */
+ 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` */
+ 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)
+*
+* 创建一个圆形的渐变颜色。起点在圆心,终点在圆环。返回的`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()
+```
+*  */
+ 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)
+*
+* 创建一个线性的渐变颜色。返回的`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()
+```
+*  */
+ 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)
+*
+* 添加颜色的渐变点。小于最小 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()
+```
+*  */
+ addColorStop(
+ /** 表示渐变中开始与结束之间的位置,范围 0-1。 */
+ stop: number,
+ /** 渐变点的颜色。 */
+ color: string
+ ): void
+ }
+ 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 callback)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.offHeadersReceived.html)
+ *
+ * 取消监听 HTTP Response Header 事件
+ *
+ * 最低基础库: `2.1.0` */
+ offHeadersReceived(
+ /** HTTP Response Header 事件的回调函数 */
+ callback?: OffHeadersReceivedCallback
+ ): void
+ /** [DownloadTask.offProgressUpdate(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.offProgressUpdate.html)
+ *
+ * 取消监听下载进度变化事件
+ *
+ * 最低基础库: `2.1.0` */
+ offProgressUpdate(
+ /** 下载进度变化事件的回调函数 */
+ callback?: DownloadTaskOffProgressUpdateCallback
+ ): void
+ /** [DownloadTask.onHeadersReceived(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.onHeadersReceived.html)
+ *
+ * 监听 HTTP Response Header 事件。会比请求完成事件更早
+ *
+ * 最低基础库: `2.1.0` */
+ onHeadersReceived(
+ /** HTTP Response Header 事件的回调函数 */
+ callback: OnHeadersReceivedCallback
+ ): void
+ /** [DownloadTask.onProgressUpdate(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/DownloadTask.onProgressUpdate.html)
+ *
+ * 监听下载进度变化事件
+ *
+ * 最低基础库: `1.4.0` */
+ onProgressUpdate(
+ /** 下载进度变化事件的回调函数 */
+ callback: 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)
+ *
+ * 修改样式
+ *
+ * ****
+ *
+ * ## 支持设置的样式列表
+ * | 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 中规定的允许值。
+ *
+ * 最低基础库: `2.7.0` */
+ 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)
+*
+* 插入图片。
+*
+* 地址为临时文件时,获取的编辑器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
+})
+```
+*
+* 最低基础库: `2.7.0` */
+ 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)
+ *
+ * 初始化编辑器内容,html和delta同时存在时仅delta生效
+ *
+ * 最低基础库: `2.7.0` */
+ 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 EntryList.getEntries()](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/performance/EntryList.getEntries.html)
+ *
+ * 该方法返回当前列表中的所有性能数据
+ *
+ * 最低基础库: `2.11.0` */
+ getEntries(): any[]
+ /** [Array EntryList.getEntriesByName(string name, string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/performance/EntryList.getEntriesByName.html)
+ *
+ * 获取当前列表中所有名称为 [name] 且类型为 [entryType] 的性能数据
+ *
+ * 最低基础库: `2.11.0` */
+ getEntriesByName(name: string, entryType?: string): any[]
+ /** [Array EntryList.getEntriesByType(string entryType)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/performance/EntryList.getEntriesByType.html)
+ *
+ * 获取当前列表中所有类型为 [entryType] 的性能数据
+ *
+ * 最低基础库: `2.11.0` */
+ getEntriesByType(entryType: string): any[]
+ }
+ 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)
+ *
+ * [FileSystemManager.readdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readdir.html) 的同步版本 */
+ readdirSync(
+ /** 要读取的目录路径 (本地路径) */
+ dirPath: string
+ ): string[]
+ /** [FileSystemManager.access(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.access.html)
+ *
+ * 判断文件/目录是否存在 */
+ access(option: AccessOption): void
+ /** [FileSystemManager.accessSync(string path)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.accessSync.html)
+ *
+ * [FileSystemManager.access](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.access.html) 的同步版本 */
+ accessSync(
+ /** 要判断是否存在的文件/目录路径 (本地路径) */
+ path: string
+ ): void
+ /** [FileSystemManager.appendFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFile.html)
+ *
+ * 在文件结尾追加内容
+ *
+ * 最低基础库: `2.1.0` */
+ 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)
+ *
+ * [FileSystemManager.appendFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFile.html) 的同步版本
+ *
+ * 最低基础库: `2.1.0` */
+ 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.copyFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFile.html)
+ *
+ * 复制文件 */
+ copyFile(option: CopyFileOption): void
+ /** [FileSystemManager.copyFileSync(string srcPath, string destPath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFileSync.html)
+ *
+ * [FileSystemManager.copyFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.copyFile.html) 的同步版本 */
+ copyFileSync(
+ /** 源文件路径,支持本地路径 */
+ srcPath: string,
+ /** 目标文件路径,支持本地路径 */
+ destPath: string
+ ): 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)
+ *
+ * 创建目录 */
+ mkdir(option: MkdirOption): void
+ /** [FileSystemManager.mkdirSync(string dirPath, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.mkdirSync.html)
+ *
+ * [FileSystemManager.mkdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.mkdir.html) 的同步版本 */
+ mkdirSync(
+ /** 创建的目录路径 (本地路径) */
+ dirPath: string,
+ /** 是否在递归创建该目录的上级目录后再创建该目录。如果对应的上级目录已经存在,则不创建该上级目录。如 dirPath 为 a/b/c/d 且 recursive 为 true,将创建 a 目录,再在 a 目录下创建 b 目录,以此类推直至创建 a/b/c 目录下的 d 目录。
+ *
+ * 最低基础库: `2.3.0` */
+ recursive?: boolean
+ ): void
+ /** [FileSystemManager.readFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html)
+ *
+ * 读取本地文件内容 */
+ readFile(option: ReadFileOption): void
+ /** [FileSystemManager.readdir(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readdir.html)
+ *
+ * 读取目录内文件列表 */
+ 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)
+ *
+ * 重命名文件。可以把文件从 oldPath 移动到 newPath */
+ rename(option: RenameOption): void
+ /** [FileSystemManager.renameSync(string oldPath, string newPath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.renameSync.html)
+ *
+ * [FileSystemManager.rename](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rename.html) 的同步版本 */
+ renameSync(
+ /** 源文件路径,支持本地路径 */
+ oldPath: string,
+ /** 新文件路径,支持本地路径 */
+ newPath: string
+ ): void
+ /** [FileSystemManager.rmdir(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdir.html)
+ *
+ * 删除目录 */
+ rmdir(option: RmdirOption): void
+ /** [FileSystemManager.rmdirSync(string dirPath, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdirSync.html)
+ *
+ * [FileSystemManager.rmdir](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.rmdir.html) 的同步版本 */
+ rmdirSync(
+ /** 要删除的目录路径 (本地路径) */
+ dirPath: string,
+ /** 是否递归删除目录。如果为 true,则删除该目录和该目录下的所有子目录以及文件。
+ *
+ * 最低基础库: `2.3.0` */
+ 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)
+ *
+ * 获取文件 Stats 对象 */
+ stat(option: StatOption): void
+ /** [FileSystemManager.unlink(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlink.html)
+ *
+ * 删除文件 */
+ unlink(option: UnlinkOption): void
+ /** [FileSystemManager.unlinkSync(string filePath)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlinkSync.html)
+ *
+ * [FileSystemManager.unlink](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unlink.html) 的同步版本 */
+ unlinkSync(
+ /** 要删除的文件路径 (本地路径) */
+ filePath: string
+ ): void
+ /** [FileSystemManager.unzip(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.unzip.html)
+ *
+ * 解压文件 */
+ unzip(option: UnzipOption): void
+ /** [FileSystemManager.writeFile(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeFile.html)
+ *
+ * 写文件 */
+ 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)
+ *
+ * [FileSystemManager.writeFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.writeFile.html) 的同步版本 */
+ 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
+ /** [[Stats](https://developers.weixin.qq.com/miniprogram/dev/api/file/Stats.html)|Object FileSystemManager.statSync(string path, boolean recursive)](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.statSync.html)
+ *
+ * [FileSystemManager.stat](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.stat.html) 的同步版本 */
+ statSync(
+ /** 文件/目录路径 (本地路径) */
+ path: string,
+ /** 是否递归获取目录下的每个文件的 Stats 信息
+ *
+ * 最低基础库: `2.3.0` */
+ recursive?: boolean
+ ): Stats | IAnyObject
+ /** [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)
+ *
+ * [FileSystemManager.readFile](https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html) 的同步版本 */
+ 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',
+ /** 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte
+ *
+ * 最低基础库: `2.10.0` */
+ position?: number,
+ /** 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte
+ *
+ * 最低基础库: `2.10.0` */
+ length?: number
+ ): string | ArrayBuffer
+ }
+ interface GeneralCallbackResult {
+ errMsg: string
+ }
+ interface IBeaconError {
+ /** 错误信息
+ *
+ * | 错误码 | 错误信息 | 说明 |
+ * | - | - | - |
+ * | 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 InnerAudioContext {
+ /** [InnerAudioContext.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.destroy.html)
+ *
+ * 销毁当前实例 */
+ destroy(): void
+ /** [InnerAudioContext.offCanplay(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offCanplay.html)
+ *
+ * 取消监听音频进入可以播放状态的事件
+ *
+ * 最低基础库: `1.9.0` */
+ offCanplay(
+ /** 音频进入可以播放状态的事件的回调函数 */
+ callback?: OffCanplayCallback
+ ): void
+ /** [InnerAudioContext.offEnded(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offEnded.html)
+ *
+ * 取消监听音频自然播放至结束的事件
+ *
+ * 最低基础库: `1.9.0` */
+ offEnded(
+ /** 音频自然播放至结束的事件的回调函数 */
+ callback?: OffEndedCallback
+ ): void
+ /** [InnerAudioContext.offError(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offError.html)
+ *
+ * 取消监听音频播放错误事件
+ *
+ * 最低基础库: `1.9.0` */
+ offError(
+ /** 音频播放错误事件的回调函数 */
+ callback?: InnerAudioContextOffErrorCallback
+ ): void
+ /** [InnerAudioContext.offPause(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offPause.html)
+ *
+ * 取消监听音频暂停事件
+ *
+ * 最低基础库: `1.9.0` */
+ offPause(
+ /** 音频暂停事件的回调函数 */
+ callback?: OffPauseCallback
+ ): void
+ /** [InnerAudioContext.offPlay(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offPlay.html)
+ *
+ * 取消监听音频播放事件
+ *
+ * 最低基础库: `1.9.0` */
+ offPlay(
+ /** 音频播放事件的回调函数 */
+ callback?: OffPlayCallback
+ ): void
+ /** [InnerAudioContext.offSeeked(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offSeeked.html)
+ *
+ * 取消监听音频完成跳转操作的事件
+ *
+ * 最低基础库: `1.9.0` */
+ offSeeked(
+ /** 音频完成跳转操作的事件的回调函数 */
+ callback?: OffSeekedCallback
+ ): void
+ /** [InnerAudioContext.offSeeking(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offSeeking.html)
+ *
+ * 取消监听音频进行跳转操作的事件
+ *
+ * 最低基础库: `1.9.0` */
+ offSeeking(
+ /** 音频进行跳转操作的事件的回调函数 */
+ callback?: OffSeekingCallback
+ ): void
+ /** [InnerAudioContext.offStop(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offStop.html)
+ *
+ * 取消监听音频停止事件
+ *
+ * 最低基础库: `1.9.0` */
+ offStop(
+ /** 音频停止事件的回调函数 */
+ callback?: OffStopCallback
+ ): void
+ /** [InnerAudioContext.offTimeUpdate(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offTimeUpdate.html)
+ *
+ * 取消监听音频播放进度更新事件
+ *
+ * 最低基础库: `1.9.0` */
+ offTimeUpdate(
+ /** 音频播放进度更新事件的回调函数 */
+ callback?: OffTimeUpdateCallback
+ ): void
+ /** [InnerAudioContext.offWaiting(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.offWaiting.html)
+ *
+ * 取消监听音频加载中事件
+ *
+ * 最低基础库: `1.9.0` */
+ offWaiting(
+ /** 音频加载中事件的回调函数 */
+ callback?: OffWaitingCallback
+ ): void
+ /** [InnerAudioContext.onCanplay(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onCanplay.html)
+ *
+ * 监听音频进入可以播放状态的事件。但不保证后面可以流畅播放 */
+ onCanplay(
+ /** 音频进入可以播放状态的事件的回调函数 */
+ callback: OnCanplayCallback
+ ): void
+ /** [InnerAudioContext.onEnded(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onEnded.html)
+ *
+ * 监听音频自然播放至结束的事件 */
+ onEnded(
+ /** 音频自然播放至结束的事件的回调函数 */
+ callback: OnEndedCallback
+ ): void
+ /** [InnerAudioContext.onError(function callback)](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(
+ /** 音频播放错误事件的回调函数 */
+ callback: InnerAudioContextOnErrorCallback
+ ): void
+ /** [InnerAudioContext.onPause(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onPause.html)
+ *
+ * 监听音频暂停事件 */
+ onPause(
+ /** 音频暂停事件的回调函数 */
+ callback: OnPauseCallback
+ ): void
+ /** [InnerAudioContext.onPlay(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onPlay.html)
+ *
+ * 监听音频播放事件 */
+ onPlay(
+ /** 音频播放事件的回调函数 */
+ callback: OnPlayCallback
+ ): void
+ /** [InnerAudioContext.onSeeked(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onSeeked.html)
+ *
+ * 监听音频完成跳转操作的事件 */
+ onSeeked(
+ /** 音频完成跳转操作的事件的回调函数 */
+ callback: OnSeekedCallback
+ ): void
+ /** [InnerAudioContext.onSeeking(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onSeeking.html)
+ *
+ * 监听音频进行跳转操作的事件 */
+ onSeeking(
+ /** 音频进行跳转操作的事件的回调函数 */
+ callback: OnSeekingCallback
+ ): void
+ /** [InnerAudioContext.onStop(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onStop.html)
+ *
+ * 监听音频停止事件 */
+ onStop(
+ /** 音频停止事件的回调函数 */
+ callback: InnerAudioContextOnStopCallback
+ ): void
+ /** [InnerAudioContext.onTimeUpdate(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onTimeUpdate.html)
+ *
+ * 监听音频播放进度更新事件 */
+ onTimeUpdate(
+ /** 音频播放进度更新事件的回调函数 */
+ callback: OnTimeUpdateCallback
+ ): void
+ /** [InnerAudioContext.onWaiting(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/InnerAudioContext.onWaiting.html)
+ *
+ * 监听音频加载中事件。当音频因为数据不足,需要停下来加载时会触发 */
+ onWaiting(
+ /** 音频加载中事件的回调函数 */
+ callback: 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 callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offClose.html)
+ *
+ * 取消监听插屏广告关闭事件 */
+ offClose(
+ /** 插屏广告关闭事件的回调函数 */
+ callback?: UDPSocketOffCloseCallback
+ ): void
+ /** [InterstitialAd.offError(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offError.html)
+ *
+ * 取消监听插屏错误事件 */
+ offError(
+ /** 插屏错误事件的回调函数 */
+ callback?: InterstitialAdOffErrorCallback
+ ): void
+ /** [InterstitialAd.offLoad(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.offLoad.html)
+ *
+ * 取消监听插屏广告加载事件 */
+ offLoad(
+ /** 插屏广告加载事件的回调函数 */
+ callback?: OffLoadCallback
+ ): void
+ /** [InterstitialAd.onClose(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.onClose.html)
+ *
+ * 监听插屏广告关闭事件。 */
+ onClose(
+ /** 插屏广告关闭事件的回调函数 */
+ callback: UDPSocketOnCloseCallback
+ ): void
+ /** [InterstitialAd.onError(function callback)](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(
+ /** 插屏错误事件的回调函数 */
+ callback: InterstitialAdOnErrorCallback
+ ): void
+ /** [InterstitialAd.onLoad(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.onLoad.html)
+ *
+ * 监听插屏广告加载事件。 */
+ onLoad(
+ /** 插屏广告加载事件的回调函数 */
+ callback: OnLoadCallback
+ ): void
+ /** [Promise InterstitialAd.load()](https://developers.weixin.qq.com/miniprogram/dev/api/ad/InterstitialAd.load.html)
+ *
+ * 加载插屏广告。
+ *
+ * 最低基础库: `2.8.0` */
+ load(): Promise
+ /** [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
+ }
+ 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)
+ *
+ * 连接 NFC 标签
+ *
+ * 最低基础库: `2.11.2` */
+ connect(option?: ConnectOption): 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 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.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)
+ *
+ * 发送SEI消息
+ *
+ * 最低基础库: `2.10.0` */
+ 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?: CameraFrameListenerStartOption): 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.addCustomLayer(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addCustomLayer.html)
+ *
+ * 添加个性化图层。
+ *
+ * 最低基础库: `2.12.0` */
+ 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)
+ *
+ * 添加 marker。
+ *
+ * 最低基础库: `2.13.0` */
+ addMarkers(option: AddMarkersOption): 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)
+ *
+ * 沿指定路径移动 `marker`,用于轨迹回放等场景。动画完成时触发回调事件,若动画进行中,对同一 `marker` 再次调用 `moveAlong` 方法,前一次的动画将被打断。
+ *
+ * 最低基础库: `2.13.0` */
+ moveAlong(option: MoveAlongOption): void
+ /** [MapContext.moveToLocation(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.moveToLocation.html)
+ *
+ * 将地图中心移置当前定位点,此时需设置地图组件 show-location 为true。[2.8.0](https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html) 起支持将地图中心移动到指定位置。
+ *
+ * 最低基础库: `1.2.0` */
+ moveToLocation(option?: MoveToLocationOption): void
+ /** [MapContext.on(string event, function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.on.html)
+*
+* 监听地图事件。
+*
+* ### 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) => {})
+```
+*
+* 最低基础库: `2.13.0` */
+ 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)
+ *
+ * 拉起地图APP选择导航。
+ *
+ * 最低基础库: `2.14.0` */
+ openMapApp(option: OpenMapAppOption): 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)
+ *
+ * 移除 marker。
+ *
+ * 最低基础库: `2.13.0` */
+ removeMarkers(option: RemoveMarkersOption): void
+ /** [MapContext.setCenterOffset(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.setCenterOffset.html)
+ *
+ * 设置地图中心点偏移,向后向下为增长,屏幕比例范围(0.25~0.75),默认偏移为[0.5, 0.5]
+ *
+ * 最低基础库: `2.10.0` */
+ setCenterOffset(option: SetCenterOffsetOption): 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)
+ *
+ * 平移marker,带动画。
+ *
+ * 最低基础库: `1.2.0` */
+ 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
+ /** [Promise MediaAudioPlayer.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.destroy.html)
+ *
+ * 销毁播放器 */
+ destroy(): Promise
+ /** [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
+ /** [Promise MediaAudioPlayer.start()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.start.html)
+ *
+ * 启动播放器 */
+ start(): Promise
+ /** [Promise MediaAudioPlayer.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/audio/MediaAudioPlayer.stop.html)
+ *
+ * 停止播放器 */
+ stop(): Promise
+ }
+ 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.destroy()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.destroy.html)
+ *
+ * 销毁录制器
+ *
+ * 最低基础库: `2.11.0` */
+ destroy(): void
+ /** [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}; */
+ eventName: 'start' | 'stop',
+ /** 事件触发时执行的回调函数 */
+ callback: (...args: any[]) => any
+ ): void
+ /** [MediaRecorder.pause()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.pause.html)
+ *
+ * 暂停录制
+ *
+ * 最低基础库: `2.11.0` */
+ pause(): void
+ /** [MediaRecorder.requestFrame(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.requestFrame.html)
+ *
+ * 请求下一帧录制,在 callback 里完成一帧渲染后开始录制当前帧
+ *
+ * 最低基础库: `2.11.0` */
+ requestFrame(callback: (...args: any[]) => any): void
+ /** [MediaRecorder.resume()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.resume.html)
+ *
+ * 恢复录制
+ *
+ * 最低基础库: `2.11.0` */
+ resume(): void
+ /** [MediaRecorder.start()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.start.html)
+ *
+ * 开始录制
+ *
+ * 最低基础库: `2.11.0` */
+ start(): void
+ /** [MediaRecorder.stop()](https://developers.weixin.qq.com/miniprogram/dev/api/media/media-recorder/MediaRecorder.stop.html)
+ *
+ * 结束录制
+ *
+ * 最低基础库: `2.11.0` */
+ stop(): void
+ }
+ 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)
+ *
+ * 连接 NFC 标签
+ *
+ * 最低基础库: `2.11.2` */
+ connect(option?: ConnectOption): 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)
+ *
+ * 连接 NFC 标签
+ *
+ * 最低基础库: `2.11.2` */
+ connect(option?: ConnectOption): 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 callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.offDiscovered.html)
+ *
+ * 取消监听 NFC Tag
+ *
+ * 最低基础库: `2.11.2` */
+ offDiscovered(
+ /** 的回调函数 */
+ callback?: OffDiscoveredCallback
+ ): void
+ /** [NFCAdapter.onDiscovered(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NFCAdapter.onDiscovered.html)
+ *
+ * 监听 NFC Tag
+ *
+ * 最低基础库: `2.11.2` */
+ onDiscovered(
+ /** 的回调函数 */
+ callback: 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)
+ *
+ * 获取IsoDep实例,实例支持ISO-DEP (ISO 14443-4)标准的读写
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 获取MifareClassic实例,实例支持MIFARE Classic标签的读写
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 获取MifareUltralight实例,实例支持MIFARE Ultralight标签的读写
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 获取Ndef实例,实例支持对NDEF格式的NFC标签上的NDEF数据的读写
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 获取NfcA实例,实例支持NFC-A (ISO 14443-3A)标准的读写
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 获取NfcB实例,实例支持NFC-B (ISO 14443-3B)标准的读写
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 获取NfcF实例,实例支持NFC-F (JIS 6319-4)标准的读写
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 获取NfcV实例,实例支持NFC-V (ISO 15693)标准的读写
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 连接 NFC 标签
+ *
+ * 最低基础库: `2.11.2` */
+ connect(option?: ConnectOption): 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)
+ *
+ * 取消监听 Ndef 消息
+ *
+ * 最低基础库: `2.11.2` */
+ offNdefMessage(callback: (...args: any[]) => any): void
+ /** [Ndef.onNdefMessage(function callback)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/Ndef.onNdefMessage.html)
+ *
+ * 监听 Ndef 消息
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 重写 Ndef 标签内容
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 连接 NFC 标签
+ *
+ * 最低基础库: `2.11.2` */
+ connect(option?: ConnectOption): void
+ /** [NfcA.getAtqa(Object object)](https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/NfcA.getAtqa.html)
+ *
+ * 获取ATQA信息
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 获取SAK信息
+ *
+ * 最低基础库: `2.11.2` */
+ 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)
+ *
+ * 连接 NFC 标签
+ *
+ * 最低基础库: `2.11.2` */
+ connect(option?: ConnectOption): 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)
+ *
+ * 连接 NFC 标签
+ *
+ * 最低基础库: `2.11.2` */
+ connect(option?: ConnectOption): 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)
+ *
+ * 连接 NFC 标签
+ *
+ * 最低基础库: `2.11.2` */
+ connect(option?: ConnectOption): 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)
+*
+* 添加节点的 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 对象。如:选中的节点是