UNPKG

mtl-js-sdk

Version:

ynf-fw-mtl-api

158 lines (150 loc) 6.01 kB
/* * @Author: liucongw * @Date: 2023-12-13 09:44:26 * @LastEditors: wangyingliang wangyingliang@yonyou.com * @LastEditTime: 2024-10-31 09:42:58 * @FilePath: /mtl-api-project/src/platforms/dingtalk/platform.js * @Description: 钉钉平台入口 */ import methods from './methods.js' import builder from '../../common/builder' import proxy from './dd.proxy.js' let isReady = false let callbacks = [] const SUCCESS_CODE = 200 const FAIL_CODE = -1004 const { configPermission } = proxy function recurseDelegate(module) { let delegate = {} for (const key in module) { if (Object.prototype.hasOwnProperty.call(module, key)) { const element = module[key] if (typeof element === "function") { delegate[key] = (...args) => { console.log("exec api method :", key) console.log("exec api args :", args) if (isReady) { // 统计函数 if (window?.AnalysysAgent) { const obj = { "service_code": window.location.origin + window.location?.pathname, "fun_name": key, "useragent_name": window.navigator.userAgent, "origin_name": window.location.origin, "version_name": window?.mtl?.version, "platform_name": window?.mtl?.platform, } console.log("mtl AnalysysAgent obj: ", obj); window?.AnalysysAgent?.track("function_call", obj); } builder.assignGetter(window.mtl, key, element) element(...args) } else { callbacks.push(() => { // 统计函数 if (window?.AnalysysAgent) { const obj = { "service_code": window.location.origin + window.location?.pathname, "fun_name": key, "useragent_name": window.navigator.userAgent, "origin_name": window.location.origin, "version_name": window?.mtl?.version, "platform_name": window?.mtl?.platform, } console.log("mtl AnalysysAgent obj: ", obj); window?.AnalysysAgent?.track("function_call", obj); } builder.assignGetter(window.mtl, key, element) element(...args) }) } } } else if (typeof element === "object") { delegate[key] = recurseDelegate(element) } else { delegate[key] = element } } } return delegate } /** * @description: 钉钉平台 JSSDK 鉴权入口 * @param {String} authSdkUrl JSSDK url * @param {String} url - getTicket 接口地址 * @param {String} pageUrl - 待授权网页 url * @param {String} agentId - 企业内部应用 AgentId 必传 * @param {String} corpId - 企业 ID 必传 * @param {String} appId - 企业内部应用的 Client ID 必传 * @param {String} secret - 企业内部应用的 Client Secret 必传 * @param {String []} apiList - 待授权 api 列表 * @param {Function} success 成功回调 * @param {Function} fail 失败回调 * @param {Function} complete 完成回调 * @param {Boolean} onlyLoadJS 仅加载 JSSDK 无需授权 */ function initConfig(params) { let jsSdkPath = params?.jsSdkPath || params?.authSdkUrl || "https://g.alicdn.com/dingding/dingtalk-jsapi/3.0.25/dingtalk.open.js" loadScript(jsSdkPath, function (res) { configPermission({ ...params, success: (res) => { console.log("dingtalk authorization successful") const backRes = { code: SUCCESS_CODE, data: res, } params?.success && params?.success(res) params?.complete && params?.complete(backRes) }, fail: (err) => { let newErr = err || {} console.log("dingtalk authorization fail:" + JSON.stringify(newErr)) const res = { code: FAIL_CODE, message: "dingtalk authorization fail", ...newErr, } params?.fail && params?.fail(err) params?.complete && params?.complete(res) }, }) }, function (err) { console.log("dingtalk-jsapi load fail") } ) } /** * @description: 加载远程js文件 * @param {String} url 远程地址 * @param {Function} callback 加载成功的回调函数 * @param {Function} errorCallback 加载失败的回调函数 */ function loadScript(url = "", callback = "", errorCallback = "", defer) { if (url) { let script = document.createElement("script") script.type = "text/javascript" script.src = url script.onload = function (e) { callback && callback() } script.defer = defer script.onerror = function () { errorCallback && errorCallback() } window.document.head.appendChild(script) } } const platform = { id: "dingtalk", bootstrap(onready) { isReady = true callbacks.forEach((cb) => cb()) callbacks = null // 自动鉴权逻辑, 全部走缓存或URL数据 initConfig() onready() }, } platform.exports = { ...recurseDelegate(methods), initConfig } export default platform