import store from '@/store/index.js' import wx from 'weixin-js-sdk' import { getConfigInfo, wxConfig } from '@/common/utils/util' // 不含icon提示框 export const toast = str => { return new Promise((resolve, reject) => { if (str.length < 20) { uni.showToast({ title: str, icon: 'none', duration: 1500, success: () => { setTimeout(() => { resolve }, 1500) } }) } else { uni.showModal({ title: '提示', content: String(str), showCancel: false, confirmText: '我知道了', success(res) { if (res.confirm) { resolve(res) } else { reject() } } }) } }) } // 成功提示框 export const successToast = str => { return new Promise((resolve, reject) => { uni.showToast({ title: str || '请求成功', icon: 'success', duration: 1500, success: () => { setTimeout(() => { resolve() }, 1500) } }) }) } // loading export const showLoading = () => { return new Promise((resolve, reject) => { uni.showLoading({ success: () => { resolve() } }) }) } // 提示loading export const tipLoading = str => { return new Promise((resolve, reject) => { uni.showLoading({ title: str, success: () => { resolve() } }) }) } // 隐藏loading export const hideLoading = () => { return new Promise((resolve, reject) => { uni.hideLoading({ success: () => { resolve() } }) }) } // 模态弹窗 export const modal = (options = {}) => { if (!options) return const { title, content, showCancel, cancelText, cancelColor, confirmText, confirmColor } = Object.assign( {}, options.content ? options : { content: options } ) return new Promise((resolve, reject) => { uni.showModal({ title: title || '提示', content: String(content), showCancel: typeof showCancel == 'boolean' ? showCancel : true, cancelText: cancelText || '取消', cancelColor: cancelColor || '#323233', confirmText: confirmText || '确定', confirmColor: confirmColor || '#3D8FFD', complete(res) { if (res.confirm) { resolve(res) } else { reject() } } }) }) } // 弹窗提示 export const tips = text => { modal({ content: text, showCancel: false }) .then(() => {}) .catch(() => {}) } /** * 跳转页面 navigateTo * 保留当前页面,跳转到应用内的某个页面 * @param {String} url 需要跳转的页面 * @param {Boolean} isAuth 是否需要鉴权 * @returns */ export const navPage = (url, isAuth = 0) => { if ((isAuth && store.state.token) || !isAuth) { this.$navToPage({ url, fail: err => { console.log('页面跳转失败', url, err) } }) } else { this.$navToPage({ url: '/pages/login/index' }) } } /** * 跳转页面 redirectTo * 关闭当前页面,跳转到应用内的某个页面 * @param {String} url 需要跳转的页面 * @param {Boolean} isAuth 是否需要鉴权 * @returns */ export const redPage = (url, isAuth = 0) => { if ((isAuth && store.state.token) || !isAuth) { uni.redirectTo({ url, fail: err => { console.log('页面跳转失败', url, err) } }) } else { this.$navToPage({ url: '/pages/login/index' }) } } /** * 返回页面 * @param {Number} num 返回的页面数 * @param {Number} time 延时返回 * @returns */ export const backPage = (num = 1, time = 0) => { if (!num) return false setTimeout(() => { uni.navigateBack({ delta: num }) }, time) } /** * 拨打电话 * @param {String} phone 用户隐私号 * @param {String} orderId 服务单id,如果需要请求记录接口 */ export const callPhone = phone => { if (!phone) return modal({ content: '手机号码不存在', showCancel: false }) .then(() => {}) .catch(() => {}) uni.makePhoneCall({ phoneNumber: phone, success: () => { // logCallPhone(orderId); } }) } /** * 复制 * @param {String} val 复制内容 */ export const copy = val => { uni.setClipboardData({ data: val, success: () => { successToast('复制成功') } }) } /** * 打开导航 */ export const openLocation = (options = {}) => { if (!options) return const { lat, lng, name, address } = options wxConfig(undefined, undefined, () => { wx.openLocation({ latitude: Number(lat), longitude: Number(lng), name, address, success: () => { console.log('success') } }) }) } // 获取当前定位 export const getLocation = async function () { return new Promise((resolve, reject) => { wxConfig(undefined, undefined, () => { wx.getLocation({ type: 'gcj02', isHighAccuracy: true, geocode: true, success: res => { resolve(res) }, fail: err => { reject('获取当前定位失败') modal({ title: '提示', content: '获取当前定位失败', showCancel: false }).then(() => {}) } }) }) }) } // 获取地址 export const getAddress = async function () { const location = await getLocation() if (!location) { return tips('获取定位失败,请检查是否开启手机位置信息权限') } return new Promise((resolve, reject) => { uni.request({ url: 'https://restapi.amap.com/v3/geocode/regeo', method: 'GET', data: { location: location.longitude + ',' + location.latitude, key: '428a7111e02ea8367a3b34804eaa025b' }, success: res => { resolve({ longitude: location.longitude, latitude: location.latitude, address: res.data.regeocode.formatted_address, province: res.data.regeocode.addressComponent.province, city: res.data.regeocode.addressComponent.city, area: res.data.regeocode.addressComponent.district, street: res.data.regeocode.addressComponent.township }) }, fail: function (err) { console.log('地址解析失败' + err) } }) }) } // 判断微信环境 export function isWeixin() { if (navigator && navigator.userAgent) { var ua = navigator.userAgent.toLowerCase() if (ua.indexOf('micromessenger') != -1) { return true } else { return false } } else { return false } } // 解析地址栏参数 export function getQueryVariable(variable) { // 从?开始获取后面的所有数据 var query = window.location.search.substring(1) // 从字符串&开始分隔成数组split var vars = query.split('&') // 遍历该数组 for (var i = 0; i < vars.length; i++) { // 从等号部分分割成字符 var pair = vars[i].split('=') // 如果第一个元素等于 传进来的参的话 就输出第二个元素 if (pair[0] == variable) { return pair[1] } } return undefined } export const getZero = num => { // 个位数前补0 if (parseInt(num) < 10) { num = '0' + num } return num } export const getNowDate = () => { const date = new Date() let Y = getZero(date.getFullYear()) let M = getZero(date.getMonth() + 1) let D = getZero(date.getDate()) return `${Y}-${M}-${D}` } export const getNowDatetime = () => { const date = new Date() let Y = getZero(date.getFullYear()) let M = getZero(date.getMonth() + 1) let D = getZero(date.getDate()) let h = getZero(date.getHours()) let m = getZero(date.getMinutes()) let s = getZero(date.getSeconds()) return `${Y}-${M}-${D} ${h}:${m}:${s}` } export default { toast, successToast, showLoading, tipLoading, hideLoading, modal, tips, navPage, redPage, backPage, callPhone, copy, openLocation, getLocation, getAddress, getNowDate, getNowDatetime, getZero }