|  |  | 
 |  |  |   BlLifeRechargeServices, | 
 |  |  |   PhoneMesssageCodeLoginInput, | 
 |  |  |   RequestConfig, | 
 |  |  |   ChannelOutput, | 
 |  |  | } from './lifeRechargeServices'; | 
 |  |  | import { BlLifeRechargeOptions } from './types'; | 
 |  |  | import { LifeRechargeConstants } from './lifeRechargeConstants'; | 
 |  |  | import { BlLifeRechargeAccountModel } from './lifeRechargeAccountModel'; | 
 |  |  | import { LifeRechargeListener } from './listener'; | 
 |  |  |  | 
 |  |  | export class BlLifeRecharge<TResponse = any, TRequestOptions = any> { | 
 |  |  |   services: BlLifeRechargeServices<TResponse, TRequestOptions>; | 
 |  |  |   accountModel: BlLifeRechargeAccountModel; | 
 |  |  |   listener: LifeRechargeListener; | 
 |  |  |  | 
 |  |  |   static constants = LifeRechargeConstants; | 
 |  |  |   constants = LifeRechargeConstants; | 
 |  |  |  | 
 |  |  |   constructor(options: BlLifeRechargeOptions<TResponse, TRequestOptions>) { | 
 |  |  |     this.services = new BlLifeRechargeServices(options); | 
 |  |  |     this.accountModel = new BlLifeRechargeAccountModel({ | 
 |  |  |     this.listener = new LifeRechargeListener(); | 
 |  |  |     this.services = new BlLifeRechargeServices(this, options); | 
 |  |  |     this.accountModel = new BlLifeRechargeAccountModel(this, { | 
 |  |  |       userId: options.userId, | 
 |  |  |       phoneNumber: options.phoneNumber, | 
 |  |  |       channlesNum: options.channlesNum, | 
 |  |  |     }); | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   init() { | 
 |  |  |     if (this.accountModel.userId) { | 
 |  |  |       this.accountModel.getUserInfo(); | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   async login(body: PhoneMesssageCodeLoginInput, options?: RequestConfig) { | 
 |  |  |     try { | 
 |  |  |       let res = await this.services.lifePayPhoneMesssageCodeLogin(body, options); | 
 |  |  |       this.accountModel.setUserId(res); | 
 |  |  |       this.accountModel.setUserId(res.userId); | 
 |  |  |       this.accountModel.getUserInfo(); | 
 |  |  |       this.accountModel.setPhoneNumber(body.phoneNumber); | 
 |  |  |       return res; | 
 |  |  |     } catch (error) { | 
 |  |  | 
 |  |  |   loginout() { | 
 |  |  |     this.accountModel.setUserId(''); | 
 |  |  |     this.accountModel.setPhoneNumber(''); | 
 |  |  |     this.accountModel.setUserChannles([]); | 
 |  |  |     this.accountModel.isBackClientUser = false; | 
 |  |  |     this.accountModel.setUserPromoterIdNumber(''); | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   isLogin() { | 
 |  |  | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   getRechargeParValue(amount: number | string, rate: number) { | 
 |  |  |     return (Number(amount) * rate).toFixed(2); | 
 |  |  |     if (rate > 0) { | 
 |  |  |       return ((Number(amount) * rate) / 100).toFixed(2); | 
 |  |  |     } | 
 |  |  |     return Number(amount).toFixed(2); | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   MaxParValue = 300; | 
 |  |  |  | 
 |  |  |   filterParValueList(parValueList: string[]) { | 
 |  |  |     return parValueList.filter((x) => Number(x) <= this.MaxParValue); | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   getCarrierByPhoneNumber(phoneNumber: string): LifeRechargeConstants.IspCode { | 
 |  |  |     // 定义号段和对应的运营商 | 
 |  |  |     const carrierSegments = { | 
 |  |  |       [LifeRechargeConstants.IspCode.yidong]: [ | 
 |  |  |         '134', | 
 |  |  |         '135', | 
 |  |  |         '136', | 
 |  |  |         '137', | 
 |  |  |         '138', | 
 |  |  |         '139', | 
 |  |  |         '150', | 
 |  |  |         '151', | 
 |  |  |         '152', | 
 |  |  |         '157', | 
 |  |  |         '158', | 
 |  |  |         '159', | 
 |  |  |         '182', | 
 |  |  |         '183', | 
 |  |  |         '184', | 
 |  |  |         '187', | 
 |  |  |         '188', | 
 |  |  |         '198', | 
 |  |  |         '147', | 
 |  |  |         '178', | 
 |  |  |         '165', | 
 |  |  |       ], | 
 |  |  |       [LifeRechargeConstants.IspCode.liantong]: [ | 
 |  |  |         '130', | 
 |  |  |         '131', | 
 |  |  |         '132', | 
 |  |  |         '155', | 
 |  |  |         '156', | 
 |  |  |         '185', | 
 |  |  |         '186', | 
 |  |  |         '145', | 
 |  |  |         '176', | 
 |  |  |         '166', | 
 |  |  |       ], | 
 |  |  |       [LifeRechargeConstants.IspCode.dianxin]: [ | 
 |  |  |         '133', | 
 |  |  |         '153', | 
 |  |  |         '180', | 
 |  |  |         '181', | 
 |  |  |         '189', | 
 |  |  |         '177', | 
 |  |  |         '199', | 
 |  |  |         '191', | 
 |  |  |       ], | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     // 检查手机号是否有效(这里只简单检查长度) | 
 |  |  |     if (!/^\d{11}$/.test(phoneNumber)) { | 
 |  |  |       return '' as any; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     let prefix = phoneNumber.substr(0, 3); | 
 |  |  |     for (let carrier in carrierSegments) { | 
 |  |  |       if (carrierSegments[carrier].includes(prefix)) { | 
 |  |  |         return carrier as LifeRechargeConstants.IspCode; | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 如果没有找到匹配的号段,则返回未知 | 
 |  |  |     return '' as any; | 
 |  |  |   } | 
 |  |  | } |