use-phone.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { login } from "../logic";
  2. import request from "../request/method";
  3. type Status = 'loading' | 'pending' | 'success' | 'fail'
  4. type UpdataStatusCallback = (status: Status) => void
  5. type UpdataValueCallback = (value: string) => void
  6. export function usePhoneNumber() {
  7. const _updataValue: UpdataValueCallback[] = [];
  8. const _updateStatus: UpdataStatusCallback[] = [];
  9. let value = '';
  10. let status: Status = 'loading';
  11. login(false).then(token => token ? 'pending' : 'fail' as const, () => 'fail' as const).then(_status => {
  12. status = _status;
  13. _updateStatus.forEach(cb => cb(status));
  14. })
  15. return {
  16. updateValue(callback: UpdataValueCallback) {
  17. _updataValue.push(callback);
  18. if (value) callback(value);
  19. },
  20. updateStatus(callback: UpdataStatusCallback) {
  21. _updateStatus.push(callback);
  22. callback(status)
  23. },
  24. getPhoneNumber(event: WechatMiniprogram.ButtonGetPhoneNumber) {
  25. console.log('getPhoneNumber-->', event);
  26. const code = event.detail.code;
  27. console.log('getPhoneNumber-->code', code);
  28. if (!code) return;
  29. console.log('getPhoneNumber-->');
  30. _updateStatus.forEach(cb => cb('loading'))
  31. request({
  32. url: `/mobileAccountManage/getAccountPhone`,
  33. method: 'GET',
  34. params: { code },
  35. transform({ data }) { return data; }
  36. }).then(phone => {
  37. value = phone;
  38. status = 'success';
  39. _updataValue.forEach(cb => cb(value))
  40. _updateStatus.forEach(cb => cb(status))
  41. }, (error) => {
  42. _updateStatus.forEach(cb => cb('pending'))
  43. wx.showModal({ title: '获取失败', content: error.errMsg || error.message, showCancel: false })
  44. })
  45. }
  46. }
  47. }