qrcode.js 3.85 KB
const { uc, form, portal, bpmModel, bpmRunTime } = window.context

export default {
  getQrCodeWeChat(corpId, agentId, url) {
    var wwLogin = new WwLogin({
      id: 'qr_wechat',
      appid: corpId,
      agentid: agentId,
      redirect_uri: encodeURIComponent(url),
      state: 'htwecom',
      href: 'data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7aGVpZ2h0OiAyMjBweDt9Ci5pbXBvd2VyQm94IC5xcmNvZGUge3dpZHRoOiAyMjBweDt9Ci5pbXBvd2VyQm94IC50aXRsZSB7ZGlzcGxheTogbm9uZTt9Ci5zdGF0dXNfaWNvbiB7ZGlzcGxheTogbm9uZSAgIWltcG9ydGFudH0KLmltcG93ZXJCb3ggLnN0YXR1cyB7dGV4dC1hbGlnbjogY2VudGVyO30g',
      lang: 'zh',
    })
    var handleMessage = function (event) {
      setTimeout(() => {
        wwLogin.destroyed()
      }, 100);
    } 
    if (typeof window.addEventListener != 'undefined') {
      window.addEventListener('message', handleMessage, false)
    } else if (typeof window.attachEvent != 'undefined') {
      window.attachEvent('onmessage', handleMessage)
    }
  },
  getQrCodeDing(appIdDd, url) {
    //二维码 钉钉
    let stateDd = 'htDingding'
    let urlDd = `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appIdDd}&response_type=code&scope=snsapi_login&state=${stateDd}&redirect_uri=${url}`
    var ddLogin = DDLogin({
      id: 'qr_dingding',
      goto: encodeURIComponent(urlDd),
      style: 'border:none;background-color:#FFFFFF;',
      state: 'htdingding',
    })
    var handleMessage = function (event) {
      var origin = event.origin
      //判断是否来自ddLogin扫码事件。
      if (origin == 'https://login.dingtalk.com') {
        var loginTmpCode = event.data
        //获取到loginTmpCode后就可以在这里构造跳转链接进行跳转了
        console.log('loginTmpCode', loginTmpCode)
        window.location.href = `${urlDd}&loginTmpCode=${loginTmpCode}`
      }
    }
    if (typeof window.addEventListener != 'undefined') {
      window.addEventListener('message', handleMessage, false)
    } else if (typeof window.attachEvent != 'undefined') {
      window.attachEvent('onmessage', handleMessage)
    }
  },
  getQrCodeFlyBook(clientId, url) {
    //二维码 飞书
    let state = 'htflybook'
    var urlGotoFlyBook = `https://passport.feishu.cn/suite/passport/oauth/authorize?client_id=${clientId}&redirect_uri=${url}&response_type=code&state=${state}`
    var QRLoginObj = QRLogin({
      id: 'qr_flyBook',
      goto: urlGotoFlyBook,
      height: '260',
      style: 'border:none;background-color:#FFFFFF;',
    })
    var handleMessage = function (event) {
      var origin = event.origin
      // 使用 matchOrigin 方法来判断 message 是否来自飞书页面
      if (QRLoginObj.matchOrigin(origin)) {
        var loginTmpCode = event.data
        // 在授权页面地址上拼接上参数 tmp_code,并跳转
        window.location.href = `${urlGotoFlyBook}&tmp_code=${loginTmpCode}`
      }
    }

    if (typeof window.addEventListener != 'undefined') {
      window.addEventListener('message', handleMessage, false)
    } else if (typeof window.attachEvent != 'undefined') {
      window.attachEvent('onmessage', handleMessage)
    }
  },
  getQrCode(scanApps, scanCodeMode) {
    var hasFlyBook = false
    const { weChatWork, dingtalk, flyBook } = scanApps
    var redirectUri = window.location.href
    if(redirectUri.indexOf('?') > 0){
      redirectUri = redirectUri.split("?")[0]
    }
    if (weChatWork && scanCodeMode && scanCodeMode.includes("wechat")) {
      const { corpId, agentId } = weChatWork
      this.getQrCodeWeChat(corpId, agentId, redirectUri)
    }
    if (dingtalk && scanCodeMode && scanCodeMode.includes("dingding")) {
      const { corpId } = dingtalk
      this.getQrCodeDing(corpId, redirectUri)
    }
    if (flyBook && scanCodeMode && scanCodeMode.includes("flyBook")) {
      hasFlyBook = true
      const { corpId } = flyBook
      this.getQrCodeFlyBook(corpId, redirectUri)
    }
    return hasFlyBook
  },
}