import { Injectable, Injector } from '@angular/core'; import { cacheConf } from '@conf/cache.conf'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { BaseService } from '../core/base.service'; import { EACacheService } from '../core/cache.service'; @Injectable() export class EAEnterpriseService extends BaseService { // 获取当前用户绑定的分销商/代理商/供应商 public $api_get_my_enterprises = `/chia/enterpriseInfo/list/queryMyAppInfo`; // 向服务器变更默认企业 public $api_selectEnterprise = '/chia/userApp/selectEnterprise'; constructor(public injector: Injector) { super(injector); } // 注入缓存服务 private get cacheSrv(): EACacheService { return this.injector.get(EACacheService); } /** * 加载企业信息 */ loadEnterpises(): Observable { return this.request(this.$api_get_my_enterprises); } /** * 根据租户ID获取指定的企业 * @param tenantId 租户ID */ getOne(tenantId: string): any { const enterprises = this.getAll(); return enterprises.find((r) => r.tenantId === tenantId); } /** * 获取所有企业 */ getAll(): Array { return this.cacheSrv.get(cacheConf.enterprise) || []; } /** * 获取默认企业 */ getDefault(): any { const list = this.getAll(); return list.find((r) => r.defaultState) || list[0] || null; } /** * 设置默认企业 */ setDefault(tenantId: string): void { // 获取指定tenantId的企业 const enterprise = this.getOne(tenantId); if (enterprise) { let enterpriseList = this.getAll(); // 设置指定tenantId的企业为默认企业,其他的企业为非默认企业 enterpriseList = enterpriseList.map((m) => { if (m.tenantId === enterprise.tenantId) { m.defaultState = true; } else { m.defaultState = false; } return m; }); // 重新缓存新的企业列表 this.setCache(enterpriseList); // 广播当前环境信息 this.envSrv.setEnvironment(enterprise.appId, enterprise.tenantId); } } /** * 设置缓存企业信息 * @param enterpriseData 企业信息信息 */ setCache(enterpriseData: any): void { this.cacheSrv.set(cacheConf.enterprise, enterpriseData); } /** * 选择企业 * @param item 企业实体 * 选择企业进入管理后台 * 1. 判断当前企业是否被冻结,如企业为冻结状态,则toast提示“供应商已被冻结,无法访问,请联系客服处理” * 2. 向服务器请求变更当前企业身份 * 3. 服务器变更当前企业后,刷新本地缓存中的企业信息 * 4. 跳转到管理后台首页 */ changeDefaultEnterprise(item: any): Observable { // 1. 判断冻结状态 // if (item.stateLocked) { // this.msgSrv.warning('代理商已被冻结,无法访问,请联系客服处理'); // return of(false); // } // 2.判断用户状态userStatus:0-正常,1-冻结,2-废弃 // if (item.userStatus === 1) { // this.msgSrv.warning('您的帐号已被企业冻结,无法访问,请联系客服处理'); // return of(false); // } // if (item.userStatus === 2) { // this.msgSrv.warning('您的帐号已被企业废弃,无法访问,请联系客服处理'); // return of(false); // } // 3. 向服务器请求变更当前企业身份 return this.request(this.$api_selectEnterprise, { tenantId: item.tenantId }).pipe( tap((data) => { if (data) { // 切换成功则广播当前环境信息 this.envSrv.setEnvironment(item.appId, item.tenantId); } }), ); } }