|
@@ -0,0 +1,1478 @@
|
|
|
+const utils = require("./utils");
|
|
|
+const propsPolyfill = require("./propsPolyfill");
|
|
|
+const descObj = require("./desc.js");
|
|
|
+const apiObj = {startBeaconDiscovery:{fn: function fn(obj = {}) {
|
|
|
+ const startBeaconDiscoveryParams = descObj.startBeaconDiscovery.body.params.props
|
|
|
+ const params = utils.defineGetter(obj, startBeaconDiscoveryParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `startBeaconDiscovery的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `startBeaconDiscovery/${prop}`,
|
|
|
+ errorType: startBeaconDiscoveryParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.startBeaconDiscovery(params)
|
|
|
+ },},stopBeaconDiscovery:{fn: function fn(obj = {}) {
|
|
|
+ my.stopBeaconDiscovery(obj)
|
|
|
+ },},onBeaconUpdate:{fn: function fn(cb) {
|
|
|
+ return my.onBeaconUpdate({
|
|
|
+ success: cb,
|
|
|
+ fail: cb,
|
|
|
+ })
|
|
|
+ },},onBeaconServiceChange:{fn: function fn(cb) {
|
|
|
+ return my.onBeaconServiceChange({
|
|
|
+ success: cb,
|
|
|
+ fail: cb,
|
|
|
+ complete: cb,
|
|
|
+ })
|
|
|
+ },},getBeacons:{fn: function fn(obj = {}) {
|
|
|
+ return my.getBeacons(obj)
|
|
|
+ },},writeBLECharacteristicValue:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.value) {
|
|
|
+ obj.value = utils.ab2hex(obj.value)
|
|
|
+ }
|
|
|
+ my.writeBLECharacteristicValue(obj)
|
|
|
+ },},createBLEConnection:{fn: function fn(obj = {}) {
|
|
|
+ return my.connectBLEDevice(obj)
|
|
|
+ },},closeBLEConnection:{fn: function fn(obj = {}) {
|
|
|
+ return my.disconnectBLEDevice(obj)
|
|
|
+ },},onBLEConnectionStateChange:{fn: function fn(obj = {}) {
|
|
|
+ return my.onBLEConnectionStateChanged(obj)
|
|
|
+ },},onBLECharacteristicValueChange:{fn: function fn(cb) {
|
|
|
+ my.onBLECharacteristicValueChange((res) => {
|
|
|
+ res.value = utils.changeType(res.value)
|
|
|
+ cb && cb(res)
|
|
|
+ })
|
|
|
+ },},getBLEDeviceServices:{fn: function fn(obj = {}) {
|
|
|
+ my.getBLEDeviceServices({
|
|
|
+ ...obj,
|
|
|
+ success: (res) => {
|
|
|
+ if (res.services) {
|
|
|
+ res.services.forEach((item) => {
|
|
|
+ item.uuid = item.serviceId
|
|
|
+ delete item.serviceId
|
|
|
+ })
|
|
|
+ }
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},getBLEDeviceCharacteristics:{fn: function fn(obj = {}) {
|
|
|
+ my.getBLEDeviceCharacteristics({
|
|
|
+ ...obj,
|
|
|
+ success: (res) => {
|
|
|
+ if (res.characteristics) {
|
|
|
+ res.characteristics.forEach((item) => {
|
|
|
+ item.uuid = item.characteristicId
|
|
|
+ delete item.characteristicId
|
|
|
+ })
|
|
|
+ }
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},addPhoneContact:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.weChatNumber) {
|
|
|
+ obj.alipayAccount = obj.weChatNumber
|
|
|
+ }
|
|
|
+ my.addPhoneContact(obj)
|
|
|
+ },},startBluetoothDevicesDiscovery:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.interval) {
|
|
|
+ obj.interval = Math.round(obj.interval)
|
|
|
+ }
|
|
|
+ my.startBluetoothDevicesDiscovery(obj)
|
|
|
+ },},onBluetoothDeviceFound:{fn: function fn(cb) {
|
|
|
+ const onBluetoothDeviceFoundProps = descObj.onBluetoothDeviceFound.body.returnValue.props
|
|
|
+ my.onBluetoothDeviceFound((res) => {
|
|
|
+ const arr = res.devices.map((item) => {
|
|
|
+ item.advertisData = utils.changeType(item.advertisData)
|
|
|
+ return utils.defineGetter(item, onBluetoothDeviceFoundProps, (obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `onBluetoothDeviceFound的返回值不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `onBluetoothDeviceFound/${prop}`,
|
|
|
+ errorType: onBluetoothDeviceFoundProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ })
|
|
|
+ res.devices = arr
|
|
|
+ cb && cb(res)
|
|
|
+ })
|
|
|
+ },},getBluetoothDevices:{fn: function fn(obj = {}) {
|
|
|
+ const getBluetoothDevicesProps = descObj.getBluetoothDevices.body.returnValue.props.devices.props
|
|
|
+ my.getBluetoothDevices({
|
|
|
+ ...obj,
|
|
|
+ success: (res) => {
|
|
|
+ const arr = res.devices.map((item) => {
|
|
|
+ item.advertisData = utils.changeType(item.advertisData)
|
|
|
+ return utils.defineGetter(item, getBluetoothDevicesProps, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `getBluetoothDevices的返回值不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `getBluetoothDevices/${prop}`,
|
|
|
+ errorType: getBluetoothDevicesProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ })
|
|
|
+ res.devices = arr
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},setClipboardData:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.data) {
|
|
|
+ obj.text = obj.data
|
|
|
+ delete obj.data
|
|
|
+ }
|
|
|
+ my.setClipboard(obj)
|
|
|
+ },},getClipboardData:{fn: function fn(obj = {}) {
|
|
|
+ my.getClipboard({
|
|
|
+ ...obj,
|
|
|
+ success: (res) => {
|
|
|
+ res.data = res.text
|
|
|
+ delete res.text
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},onNetworkStatusChange:{fn: function fn(cb) {
|
|
|
+ my.onNetworkStatusChange((res) => {
|
|
|
+ res.networkType = res.networkType.toLowerCase()
|
|
|
+ const typeObjMap = {
|
|
|
+ unknown: 'unknown',
|
|
|
+ wifi: 'wifi',
|
|
|
+ '2g': '2g',
|
|
|
+ '3g': '3g',
|
|
|
+ '4g': '4g',
|
|
|
+ }
|
|
|
+
|
|
|
+ if (res && !res.isConnected) {
|
|
|
+ res.networkType = 'none'
|
|
|
+ } else {
|
|
|
+ res.networkType = typeObjMap[res.networkType] || res.networkType
|
|
|
+ }
|
|
|
+ cb && cb(res)
|
|
|
+ })
|
|
|
+ },},setScreenBrightness:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.value) {
|
|
|
+ obj.brightness = obj.value
|
|
|
+ delete obj.value
|
|
|
+ }
|
|
|
+ my.setScreenBrightness(obj)
|
|
|
+ },},getScreenBrightness:{fn: function fn(obj = {}) {
|
|
|
+ my.getScreenBrightness({
|
|
|
+ success: (res) => {
|
|
|
+ res.value = res.brightness
|
|
|
+ delete res.brightness
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ fail: (res) => {
|
|
|
+ obj.fail && obj.fail(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},scanCode:{fn: function fn(obj = {}) {
|
|
|
+ obj.hideAlbum = obj.onlyFromCamera || false
|
|
|
+ my.scan(obj)
|
|
|
+ },},stopGyroscope:{fn: function fn(obj = {}) {
|
|
|
+ const stopGyroscopeParams = descObj.stopGyroscope.body.params.props
|
|
|
+ const params = utils.defineGetter(obj, stopGyroscopeParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `stopGyroscope的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `stopGyroscope${prop}`,
|
|
|
+ errorType: stopGyroscopeParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.offGyroscopeChange(params)
|
|
|
+ },},onCompassChange:{fn: function fn(cb) {
|
|
|
+ const onCompassChangeReturnValue = descObj.onCompassChange.body.returnValue.props
|
|
|
+ my.onCompassChange((res) => {
|
|
|
+ const _res = utils.defineGetter(res, onCompassChangeReturnValue, (obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `onCompassChange的返回值不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `onCompassChange/${prop}`,
|
|
|
+ errorType: onCompassChangeReturnValue[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ cb && cb(_res)
|
|
|
+ })
|
|
|
+ },},stopCompass:{fn: function fn(obj = {}) {
|
|
|
+ const stopCompassParams = descObj.stopCompass.body.params.props
|
|
|
+ const params = utils.defineGetter(obj, stopCompassParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `stopCompass的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `stopCompass/${prop}`,
|
|
|
+ errorType: stopCompassParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.offCompassChange(params)
|
|
|
+ },},stopAccelerometer:{fn: function fn(obj = {}) {
|
|
|
+ const stopAccelerometerParams = descObj.stopAccelerometer.body.params.props
|
|
|
+ const params = utils.defineGetter(obj, stopAccelerometerParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `stopAccelerometer的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `stopCompass/${prop}`,
|
|
|
+ errorType: stopAccelerometerParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.offAccelerometerChange(params)
|
|
|
+ },},makePhoneCall:{fn: function fn(obj = {}) {
|
|
|
+ const makePhoneCallParams = descObj.makePhoneCall.body.params.props
|
|
|
+ if (obj.phoneNumber) {
|
|
|
+ obj.number = obj.phoneNumber
|
|
|
+ delete obj.phoneNumber
|
|
|
+ }
|
|
|
+ const params = utils.defineGetter(obj, makePhoneCallParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `makePhoneCall的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `makePhoneCall/${prop}`,
|
|
|
+ errorType: makePhoneCallParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.makePhoneCall(params)
|
|
|
+ },},canIUse:{fn: function fn(params) {
|
|
|
+ const paramsList = params.split('.')
|
|
|
+ if (paramsList[1] && paramsList[1] === 'success') {
|
|
|
+ paramsList[1] = 'return'
|
|
|
+ }
|
|
|
+ const str = paramsList.join('.')
|
|
|
+ return my.canIUse(str)
|
|
|
+ },},getSystemInfoSync:{fn: function fn() {
|
|
|
+ let ret = my.getSystemInfoSync()
|
|
|
+ const getSystemInfoSyncProps
|
|
|
+ = descObj.getSystemInfoSync.body.returnValue.props
|
|
|
+ ret = utils.defineGetter(ret, getSystemInfoSyncProps, (obj, prop) => {
|
|
|
+ utils.warn(`getSystemInfoSync的返回值不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `getSystemInfoSync/${prop}`,
|
|
|
+ errorType: getSystemInfoSyncProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理Android屏幕宽度返回值
|
|
|
+ */
|
|
|
+ if (ret.platform.toLowerCase() === 'android') {
|
|
|
+ ret.platform = 'android'
|
|
|
+ ret.screenWidth /= ret.pixelRatio
|
|
|
+ ret.screenHeight /= ret.pixelRatio
|
|
|
+ } else if (ret.platform.toLowerCase() === 'ios') {
|
|
|
+ ret.platform = 'ios'
|
|
|
+ // mock的安全区位置信息(模拟器iphonex screenHeight:812)
|
|
|
+ if (ret.screenHeight >= propsPolyfill.screenHeight) {
|
|
|
+ ret.safeArea = propsPolyfill.safeArea
|
|
|
+ ret.safeArea.bottom = ret.screenHeight - propsPolyfill.safeHeight
|
|
|
+ } else {
|
|
|
+ ret.safeArea = {
|
|
|
+ bottom: ret.screenHeight,
|
|
|
+ height: ret.screenHeight,
|
|
|
+ left: 0,
|
|
|
+ right: ret.screenWidth,
|
|
|
+ top: ret.statusBarHeight,
|
|
|
+ width: ret.screenWidth,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // mock的版本,确保微信小程序源码里读取后和目标版本匹配都能通过
|
|
|
+ ret.SDKVersion = '10.0.0'
|
|
|
+
|
|
|
+ return ret
|
|
|
+ },},getSystemInfo:{fn: function fn(obj = {}) {
|
|
|
+ const getSystemInfoProps = descObj.getSystemInfo.body.returnValue.props
|
|
|
+ my.getSystemInfo({
|
|
|
+ ...obj,
|
|
|
+ success: (res) => {
|
|
|
+ res = utils.defineGetter(res, getSystemInfoProps, (_obj, prop) => {
|
|
|
+ utils.warn(`getSystemInfo的返回值不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `getSystemInfo/${prop}`,
|
|
|
+ errorType: getSystemInfoProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理Android屏幕宽度返回值
|
|
|
+ */
|
|
|
+ if (res.platform.toLowerCase() === 'android') {
|
|
|
+ res.platform = 'android'
|
|
|
+ res.screenWidth /= res.pixelRatio
|
|
|
+ res.screenHeight /= res.pixelRatio
|
|
|
+ } else if (res.platform.toLowerCase() === 'ios') {
|
|
|
+ res.platform = 'ios'
|
|
|
+ if (res.screenHeight >= propsPolyfill.screenHeight) {
|
|
|
+ res.safeArea = propsPolyfill.safeArea
|
|
|
+ res.safeArea.bottom = res.screenHeight - propsPolyfill.safeHeight
|
|
|
+ } else {
|
|
|
+ res.safeArea = {
|
|
|
+ bottom: res.screenHeight,
|
|
|
+ height: res.screenHeight,
|
|
|
+ left: 0,
|
|
|
+ right: res.screenWidth,
|
|
|
+ top: res.statusBarHeight,
|
|
|
+ width: res.screenWidth,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // mock的版本,确保微信小程序源码里读取后和目标版本匹配都能通过
|
|
|
+ res.SDKVersion = '10.0.0'
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},showToast:{fn: function fn(obj = {}) {
|
|
|
+ const showToastProps = descObj.showToast.body.params.props
|
|
|
+ if (obj.title) {
|
|
|
+ obj.content = obj.title
|
|
|
+ delete obj.title
|
|
|
+ }
|
|
|
+ if (!obj.duration) {
|
|
|
+ obj.duration = 2000
|
|
|
+ }
|
|
|
+ if (obj.icon) {
|
|
|
+ if (obj.icon === 'success') {
|
|
|
+ obj.type = 'success'
|
|
|
+ } else if (obj.icon === 'loading') {
|
|
|
+ obj.type = 'none'
|
|
|
+ utils.warn('showToast暂不支持loading', {
|
|
|
+ apiName: 'showToast/loading',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ obj.type = 'none'
|
|
|
+ }
|
|
|
+ delete obj.icon
|
|
|
+ } else {
|
|
|
+ obj.type = 'success'
|
|
|
+ }
|
|
|
+
|
|
|
+ const params = utils.defineGetter(obj, showToastProps, (_obj, prop) => {
|
|
|
+ utils.warn(`showToast的参数不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `showToast/${prop}`,
|
|
|
+ errorType: showToastProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ my.showToast(params)
|
|
|
+ },},showModal:{fn: function fn(obj = {}) {
|
|
|
+ const showModalProps = descObj.showModal.body.params.props
|
|
|
+ if (obj.cancelText !== undefined) {
|
|
|
+ obj.cancelButtonText = obj.cancelText
|
|
|
+ delete obj.cancelText
|
|
|
+ }
|
|
|
+
|
|
|
+ if (obj.confirmText !== undefined) {
|
|
|
+ obj.confirmButtonText = obj.confirmText
|
|
|
+ delete obj.confirmText
|
|
|
+ }
|
|
|
+
|
|
|
+ const params = utils.defineGetter(obj, showModalProps, (_obj, prop) => {
|
|
|
+ utils.warn(`showModal的参数不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `showModal/${prop}`,
|
|
|
+ errorType: showModalProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ my.confirm({
|
|
|
+ ...params,
|
|
|
+ success(res) {
|
|
|
+ if (res.confirm) {
|
|
|
+ res.cancel = false
|
|
|
+ } else {
|
|
|
+ res.cancel = true
|
|
|
+ }
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},showLoading:{fn: function fn(obj = {}) {
|
|
|
+ const showLoadingProps = descObj.showLoading.body.params.props
|
|
|
+ if (obj.title) {
|
|
|
+ obj.content = obj.title
|
|
|
+ delete obj.title
|
|
|
+ }
|
|
|
+ const params = utils.defineGetter(obj, showLoadingProps, (_obj, prop) => {
|
|
|
+ utils.warn(`showLoading的参数不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `showLoading/${prop}`,
|
|
|
+ errorType: showLoadingProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+ my.showLoading(params)
|
|
|
+ },},showActionSheet:{fn: function fn(obj = {}) {
|
|
|
+ const showActionSheetProps = descObj.showActionSheet.body.params.props
|
|
|
+ if (obj.itemList) {
|
|
|
+ obj.items = obj.itemList
|
|
|
+ delete obj.itemList
|
|
|
+ }
|
|
|
+ const params = utils.defineGetter(
|
|
|
+ obj,
|
|
|
+ showActionSheetProps,
|
|
|
+ (_obj, prop) => {
|
|
|
+ utils.warn(`showActionSheet的参数不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `showActionSheet/${prop}`,
|
|
|
+ errorType: showActionSheetProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ },
|
|
|
+ )
|
|
|
+ my.showActionSheet({
|
|
|
+ ...params,
|
|
|
+ success: (res) => {
|
|
|
+ res.tapIndex = res.index
|
|
|
+ delete res.index
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},hideToast:{fn: function fn(obj) {
|
|
|
+ try {
|
|
|
+ my.hideToast()
|
|
|
+ obj.success
|
|
|
+ && obj.success({
|
|
|
+ errMsg: 'hideToast: ok',
|
|
|
+ })
|
|
|
+ } catch (err) {
|
|
|
+ obj.fail && obj.fail(err)
|
|
|
+ } finally {
|
|
|
+ obj.complete
|
|
|
+ && obj.complete({
|
|
|
+ errMsg: 'hideToast: ok',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },},hideLoading:{fn: function fn(obj) {
|
|
|
+ try {
|
|
|
+ my.hideLoading()
|
|
|
+ obj.success
|
|
|
+ && obj.success({
|
|
|
+ errMsg: 'hideLoading: ok',
|
|
|
+ })
|
|
|
+ } catch (err) {
|
|
|
+ obj.fail && obj.fail(err)
|
|
|
+ } finally {
|
|
|
+ obj.complete
|
|
|
+ && obj.complete({
|
|
|
+ errMsg: 'hideLoading: ok',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },},showNavigationBarLoading:{fn: function fn(obj = {}) {
|
|
|
+ try {
|
|
|
+ my.showNavigationBarLoading()
|
|
|
+ obj.success
|
|
|
+ && obj.success({
|
|
|
+ errMsg: 'showNavigationBarLoading: ok',
|
|
|
+ })
|
|
|
+ } catch (err) {
|
|
|
+ obj.fail && obj.fail(err)
|
|
|
+ } finally {
|
|
|
+ obj.complete
|
|
|
+ && obj.complete({
|
|
|
+ errMsg: 'showNavigationBarLoading: ok',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },},setNavigationBarTitle:{fn: function fn(obj = {}) {
|
|
|
+ return my.setNavigationBar(obj)
|
|
|
+ },},setNavigationBarColor:{fn: function fn(obj = {}) {
|
|
|
+ return my.setNavigationBar(obj)
|
|
|
+ },},hideNavigationBarLoading:{fn: function fn(obj = {}) {
|
|
|
+ try {
|
|
|
+ my.hideNavigationBarLoading()
|
|
|
+ obj.success
|
|
|
+ && obj.success({
|
|
|
+ errMsg: 'hideNavigationBarLoading: ok',
|
|
|
+ })
|
|
|
+ } catch (err) {
|
|
|
+ obj.fail && obj.fail(err)
|
|
|
+ } finally {
|
|
|
+ obj.complete
|
|
|
+ && obj.complete({
|
|
|
+ errMsg: 'hideNavigationBarLoading: ok',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },},setTabBarStyle:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.color && obj.color.length === 4) {
|
|
|
+ const color = obj.color.slice(1)
|
|
|
+ obj.color = `#${color}${color}`
|
|
|
+ }
|
|
|
+ my.setTabBarStyle(obj)
|
|
|
+ },},setTabBarItem:{fn: function fn(obj = {}) {
|
|
|
+ if (!obj.iconPath || !obj.selectedIconPath) {
|
|
|
+ utils.warn('setTabBarItem的iconPath和selectedIconPath是必传的!', {
|
|
|
+ apiName: 'setTabBarItem/iconPath和selectedIconPath',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ my.setTabBarItem(obj)
|
|
|
+ },},stopPullDownRefresh:{fn: function fn(obj = {}) {
|
|
|
+ try {
|
|
|
+ my.stopPullDownRefresh()
|
|
|
+ obj.success
|
|
|
+ && obj.success({
|
|
|
+ errMsg: 'stopPullDownRefresh: ok',
|
|
|
+ })
|
|
|
+ } catch (err) {
|
|
|
+ obj.fail && obj.fail(err)
|
|
|
+ } finally {
|
|
|
+ obj.complete
|
|
|
+ && obj.complete({
|
|
|
+ errMsg: 'stopPullDownRefresh: ok',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },},pageScrollTo:{fn: function fn(obj = {}) {
|
|
|
+ const pageScrollToParams = descObj.pageScrollTo.body.params.props
|
|
|
+ const params = utils.defineGetter(
|
|
|
+ obj,
|
|
|
+ pageScrollToParams,
|
|
|
+ (_obj, prop) => {
|
|
|
+ utils.warn(`pageScrollTo的参数不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `pageScrollTo/${prop}`,
|
|
|
+ errorType: pageScrollToParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ },
|
|
|
+ )
|
|
|
+ my.pageScrollTo(params)
|
|
|
+ try {
|
|
|
+ my.pageScrollTo()
|
|
|
+ obj.success
|
|
|
+ && obj.success({
|
|
|
+ errMsg: 'pageScrollTo: ok',
|
|
|
+ })
|
|
|
+ } catch (err) {
|
|
|
+ obj.fail && obj.fail(err)
|
|
|
+ } finally {
|
|
|
+ obj.complete
|
|
|
+ && obj.complete({
|
|
|
+ errMsg: 'pageScrollTo: ok',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },},request:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.header) {
|
|
|
+ obj.headers = obj.header
|
|
|
+ delete obj.header
|
|
|
+ }
|
|
|
+
|
|
|
+ obj.method = obj.method || 'GET'
|
|
|
+
|
|
|
+ obj.method = obj.method.toUpperCase()
|
|
|
+
|
|
|
+ if (obj.method !== 'GET' && obj.method !== 'POST') {
|
|
|
+ utils.warn(`request暂不支持${obj.method}请求方式`, {
|
|
|
+ apiName: `request/${obj.method}`,
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ obj.method = 'GET'
|
|
|
+ }
|
|
|
+
|
|
|
+ if (obj.responseType) {
|
|
|
+ utils.warn('支付宝暂不支持responseType', {
|
|
|
+ apiName: 'request/responseType',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ let task = my.request({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ res.header = res.headers
|
|
|
+ res.statusCode = res.status
|
|
|
+ delete res.headers
|
|
|
+ delete res.status
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ fail(err) {
|
|
|
+ const errMsg = 'request:fail abort'
|
|
|
+ if (err.errorMessage === errMsg) {
|
|
|
+ err = {
|
|
|
+ errMsg,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ obj.fail && obj.fail(err)
|
|
|
+ },
|
|
|
+ complete(res) {
|
|
|
+ obj.complete && obj.complete(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ task = task || {}
|
|
|
+ task.onHeadersReceived = function() {}
|
|
|
+ task.offHeadersReceived = function() {}
|
|
|
+ return task
|
|
|
+ },},createMapContext:{fn: function fn(obj = {}) {
|
|
|
+ const createMapContextProps
|
|
|
+ = descObj.createMapContext.body.returnValue.props
|
|
|
+ const data = my.createMapContext(obj)
|
|
|
+ for (const key in createMapContextProps) {
|
|
|
+ if (createMapContextProps[key].type === 0) {
|
|
|
+ data[key] = () => {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return utils.defineGetter(data, createMapContextProps, (_obj, prop) => {
|
|
|
+ utils.warn(`createMapContext的返回值不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `createMapContext/${prop}`,
|
|
|
+ errorType: createMapContextProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },},createVideoContext:{fn: function fn(id, that) {
|
|
|
+ if (that) {
|
|
|
+ utils.warn('createVideoContext暂不支持传递实例this', {
|
|
|
+ apiName: 'createVideoContext',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return my.createVideoContext(id)
|
|
|
+ },},createCameraContext:{fn: function fn(id = '') {
|
|
|
+ const res = my.createCameraContext(id)
|
|
|
+ res.setZoom = () => {
|
|
|
+ utils.warn('支付宝暂不支持setZoom', {
|
|
|
+ apiName: 'createCameraContext/setZoom',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return res
|
|
|
+ },},previewImage:{fn: function fn(obj = {}) {
|
|
|
+ const imgList = obj.urls || []
|
|
|
+ const index = imgList.indexOf(obj.current)
|
|
|
+ obj.current = index
|
|
|
+ return my.previewImage(obj)
|
|
|
+ },},compressImage:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.src) {
|
|
|
+ obj.apFilePaths = [obj.src]
|
|
|
+ delete obj.src
|
|
|
+ }
|
|
|
+ my.compressImage({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ res.tempFilePath = res.apFilePaths[0]
|
|
|
+ delete res.apFilePath
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},chooseImage:{fn: function fn(obj = {}) {
|
|
|
+ if (!obj.count) {
|
|
|
+ obj.count = 9
|
|
|
+ }
|
|
|
+ my.chooseImage({
|
|
|
+ ...obj,
|
|
|
+ // success(res) {
|
|
|
+ // res.tempFilePaths = res.apFilePaths
|
|
|
+ // delete res.apFilePath
|
|
|
+ // utils.warn('暂不支持tempFiles', {
|
|
|
+ // apiName: 'chooseImage/tempFiles',
|
|
|
+ // errorType: 0,
|
|
|
+ // type: 'api',
|
|
|
+ // })
|
|
|
+ // obj.success && obj.success(res)
|
|
|
+ // },
|
|
|
+ fail(err) {
|
|
|
+ err.errMsg = err.errorMessage || ''
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},saveImageToPhotosAlbum:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.filePath) {
|
|
|
+ obj.url = obj.filePath
|
|
|
+ }
|
|
|
+ return my.saveImage(obj)
|
|
|
+ },},openLocation:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.scale) {
|
|
|
+ utils.warn('支付宝scale的取值为3-19,默认15', {
|
|
|
+ apiName: 'openLocation/scale',
|
|
|
+ errorType: 4,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+
|
|
|
+ if (obj.scale > 19) {
|
|
|
+ obj.scale = 19
|
|
|
+ } else if (obj.scale < 3) {
|
|
|
+ obj.scale = 3
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return my.openLocation(obj)
|
|
|
+ },},getLocation:{fn: function fn(obj = {}) {
|
|
|
+ const type = obj.type || 'wgs84'
|
|
|
+ const getLocationProps = descObj.getLocation.body.returnValue.props
|
|
|
+ my.getLocation({
|
|
|
+ ...obj,
|
|
|
+ type: 0,
|
|
|
+ success(res) {
|
|
|
+ let data = res
|
|
|
+ if (type === 'wgs84') {
|
|
|
+ const lnglat = utils.gcj02towgs84(res.longitude, res.latitude)
|
|
|
+
|
|
|
+ data = Object.assign(res, {
|
|
|
+ longitude: lnglat[0],
|
|
|
+ latitude: lnglat[1],
|
|
|
+ })
|
|
|
+ }
|
|
|
+ data = utils.defineGetter(data, getLocationProps, (_obj, prop) => {
|
|
|
+ utils.warn(`getLocation的返回值不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `getLocation/${prop}`,
|
|
|
+ errorType: getLocationProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+ obj.success && obj.success(data)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},openCard:{fn: function fn(obj) {
|
|
|
+ const openCardParams = descObj.openCard.body.params.props
|
|
|
+ const params = utils.defineGetter(obj, openCardParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `openCard的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `openCard/${prop}`,
|
|
|
+ errorType: openCardParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.openCardList(params)
|
|
|
+ },},login:{fn: function fn(obj = {}) {
|
|
|
+ my.getAuthCode({
|
|
|
+ scopes: 'auth_base',
|
|
|
+ success: (res) => {
|
|
|
+ const resObj = {
|
|
|
+ code: res.authCode,
|
|
|
+ }
|
|
|
+ if (res.authCode) {
|
|
|
+ resObj.errMsg = 'login:ok'
|
|
|
+ if (obj.success) {
|
|
|
+ obj.success(resObj)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ resObj.errMsg = 'login:fail'
|
|
|
+ if (obj.success) {
|
|
|
+ obj.success(resObj)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ if (obj.fail) {
|
|
|
+ obj.fail(err)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ complete: (res) => {
|
|
|
+ if (res.authCode) {
|
|
|
+ const resObj = {
|
|
|
+ code: res.authCode,
|
|
|
+ errMsg: 'login:ok',
|
|
|
+ }
|
|
|
+ if (obj.complete) {
|
|
|
+ obj.complete(resObj)
|
|
|
+ }
|
|
|
+ } else if (obj.complete) {
|
|
|
+ obj.complete(res)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},hideKeyboard:{fn: function fn(obj = {}) {
|
|
|
+ my.hideKeyboard(obj)
|
|
|
+
|
|
|
+ if (typeof obj.success === 'function') {
|
|
|
+ obj.success()
|
|
|
+ }
|
|
|
+
|
|
|
+ if (typeof obj.complete === 'function') {
|
|
|
+ obj.complete()
|
|
|
+ }
|
|
|
+ },},getNetworkType:{fn: function fn(obj = {}) {
|
|
|
+ my.getNetworkType({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ res.networkType = res.networkType.toLowerCase()
|
|
|
+ const typeObjMap = {
|
|
|
+ unknown: 'unknown',
|
|
|
+ wifi: 'wifi',
|
|
|
+ '2g': '2g',
|
|
|
+ '3g': '3g',
|
|
|
+ '4g': '4g',
|
|
|
+ }
|
|
|
+
|
|
|
+ if (res && !res.networkAvailable) {
|
|
|
+ res.networkType = 'none'
|
|
|
+ } else {
|
|
|
+ res.networkType = typeObjMap[res.networkType] || res.networkType
|
|
|
+ }
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},canvasToTempFilePath:{fn: function fn(obj = {}) {
|
|
|
+ const ctx = my.createCanvasContext(obj.canvasId)
|
|
|
+ ctx.toTempFilePath({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ res.tempFilePath = res.apFilePath
|
|
|
+ delete res.apFilePath
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},canvasPutImageData:{fn: function fn(obj = {}) {
|
|
|
+ const ctx = my.createCanvasContext(obj.canvasId)
|
|
|
+ ctx.putImageData({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},canvasGetImageData:{fn: function fn(obj = {}) {
|
|
|
+ const ctx = my.createCanvasContext(obj.canvasId)
|
|
|
+ ctx.getImageData({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},saveFile:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.tempFilePath) {
|
|
|
+ obj.apFilePath = obj.tempFilePath
|
|
|
+ delete obj.tempFilePath
|
|
|
+ }
|
|
|
+ my.saveFile({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ res.savedFilePath = res.apFilePath
|
|
|
+ delete res.apFilePath
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},removeSavedFile:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.filePath) {
|
|
|
+ obj.apFilePath = obj.filePath
|
|
|
+ delete obj.filePath
|
|
|
+ }
|
|
|
+ return my.removeSavedFile(obj)
|
|
|
+ },},getSavedFileList:{fn: function fn(obj = {}) {
|
|
|
+ my.getSavedFileList({
|
|
|
+ success(res) {
|
|
|
+ if (res.fileList.length) {
|
|
|
+ const ret = res.fileList.map((item) => {
|
|
|
+ item.filePath = item.apFilePath
|
|
|
+ delete item.apFilePath
|
|
|
+ return item
|
|
|
+ })
|
|
|
+ res.fileList = ret
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ } else {
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},getSavedFileInfo:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.filePath) {
|
|
|
+ obj.apFilePath = obj.filePath
|
|
|
+ delete obj.filePath
|
|
|
+ }
|
|
|
+ return my.getSavedFileInfo(obj)
|
|
|
+ },},getFileInfo:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.filePath) {
|
|
|
+ obj.apFilePath = obj.filePath
|
|
|
+ delete obj.filePath
|
|
|
+ }
|
|
|
+ return my.getFileInfo(obj)
|
|
|
+ },},downloadFile:{fn: function fn(obj = {}) {
|
|
|
+ const downloadFileReturnValue
|
|
|
+ = descObj.downloadFile.body.returnValue.props
|
|
|
+ if (obj.filePath !== undefined) {
|
|
|
+ utils.warn('支付宝暂不支持 filePath', {
|
|
|
+ apiName: 'downloadFile/filePath',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ my.downloadFile({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ res.tempFilePath = res.apFilePath
|
|
|
+ if (res.apFilePath) {
|
|
|
+ res.statusCode = 200
|
|
|
+ }
|
|
|
+ delete res.apFilePath
|
|
|
+ if (!res.statusCode) {
|
|
|
+ utils.warn('支付宝暂不支持statusCode', {
|
|
|
+ apiName: 'downloadFile/statusCode',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ obj.success && obj.success(res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ const task = {
|
|
|
+ abort() {},
|
|
|
+ offHeadersReceived() {},
|
|
|
+ offProgressUpdate() {},
|
|
|
+ onHeadersReceived() {},
|
|
|
+ onProgressUpdate() {},
|
|
|
+ }
|
|
|
+ return utils.defineGetter(task, downloadFileReturnValue, (_obj, prop) => {
|
|
|
+ utils.warn(`downloadFile的返回值不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `downloadFile/${prop}`,
|
|
|
+ errorType: downloadFileReturnValue[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },},uploadFile:{fn: function fn(obj = {}) {
|
|
|
+ const uploadFileValue = descObj.uploadFile.body.returnValue.props
|
|
|
+ if (obj.name) {
|
|
|
+ obj.fileName = obj.name
|
|
|
+ delete obj.name
|
|
|
+ }
|
|
|
+ const pathArr = obj.filePath.split('.')
|
|
|
+ obj.fileType = 'image'
|
|
|
+ const fileType = {
|
|
|
+ video: ['ogg', 'avi', 'wma', 'rmvb', 'rm', 'flash', 'mp4', '3gp'],
|
|
|
+ audio: ['wav', 'mp3'],
|
|
|
+ }
|
|
|
+ const typeName = pathArr[pathArr.length - 1]
|
|
|
+ Object.keys(fileType).forEach((key) => {
|
|
|
+ fileType[key].forEach((item) => {
|
|
|
+ if (typeName.toLowerCase() === item) {
|
|
|
+ obj.fileType = key
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ my.uploadFile(obj)
|
|
|
+ const task = {
|
|
|
+ abort() {},
|
|
|
+ offHeadersReceived() {},
|
|
|
+ offProgressUpdate() {},
|
|
|
+ onHeadersReceived() {},
|
|
|
+ onProgressUpdate() {},
|
|
|
+ }
|
|
|
+ return utils.defineGetter(task, uploadFileValue, (_obj, prop) => {
|
|
|
+ utils.warn(`uploadFile的返回值不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `uploadFile/${prop}`,
|
|
|
+ errorType: uploadFileValue[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },},connectSocket:{fn: function fn(obj = {}) {
|
|
|
+ const connectSocketParams = descObj.connectSocket.body.params.props
|
|
|
+ const params = utils.defineGetter(
|
|
|
+ obj,
|
|
|
+ connectSocketParams,
|
|
|
+ (_obj, prop) => {
|
|
|
+ utils.warn(`connectSocket的参数不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `connectSocket/${prop}`,
|
|
|
+ errorType: connectSocketParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ },
|
|
|
+ )
|
|
|
+ my.connectSocket(params)
|
|
|
+ const task = {
|
|
|
+ close(_obj = {}) {
|
|
|
+ my.closeSocket(_obj)
|
|
|
+ },
|
|
|
+ onClose(fn) {
|
|
|
+ my.onSocketClose(fn)
|
|
|
+ },
|
|
|
+ onError(fn) {
|
|
|
+ my.offSocketOpen(fn)
|
|
|
+ },
|
|
|
+ onMessage(fn) {
|
|
|
+ my.onSocketMessage(fn)
|
|
|
+ },
|
|
|
+ onOpen(fn) {
|
|
|
+ my.onSocketOpen((res) => {
|
|
|
+ fn(res)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ send(_obj = {}) {
|
|
|
+ my.sendSocketMessage(_obj)
|
|
|
+ },
|
|
|
+ }
|
|
|
+ return task
|
|
|
+ },},onSocketOpen:{fn: function fn(obj) {
|
|
|
+ my.onSocketOpen((res) => {
|
|
|
+ utils.warn('onSocketOpen 成功回调缺少header', {
|
|
|
+ apiName: 'onSocketOpen/header',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ obj(res)
|
|
|
+ })
|
|
|
+ },},closeSocket:{fn: function fn(obj = {}) {
|
|
|
+ const closeSocketParams = descObj.closeSocket.body.params.props
|
|
|
+ const params = utils.defineGetter(
|
|
|
+ obj,
|
|
|
+ closeSocketParams,
|
|
|
+ (_obj, prop) => {
|
|
|
+ utils.warn(`closeSocket的参数不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `closeSocket/${prop}`,
|
|
|
+ errorType: closeSocketParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ },
|
|
|
+ )
|
|
|
+ my.closeSocket(params)
|
|
|
+ },},getRecorderManager:{fn: function fn() {
|
|
|
+ const getRecorderManagerProps
|
|
|
+ = descObj.getRecorderManager.body.returnValue.props
|
|
|
+ const RecorderManager = my.getRecorderManager()
|
|
|
+ for (const key in getRecorderManagerProps) {
|
|
|
+ if (getRecorderManagerProps[key].type === 0) {
|
|
|
+ RecorderManager[key] = () => {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return utils.defineGetter(
|
|
|
+ RecorderManager,
|
|
|
+ getRecorderManagerProps,
|
|
|
+ (obj, prop) => {
|
|
|
+ utils.warn(`getRecorderManager的返回值不支持 ${prop} 属性!`, {
|
|
|
+ apiName: `getRecorderManager/${prop}`,
|
|
|
+ errorType: getRecorderManagerProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ },
|
|
|
+ )
|
|
|
+ },},setStorageSync:{fn:function fn(key = '', data = '') {
|
|
|
+ return my.setStorageSync({
|
|
|
+ key,
|
|
|
+ data,
|
|
|
+ })
|
|
|
+ },},getStorage:{fn:function fn(obj) {
|
|
|
+ return my.getStorage({
|
|
|
+ key: obj.key,
|
|
|
+ success: (res) => {
|
|
|
+ if (
|
|
|
+ res.message
|
|
|
+ && res.message === '查无此key'
|
|
|
+ && typeof obj.fail === 'function'
|
|
|
+ ) {
|
|
|
+ const Msg = {
|
|
|
+ errMsg: 'getStorage:fail data not found',
|
|
|
+ }
|
|
|
+ obj.fail(Msg)
|
|
|
+ } else if (typeof obj.success === 'function') {
|
|
|
+ obj.success(res)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ complete: (res) => {
|
|
|
+ if (typeof obj.complete === 'function') {
|
|
|
+ if (res.message && res.message === '查无此key') {
|
|
|
+ const Msg = {
|
|
|
+ errMsg: 'getStorage:fail data not found',
|
|
|
+ }
|
|
|
+ obj.complete(Msg)
|
|
|
+ } else {
|
|
|
+ obj.complete(res)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},getStorageSync:{fn: function fn(key = '') {
|
|
|
+ const storeData = my.getStorageSync({
|
|
|
+ key,
|
|
|
+ })
|
|
|
+
|
|
|
+ return storeData.data || ''
|
|
|
+ },},removeStorageSync:{fn: function fn(key = '') {
|
|
|
+ return my.removeStorageSync({
|
|
|
+ key,
|
|
|
+ })
|
|
|
+ },},removeStorage:{fn:function fn(obj) {
|
|
|
+ const Msg = {
|
|
|
+ errMsg: 'removeStorage:ok',
|
|
|
+ }
|
|
|
+ return my.removeStorage({
|
|
|
+ ...obj,
|
|
|
+ success: () => {
|
|
|
+ if (typeof obj.success === 'function') {
|
|
|
+ obj.success(Msg)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ complete: () => {
|
|
|
+ if (typeof obj.complete === 'function') {
|
|
|
+ obj.complete(Msg)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},createSelectorQuery:{fn: function fn() {
|
|
|
+ const SQ = my.createSelectorQuery()
|
|
|
+
|
|
|
+ function Query() {
|
|
|
+ this.query = SQ
|
|
|
+ this._selectType = 0 // 0: array, 1: object
|
|
|
+ this.in = function(p) {
|
|
|
+ if (typeof this.query.in === 'function') {
|
|
|
+ this.query.in(p)
|
|
|
+ return this
|
|
|
+ } else {
|
|
|
+ return this
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.select = function(p) {
|
|
|
+ const s = utils.parseSelector(p)
|
|
|
+ this.query.select(s)
|
|
|
+ this._selectType = 1
|
|
|
+ return this
|
|
|
+ }
|
|
|
+
|
|
|
+ this.node = () => {
|
|
|
+ utils.warn('支付宝暂不支持使用SelectorQuery NodesRef.node', {
|
|
|
+ apiName: 'SelectorQuery NodesRef.node',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ })
|
|
|
+ return this
|
|
|
+ }
|
|
|
+
|
|
|
+ this.selectAll = function(p) {
|
|
|
+ const s = utils.parseSelector(p)
|
|
|
+ this.query.selectAll(s)
|
|
|
+ return this
|
|
|
+ }
|
|
|
+
|
|
|
+ this.selectViewport = function(p) {
|
|
|
+ this.query.selectViewport(p)
|
|
|
+ return this
|
|
|
+ }
|
|
|
+
|
|
|
+ this.boundingClientRect = function(p) {
|
|
|
+ this.query.boundingClientRect()
|
|
|
+ this.exec(p)
|
|
|
+ return this
|
|
|
+ }
|
|
|
+
|
|
|
+ this.scrollOffset = function(p) {
|
|
|
+ const self = this
|
|
|
+ this.query.scrollOffset().exec((ret) => {
|
|
|
+ if (self._selectType) {
|
|
|
+ self._selectType = 0
|
|
|
+ if (Array.isArray(ret) && ret.length === 1) {
|
|
|
+ ret = ret[0]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ p && p(ret)
|
|
|
+ })
|
|
|
+ return this
|
|
|
+ }
|
|
|
+
|
|
|
+ this.exec = function(p) {
|
|
|
+ this.query.exec((ret) => {
|
|
|
+ if (Array.isArray(ret)) {
|
|
|
+ ret = ret.map((obj) => {
|
|
|
+ return Array.isArray(obj)
|
|
|
+ ? obj.map((item) => ({
|
|
|
+ ...item,
|
|
|
+ id: utils.nextUid(),
|
|
|
+ }))
|
|
|
+ : {
|
|
|
+ ...obj,
|
|
|
+ id: utils.nextUid(),
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (this._selectType) {
|
|
|
+ this._selectType = 0
|
|
|
+ if (Array.isArray(ret)) {
|
|
|
+ if (ret.length === 1) {
|
|
|
+ ret = ret[0]
|
|
|
+ } else if (ret.length > 1) {
|
|
|
+ utils.warn(
|
|
|
+ '支付宝SelectorQuery.exec查询结果按请求次序构成数组,数组中每项为一次查询的结果',
|
|
|
+ {
|
|
|
+ apiName: 'boundingClientRect',
|
|
|
+ errorType: 1,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ p && p(ret)
|
|
|
+ })
|
|
|
+ return this
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Query.prototype = SQ
|
|
|
+
|
|
|
+ const res = new Query()
|
|
|
+
|
|
|
+ return res
|
|
|
+ },},createIntersectionObserver:{fn: function fn(...p) {
|
|
|
+ const OB = my.createIntersectionObserver(...p)
|
|
|
+
|
|
|
+ function Observer() {
|
|
|
+ this.observer = OB
|
|
|
+ this.relativeTo = function(...args) {
|
|
|
+ const t = utils.parseSelector(args[0])
|
|
|
+ const o = args[1]
|
|
|
+ this.observer.relativeTo(t, o)
|
|
|
+ return this
|
|
|
+ }
|
|
|
+ this.relativeToViewport = function(...args) {
|
|
|
+ this.observer.relativeToViewport(...args)
|
|
|
+ return this
|
|
|
+ }
|
|
|
+ this.observe = function(...args) {
|
|
|
+ const t = utils.parseSelector(args[0])
|
|
|
+ const cb = args[1]
|
|
|
+ this.observer.observe(t, (ret) => {
|
|
|
+ cb && cb(ret)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Observer.prototype = OB
|
|
|
+
|
|
|
+ const res = new Observer()
|
|
|
+
|
|
|
+ return res
|
|
|
+ },},createAnimation:{fn: function fn(obj = {}) {
|
|
|
+ if (obj.timingFunction) {
|
|
|
+ obj.timeFunction = obj.timingFunction
|
|
|
+ delete obj.timingFunction
|
|
|
+ }
|
|
|
+ const animation = my.createAnimation(obj)
|
|
|
+ animation.config.delay = animation.config.delay || 0
|
|
|
+ animation.option = {
|
|
|
+ transition: animation.config,
|
|
|
+ transformOrigin: animation.config.transformOrigin,
|
|
|
+ }
|
|
|
+ return animation
|
|
|
+ },},showShareMenu:{fn: function fn() {
|
|
|
+ return my.showSharePanel()
|
|
|
+ },},saveVideoToPhotosAlbum:{fn: function fn(obj = {}) {
|
|
|
+ const params = {
|
|
|
+ ...obj,
|
|
|
+ src: obj.filePath,
|
|
|
+ }
|
|
|
+ return my.saveVideoToPhotosAlbum(params)
|
|
|
+ },},chooseAddress:{fn: function fn(obj = {}) {
|
|
|
+ my.getAddress({
|
|
|
+ success(_res) {
|
|
|
+ const result = {}
|
|
|
+ const res = _res.result
|
|
|
+ result.cityName = res.city
|
|
|
+ result.countyName = res.area
|
|
|
+ result.detailInfo = res.street
|
|
|
+ result.errMsg = 'chooseAddress:ok'
|
|
|
+ result.nationalCode = ''
|
|
|
+ result.postalCode = ''
|
|
|
+ result.provinceName = res.prov
|
|
|
+ result.telNumber = res.mobilePhone
|
|
|
+ result.userName = res.fullname
|
|
|
+
|
|
|
+ obj.success && obj.success(result)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},chooseVideo:{fn: function fn(obj = {}) {
|
|
|
+ my.chooseVideo({
|
|
|
+ success(result) {
|
|
|
+ result.tempFilePath = result.apFilePath
|
|
|
+ delete result.apFilePath
|
|
|
+ obj.success && obj.success(result)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},getUpdateManager:{fn: function fn() {
|
|
|
+ return my.getUpdateManager()
|
|
|
+ },},getUserInfo:{fn: function fn(obj) {
|
|
|
+ const getUserInfoSuccessRes = descObj.getUserInfo.body.params.props
|
|
|
+ if (obj.withCredentials || obj.lang) {
|
|
|
+ utils.warn(
|
|
|
+ 'GetAuthUserInfo不支持 withCredentials 或 lang 参数.',
|
|
|
+ {
|
|
|
+ apiName: 'getUserInfo/withCredentials 或 getUserInfo/lang',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ my.getAuthCode({
|
|
|
+ scopes: 'auth_user',
|
|
|
+ success: () => {
|
|
|
+ my.getAuthUserInfo({
|
|
|
+ ...obj,
|
|
|
+ success(res) {
|
|
|
+ utils.defineGetter(res, getUserInfoSuccessRes, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `getUserInfo的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `getUserInfo/${prop}`,
|
|
|
+ errorType: getUserInfoSuccessRes[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+
|
|
|
+ const _res = {}
|
|
|
+ _res.userInfo = res
|
|
|
+ _res.userInfo.avatarUrl = res.avatar
|
|
|
+ obj.success && obj.success(_res)
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},reportAnalytics:{fn: function fn(key, value) {
|
|
|
+ if (typeof value !== 'object') {
|
|
|
+ if (!(value instanceof Object)) {
|
|
|
+ value = {
|
|
|
+ data: value,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return my.reportAnalytics(key, value)
|
|
|
+ },},requestPayment:{fn: function fn(obj = {}) {
|
|
|
+ const requestPaymentParams = descObj.requestPayment.body.params.props
|
|
|
+ const params = utils.defineGetter(obj, requestPaymentParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `requestPayment的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `requestPayment/${prop}`,
|
|
|
+ errorType: requestPaymentParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.tradePay(params)
|
|
|
+ },},authorize:{fn: function fn(obj = {}) {
|
|
|
+ const authorizeParams = descObj.authorize.body.params.props
|
|
|
+ if (obj.scope) {
|
|
|
+ delete obj.scope
|
|
|
+ obj.scopes = 'auth_user'
|
|
|
+ }
|
|
|
+ const params = utils.defineGetter(obj, authorizeParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `authorize的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `authorize/${prop}`,
|
|
|
+ errorType: authorizeParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.getAuthCode(params)
|
|
|
+ },},addCard:{fn: function fn(obj) {
|
|
|
+ const addCardParams = descObj.addCard.body.params.props
|
|
|
+ const params = utils.defineGetter(obj, addCardParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `addCard的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `startSoterAuthentication/${prop}`,
|
|
|
+ errorType: addCardParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.addCardAuth(params)
|
|
|
+ },},startSoterAuthentication:{fn: function fn(obj) {
|
|
|
+ const startSoterAuthenticationParams = descObj.startSoterAuthentication.body.params.props
|
|
|
+ const params = utils.defineGetter(obj, startSoterAuthenticationParams, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `startSoterAuthentication的参数不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: prop,
|
|
|
+ errorType: startSoterAuthenticationParams[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.ap.faceVerify(params)
|
|
|
+ },},getSetting:{fn: function fn(options = {}) {
|
|
|
+ function setLocation(cb) {
|
|
|
+ my.getLocation({
|
|
|
+ success(res) {
|
|
|
+ res.authSetting['scope.userLocation'] = true
|
|
|
+ cb && cb()
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (my.getSetting) {
|
|
|
+ my.getSetting({
|
|
|
+ ...options,
|
|
|
+ success(res) {
|
|
|
+ const { success } = options
|
|
|
+
|
|
|
+ if (!success) { return }
|
|
|
+
|
|
|
+ success({
|
|
|
+ authSetting: utils.mapAuthSetting(res.authSetting),
|
|
|
+ })
|
|
|
+ },
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ const res = {}
|
|
|
+ res.authSetting = {}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * scope=[userInfo, location, album, camera, audioRecord]
|
|
|
+ */
|
|
|
+
|
|
|
+ if (options && options.success) {
|
|
|
+ setLocation(() => {
|
|
|
+ options.success(res)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },},openSetting:{fn: function fn(options = {}) {
|
|
|
+ my.openSetting({
|
|
|
+ ...options,
|
|
|
+ success: (res) => {
|
|
|
+ const { success } = options
|
|
|
+
|
|
|
+ if (!success) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ success({
|
|
|
+ authSetting: utils.mapAuthSetting(res.authSetting),
|
|
|
+ })
|
|
|
+ },
|
|
|
+ })
|
|
|
+ },},hideHomeButton:{fn: function fn(obj = {}) {
|
|
|
+ const hideHomeButtonProps = descObj.hideHomeButton.body.params.props
|
|
|
+ const param = utils.defineGetter(obj, hideHomeButtonProps, (_obj, prop) => {
|
|
|
+ utils.warn(
|
|
|
+ `hideHomeButton的返回值不支持 ${prop} 属性!`,
|
|
|
+ {
|
|
|
+ apiName: `hideHomeButton/${prop}`,
|
|
|
+ errorType: hideHomeButtonProps[prop].type,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ })
|
|
|
+ return my.hideBackHome(param)
|
|
|
+ },},cloud:{init: function init() {
|
|
|
+ utils.warn(
|
|
|
+ '支付宝暂不支持init',
|
|
|
+ {
|
|
|
+ apiName: 'cloud/init',
|
|
|
+ errorType: 0,
|
|
|
+ type: 'api',
|
|
|
+ },
|
|
|
+ )
|
|
|
+ },},nextTick:function nextTick(fn, delay = 0) {
|
|
|
+ if (typeof fn === 'function') {
|
|
|
+ if (!delay) {
|
|
|
+ Promise.resolve().then(fn)
|
|
|
+ } else {
|
|
|
+ setTimeout(fn, delay)
|
|
|
+ }
|
|
|
+ }
|
|
|
+},}
|
|
|
+module.exports = apiObj;
|