You need to sign in or sign up before continuing.
scan-code-weex.js 2.0 KB
Newer Older
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
import {
  invoke
} from '../../bridge'

import {
  showPage
} from '../page.js'

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: {
      scanType: options.scanType
    },
    style: {
      animationType: options.animationType || 'pop-in',
      titleNView: {
        autoBackButton: true,
        type: 'float',
        titleText: options.titleText || '扫码',
        titleColor: '#ffffff',
        backgroundColor: 'rgba(0,0,0,0)',
        buttons: !options.onlyFromCamera ? [{
          text: options.albumText || '相册',
          fontSize: '17px',
          onclick: () => {
            page.sendMessage({
              type: 'gallery'
            })
          }
        }] : []
      },
      popGesture: 'close',
      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')
      }
    })
  }
}