index.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { connect } from 'herculex';
  2. Component(connect({
  3. mapStateToProps: {
  4. userInfo: state => state.$global.userInfo || {}
  5. }
  6. })({
  7. props: {
  8. // 传入的phone 可能为空
  9. phone: '',
  10. hasPermission: false
  11. },
  12. async didMount() {
  13. const {
  14. phone,
  15. hasPermission
  16. } = this.props;
  17. const {
  18. phone: userInfoPhone = ''
  19. } = this.data.userInfo; // 如果没有上次下单手机号 获取登录的手机号
  20. this.setData({
  21. inputPhone: phone || userInfoPhone,
  22. hasPermission,
  23. phoneType: phone ? 'LAST_ORDER' : 'MY'
  24. });
  25. },
  26. data: {
  27. inputPhone: '',
  28. // phoneType类型 LAST_ORDER/CUSTOM/MY
  29. phoneType: 'LAST_ORDER'
  30. },
  31. methods: {
  32. /* 一键清除 */
  33. clearInput(value = '') {
  34. const {
  35. inputPhone
  36. } = this.data;
  37. return inputPhone.indexOf('*') < 0 ? value : '';
  38. },
  39. handleInput(e) {
  40. // 有输入 phoneType 为 CUSTOM
  41. const {
  42. value
  43. } = e.detail;
  44. this.setData({
  45. inputPhone: this.clearInput(value),
  46. phoneType: 'CUSTOM'
  47. });
  48. },
  49. // 获取手机号授权
  50. async onGetAuthorize() {
  51. const {
  52. phone = ''
  53. } = this.data.userInfo;
  54. if (phone) {
  55. // 成功获取到手机号 phoneType 为MY
  56. return this.setData({
  57. phoneType: 'MY',
  58. inputPhone: phone
  59. });
  60. }
  61. try {
  62. my.showLoading();
  63. const success = await this.dispatchGlobal('doLogin', {
  64. scopes: 'phoneNumber'
  65. });
  66. my.hideLoading();
  67. if (success) {
  68. this.setData({
  69. phoneType: 'MY',
  70. inputPhone: this.data.userInfo.phone
  71. });
  72. } else {
  73. // 无手机号获取权限
  74. my.showToast({
  75. content: '获取手机号失败,请检查小程序是否拥有my.getPhoneNumber权限',
  76. type: 'none'
  77. });
  78. }
  79. } catch (err) {
  80. my.hideLoading();
  81. }
  82. }
  83. }
  84. }));