UNPKG

mtl-js-sdk

Version:

ynf-fw-mtl-api

477 lines (463 loc) 14.7 kB
import xaxios from 'axios' import utils from './utils' const axios = xaxios?.default || xaxios let { getQuery, isObject, config: { failCode } } = utils; let { code: upesncode } = getQuery(); let appcode = localStorage.getItem('MTLNccAppCode'); if (!appcode || appcode === '') { appcode = getQuery().appcode; } let langCode = utils.getLangCode(); //let loginInfo = utils.getLoginInfo(true, appcode); let businessCode = ""; let loginStatus = "start"; //目前固定的 let _deviceId = utils.getDeviceId(appcode); //默认执行 目前自动登录 关闭 调用callaction 自动登录 // first(); function failFun(options, result) { if (options.fail) options.fail(result); if (options.complete) options.complete(result); } function callAction(options) { if (!options || !isObject(options)) { const result = { code: failCode, message: "parameters is error, type is Object" }; failFun(options, result); } console.log("callAction -> logionStatus is " + loginStatus); console.log("platform -> logionStatus is " + options.isLogin); let appcode = localStorage.getItem('MTLNccAppCode'); if (!appcode || appcode === '') { appcode = getQuery().appcode; } let _token = utils.getLoginInfo(false, appcode).token || ''; if (options.inWhiteList || loginStatus === "success" || _token !== '' || options.isLogin) { ucgajax(options); } else if ( loginStatus === "doing" || loginStatus === "start" || loginStatus === "fail" ) { const result = { code: failCode, message: "Currently not logged in!" }; failFun(options, result); } } function loginCheck(options, url, type) { if (!options || !isObject(options)) { const result = { code: failCode, message: "parameters is error, type is Object" }; failFun(options, result); } console.log("callAction - logionStatus is " + loginStatus); let _token = utils.getLoginInfo(false, appcode).token || ''; if (options.inWhiteList || loginStatus === "success" || _token !== '') { if (type === 1) { uploadToucg(options, url); } else { downloadToucg(options, url); } } else if ( loginStatus === "doing" || loginStatus === "start" || loginStatus === "fail" ) { const result = { code: failCode, message: "Currently not logged in!" }; failFun(options, result); } } function uploadToucg(options, url) { let host = (options.host && options.host != '') ? options.host : utils.getOrigin(); let { params = {}, headers = {}, filePath } = options; let appcode = localStorage.getItem('MTLNccAppCode'); if (!appcode || appcode === '') { appcode = getQuery().appcode; } let _token = utils.getLoginInfo(false, appcode).token; if (!/^\//.test(url)) { url = "/" + url; } headers = { token: _token, terminalType: "UPESN", deviceId: _deviceId, ...headers }; let data = { url: host + url, headers: headers, header: headers, formData: params, filePath: filePath, appCode: appcode, ...options }; console.log("ncc-uploadFile: ", data); mtl.uploadFile(data); } function downloadToucg(options, url) { let host = (options.host && options.host != '') ? options.host : utils.getOrigin(); let { params = {}, headers = {} } = options; let appcode = localStorage.getItem('MTLNccAppCode'); if (!appcode || appcode === '') { appcode = getQuery().appcode; } let _token = utils.getLoginInfo(false, appcode).token; if (!/^\//.test(url)) { url = "/" + url; } headers = { token: _token, terminalType: "UPESN", deviceId: _deviceId, ...headers }; let data = { url: host + url, headers: headers, header: headers, formBody: params, appCode: appcode, ...options }; console.log("ncc-downFile: ", data); mtl.downloadFile(data); } function uploadFile(options) { loginCheck(options, "nccloud/mobile/file/upload", 1); } function downloadFile(options) { loginCheck(options, "nccloud/mobile/file/download", 0); } function ucgajax(options) { let { params = {}, headers = {}, config = {}, isCommon, router, host } = options; let url = isCommon ? router : options.url; // 当应用之间互相跳转时,从localStorage中拿到的appcode不能准确对应,改为从url上获取 let appcode = getQuery().appcode; if (!appcode || appcode === '') { appcode = localStorage.getItem('MTLNccAppCode'); } console.log("appcode: ", appcode); let _token = utils.getLoginInfo(false, appcode).token; console.log("_token: ", _token); if (!/^\//.test(url) && !/^http/.test(url)) { url = "/" + url; } let _sysParamJson = { busiaction: "ucg-api-" + appcode, appCode: appcode, langCode: langCode, ts: utils.getTime(), ...params.sysParamJson }; let body; if (isCommon) { body = { url: options.url, method: "POST", body: { ...params, sysParamJson: _sysParamJson } }; } else { body = { ...params, sysParamJson: _sysParamJson }; } let data = { url, _suffix: "", appCode: appcode, config: config, data: body, headers: { token: _token, terminalType: "UPESN", deviceId: _deviceId, ...headers }, fail: err => { failFun(options, err); }, complete: res => { options.complete && options.complete(res); if (res.code == "200") { //ncc业务系统全部使用 res.data 统一适配 options.success && options.success(res.data); } } }; mtl.ucg.callAction(data); } function clearLoginStorage(code) { utils.clearLoginStorage(code || appcode); loginStatus = "start"; } function checkParams(options) { if (!options || !isObject(options)) { const result = { code: failCode, message: "parameters is error, type is Object" }; failFun(options, result); return false; } const { isCommon, appCode, upesnCode, url } = options; if (isCommon) { businessCode = options.businessCode; } else { businessCode = "common"; } if (!url) { options.url = getTokenUrl(businessCode); } //如果没有传递默认从url中获取code if (!appCode) { options.appCode = getQuery().appcode; } if (!upesnCode) { options.upesnCode = getQuery().upesncode; } return true; } function _login(options) { //处理请求参数 if (!checkParams(options)) { return; } //如果是友空间平台动态获取友空间code if (mtl.platform == "upesn") { mtl.getOAuthCode({ success: function (res) { upesncode = res.OAuthCode; console.log("getOAuthCode :" + upesncode); if (!upesncode) { failFun( options, `appcode: ${options.appCode}, getOAuthCode upesncode: ${upesncode}` ); return; } options.upesnCode = upesncode; getToken(options); }, fail: function () { failFun(options, ` getOAuthCode upesncode: ${upesncode}`); } }); } else { getToken(options); } } //处理完参数获取token function getToken(options) { let promise = new Promise((resolve, reject) => { const data = { url: options.url, headers: { "Content-Type": "application/json", }, data: { userCode: options.userCode || '', deviceId: _deviceId, appCode: options.appCode, langCode: langCode || "zh", code: options.upesnCode, terminalType: "UPESN" }, method: "post", success: res => { loginStatus = "end"; if (isObject(res.message)) { res = res.message } if (res.code == 200 && isObject(res.data)) { loginStatus = "success"; utils.setLoginInfo(options.appCode, res.data); localStorage.setItem('MTLNccAppCode', options.appCode); } resolve(res); }, fail: err => { loginStatus = "fail"; reject(err); } }; request(data); }); promise.then(res => { options.success && options.success(res); options.complete && options.complete(res); }).catch(err => { console.log('hhh:', err); oldGetToken(options) // options.fail && options.fail(err); // options.complete && options.complete(err); }); } function getTokenUrl(businessCode) { return `/nccloud/${businessCode}/oauth/multiuser/getToken`; } function login(options) { // let loginInfo = utils.getLoginInfo(false, options.appCode) // if (loginInfo) { // let { expiretime } = loginInfo // if (Date.now() < Number(expiretime)) { // setTimeout(() => { // // 直接走缓存token // let res = { // isCache: true // } // loginStatus = "success"; // options.success && options.success(res); // options.complete && options.complete(res); // }, 0); // return // } // } // 新版登录通过url上yycode去换取token,旧版是通过友空间的jsbridge的方式拿code的 // 对于小程序,yycode由外部获取之后传入给登录方法 let yycode = options.yycode || getQuery().yycode; if (!yycode) { _login(options); return; } options.yycode = yycode; yqlGetToken(options).then(res => { if (res.code == 200) { options.success && options.success(res); } else { options.fail && options.fail(res); } options.complete && options.complete(res); }).catch(err => { console.log('YQL login fail:', err); _login(options) }); } // 友企连 登录 function yqlGetToken(options) { let userAgent = navigator.userAgent; let match = userAgent.match(/yht_access_token=(\S+)(\b|\s*)/) let yhttoken = (match && match[1]) || ''; const { host = utils.getOrigin() } = options; return new Promise((resolve, reject) => { let data = { loginType: "7", userCode: options.userCode || '', deviceId: _deviceId, appCode: options.appCode, langCode: langCode || "zh", terminalType: "UPESN", yhttoken, yycode: options.yycode, ...options.otherParams } // 多用户处理 if (options.userCode) { let { tenantId, yhtUserId } = getQuery(); let param = { loginType: '8', tenantId: options.tenantId || tenantId, // 当option里拿不到就从url上拿 yhtUserId: options.yhtUserId || yhtUserId, phone: options.phone } Object.assign(data, param) } const requestParams = { url: host + '/nccloud/mobile/oauth/getToken', headers: { "Content-Type": "application/json", }, data, method: "post", success: res => { loginStatus = "end"; if (res.code == 200 && res.data.token) { loginStatus = "success"; utils.setLoginInfo(options.appCode, res.data); localStorage.setItem('MTLNccAppCode', options.appCode); } resolve(res); }, fail: err => { loginStatus = "fail"; // 重新按旧的方式登录 reject(err); } }; request(requestParams); }) } function oldGetToken(options) { let appcode = options.appcode || options.appCode; let { isCommon } = options; if (isCommon) { businessCode = options.businessCode; } else { businessCode = "common"; } loginStatus = "doing"; let promise = new Promise((resolve, reject) => { var data = { // url: `/nccloud/${businessCode}/oauth/mobile/getToken`, url: `/nccloud/${businessCode}/oauth/getToken`, terminalType: "UPESN", deviceId: _deviceId, appCode: appcode, _suffix: "", langCode: langCode || "zh", code: options.upesncode || options.upesnCode, success: res => { loginStatus = "success"; utils.setLoginInfo(appcode, res.data); localStorage.setItem('MTLNccAppCode', appcode); resolve(res); }, fail: err => { loginStatus = "fail"; reject(err); } }; console.log('mtl.ucg.getToken success'); mtl.ucg.getToken(data); }); promise.then(res => { options.success && options.success(res); options.complete && options.complete(res); }).catch(err => { options.fail && options.fail(err); options.complete && options.complete(err); }); } function request(object) { axios(object).then(res => { let { status: code, statusText: message, data } = res; if (code === 200) { object.success && object.success(data); } else { object.fail && object.fail({ code, message, data }); } object.complete && object.complete({ code, message, data }); }).catch(err => { const result = { code: 1, message: err.message }; object.fail && object.fail(result); object.complete && object.complete(result); }); } export default { callAction, login, uploadFile, downloadFile, clearLoginStorage };