/* * @Author: Maple * @Date: 2021-03-22 11:42:26 * @LastEditors: Do not edit * @LastEditTime: 2021-05-27 11:22:02 * @Description: 全局账号服务 */ import { Injectable, Injector } from '@angular/core'; import { Router } from '@angular/router'; import { CoreService, StartupService } from '@core'; import { ReuseTabService } from '@delon/abc/reuse-tab'; import { BaseService } from '../core/base.service'; @Injectable({ providedIn: 'root', }) export class EAAccountService extends BaseService { // 验证码登录 public $api_login_by_captcha = `/scm/cuc/cuc/user/sms/login?_allow_anonymous=true`; // 账号密码登录 public $api_login_by_account = `/scm/cuc/cuc/user/login?_allow_anonymous=true`; // 退出登录 public $api_logout = `/chia/user/logout`; constructor(public injector: Injector) { super(injector); } // 注入核心服务 private get coreSrv(): CoreService { return this.injector.get(CoreService); } // 注入路由 private get router(): Router { return this.injector.get(Router); } // 注入路由复用服务 private get reuseTabService(): ReuseTabService { return this.injector.get(ReuseTabService); } // 注入全局启动服务 private get startSrv(): StartupService { return this.injector.get(StartupService); } // 登录状态 public get loginStatus(): boolean { return this.coreSrv.loginStatus; } /** * 账号密码登录 * @param username 登录账号 * @param password 登录密码 */ loginByAccount(username: string, password: string): void { this.asyncRequest(this.$api_login_by_account, { username, password, type: 0 }, 'POST', true, 'FORM').then((res) => { this.doAfterLogin(res); }); } /** * 短信验证码登录 * @param phone 手机号码 * @param smsCode 短信验证码 */ loginByCaptcha(phone: string, smsCode: string): void { this.asyncRequest(this.$api_login_by_captcha, { phone, smsCode }, 'POST', true, 'FORM').then((res) => { this.doAfterLogin(res); }); } private doAfterLogin(res: any): void { const token = res?.token; if (token) { // 清空路由复用信息 this.reuseTabService.clear(); // 设置用户Token信息 // TODO: Mock expired value // res.user.expired = +new Date() + 1000 * 60 * 5; this.coreSrv.tokenSrv.set({ token }); // 重新获取 StartupService 内容,我们始终认为应用信息一般都会受当前用户授权范围而影响 this.startSrv.load().then(() => { let url = this.coreSrv.tokenSrv.referrer!.url || '/'; if (url.includes('/passport')) { url = '/'; } this.router.navigateByUrl(url); }); } } /** * 登出系统 * @param showMsg 是否显示登录过期弹窗 */ logout(showMsg: boolean): void { this.coreSrv.logout(showMsg); } /** * 向服务器请求登出 */ requestLogout(): void { this.asyncRequest(this.$api_logout).finally(() => { this.logout(false); }); } }