index.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <template>
  2. <button :class="className" open-type="getPhoneNumber"
  3. @getphonenumber="getPhoneNumber">手机号授权登录
  4. </button>
  5. </template>
  6. <script>
  7. const app = getApp();
  8. import api from '@/utils/api'
  9. import util from '@/utils/util'
  10. import __config from '@/config/env';
  11. export default {
  12. props: {
  13. btnText: {
  14. type: String,
  15. default: '手机号登录'
  16. },
  17. className: {
  18. type: String,
  19. default: 'cu-btn bg-blue'
  20. },
  21. styleObj: {
  22. type: Object,
  23. default: () => {
  24. }
  25. }
  26. },
  27. data() {
  28. return {};
  29. },
  30. mounted() {},
  31. methods: {
  32. getWxSession() {
  33. return new Promise((resolve, reject) => {
  34. uni.login({
  35. success: function(res) {
  36. if (res.code) {
  37. let params = {
  38. jsCode: res.code
  39. }
  40. api.doGet('/openapi/ma/common/login', params).then(res => {
  41. let session = res.data;
  42. resolve(session)
  43. });
  44. }
  45. },
  46. fail: function(error) {
  47. console.error('小程序wxSession信息出错: ' + error)
  48. resolve(error)
  49. }
  50. });
  51. })
  52. },
  53. //获取微信手机号
  54. getPhoneNumber(e) {
  55. let _this = this
  56. if (e.detail.errMsg == 'getPhoneNumber:ok') {
  57. let eDetail = e.detail
  58. _this.getWxSession().then(wxSession => {
  59. let params = Object.assign(eDetail, wxSession, {accountId: app.getAccountId()})
  60. console.log('getPhoneNumber', eDetail)
  61. api.doPost('/openapi/ma/common/decryptPhoneNumber', params).then(res => {
  62. if (res.code == 200) {
  63. let wxMemberInfo = util.parseUser(res.data)
  64. uni.setStorageSync(__config.loginWxUserInfoKey, wxMemberInfo)
  65. /* 授权完成触发回调 done 方法 */
  66. _this.$emit("done", wxMemberInfo)
  67. } else {
  68. uni.showToast({
  69. title: res.msg,
  70. })
  71. }
  72. });
  73. })
  74. }
  75. },
  76. }
  77. }
  78. </script>
  79. <style lang="scss">
  80. </style>