message-record-detail.component.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import { Component } from '@angular/core';
  2. import { CommonModule, DatePipe, JsonPipe } from '@angular/common';
  3. // NG-ZORRO 组件
  4. import { NzDescriptionsModule } from 'ng-zorro-antd/descriptions';
  5. import { NzTagModule } from 'ng-zorro-antd/tag';
  6. import { NzSwitchModule } from 'ng-zorro-antd/switch';
  7. // 类型
  8. import { IMessageRecord } from '../services/message.service';
  9. import { NzModalRef } from 'ng-zorro-antd/modal';
  10. @Component({
  11. selector: 'app-message-record-detail',
  12. standalone: true,
  13. imports: [
  14. CommonModule,
  15. NzDescriptionsModule,
  16. NzTagModule,
  17. NzSwitchModule,
  18. DatePipe,
  19. JsonPipe,
  20. ],
  21. template: `
  22. <nz-descriptions nzBordered [nzColumn]="2">
  23. <nz-descriptions-item nzTitle="用户ID">{{
  24. record.uid
  25. }}</nz-descriptions-item>
  26. <nz-descriptions-item nzTitle="CC">{{ record.cc }}</nz-descriptions-item>
  27. <!-- 合并活动、策略、模板为一列 -->
  28. <nz-descriptions-item nzTitle="消息来源">
  29. <div class="source-item">
  30. @if(record.activityName) {
  31. <div><strong>活动:</strong> {{ record.activityName }}</div>
  32. } @if(record.strategyName) {
  33. <div><strong>策略:</strong> {{ record.strategyName }}</div>
  34. } @if(record.templateName) {
  35. <div><strong>模板:</strong> {{ record.templateName }}</div>
  36. }
  37. </div>
  38. </nz-descriptions-item>
  39. <nz-descriptions-item nzTitle="标题">{{
  40. record.title
  41. }}</nz-descriptions-item>
  42. <nz-descriptions-item nzTitle="内容">{{
  43. record.content
  44. }}</nz-descriptions-item>
  45. <nz-descriptions-item nzTitle="状态">
  46. <nz-tag [nzColor]="getStatusColor(record.status)">
  47. {{ getStatusName(record.status) }}
  48. </nz-tag>
  49. </nz-descriptions-item>
  50. <nz-descriptions-item nzTitle="图片链接">{{
  51. record.image || ''
  52. }}</nz-descriptions-item>
  53. <nz-descriptions-item nzTitle="大图模式">
  54. {{ record.bigger }}
  55. </nz-descriptions-item>
  56. <nz-descriptions-item nzTitle="客户端行为">{{
  57. record.action || ''
  58. }}</nz-descriptions-item>
  59. <nz-descriptions-item nzTitle="行为参数">{{
  60. record.param || ''
  61. }}</nz-descriptions-item>
  62. <nz-descriptions-item nzTitle="扩展参数">
  63. <pre>{{ record.extend ? (record.extend | json) : '无' }}</pre>
  64. </nz-descriptions-item>
  65. <nz-descriptions-item nzTitle="错误信息">{{
  66. record.errno || ''
  67. }}</nz-descriptions-item>
  68. <nz-descriptions-item nzTitle="FCM回执">{{
  69. record.fcmReceipt || ''
  70. }}</nz-descriptions-item>
  71. <nz-descriptions-item nzTitle="计划发送时间">
  72. {{ record.plannedSendAt | date : 'yyyy-MM-dd HH:mm:ss' }}
  73. </nz-descriptions-item>
  74. <nz-descriptions-item nzTitle="实际发送时间">
  75. {{ record.actualSendAt | date : 'yyyy-MM-dd HH:mm:ss' }}
  76. </nz-descriptions-item>
  77. <nz-descriptions-item nzTitle="送达时间">
  78. {{ record.deliveredAt | date : 'yyyy-MM-dd HH:mm:ss' }}
  79. </nz-descriptions-item>
  80. <nz-descriptions-item nzTitle="打开时间">
  81. {{ record.openedAt | date : 'yyyy-MM-dd HH:mm:ss' }}
  82. </nz-descriptions-item>
  83. @if(record.deliveredAt) {
  84. <nz-descriptions-item nzTitle="送达时">
  85. {{ record.inforeground ? '在前台' : '在后台' }}
  86. </nz-descriptions-item>
  87. }
  88. <nz-descriptions-item nzTitle="创建时间">
  89. {{ record.createdAt | date : 'yyyy-MM-dd HH:mm:ss' }}
  90. </nz-descriptions-item>
  91. <nz-descriptions-item nzTitle="更新时间">
  92. {{ record.updatedAt | date : 'yyyy-MM-dd HH:mm:ss' }}
  93. </nz-descriptions-item>
  94. </nz-descriptions>
  95. `,
  96. styles: [
  97. `
  98. pre {
  99. margin: 0;
  100. white-space: pre-wrap;
  101. word-wrap: break-word;
  102. }
  103. .source-item {
  104. display: flex;
  105. flex-direction: column;
  106. gap: 4px;
  107. }
  108. .source-item div {
  109. line-height: 1.5;
  110. }
  111. `,
  112. ],
  113. })
  114. export class MessageRecordDetailComponent {
  115. record: IMessageRecord;
  116. constructor(private modalRef: NzModalRef) {
  117. this.record = this.modalRef.getConfig().nzData?.record;
  118. }
  119. getStatusName(status: number): string {
  120. const statuses: Record<number, string> = {
  121. 0: '未发送',
  122. 1: '发送成功',
  123. 2: '已送达',
  124. 3: '已打开',
  125. [-1]: '发送失败',
  126. };
  127. return statuses[status] || '未知状态';
  128. }
  129. getStatusColor(status: number): string {
  130. const colors: Record<number, string> = {
  131. 0: 'default',
  132. 1: 'processing',
  133. 2: 'success',
  134. 3: 'green',
  135. [-1]: 'error',
  136. };
  137. return colors[status] || 'default';
  138. }
  139. }