123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- import { Component, OnInit } from "@angular/core";
- import { Router } from "@angular/router";
- import { FormBuilder, Validators, FormGroup } from "@angular/forms";
- import { NzMessageService } from "ng-zorro-antd/message";
- import { MainService } from "../../services/main.service";
- import http from "../../../assets/js/http";
- import { AES, mode, pad, enc } from "crypto-js";
- import { baseUrlType } from "src/app/type/types";
- import { ToolService } from 'src/app/services/tool.service';
- import { Title } from '@angular/platform-browser';
- import { MarkingService } from 'src/app/services/marking.service';
- @Component({
- selector: "app-login",
- templateUrl: "./login.component.html",
- styleUrls: ["./login.component.less"],
- })
- export class LoginComponent implements OnInit {
- http: baseUrlType;
- validateForm: FormGroup;
- loading: boolean = false; // 加载状态
- isSingleSignOn: boolean = false; // 是否单点登录
- constructor(
- private router: Router,
- private fb: FormBuilder,
- private mainService: MainService,
- private msg: NzMessageService,
- private tool: ToolService,
- private titleService: Title,
- private markingService: MarkingService,
- ) {}
- ngOnInit() {
- this.http = http;
- this.isSingleSignOn = location.href.includes("?");
- if (this.isSingleSignOn) {
- this.singleSignOn();
- } else {
- this.initForm();
- }
- }
- //单点登录
- singleSignOn() {
- let url = location.href;
- let paramsStr = url.split("?")[1];
- let paramsObj = {};
- paramsStr.split("&").forEach((item) => {
- let arr = item.split("=");
- paramsObj[arr[0] + 1] = arr[1];
- });
- this.singleSignOnLogin(paramsObj);
- }
- // 单点登录
- singleSignOnLogin(paramsObj): void {
- const loadingId = this.msg.loading("登录中..", { nzDuration: 0 }).messageId;
- this.loading = true;
- this.mainService.singleSignOnLogin(paramsObj).subscribe(
- (data) => {
- this.loading = false;
- this.msg.remove(loadingId);
- this.apiLogin(data.userId, data.pwd, true);
- },
- (err) => {
- this.loading = false;
- this.msg.remove(loadingId);
- this.msg.error("登录失败", {
- nzDuration: 1000,
- });
- this.router.navigateByUrl("/login");
- }
- );
- }
- //aes加密
- encryptByEnAES(data: string): string {
- let Key = "dsadmin";
- let tmpAES = AES.encrypt(data, Key, {
- mode: mode.CBC,
- padding: pad.Pkcs7,
- });
- return tmpAES.toString();
- }
- //aes解密
- encryptByDeAES(data: string): string {
- let Key = "dsadmin";
- let tmpDeAES = AES.decrypt(data, Key, {
- mode: mode.CBC,
- padding: pad.Pkcs7,
- });
- return tmpDeAES.toString(enc.Utf8);
- }
- // 初始化菜单
- initMenu(menu) {
- let menuLis = this.transform(menu);
- menuLis.forEach((item) => {
- item.flag = false;
- item.flagBg = false;
- if (item.childrens) {
- item.childrens.forEach((value) => {
- value.flag = false;
- });
- }
- });
- localStorage.setItem("menu", JSON.stringify(menuLis));
- localStorage.setItem("index", "true"); //首页默认高亮
- }
- // 初始化登录表单
- initForm() {
- let username, passsword;
- // 如果本地存储的有remember字段(记住密码功能)
- if (localStorage.getItem("remember")) {
- let remember = JSON.parse(localStorage.getItem("remember"));
- // 比较记住密码的功能是否在有效期内
- if (remember.date > new Date().getTime()) {
- username = this.encryptByDeAES(remember.username);
- passsword = this.encryptByDeAES(remember.password);
- }
- }
- // 初始化登录表单
- this.validateForm = this.fb.group({
- userName: [username || null, [Validators.required]],
- password: [passsword || null, [Validators.required]],
- remember: [Boolean(localStorage.getItem("remember"))],
- });
- }
- // enter触发
- enterUp(e): void {
- let keyCode = e.which || e.keyCode || 0;
- if (keyCode == 13) {
- this.submitForm();
- }
- }
- // 登录
- submitForm(): void {
- for (const i in this.validateForm.controls) {
- this.validateForm.controls[i].markAsDirty();
- this.validateForm.controls[i].updateValueAndValidity();
- }
- // 用户名和密码必填
- if (
- !this.validateForm.value.userName ||
- !this.validateForm.value.password
- ) {
- this.msg.info("用户名或密码不能为空!");
- return;
- }
- this.apiLogin(
- this.validateForm.value.userName,
- this.validateForm.value.password
- );
- }
- // 登录接口,true是单点登录
- apiLogin(user, pwd, flag = false) {
- const loadingId = this.msg.loading("登录中..", { nzDuration: 0 }).messageId;
- this.loading = true;
- this.mainService.login(user, pwd).subscribe((data) => {
- this.loading = false;
- this.msg.remove(loadingId);
- if (data.status == 200) {
- if (!flag) {
- // 记住密码勾选中
- if (this.validateForm.value.remember) {
- let remember = {
- username: this.encryptByEnAES(this.validateForm.value.userName),
- password: this.encryptByEnAES(this.validateForm.value.password),
- date: new Date().getTime() + 90 * 24 * 3600 * 1000, //3个月
- };
- localStorage.setItem("remember", JSON.stringify(remember));
- } else {
- localStorage.removeItem("remember");
- }
- }
- // 重置系统名称和大屏名称
- console.log(data.user);
- let hosId = data.user.user.currentHospital ? data.user.user.currentHospital.id : ''
- this.tool.getSysNameAndLogoAsync(hosId).subscribe(result => {
- let marking = result.project || '';
- let logoTitle = result.sysName || '';
- let logoUrl = location.origin + '/file' + result.logo || '';
- let faviconUrl = location.origin + '/file' + result.favicon || '';
- this.markingService.setMarking(marking);
- this.tool.setSysName(logoTitle);
- this.tool.setLogo(logoUrl);
- this.tool.setFavicon(faviconUrl);
- this.titleService.setTitle(this.tool.logoTitle);
- (document.querySelector('#favicon') as any).href = this.tool.faviconUrl;
- this.toRoute2(data);
- this.initMenu(data.user.menu);
- })
- } else {
- this.msg.error(data.remarks, {
- nzDuration: 1000,
- });
- }
- });
- }
- // 页面跳转
- toRoute2(data) {
- let roleMenus = data.user.menu;
- let canLogin = false; //是否可以进入系统主页面(无护士端,调度台,药房端权限)
- let successLoginMsg = true; //登录成功提示,true是提示,false不提示
- let fwt = false;
- let ddt = false;
- let yfang = false;
- roleMenus.forEach((e) => {
- if (e.link == "pharmacy") {
- yfang = true;
- console.log("药房端");
- } else if (e.link == "nurse") {
- fwt = true;
- console.log("护士端");
- } else if (e.link == "dispatchingDesk") {
- ddt = true;
- console.log("调度台");
- }
- canLogin = true;
- });
- if (fwt) {
- // 护士角色跳护士端
- if (successLoginMsg) {
- this.msg.success("登录成功!", {
- nzDuration: 1000,
- });
- }
- successLoginMsg = false;
- localStorage.setItem("user", JSON.stringify(data.user));
- this.router.navigateByUrl("/nurse");
- return;
- } else if (ddt) {
- // 调度台
- if (successLoginMsg) {
- this.msg.success("登录成功!", {
- nzDuration: 1000,
- });
- }
- successLoginMsg = false;
- localStorage.setItem("user", JSON.stringify(data.user));
- this.router.navigateByUrl("/dispatchingDesk");
- return;
- } else if (yfang) {
- // 药房端2
- if (successLoginMsg) {
- this.msg.success("登录成功!", {
- nzDuration: 1000,
- });
- }
- successLoginMsg = false;
- localStorage.setItem("user", JSON.stringify(data.user));
- this.router.navigateByUrl("/pharmacy2");
- return;
- }
- // 有菜单可以进入系统主页面
- if (!canLogin) {
- this.msg.success("暂无权限进入系统!", {
- nzDuration: 1000,
- });
- } else {
- if (successLoginMsg) {
- this.msg.success("登录成功!", {
- nzDuration: 1000,
- });
- }
- successLoginMsg = false;
- localStorage.setItem("user", JSON.stringify(data.user));
- this.router.navigateByUrl("/main/home");
- }
- }
- // 处理树数据(parent格式转为children格式)
- transform(nodes): any {
- let parents = [];
- const idMapping = nodes.reduce((acc, el, i) => {
- acc[el.id] = i;
- return acc;
- }, {});
- nodes.forEach((el) => {
- if (el.parentid === null || el.parentid === undefined) {
- parents.push(el);
- } else {
- const parentEl = nodes[idMapping[el.parentid]];
- parentEl.childrens = [...(parentEl.childrens || []), el];
- }
- });
- return parents;
- }
- }
|