auth.service.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. import { Injectable } from '@angular/core';
  2. import Parse from 'parse';
  3. import { Router } from '@angular/router';
  4. import { textbookServer } from './textbook';
  5. import { catchError } from 'rxjs/operators';
  6. import { HttpClient } from '@angular/common/http';
  7. import { NzMessageService } from 'ng-zorro-antd/message';
  8. import { NzModalService } from 'ng-zorro-antd/modal';
  9. @Injectable({
  10. providedIn: 'root',
  11. })
  12. export class AuthServr {
  13. isLoggedIn = false;
  14. countdown: number = 60; //登录时验证码倒计时
  15. regcountdown: number = 60; //注册验证码倒计时
  16. resetcountdown: number = 60; //重置密码验证码倒计时
  17. redirectUrl: string = '';
  18. roterPath: any = {
  19. 国家级管理员: '/nav-admin',
  20. 报送联系人: '/nav-province-submit',
  21. // "流程管理员登录": '/nav-province-contact',
  22. // "省属高校联系人": '/nav-province-school-contact',
  23. 教材评审组成员: '/nav-review',
  24. // '作者/教师/主编': '/nav-author/manage/space',
  25. 个人: '/nav-author/manage/space',
  26. };
  27. constructor(
  28. public router: Router,
  29. private textbook: textbookServer,
  30. private http: HttpClient,
  31. private message: NzMessageService
  32. ) {}
  33. //登录
  34. login(id: string) {
  35. return new Promise((resolve, reject) => {
  36. let host =
  37. (Parse as any).serverURL?.split('parse')?.[0] ||
  38. 'https://server.fmode.cn/';
  39. this.http
  40. .post(host + 'api/textbook/login', {
  41. id: id,
  42. })
  43. .pipe(
  44. catchError(async (e) => {
  45. reject(e);
  46. })
  47. )
  48. .subscribe((res: any) => {
  49. console.log(res);
  50. if (res?.code == 200) {
  51. let token = res.data.token;
  52. Parse.User.become(token)
  53. .then(async (data: any) => {
  54. console.log(data);
  55. await this.profileVerify();
  56. resolve(data);
  57. })
  58. .catch((err: any) => {
  59. console.log(err.message);
  60. if (err.message.indexOf('Invalid username/password.') != -1) {
  61. reject({ message: '用户名或密码不正确' });
  62. } else {
  63. reject({ message: '用户名或密码不正确' });
  64. }
  65. });
  66. }
  67. });
  68. });
  69. // return new Promise(async (resolve, reject) => {
  70. // let a = /^1[3456789]\d{9}$/;
  71. // if (String(username).match(a)) {
  72. // let query = new Parse.Query('_User');
  73. // query.equalTo('company', company);
  74. // query.equalTo('mobile', username);
  75. // let res = await query.first();
  76. // if (res?.id) {
  77. // username = res.get('username');
  78. // } else {
  79. // reject({ message: '用户不存在' });
  80. // return;
  81. // }
  82. // }
  83. // Parse.User.logIn(username, password)
  84. // .then(async (data: any) => {
  85. // console.log(data);
  86. // await this.profileVerify()
  87. // resolve(data);
  88. // })
  89. // .catch((err: any) => {
  90. // console.log(err.message);
  91. // if (err.message.indexOf('Invalid username/password.') != -1) {
  92. // reject({ message: '用户名或密码不正确' });
  93. // } else {
  94. // reject({ message: '用户名或密码不正确' });
  95. // }
  96. // });
  97. // });
  98. }
  99. //手机号注册/登录
  100. register(mobile: any, code: any, company: string) {
  101. return new Promise((resolve, reject) => {
  102. let host =
  103. (Parse as any).serverURL?.split('parse')?.[0] ||
  104. 'https://server.fmode.cn/';
  105. this.http
  106. .post(host + 'api/textbook/register', {
  107. company: company,
  108. mobile: mobile,
  109. code: code,
  110. })
  111. .pipe(
  112. catchError(async (e) => {
  113. reject(e);
  114. })
  115. )
  116. .subscribe((res: any) => {
  117. console.log(res);
  118. if (res?.code == 200) {
  119. let token = res.data.token;
  120. Parse.User.become(token)
  121. .then(async (data: any) => {
  122. console.log(data);
  123. await this.profileVerify();
  124. resolve(data);
  125. })
  126. .catch((err: any) => {
  127. console.log(err.message);
  128. if (err.message.indexOf('Invalid username/password.') != -1) {
  129. reject({ message: '用户名或密码不正确' });
  130. } else {
  131. reject({ message: '用户名或密码不正确' });
  132. }
  133. });
  134. }
  135. });
  136. });
  137. }
  138. //验证用户类型
  139. async profileVerify(modal?: NzModalService) {
  140. let query = new Parse.Query('Profile');
  141. query.equalTo('user', Parse.User.current()?.id);
  142. query.notEqualTo('isDeleted', true);
  143. let r = await query.first();
  144. if (r?.id) {
  145. let user = Parse.User.current();
  146. if (user?.get('isDeleted')) {
  147. !modal && this.message.error('该账号已被封禁');
  148. modal?.error({
  149. nzTitle: '该账号已被封禁',
  150. nzContent: '',
  151. });
  152. return
  153. }
  154. switch (user?.get('accountState')) {
  155. case '已认证':
  156. if (r.get('identity')) {
  157. this.router.navigate([this.roterPath[r.get('identity')]]);
  158. let profile = r.toJSON();
  159. console.log(profile);
  160. localStorage.setItem('profile', JSON.stringify(profile));
  161. this.textbook.profile = profile;
  162. return
  163. }
  164. this.message.warning('已认证暂无身份');
  165. break;
  166. case '待认证':
  167. !modal && this.message.warning('账号待认证,请等待审核完成');
  168. modal?.warning({
  169. nzTitle: '账号待认证,请等待审核完成',
  170. nzContent: '',
  171. });
  172. break;
  173. case '已禁用':
  174. !modal && this.message.error('账号已禁用');
  175. modal?.error({
  176. nzTitle: '账号已禁用',
  177. nzContent: '',
  178. });
  179. break;
  180. }
  181. if (!user?.get('accountState')) {
  182. this.router.navigate(['/user/account_info']);
  183. }
  184. return;
  185. }
  186. this.router.navigate(['/user/account_info']);
  187. }
  188. logout(): void {
  189. Parse.User.logOut().then((user) => {
  190. // this.developerSer.companyId = ''
  191. window.localStorage.clear();
  192. this.router.navigate(['/user/login']);
  193. });
  194. }
  195. }