| 1 |
- (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-172ebed4"],{9341:function(t,e,r){"use strict";r.r(e);var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"wechat-auth-container"},[e("div",{staticClass:"auth-content"},["loading"===t.authStatus?e("div",{staticClass:"auth-status"},[e("van-loading",{attrs:{type:"spinner",color:"#1989fa"}}),e("p",[t._v("正在授权中...")])],1):"error"===t.authStatus?e("div",{staticClass:"auth-status"},[e("van-icon",{attrs:{name:"cross",color:"#ee0a24",size:"48"}}),e("p",[t._v("授权失败")]),e("p",{staticClass:"error-message"},[t._v(t._s(t.errorMessage))]),e("van-button",{attrs:{type:"primary"},on:{click:t.retryAuth}},[t._v("重新授权")])],1):e("div",{staticClass:"auth-status"},[e("van-icon",{attrs:{name:"wechat",color:"#07c160",size:"48"}}),e("p",[t._v("微信授权")]),e("p",{staticClass:"auth-desc"},[t._v("请点击下方按钮进行微信授权")]),e("van-button",{attrs:{type:"primary"},on:{click:t.startAuth}},[t._v("开始授权")])],1)])])},n=[],o=r("c7eb"),c=r("1da1"),s=r("5530"),i=(r("d9e2"),r("99af"),r("caad"),r("e9c4"),r("d3b7"),r("ac1f"),r("2532"),r("3ca3"),r("466d"),r("5319"),r("ddb0"),r("9861"),r("88a7"),r("271a"),r("5494"),r("2f62")),u=r("b775"),d="https://pbl.cocorobo.cn/api/cocoflow/";function h(t){return Object(u["a"])({url:d+"wechat-get-user-info",method:"POST",data:t,hideloading:!1})}function l(t){return Object(u["a"])({url:d+"wechat-register",method:"POST",data:t,hideloading:!1})}var p={name:"WechatAuth",data:function(){return{authStatus:"init",userInfo:{},errorMessage:"",redirect:"",code:""}},computed:{wechatConfig:function(){return{appId:"wx3a8dd28881c2c41f",scope:"snsapi_userinfo",redirectUri:encodeURIComponent(window.location.origin+"/wechat-auth"),state:"wechat_auth"}}},watch:{$route:{handler:function(t){var e,r=window.location.href,a=new URLSearchParams((null===(e=r.split("?")[1])||void 0===e?void 0:e.split("#")[0])||"");this.code=a.get("code")||t.query.code,this.state=a.get("state")||t.query.state,this.redirect=t.query.redirect||this.extractRedirectFromHash(),console.log("URL参数解析:",{url:r,code:this.code,state:this.state,redirect:this.redirect,routeQuery:t.query})},immediate:!0}},methods:Object(s["a"])(Object(s["a"])({},Object(i["b"])({login:"user/login",getInfo:"user/getInfo"})),{},{startAuth:function(){this.authStatus="loading";var t="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".concat(this.wechatConfig.appId,"&redirect_uri=").concat(this.wechatConfig.redirectUri,"&response_type=code&scope=").concat(this.wechatConfig.scope,"&state=").concat(this.wechatConfig.state,"#wechat_redirect");window.location.href=t},handleAuthCallback:function(){var t=this;return Object(c["a"])(Object(o["a"])().mark((function e(){var r,a,n,c,s;return Object(o["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t.code){e.next=4;break}return t.authStatus="error",t.errorMessage="未获取到授权码",e.abrupt("return");case 4:return e.prev=4,t.authStatus="loading",e.next=8,t.exchangeCodeForToken(t.code);case 8:if(r=e.sent,console.log(r),!r.openid){e.next=24;break}return t.userInfo=r,t.authStatus="success",e.next=15,l({username:r.userInfo.nickname,mail:r.openid+"@wechat.com"});case 15:a=e.sent,console.log(a),n=JSON.stringify({openid:r.openid,edu:!0}),c=new Headers,c.append("Content-Type","application/json"),s={method:"POST",headers:c,body:n,redirect:"follow",credentials:"include"},fetch("https://beta.api.cocorobo.cn/api/user",s).then((function(t){return t.text()})).then((function(){t.$router.replace("/login")})).catch((function(e){console.log("error",e),setTimeout((function(){t.$router.replace("/login")}),2e3)})),e.next=25;break;case 24:throw new Error(r.message||"授权失败");case 25:e.next=33;break;case 27:e.prev=27,e.t0=e["catch"](4),console.error("微信授权失败:",e.t0),t.authStatus="error",t.errorMessage=e.t0.message||"授权失败,请重试",setTimeout((function(){t.$router.replace("/login")}),2e3);case 33:case"end":return e.stop()}}),e,null,[[4,27]])})))()},exchangeCodeForToken:function(t){var e=this;return Object(c["a"])(Object(o["a"])().mark((function r(){var a;return Object(o["a"])().wrap((function(r){while(1)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,h({code:t,state:e.state});case 3:if(a=r.sent,!a||!a.data){r.next=8;break}return r.abrupt("return",a.data);case 8:if(!a||void 0===a.success){r.next=12;break}return r.abrupt("return",a);case 12:return r.abrupt("return",{success:!0,userInfo:{openid:"test_openid_"+Date.now(),nickname:"微信用户",headimgurl:"",unionid:"test_unionid_"+Date.now()}});case 13:r.next=18;break;case 15:r.prev=15,r.t0=r["catch"](0),console.error("API调用失败:",r.t0);case 18:case"end":return r.stop()}}),r,null,[[0,15]])})))()},redirectToTarget:function(){var t="/";this.redirect&&(t=this.redirect),console.log("跳转到目标页面:",t),this.$router.replace(t)},retryAuth:function(){this.authStatus="init",this.errorMessage="",this.startAuth()},isWechatBrowser:function(){var t=navigator.userAgent.toLowerCase();return-1!==t.indexOf("micromessenger")},extractRedirectFromHash:function(){var t=window.location.hash;if(t&&t.includes("redirect=")){var e=t.match(/redirect=([^&]+)/);if(e)return decodeURIComponent(e[1])}return null}}),mounted:function(){if(!this.isWechatBrowser())return this.authStatus="error",void(this.errorMessage="请在微信中打开此页面");this.code?this.handleAuthCallback():this.startAuth()}},f=p,w=(r("f6fd"),r("2877")),g=Object(w["a"])(f,a,n,!1,null,"325faf0c",null);e["default"]=g.exports},d567:function(t,e,r){},f6fd:function(t,e,r){"use strict";r("d567")}}]);
|