1.0.4 • Published 5 years ago

bnd-app-js v1.0.4

Weekly downloads
-
License
ISC
Repository
-
Last release
5 years ago
import { loginInDevelopment } from './libs/index.js'

const ua = window.navigator.userAgent
const ipad = ua.match(/(iPad).*OS\s([\d_]+)/)
const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/)
const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/)
const isAndroid = ua.match(/(Android);?[\s\/]+([\d.]+)?/)
const isIos=ipad||ipod||iphone
const isDesktop=!(isIos||isAndroid)
if (isDesktop) {
  localStorage.setItem('developmentInPC', 1)
}
const isInXqc = !isDesktop && localStorage.getItem('developmentInPC') === null
console.info(`develop in PC:${!isInXqc}`)
const webViewJavascriptBridgeReady = () => {
  function initWebViewJavascriptBridge(bridge) {
    bridge.init(function (responseCallback) {
      console.log('JS got a message')
      const data = {
        'Javascript Responds': 'Wee!'
      }
      console.log('JS responding with', data)
      responseCallback(data)
    })
  }
  return new Promise((resolve, reject) => {
    if (window.WebViewJavascriptBridge) {
      initWebViewJavascriptBridge(window.WebViewJavascriptBridge)
      resolve(window.WebViewJavascriptBridge)
    } else {
      document.addEventListener(
        'WebViewJavascriptBridgeReady',
        function () {
          initWebViewJavascriptBridge(window.WebViewJavascriptBridge)
          resolve(window.WebViewJavascriptBridge)
        },
        false
      )
    }
  })
}
/**
 * @param {Object} param 调用源生方法的参数,{name,data={}}
 * @description 调用源生方法
 */
const caller = async function ({
  name,
  param = {}
}) {
  try {
    const bridge = await webViewJavascriptBridgeReady()
    return new Promise((resolve, reject) => {
      bridge.callHandler(name, data, responseData => {
        if (isAndroid) {
          responseData = JSON.parse(responseData)
        }
        resolve(responseData)
      })
    })
  } catch (error) {
    throw error
  }
}

const app = {
  /**
   * @description get access token
   */
  async getAccessToken() {
    let result, accessToken, devAccessToken
    if (isInXqc) {
      accessToken = sessionStorage.getItem('accessToken')
      if (!accessToken) {
        result = await caller({
          name: 'userCarGetAccessToken'
        })
        accessToken = result.data
        sessionStorage.setItem('accessToken', accessToken)
      }
      return accessToken
    } else {
      //
      devAccessToken = sessionStorage.getItem('devAccessToken')
      if (!devAccessToken) {
        result = await loginInDevelopment()
        console.log(result)
        if(result.code===10200){
        devAccessToken = result.data['access_token']
        sessionStorage.setItem('devAccessToken', devAccessToken)
        }else{
          console.error('登录失败')
        }
      }
      return devAccessToken
    }
  },
  /**
   * @return Promise Object
   * @description Get current user information.
   */
  getUserInfo() {
    if (isInXqc) {
      return caller({
        name: 'userCarGetUserInfo'
      })
    } else {
      console.log('Open camera. Original function name:"userCarGetUserInfo"')
    }
  },
  /**
   * @return Promise Object
   * @description back to the previous page.
   */
  goBack() {
    if (isInXqc) {
      return caller({
        name: 'platformBack'
      })
    } else {
      console.log('Go back to the previous page. Original function name:"platformBack"')
    }
  },
  /**
   * @return Promise Object
   * @description Close current page.
   */
  exit() {
    if (isInXqc) {
      return caller({
        name: 'platformPop'
      })
    } else {
      console.log('Exit. Close current page. Original function name:"platformPop"')
    }
  },
  /**
   * @param {Object} param {maxImageNum,isUpload,waterMark}
   * @return Promise Object
   * @description Open camera.
   */
  openCamera(param = {}) {
    param = Object.assign({
      maxImageNum: 1,
      isUpload: 1,
      waterMark: '薪公务用车'
    }, param)
    if (isInXqc) {
      return caller({
        name: 'platformCamera',
        param
      })
    } else {
      console.log('Open camera. Original function name:"platformCamera"')
    }
  },
  /**
   * @param {String} viewKey the target view's key
   * @return Promise Object
   * @description Open an app view.
   */
  openAppView(viewKey) {
    if (isInXqc) {
      return caller({
        name: 'callbackApp',
        param: {
          viewKey
        }
      })
    } else {
      console.log('Open an app view. Original function name:"callbackApp"')
    }
  },
  /**
   * @param {Object} param share information {title,content,url}
   * @return Promise Object
   * @description Open an app view.
   */
  shareFile(param = {}) {
    param = Object.assign({
      title: '薪公务用车',
      url: document.location.href,
      content: document.title
    }, param)
    if (isInXqc) {
      return caller({
        name: 'shareFile',
        param
      })
    } else {
      console.log('Share. Original function name:"shareFile"')
    }
  },
    /**
   * @return Promise Object
   * @description Get location information.
   */
  location() {
    if (isInXqc) {
      return caller({
        name: 'location'
      })
    } else {
      console.log('Get location information. Close current page. Original function name:"location"')
    }
  },
    /**
   * @param {Object} param webview information {type:'1','linkUrl':'https://www.baidu.com'}
   * @return Promise Object
   * @description Open a new webview. more information in http://192.168.0.247:8002/pages/viewpage.action?pageId=27386693
   */
  openWebview(param = {}) {
    param = Object.assign({
      type: '1',
      linkUrl: 'https://www.baidu.com'
    }, param)
    if (isInXqc) {
      return caller({
        name: 'openNewWebView',
        param
      })
    } else {
      console.log('Open a new webview. Original function name:"openNewWebView"')
    }
  },
  install: function(Vue) {
    Vue.prototype.$app=app
  }
}
window.BndApp=app
export default app