|  |  |  | 
|---|
|  |  |  | getUserDetail, | 
|---|
|  |  |  | removeUserDetail, | 
|---|
|  |  |  | } from '@/utils/storage/auth'; | 
|---|
|  |  |  | import * as accountServices from '@12333/services/api/Account'; | 
|---|
|  |  |  | import * as userServices from '@12333/services/api/User'; | 
|---|
|  |  |  | import Taro, { useRouter } from '@tarojs/taro'; | 
|---|
|  |  |  | import { ButtonProps } from '@tarojs/components'; | 
|---|
|  |  |  | import { debounce } from 'lodash'; | 
|---|
|  |  |  | 
|---|
|  |  |  | md5Encrypt, | 
|---|
|  |  |  | } from '@12333/utils'; | 
|---|
|  |  |  | import DefaultAvatar from '@/assets/components/icon-default-avatar.png'; | 
|---|
|  |  |  | import { WxMiniAppEnum } from '@12333/constants'; | 
|---|
|  |  |  | import { myClient } from '@/constants/query'; | 
|---|
|  |  |  | import { globalEventEmitter } from '@12333/hooks'; | 
|---|
|  |  |  | import * as authServices from '@12333/services/apiV2/auth'; | 
|---|
|  |  |  | import { AppLocalConfig } from '@/constants'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | interface UserState { | 
|---|
|  |  |  | userInfo?: Nullable<API.PasswordLoginCommandCallback>; | 
|---|
|  |  |  | userInfo?: Nullable<API.LoginCommandCallback>; | 
|---|
|  |  |  | token?: Nullable<string>; | 
|---|
|  |  |  | refreshToken?: Nullable<string>; | 
|---|
|  |  |  | userDetail?: Nullable<API.UserInfoV2>; | 
|---|
|  |  |  | userDetail?: Nullable<API.GetPersonalLoginInfoQueryResult>; | 
|---|
|  |  |  | firstGetUserDetail?: boolean; | 
|---|
|  |  |  | firstLaunch?: boolean; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | locationCity?: string; | 
|---|
|  |  |  | locationProvince?: string; | 
|---|
|  |  |  | 
|---|
|  |  |  | refreshToken: userInfo?.refreshToken ?? '', | 
|---|
|  |  |  | userDetail: userDetail, | 
|---|
|  |  |  | firstGetUserDetail: true, | 
|---|
|  |  |  | firstLaunch: true, | 
|---|
|  |  |  | locationCity: storageLocation?.city ?? '北京市', | 
|---|
|  |  |  | locationProvince: storageLocation?.province ?? '北京', | 
|---|
|  |  |  | firstSetLocation: true, | 
|---|
|  |  |  | 
|---|
|  |  |  | accountInfo(): Partial<AccountInfo> { | 
|---|
|  |  |  | return getAccountInfoFromAccessToken(this.userInfo?.accessToken); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | userId: (state) => { | 
|---|
|  |  |  | return state.userDetail?.id ?? ''; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | actions: { | 
|---|
|  |  |  | // 手机号授权Code登录 | 
|---|
|  |  |  | async getTokenByPhone( | 
|---|
|  |  |  | detail: ButtonProps.onGetPhoneNumberEventDetail, | 
|---|
|  |  |  | wxMiniAppUserLoginRes: any | 
|---|
|  |  |  | wxMiniAppUserLoginRes: API.LoginCommandCallback | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let res: API.IdentityModelTokenCacheItem; | 
|---|
|  |  |  | if (!wxMiniAppUserLoginRes.accessToken) { | 
|---|
|  |  |  | let params: API.WxMiniAppPhoneLoginInput = { | 
|---|
|  |  |  | openId: wxMiniAppUserLoginRes.openId, | 
|---|
|  |  |  | sessionKey: wxMiniAppUserLoginRes.sessionKey, | 
|---|
|  |  |  | let res: API.LoginCommandCallback = wxMiniAppUserLoginRes; | 
|---|
|  |  |  | if (!wxMiniAppUserLoginRes?.isBindPhoneNumber) { | 
|---|
|  |  |  | let bindRes = await authServices.bindWxmpUserInfo({ | 
|---|
|  |  |  | encryptedData: detail.encryptedData, | 
|---|
|  |  |  | iv: detail.iv, | 
|---|
|  |  |  | wxMiniApp: WxMiniAppEnum.C端小程序, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | res = await accountServices.wxMiniAppPhoneAuthLogin(params); | 
|---|
|  |  |  | sessionKey: wxMiniAppUserLoginRes.sessionKey, | 
|---|
|  |  |  | accessToken: wxMiniAppUserLoginRes.accessToken, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | res.accessToken = bindRes.accessToken; | 
|---|
|  |  |  | this.loginSuccess(res); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return res; | 
|---|
|  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 用户手机验证码登入 | 
|---|
|  |  |  | async loginByUsername(data: API.PhoneMesssageCodeLoginInput) { | 
|---|
|  |  |  | let res = await accountServices.phoneMesssageCodeLogin( | 
|---|
|  |  |  | async loginByUsername(data: API.SmsLoginCommand) { | 
|---|
|  |  |  | let res = await authServices.smsLogin( | 
|---|
|  |  |  | { | 
|---|
|  |  |  | phoneNumber: data.phoneNumber, | 
|---|
|  |  |  | code: data.code, | 
|---|
|  |  |  | verifyCode: data.verifyCode, | 
|---|
|  |  |  | type: AppLocalConfig.userType, | 
|---|
|  |  |  | clientType: AppLocalConfig.clientType, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { showLoading: false } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | 
|---|
|  |  |  | let res = await authServices.passwordLogin( | 
|---|
|  |  |  | { | 
|---|
|  |  |  | userName: params.userName, | 
|---|
|  |  |  | password: md5Encrypt(params.password), | 
|---|
|  |  |  | // password: md5Encrypt(params.password), | 
|---|
|  |  |  | password: params.password, | 
|---|
|  |  |  | type: AppLocalConfig.userType, | 
|---|
|  |  |  | clientType: AppLocalConfig.clientType, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | 
|---|
|  |  |  | return res; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | async loginSuccess(res: API.PasswordLoginCommandCallback) { | 
|---|
|  |  |  | async loginSuccess(res: API.LoginCommandCallback) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | this.setUserInfoAction(res); | 
|---|
|  |  |  | this.setTokenAction(res); | 
|---|
|  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | async wxMiniAppUserLoginFromScan(wxIndentityRes: API.WxMiniAppIndentityInfo, uuid: string) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let res = await accountServices.wxMiniAppUserLoginFromScan({ | 
|---|
|  |  |  | uId: uuid, | 
|---|
|  |  |  | userName: wxIndentityRes.userName, | 
|---|
|  |  |  | openId: wxIndentityRes.openId, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | this.loginSuccess(res); | 
|---|
|  |  |  | return res; | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | // try { | 
|---|
|  |  |  | //   let res = await accountServices.wxMiniAppUserLoginFromScan({ | 
|---|
|  |  |  | //     uId: uuid, | 
|---|
|  |  |  | //     userName: wxIndentityRes.userName, | 
|---|
|  |  |  | //     openId: wxIndentityRes.openId, | 
|---|
|  |  |  | //   }); | 
|---|
|  |  |  | //   this.loginSuccess(res); | 
|---|
|  |  |  | //   return res; | 
|---|
|  |  |  | // } catch (error) {} | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | async wxMiniAppPhoneAuthLoginFromScan( | 
|---|
|  |  |  | 
|---|
|  |  |  | wxIndentityRes: API.WxMiniAppIndentityInfo, | 
|---|
|  |  |  | uuid: string | 
|---|
|  |  |  | ) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let res = await accountServices.wxMiniAppPhoneAuthLoginFromScan({ | 
|---|
|  |  |  | uId: uuid, | 
|---|
|  |  |  | openId: wxIndentityRes.openId, | 
|---|
|  |  |  | sessionKey: wxIndentityRes.sessionKey, | 
|---|
|  |  |  | encryptedData: detail.encryptedData, | 
|---|
|  |  |  | iv: detail.iv, | 
|---|
|  |  |  | wxMiniApp: WxMiniAppEnum.C端小程序, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | this.loginSuccess(res); | 
|---|
|  |  |  | return res; | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | // try { | 
|---|
|  |  |  | //   let res = await accountServices.wxMiniAppPhoneAuthLoginFromScan({ | 
|---|
|  |  |  | //     uId: uuid, | 
|---|
|  |  |  | //     openId: wxIndentityRes.openId, | 
|---|
|  |  |  | //     sessionKey: wxIndentityRes.sessionKey, | 
|---|
|  |  |  | //     encryptedData: detail.encryptedData, | 
|---|
|  |  |  | //     iv: detail.iv, | 
|---|
|  |  |  | //     wxMiniApp: WxMiniAppEnum.C端小程序, | 
|---|
|  |  |  | //   }); | 
|---|
|  |  |  | //   this.loginSuccess(res); | 
|---|
|  |  |  | //   return res; | 
|---|
|  |  |  | // } catch (error) {} | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | async getCurrentUserInfo() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let res = await userServices.getUserInfo({ showLoading: false }); | 
|---|
|  |  |  | let res = await authServices.getPersonalLoginInfo({}, { showLoading: false }); | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | // res.frontStatus = getUserCertificationFrontStatusAdapter( | 
|---|
|  |  |  | //   res.userCertificationStatus, | 
|---|
|  |  |  | //   res.userCertificationAuditStatus | 
|---|
|  |  |  | // ); | 
|---|
|  |  |  | // res.originalAvatarUrl = res.avatarUrl; | 
|---|
|  |  |  | // res.avatarUrl = res.avatarUrl ? setOSSLink(res.avatarUrl) : DefaultAvatar; | 
|---|
|  |  |  | // this.setUserDetail(res); | 
|---|
|  |  |  | // this.firstGetUserDetail = false; | 
|---|
|  |  |  | res.originalAvatar = res.avatar; | 
|---|
|  |  |  | res.avatar = res.avatar ? setOSSLink(res.avatar) : DefaultAvatar; | 
|---|
|  |  |  | this.setUserDetail(res); | 
|---|
|  |  |  | this.firstGetUserDetail = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | setTokenAction(tokenInfo: API.PasswordLoginCommandCallback) { | 
|---|
|  |  |  | setTokenAction(tokenInfo: API.LoginCommandCallback) { | 
|---|
|  |  |  | this.token = tokenInfo?.accessToken; | 
|---|
|  |  |  | this.refreshToken = tokenInfo.refreshToken ?? ''; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | setUserInfoAction(info: API.PasswordLoginCommandCallback) { | 
|---|
|  |  |  | this.userInfo = info; | 
|---|
|  |  |  | setUserInfo(info); | 
|---|
|  |  |  | setUserInfoAction(info: API.LoginCommandCallback) { | 
|---|
|  |  |  | this.userInfo = { | 
|---|
|  |  |  | ...this.userInfo, | 
|---|
|  |  |  | ...info, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | setUserInfo(this.userInfo); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | setUserDetail(detail: API.UserInfoV2) { | 
|---|
|  |  |  | setUserDetail(detail: API.GetPersonalLoginInfoQueryResult) { | 
|---|
|  |  |  | this.userDetail = detail; | 
|---|
|  |  |  | setUserDetail(detail); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | logout() { | 
|---|
|  |  |  | this.resetState(); | 
|---|
|  |  |  | myClient.removeQueries(); | 
|---|
|  |  |  | // myClient.removeQueries(); | 
|---|
|  |  |  | goAuthorization(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | // } | 
|---|
|  |  |  | LocationUtils.currentProvinceName = provinceName; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | setFirstLaunch(firstLaunch: boolean) { | 
|---|
|  |  |  | this.firstLaunch = firstLaunch; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|