394 lines
8.8 KiB
JavaScript

'use strict';
import timeago from './timeago.min'
import dateFormat from './dateformat'
import distance from './distance'
import QQMapWX from './qqmap-wx-jssdk.min'
import {
gcj02tobd09
} from './coordtransform'
import { host, qqmapKey } from '../config'
const qqmap = new QQMapWX({
key: qqmapKey
});
function resolveAdInfo(adInfo) {
const {city, district, adcode} = adInfo
return {
city, district,
district_id: adcode,
city_id: adcode.replace(/\d{2}$/, '00')
}
}
// 解析地址
export function reverseGeocoder(options) {
const {
location, success, complete
} = options
qqmap.reverseGeocoder({
location,
success: function (res) {
var address = resolveAdInfo(res.result.ad_info)
success && success(address)
},
fail: function (err) {
console.log(err)
},
complete
})
}
// 获取当前地理位置
export function getCurrentAddressList(options) {
const {
success, complete
} = options
wx.getLocation({
type: 'gcj02',
success(res) {
getAddressFromLocation({
location: {
latitude: res.latitude,
longitude: res.longitude,
},
success, complete
})
},
fail(res) {
console.log(res.errMsg)
if (res.errMsg == 'getLocation:fail auth deny' && wx.openSetting) {
confirm({
content: '若不授权地理位置权限, 则无法正常使用爱跑腿外卖, 请重新授权地理位置权限',
cancelText: '不授权',
confirmText: '授权',
ok() {
wx.openSetting({
success(res) {
console.log(res)
if (res.authSetting['scope.userLocation']) {
getCurrentAddressList(options)
} else {
alert('获取用户地址失败')
}
}
})
}
})
} else {
alert('获取用户地址失败')
}
}
})
}
// 地点搜索
export function searchAddressList(options) {
const {
keyword, success
} = options
getCurrentCity(function (cityName) {
qqmap.getSuggestion({
region: cityName,
keyword,
success(res) {
success && success(res.data)
}
})
})
}
// 获取当前地址
export function getCurrentAddress(callback) {
getCurrentAddressList({
success(addressList) {
if (addressList.length > 0) {
callback(addressList[0])
}
}
})
}
// 获取当前城市
var cityName;
export function getCurrentCity(callback) {
if (cityName) {
return callback && callback(cityName)
}
wx.getLocation({
type: 'gcj02',
success(res) {
qqmap.reverseGeocoder({
location: {
longitude: res.longitude,
latitude: res.latitude
},
success: function (res) {
cityName = res.result.address_component.city
callback && callback(cityName)
}
})
},
fail(res) {
console.log(res.errMsg)
alert('获取用户地址失败')
}
})
}
// 根据坐标获取地址信息
export function getAddressFromLocation(options) {
const {location, success} = options
getPois({
location,
success(pois) {
var addressList = []
pois.forEach(poi => {
var {
title, location,
address, ad_info
} = poi
addressList.push(Object.assign({
title, location, address
}, resolveAdInfo(ad_info)))
})
success && success(addressList)
}
})
}
// 获取兴趣点
export function getPois(options) {
const {
location, success, complete
} = options
qqmap.reverseGeocoder({
location,
get_poi: 1,
success: function (res) {
success && success(res.result.pois)
},
fail: function (err) {
console.log(err)
},
complete
})
}
export function getPrevPage() {
const pages = getCurrentPages()
return pages[pages.length - 2]
}
export function getCurrentPage() {
const pages = getCurrentPages()
return pages[pages.length - 1]
}
export function fetch(options) {
wx.request({
url: `https://${host}/${options.url}`,
data: Object.assign(options.data, {
'app_v': 'ipaotui_mall'
}),
method: options.method || 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: function (res) {
const data = res.data
if (data.State == 'Success') {
options.success && options.success(data.data)
} else {
alert(data.info)
options.error && options.error(data.info)
}
options.complete && options.complete()
}
})
}
// 提示框
export function alert(content, callback) {
wx.showModal({
title: '提示',
content: content,
showCancel: false,
success: callback
})
}
// 确认框
export function confirm(options) {
var {
content, confirmText, cancelText,
ok,
} = options
confirmText = confirmText || '确定'
cancelText = cancelText || '关闭'
wx.showModal({
content,
confirmText,
cancelText,
success(res) {
if (res.confirm) {
ok && ok()
}
}
})
}
// 拨打电话
export function makePhoneCall(phoneNum) {
confirm({
content: `是否拨打电话 ${phoneNum}`,
confirmText: '拨打',
ok() {
wx.makePhoneCall({
phoneNumber: phoneNum,
})
}
})
}
// 加载提示
export function showLoading() {
wx.showToast({
icon: 'loading',
duration: 10000,
title: '加载中...',
mask: true,
})
}
export function hideLoading() {
wx.hideToast()
}
// 时间格式化
export function datetimeFormat(unix_timestamp) {
return dateFormat(new Date(unix_timestamp * 1000), "mm月dd日 HH:MM")
}
// 坐标格式化
export function coordFormat(location) {
if (location.lat && location.lng) {
location = {
longitude: location.lng,
latitude: location.lat
}
}
// gcj02 转 bd09
var location = gcj02tobd09(location.longitude, location.latitude)
return {
longitude: location[0],
latitude: location[1]
}
}
// 倒计时格式化
export function countdownFormat(count) {
var seconds = count % 60
count = Math.floor(count / 60)
var minutes = count % 60
return `${minutes}分钟${seconds}`
}
// 字符串关键字分组
export function splitByKeyword(text, keyword) {
if (!text) {
return []
}
var arr = text.split(keyword)
var res = []
res.push({
text: arr[0],
isKeyword: false
})
for (let i = 1, len = arr.length; i < len; i++) {
res.push({
text: keyword,
isKeyword: true
}, {
text: arr[i],
isKeyword: false
})
}
return res
}
var userInfo
export function getUserInfo(cb) {
if (userInfo) {
return cb(userInfo)
} else {
wx.getUserInfo({
success(res) {
userInfo = res.userInfo
cb(userInfo)
},
fail(res) {
console.log(res)
if (res.errMsg == 'getUserInfo:fail auth deny' && wx.openSetting) {
confirm({
content: '若不授用户信息权限, 则无法正常显示用户头像和昵称, 请重新授权用户信息权限',
cancelText: '不授权',
confirmText: '授权',
ok() {
wx.openSetting({
success(res) {
console.log(res)
if (res.authSetting['scope.userInfo']) {
getUserInfo(cb)
} else {
alert('获取用户信息失败')
}
}
})
}
})
} else {
alert('获取用户信息失败')
}
}
})
}
}
// 微信支付
export function requestPayment(options) {
var {
data, success, error, complete
} = options
wx.requestPayment(Object.assign({
complete(res) {
if (res.errMsg == 'requestPayment:ok') {
alert('支付成功', function () {
success && success()
complete && complete()
})
} else if (res.errMsg == 'requestPayment:fail cancel') {
alert('用户取消支付', function () {
error && error()
complete && complete()
})
} else {
alert('支付失败', function () {
error && error()
complete && complete()
})
}
}
}, data))
}
// 分享
export function share(options) {
if (!wx.showShareMenu) {
return alert('当前微信版本过低, 无法使用该功能, 请升级到最新微信版本后重试.')
}
wx.showShareMenu(options)
}