logic.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { login as _login } from './wx/open-api'
  2. import { Get } from './request/method';
  3. const TOKEN: Pick<WechatMiniprogram.SetStorageOption, 'key' | 'data' | 'encrypt'> = {
  4. key: 'token',
  5. encrypt: true,
  6. data: '',
  7. };
  8. export function token() {
  9. return TOKEN.data || wx.getStorageSync(TOKEN.key)
  10. }
  11. export async function login(force?: boolean, title = '登录中') {
  12. const _token = force ? '' : await wx.checkSession().then(() => token(), () => '');
  13. if (_token) return _token;
  14. const show = setTimeout(() => wx.showLoading({ title }), 300);
  15. try {
  16. const { code } = await _login();
  17. TOKEN.data = await Get<string, { access_token: string }>(`/authManage/login`, {
  18. params: { code },
  19. transform({ data }) {
  20. return data.access_token
  21. },
  22. shareRequest: !force,
  23. meta: { ignoreToken: true }
  24. });
  25. wx.setStorageSync(TOKEN.key, TOKEN.data);
  26. return TOKEN.data;
  27. } catch (error) {
  28. wx.showToast({ title: error?.errMsg ?? error?.message ?? `登录错误`, icon: 'none' });
  29. throw error
  30. } finally {
  31. clearTimeout(show);
  32. wx.hideLoading();
  33. }
  34. }