UNPKG

mtl-js-sdk

Version:

ynf-fw-mtl-api

480 lines (463 loc) 15.8 kB
const KEY_DOMAIN = "key_domain"; const KEY_LANG = "key_lang"; const userAgent = window.navigator.userAgent; function loginByThirdAccount(option) { console.log('loginByThirdAccount', option) dealDomanAndLanguage(option, 0) } function loginByYhtAccount(option) { console.log('loginByYhtAccount', option) dealDomanAndLanguage(option, 1) } function bindYhtAccount(option) { console.log('bindYhtAccount', option) dealDomanAndLanguage(option, 2) } function logout(option) { console.log('logout', option) dealDomanAndLanguage(option, 3) } function unBindYhtAccount(option) { console.log('unBindYhtAccount', option) dealDomanAndLanguage(option, 4) } function dealDomanAndLanguage(option, type) { const { domain = '', lang = '' } = option mtl.getStorage({ key: KEY_DOMAIN, success: function (res) { if (domain == '' && res.data != '') { option.domain = res.data } mtl.getStorage({ key: KEY_LANG, success: function (res) { console.log('111', res) if (lang == '' && res.data != '') { option.lang = res.data } execAction(option, type) }, fail: function (err) { console.log('222', err) if (lang == '') { option.lang = 'zh_cn' } execAction(option, type) } }); }, fail: function () { if (domain == '') { option.fail && option.fail({ code: 1, message: 'domain is null' }) return } mtl.getStorage({ key: KEY_LANG, success: function (res) { console.log('333', res) if (lang == '' && res.data != '') { option.lang = res.data } execAction(option, type) }, fail: function (err) { console.log('444', err) if (lang == '') { option.lang = 'zh_cn' } execAction(option, type) } }); } }); } function execAction(option, type) { switch (type) { case 0: thirdLoginAction(option) break; case 1: loginAction(option) break; case 2: bindAction(option) break; case 3: logoutAction(option) break; case 4: unBindAction(option) break; default: break; } } function thirdLoginAction(option) { console.log('thirdLoginAction', option) let url = `${option.domain}/rest/v1/mobile/unitifyLogin/loginByThirdAccount?lang=${option.lang}`; const pf = mtl.platform.toLowerCase(); let data = {} if (pf.indexOf("android") !== -1 || pf.indexOf("ios") !== -1) { const { tdUserId = '' } = getUrlParams() || {} if (tdUserId == '') { option.fail && option.fail({ code: 1, message: 'tdUserId is null' }) return } const params = { tdUserId } data = { type: 'app', params } } else if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) { const { wxAppId = '', wxCode = '', encryptedData = '', iv = '' } = getUrlParams() || {}; if (wxAppId == '' || wxCode == '' || encryptedData == '' || iv == '') { option.fail && option.fail({ code: 1, message: 'params is null' }) return } localStorage.setItem("wxAppId", wxAppId); let ed = encryptedData + '==' let niv = iv + '==' const params = { wxAppId, wxCode, encryptedData: ed, iv: niv, lang: option.lang } data = { type: 'wx', params } } else if (userAgent.indexOf("wxwork") !== -1) { const { agentId = '', code = '', corpId = '' } = getUrlParams() || {}; if (agentId == '' || code == '' || corpId == '') { option.fail && option.fail({ code: 1, message: 'params is null' }) return } const params = { agentId, corpId, wxWorkCode: code } data = { type: 'wxwork', params } } mtl.request({ url: url, method: 'POST', params: data, headers: { 'content-type': 'application/json;' }, paramsType: 1, responseType: 'json', success(res) { let { status: code, statusText: message, data } = res; if (code === 200) { let dataObj = convertToObject(data); if (dataObj && dataObj.data) { const code = dataObj.code; if (code === '1002') { if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) { localStorage.setItem("mtlUniId", dataObj.data.attributes.openId); } else { localStorage.setItem("mtlUniId", dataObj.data.attributes.userId); } } else if (code === '0') { mtl.setStorage({ domain: 'mtlUnitifyLogin', key: 'data', data: dataObj.data }); if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) { localStorage.setItem("mtlUniId", dataObj.data.attributes.openId); } else { localStorage.setItem("mtlUniId", dataObj.data.attributes.userId); } } } option.success && option.success(data); } else { option.fail && option.fail({ code, message, data }); } option.complete && option.complete({ code, message, data }); }, fail: function (err) { option.fail && option.fail(err); option.complete && option.complete(err); } }) } function loginAction(option) { console.log('loginAction', option) let url = `${option.domain}/rest/v1/mobile/login/password?lang=${option.lang}`; let data = { username: option.username, password: option.password, tenantId: option.tenantId ? option.tenantId : '' } mtl.request({ url: url, method: 'POST', params: data, headers: { 'content-type': 'application/json;' }, paramsType: 1, responseType: 'json', success(res) { let { status: code, statusText: message, data } = res; if (code === 200) { let dataObj = convertToObject(data); if (dataObj && dataObj.data) { mtl.setStorage({ domain: 'mtlUnitifyLogin', key: 'data', data: dataObj.data }); } option.success && option.success(data); } else { option.fail && option.fail({ code, message, data }); } option.complete && option.complete({ code, message, data }); }, fail: function (err) { option.fail && option.fail(err); option.complete && option.complete(err); } }) } function bindAction(option) { console.log('bindAction', option) let url = `${option.domain}/rest/v1/mobile/unitifyLogin/bindWithYhtAndThirdAccount?lang=${option.lang}`; const pf = mtl.platform.toLowerCase(); let data = { username: option.username, password: option.password, } const mtlUniId = localStorage.getItem('mtlUniId') let params = {} if (pf.indexOf("android") !== -1 || pf.indexOf("ios") !== -1) { params = { tdUserId: mtlUniId } data.type = 'app' } else if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) { url = `${option.domain}/rest/v1/mobile/login/weChatBindAndLogin?lang=${option.lang}`; const { wxAppId = '' } = getUrlParams() || {}; localStorage.setItem("wxAppId", wxAppId); params = { openId: mtlUniId, wxAppId, validateCodeType: 'username', lang: option.lang } data.type = 'wx' } else if (userAgent.indexOf("wxwork") !== -1) { params = { wwUserId: mtlUniId } data.type = 'wxwork' } data.params = params mtl.request({ url: url, method: 'POST', params: data, headers: { 'content-type': 'application/json;' }, paramsType: 1, responseType: 'json', success(res) { let { status: code, statusText: message, data } = res; if (code === 200) { option.success && option.success(data); } else { option.fail && option.fail({ code, message, data }); } option.complete && option.complete({ code, message, data }); }, fail: function (err) { option.fail && option.fail(err); option.complete && option.complete(err); } }) } function logoutAction(option) { console.log('logoutAction', option) let url = `${option.domain}/rest/v1/mobile/user/logout?lang=${option.lang}`; mtl.getStorage({ domain: 'mtlUnitifyLogin', key: 'data', success(res) { const data = res.data || {}; if (data) { let dataObj = typeof data === 'string' ? JSON.parse(data) : data const yhtToken = dataObj.yhtToken.yhtAccessToken; const wbAt = dataObj.sessionInfo.sessionId; const vv = `yht_access_token=${yhtToken};wb_at=${wbAt};`; mtl.request({ url: url, method: 'POST', headers: { 'content-type': 'application/json;', cookie: vv }, paramsType: 1, responseType: 'json', success(res) { let { status: code, statusText: message, data } = res; if (code === 200) { option.success && option.success(data); } else { option.fail && option.fail({ code, message, data }); } option.complete && option.complete({ code, message, data }); }, fail: function (err) { option.fail && option.fail(err); option.complete && option.complete(err); } }) } else { option.fail && option.fail({ message: "Please login again!", code: 1 }) option.complete && option.complete({ message: "Please login again!", code: 1 }) } }, fail(err) { option.fail && option.fail(err) option.complete && option.complete(err) } }) } function unBindAction(option) { console.log('logoutAction', option) let url = `${option.domain}/rest/v1/mobile/unitifyLogin/unBindYhtAccount?lang=${option.lang}`; const mtlUniId = localStorage.getItem('mtlUniId') const pf = mtl.platform.toLowerCase(); let data = {} let params = {} if (pf.indexOf("android") !== -1 || pf.indexOf("ios") !== -1) { params = { tdUserId: mtlUniId } data.type = 'app' } else if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) { wxUnBindUser(option) return } else if (userAgent.indexOf("wxwork") !== -1) { params = { wwUserId: mtlUniId } data.type = 'wxwork' } data.params = params mtl.request({ url: url, method: 'POST', params: data, headers: { 'content-type': 'application/json;' }, paramsType: 1, responseType: 'json', success(res) { let { status: code, statusText: message, data } = res; if (code === 200) { option.success && option.success(data); } else { option.fail && option.fail({ code, message, data }); } option.complete && option.complete({ code, message, data }); }, fail: function (err) { option.fail && option.fail(err); option.complete && option.complete(err); } }) } function wxUnBindUser(option) { const url = `${option.domain}/rest/v1/mobile/user/weChatUnbind?lang=${option.lang}`; const mtlUniId = localStorage.getItem('mtlUniId') mtl.getStorage({ domain: 'mtlUnitifyLogin', key: 'data', success: function (res) { const wxAppId = localStorage.getItem('wxAppId'); const dataObj = convertToObject(res.data); const yhtToken = dataObj.yhtToken.yhtAccessToken; const data = { yhtToken: yhtToken, openId: mtlUniId, wxAppId: wxAppId, lang: option.lang } mtl.request({ url: url, method: 'POST', params: data, headers: { 'content-type': 'application/json;' }, paramsType: 1, responseType: 'json', success(res) { let { status: code, statusText: message, data } = res; if (code === 200) { option.success && option.success(data); } else { option.fail && option.fail({ code, message, data }); } option.complete && option.complete({ code, message, data }); }, fail: function (err) { option.fail && option.fail(err); option.complete && option.complete(err); } }) } }); } function getUrlParams() { let res = {}; let serach = window.location.search; if (!serach || serach === '') { serach = window.location.href.split("?").pop(); } let str = decodeURIComponent(serach); str = str.trim().replace(/^[?#&]/, ""); if (!str) { return res; } str.split("&").forEach((strItem) => { if (strItem) { let parts = strItem.split("="); let partKey = parts[0], partValue = parts[1] || ""; res[partKey] = partValue; } }); return res; } function convertToObject(res) { let dataObj = res; if (typeof (res) === 'string') { try { dataObj = JSON.parse(res) } catch (error) { dataObj = res; } } return dataObj; } export default { loginByThirdAccount, loginByYhtAccount, bindYhtAccount, logout, unBindYhtAccount };