login_log.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import BaseService from '../../base';
  2. import { UAParser } from 'ua-parser-js';
  3. /**
  4. * 登录日志服务
  5. */
  6. export default class SysLoginLogService extends BaseService {
  7. /**
  8. * 记录登录日志
  9. */
  10. async save(id: number) {
  11. await this.getRepo().admin.sys.LoginLog.save({
  12. ip: this.getHelper().getReqIP(),
  13. userId: id,
  14. ua: this.ctx.get('user-agent'),
  15. });
  16. }
  17. /**
  18. * 计算日志总数
  19. */
  20. async count() {
  21. return await this.getRepo().admin.sys.LoginLog.count();
  22. }
  23. /**
  24. * 分页加载日志信息
  25. */
  26. async page(page: number, count: number) {
  27. // const result = await this.getRepo().admin.sys.LoginLog.find({
  28. // order: {
  29. // id: 'DESC',
  30. // },
  31. // take: count,
  32. // skip: page * count,
  33. // });
  34. const result = await this.getRepo().admin.sys.LoginLog.createQueryBuilder('login_log')
  35. .innerJoinAndSelect('sys_user', 'user', 'login_log.user_id = user.id')
  36. .orderBy('login_log.createTime', 'DESC')
  37. .offset(page * count)
  38. .limit(count)
  39. .getRawMany();
  40. const parser = new UAParser();
  41. return result.map(e => {
  42. const u = parser.setUA(e.login_log_ua).getResult();
  43. return {
  44. id: e.login_log_id,
  45. ip: e.login_log_ip,
  46. os: `${u.os.name} ${u.os.version}`,
  47. browser: `${u.browser.name} ${u.browser.version}`,
  48. time: e.login_log_createTime,
  49. username: e.user_username,
  50. };
  51. });
  52. }
  53. /**
  54. * 清空表中的所有数据
  55. */
  56. async clear() {
  57. await this.getRepo().admin.sys.LoginLog.clear();
  58. }
  59. }