zhengyiming
2025-04-02 0886e91fdfe3b5528f80d2b6742083aa11d16ebb
packages/core/src/lifeRecharge.ts
@@ -2,30 +2,42 @@
  BlLifeRechargeServices,
  PhoneMesssageCodeLoginInput,
  RequestConfig,
  ChannelOutput,
} from './lifeRechargeServices';
import { IRequest, BlLifeRechargeOptions } from './types';
import { BlLifeRechargeOptions } from './types';
import { LifeRechargeConstants } from './lifeRechargeConstants';
import { BlLifeRechargeAccountModel } from './lifeRechargeAccountModel';
import { LifeRechargeListener } from './listener';
export class BlLifeRecharge<T extends IRequest = IRequest> {
  services: BlLifeRechargeServices<T>;
export class BlLifeRecharge<TResponse = any, TRequestOptions = any> {
  services: BlLifeRechargeServices<TResponse, TRequestOptions>;
  accountModel: BlLifeRechargeAccountModel;
  listener: LifeRechargeListener;
  static constants = LifeRechargeConstants;
  constants = LifeRechargeConstants;
  constructor(options: BlLifeRechargeOptions<T>) {
    this.services = new BlLifeRechargeServices(options);
    this.accountModel = new BlLifeRechargeAccountModel({
  constructor(options: BlLifeRechargeOptions<TResponse, TRequestOptions>) {
    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) {
@@ -36,6 +48,8 @@
  loginout() {
    this.accountModel.setUserId('');
    this.accountModel.setPhoneNumber('');
    this.accountModel.setUserChannles([]);
    this.accountModel.isBackClientUser = false;
  }
  isLogin() {
@@ -43,6 +57,78 @@
  }
  getRechargeParValue(amount: number | string, rate: number) {
    return (Number(amount) * rate).toFixed(2);
    return ((Number(amount) * rate) / 100).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;
  }
}