import { getMD5, getEnv } from '@ywfe/utils'; export const useAuthData = () => { const emailRegExp = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/g; const phoneRegExp = /^1[3-9][0-9]{9}$/; const pwdRegExp = /(?=.*[a-z])(?=.*\d)(?=.*[#@!~%^&*])[a-z\d#@!~%^&*]{8,}/; interface IenvProps { dev: string; test: string; pre: string; prod: string; } const cbUrls: IenvProps = { dev: 'http://dianhu.fed.ywwl.com/jump.html', test: 'http://dianhu.fed.ywwl.com/jump.html', pre: 'https://cdn.ywwl.com/bps/ywyun/jump.html', prod: 'https://cdn.ywwl.com/bps/ywyun/jump.html', }; const cDdAppids: IenvProps = { dev: 'dingoalin2gwh8gkrln214', test: 'dingoamci9opuonpnbfi05', pre: 'dingoal2pwz2md6zj26rsn', prod: 'dingoal2pwz2md6zj26rsn', }; const cWxAppids: IenvProps = { dev: 'wwe2ddee10b7984df5', test: 'wwe2ddee10b7984df5', pre: 'wwe2ddee10b7984df5', prod: 'wwe2ddee10b7984df5', }; const cWxAgentid: IenvProps = { dev: '1000008', test: '1000009', pre: '1000011', prod: '1000011', }; let env: 'dev' | 'test' | 'pre' | 'prod' = getEnv() as any; // 登陆 普通账号不可为空 const dataCheckUsername = (val: string) => { if (val.length) { return { status: false, msg: '登陆账号不可为空', }; } return { status: true, msg: '登陆账号校验成功', }; }; // 手机号码校验 const dataCheckPhone = (val?: string) => { const reg = new RegExp(phoneRegExp); if (!val || !reg.test(val)) { return { status: false, msg: '手机号码格式错误', }; } return { status: true, msg: '手机号码校验成功', }; }; // 邮箱校验 const dataCheckEmail = (val: string) => { const reg = new RegExp(emailRegExp); if (!reg.test(val)) { return { status: false, msg: '邮箱格式错误', }; } return { status: true, msg: '邮箱校验成功', }; }; // 登陆 密码不可为空 const dataLoginCheckPasswd = (val?: string) => { if (!val) { return { status: false, msg: '登陆密码不可为空', }; } return { status: true, msg: '登陆密码校验成功', }; }; // 密码校验 密码至少8位,必须字母、数字、特殊符号(英文版本:~!@#$%^&*) const dataCheckPassword = (val: string) => { const reg = new RegExp(pwdRegExp); if (val.length < 8) { return { status: false, msg: '密码至少8位', }; } if (!reg.test(val)) { return { status: false, msg: '要求必须字母、数字、特殊符号(英文版本:~!@#$%^&*)', }; } return { status: true, msg: '密码校验成功', }; }; const dataCheckAliAwsc = (opt: any) => { if (!opt || !opt.sToken) { return { status: false, msg: '滑块校验失败', }; } return { status: true, msg: '滑块校验成功', }; }; const dataCheckVerifyCode = (val?: string) => { if (!val) { return { status: false, msg: '验证码不可为空', }; } return { status: true, msg: '验证码校验成功', }; }; const dataGetDingCode = (sourceUrl?: string, width?: string, height?: string, platformCode?: string, id?: string) => { localStorage.setItem('platformCode', platformCode || 'YW_YUN') if (typeof window === 'undefined') { } else { if (env === 'pre') { env = 'prod'; } let pageUrl = sourceUrl || window.location.href; const url = encodeURIComponent(`${cbUrls[env]}?currentUrl=${pageUrl}`); const gotoUrl = `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${cDdAppids[env]}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${url}`; if (window && (window as any).DDLogin) { (window as any).DDLogin({ id: id || 'login_container', // 这里需要你在自己的页面定义一个HTML标签并设置id,例如
或 goto: encodeURIComponent(gotoUrl), // 请参考注释里的方式 style: 'border:none;background-color:#FFFFFF;margin-top:-40px;text-align: center;', width: width || '240', height: height || '250', }); } const handleMessage = (event: any) => { const { origin } = event; if (origin === 'https://login.dingtalk.com') { // 判断是否来自ddLogin扫码事件。 const loginTmpCode = event.data; // 获取到loginTmpCode后就可以在这里构造跳转链接进行跳转了 window.location.href = `${gotoUrl}&loginTmpCode=${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); } } }; const dataGetWxCode = (sourceUrl?: string, platformCode?: string, id?: string, grayPlatform?: string) => { localStorage.setItem('platformCode', platformCode || 'YW_YUN') localStorage.setItem('grayPlatform', grayPlatform || '') if (env === 'pre') { env = 'prod'; } const appid = cWxAppids[env]; const agentid = cWxAgentid[env]; let pageUrl = sourceUrl || window.location.href; const url = encodeURIComponent(`${cbUrls[env]}?currentUrl=${pageUrl}`); // const gotoUrl = `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${dingAppId}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${url}`; if (window && (window as any).WwLogin) { const wwLogin: any = new (window as any).WwLogin({ id: id || 'login_wx_container', appid, agentid, redirect_uri: url, // "state": "", }); console.log(wwLogin) } }; // 预处理参数 const dataInitParams = (val: object) => ({ ...val, userPasswd: (val as any).userPasswd ? getMD5((val as any).userPasswd) : '', }); return { dataCheckUsername, dataCheckPhone, dataCheckEmail, dataLoginCheckPasswd, dataCheckPassword, dataCheckAliAwsc, dataCheckVerifyCode, dataGetDingCode, dataGetWxCode, dataInitParams, }; };