wxLogin.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. <template>
  2. <view class="content">
  3. <!-- #ifndef H5 -->
  4. <!-- <image class="bg-img" :src="baseURL+urlFile+'/img/img09.png'" mode=" scaleToFill"></image> -->
  5. <view class="logo-img-box">
  6. <image class="logo-img" src="../../static/img/login.png" mode=" aspectFit"></image>
  7. <button class="userInfo" type="warn" :class="{'nocaction': isclick}" open-type="getPhoneNumber"
  8. @getphonenumber="getphonenumber">
  9. <text>
  10. 手机号快捷登录
  11. </text>
  12. </button>
  13. </view>
  14. <!-- #endif -->
  15. <editUserModal :isShow="isShow" @closeEdit="closeEdit" @editSuccess="editSuccess">
  16. </editUserModal>
  17. </view>
  18. </template>
  19. <script>
  20. import {
  21. getUserInfo
  22. } from '@/api/login.js';
  23. // #ifdef H5
  24. import {
  25. loginWinxin
  26. } from '@/utils/wxAuthorized';
  27. // #endif
  28. // #ifdef MP-WEIXIN
  29. import {
  30. loginWinxinMp
  31. } from '@/utils/wxMinProgram';
  32. import {
  33. wechatMpAuth
  34. } from '@/api/wx';
  35. // #endif
  36. import {
  37. mapMutations,
  38. mapState
  39. } from 'vuex';
  40. import editUserModal from '@/components/eidtUserModal/index.vue'
  41. export default {
  42. data() {
  43. return {
  44. userInfo: {}, //授权用户信息
  45. code: '', //授权code
  46. isclick: false, //是否点击了
  47. isShow:false,
  48. };
  49. },
  50. onLoad(option) {
  51. this.loadData();
  52. },
  53. components: {
  54. editUserModal
  55. },
  56. methods: {
  57. // ...mapMutations(['login', 'setUserInfo']),
  58. ...mapMutations('user', ['login', 'setUserInfo']),
  59. loadData() {
  60. let obj = this;
  61. // #ifdef H5
  62. loginWinxin();
  63. // #endif
  64. // #ifdef MP-WEIXIN
  65. loginWinxinMp().then(() => {
  66. wx.login({
  67. success(e) {
  68. console.log(e, 'loginWinxinMp');
  69. obj.code = e.code;
  70. },
  71. fill: function(e) {
  72. console.log(e)
  73. }
  74. })
  75. });
  76. // #endif
  77. },
  78. lodingTrue(){
  79. let ur = uni.getStorageSync('present') || '/pages/index/index';
  80. uni.switchTab({
  81. url: ur,
  82. fail(e) {
  83. uni.navigateTo({
  84. url: ur,
  85. fail(e) {
  86. uni.navigateTo({
  87. url: '/pages/index/index',
  88. });
  89. }
  90. });
  91. }
  92. });
  93. },
  94. // #ifdef MP-WEIXIN
  95. closeEdit() {
  96. this.isShow = false
  97. uni.showToast({
  98. title: '登录成功',
  99. icon:"success"
  100. });
  101. this.lodingTrue();
  102. },
  103. editSuccess() {
  104. this.isShow = false;
  105. this.lodingTrue();
  106. },
  107. getphonenumber(e) {
  108. console.log(e);
  109. if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
  110. return false
  111. }
  112. uni.showLoading({
  113. title: '正在登录中'
  114. });
  115. this.getCode()
  116. .then(code => {
  117. this.getUserPhoneNumber(e.detail.encryptedData, e.detail.iv, code);
  118. })
  119. .catch(error => {
  120. console.log(error);
  121. uni.hideLoading();
  122. });
  123. },
  124. getUserPhoneNumber(encryptedData, iv, code) {
  125. const that =this;
  126. wechatMpAuth({
  127. encryptedData: encryptedData,
  128. iv: iv,
  129. code: code,
  130. spread_spid: uni.getStorageSync('spread') || '',
  131. spread_code: uni.getStorageSync('spread_code') || '',
  132. // key: this.authKey
  133. })
  134. .then(res => {
  135. uni.setStorageSync('token', res.data.token);
  136. console.log('cg');
  137. that.getUserInfo(res.data.store_user_avatar)
  138. })
  139. .catch(res => {
  140. uni.showToast({
  141. title: res,
  142. icon: "error"
  143. })
  144. uni.hideLoading();
  145. });
  146. },
  147. async getCode() {
  148. let provider = await this.getProvider();
  149. return new Promise((resolve, reject) => {
  150. uni.login({
  151. provider: provider,
  152. success(res) {
  153. return resolve(res.code);
  154. },
  155. fail() {
  156. return reject(null);
  157. }
  158. })
  159. })
  160. },
  161. getProvider() {
  162. return new Promise((resolve, reject) => {
  163. uni.getProvider({
  164. service: 'oauth',
  165. success(res) {
  166. resolve(res.provider);
  167. },
  168. fail() {
  169. resolve(false);
  170. }
  171. });
  172. });
  173. },
  174. getUserInfo: function(new_user, back_url) {
  175. let that = this;
  176. getUserInfo().then(res => {
  177. console.log(res,'res');
  178. that.login();
  179. uni.hideLoading();
  180. // 保存返回用户数据
  181. that.setUserInfo(res.data);
  182. console.log(res.data.avatar,'res.data.avatar');
  183. if (res.data.avatar ==
  184. "https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132"
  185. ) {
  186. console.log('xx');
  187. that.isShow = true
  188. } else {
  189. console.log('xx2');
  190. that.lodingTrue();
  191. }
  192. }).catch(err => {
  193. console.log(err,'err');
  194. uni.hideLoading();
  195. uni.showToast({
  196. title: err.msg,
  197. icon: 'none',
  198. duration: 2000
  199. });
  200. });
  201. },
  202. // #endif
  203. // 用户确认授权
  204. // userInfoData(){
  205. // let that = this
  206. // if(that.isclick) {
  207. // return
  208. // }
  209. // that.isclick = true
  210. // wx.getUserProfile({
  211. // desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  212. // success: res => {
  213. // console.log(res,'that.userInfo+++++++++++++++++++')
  214. // that.userInfo = res;
  215. // uni.showLoading({
  216. // title: '授权中',
  217. // mask: true
  218. // });
  219. // that.loadMp();
  220. // },
  221. // fail: err => {
  222. // that.isclick = false
  223. // uni.showToast({
  224. // title: '您拒绝了请求,不能正常使用小程序',
  225. // icon: 'error',
  226. // duration: 2000
  227. // });
  228. // return;
  229. // }
  230. // });
  231. // // this.userInfo = e;
  232. // // console.log(e,'用户确认授权')
  233. // // this.loadMp()
  234. // },
  235. // #ifdef MP-WEIXIN
  236. // loadMp() {
  237. // let obj = this;
  238. // // 获取登录授权页数据
  239. // let user = obj.userInfo;
  240. // console.log(user)
  241. // // 获取推广人id
  242. // let spread_spid = uni.getStorageSync('spread') || '';
  243. // // #ifdef MP
  244. // let spread_code = uni.getStorageSync('spread_code') || '';
  245. // // #endif
  246. // wechatMpAuth({
  247. // code: obj.code,
  248. // iv: user.iv,
  249. // encryptedData: user.encryptedData,
  250. // spread_spid: spread_spid,
  251. // // #ifdef MP
  252. // spread_code: spread_code,
  253. // // #endif
  254. // }).then(({ data }) => {
  255. // obj.wchatAuth(data);
  256. // console.log(data,'wechatMpAuth++++++++++++++++++++++++++')
  257. // }).catch( err => {
  258. // // obj.loding = false;
  259. // // uni.hideLoading();
  260. // });
  261. // },
  262. // #endif
  263. // wchatAuth(data) {
  264. // let obj = this;
  265. // // 保存token
  266. // uni.setStorageSync('token', data.token);
  267. // // 获取用户基础信息
  268. // getUserInfo({}).then(e => {
  269. // console.log('userInfo+++++++++++',e)
  270. // obj.login();
  271. // uni.hideLoading();
  272. // // 保存返回用户数据
  273. // obj.setUserInfo(e.data);
  274. // let ur = uni.getStorageSync('present') || '/pages/index/index';
  275. // // 用于处理缓存bug
  276. // if (ur=='pages/shop/product') {
  277. // ur = '/pages/index/index'
  278. // }
  279. // uni.switchTab({
  280. // url: ur,
  281. // fail(e) {
  282. // uni.navigateTo({
  283. // url: ur,
  284. // fail(e) {
  285. // uni.navigateTo({
  286. // url: '/pages/index/index',
  287. // });
  288. // }
  289. // });
  290. // }
  291. // });
  292. // });
  293. // }
  294. }
  295. };
  296. </script>
  297. <style lang="scss">
  298. page,
  299. .content {
  300. height: 100%;
  301. background-color: #fff;
  302. }
  303. .bg-img,
  304. .logo-img-box {
  305. position: absolute;
  306. top: 0;
  307. left: 0;
  308. width: 100%;
  309. height: 100%;
  310. }
  311. .logo-img {
  312. margin-top: 20vh;
  313. margin-left: 176rpx;
  314. width: 385rpx;
  315. height: 394rpx;
  316. }
  317. .userInfo {
  318. margin: 0 100rpx;
  319. margin-top: 50rpx;
  320. color: #FFFFFF;
  321. border-radius: 99rpx;
  322. background-color: $base-color !important;
  323. }
  324. .nocaction {
  325. background-color: #999;
  326. }
  327. </style>