choose-location-webview.js 2.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
import {
  MAP_ID
} from '../constants'

import {
  invoke
} from '../../bridge'

import {
  ANI_DURATION
} from '../../constants'

import {
Q
qiang 已提交
14
  registerPlusMessage,
15 16 17
  consumePlusMessage
} from '../../framework/plus-message'

Q
qiang 已提交
18 19
const CHOOSE_LOCATION_PATH = '_www/__uniappchooselocation.html'

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
const MESSAGE_TYPE = 'chooseLocation'

export function chooseLocation (params, callbackId) {
  const statusBarStyle = plus.navigator.getStatusBarStyle()
  const webview = plus.webview.create(
    CHOOSE_LOCATION_PATH,
    MAP_ID, {
      titleNView: {
        autoBackButton: true,
        backgroundColor: '#000000',
        titleColor: '#ffffff',
        titleText: '选择位置',
        titleSize: '17px',
        buttons: [{
          float: 'right',
          text: '完成',
          fontSize: '17px',
Q
qiang 已提交
37
          width: '60px',
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
          onclick: function () {
            webview.evalJS('__chooseLocationConfirm__()')
          }
        }]
      },
      popGesture: 'close',
      scrollIndicator: 'none'
    }, {
      __uniapp_type: 'map',
      __uniapp_statusbar_style: statusBarStyle,
      'uni-app': 'none'
    }
  )
  if (statusBarStyle === 'dark') {
    plus.navigator.setStatusBarStyle('light')
    webview.addEventListener('popGesture', ({
      type,
      result
    }) => {
      if (type === 'start') {
        plus.navigator.setStatusBarStyle('dark')
      } else if (type === 'end' && !result) {
        plus.navigator.setStatusBarStyle('light')
      }
    })
Q
qiang 已提交
63 64 65 66 67 68 69
  }
  let index = 0
  let onShow = function () {
    index++
    if (index === 2) {
      webview.evalJS(`__chooseLocation__(${JSON.stringify(params)})`)
    }
70 71
  }
  webview.addEventListener('loaded', onShow)
Q
qiang 已提交
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
  webview.show('slide-in-bottom', ANI_DURATION, onShow)

  let result

  webview.addEventListener('close', () => {
    if (result) {
      invoke(callbackId, {
        name: result.poiname,
        address: result.poiaddress,
        latitude: result.latlng.lat,
        longitude: result.latlng.lng,
        errMsg: 'chooseLocation:ok'
      })
    } else {
      consumePlusMessage(MESSAGE_TYPE)
      invoke(callbackId, {
        errMsg: 'chooseLocation:fail cancel'
      })
    }
  })
92 93

  registerPlusMessage(MESSAGE_TYPE, function (res) {
Q
qiang 已提交
94 95
    if (res && 'latlng' in res) {
      result = res
96 97 98
    }
  }, false)
}