import {confirmModal} from "./app"; import {objectToStr, promisify, sleep, strToObject} from "@/utils/util"; import {_openAdapter} from "@/utils/ble/tools"; import platfrom from "@/utils/platform"; export const globalPageMeta = () => { return { pageStyle: `--statusBarHeight:${uni.$u.sys().statusBarHeight}px;--status-bar-height:${uni.$u.sys().statusBarHeight}px !important;`, } } export const setPageStyle = (str = '', obj = {}) => { let arr = strToObject(str) arr = Object.assign(arr, obj) return objectToStr(arr) } export const deletePageStyle = (str = '', keyArr = []) => { let arr = strToObject(str) keyArr.forEach((it) => { delete arr[it] }) return objectToStr(arr) } export const getNetworkType = () => { return promisify(uni.getNetworkType) } /** * 保持屏幕常亮 */ export const setKeepScreenOn = () => { // #ifdef H5 return true // #endif uni.setKeepScreenOn({ keepScreenOn: true }); } /** * 获取手机信息 * @returns {Promise} */ export const getSystemInfo = () => { return uni.getSystemInfoSync(); } /** * 获取用户授权信息 * @returns {Promise} */ export const getSetting = () => { return promisify(uni.getSetting) } /** * 打开授权设置页面 * @returns {Promise} */ export const openSetting = () => { return promisify(uni.openSetting) } /** * 获取用户在授权设置页操作完成后,返回时指定的权限授权情况 * @param scope * @returns {Promise} */ export function authorize(scope) { return promisify(uni.authorize, { scope, }).then(() => { return true }).catch((e) => { throw '用户拒绝了授权' }) } export const getBluetoothStatus = async (open = true) => { let bluetoothEnabled = false switch (platfrom) { case "APP": const BluetoothAdapter = plus.android.importClass('android.bluetooth.BluetoothAdapter'); // 引入Java 蓝牙类 const blueadapter = BluetoothAdapter.getDefaultAdapter(); //拿到默认蓝牙适配器方法 bluetoothEnabled = blueadapter.isEnabled() if (!bluetoothEnabled && open) { blueadapter.enable() uni.showLoading('请稍等蓝牙初始化中~~~') await sleep(2000) await _openAdapter() uni.hideLoading() } break; default: const res = await getSystemInfo() bluetoothEnabled = res.bluetoothEnabled if (!bluetoothEnabled && open) { throw '请检查系统蓝牙是否已开启' } if (bluetoothEnabled) bluetoothEnabled = await checkWeiXinAuth('bluetooth', open, '蓝牙') break; } return bluetoothEnabled } export const getLocationStatus = async (open = true, auth = false) => { let locationEnabled = false switch (platfrom) { case "APP": const context = plus.android.importClass("android.content.Context"); const locationManager = plus.android.importClass("android.location.LocationManager"); const main = plus.android.runtimeMainActivity(); const mainSvr = main.getSystemService(context.LOCATION_SERVICE); locationEnabled = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER) if (!locationEnabled && open) { await confirmModal('请打开定位服务功能', { showCancel: false, // 不显示取消按钮 }).then(() => { if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) { const Intent = plus.android.importClass('android.content.Intent'); const Settings = plus.android.importClass('android.provider.Settings'); const intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); main.startActivity(intent); // 打开系统设置GPS服务页面 } }, () => { throw '请打开定位服务功能' }) } break; default: const res = await getSystemInfo() locationEnabled = res.locationEnabled if (!res.locationEnabled && open) throw '请检查系统定位是否已开启' break; } return locationEnabled } export const checkBleAuth = async () => { await getBluetoothStatus(true) await getLocationStatus(true) } export const checkWeiXinAuth = async (auth, openSet = false, keyword = '') => { const settingData = await getSetting(); let result = false //判断是否有'scope.*'属性 if (settingData.authSetting.hasOwnProperty(`scope.${auth}`)) { //'scope.*'属性存在,且为false result = settingData.authSetting[`scope.${auth}`] } if (!result) { if (openSet) { await confirmModal(`请确认是否已开启${keyword}授权`, { confirmText: '去授权', }).then(async () => { await openSetting() await authorize(`scope.${auth}`) if (auth == 'bluetooth') await _openAdapter() }).catch(() => { throw `用户拒绝了${keyword}授权` }) } else { return result } } return result } export const getLocation = async () => { return new Promise(async (resolve, reject) => { let result = { lng: 0, lat: 0, } promisify(uni.getLocation).then(({longitude, latitude}) => { result.lng = longitude result.lat = latitude resolve(result) }).catch(() => { resolve(result) }) }) } export const makePhoneCall = (tel = '') => { if (!tel) return false // #ifdef H5 return false // #endif uni.makePhoneCall({ phoneNumber: tel, success: () => { }, fail: (res) => { console.log("拨打电话失败!", res) } }) } /** * 获取类信息 * @param obj * @param selector * @returns {Promise} */ export const getDomInfo = (obj, selector, type = 1) => { return new Promise((resolve) => { let div = uni.createSelectorQuery().in(obj).select(selector) switch (type) { case 1: div.boundingClientRect(function (res) { resolve(res) }).exec() break case 2: div.scrollOffset(function (res) { resolve(res) }).exec() break } }) }