import pages from '@/pages.json' import {ComponentInternalInstance} from 'vue'; import {isObject, isString, isUndefined, map} from "lodash"; import {qs} from "@/utils/index"; //获取某个元素的宽高 export function getDom(id: string, instance: ComponentInternalInstance | null): Promise { // const instance = getCurrentInstance(); return new Promise((resolve) => { const query = uni.createSelectorQuery().in(instance); query.select(id).boundingClientRect(data => { resolve(data) }).exec(); }) } //获取当前路由 export function getRouter() { const routes: any = getCurrentPages(); let options //#ifdef H5 options = routes[routes.length - 1].$page.options //#endif //#ifdef MP-WEIXIN options = routes[routes.length - 1]['options'] //#endif return routes[routes.length - 1].route + qs(options) } //获取tabBar高度 export function getTabBarHeight() { return uni.getSystemInfoSync().windowBottom } //获取顶部高度 export function getTopHeight() { return uni.getSystemInfoSync().statusBarHeight } //获取底部安全区域高度 export function getSafeAreaHeight() { return uni.getSystemInfoSync().safeAreaInsets?.bottom || 0 } //保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。 export function navigateTo(OBJECT: UniNamespace.NavigateToOptions | string) { if (isObject(OBJECT)) { uni.navigateTo(OBJECT) } if (isString(OBJECT)) { uni.navigateTo({url: OBJECT}) } } //关闭当前页面,跳转到应用内的某个页面。 export function redirectTo(OBJECT: UniNamespace.RedirectToOptions | string) { if (isObject(OBJECT)) { uni.redirectTo(OBJECT) } if (isString(OBJECT)) { uni.redirectTo({url: OBJECT}) } } //关闭所有页面,打开到应用内的某个页面。 export function reLaunch(OBJECT: UniNamespace.ReLaunchOptions | string) { if (isObject(OBJECT)) { uni.reLaunch(OBJECT) } if (isString(OBJECT)) { uni.redirectTo({url: OBJECT}) } } //跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。 export function switchTab(OBJECT: UniNamespace.SwitchTabOptions | string) { if (isObject(OBJECT)) { uni.switchTab(OBJECT) } if (isString(OBJECT)) { uni.switchTab({url: OBJECT}) } } //关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。 export function navigateBack(OBJECT?: UniNamespace.NavigateBackOptions) { if (isObject(OBJECT)) { uni.navigateBack(OBJECT) } if (isString(OBJECT) || isUndefined(OBJECT)) { uni.navigateBack({delta: 1}) } } //判断是ios、android export function getPlatform(): 'ios' | 'android' { return uni.getSystemInfoSync().platform as 'ios' | 'android' } //获取屏幕宽 export function getWindowWidth() { return uni.getSystemInfoSync().windowWidth } //获取屏幕高 export function getWindowHeight() { return uni.getSystemInfoSync().windowHeight } //是否页面带有TabBar export function isTabBar() { return !!(pages as any).tabBar && (pages as any).tabBar.list.length > 0; } //显示消息提示框。 export function showToast(OBJECT: UniNamespace.ShowToastOptions | string) { if (isObject(OBJECT)) { uni.showToast(OBJECT) } if (isString(OBJECT)) { uni.showToast({title: OBJECT, icon: 'none'}) } } //隐藏消息提示框 export function hideToast() { uni.hideToast(); } //显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。 export function showLoading(OBJECT: UniNamespace.ShowLoadingOptions | string) { if (isObject(OBJECT)) { uni.showLoading(OBJECT) } if (isString(OBJECT)) { uni.showLoading({title: OBJECT}) } } //隐藏 loading 提示框。 export function hideLoading() { uni.hideLoading() } //显示模态弹窗,可以只有一个确定按钮,也可以同时有确定和取消按钮。 export function showModal(OBJECT: UniNamespace.ShowModalOptions): Promise { return new Promise((resolve, reject) => { uni.showModal({ ...OBJECT, success: (result) => { if (result.confirm) { resolve(result) } if (result.cancel) { reject(result) } }, fail: (err) => { reject(err) } }) }) } //从底部向上弹出操作菜单 export function showActionSheet(itemList: any[], key?: string) { return new Promise((resolve, reject) => { if (itemList.length > 0) { let itemLists = itemList if (isObject(itemList[0])) { if (key) { itemLists = map(itemList, key) } else { resolve('请传入对象展示字段') return } } uni.showActionSheet({ itemList: itemLists, success: (result) => { resolve({value: itemList[result.tapIndex], index: result.tapIndex, itemList}) }, fail: (err) => { resolve(err) } }) } else { resolve('数组长度为0') } }) } export function getLocation(): Promise { return new Promise(async (resolve, reject) => { uni.getLocation({ type: 'gcj02', success: (res) => { resolve(res) }, fail: (err) => { reject(err) } }) }) } //申请权限 export function requestPermissions(permissions: string, message: string) { return new Promise((resolve, reject) => { plus.android.requestPermissions([permissions], (resultObj) => { let result = 0 for (let i = 0; i < resultObj.granted.length; i++) { let grantedPermission = resultObj.granted[i]; if (permissions == grantedPermission) { result = 1 } } for (let i = 0; i < resultObj.deniedPresent.length; i++) { let deniedPresentPermission = resultObj.deniedPresent[i]; if (permissions == deniedPresentPermission) { result = 0 } } for (let i = 0; i < resultObj.deniedAlways.length; i++) { let deniedAlwaysPermission = resultObj.deniedAlways[i]; if (permissions == deniedAlwaysPermission) { result = -1 } } if (result === 1) { // @ts-ignore resolve() } else { reject() showToast({title: message, icon: 'none'}) } }) }) } //拨打电话。 export function makePhoneCall(phoneNumber: string) { if (getPlatform() === 'android') { requestPermissions('android.permission.CALL_PHONE', '请开启拨号权限').then(() => { uni.makePhoneCall({ phoneNumber: phoneNumber, success: (success) => { console.log('success', success) }, fail: (err) => { console.log('err', err) } }); }) } else { uni.makePhoneCall({ phoneNumber: phoneNumber, success: (success) => { console.log('success', success) }, fail: (err) => { console.log('err', err) } }); } } export function usePlayBackAudio(title: string, coverImgUrl: string) { let bgAudioManager: UniNamespace.BackgroundAudioManager | null = null function stop() { if (bgAudioManager) { bgAudioManager.stop() bgAudioManager = null } } stop() function play(src: string, text: string, isVibrateLong = false) { stop() bgAudioManager = uni.getBackgroundAudioManager(); bgAudioManager.title = title; bgAudioManager.singer = text; bgAudioManager.coverImgUrl = coverImgUrl; bgAudioManager.src = src; bgAudioManager.play() if (isVibrateLong) { uni.vibrateLong({}); } } return {play, stop} } //获取设备唯一 export function getIdfa() { let idfa = ''; try { if ('ios' == getPlatform()) { // @ts-ignore idfa = plus.device.uuid } if ('android' == getPlatform()) { let mainActivity: any = plus.android.runtimeMainActivity(); let Settings: any = plus.android.importClass("android.provider.Settings"); idfa = Settings.Secure.getString(mainActivity.getContentResolver(), Settings.Secure.ANDROID_ID) } } catch (e) { console.error('exception in getIdfa@dc-idfa!!', e); } return idfa; } //退出app export function exitApp() { if (uni.getSystemInfoSync().osName == 'ios') { //@ts-ignore plus.ios.import("UIApplication").sharedApplication().performSelector("exit")//退出 } if (uni.getSystemInfoSync().osName == 'android') { plus.runtime.quit(); //退出 } } //跳转到外部打开 export function openURL(url: string) { plus.runtime.openURL(url) } //重启app export function restartApp() { plus.runtime.restart() } //跳转到应用设置权限位置 export function goSettings() { if (getPlatform() === 'android') { let Intent = plus.android.importClass("android.content.Intent"); let Settings = plus.android.importClass("android.provider.Settings"); let Uri = plus.android.importClass("android.net.Uri"); let mainActivity = plus.android.runtimeMainActivity(); // @ts-ignore let intent = new Intent(); // @ts-ignore intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); // @ts-ignore let uri = Uri.fromParts("package", mainActivity.getPackageName(), null); intent.setData(uri); // @ts-ignore mainActivity.startActivity(intent); } if (getPlatform() === 'ios') { // @ts-ignore let UIApplication = plus.ios.import("UIApplication"); let application2 = UIApplication.sharedApplication(); // @ts-ignore let NSURL2 = plus.ios.import("NSURL"); let setting2 = NSURL2.URLWithString("app-settings:"); application2.openURL(setting2); plus.ios.deleteObject(setting2); plus.ios.deleteObject(NSURL2); plus.ios.deleteObject(application2); } } //打开第三方导航 export function openLocation(OBJECT: { latitude: number, longitude: number, name: string, address: string }) { uni.openLocation(OBJECT) } //设置标题 export function setTitle(title: string) { uni.setNavigationBarTitle({title}); } //发起支付宝支付 export function alipayPay(orderInfo: any) { return new Promise((resolve, reject) => { uni.requestPayment({ provider: 'alipay', orderInfo, success: (res) => { resolve(res) }, fail: (err) => { showModal({ content: '支付失败', showCancel: false }) } }); }); } // 发起微信支付 export function wxPay(orderInfo: any) { return new Promise((resolve, reject) => { uni.requestPayment({ provider: "wxpay", timeStamp: orderInfo.timestamp, nonceStr: orderInfo.noncestr, package: orderInfo.package, signType: "MD5", paySign: orderInfo.sign, orderInfo: { appid: orderInfo.appid, noncestr: orderInfo.noncestr, package: orderInfo.package, partnerid: orderInfo.partnerid, prepayid: orderInfo.prepayid, timestamp: orderInfo.timestamp, sign: orderInfo.sign, }, success: (res) => { resolve(res) }, fail: async (err) => { await showModal({ content: '支付失败', showCancel: false }) } }); }); } //将程序移动到后台 export function moveAppToBackground() { let main: any = plus.android.runtimeMainActivity(); main.moveTaskToBack(false); }