提交 d3542796 作者: 毛细亚

更新代码

上级 5bbca450
[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.
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论