user-detail-modal.component.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. // user-detail-modal.component.ts
  2. import { Component, Input } from '@angular/core';
  3. import { CommonModule } from '@angular/common';
  4. import { NzDescriptionsModule } from 'ng-zorro-antd/descriptions';
  5. import { NzDividerModule } from 'ng-zorro-antd/divider';
  6. import { DatePipe } from '@angular/common';
  7. import { User, UserService } from '../services/user.service';
  8. import { NzTagModule } from 'ng-zorro-antd/tag';
  9. import { NzModalRef } from 'ng-zorro-antd/modal';
  10. import { NzMessageService } from 'ng-zorro-antd/message';
  11. @Component({
  12. selector: 'app-user-detail-modal',
  13. standalone: true,
  14. imports: [
  15. CommonModule,
  16. NzDescriptionsModule,
  17. NzDividerModule,
  18. NzTagModule,
  19. DatePipe,
  20. ],
  21. template: `
  22. <nz-descriptions nzTitle="用户详情" nzBordered [nzColumn]="2">
  23. <nz-descriptions-item nzTitle="UID">{{ user?.uid }}</nz-descriptions-item>
  24. <nz-descriptions-item nzTitle="项目ID">{{
  25. user?.project
  26. }}</nz-descriptions-item>
  27. <nz-descriptions-item nzTitle="来源渠道">{{
  28. user?.network || '-'
  29. }}</nz-descriptions-item>
  30. <nz-descriptions-item nzTitle="推广活动">{{
  31. user?.campaign || '-'
  32. }}</nz-descriptions-item>
  33. <nz-descriptions-item nzTitle="广告组">{{
  34. user?.adgroup || '-'
  35. }}</nz-descriptions-item>
  36. <nz-descriptions-item nzTitle="素材名称">{{
  37. user?.creative || '-'
  38. }}</nz-descriptions-item>
  39. <nz-descriptions-item nzTitle="归属产品">{{
  40. user?.prod || '-'
  41. }}</nz-descriptions-item>
  42. <nz-descriptions-item nzTitle="操作系统">{{
  43. user?.libraryName || '-'
  44. }}</nz-descriptions-item>
  45. <nz-descriptions-item nzTitle="国家代码">{{
  46. user?.cc || '-'
  47. }}</nz-descriptions-item>
  48. <nz-descriptions-item nzTitle="语言">{{
  49. user?.lang || '-'
  50. }}</nz-descriptions-item>
  51. <nz-descriptions-item nzTitle="生产厂商">{{
  52. user?.manufacturer || '-'
  53. }}</nz-descriptions-item>
  54. <nz-descriptions-item nzTitle="设备型号">{{
  55. user?.deviceModel || '-'
  56. }}</nz-descriptions-item>
  57. <nz-descriptions-item nzTitle="硬件信息">{{
  58. user?.hardware || '-'
  59. }}</nz-descriptions-item>
  60. <nz-descriptions-item nzTitle="设备信息">{{
  61. user?.deviceInfo || '-'
  62. }}</nz-descriptions-item>
  63. <nz-descriptions-item nzTitle="机身内存"
  64. >{{ user?.deviceMem || '-' }} GB</nz-descriptions-item
  65. >
  66. <nz-descriptions-item nzTitle="API版本">{{
  67. user?.apiLevel || '-'
  68. }}</nz-descriptions-item>
  69. <nz-descriptions-item nzTitle="软件版本">{{
  70. user?.versionName || '-'
  71. }}</nz-descriptions-item>
  72. <nz-descriptions-item nzTitle="软件编号">{{
  73. user?.versionCode || '-'
  74. }}</nz-descriptions-item>
  75. <nz-descriptions-item nzTitle="首次登录时间">{{
  76. user?.firstLoginAt | date : 'yyyy-MM-dd HH:mm:ss'
  77. }}</nz-descriptions-item>
  78. <nz-descriptions-item nzTitle="最后活跃时间">{{
  79. user?.lastActiveAt | date : 'yyyy-MM-dd HH:mm:ss'
  80. }}</nz-descriptions-item>
  81. <nz-descriptions-item nzTitle="创建时间">{{
  82. user?.createdAt | date : 'yyyy-MM-dd HH:mm:ss'
  83. }}</nz-descriptions-item>
  84. <nz-descriptions-item nzTitle="更新时间">{{
  85. user?.updateAt | date : 'yyyy-MM-dd HH:mm:ss'
  86. }}</nz-descriptions-item>
  87. </nz-descriptions>
  88. <nz-descriptions nzBordered>
  89. <nz-descriptions-item nzTitle="FCM Token">{{
  90. user?.fmToken || '-'
  91. }}</nz-descriptions-item>
  92. </nz-descriptions>
  93. <nz-divider></nz-divider>
  94. <div *ngIf="user?.tags?.length">
  95. <h3>用户标签</h3>
  96. <nz-tag *ngFor="let tag of user?.tags" [nzColor]="'blue'">{{
  97. tag
  98. }}</nz-tag>
  99. </div>
  100. `,
  101. styles: [
  102. `
  103. :host {
  104. display: block;
  105. padding: 16px;
  106. }
  107. pre {
  108. background: #f5f5f5;
  109. padding: 8px;
  110. border-radius: 4px;
  111. overflow-x: auto;
  112. }
  113. nz-tag {
  114. margin-right: 8px;
  115. margin-bottom: 8px;
  116. }
  117. `,
  118. ],
  119. })
  120. export class UserDetailModalComponent {
  121. user: User | null = null;
  122. isLoading = false;
  123. // 改为通过构造函数注入
  124. constructor(
  125. public modalRef: NzModalRef,
  126. private userService: UserService,
  127. private message: NzMessageService
  128. ) {}
  129. ngOnInit(): void {
  130. const inputData = this.modalRef.getConfig().nzData;
  131. if (this.isUserObject(inputData)) {
  132. // 如果传入的是完整的用户对象,直接使用
  133. this.user = inputData;
  134. } else if (inputData?.uid) {
  135. // 如果传入的是UID,发起请求获取用户详情
  136. this.loadUser(inputData.uid);
  137. } else {
  138. this.message.error('无效的用户数据');
  139. this.modalRef.close();
  140. }
  141. }
  142. private isUserObject(obj: any): obj is User {
  143. return obj && typeof obj === 'object' && 'uid' in obj && 'project' in obj;
  144. }
  145. private loadUser(uid: string): void {
  146. this.isLoading = true;
  147. this.userService.getUserByUid(uid).subscribe({
  148. next: (user) => {
  149. this.user = user;
  150. this.isLoading = false;
  151. },
  152. error: (err) => {
  153. this.message.error('加载用户详情失败: ' + err.message);
  154. this.isLoading = false;
  155. this.modalRef.close();
  156. },
  157. });
  158. }
  159. }