提交 7f778751 作者: 毛细亚

修改代码

上级 4924ba3a
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"/><title>company_app</title><script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script><script defer="defer" src="static/js/chunk-vendors.b6398f5b.js"></script><script defer="defer" src="static/js/app.05db7d66.js"></script><link href="static/css/chunk-vendors.8e901099.css" rel="stylesheet"><link href="static/css/app.6073802c.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but company_app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> <!DOCTYPE html>
\ No newline at end of file <html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="favicon.ico">
<!-- HTTP 1.1 -->
<meta http-equiv="pragma" content="no-cache">
<!-- HTTP 1.0 -->
<meta http-equiv="cache-control" content="no-cache">
<!-- Prevent caching at the proxy server -->
<meta http-equiv="expires" content="0">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
<title>company_app</title>
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0,shrink-to-fit=no,user-scalable=no"> -->
<script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
<script defer src="static/js/chunk-vendors.js"></script><script defer src="static/js/app.js"></script></head>
<body>
<noscript>
<strong>We're sorry but company_app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
</body>
</html>
[data-v-f1859a88]:export{menuText:#606266;menuActiveText:#3491fa;subMenuActiveText:#3491fa;menuBg:#fff;menuHover:#e1fff0;subMenuBg:#fff;themeColor:#3491fa;sidebarWidthOpen:190px;sidebarWidthClosed:56px;navbarHeight:50px;subMenuHover:#e1fff0;sideBarWidth:190px}.current-org[data-v-f1859a88]{font-weight:700;margin-right:5px}.loginContent[data-v-f1859a88]{display:flex;flex-direction:column;align-items:center;justify-content:center}.qr-contain[data-v-f1859a88]{margin:0 auto;width:260px;height:260px;position:relative;overflow:hidden}.qr-contain #dingTalkLoginContainer[data-v-f1859a88]{padding:15px;position:absolute;left:10px;bottom:0}.qr-contain .refresh[data-v-f1859a88]{display:none;text-align:center;position:absolute;width:40px;background:#fff;height:40px;transform:translate(-50%,-50%);left:50%;top:50%}.qr-contain .refresh i[data-v-f1859a88]{line-height:40px;font-size:26px;color:#3491fa;cursor:pointer}.qr-contain:hover .refresh[data-v-f1859a88]{display:block}.loading[data-v-f1859a88]{position:absolute;left:0;top:0;width:100%;height:100%;background:hsla(0,0%,100%,.7);display:flex;align-items:center;justify-content:center;z-index:20;transition:opacity .3s}.loading-spinner[data-v-f1859a88]{width:40px;height:40px;border:4px solid #e0e0e0;border-top:4px solid #3491fa;border-radius:50%;animation:spin-f1859a88 1s linear infinite}@keyframes spin-f1859a88{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
"use strict";(self["webpackChunkcompany_app"]=self["webpackChunkcompany_app"]||[]).push([[661],{2661:function(t,e,i){i.r(e),i.d(e,{default:function(){return _}});var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"loginContent"},[t.token?t._e():e("div",[e("div",[t._v(" 当前选中组织:"),e("span",{staticClass:"current-org"},[t._v(t._s(t.currentOrg.name))]),e("el-button",{attrs:{type:"text"},on:{click:function(e){t.showOrgDialog=!0}}},[t._v("切换组织")])],1),e("div",{staticClass:"qr-contain"},[e("div",{attrs:{id:"dingTalkLoginContainer"}}),e("div",{staticClass:"refresh"},[e("i",{staticClass:"el-icon-refresh-right",on:{click:t.refreshDingTalkQRCode}})]),t.qrLoading?e("div",{staticClass:"loading"},[e("span",{staticClass:"loading-spinner"})]):t._e()])]),e("el-dialog",{attrs:{visible:t.showOrgDialog,width:"300px",title:"选择组织"},on:{"update:visible":function(e){t.showOrgDialog=e}}},[e("ul",{staticStyle:{"list-style":"none",padding:"0","margin-top":"-20px"}},t._l(t.orgList,(function(i){return e("li",{key:i.app_key,style:{padding:"8px 16px",cursor:"pointer",background:i.app_key===t.currentOrg.app_key?"#e6f7ff":"",color:i.app_key===t.currentOrg.app_key?"#1890ff":"",fontWeight:i.app_key===t.currentOrg.app_key?"bold":"normal",borderRadius:"4px",marginBottom:"4px",transition:"background 0.2s"},on:{click:function(e){return t.switchOrg(i)},mouseover:function(e){t.hoveredOrg=i.app_key},mouseleave:function(e){t.hoveredOrg=null}}},[t._v(" "+t._s(i.name)+" "),i.app_key===t.currentOrg.app_key?e("span",{staticStyle:{"margin-left":"8px"}},[t._v("(当前)")]):t._e()])})),0)])],1)},o=[],s=(i(5366),i(6789)),r=i(3602),a=i(5885),c=i(4202),g=i(6707),d=i(1204),l={name:"login",components:{},data(){return{wecomUserInfo:null,dingUserInfo:null,signData:null,orgList:[],organizationNum:5,urlParams:{},currentOrg:{},showOrgDialog:!1,hoveredOrg:null,showRefresh:!1,qrLoading:!1,redirectUri:"https://companywx.zwnet.cn/api/api/sidebar_login/ding",DDTestUrl:"",token:(0,g.gf)()}},async mounted(){this.$nextTick((()=>{this.initLogin()}))},computed:{...(0,c.aH)("user",["corp_id"])},methods:{...(0,c.PY)("user",["set_corp_id","set_userid","set_userInfo","set_token","set_cser_info","set_signData","set_cser_id","set_cser_name","set_external_userid"]),async initLogin(){const t=(0,a.tI)();await this.initOrganization();const e=r.A.get("userid");t.type&&"ding"===t.type?(console.log(1),this.handleDingCallback()):this.token&&e?(console.log(2),await this.getSignature()):(console.log(3),e?(console.log(5),this.initDingTalkLogin()):(console.log(4),await this.startWeComSilentAuth()))},cacheCorp_id(t){r.A.set("corp_id",t,{expires:7}),this.set_corp_id(t)},cacheuserid(t){r.A.set("userid",t,{expires:7}),this.set_userid(t)},cacheCser(t,e){r.A.set("cser_id",t,{expires:7}),r.A.set("cser_name",e,{expires:7}),this.set_cser_info({cser_id:t,cser_name:e}),this.set_cser_id(t),this.set_cser_name(e)},cacheSignData(t){r.A.set("signData",JSON.stringify(t),{expires:7}),this.set_signData(t)},async startWeComSilentAuth(){this.urlParams=(0,a.tI)();const t=r.A.get("corp_id")||this.urlParams.corp_id;if(!t)return void this.$message.error("当前客服号信息异常,请切换会话后重试");if(!this.urlParams.code&&!this.urlParams.state){const e=encodeURIComponent(window.location.href),i=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${t}&redirect_uri=${e}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`;return void(window.location.href=i)}const e=await(0,s.WV)({code:this.urlParams.code,url:window.location.href,corp_id:t});if(1===e.status_code){if(!e.data.userid)return void this.$message.error("获取用户id失败");this.cacheuserid(e.data.userid),this.initDingTalkLogin()}else console.log("获取useid失败",e)},async getSignature(){console.log("获取签名",window.location.href);const t=r.A.get("corp_id");try{const i=await(0,s.dD)({corp_id:t,path:window.location.href});if(1===i.status_code){this.signData=i.data,this.cacheSignData(i.data);try{this.registerWeComSDK()}catch(e){console.log(e,"初始化sdk 失败")}}}catch(e){console.log(e,"获取签名失败"),window.location.href=window.location.origin+"/company_app/index.html?corp_id="+t+"&msg=signerror"}},getCurExternalContact(){this.$ww.getCurExternalContact({success:t=>{"getCurExternalContact:ok"===t.err_msg&&(console.log(t,"重新进入获取企微外部联系人"),this.set_external_userid(t.userId),this.$nextTick((()=>{this.$router.replace("/"),console.log(window.location.href,"window.location.hrefuserInfo")})))},fail:t=>{console.log(t,"获取企微外部联系人失败")}})},registerWeComSDK(){console.log("删除企业签名",1231),this.$ww.register({corpId:r.A.get("corp_id"),agentId:this.signData.agent_id,jsApiList:d.A,getAgentConfigSignature:()=>Promise.resolve({nonceStr:this.signData.nonce_str,timestamp:this.signData.signature_time,signature:this.signData.agent_signature}),onAgentConfigSuccess:t=>{console.log("注册成功可以调用企微 js-sdk",t),this.getCurExternalContact()},onAgentConfigFail:t=>{console.log("注册失败不能使用企微js-sdk",t)}})},async initOrganization(){const t=await(0,s.SA)();1===t.data.status_code&&(this.orgList=t.data.data.data.filter((t=>t.id<=this.organizationNum)),this.initCurrentApp())},initCurrentApp(){const t=this.orgList.find((t=>"dingjigp0ksn9nbljdli"===t.app_key));this.$set(this,"currentOrg",t)},initDingTalkLogin(){if(this.qrLoading=!0,console.log("进入初始化钉钉",this.currentOrg),!this.currentOrg.app_key)return;const t=this.currentOrg.app_key,e=document.getElementById("dingTalkLoginContainer");e&&(e.innerHTML=""),DDLogin({id:"dingTalkLoginContainer",goto:encodeURIComponent(`https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${t}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${this.redirectUri}`),style:"border:none;background-color:#FFFFFF;margin:0",width:"210",height:"250"}),this.$nextTick((()=>{setTimeout((()=>{this.qrLoading=!1}),1e3)})),window.addEventListener("message",this.handleDingTalkLogin,!1),"undefined"!==typeof window.addEventListener?window.addEventListener("message",this.handleDingTalkLogin,!1):"undefined"!==typeof window.attachEvent&&window.attachEvent("onmessage",this.handleDingTalkLogin)},switchOrg(t){t.app_key!==this.currentOrg.app_key&&(this.currentOrg=t,this.showOrgDialog=!1,this.initDingTalkLogin())},async handleDingTalkLogin(t){console.log("收到扫码回调");const e=r.A.get("corp_id"),i=r.A.get("userid");if("https://login.dingtalk.com"!==t.origin)return;const n=t.data,o=this.currentOrg.app_key,s=encodeURIComponent(`${this.currentOrg.app_key}$${this.currentOrg.template_code}$${e}$${i}`),a=`https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${o}&response_type=code&scope=snsapi_login&state=${s}&redirect_uri=${this.redirectUri}&loginTmpCode=${n}`;console.log(a,"回调 url"),this.DDTestUrl=a,window.location.href=a},async handleDingCallback(){console.log("扫码成功");const t=(0,a.tI)(),e=r.A.get("corp_id");if("error"==t.code&&t.msg)return this.$message.error(t.msg),void setTimeout((()=>{window.location.href=window.location.origin+"/company_app/index.html?corp_id="+e+"&msg=error"}),5e3);t.token&&"undefined"!=t.token?((0,g.WG)(t.token),this.set_token(t.token),await this.getSignature()):(console.log("没有token"),window.location.href=window.location.origin+"/company_app/index.html?corp_id="+e+"&msg=notoken"),t.cser_id&&this.cacheCser(t.cser_id,t.cser_name)},refreshDingTalkQRCode(){this.initDingTalkLogin()}}},p=l,h=i(8477),u=(0,h.A)(p,n,o,!1,null,"f1859a88",null),_=u.exports}}]);
//# sourceMappingURL=661.8f16344b.js.map
\ No newline at end of file
{"version":3,"file":"static/js/661.8f16344b.js","mappings":"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","sources":["webpack://company_app/./src/views/login.vue","webpack://company_app/src/views/login.vue","webpack://company_app/./src/views/login.vue?f002","webpack://company_app/./src/views/login.vue?e688"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"loginContent\"},[(!_vm.token)?_c('div',[_c('div',[_vm._v(\" 当前选中组织:\"),_c('span',{staticClass:\"current-org\"},[_vm._v(_vm._s(_vm.currentOrg.name))]),_c('el-button',{attrs:{\"type\":\"text\"},on:{\"click\":function($event){_vm.showOrgDialog = true}}},[_vm._v(\"切换组织\")])],1),_c('div',{staticClass:\"qr-contain\"},[_c('div',{attrs:{\"id\":\"dingTalkLoginContainer\"}}),_c('div',{staticClass:\"refresh\"},[_c('i',{staticClass:\"el-icon-refresh-right\",on:{\"click\":_vm.refreshDingTalkQRCode}})]),(_vm.qrLoading)?_c('div',{staticClass:\"loading\"},[_c('span',{staticClass:\"loading-spinner\"})]):_vm._e()])]):_vm._e(),_c('el-dialog',{attrs:{\"visible\":_vm.showOrgDialog,\"width\":\"300px\",\"title\":\"选择组织\"},on:{\"update:visible\":function($event){_vm.showOrgDialog=$event}}},[_c('ul',{staticStyle:{\"list-style\":\"none\",\"padding\":\"0\",\"margin-top\":\"-20px\"}},_vm._l((_vm.orgList),function(org){return _c('li',{key:org.app_key,style:({\n padding: '8px 16px',\n cursor: 'pointer',\n background: org.app_key === _vm.currentOrg.app_key ? '#e6f7ff' : '',\n color: org.app_key === _vm.currentOrg.app_key ? '#1890ff' : '',\n fontWeight: org.app_key === _vm.currentOrg.app_key ? 'bold' : 'normal',\n borderRadius: '4px',\n marginBottom: '4px',\n transition: 'background 0.2s'\n }),on:{\"click\":function($event){return _vm.switchOrg(org)},\"mouseover\":function($event){_vm.hoveredOrg = org.app_key},\"mouseleave\":function($event){_vm.hoveredOrg = null}}},[_vm._v(\" \"+_vm._s(org.name)+\" \"),(org.app_key === _vm.currentOrg.app_key)?_c('span',{staticStyle:{\"margin-left\":\"8px\"}},[_vm._v(\"(当前)\")]):_vm._e()])}),0)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// UnifiedLogin.vue\n<template>\n <div class=\"loginContent\">\n <div v-if=\"!token\">\n <div>\n 当前选中组织:<span class=\"current-org\">{{ currentOrg.name }}</span>\n <el-button type=\"text\" @click=\"showOrgDialog = true\">切换组织</el-button>\n </div>\n <div class=\"qr-contain\">\n <div id=\"dingTalkLoginContainer\">\n </div>\n <div class=\"refresh\">\n <i class=\"el-icon-refresh-right \" @click=\"refreshDingTalkQRCode\"></i>\n </div>\n <!-- 生二维码的时候加一个 loading -->\n <div class=\"loading\" v-if=\"qrLoading\">\n <span class=\"loading-spinner\"></span>\n </div>\n </div>\n </div>\n <!-- 组织切换弹窗 -->\n <el-dialog :visible.sync=\"showOrgDialog\" width=\"300px\" title=\"选择组织\">\n <ul style=\"list-style:none;padding:0;margin-top: -20px;\">\n <li v-for=\"org in orgList\" :key=\"org.app_key\" @click=\"switchOrg(org)\" :style=\"{\n padding: '8px 16px',\n cursor: 'pointer',\n background: org.app_key === currentOrg.app_key ? '#e6f7ff' : '',\n color: org.app_key === currentOrg.app_key ? '#1890ff' : '',\n fontWeight: org.app_key === currentOrg.app_key ? 'bold' : 'normal',\n borderRadius: '4px',\n marginBottom: '4px',\n transition: 'background 0.2s'\n }\" @mouseover=\"hoveredOrg = org.app_key\" @mouseleave=\"hoveredOrg = null\">\n {{ org.name }}\n <span v-if=\"org.app_key === currentOrg.app_key\" style=\"margin-left:8px;\">(当前)</span>\n </li>\n </ul>\n </el-dialog>\n </div>\n</template>\n\n<script>\nimport * as ww from '@wecom/jssdk'\nimport { getOrganization, getAuthUser, getSignature } from '@/api/user'\nimport Cookies from 'js-cookie'\nimport { getParams } from '@/utils/index'\nimport { mapMutations, mapState } from 'vuex'\nimport { getToken, setToken } from '@/utils/auth'\nimport jsApiList from '@/utils/jsApiList'\nexport default {\n name: 'login',\n components: {\n },\n data() {\n return {\n wecomUserInfo: null, // 企微用户信息\n dingUserInfo: null, // 钉钉用户信息\n signData: null, // 企微签名数据\n orgList: [],\n organizationNum: 5,\n urlParams: {},\n currentOrg: {},\n showOrgDialog: false,\n hoveredOrg: null,\n showRefresh: false, // 控制刷新按钮显示\n qrLoading: false, // 控制二维码 loading\n redirectUri: process.env.NODE_ENV === 'production' ? 'https://companywx.zwnet.cn/api/api/sidebar_login/ding' : 'https://companywx.zwwlkj03.top/api/api/sidebar_login/ding',\n DDTestUrl: '',\n token: getToken()\n }\n },\n async mounted() {\n this.$nextTick(() => {\n this.initLogin()\n })\n },\n computed: {\n ...mapState('user', ['corp_id'])\n },\n methods: {\n ...mapMutations('user', ['set_corp_id', 'set_userid', 'set_userInfo', 'set_token', 'set_cser_info', 'set_signData', 'set_cser_id', 'set_cser_name', 'set_external_userid']),\n async initLogin() {\n const urlParams = getParams();\n await this.initOrganization();\n const userid = Cookies.get('userid');\n // 如果是钉钉扫码回调页面\n if (urlParams.type && urlParams.type === 'ding') {// 钉钉回调\n console.log(1)\n this.handleDingCallback();\n } else if (this.token && userid) { // 已经钉钉扫码过 重新获取授权 获取签名 注册企微js-sdk\n console.log(2)\n await this.getSignature();\n } else {\n console.log(3)\n if (!userid) { //没有企微授权过 并且 钉钉扫码成功 开始微信授权\n console.log(4)\n await this.startWeComSilentAuth();\n } else {\n console.log(5)\n this.initDingTalkLogin(); // 始化钉钉扫码\n }\n }\n\n },\n // 设置缓存\n cacheCorp_id(corp_id) {\n Cookies.set('corp_id', corp_id, { expires: 7 })\n this.set_corp_id(corp_id)\n },\n cacheuserid(userid) {\n Cookies.set('userid', userid, { expires: 7 })\n this.set_userid(userid)\n },\n cacheCser(cser_id, cser_name) {\n Cookies.set('cser_id', cser_id, { expires: 7 })\n Cookies.set('cser_name', cser_name, { expires: 7 })\n this.set_cser_info({\n cser_id: cser_id,\n cser_name: cser_name\n })\n this.set_cser_id(cser_id)\n this.set_cser_name(cser_name)\n },\n cacheSignData(signData) {\n Cookies.set('signData', JSON.stringify(signData), { expires: 7 })\n this.set_signData(signData)\n },\n // 进入的页面地址是 https://companywx.jianshuwenhua.com/company_app/index.html?corp_id=wweaefe716636df3d1\n // 1. 企微静默授权\n async startWeComSilentAuth() {\n this.urlParams = getParams();\n const corp_id = Cookies.get('corp_id') || this.urlParams.corp_id \n if (!corp_id) {\n this.$message.error('当前客服号信息异常,请切换会话后重试')\n return\n }\n // 确定是第一次进入页面 没有 code 和 state\n if (!this.urlParams.code && !this.urlParams.state) {\n // 跳转企微静默授权\n const redirectUri = encodeURIComponent(window.location.href);\n const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${corp_id}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`;\n window.location.href = authUrl;\n return;\n }\n // 用code\n const res = await getAuthUser({ code: this.urlParams.code, url: window.location.href, corp_id: corp_id });\n if (res.status_code === 1) {\n if(res.data.userid){\n this.cacheuserid(res.data.userid)\n this.initDingTalkLogin(); // 初始化钉钉扫码\n }else{\n this.$message.error('获取用户id失败')\n return\n }\n } else {\n console.log('获取useid失败', res)\n // 错误处理\n }\n },\n async getSignature() {\n console.log('获取签名', window.location.href)\n const corp_id = Cookies.get('corp_id')\n try {\n const res = await getSignature({ corp_id: corp_id, path: window.location.href });\n if (res.status_code === 1) {\n this.signData = res.data\n this.cacheSignData(res.data)\n try {\n this.registerWeComSDK();\n } catch (err) {\n console.log(err, '初始化sdk 失败')\n }\n }\n } catch (err) {\n console.log(err, '获取签名失败')\n window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=signerror'\n }\n },\n getCurExternalContact() {\n this.$ww.getCurExternalContact({\n success: (res) => {\n if (res.err_msg === \"getCurExternalContact:ok\") {\n console.log(res, '重新进入获取企微外部联系人')\n this.set_external_userid(res.userId)\n // 确保 Vuex 状态更新后再跳转\n this.$nextTick(() => {\n this.$router.replace('/')\n console.log(window.location.href, 'window.location.hrefuserInfo')\n })\n }\n },\n fail: (err) => {\n console.log(err, '获取企微外部联系人失败')\n // 错误处理\n }\n });\n },\n // 2. 注册企微JS-SDK\n registerWeComSDK() {\n console.log('删除企业签名', 1231)\n this.$ww.register({\n corpId: Cookies.get('corp_id'),\n agentId: this.signData.agent_id,\n jsApiList: jsApiList,\n // getConfigSignature: () => Promise.resolve({\n // nonceStr: this.signData.nonce_str,\n // timestamp: this.signData.signature_time,\n // signature: this.signData.corp_signature,\n // }),\n // 只用到应用的 api 可以只进行应用的签名\n getAgentConfigSignature: () => Promise.resolve({\n nonceStr: this.signData.nonce_str,\n timestamp: this.signData.signature_time,\n signature: this.signData.agent_signature,\n }),\n onAgentConfigSuccess: (res) => {\n console.log('注册成功可以调用企微 js-sdk', res)\n // 注册成功后不立即获取外部联系人,等钉钉扫码后再获取\n this.getCurExternalContact()\n },\n onAgentConfigFail: (err) => {\n console.log('注册失败不能使用企微js-sdk', err)\n // 错误处理123\n }\n });\n\n },\n\n // 3. 获取组织列表并选取默认组织\n async initOrganization() {\n const res = await getOrganization();\n if (res.data.status_code === 1) {\n this.orgList = res.data.data.data.filter(item => item.id <= this.organizationNum)\n // 默认组织逻辑:可根据业务自定义\n this.initCurrentApp();\n }\n },\n initCurrentApp() {\n const currentApp = this.orgList.find(\n (item) => item.app_key === \"dingjigp0ksn9nbljdli\"\n );\n this.$set(this, \"currentOrg\", currentApp);\n\n },\n // 4. 初始化钉钉扫码\n initDingTalkLogin() {\n this.qrLoading = true;\n console.log('进入初始化钉钉', this.currentOrg)\n if (!this.currentOrg.app_key) return;\n const appid = this.currentOrg.app_key;\n // 清空二维码容器,防止切换组织后二维码不刷新\n const container = document.getElementById('dingTalkLoginContainer');\n if (container) container.innerHTML = '';\n DDLogin({\n id: 'dingTalkLoginContainer',\n goto: encodeURIComponent(`https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${this.redirectUri}`),\n style: 'border:none;background-color:#FFFFFF;margin:0',\n width: '210',\n height: '250'\n });\n // 二维码生成后,短暂延迟后隐藏 loading(二维码生成是同步的,但页面渲染有延迟)\n this.$nextTick(() => {\n setTimeout(() => {\n this.qrLoading = false;\n }, 1000); // 500ms 平滑过渡\n });\n\n window.addEventListener('message', this.handleDingTalkLogin, false);\n if (typeof window.addEventListener !== 'undefined') {\n window.addEventListener('message', this.handleDingTalkLogin, false)\n } else if (typeof window.attachEvent !== 'undefined') {\n window.attachEvent('onmessage', this.handleDingTalkLogin)\n }\n },\n // https://companywx.jianshuwenhua.com/company_app/login?code=success&cser_id=4090&cser_name=%E6%AF%9B%E7%BB%86%E4%BA%9A&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOjQwOTAsImRhdGEiOnsiY3Nlcl9pZCI6NDA5MCwiY3Nlcl9uYW1lIjoi5q-b57uG5LqaIn0sImlhdCI6MTc0Nzk5MDM0MiwiZXhwIjoxNzUwNTgyMzQyLCJuYmYiOjE3NDc5OTAzNDIsInN1YiI6InRva2Vu6K6k6K-BIiwianRpIjoiYzYzYTM4NGYzMTFmODVlMGQ2Nzg2ZmJiMTdhNjQzN2EifQ.5ADPtqISjxOqbrDOzlKkCpfTr78Sv0Sdi-_Y1RRiMH0&type=ding\n\n // 5. 切换组织\n switchOrg(org) {\n if (org.app_key === this.currentOrg.app_key) return; // 已是当前组织不处理\n this.currentOrg = org;\n this.showOrgDialog = false;\n this.initDingTalkLogin();\n },\n // 6. 钉钉扫码回调\n async handleDingTalkLogin(event) {\n console.log('收到扫码回调')\n const corp_id = Cookies.get('corp_id')\n const userid = Cookies.get('userid')\n if (event.origin !== 'https://login.dingtalk.com') return;\n const loginTmpCode = event.data;\n // 跳转到后端,后端用loginTmpCode换取钉钉用户信息\n const appid = this.currentOrg.app_key;\n const state = encodeURIComponent(`${this.currentOrg.app_key}$${this.currentOrg.template_code}$${corp_id}$${userid}`)\n const url = `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appid}&response_type=code&scope=snsapi_login&state=${state}&redirect_uri=${this.redirectUri}&loginTmpCode=${loginTmpCode}`;\n console.log(url, '回调 url')\n this.DDTestUrl = url\n window.location.href = url;\n },\n // 7. 钉钉扫码回调页面处理\n async handleDingCallback() {\n // 在这里处理钉钉扫码成功的回调\n console.log('扫码成功')\n const ddParams = getParams();\n const corp_id = Cookies.get('corp_id')\n if (ddParams.code == 'error' && ddParams.msg) {\n this.$message.error(ddParams.msg)\n setTimeout(() => {\n window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=error'\n }, 5000)\n return\n }\n if (ddParams.token && ddParams.token != 'undefined') {\n setToken(ddParams.token)\n this.set_token(ddParams.token)\n // 获取签名\n await this.getSignature();\n } else {\n console.log('没有token')\n window.location.href = window.location.origin + '/company_app/index.html?corp_id=' + corp_id + '&msg=notoken'\n }\n if (ddParams.cser_id) {\n this.cacheCser(ddParams.cser_id, ddParams.cser_name)\n }\n\n },\n refreshDingTalkQRCode() {\n this.initDingTalkLogin();\n },\n },\n\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n.current-org {\n font-weight: bold;\n margin-right: 5px;\n}\n\n.loginContent {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n.qr-contain {\n margin: 0 auto;\n /* margin-top: 20px; */\n width: 260px;\n height: 260px;\n position: relative;\n overflow: hidden;\n\n #dingTalkLoginContainer {\n padding: 15px;\n position: absolute;\n left: 10px;\n bottom: 0;\n }\n\n .refresh {\n display: none;\n text-align: center;\n position: absolute;\n width: 40px;\n background: #fff;\n height: 40px;\n transform: translate(-50%, -50%);\n left: 50%;\n top: 50%;\n\n i {\n line-height: 40px;\n font-size: 26px;\n color: #3491FA;\n cursor: pointer;\n }\n }\n\n &:hover {\n .refresh {\n display: block;\n }\n }\n}\n\n.loading {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: rgba(255, 255, 255, 0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 20;\n transition: opacity 0.3s;\n}\n\n.loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid #e0e0e0;\n border-top: 4px solid #3491FA;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n</style>","import mod from \"-!../../node_modules/.pnpm/thread-loader@3.0.4_webpack@5.99.8/node_modules/thread-loader/dist/cjs.js!../../node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/.pnpm/thread-loader@3.0.4_webpack@5.99.8/node_modules/thread-loader/dist/cjs.js!../../node_modules/.pnpm/babel-loader@8.4.1_@babel+core@7.27.1_webpack@5.99.8/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./login.vue?vue&type=template&id=f1859a88&scoped=true\"\nimport script from \"./login.vue?vue&type=script&lang=js\"\nexport * from \"./login.vue?vue&type=script&lang=js\"\nimport style0 from \"./login.vue?vue&type=style&index=0&id=f1859a88&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/.pnpm/vue-loader@15.11.1_@vue+compiler-sfc@3.5.14_css-loader@6.11.0_webpack@5.99.8__lodash@4._898f46ed7f437ee9a834018c670400fe/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f1859a88\",\n null\n \n)\n\nexport default component.exports"],"names":["render","_vm","this","_c","_self","staticClass","token","_e","_v","_s","currentOrg","name","attrs","on","$event","showOrgDialog","refreshDingTalkQRCode","qrLoading","staticStyle","_l","orgList","org","key","app_key","style","padding","cursor","background","color","fontWeight","borderRadius","marginBottom","transition","switchOrg","hoveredOrg","staticRenderFns","components","data","wecomUserInfo","dingUserInfo","signData","organizationNum","urlParams","showRefresh","redirectUri","DDTestUrl","getToken","mounted","$nextTick","initLogin","computed","mapState","methods","mapMutations","getParams","initOrganization","userid","Cookies","get","type","console","log","handleDingCallback","getSignature","initDingTalkLogin","startWeComSilentAuth","cacheCorp_id","corp_id","set","expires","set_corp_id","cacheuserid","set_userid","cacheCser","cser_id","cser_name","set_cser_info","set_cser_id","set_cser_name","cacheSignData","JSON","stringify","set_signData","$message","error","code","state","encodeURIComponent","window","location","href","authUrl","res","getAuthUser","url","status_code","path","registerWeComSDK","err","origin","getCurExternalContact","$ww","success","err_msg","set_external_userid","userId","$router","replace","fail","register","corpId","agentId","agent_id","jsApiList","getAgentConfigSignature","Promise","resolve","nonceStr","nonce_str","timestamp","signature_time","signature","agent_signature","onAgentConfigSuccess","onAgentConfigFail","getOrganization","filter","item","id","initCurrentApp","currentApp","find","$set","appid","container","document","getElementById","innerHTML","DDLogin","goto","width","height","setTimeout","addEventListener","handleDingTalkLogin","attachEvent","event","loginTmpCode","template_code","ddParams","msg","setToken","set_token","component"],"sourceRoot":""}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -281,13 +281,13 @@ import { getToken,removeToken } from '@/utils/auth' ...@@ -281,13 +281,13 @@ import { getToken,removeToken } from '@/utils/auth'
}, },
}, },
mixins: [watchMember], mixins: [watchMember],
created() {
// 初始化企业微信SDK
this.initializeWecom()
// 获取客服状态和相关信息
this.getInitialData()
},
mounted() { mounted() {
// 初始化企业微信SDK
this.initializeWecom()
// 获取客服状态和相关信息
if(this.userid){
this.getInitialData()
}
}, },
methods: { methods: {
...mapMutations('game', ['set_accountSelect']), ...mapMutations('game', ['set_accountSelect']),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论