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
import {
  invoke
} from '../../bridge'
 
import {
  showPage
} from '../../../helpers/page.js'
 
import {
  t
} from 'uni-core/helpers/i18n'
 
function getStatusBarStyle () {
  let style = plus.navigator.getStatusBarStyle()
  if (style === 'UIStatusBarStyleBlackTranslucent' || style === 'UIStatusBarStyleBlackOpaque' || style === 'null') {
    style = 'light'
  } else if (style === 'UIStatusBarStyleDefault') {
    style = 'dark'
  }
  return style
}
 
export function scanCode (options, callbackId) {
  const statusBarStyle = getStatusBarStyle()
  const isDark = statusBarStyle !== 'light'
 
  let result
  const page = showPage({
    url: '__uniappscan',
    data: Object.assign({}, options, {
      messages: {
        fail: t('uni.scanCode.fail'),
        'flash.on': t('uni.scanCode.flash.on'),
        'flash.off': t('uni.scanCode.flash.off')
      }
    }),
    style: {
      animationType: options.animationType || 'pop-in',
      titleNView: {
        autoBackButton: true,
        type: 'float',
        titleText: options.titleText || t('uni.scanCode.title'),
        titleColor: '#ffffff',
        backgroundColor: 'rgba(0,0,0,0)',
        buttons: !options.onlyFromCamera ? [{
          text: options.albumText || t('uni.scanCode.album'),
          fontSize: '17px',
          width: '60px',
          onclick: () => {
            page.sendMessage({
              type: 'gallery'
            })
          }
        }] : []
      },
      popGesture: 'close',
      background: '#000000',
      backButtonAutoControl: 'close'
    },
    onMessage ({
      event,
      detail
    }) {
      result = detail
      if (event === 'marked') {
        result.errMsg = 'scanCode:ok'
      } else {
        result.errMsg = 'scanCode:fail ' + detail.message
      }
    },
    onClose () {
      if (isDark) {
        plus.navigator.setStatusBarStyle('dark')
      }
      invoke(callbackId, result || {
        errMsg: 'scanCode:fail cancel'
      })
    }
  })
 
  if (isDark) {
    plus.navigator.setStatusBarStyle('light')
    page.webview.addEventListener('popGesture', ({
      type,
      result
    }) => {
      if (type === 'start') {
        plus.navigator.setStatusBarStyle('dark')
      } else if (type === 'end' && !result) {
        plus.navigator.setStatusBarStyle('light')
      }
    })
  }
}