| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import QQMapWX from '@/lib/qqmap-wx-jssdk.js'
- const qqmapsdk = new QQMapWX({
- key: 'TRLBZ-J3Z65-QDNIU-IS4SF-2W7HH-WFBTR',
- })
- export interface LocationResult {
- latitude: number
- longitude: number
- address?: string
- raw?: any
- }
- export function getLocation(
- type: UniApp.GetLocationOptions['type'] = 'gcj02'
- ): Promise<LocationResult> {
- return new Promise((resolve, reject) => {
- uni.getLocation({
- type,
- success(location) {
- qqmapsdk.reverseGeocoder({
- location: {
- latitude: location.latitude,
- longitude: location.longitude,
- },
- success(res: any) {
- resolve({
- latitude: location.latitude,
- longitude: location.longitude,
- address: res?.result?.address,
- raw: res,
- })
- },
- fail(err: any) {
- reject(err)
- },
- })
- },
- fail(error) {
- handleLocationAuth(error).then(resolve).catch(reject)
- },
- })
- })
- }
- function handleLocationAuth(error: unknown): Promise<LocationResult> {
- return new Promise((resolve, reject) => {
- uni.getSetting({
- success(setting) {
- if (setting.authSetting['scope.userLocation']) {
- reject(error)
- return
- }
- uni.showModal({
- title: '友情提示',
- content: '小程序需要获取您的定位功能才可使用',
- success(modal) {
- if (!modal.confirm) {
- reject(error)
- return
- }
- uni.openSetting({
- success(openRes) {
- resolve({
- latitude: 0,
- longitude: 0,
- raw: openRes,
- })
- },
- fail(err) {
- reject(err)
- },
- })
- },
- })
- },
- fail(err) {
- reject(err)
- },
- })
- })
- }
|