/** * 截取日期 */ export const runcation = (date) => { return date.substring(0, 16) } // 返回距离 export function distance(lat1, lng1, lat2, lng2) { var that = this; let rad1 = lat1 * Math.PI / 180.0; let rad2 = lat2 * Math.PI / 180.0; let a = rad1 - rad2; let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0; let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos( rad2) * Math.pow( Math.sin(b / 2), 2))); s = s * 6378.137 * 1000; s = (Math.round(s * 10000) / 10000).toFixed(2); console.log(s) // s = s.toString(); // s = s.substring(0, s.indexOf('.') + 2); return s } // 登录 export function userLogin() { let that = this; let promise = new Promise((resolve, reject) => { uni.login({ provider: 'weixin', success: async function(loginRes) { let { code } = loginRes; let res = await that.$u.api.wxLogin({ code }) if (res.code === 200) { resolve(res); // that.$store.commit('setToken', res.data.token) // that.$store.commit('setUserInfo', res.data.userResponse) } else { reject(err) } } }); }) return promise; } const LOCATION_NOTICE_STORAGE_KEY = 'location_permission_notice_shown' const IMAGE_NOTICE_STORAGE_KEY = 'image_permission_notice_shown' const DEFAULT_LOCATION_NOTICE = { title: '获取位置信息', content: '为了给您分配附近的订单,并计算接送货的精准距离与导航路线,本应用需要获取您的位置信息。', confirmText: '已知晓' } const DEFAULT_IMAGE_NOTICE = { title: '获取相机权限', content: '为了支持您进行司机身份认证,以及方便您在取送件时拍照留存凭证,本应用需要获取您的相机与相册权限。', confirmText: '已知晓' } export function ensureLocationPermissionNotice(modalOptions = {}) { const hasShown = uni.getStorageSync(LOCATION_NOTICE_STORAGE_KEY) if (hasShown) { return Promise.resolve(true) } const options = Object.assign({}, DEFAULT_LOCATION_NOTICE, modalOptions) return new Promise((resolve) => { uni.showModal({ title: options.title, content: options.content, confirmText: options.confirmText, showCancel: false, success: (res) => { if (res.confirm) { uni.setStorageSync(LOCATION_NOTICE_STORAGE_KEY, true) resolve(true) return } resolve(false) }, fail: () => { resolve(false) } }) }) } export function getLocationWithNotice(locationOptions = {}, modalOptions = {}) { return ensureLocationPermissionNotice(modalOptions).then((confirmed) => { if (!confirmed) { return Promise.reject({ errMsg: 'location permission notice canceled' }) } return new Promise((resolve, reject) => { uni.getLocation(Object.assign({}, locationOptions, { success: (res) => { uni.$emit('locationPermissionGranted', res) if (typeof locationOptions.success === 'function') { locationOptions.success(res) } resolve(res) }, fail: (err) => { if (typeof locationOptions.fail === 'function') { locationOptions.fail(err) } reject(err) } })) }) }) } export function ensureImagePermissionNotice(modalOptions = {}) { const hasShown = uni.getStorageSync(IMAGE_NOTICE_STORAGE_KEY) if (hasShown) { return Promise.resolve(true) } const options = Object.assign({}, DEFAULT_IMAGE_NOTICE, modalOptions) return new Promise((resolve) => { uni.showModal({ title: options.title, content: options.content, confirmText: options.confirmText, showCancel: false, success: (res) => { if (res.confirm) { uni.setStorageSync(IMAGE_NOTICE_STORAGE_KEY, true) resolve(true) return } resolve(false) }, fail: () => { resolve(false) } }) }) } export function chooseImageWithNotice(imageOptions = {}, modalOptions = {}) { return ensureImagePermissionNotice(modalOptions).then((confirmed) => { if (!confirmed) { return Promise.reject({ errMsg: 'image permission notice canceled' }) } return new Promise((resolve, reject) => { uni.chooseImage(Object.assign({}, imageOptions, { success: (res) => { if (typeof imageOptions.success === 'function') { imageOptions.success(res) } resolve(res) }, fail: (err) => { const errMsg = (err && err.errMsg) || '' if (errMsg && !/cancel/i.test(errMsg)) { uni.showToast({ title: '需要授权相机权限', icon: 'none' }) } if (typeof imageOptions.fail === 'function') { imageOptions.fail(err) } reject(err) } })) }) }) } export function checkLocationPermission() { return new Promise((resolve) => { if (typeof uni.getAppAuthorizeSetting === 'function') { try { const setting = uni.getAppAuthorizeSetting() const locationAuthorized = setting.locationAuthorized resolve(locationAuthorized === 'authorized' || locationAuthorized === 'authorizedAlways') return } catch (e) { console.log('getAppAuthorizeSetting fail', e) } } uni.getSetting({ success: (res) => { const authSetting = res.authSetting || {} resolve(!!authSetting['scope.userLocation']) }, fail: () => { resolve(false) } }) }) }