getpos.js 2.21 KB
// components/userinfo/getpos.js
let failCount=0;
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    hasAllowFail:{
      type:Boolean,
      value:false,
    }
  },

  /**
   * 组件的初始数据
   */
  data: {},
  attached(){
    //this.getPos()
  },
  /**
   * 组件的方法列表
   */
  methods: {
    getPos(){
      this._getPos().then(res => {
        console.log('wx.getLocation.then', res);
        failCount=0;
        this.triggerEvent("pos",res);
      }).catch((e) => {
        console.log('wx.getLocation.catch', failCount,e);
        if(this.data.hasAllowFail){
          this.triggerEvent("pos",{
            latitude: '',
            longitude: '',
          });
          return;
        }
        if(failCount>2){//定位失败
          failCount=0;
          wx.showModal({
            title:'定位失败',
            content:'请开启位置服务',
            showCancel:false,
            success:()=>{
              console.log('wx.showModal::success,给默认坐标');
              this.triggerEvent("pos",{
                latitude: 39.6846701,
                longitude: 118.1763001,
              });
            },
          })
          return;
        }
        if ('getLocation:fail auth deny' == e.errMsg
          || 'getLocation:fail:auth denied' == e.errMsg
          || 'getLocation:fail authorize no response' == e.errMsg) {
          this.selectComponent('#showModal').options({
            header: '定位失败',
            body: '需要地理位置授权'
          }).show();
          failCount=0;
        } else {
          failCount=failCount+1;
          setTimeout(() => {
            this.getPos()
          }, 500)
        }
      })
    },
    _getPos(){
      return new Promise((success, fail) => {
        let rex={latitude:'',longitude:''};
        wx.getLocation({
          type: 'gcj02',
          success: (res) => {
            rex=res;
            success(res)
          },
          fail: (res) => {
            fail(res)
          },
          complete: (res) => {
            console.log('wx.getLocation', res)
          }
        });
        setTimeout(()=>{
          success(rex)
        },2000)
      })
    },
    showModal(e){
      wx.openSetting()
    },
  }
})