UNPKG

mtl-js-sdk

Version:

ynf-fw-mtl-api

1,232 lines (1,197 loc) 40.8 kB
/* * @Author: wangyingliang@yonyou.com * @Date: 2024-10-31 09:34:14 * @LastEditors: wangyingliang wangyingliang@yonyou.com * @LastEditTime: 2025-04-07 09:38:44 * @FilePath: /mtl-api-project/src/common/environment.js * @Description: 获取环境变量 * Copyright (c) 2024 by Yonyou, All Rights Reserved. */ import xaxios from 'axios' const baseUrl = "ht' + 'tps://build.yyuap.c' + 'om" const FAIL_CODE = 1 const axios = xaxios?.default || xaxios let apiUpesn = "" let upesnVersion = 0 // 单数表示ios、偶数表示安卓 const NAVITYPE = { GAODE: 1, BAIDU: 2, TENCENT: 3, } function getSystemType(params) { let systemType = ''; if (userAgent.indexOf('Windows') > -1) { systemType = 'windows'; } else if (userAgent.indexOf('Macintosh') > -1 || userAgent.indexOf('Mac OS X') > -1) { systemType = 'macOS'; } else if (userAgent.indexOf('iPhone') > -1 || userAgent.indexOf('iPad') > -1 || userAgent.indexOf('iPod') > -1) { systemType = 'iOS'; } else if (userAgent.indexOf('Android') > -1) { systemType = 'Android'; } else { systemType = '无法识别的系统类型'; } return systemType } function getPlatform() { let userAgent = window.navigator.userAgent let platform = null if (userAgent.indexOf("miniProgram") !== -1 || userAgent.indexOf("wxwork") !== -1 || userAgent.indexOf("wechatdevtools") !== -1) { platform = "wx" // initInputChooseFile() loadCDNJS("https://res.wx.qq.com/open/js/jweixin-1.5.0.js", (res) => { console.log(res); }, (err) => { console.log(err); }) } else if (userAgent.indexOf("APIAndroid") !== -1) { if (userAgent.indexOf("QYZone") !== -1) { apiUpesn = "APIAndroid" platform = "upesnAndroid" upesnVersion = 2 // 安卓为偶数 } else { platform = "APIAndroid" } } else if (userAgent.indexOf("APIIOS") !== -1) { if (userAgent.indexOf("QYZone") !== -1) { apiUpesn = "APIIos" platform = "upesnIos" upesnVersion = 1 // ios为奇数 } else { platform = "APIIos" } } else if (userAgent.indexOf("APIHarmonyOS") !== -1) { // 鸿蒙旗舰版 apiUpesn = "APIHarmonyOS" platform = "APIHarmonyOS" upesnVersion = 3 // 鸿蒙为偶数 } else if (userAgent.indexOf("QYZone") !== -1) { platform = "upesn" apiUpesn = "upesn" } else if (/dingtalk/i.test(userAgent)) { platform = "dingtalk" // initInputFile() loadCDNJS("https://g.alicdn.com/dingding/dingtalk-jsapi/3.0.25/dingtalk.open.js", (res) => { console.log(res); }, (err) => { console.log(err); }) } else if (userAgent.indexOf("Feishu") !== -1) { // 飞书平台 platform = "tt" // initInputFile() loadCDNJS("https://lf1-cdn-tos.bytegoofy.com/goofy/lark/op/h5-js-sdk-1.5.37.js", (res) => { console.log(res); }, (err) => { console.log(err); }) } else { platform = "h5" // initInputFile() } return platform } function isWxH5() { let userAgent = window.navigator.userAgent.toLowerCase() if (userAgent.toLowerCase().indexOf("micromessenger") !== -1) { return true } return false } /** * 获取是否是可信平台, 表单. * @param {Array} whiteList 白名单.['tt'] * @return true 可信; false 不可信 */ function isTrustedPlatform(object) { let whiteList = object?.whiteList || [] let platform = window.mtl.platform // 设置白名单 let isTrusted = whiteList.includes(platform) if (!isTrusted) { if (platform.indexOf("upesn") !== -1) { // 友空间内, 尝试调用友空间函数, 确保UA没有被篡改 if (window.MTLWebViewJavascriptBridge && window.api) { window.MTLWebViewJavascriptBridge.registerHandler("autoPermission", function (res) { console.log(res); }); isTrusted = true } } else if (platform.indexOf("tt") !== -1) { if (tt?.chooseImage) { isTrusted = true } } else if (platform.indexOf("dingtalk") !== -1) { if (dd?.biz?.util?.chooseImage) { isTrusted = true } } else if (platform.indexOf("wx") !== -1) { if (wx?.chooseImage) { isTrusted = true } } } return isTrusted } /** * 初始化移动基础服务 * @param {string} url 移动基础服务地址, 'https://c1.yonyoucloud.com' * @returns */ function initMobileService(object) { const { url } = object if (!url || url === "") { object.fail && object.fail({ message: "url is null!", code: FAIL_CODE }) return } const hostUrl = new URL(url) const origin = hostUrl.origin const requestUrl = `${url}/rest/v1/mobile/app/workbench/env?host=${origin}` let params = { url: requestUrl, method: "GET", withCredentials: true, responseType: "json", headers: { "content-type": "application/json;", }, } axios(params).then((response) => { let res = response.data && response.status && response.headers ? response.data : response let dataObj = convertToObject(res) if (dataObj && dataObj.data) { mtl.setStorage({ key: "key_mobile_app_url", data: dataObj.data.mobileAppUrl, }) } object.success && object.success(dataObj) }).catch((err) => { object.fail && object.fail(err) }) } function initInputFile() { let input = document.createElement("input") input.type = "file" input.accept = "image/*" input.id = "mtlChooseImage" input.name = "mtlChooseImage" input.style.display = "none" document.head && document.head.appendChild(input) // initInputChooseFile() // initInputVideoFile() } // 选择附件 function initInputChooseFile() { let inputFile = document.createElement("input") inputFile.type = "file" inputFile.id = "mtlChooseFiles" inputFile.name = "mtlChooseFiles" inputFile.style.display = "none" document.head && document.head.appendChild(inputFile) } // 选择视频 function initInputVideoFile() { let inputFile = document.createElement("input") inputFile.type = "file" inputFile.id = "mtlChooseVideo" inputFile.name = "mtlChooseVideo" inputFile.style.display = "none" document.head && document.head.appendChild(inputFile) } //设置MTL上下文Context function setContext(object) { mtl.setStorage({ domain: "mtl", key: "mtlContext", data: object, }) } // 加载cdn mtljs function loadMtlCDNJs(object) { const _obj = object || {} const { url = `https://design.yonyoucloud.com/library/mtl/release/mtl.min.js`, type } = _obj if (type && type === "all") { loadCDNJS(url, _obj.success, _obj.fail) } else { if (isWxAndroid()) { loadCDNJS(url, _obj.success, _obj.fail) } } } //加载js function loadCDNJS(url, success, fail) { if (url && !isLoadedJsScript(url)) { var script = document.createElement("script") script.type = "text/javascript" script.src = url script.onload = () => success && success(true) script.onerror = (err) => fail && fail(err) document.head.appendChild(script) } } function isLoadedJsScript(url) { for (var i = 0; i < document.scripts.length; i++) { if (document.scripts[i].src == url) { return true; } } return false; } //判断平台是否wx-安卓 function isWxAndroid() { const ua = window.navigator.userAgent if (mtl.platform === "wx") { if (ua.includes("Android") || ua.includes("Linux")) { console.log("isWxAndroid success") return true } } console.log("isWxAndroid fail") return false } //用户密码登录 function login(object = {}) { console.warn("'login:' is deprecated; first deprecated in 6.2.13; use 'loginNew' function.") loginRequest("login", object) } function loginNew(object = {}) { loginRequest("loginNew", object) } function logout(object = {}) { const { url, openUrl, yhtToken, wbAt, lang = "zh_CN" } = object if (!!!url) { let res = { code: FAIL_CODE, message: "url is null", } handleFailCallBack(object, res) object.complete && object.complete(res) return } if (!!!yhtToken || !!!wbAt) { mtl.getStorage({ domain: "mtlLoginInfo", key: "data", success(res) { const data = res.data || {} if (data) { let dataObj = typeof data === "string" ? JSON.parse(data) : data const authToken = dataObj.yhtToken.yhtAccessToken const wbAt = dataObj.sessionInfo.sessionId logoutRequest({ ...object, url, yhtToken: authToken, wbAt: wbAt, lang, openUrl }) } else { handleFailCallBack(object, { message: "Please log in again!", code: FAIL_CODE }) object.complete && object.complete({ message: "Please log in again!", code: FAIL_CODE }) } }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } else { logoutRequest(object) } } function logoutRequest(object = {}) { const { url, openUrl, yhtToken, wbAt, lang = "zh_CN" } = object const vv = `yht_access_token=${yhtToken};wb_at=${wbAt};` let newUrl = `${url}/rest/v1/mobile/user/logout` requestAction({ requestType: 1, url: `${newUrl}${/\?/.test(newUrl) ? "&" : "?"}lang=${lang}`, method: "POST", withCredentials: true, responseType: "json", headers: { "content-type": "application/json;", cookie: vv, }, success(res) { if (openUrl) { mtl.navigateTo({ url: openUrl, navShow: 0, }) } handleSuccessCallBack(object, res) object.complete && object.complete(res) mtl.removeStorage({ domain: "mtlLoginInfo", key: "data", }) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //手机号验证码登录 function validateCodeLogin(object = {}) { console.warn("'validateCodeLogin:' is deprecated; first deprecated in 6.2.13; use 'validateCodeLoginNew' function.") loginRequest("validateCodeLogin", object) } function validateCodeLoginNew(object = {}) { loginRequest("validateCodeLoginNew", object) } //自动登录 function autoLogin(object = {}) { console.warn("'autoLogin:' is deprecated; first deprecated in 6.2.13; use 'autoLoginNew' function.") autoLoginRequest("autoLogin", object) } function autoLoginNew(object = {}) { autoLoginRequest("autoLoginNew", object) } function autoLoginRequest(type, object = {}) { let path = object.url ? object.url : baseUrl const lang = object.lang || "zh_CN" if (type === "autoLoginNew") { object.url = `${path}/rest/v1/mobile/login/token?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/login/token?lang=${lang}` } let params = object?.data || {} mtl.getStorage({ domain: "mtlLoginInfo", key: "data", success(res) { const data = res.data || {} if (data) { let dataObj = typeof data === "string" ? JSON.parse(data) : data const authToken = dataObj.yhtToken.yhtAccessToken const userId = dataObj.userInfo.userId const tenantId = object.tenantId ? object.tenantId : "" requestAction({ requestType: object.requestType, url: object.url, method: "POST", data: { userId: userId, token: authToken, tenantId: tenantId, ...params, }, headers: { "content-type": "application/json;", }, responseType: "json", success(res) { let obj = convertToObject(res) if (obj && obj.data) { mtl.setStorage({ domain: "mtlLoginInfo", key: "data", data: obj.data, }) } handleSuccessCallBack(object, obj) object.complete && object.complete(res) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } else { handleFailCallBack(object, { message: "Please log in again!", code: FAIL_CODE }) object.complete && object.complete({ message: "Please log in again!", code: FAIL_CODE }) } }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //发送验证码 function sendValidateCode(object = {}) { console.warn("'sendValidateCode:' is deprecated; first deprecated in 6.2.13; use 'sendValidateCodeNew' function.") sendValidateCodeRequest("send", object) } function sendValidateCodeNew(object = {}) { sendValidateCodeRequest("sendNew", object) } function sendValidateCodeRequest(type, object) { let path = object.url ? object.url : baseUrl const lang = object.lang || "zh_CN" if (type === "sendNew") { object.url = `${path}/rest/v1/mobile/login/sendCode?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/login/sendCode?lang=${lang}` } object.method = "POST" let data = { username: object.mobile, lang: object.lang || "", } delete object.username requestAction({ requestType: object.requestType, url: object.url, method: "POST", data: data, headers: { "content-type": "application/json;", }, responseType: "json", success(res) { let dataObj = convertToObject(res) handleSuccessCallBack(object, dataObj) object.complete && object.complete(res) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //切换租户 function changeTenant(object) { console.warn("'changeTenant:' is deprecated; first deprecated in 6.2.13; use 'changeTenantNew' function.") autoLoginRequest("autoLogin", object) } function changeTenantNew(object) { autoLoginRequest("autoLoginNew", object) } //获取wx应用列表 function getAppList(object) { console.warn("'getAppList:' is deprecated; first deprecated in 6.2.13; use 'getAppListNew' function.") getAppListRequest("getApp", object) } function getAppListNew(object) { getAppListRequest("getAppNew", object) } function getAppListRequest(type, object) { let path = object.url ? object.url : baseUrl const lang = object.lang || "zh_CN" if (type === "getAppNew") { object.url = `${path}/rest/v1/mobile/app/vx/list?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/app/vx/list?lang=${lang}` } mtl.getStorage({ domain: "mtlLoginInfo", key: "data", success(res) { const data = res.data || {} if (data) { let dataObj = typeof data === "string" ? JSON.parse(data) : data const token = dataObj.yhtToken.yhtAccessToken const userId = dataObj.userInfo.userId const terminalType = mtl.platform requestAction({ requestType: object.requestType, url: object.url, method: "GET", params: { yht_access_token: token, terminalType: terminalType, userId: userId, lang: object.lang || "", }, headers: { "content-type": "application/json;", }, responseType: "json", success(res) { let dataObj = convertToObject(res) handleSuccessCallBack(object, dataObj) object.complete && object.complete(res) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } else { handleFailCallBack(object, { message: "Please log in again!", code: FAIL_CODE }) object.complete && object.complete({ message: "Please log in again!", code: FAIL_CODE }) } }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //获取独立app应用列表 function getIndependenceAppList(object) { let path = object.url ? object.url : baseUrl const lang = object.lang || "zh_CN" object.url = `${path}/rest/v1/mobile/app/workbench/list?lang=${lang}` let param = { appId: object.appId, // lang: object.lang || "", } if (object.hasOwnProperty("includeApproveCenter")) { param.includeApproveCenter = object.includeApproveCenter } let headers = object.headers ? object.headers : { "content-type": "application/json;" } requestAction({ requestType: object.requestType, url: object.url, method: "GET", params: param, headers, withCredentials: true, responseType: "json", success(res) { let dataObj = convertToObject(res) handleSuccessCallBack(object, dataObj) object.complete && object.complete(res) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //获取友空间code function getEsnCode(object = {}) { console.warn("'getEsnCode:' is deprecated; first deprecated in 6.2.13; use 'getEsnCodeNew' function.") getEsnCodeRequest("esnCode", object) } function getEsnCodeNew(object = {}) { getEsnCodeRequest("esnCodeNew", object) } function getEsnCodeRequest(type, object) { let path = object?.url || window.location.origin const lang = object?.lang || "zh_CN" if (type === "esnCodeNew") { object.url = `${path}/rest/v1/mobile/user/yht/auth/code?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/user/yht/auth/code?lang=${lang}` } requestAction({ requestType: object?.requestType || "", url: object.url, method: "GET", params: { wb_at: object?.wb_at, yhtAccessToken: object?.yht_access_token, tenantId: object?.tenantId, lang: lang, }, headers: { "content-type": "application/json;", }, responseType: "json", success(res) { let dataObj = convertToObject(res) handleSuccessCallBack(object, dataObj) object.complete && object.complete(res) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //根据authCode获取wb_at和yht_access_token function getYhtTokenWithCode(object = {}) { console.warn("'getYhtTokenWithCode:' is deprecated; first deprecated in 6.2.13; use 'getYhtTokenWithCodeNew' function.") getYhtTokenWithCodeRequest("tokenCode", object) } function getYhtTokenWithCodeNew(object = {}) { getYhtTokenWithCodeRequest("tokenCodeNew", object) } function getYhtTokenWithCodeRequest(type, object) { let path = object.url ? object.url : baseUrl const lang = object.lang || "zh_CN" if (type === "tokenCodeNew") { object.url = `${path}/rest/v1/mobile/login/yqcode?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/login/yqcode?lang=${lang}` } requestAction({ requestType: object.requestType, url: object.url, method: "GET", params: { code: object.code, lang: object.lang || "", }, headers: { "content-type": "application/json;", }, withCredentials: true, responseType: "json", success(res) { let dataObj = convertToObject(res) handleSuccessCallBack(object, dataObj) object.complete && object.complete(res) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //获取banner列表 function getBannerList(object = {}) { console.warn("'getBannerList:' is deprecated; first deprecated in 6.2.13; use 'getBannerListNew' function.") getBannerListRequest("banner", object) } function getBannerListNew(object = {}) { getBannerListRequest("bannerNew", object) } function getBannerListRequest(type, object) { let path = object.url ? object.url : baseUrl let category = object.category const lang = object.lang || "zh_CN" if (type === "bannerNew") { object.url = `${path}/rest/v1/mobile/banner/list?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/banner/list?lang=${lang}` } requestAction({ requestType: object.requestType, url: object.url, method: "GET", params: { category: category, platform: mtl.platform, // lang: object.lang || "", }, headers: object.headers, withCredentials: true, responseType: "json", success(res) { let dataObj = convertToObject(res) handleSuccessCallBack(object, dataObj) object.complete && object.complete(res) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //匿名情况下获取用户基本信息 function getBaseUserInfo(object) { let path = object.url ? object.url : baseUrl const userId = object.userId object.url = `${path}/rest/v1/mobile/user/anonymous/${userId}/info/simple` requestAction({ requestType: object.requestType, url: object.url, method: "GET", params: { tenantId: object.tenantId, }, headers: { "content-type": "application/json;", }, withCredentials: true, responseType: "json", success(res) { handleSuccessCallBack(object, res) object.complete && object.complete(res) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //小程序登录 function loginOfMiniProgram(object = {}) { console.warn("'loginOfMiniProgram:' is deprecated; first deprecated in 6.2.13; use 'loginOfMiniProgramNew' function.") loginOfMiniProgramRequest("miniLogin", object) } function loginOfMiniProgramNew(object = {}) { loginOfMiniProgramRequest("miniLoginNew", object) } function loginOfMiniProgramRequest(type, object) { let path = object.url ? object.url : baseUrl const lang = object.lang || "zh_CN" let url = `${path}/mobile-app/rest/v1/mobile/login/weChat?lang=${lang}` if (type === "miniLoginNew") { url = `${path}/rest/v1/mobile/login/weChat?lang=${lang}` } const paramsurl = getUrlParams() || {} const { appCode, authCode, encryptedData, iv } = paramsurl let ed = encryptedData + "==" let niv = iv + "==" let data = { wxAppId: appCode, wxCode: authCode, encryptedData: ed, iv: niv, lang: object.lang || "", } requestAction({ requestType: 1, url: url, method: "POST", data: data, headers: { "content-type": "application/json;", }, responseType: "json", success(res) { let dataObj = convertToObject(res) if (dataObj && dataObj.data) { const code = dataObj.code if (code === "1002") { localStorage.setItem("wxOpenId", dataObj.data.attributes.openId) } else if (code === "0") { mtl.setStorage({ domain: "mtlLoginInfo", key: "data", data: dataObj.data, }) localStorage.setItem("wxAppId", appCode) if (dataObj.data.attributes?.openId) { localStorage.setItem("wxOpenId", dataObj.data.attributes?.openId) } } } handleSuccessCallBack(object, dataObj) object.complete && object.complete(dataObj) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //微信绑定方法 function bindUser(object, type) { const openId = localStorage.getItem("wxOpenId") const paramsurl = getUrlParams() || {} const { appCode } = paramsurl if (openId && openId !== "") { const data = { username: object.username, password: object?.password, tenantId: object.tenantId, openId: openId, wxAppId: appCode, validateCodeType: "username", lang: object.lang || "", validateCode: "", } if (type === 2) { data.validateCode = object.validateCode data.username = object.mobile data.validateCodeType = "mobile" } requestAction({ requestType: 1, url: object.url, method: "POST", data: data, headers: { "content-type": "application/json;", }, responseType: "json", success(res) { let dataObj = convertToObject(res) if (dataObj && dataObj.data) { mtl.setStorage({ domain: "mtlLoginInfo", key: "data", data: dataObj.data, }) localStorage.setItem("wxAppId", appCode) } handleSuccessCallBack(object, dataObj) object.complete && object.complete(dataObj) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } else { const err = { code: "1", message: "no found openId", } handleFailCallBack(object, err) object.complete && object.complete(err) } } //微信解绑 function unBindUser(object = {}) { console.warn("'unBindUser:' is deprecated; first deprecated in 6.2.13; use 'unBindUserNew' function.") unBindUserRequest("miniUnbind", object) } function unBindUserNew(object = {}) { unBindUserRequest("miniUnbindNew", object) } function unBindUserRequest(type, object) { mtl.getStorage({ domain: "mtlLoginInfo", key: "data", success: function (res) { const path = object.url ? object.url : baseUrl const lang = object.lang || "zh_CN" let url = `${path}/mobile-app/rest/v1/mobile/user/weChatUnbind?lang=${lang}` if (type === "miniUnbindNew") { url = `${path}/rest/v1/mobile/user/weChatUnbind?lang=${lang}` } const openId = localStorage.getItem("wxOpenId") const wxAppId = localStorage.getItem("wxAppId") const dataObj = convertToObject(res.data) const yhtToken = dataObj.yhtToken.yhtAccessToken const data = { yhtToken: yhtToken, openId: openId, wxAppId: wxAppId, lang: object.lang || "", } requestAction({ requestType: 1, url: url, method: "POST", data: data, headers: { "content-type": "application/json;", }, responseType: "json", success(res) { let dataObj = convertToObject(res) handleSuccessCallBack(object, dataObj) object.complete && object.complete(dataObj) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) }, }) } // 内部方法 function loginRequest(type, object) { let path = object.url ? object.url : baseUrl let lang = object.lang || "zh_CN" let data = {} switch (type) { case "login": case "loginNew": if (mtl.platform === "wx") { if (type === "loginNew") { object.url = `${path}/rest/v1/mobile/login/weChatBindAndLogin?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/login/weChatBindAndLogin?lang=${lang}` } bindUser(object, 1) return } else { if (type === "loginNew") { object.url = `${path}/rest/v1/mobile/login/password?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/login/password?lang=${lang}` } data = { ...object, tenantId: object.tenantId ? object.tenantId : "", } } break case "validateCodeLogin": case "validateCodeLoginNew": if (mtl.platform === "wx") { if (type === "validateCodeLoginNew") { object.url = `${path}/rest/v1/mobile/login/weChatBindAndLogin?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/login/weChatBindAndLogin?lang=${lang}` } bindUser(object, 2) return } else { if (type === "validateCodeLoginNew") { object.url = `${path}/rest/v1/mobile/login/validateCode?lang=${lang}` } else { object.url = `${path}/mobile-app/rest/v1/mobile/login/validateCode?lang=${lang}` } data = { ...object, username: object.mobile, tenantId: object.tenantId ? object.tenantId : "", } } break default: break } requestAction({ requestType: object.requestType, url: object.url, method: "POST", data: data, headers: { "content-type": "application/json;", }, responseType: "json", success(res) { let dataObj = convertToObject(res) if (dataObj && dataObj.data) { mtl.setStorage({ domain: "mtlLoginInfo", key: "data", data: dataObj.data, }) } handleSuccessCallBack(object, dataObj) object.complete && object.complete(dataObj) }, fail(err) { handleFailCallBack(object, err) object.complete && object.complete(err) }, }) } //处理原生和H5的成功回调 function handleSuccessCallBack(object, res) { if (mtl.platform === "ios" || mtl.platform === "android") { window.mtl_handleCallback({ callbackId: object.callbackId, data: res, code: 0, }) } else { object.success && object.success(res) } } //处理原生和H5的失败回调 function handleFailCallBack(object, err) { if (mtl.platform === "ios" || mtl.platform === "android") { window.mtl_handleCallback({ callbackId: object.callbackId, msg: err.message, code: err.code, }) } else { object.fail && object.fail(err) } } // 内部方法 function requestAction(object = {}) { const { requestType = "" } = object if (requestType === "") { delete object.requestType axios(object) .then((response) => { let { status: code, statusText: message, data } = response 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: FAIL_CODE, message: err.message }; object.fail && object.fail(err) object.complete && object.complete(err) }) } else { mtl.request({ url: object.url, method: object.method, params: object.method === "POST" ? object.data : object.params, headers: object.headers, paramsType: object.method === "POST" ? 1 : 0, responseType: "json", success(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 }) }, fail: function (err) { object.fail && object.fail(err) object.complete && object.complete(err) }, }) } } function convertToObject(res) { let dataObj = res if (typeof res === "string") { try { dataObj = JSON.parse(res) } catch (error) { dataObj = res } } return dataObj } 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 getExclusiveLanguage(obj = {}) { let config = mtl.getStorageSync({ key: "key_lang", }) if (!!!config) { let useragent = window.navigator.userAgent.toLocaleLowerCase() if (useragent.includes("youzonelanguage")) { let newUas = useragent.split("youoneLanguage=") if (newUas.length > 1) { newUas = newUas[1].split(" ") if (newUas > 0) { config = newUas[0] } } } } if (config) { if (config === "tw") { config = "zht" } else if (config === "zh") { config = "zhs" } } else { config = "zhs" } obj.success && obj.success({ language: config }) obj.complete && obj.complete({ language: config }) } // 获取平台(区分友空间专属版、海外版) function getCurrentPlatform() { let platform = getPlatform() // 友空间公有云 let userAgent = window.navigator.userAgent if (userAgent.indexOf("QYZone_YonYouPrivateCloud") !== -1) { platform = "PrivateCloud" } else if (userAgent.indexOf("QYZone_OverSea") !== -1) { platform = "OverSea" } else if (userAgent.indexOf("QYZone_OverSea_HarmonyOS") !== -1) { platform = "QYZone_OverSea_HarmonyOS" } else if (userAgent.indexOf("QYZone_Exclusive_HarmonyOS") !== -1) { // 鸿蒙专属版 platform = "QYZone_Exclusive_HarmonyOS" } if (userAgent.indexOf("QYZone_OverSea_PrivateCloud") !== -1) { // 友空间私有版 海外发布 platform = "QYZone_OverSea_PrivateCloud" } else if (userAgent.indexOf("QYZone_OverSea_PrivateCloud_HarmonyOS") !== -1) { // 友空间鸿蒙私有版 海外发布 platform = "QYZone_OverSea_PrivateCloud_HarmonyOS" } return platform } /** * 获取指定的多数据中心域名 * @param {string} serviceCode 服务编码 * @param {string} tenantId 租户ID * @param {string} success 成功的回调 * @param {string} fail 失败的回调 */ function getDomain(params) { if (params?.serviceCode) { return } let serviceCode = params?.serviceCode let tenantId = params?.tenantId // 获取域名 mtl.getMultiDataCenterConfig({ success: (res) => { if (Object.keys(res).length === 0) { params?.success(window.location.origin) return } let domainUrl = '' // 如果 serviceCode 存在需要查询是否在多数据中心环境 let multidataCodeList = res.multidata?.multidataCode // 多数据中心域名 let domainCodeList = res.domain?.domainCode // 社会化服务域名 if (multidataCodeList[serviceCode]) { domainUrl = res.multidata.multidataUrl[tenantId || res.currentTenantID] } else if (domainCodeList[serviceCode]) { domainUrl = res.domain.domainUrl // 社会化域名 } else { domainUrl = window.location.origin // 当前环境域名 } params?.success(domainUrl) }, fail: (err) => { console.log("getMultiDataCenterConfig bridge no exist"); // 处理私有版 if (mtl.platform === "APIIos" || mtl.platform === "APIAndroid") { // 友空间私有版 需要额外处理 mtl.getStorage({ key: 'key_base_url', success: (res) => { console.log("API key_base_url = ", res) params?.success(res?.data || window.location.origin) }, fail: (err) => { params?.success(window.location.origin) }, }) } else { params?.success(window.location.origin) } } }) } export default { platform: getPlatform(), systemType: getSystemType, apiUpesn: apiUpesn, upesnVersion, isWxH5: isWxH5(), NAVITYPE, getDomain, setContext, login, loginNew, validateCodeLogin, validateCodeLoginNew, autoLogin, autoLoginNew, sendValidateCode, sendValidateCodeNew, changeTenant, changeTenantNew, getAppList, getAppListNew, getEsnCode, getEsnCodeNew, getYhtTokenWithCode, getYhtTokenWithCodeNew, getBannerList, getBannerListNew, getBaseUserInfo, getIndependenceAppList, loadMtlCDNJs, loadCDNJS, loginOfMiniProgram, loginOfMiniProgramNew, unBindUser, unBindUserNew, getExclusiveLanguage, logout, initMobileService, currentPlatform: getCurrentPlatform(), isTrustedPlatform, }