App.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <script>
  2. const config = require('./static/config.js');
  3. export default {
  4. onLaunch: function() {
  5. let href = location.href;
  6. let code = this.getQueryString('code');
  7. /**
  8. * 解题思路,由于不可抗因素,导致必须想办法,现有如下想法
  9. * (一)如是不带code,则为自然进入,给他用微信加code;
  10. * (二)如果带了code,则有可能是分享(非图片分享)或者复制链接进来的
  11. * bug: 如果之前去掉code,则会进入(一)进入了死循环;
  12. * 想法:先去让他带着code去regist,成功则说明是新的code,失败则去掉code进入(一)
  13. */
  14. if(!code){
  15. let url = href.split('#')[0];
  16. url = encodeURIComponent(url);
  17. url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+config.appid+"&redirect_uri="+url+"&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect"
  18. window.location.replace(url);
  19. }
  20. this.globalData.BASE_URL = config.BASE_URL;
  21. let shareToken = this.getQueryString('shareToken');
  22. let projectId = this.getQueryString('projectId');
  23. this.globalData.projectId = projectId||'';
  24. this.globalData.shareToken = shareToken||'';
  25. this.regist();
  26. this.signJsapiTicket();
  27. },
  28. onShow: function() {
  29. document.body.style.setProperty("background-color",this.globalData.color4);
  30. },
  31. onHide: function() {
  32. },
  33. methods: {
  34. getThemeInfo() {
  35. },
  36. getQueryString(name){
  37. var reg = new RegExp("(^|\\?|&)"+ name +"=([^&]*)(\\s|&|$)", "i");
  38. return reg.test(location.href) ? unescape(RegExp.$2.replace(/\+/g, " ")) : ""
  39. },
  40. async regist() {
  41. let code = this.getQueryString('code');
  42. if(code){
  43. let ret = await this.$myRequest({
  44. url: "/regist",
  45. data: {
  46. "code": code,
  47. "shareToken":this.globalData.shareToken||"",
  48. "projectId":this.globalData.projectId||"",
  49. }
  50. });
  51. if (ret.data.success) {
  52. let userId = ret.data.single.userId;
  53. this.globalData.userId = userId;
  54. if (ret.data.single.authed == 1) {
  55. let token = ret.data.single.token;
  56. this.globalData.token = token
  57. }
  58. uni.$emit('request')
  59. }else{
  60. //注册失败,去掉老的code,会进入onLaunch,重新获取新的code
  61. let projectId = this.getQueryString('projectId');
  62. let shareToken = this.getQueryString('shareToken');
  63. let url = location.origin+location.pathname + "?projectId="+projectId+"&shareToken="+shareToken;
  64. window.location.replace(url);
  65. }
  66. }
  67. },
  68. async signJsapiTicket(){
  69. const wx = require('weixin-js-sdk');
  70. let url = location.href.split('#')[0]
  71. let parmas = {
  72. url: url,
  73. }
  74. let self = this;
  75. let res = await this.$myRequest({
  76. url: '/wechat/signJsapiTicket',
  77. data: parmas,
  78. method:"GET",
  79. });
  80. if(res.data.success){
  81. let single = res.data.single;
  82. wx.config({
  83. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  84. appId: config.appid, // 必填,公众号的唯一标识
  85. timestamp: single.timestamp, // 必填,生成签名的时间戳
  86. nonceStr: single.nonceStr, // 必填,生成签名的随机串
  87. signature: single.signature, // 必填,签名
  88. jsApiList: ["updateAppMessageShareData","updateTimelineShareData",'showMenuItems','hideMenuItems'] // 必填,需要使用的JS接口列表
  89. });
  90. wx.ready(function() {
  91. wx.hideMenuItems({
  92. menuList: ['menuItem:share:qq','menuItem:share:QZone','menuItem:favorite','menuItem:originPage','menuItem:copyUrl','menuItem:openWithSafari','menuItem:openWithQQBrowser'] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
  93. });
  94. });
  95. wx.error(function(res) {
  96. // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
  97. });
  98. }
  99. },
  100. },
  101. globalData: {
  102. token: "",
  103. userId:"",
  104. projectId:"",
  105. shareToken:"",
  106. pathName:"",
  107. color1: "#F07423",
  108. color2: "#FD8F3C",
  109. color3: "#FFC444",
  110. color4: "#F5F5F7",
  111. color5: "#F7A98E",
  112. color6: "#FFF4EB",
  113. color7:"#F8BA91",
  114. color8:"#FFF4EB",
  115. color9:"#8B654D",
  116. color10:"#FCF6F1",
  117. contentColor:"#B1B1B1",
  118. titleColor:"#262626",
  119. BASE_URL:"https://dm-api.elab-plus.cn",//默认环境
  120. }
  121. }
  122. </script>
  123. <style>
  124. </style>