mh-two-thousand-and-two
2024-04-12 3d2ec2fd0578d3ba0a414b0cc4e4a2ae60878596
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import {
  MAP_ID
} from '../constants'
 
import {
  invoke
} from '../../bridge'
 
import {
  ANI_DURATION
} from '../../constants'
 
import {
  registerPlusMessage,
  consumePlusMessage
} from '../../framework/plus-message'
 
const CHOOSE_LOCATION_PATH = '_www/__uniappchooselocation.html'
 
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',
          width: '60px',
          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')
      }
    })
  }
  let index = 0
  const onShow = function () {
    index++
    if (index === 2) {
      webview.evalJS(`__chooseLocation__(${JSON.stringify(params)})`)
    }
  }
  webview.addEventListener('loaded', onShow)
  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'
      })
    }
  })
 
  registerPlusMessage(MESSAGE_TYPE, function (res) {
    if (res && 'latlng' in res) {
      result = res
    }
  }, false)
}