import CryptoJS from 'crypto-js' const CODE_CRYPTO_KEY = 'k#8Mp$2Qr&9Tz@4W' export const APP_ID = 'cli_a56577acb2f3d00c' // 飞书应用 ID(与 uirefbase 相同) export const TENANT = 'coowa' export const validatePhoneNumber = (str: string) => { const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/ return reg.test(str) } /** 获取 url 中的某个参数值 */ export const getQueryVariable = (variable: string) => { if (typeof window === 'undefined') return false return new URLSearchParams(window.location.search).get(variable) || false } /** 加载飞书二维码 SDK */ export function qr_load() { return new Promise((resolve, reject) => { // 如果已加载则跳过 if ((window as any).QRLogin) { resolve() return } const script = document.createElement('script') script.type = 'text/javascript' script.src = 'https://sf3-cn.feishucdn.com/obj/feishu-static/lark/passport/qrcode/LarkSSOSDKWebQRCode-1.0.2.js' script.onerror = reject script.onload = () => resolve() document.head.appendChild(script) }) } /** 初始化飞书二维码 */ export async function qr_login( appId: string, redirect_url: string, state: string ) { const gotoUrl = `https://passport.feishu.cn/suite/passport/oauth/authorize?client_id=${appId}&redirect_uri=${encodeURIComponent( redirect_url )}&response_type=code&state=${encodeURIComponent(state)}` const QRLogin = (window as any).QRLogin const QRLoginObj = QRLogin({ id: 'login_container', goto: gotoUrl, style: `width: 270px;height: 270px;border: 0;border-radius:12px; background-image: radial-gradient(at 47% 33%, hsl(212.37, 72%, 59%) 0, transparent 59%), radial-gradient(at 82% 65%, hsl(198.00, 100%, 50%) 0, transparent 55%);`, }) const handleMessage = function (event: any) { const origin = event.origin if ( QRLoginObj.matchOrigin(origin) && window.location.href.indexOf('login') > -1 ) { const loginTmpCode = event.data window.location.href = `${gotoUrl}&tmp_code=${loginTmpCode}` } } if (typeof window.addEventListener !== 'undefined') { window.addEventListener('message', handleMessage, false) } else if (typeof (window as any).attachEvent !== 'undefined') { ;(window as any).attachEvent('onmessage', handleMessage) } } /** 加密 — 与 uirefbase 客户端保持一致 */ export const encrypt = (data: string) => { try { return CryptoJS.AES.encrypt(data, CODE_CRYPTO_KEY).toString() } catch (error) { return data } } /** 解密 */ export const decrypt = (data: string) => { try { const bytes = CryptoJS.AES.decrypt(data, CODE_CRYPTO_KEY) return bytes.toString(CryptoJS.enc.Utf8) } catch (error) { return data } }