diff --git a/src/project/jinmin/wxworkKit.js b/src/project/jinmin/wxworkKit.js new file mode 100644 index 00000000..ba771fba --- /dev/null +++ b/src/project/jinmin/wxworkKit.js @@ -0,0 +1,93 @@ +import http from "axios"; + +const timer = {} + +/** + * 企业微信工具类 + * @param config 应用配置 + * @param agentSignURL 授权url + * @param apiList 授权的接口集合 + */ +class wxworkKit { + constructor() { + this.agentSignURL = "" + this.agentSign() + } + + /** + * 授权jssdk在url上使用,并获取当前的企业微信应用配置 + * @param params + * @returns {Promise} + */ + agentSign(params = {}) { + //授权jssdk在url上使用,并获取corpId + const url = window.location.href + if (this.agentSignURL == url && this.config.corpId) { + return Promise.resolve() + } else { + this.agentSignURL = url + this.apiList = [] + return http.post("https://mzt.hlj.gov.cn/mztweb/app/wxcp/portal/agentSign", null, { + params: {...params, url} + }).then(res => { + if (res?.data?.data) { + const config = { + ...params, + debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 + beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题 + corpId: res.data.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致 + agentId: res.data.agentid, // 必填,企业微信的应用id (e.g. 1000247) + timestamp: Number(res.data.timestamp), // 必填,生成签名的时间戳 + nonceStr: res.data.nonceStr, // 必填,生成签名的随机串 + signature: res.data.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法 + ...res.data.data + } + this.config = config + return config + } + }).catch(err => { + console.error(err) + }) + } + } + + /** + * 授权jssdk的使用 + * @param apis 可以为数组或者单字符串 + * @returns {Promise} + */ + injectJWeixin(apis) { + const inject = (jsApiList) => new Promise((resolve, reject) => { + jsApiList = jsApiList || [] + if (timer.injectJWeixin) {//节流设置,500ms内的多次请求合并到一处 + clearTimeout(timer.injectJWeixin) + jsApiList = [...new Set([...this.apiList, ...jsApiList])] + this.apiList = jsApiList + } + timer.injectJWeixin = setTimeout(() => { + const sdk = wx?.agentConfig ? wx : jWeixin + console.log("agentConfig配置:") + console.log({...this.config, jsApiList}) + sdk?.agentConfig({ + ...this.config, jsApiList, + success: res => resolve(res), + fail: err => { + console.error(err) + reject(err) + } + }) + }, 500) + }) + return inject([apis].flat().filter(Boolean)) + } + + /** + * 判断是否为企业微信环境 + * @returns {boolean} + */ + static isWxwork() { + return /wxwork/i.test(navigator.userAgent) + } +} + +export default wxworkKit \ No newline at end of file