Explorar o código

服务台通话记录

seimin hai 6 meses
pai
achega
1ef5c6863b
Modificáronse 19 ficheiros con 524 adicións e 717 borrados
  1. 1 1
      proxy.conf.json
  2. 14 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.html
  3. 173 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.less
  4. 29 0
      src/app/components/incidentManagement/incident-recording/incident-recording.component.ts
  5. 20 0
      src/app/components/incidentManagement/incident-recording/incident-recording.module.ts
  6. 63 156
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.html
  7. 64 25
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.less
  8. 97 301
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.ts
  9. 22 0
      src/app/components/incidentManagement/incident-ser-call/incident-ser-call.module.ts
  10. 5 18
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.html
  11. 1 174
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.less
  12. 9 21
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.ts
  13. 2 0
      src/app/components/incidentManagement/incident-ser-message/incident-ser-message.module.ts
  14. 0 2
      src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.ts
  15. 4 1
      src/app/views/fuwutai/fuwutai.component.html
  16. 3 0
      src/app/views/fuwutai/fuwutai.component.less
  17. 11 17
      src/app/views/fuwutai/fuwutai.component.ts
  18. 2 0
      src/app/views/fuwutai/fuwutai.module.ts
  19. 4 1
      src/common.less

+ 1 - 1
proxy.conf.json

@@ -1,6 +1,6 @@
1 1
 {
2 2
   "/service": {
3
-		"target": "http://192.168.4.105",
3
+		"target": "http://192.168.3.108",
4 4
     "logLevel": "debug",
5 5
     "changeOrigin": true,
6 6
     "pathRewrite": {

+ 14 - 0
src/app/components/incidentManagement/incident-recording/incident-recording.component.html

@@ -0,0 +1,14 @@
1
+<div class="save display_flex justify-content_flex-center align-items_center add">
2
+  <div class="modalBody">
3
+    <div class="title">回放录音<i class="icon_transport transport-guanbi" (click)="hideModal()"></i>
4
+    </div>
5
+    <div class="content audio">
6
+      <audio controls style="outline: none;">
7
+        <source [src]="audioPath" type="audio/wav">
8
+      </audio>
9
+    </div>
10
+    <div class=" display_flex justify-content_flex-center">
11
+      <button class="btn cancel" nz-button nzType="default" (click)="hideModal()">知道了</button>
12
+    </div>
13
+  </div>
14
+</div>

+ 173 - 0
src/app/components/incidentManagement/incident-recording/incident-recording.component.less

@@ -0,0 +1,173 @@
1
+@import "../../../../../src/theme.less";
2
+.save {
3
+  position: fixed;
4
+  left: 0;
5
+  top: 0;
6
+  width: 100%;
7
+  height: 100%;
8
+  background: rgba(0, 0, 0, 0.4);
9
+  z-index: 999;
10
+
11
+  .modalBody {
12
+    width: 350px;
13
+    height: 220px;
14
+    background: #fff;
15
+    border-radius: 5px;
16
+    padding: 10px 20px;
17
+    color: #333;
18
+
19
+    .title {
20
+      width: 100%;
21
+      text-align: center;
22
+      font-size: 18px;
23
+      position: relative;
24
+
25
+      i {
26
+        position: absolute;
27
+        right: 0;
28
+        top: 0;
29
+        font-size: 20px;
30
+        color: #666;
31
+        cursor: pointer;
32
+        padding: 0 5px;
33
+      }
34
+    }
35
+
36
+    .content {
37
+      width: 310px;
38
+      height: 117px;
39
+      background: #f9fafb;
40
+      border: 1px solid #e5e9ed;
41
+      border-radius: 5px;
42
+      overflow: hidden;
43
+      margin-top: 12px;
44
+
45
+      & > div {
46
+        text-align: center;
47
+        margin: 0;
48
+
49
+        &.icon {
50
+          margin-top: 17px;
51
+
52
+          i {
53
+            color: #34b349;
54
+            font-size: 30px !important;
55
+
56
+            &.transport-wenhao {
57
+              color: #f5a523;
58
+            }
59
+
60
+            &.transport-shibai {
61
+              color: #ff3a52;
62
+            }
63
+          }
64
+        }
65
+
66
+        &.defeat {
67
+          color: #333;
68
+          font-size: 18px;
69
+        }
70
+
71
+        &:nth-child(3) {
72
+          font-size: 14px;
73
+          color: #666;
74
+        }
75
+      }
76
+      .roundRobinTips {
77
+        font-size: 12px;
78
+      }
79
+    }
80
+
81
+    button {
82
+      margin-top: 10px;
83
+
84
+      &.btn {
85
+        margin-left: 8px;
86
+      }
87
+    }
88
+  }
89
+
90
+  // 新增
91
+  &.add {
92
+    .modalBody {
93
+      width: 480px;
94
+      height: auto;
95
+
96
+      .content {
97
+        width: 100%;
98
+        height: auto;
99
+        padding: 18px 14px 0 14px;
100
+        max-height: 497px;
101
+        overflow-y: auto;
102
+        &.audio {
103
+          padding: 0;
104
+          height: 126px;
105
+          display: flex;
106
+          justify-content: center;
107
+          align-items: center;
108
+        }
109
+
110
+        .addForm {
111
+          .ant-form-item {
112
+            margin-bottom: 15px;
113
+
114
+            .ant-form-item-label {
115
+              line-height: 14px;
116
+              text-align: left;
117
+            }
118
+
119
+            .desc {
120
+              margin-top: 5px;
121
+            }
122
+          }
123
+
124
+          .datesControl {
125
+            margin-top: -16px;
126
+
127
+            .ant-form-item-label {
128
+              line-height: 40px;
129
+            }
130
+          }
131
+
132
+          .timer {
133
+            .ant-form-item-label {
134
+              width: 100%;
135
+              text-align: left;
136
+            }
137
+
138
+            .numInp {
139
+              margin-right: 5px;
140
+            }
141
+
142
+            .line {
143
+              margin-right: 5px;
144
+            }
145
+          }
146
+
147
+          .timer2 {
148
+            .ant-form-item-label {
149
+              line-height: 20px;
150
+            }
151
+          }
152
+        }
153
+
154
+        .editForm {
155
+          .ant-form-item {
156
+            margin-bottom: 15px;
157
+
158
+            .ant-form-item-label {
159
+              line-height: 14px;
160
+              text-align: left;
161
+            }
162
+          }
163
+        }
164
+      }
165
+
166
+      button {
167
+        &:nth-child(1) {
168
+          margin-right: 20px;
169
+        }
170
+      }
171
+    }
172
+  }
173
+}

+ 29 - 0
src/app/components/incidentManagement/incident-recording/incident-recording.component.ts

@@ -0,0 +1,29 @@
1
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
+
3
+@Component({
4
+  selector: 'app-incident-recording',
5
+  templateUrl: './incident-recording.component.html',
6
+  styleUrls: ['./incident-recording.component.less']
7
+})
8
+export class IncidentRecordingComponent implements OnInit {
9
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
10
+
11
+  @Input() path: any;
12
+
13
+  constructor() { }
14
+
15
+  audioPath = ""; //录音文件地址
16
+
17
+  ngOnInit() {
18
+    this.audioPath = location.origin + this.path;
19
+  }
20
+
21
+  // 关闭弹窗
22
+  hideModal() {
23
+    this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
24
+  }
25
+}
26
+
27
+
28
+
29
+

+ 20 - 0
src/app/components/incidentManagement/incident-recording/incident-recording.module.ts

@@ -0,0 +1,20 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { IncidentRecordingComponent } from './incident-recording.component';
5
+import { ShareModule } from 'src/app/share/share.module';
6
+
7
+
8
+@NgModule({
9
+  declarations: [
10
+    IncidentRecordingComponent,
11
+  ],
12
+  imports: [
13
+    CommonModule,
14
+    ShareModule,
15
+  ],
16
+  exports: [
17
+    IncidentRecordingComponent,
18
+  ]
19
+})
20
+export class IncidentRecordingModule { }

+ 63 - 156
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.html

@@ -1,170 +1,77 @@
1
-<div class="modal display_flex justify-content_flex-center align-items_center" *ngIf="show">
2
-  <div class="modalBody" style="width: 1200px;">
3
-    <div class="title">业务数据查看<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
1
+<div class="modal display_flex align-items_center">
2
+  <div class="modalBody">
3
+    <div class="title">通话记录<i class="icon_transport transport-guanbi" (click)="hideModal()"></i></div>
4 4
     <div class="content">
5
-      <!-- 血制品 -->
6
-      <nz-table *ngIf="type === 'blood'" class="hospitalTable" [nzData]="bloodList" nzSize="middle" [nzShowPagination]="false"
7
-        [nzLoading]="hsLoading" [nzScroll]="{ y: '500px' }">
8
-        <thead>
9
-          <tr class="thead">
10
-            <th nzWidth="5%">序号</th>
11
-            <th nzWidth="13%">患者姓名</th>
12
-            <th nzWidth="11%">患者ID</th>
13
-            <th nzWidth="11%">血液类型</th>
14
-            <th nzWidth="14%">血袋号</th>
15
-            <th nzWidth="11%">取血人</th>
16
-            <th nzWidth="12%">取血时间</th>
17
-            <th nzWidth="11%">接收人</th>
18
-            <th nzWidth="12%">接收时间</th>
19
-          </tr>
20
-        </thead>
21
-        <tbody>
22
-          <tr *ngFor="let data of bloodList;let i = index;">
23
-            <td>{{i+1}}</td>
24
-            <td><span>{{ data.patientName }}<span *ngIf="data.bedNum">({{ data.bedNum }})</span></span></td>
25
-            <td>{{ data.patientNo||'' }}</td>
26
-            <td>{{ data.type ? data.type.name : "" }}</td>
27
-            <td>{{ data.bloodCode||'' }}</td>
28
-            <td>{{ data.arriverDTO?data.arriverDTO.name:'' }}</td>
29
-            <td>{{ data.arriveTime | date:"yyyy-MM-dd HH:mm:ss" }}</td>
30
-            <td>{{ data.receiverDTO ? data.receiverDTO.name : '' }}</td>
31
-            <td>{{ data.receiveTime | date:"yyyy-MM-dd HH:mm:ss" }}</td>
32
-          </tr>
33
-        </tbody>
34
-      </nz-table>
35
-      <!-- 标本 -->
36
-      <div class="list-template w100" *ngIf="type === 'specimen'">
5
+      <div class="list-template w100" style="padding: 16px;">
37 6
         <div class="list-template__content">
38
-          <div class="list-template__top" nz-row *ngIf="type === 'specimen'">
39
-            <div nz-col nzXl='24' class="list-template__searchBox">
7
+          <div class="list-template__top" nz-row style="padding: 0;">
8
+            <div nz-col nzXl='18' class="list-template__searchBox">
40 9
               <div class="list-template__searchItem">
41
-                <span class="label">标本类型</span>:
42
-                <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch
43
-                  nzPlaceHolder="请选择标本类型" [(ngModel)]="searchCriteria.stype" (ngModelChange)="selectStype($event)">
44
-                  <nz-option *ngFor="let option of specimentTypeList" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
45
-                </nz-select>
10
+                <span class="label">主叫号码:</span>
11
+                <input nz-input class="formItem" placeholder="请输入主叫号码" [(ngModel)]="searchDTO.dTMFA" />
46 12
               </div>
47 13
               <div class="list-template__searchItem">
48
-                <span class="label">检验项目</span>:
49
-                <nz-select style="width: 210px;" class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch
50
-                  nzPlaceHolder="请选择检验项目" [(ngModel)]="searchCriteria.specimenDesc" (ngModelChange)="selectDesc($event)">
51
-                  <nz-option *ngFor="let option of specimenDescList" [nzLabel]="option.nameNum" [nzValue]="option.id"></nz-option>
52
-                </nz-select>
14
+                <span class="label">被叫号码:</span>
15
+                <input nz-input class="formItem" placeholder="请输入被叫号码" [(ngModel)]="searchDTO.dTMFB" />
53 16
               </div>
17
+              <div class="list-template__searchItem">
18
+                <span class="label">开始时间:</span>
19
+                <nz-date-picker class="formItem" [ngModel]="searchDTO.responseTime" (ngModelChange)="searchDTO.responseTime = $event" nzShowTime></nz-date-picker>
20
+              </div>
21
+            </div>
22
+            <div nz-col nzXl='6' class="list-template__btns">
23
+              <button nz-button class="btn default ml8 mt0" (click)='search()'>搜索</button>
24
+              <button nz-button class="btn default ml8 mt0" (click)='reset()'>重置</button>
54 25
             </div>
55 26
           </div>
56 27
         </div>
57 28
       </div>
58
-      <nz-table *ngIf="type === 'specimen'" class="hospitalTable" [nzData]="specimenList" nzSize="middle" [nzShowPagination]="false"
59
-        [nzLoading]="hsLoading" [nzScroll]="{ y: '500px' }">
60
-        <thead>
61
-          <tr class="thead">
62
-            <th nzWidth="4%">序号</th>
63
-            <th nzWidth="8%">申请科室</th>
64
-            <th nzWidth="8%">患者姓名</th>
65
-            <th nzWidth="8%">标本编码</th>
66
-            <th nzWidth="8%">检验项目</th>
67
-            <th nzWidth="8%">标本类型</th>
68
-            <th nzWidth="8%">状态</th>
69
-            <th nzWidth="8%">收取时间</th>
70
-            <th nzWidth="8%">收取人</th>
71
-            <th nzWidth="8%">中转时间</th>
72
-            <th nzWidth="8%">送达时间</th>
73
-            <th nzWidth="8%">送达人</th>
74
-            <th nzWidth="8%">终点科室</th>
75
-          </tr>
76
-        </thead>
77
-        <tbody>
78
-          <tr *ngFor="let data of specimenList;let i = index;">
79
-            <td>{{ (pageIndex - 1) * pageSize + i + 1 }}</td>
80
-            <td>{{ data.sickRoom ? data.sickRoom.dept : "-" }}</td>
81
-            <td>{{ data.patientName}}<span *ngIf="data.bedNum">({{data.bedNum}})</span><br>{{data.residenceNo}}</td>
82
-            <td>{{ data.scode || "-" }}</td>
83
-            <td>{{ data.specimenDesc || "-" }}</td>
84
-            <td>{{ data.stype ? data.stype.name : "-" }}</td>
85
-            <td>{{ data.speState ? data.speState.name : "-" }}</td>
86
-            <td>{{ data.arriveTime || "-" }}</td>
87
-            <td>{{ data.receiverName || "-" }}</td>
88
-            <td>{{ data.transTime || '-' }}</td>
89
-            <td>{{ data.sendTime || '-' }}</td>
90
-            <td>{{ data.delivererName || "-" }}</td>
91
-            <td>
92
-              {{ data.checkDept ? data.checkDept.dept : "-" }}
93
-              <img *ngIf="data.urgent == 1" src="../../assets/images/icon_ji.png" alt="" class="ji" />
94
-            </td>
95
-          </tr>
96
-        </tbody>
97
-      </nz-table>
98
-      <!-- 科室检查率统计 -->
99
-      <nz-table *ngIf="type === 'deptInspectionRateStatistics' || type === 'deptInspectionStatistics'" class="hospitalTable" [nzData]="inspectionRateStatisticsList" nzSize="middle" [nzShowPagination]="false"
100
-        [nzLoading]="hsLoading" [nzScroll]="{ y: '500px' }">
101
-        <thead>
102
-          <tr class="thead">
103
-            <th nzWidth="4%">序号</th>
104
-            <th nzWidth="12%">患者姓名(床号)</th>
105
-            <th nzWidth="12%">检查项目</th>
106
-            <th nzWidth="12%">预约时间</th>
107
-            <th nzWidth="12%">叫号信息</th>
108
-            <th nzWidth="12%">检查科室</th>
109
-            <th nzWidth="12%">检查状态</th>
110
-            <th nzWidth="12%">陪检人</th>
111
-            <th nzWidth="12%">是否临时急查</th>
112
-          </tr>
113
-        </thead>
114
-        <tbody>
115
-          <tr *ngFor="let data of inspectionRateStatisticsList;let i = index;">
116
-            <td>{{ (pageIndex - 1) * pageSize + i + 1 }}</td>
117
-            <td>{{ data.patientName }}<span *ngIf="data.patientBedNum">({{data.patientBedNum}})</span></td>
118
-            <td>{{ data.inspectName}}</td>
119
-            <td>{{ data.yyTime}}</td>
120
-            <td>{{ data.reservationNumber}}</td>
121
-            <td>{{ data.execDept ? data.execDept.dept : '' }}</td>
122
-            <td>{{ data.inspectState?data.inspectState.name:''}}</td>
123
-            <td>{{ data.workerName}}</td>
124
-            <td>{{ data.priority == 1 ? '是' : '否'}}</td>
125
-          </tr>
126
-        </tbody>
127
-      </nz-table>
128
-
129
-      <!-- 被服洗涤批次管理-查看视图-查看异常 -->
130
-      <nz-table *ngIf="type === 'washingException'" class="hospitalTable" [nzData]="washingExceptionList" nzSize="middle" [nzShowPagination]="false"
131
-        [nzLoading]="hsLoading" [nzScroll]="{ y: '500px' }">
132
-        <thead>
133
-          <tr class="thead">
134
-            <th nzWidth="5%">序号</th>
135
-            <th nzWidth="13%">关联科室</th>
136
-            <th nzWidth="11%">被服种类</th>
137
-            <th nzWidth="5%">调整数量</th>
138
-            <th nzWidth="20%">调整原因</th>
139
-            <th nzWidth="20%">备注</th>
140
-            <th nzWidth="15%">时间</th>
141
-            <th nzWidth="11%">操作人</th>
142
-          </tr>
143
-        </thead>
144
-        <tbody>
145
-          <tr *ngFor="let data of washingExceptionList;let i = index;">
146
-            <td>{{i+1}}</td>
147
-            <td>{{ data.clothesDeptDTO?.dept }}</td>
148
-            <td>{{ data.clothesType?.name }}</td>
149
-            <td>{{ data.changeNum }}</td>
150
-            <td>{{ data.clothesExceptionRe?.name }}</td>
151
-            <td>{{ data.remarks }}</td>
152
-            <td>{{ data.changeTime | date:"yyyy-MM-dd HH:mm:ss" }}</td>
153
-            <td>{{ data.changerDTO?.name }}</td>
154
-          </tr>
155
-        </tbody>
156
-      </nz-table>
157
-
158
-      <div class="pagination" *ngIf="type !== 'blood'">
159
-        <ng-template #totalTemplate let-total> 共 {{ total }} 条 </ng-template>
160
-        <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="total"
161
-          [(nzPageSize)]="pageSize" (nzPageIndexChange)="getList()"
162
-          (nzPageSizeChange)="getList()" [nzShowTotal]="totalTemplate">
163
-        </nz-pagination>
29
+      <div class="tableWrap">
30
+        <nz-table class="hospitalTable" [nzData]="messageList" nzSize="small" [nzShowPagination]="false" [nzLoading]="loading">
31
+          <thead>
32
+            <tr class="thead">
33
+              <th nzWidth="12.5%">主叫号码</th>
34
+              <th nzWidth="12.5%">被叫号码</th>
35
+              <th nzWidth="12.5%">开始时间</th>
36
+              <th nzWidth="12.5%">结束时间</th>
37
+              <th nzWidth="12.5%">通话时长</th>
38
+              <th nzWidth="12.5%">已接/未接</th>
39
+              <th nzWidth="12.5%">呼入/呼出</th>
40
+              <th nzWidth="12.5%">操作</th>
41
+            </tr>
42
+          </thead>
43
+          <tbody>
44
+            <tr *ngFor="let data of messageList;let i = index;">
45
+              <td>{{ data.dTMFA }}</td>
46
+              <td>{{ data.dTMFB }}</td>
47
+              <td>{{ data.responseTime}}</td>
48
+              <td>{{ data.overTime}}</td>
49
+              <td *ngIf="data.longTime!==undefined">{{data.longTime}}秒</td>
50
+              <td *ngIf="data.longTime===undefined"></td>
51
+              <td>{{data.callState == 1?'已接':'未接'}}</td>
52
+              <td>{{data.callType == 1?'呼入':(data.callType == 0?'呼出':'')}}</td>
53
+              <td>
54
+                <div class="coop">
55
+                  <span *ngIf="data.path" (click)="recordcall(data)">回访录音</span>
56
+                </div>
57
+              </td>
58
+            </tr>
59
+          </tbody>
60
+        </nz-table>
61
+        <div class="pagination">
62
+          <ng-template #totalTemplate let-total> 共 {{ total }} 条 </ng-template>
63
+          <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="total"
64
+            [(nzPageSize)]="pageSize" (nzPageIndexChange)="getList()"
65
+            (nzPageSizeChange)="getList()" [nzShowTotal]="totalTemplate">
66
+          </nz-pagination>
67
+        </div>
164 68
       </div>
165 69
     </div>
166
-    <div class="display_flex justify-content_flex-center">
167
-      <button class="btn know" nz-button nzType="primary" (click)="hideModal()">知道了</button>
168
-    </div>
169 70
   </div>
170 71
 </div>
72
+
73
+<!-- 回放录音模态框 -->
74
+<app-incident-recording [path]="coopData.relativePath" *ngIf="recordingModalShow" (closeModelHs)="closeRecordingModelOrder($event)"></app-incident-recording>
75
+
76
+<!-- 遮罩 -->
77
+<app-mask *ngIf="maskFlag"></app-mask>

+ 64 - 25
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.less

@@ -1,4 +1,53 @@
1 1
 @import "../../../../theme.less";
2
+.coop {
3
+  button{
4
+    color: #333;
5
+  }
6
+  span,button {
7
+    display: inline-block;
8
+    padding: 0 8px;
9
+    cursor: pointer;
10
+    position: relative;
11
+
12
+    &::after {
13
+      content: "|";
14
+      position: absolute;
15
+      top: 0;
16
+      right: 0;
17
+    }
18
+
19
+    &:hover,
20
+    &:active {
21
+      color: @primary-color;
22
+    }
23
+
24
+    &:nth-last-child(1) {
25
+      &::after {
26
+        content: "";
27
+      }
28
+    }
29
+  }
30
+}
31
+.tabs{
32
+  width: 100%;
33
+  height: 56px;
34
+  border-bottom: 1px solid #D9D9D9;
35
+  display: flex;
36
+  align-items: center;
37
+  .tab{
38
+    width: 100px;
39
+    display: flex;
40
+    height: 100%;
41
+    justify-content: center;
42
+    align-items: center;
43
+    font-size: #333;
44
+    cursor: pointer;
45
+    &.active{
46
+      color: @primary-color;
47
+      border-bottom: 2px solid @primary-color;
48
+    }
49
+  }
50
+}
2 51
 .modal {
3 52
   position: fixed;
4 53
   left: 0;
@@ -7,6 +56,18 @@
7 56
   height: 100%;
8 57
   background: rgba(0, 0, 0, 0.4);
9 58
   z-index: 999;
59
+  .tableWrap{
60
+    margin: 0 16px 16px!important;
61
+    background: #F9FAFB;
62
+    border-radius: 8px;
63
+    border: 1px solid #D9D9D9;
64
+    width: calc(100% - 32px);
65
+    min-height: 501px;
66
+    padding: 16px 16px 0;
67
+    ::ng-deep .ant-table-body{
68
+      margin: 0!important;
69
+    }
70
+  }
10 71
   .hospitalTable {
11 72
     width: 100%;
12 73
     td {
@@ -37,31 +98,8 @@
37 98
     }
38 99
   }
39 100
 
40
-  .tab {
41
-    width: 100%;
42
-    height: 60px;
43
-    border-bottom: 1px solid #e5e9ed;
44
-    background-color: #fff;
45
-
46
-    .item {
47
-      text-align: center;
48
-      line-height: 60px;
49
-      height: 100%;
50
-      border-right: 1px solid #e5e9ed;
51
-
52
-      &:nth-last-child(1) {
53
-        border: none;
54
-      }
55
-
56
-      &.checked {
57
-        background: #f0f6ed;
58
-      }
59
-    }
60
-  }
61
-
62 101
   .modalBody {
63
-    width: 700px;
64
-    min-height: 220px;
102
+    width: 1315px;
65 103
     background: #fff;
66 104
     border-radius: 5px;
67 105
     padding: 10px 20px;
@@ -90,7 +128,7 @@
90 128
 
91 129
     .content {
92 130
       min-height: 117px;
93
-      background: #f9fafb;
131
+      // background: #f9fafb;
94 132
       border: 1px solid #e5e9ed;
95 133
       border-radius: 5px;
96 134
       overflow: hidden;
@@ -146,6 +184,7 @@
146 184
           color: #666;
147 185
           padding-top: 16px;
148 186
           padding-bottom: 16px;
187
+          text-align: right;
149 188
         }
150 189
       }
151 190
     }

+ 97 - 301
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.component.ts

@@ -1,304 +1,100 @@
1
-// import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
-// import { ToolService } from 'src/app/services/tool.service';
3
-// import { format, startOfDay, endOfDay } from 'date-fns';
4
-// import { MainService } from 'src/app/services/main.service';
5
-// @Component({
6
-//   selector: 'app-businessData-detail-modal',
7
-//   templateUrl: './businessData-detail-modal.component.html',
8
-//   styleUrls: ['./businessData-detail-modal.component.less']
9
-// })
10
-// export class BusinessDataDetailModalComponent implements OnInit {
11
-//   // 切换科室,切换弹窗
12
-//   hosId;
13
-//   hsLoading = false;
14
-//   bloodList: any = [];// 血制品列表
15
-//   washingExceptionList: any = [];// 被服洗涤异常列表
16
-//   specimenList: any = [];// 标本列表
17
-//   inspectionRateStatisticsList: any = [];// 科室检查率统计列表
18
-//   pageIndex: number = 1;//表格当前页码
19
-//   pageSize: number = 10;//表格每页展示条数
20
-//   total: number = 0;//表格总数据量
21
-//   searchCriteria:any = {
22
-//     stype: 0,
23
-//     specimenDesc: 0,
24
-//   }
25
-//   @Input() show: Boolean;
26
-//   @Input() orderId: String;
27
-//   @Input() type: String = '';
28
-//   @Input() dataInfo: any;
29
-
30
-//   @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
31
-
32
-//   constructor(private mainService: MainService, private tool: ToolService) { }
33
-
34
-//   ngOnInit() {
35
-//     this.hosId = this.tool.getCurrentHospital().id;
36
-//     this.tabType = 1;
37
-//     switch(this.type){
38
-//       case 'blood':
39
-//         this.getBlood(1);
40
-//         break;
41
-//       case 'specimen':
42
-//           this.getSpecimen(1);
43
-//           this.getSpecimenType();
44
-//           this.getSpecimenDesc();
45
-//           break;
46
-//       case 'deptInspectionRateStatistics':
47
-//           this.getDeptInspectionRateStatistics(1);
48
-//           break;
49
-//       case 'deptInspectionStatistics':
50
-//         this.getDeptInspectionStatistics(1);
51
-//         break;
52
-//       case 'washingException':
53
-//           this.getWashingException(1);
54
-//           break;
55
-//     }
56
-//   }
57
-//   // 关闭弹窗
58
-//   hideModal() {
59
-//     this.closeModelHs.emit(JSON.stringify({ show: false }));//emits(向上弹射)事件
60
-//   }
61
-
62
-//   // 切换tab栏
63
-//   tabType: number = 1; //tab栏
64
-//   checkTab(type) {
65
-//     this.tabType = type;
66
-//   }
67
-
68
-//   // 切换标本类型下拉框
69
-//   selectStype(e){
70
-//     console.log(e);
71
-//     this.searchCriteria.specimenDesc = 0;
72
-//     this.getSpecimenDesc();
73
-//     this.getSpecimen(1);
74
-//   }
75
-
76
-//   // 切换标本类型下拉框
77
-//   selectDesc(e){
78
-//     console.log(e);
79
-//     this.getSpecimen(1);
80
-//   }
81
-
82
-//   // 分页获取数据
83
-//   getList(){
84
-//     switch(this.type){
85
-//       case 'blood':
86
-//         this.getBlood();
87
-//         break;
88
-//       case 'specimen':
89
-//           this.getSpecimen();
90
-//           break;
91
-//       case 'deptInspectionRateStatistics':
92
-//         this.getDeptInspectionRateStatistics();
93
-//         break;
94
-//       case 'deptInspectionStatistics':
95
-//         this.getDeptInspectionStatistics();
96
-//         break;
97
-//       case 'washingException':
98
-//         this.getWashingException();
99
-//         break;
100
-//     }
101
-//   }
102
-
103
-//   // 获取列表数据
104
-//   getBlood(idx?) {
105
-//     if (idx) {
106
-//       this.pageIndex = 1;
107
-//     }
108
-//     let postData = {
109
-//       "type": "blood",
110
-//       "orderId": this.orderId
111
-//     }
112
-//     this.hsLoading = true;
113
-//     this.mainService.checkData(postData).subscribe((data:any) => {
114
-//       this.hsLoading = false;
115
-//       this.bloodList = data.data ? data.data.all : [];
116
-//       this.pageSize = this.total = data.data ? data.data.all.length : 0;
117
-//     })
118
-//   }
119
-
120
-//   // 获取标本类型
121
-//   specimentTypeList: any[] = [{ id: 0, name: '全部' }];
122
-//   getSpecimenType() {
123
-//     this.mainService.getDictionary("list", "specimen_type").subscribe((data:any) => {
124
-//       let specimentTypeList = [{ id: 0, name: '全部' }];
125
-//       this.specimentTypeList = specimentTypeList.concat(data);
126
-//     })
127
-//   }
128
-
129
-//   // 获取检验项目
130
-//   specimenDescList: any[] = [{ id: 0, name: '', nameNum: '全部' }];
131
-//   id:number = 0;
132
-//   getSpecimenDesc() {
133
-//     let postData = {
134
-//       "hosId": this.hosId,
135
-//       "gdId": this.orderId,
136
-//       "stype": this.searchCriteria.stype || undefined,
137
-//     };
138
-//     this.mainService.specimenCount(postData).subscribe((data:any) => {
139
-//       data.data = data.data || [];
140
-//       let specimenDescList:any = [{ id: 0, name: '全部', nameNum: '全部' }];
141
-//       specimenDescList[0].nameNum = `全部(${data.total})`;
142
-//       this.specimenDescList = specimenDescList.concat( data.data.map(v => ({id: --this.id, name: v[0] || '', nameNum: (v[0] ? v[0].slice(0, 15) + (v[0].length >= 15 ? '...' : '') : '') + `(${v[1]})`})));
143
-//     })
144
-//   }
145
-
146
-//   // 获取标本列表
147
-//   getSpecimen(idx?) {
148
-//     if (idx) {
149
-//       this.pageIndex = 1;
150
-//     }
151
-//     let postData = {
152
-//       idx: this.pageIndex - 1,
153
-//       sum: this.pageSize,
154
-//       specimen: {
155
-//         orderBy: 'arrive_time desc',
156
-//         hosId: this.hosId,
157
-//         gdid: this.orderId,
158
-//         stype: this.searchCriteria.stype ? { id: this.searchCriteria.stype } : undefined,
159
-//         specimenDesc: this.searchCriteria.specimenDesc ? this.specimenDescList.find(v => v.id == this.searchCriteria.specimenDesc).name: undefined,
160
-//       }
161
-//     }
162
-//     this.hsLoading = true;
163
-//     this.mainService.getFetchDataList('simple/data','specimen',postData).subscribe(data => {
164
-//       this.hsLoading = false;
165
-//       this.specimenList = data.list || [];
166
-//       this.total = data.totalNum || 0;
167
-//     })
168
-//   }
169
-
170
-//   // 获取被服洗涤异常列表
171
-//   getWashingException(idx?) {
172
-//     if (idx) {
173
-//       this.pageIndex = 1;
174
-//     }
175
-//     let postData = {
176
-//       idx: this.pageIndex - 1,
177
-//       sum: this.pageSize,
178
-//       clothesException: {
179
-//         hosId: this.hosId,
180
-//         batchId: this.orderId,
181
-//       }
182
-//     }
183
-//     this.hsLoading = true;
184
-//     this.mainService.getFetchDataList('simple/data','clothesException',postData).subscribe(data => {
185
-//       this.hsLoading = false;
186
-//       this.washingExceptionList = data.list || [];
187
-//       this.total = data.totalNum || 0;
188
-//     })
189
-//   }
190
-
191
-//   // 获取科室检查率统计-详情列表
192
-//   getDeptInspectionRateStatistics(idx?) {
193
-//     if (idx) {
194
-//       this.pageIndex = 1;
195
-//     }
196
-//     let postData:any = {
197
-//       idx: this.pageIndex - 1,
198
-//       sum: this.pageSize,
199
-//       canceled: this.dataInfo.canceled ? true : undefined,
200
-//       priority: this.dataInfo.priority ? 0 : undefined,
201
-//     }
202
-//     switch(this.dataInfo.type){
203
-//       case 'total':
204
-//         postData.deptId = this.dataInfo.data.id;
205
-//         postData.hosId = this.hosId;
206
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
207
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
208
-//         break;
209
-//       case 'noCheckCount':
210
-//         postData.deptId = this.dataInfo.data.id;
211
-//         postData.hosId = this.hosId;
212
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
213
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
214
-//         postData.reportInsState = 'noCheck';
215
-//         break;
216
-//       case 'checkCount':
217
-//         postData.deptId = this.dataInfo.data.id;
218
-//         postData.hosId = this.hosId;
219
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
220
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
221
-//         postData.reportInsState = 'check';
222
-//         break;
223
-//       case 'insCount':
224
-//         postData.deptId = this.dataInfo.data.id;
225
-//         postData.hosId = this.hosId;
226
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
227
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
228
-//         postData.reportInsState = 'inspect';
229
-//         break;
230
-//     }
231
-//     this.hsLoading = true;
232
-//     this.mainService.listMsgByMain("listInspect", postData).subscribe((data: any) => {
233
-//       this.hsLoading = false;
234
-//       this.inspectionRateStatisticsList = data.list || [];
235
-//       this.total = data.totalNum || 0;
236
-//     })
237
-
238
-//   }
239
-
240
-//   // 获取科室检查统计-详情列表
241
-//   getDeptInspectionStatistics(idx?) {
242
-//     if (idx) {
243
-//       this.pageIndex = 1;
244
-//     }
245
-//     let postData:any = {
246
-//       idx: this.pageIndex - 1,
247
-//       sum: this.pageSize,
248
-//       znDeptInspect: true,
249
-//     }
250
-//     switch(this.dataInfo.type){
251
-//       case 'total':
252
-//         postData.deptId = this.dataInfo.data[10];
253
-//         postData.hosId = this.hosId;
254
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
255
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
256
-//         break;
257
-//       case 'cancel':
258
-//         postData.deptId = this.dataInfo.data[10];
259
-//         postData.hosId = this.hosId;
260
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
261
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
262
-//         postData.cancel = true;
263
-//         break;
264
-//       case 'priority':
265
-//         postData.deptId = this.dataInfo.data[10];
266
-//         postData.hosId = this.hosId;
267
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
268
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
269
-//         postData.priority = 1;
270
-//         break;
271
-//       case 'noneYY':
272
-//         postData.deptId = this.dataInfo.data[10];
273
-//         postData.hosId = this.hosId;
274
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
275
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
276
-//         postData.noneYY = true;
277
-//         break;
278
-//       case 'waitCheck':
279
-//         postData.deptId = this.dataInfo.data[10];
280
-//         postData.hosId = this.hosId;
281
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
282
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
283
-//         postData.waitCheck = true;
284
-//         break;
285
-//       case 'doCheck':
286
-//         postData.deptId = this.dataInfo.data[10];
287
-//         postData.hosId = this.hosId;
288
-//         postData.startTime = this.dataInfo.searchDto.dateRange[0] ? format(startOfDay(this.dataInfo.searchDto.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined;
289
-//         postData.endTime = this.dataInfo.searchDto.dateRange[1] ? format(endOfDay(this.dataInfo.searchDto.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined;
290
-//         postData.doCheck = true;
291
-//         break;
292
-//     }
293
-//     this.hsLoading = true;
294
-//     this.mainService.listMsgByMain("listInspect", postData).subscribe((data: any) => {
295
-//       this.hsLoading = false;
296
-//       this.inspectionRateStatisticsList = data.list || [];
297
-//       this.total = data.totalNum || 0;
298
-//     })
299
-
300
-//   }
301
-// }
1
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2
+import { format, startOfDay, endOfDay } from 'date-fns';
3
+import { MainService } from 'src/app/services/main.service';
4
+import { ToolService } from 'src/app/services/tool.service';
5
+import { NzMessageService } from 'ng-zorro-antd';
6
+@Component({
7
+  selector: 'app-incident-ser-call',
8
+  templateUrl: './incident-ser-call.component.html',
9
+  styleUrls: ['./incident-ser-call.component.less']
10
+})
11
+export class IncidentSerCallComponent implements OnInit {
12
+  // 切换科室,切换弹窗
13
+  loading = false;
14
+  messageList: any = [];// 通话记录列表
15
+  pageIndex: number = 1;//表格当前页码
16
+  pageSize: number = 10;//表格每页展示条数
17
+  total: number = 0;//表格总数据量
18
+
19
+  searchDTO: any = {};
20
+
21
+  @Input() itsmData:any;
22
+  @Output() closeModelHs = new EventEmitter<any>();//1.组件暴露一个 EventEmitter 属性,当事件发生时,子组件利用该属性 emits(向上弹射)事件
23
+
24
+  constructor(
25
+    private mainService: MainService,
26
+    private tool: ToolService,
27
+    private message: NzMessageService,
28
+  ) { }
29
+
30
+  ngOnInit() {
31
+    this.getMessageList(1);
32
+  }
33
+  // 关闭弹窗
34
+  hideModal() {
35
+    this.closeModelHs.emit({ show: false });//emits(向上弹射)事件
36
+  }
37
+
38
+  // 搜索
39
+  search() {
40
+    this.getMessageList(1);
41
+  }
42
+  // 重置
43
+  reset() {
44
+    this.searchDTO = {};
45
+    this.getMessageList(1);
46
+  }
47
+
48
+  // 回放录音
49
+  coopData:any = {};
50
+  recordingModalShow = false; //弹窗开关
51
+  maskFlag:any = false;
52
+  recordcall(data) {
53
+    this.maskFlag = this.message.loading("正在加载中..", {
54
+      nzDuration: 0,
55
+    }).messageId;
56
+    this.mainService.getCallLogPath({ path: data.path, hosId: data.hosId }).subscribe((result) => {
57
+      this.message.remove(this.maskFlag);
58
+      this.maskFlag = false;
59
+      if (result["state"] == 200) {
60
+        this.coopData = { relativePath: result["relativePath"] };
61
+        this.recordingModalShow = true;
62
+      }
63
+    });
64
+  }
65
+  // 关闭弹窗
66
+  closeRecordingModelOrder(e) {
67
+    this.recordingModalShow = JSON.parse(e).show;
68
+  }
69
+
70
+  // 分页获取数据
71
+  getList(){
72
+    this.getMessageList();
73
+  }
74
+
75
+  // 获取通话记录列表
76
+  getMessageList(idx?) {
77
+    if (idx) {
78
+      this.pageIndex = 1;
79
+    }
80
+    let postData = {
81
+      idx: this.pageIndex - 1,
82
+      sum: this.pageSize,
83
+      callLog: {
84
+        "hosIds": this.itsmData.allDuty == 1 ? undefined : (this.itsmData.checkedHos.map(v => v.id).toString() || undefined),
85
+        dTMFA: this.searchDTO.dTMFA || undefined,
86
+        dTMFB: this.searchDTO.dTMFB || undefined,
87
+        responseTime: this.searchDTO.responseTime ? format(this.searchDTO.responseTime, 'yyyy-MM-dd HH:mm:ss') : undefined,
88
+      }
89
+    }
90
+    this.loading = true;
91
+    this.mainService.getFetchDataList('simple/data','callLog',postData).subscribe(data => {
92
+      this.loading = false;
93
+      this.messageList = data.list || [];
94
+      this.total = data.totalNum;
95
+    })
96
+  }
97
+}
302 98
 
303 99
 
304 100
 

+ 22 - 0
src/app/components/incidentManagement/incident-ser-call/incident-ser-call.module.ts

@@ -0,0 +1,22 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { IncidentSerCallComponent } from './incident-ser-call.component';
5
+import { ShareModule } from 'src/app/share/share.module';
6
+import { IncidentRecordingModule } from '../incident-recording/incident-recording.module';
7
+
8
+
9
+@NgModule({
10
+  declarations: [
11
+    IncidentSerCallComponent,
12
+  ],
13
+  imports: [
14
+    CommonModule,
15
+    ShareModule,
16
+    IncidentRecordingModule,
17
+  ],
18
+  exports: [
19
+    IncidentSerCallComponent,
20
+  ]
21
+})
22
+export class IncidentSerCallModule { }

+ 5 - 18
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.html

@@ -5,7 +5,7 @@
5 5
       <div class="tabs">
6 6
         <div class="tab" *ngFor="let item of tabs" (click)="clickTbab(item)" [ngClass]="{ active: activeTabValue === item.value }">{{ item.name }}</div>
7 7
       </div>
8
-      <div class="list-template w100">
8
+      <div class="list-template w100" style="padding: 16px;">
9 9
         <div class="list-template__content">
10 10
           <div class="list-template__top" nz-row style="padding: 0;">
11 11
             <div nz-col nzXl='18' class="list-template__searchBox">
@@ -15,8 +15,8 @@
15 15
               </div>
16 16
             </div>
17 17
             <div nz-col nzXl='6' class="list-template__btns">
18
-              <button nz-button class="btn default ml8" (click)='search()'>搜索</button>
19
-              <button nz-button class="btn default ml8" (click)='reset()'>重置</button>
18
+              <button nz-button class="btn default ml8 mt0" (click)='search()'>搜索</button>
19
+              <button nz-button class="btn default ml8 mt0" (click)='reset()'>重置</button>
20 20
             </div>
21 21
           </div>
22 22
         </div>
@@ -41,7 +41,7 @@
41 41
               <td>
42 42
                 <div class="coop">
43 43
                   <span *ngIf="data.isExcute === 0" (click)="createOrder(data)">生成工单</span>
44
-                  <span *ngIf="data.isExcute === 0 || data.isExcute === 1" (click)="addModal(data.recFileName)">回访录音</span>
44
+                  <span *ngIf="data.isExcute === 0 || data.isExcute === 1" (click)="recordcall(data)">回访录音</span>
45 45
                   <span *ngIf="data.isExcute === 0" (click)="showDelModal(data, '确认不受理后,将无法转换为事件工单!', '不受理', 'notAccepted')">不受理</span>
46 46
                   <span *ngIf="data.isExcute === 1" (click)="openItsmDetails(data.incidentDTO)">查看故障单</span>
47 47
                 </div>
@@ -62,20 +62,7 @@
62 62
 </div>
63 63
 
64 64
 <!-- 回放录音模态框 -->
65
-<div class="save display_flex justify-content_flex-center align-items_center add" *ngIf="modal">
66
-  <div class="modalBody">
67
-    <div class="title">回放录音<i class="icon_transport transport-guanbi" (click)="hideAddModal()"></i>
68
-    </div>
69
-    <div class="content audio">
70
-      <audio controls style="outline: none;">
71
-        <source [src]="audioPath" type="audio/wav">
72
-      </audio>
73
-    </div>
74
-    <div class=" display_flex justify-content_flex-center">
75
-      <button class="btn cancel" nz-button nzType="default" (click)="hideAddModal()">知道了</button>
76
-    </div>
77
-  </div>
78
-</div>
65
+<app-incident-recording [path]="coopData.recFileName" *ngIf="recordingModalShow" (closeModelHs)="closeRecordingModelOrder($event)"></app-incident-recording>
79 66
 
80 67
 <!-- 操作成功/失败提示框 -->
81 68
 <app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow" [info]="promptInfo"></app-prompt-modal>

+ 1 - 174
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.less

@@ -57,7 +57,7 @@
57 57
   background: rgba(0, 0, 0, 0.4);
58 58
   z-index: 999;
59 59
   .tableWrap{
60
-    margin: 16px!important;
60
+    margin: 0 16px 16px!important;
61 61
     background: #F9FAFB;
62 62
     border-radius: 8px;
63 63
     border: 1px solid #D9D9D9;
@@ -238,176 +238,3 @@
238 238
     }
239 239
   }
240 240
 }
241
-
242
-.save {
243
-  position: fixed;
244
-  left: 0;
245
-  top: 0;
246
-  width: 100%;
247
-  height: 100%;
248
-  background: rgba(0, 0, 0, 0.4);
249
-  z-index: 999;
250
-
251
-  .modalBody {
252
-    width: 350px;
253
-    height: 220px;
254
-    background: #fff;
255
-    border-radius: 5px;
256
-    padding: 10px 20px;
257
-    color: #333;
258
-
259
-    .title {
260
-      width: 100%;
261
-      text-align: center;
262
-      font-size: 18px;
263
-      position: relative;
264
-
265
-      i {
266
-        position: absolute;
267
-        right: 0;
268
-        top: 0;
269
-        font-size: 20px;
270
-        color: #666;
271
-        cursor: pointer;
272
-        padding: 0 5px;
273
-      }
274
-    }
275
-
276
-    .content {
277
-      width: 310px;
278
-      height: 117px;
279
-      background: #f9fafb;
280
-      border: 1px solid #e5e9ed;
281
-      border-radius: 5px;
282
-      overflow: hidden;
283
-      margin-top: 12px;
284
-
285
-      & > div {
286
-        text-align: center;
287
-        margin: 0;
288
-
289
-        &.icon {
290
-          margin-top: 17px;
291
-
292
-          i {
293
-            color: #34b349;
294
-            font-size: 30px !important;
295
-
296
-            &.transport-wenhao {
297
-              color: #f5a523;
298
-            }
299
-
300
-            &.transport-shibai {
301
-              color: #ff3a52;
302
-            }
303
-          }
304
-        }
305
-
306
-        &.defeat {
307
-          color: #333;
308
-          font-size: 18px;
309
-        }
310
-
311
-        &:nth-child(3) {
312
-          font-size: 14px;
313
-          color: #666;
314
-        }
315
-      }
316
-      .roundRobinTips {
317
-        font-size: 12px;
318
-      }
319
-    }
320
-
321
-    button {
322
-      margin-top: 10px;
323
-
324
-      &.btn {
325
-        margin-left: 8px;
326
-      }
327
-    }
328
-  }
329
-
330
-  // 新增
331
-  &.add {
332
-    .modalBody {
333
-      width: 480px;
334
-      height: auto;
335
-
336
-      .content {
337
-        width: 100%;
338
-        height: auto;
339
-        padding: 18px 14px 0 14px;
340
-        max-height: 497px;
341
-        overflow-y: auto;
342
-        &.audio {
343
-          padding: 0;
344
-          height: 126px;
345
-          display: flex;
346
-          justify-content: center;
347
-          align-items: center;
348
-        }
349
-
350
-        .addForm {
351
-          .ant-form-item {
352
-            margin-bottom: 15px;
353
-
354
-            .ant-form-item-label {
355
-              line-height: 14px;
356
-              text-align: left;
357
-            }
358
-
359
-            .desc {
360
-              margin-top: 5px;
361
-            }
362
-          }
363
-
364
-          .datesControl {
365
-            margin-top: -16px;
366
-
367
-            .ant-form-item-label {
368
-              line-height: 40px;
369
-            }
370
-          }
371
-
372
-          .timer {
373
-            .ant-form-item-label {
374
-              width: 100%;
375
-              text-align: left;
376
-            }
377
-
378
-            .numInp {
379
-              margin-right: 5px;
380
-            }
381
-
382
-            .line {
383
-              margin-right: 5px;
384
-            }
385
-          }
386
-
387
-          .timer2 {
388
-            .ant-form-item-label {
389
-              line-height: 20px;
390
-            }
391
-          }
392
-        }
393
-
394
-        .editForm {
395
-          .ant-form-item {
396
-            margin-bottom: 15px;
397
-
398
-            .ant-form-item-label {
399
-              line-height: 14px;
400
-              text-align: left;
401
-            }
402
-          }
403
-        }
404
-      }
405
-
406
-      button {
407
-        &:nth-child(1) {
408
-          margin-right: 20px;
409
-        }
410
-      }
411
-    }
412
-  }
413
-}

+ 9 - 21
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.ts

@@ -2,7 +2,6 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2 2
 import { format, startOfDay, endOfDay } from 'date-fns';
3 3
 import { MainService } from 'src/app/services/main.service';
4 4
 import { ToolService } from 'src/app/services/tool.service';
5
-import cloneDeep from 'lodash-es/cloneDeep'
6 5
 @Component({
7 6
   selector: 'app-incident-ser-message',
8 7
   templateUrl: './incident-ser-message.component.html',
@@ -10,19 +9,11 @@ import cloneDeep from 'lodash-es/cloneDeep'
10 9
 })
11 10
 export class IncidentSerMessageComponent implements OnInit {
12 11
   // 切换科室,切换弹窗
13
-  hosId;
14 12
   loading = false;
15
-  bloodList: any = [];// 血制品列表
16
-  washingExceptionList: any = [];// 被服洗涤异常列表
17
-  messageList: any = [];// 标本列表
18
-  inspectionRateStatisticsList: any = [];// 科室检查率统计列表
13
+  messageList: any = [];// 留言列表
19 14
   pageIndex: number = 1;//表格当前页码
20 15
   pageSize: number = 10;//表格每页展示条数
21 16
   total: number = 0;//表格总数据量
22
-  searchCriteria:any = {
23
-    stype: 0,
24
-    specimenDesc: 0,
25
-  }
26 17
 
27 18
   tabs:any[] = [
28 19
     {id: 1, name: '全部', value: '', num: ''},
@@ -39,7 +30,6 @@ export class IncidentSerMessageComponent implements OnInit {
39 30
   constructor(private mainService: MainService, private tool: ToolService) { }
40 31
 
41 32
   ngOnInit() {
42
-    this.hosId = this.tool.getCurrentHospital().id;
43 33
     this.clickTbab(this.tabs[1]);
44 34
   }
45 35
   // 关闭弹窗
@@ -116,17 +106,15 @@ export class IncidentSerMessageComponent implements OnInit {
116 106
     this.closeModelHs.emit({ show: false, data: data });
117 107
   }
118 108
 
119
-  // 播放录音弹框
120
-  audioPath = ""; //录音文件地址
121
-  addModal(recFileName) {
122
-    this.modal = true;
123
-    this.audioPath = location.origin + recFileName;
124
-    console.log(this.audioPath)
109
+  // 回放录音
110
+  recordingModalShow = false; //弹窗开关
111
+  recordcall(data) {
112
+    this.coopData = data;
113
+    this.recordingModalShow = true;
125 114
   }
126
-  //关闭播放录音弹框
127
-  modal: boolean = false; //模态框
128
-  hideAddModal() {
129
-    this.modal = false;
115
+  // 关闭弹窗
116
+  closeRecordingModelOrder(e) {
117
+    this.recordingModalShow = JSON.parse(e).show;
130 118
   }
131 119
 
132 120
   // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)

+ 2 - 0
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.module.ts

@@ -4,6 +4,7 @@ import { CommonModule } from '@angular/common';
4 4
 import { IncidentSerMessageComponent } from './incident-ser-message.component';
5 5
 import { ShareModule } from 'src/app/share/share.module';
6 6
 import { IncidentDetailModule } from '../incident-detail/incident-detail.module';
7
+import { IncidentRecordingModule } from '../incident-recording/incident-recording.module';
7 8
 
8 9
 
9 10
 @NgModule({
@@ -14,6 +15,7 @@ import { IncidentDetailModule } from '../incident-detail/incident-detail.module'
14 15
     CommonModule,
15 16
     ShareModule,
16 17
     IncidentDetailModule,
18
+    IncidentRecordingModule,
17 19
   ],
18 20
   exports: [
19 21
     IncidentSerMessageComponent,

+ 0 - 2
src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.component.ts

@@ -14,7 +14,6 @@ export class IncidentSerVisitComponent implements OnInit {
14 14
   })
15 15
   osComponentRef1: OverlayScrollbarsComponent;
16 16
   // 切换科室,切换弹窗
17
-  hosId;
18 17
   loading = false;
19 18
   visitList: any = [];// 列表
20 19
   pageIndex: number = 1;//表格当前页码
@@ -27,7 +26,6 @@ export class IncidentSerVisitComponent implements OnInit {
27 26
   constructor(private mainService: MainService, private tool: ToolService) { }
28 27
 
29 28
   ngOnInit() {
30
-    this.hosId = this.tool.getCurrentHospital().id;
31 29
     this.getVisitList();
32 30
   }
33 31
   // 关闭弹窗

+ 4 - 1
src/app/views/fuwutai/fuwutai.component.html

@@ -1063,7 +1063,7 @@
1063 1063
           <div class="others">
1064 1064
             <div class="item" (click)="visitOrder()">回访<span *ngIf="visitNum !== undefined">-{{visitNum}}</span></div>
1065 1065
             <div class="item" (click)="messageOrder()">留言<span *ngIf="messageNum !== undefined">-{{messageNum}}</span></div>
1066
-            <div class="item itemLink">通话</div>
1066
+            <div class="item itemLink" (click)="callOrder()">通话</div>
1067 1067
           </div>
1068 1068
         </div>
1069 1069
       </div>
@@ -2436,3 +2436,6 @@
2436 2436
 
2437 2437
 <!-- 留言列表 -->
2438 2438
 <app-incident-ser-message [itsmData]="itsmData" *ngIf="messageShow" (closeModelHs)="closeMessage($event)"></app-incident-ser-message>
2439
+
2440
+<!-- 通话列表 -->
2441
+<app-incident-ser-call [itsmData]="itsmData" *ngIf="callShow" (closeModelHs)="closeCall($event)"></app-incident-ser-call>

+ 3 - 0
src/app/views/fuwutai/fuwutai.component.less

@@ -2035,6 +2035,9 @@
2035 2035
                     &.flex7{
2036 2036
                       flex: 7;
2037 2037
                     }
2038
+                    .ant-input-clear-icon{
2039
+                      align-self: center;
2040
+                    }
2038 2041
                     .name{
2039 2042
                       flex-shrink: 0;
2040 2043
                       width: 6em;

+ 11 - 17
src/app/views/fuwutai/fuwutai.component.ts

@@ -1435,23 +1435,7 @@ export class FuwutaiComponent implements OnInit {
1435 1435
     }
1436 1436
 
1437 1437
     console.log(postData);
1438
-    this.mainService.orderList(postData).pipe(map((v:any) => {
1439
-      if(Array.isArray(v.data)){
1440
-        v.data.map(vv => {
1441
-          if(vv.type === 'mdv2' && vv.data.department){
1442
-            vv.data.department = {
1443
-              id: vv.data.department.id,
1444
-              dept: vv.data.department.dept,
1445
-              manyPhone: vv.data.department.manyPhone,
1446
-            }
1447
-          }
1448
-          return vv;
1449
-        })
1450
-      }else{
1451
-        v = [];
1452
-      }
1453
-      return v;
1454
-    })).subscribe((data:any) => {
1438
+    this.mainService.orderList(postData).subscribe((data:any) => {
1455 1439
         if (stateId == 1) {
1456 1440
           // 未分派
1457 1441
           let unassignedList = data.data || [];
@@ -4299,4 +4283,14 @@ export class FuwutaiComponent implements OnInit {
4299 4283
         });
4300 4284
     }
4301 4285
   }
4286
+
4287
+  // 通话记录列表
4288
+  callShow = false; //弹窗开关
4289
+  callOrder() {
4290
+    this.callShow = true;
4291
+  }
4292
+  // 关闭弹窗
4293
+  closeCall(e) {
4294
+    this.callShow = e.show;
4295
+  }
4302 4296
 }

+ 2 - 0
src/app/views/fuwutai/fuwutai.module.ts

@@ -15,6 +15,7 @@ import { IncidentSubstitutionModule } from 'src/app/components/incidentManagemen
15 15
 import { IncidentHandleModule } from 'src/app/components/incidentManagement/incident-handle/incident-handle.module';
16 16
 import { IncidentSerVisitModule } from 'src/app/components/incidentManagement/incident-ser-visit/incident-ser-visit.module';
17 17
 import { IncidentSerMessageModule } from 'src/app/components/incidentManagement/incident-ser-message/incident-ser-message.module';
18
+import { IncidentSerCallModule } from 'src/app/components/incidentManagement/incident-ser-call/incident-ser-call.module';
18 19
 import { VirtualScrollerModule } from 'ngx-virtual-scroller';
19 20
 
20 21
 
@@ -36,6 +37,7 @@ import { VirtualScrollerModule } from 'ngx-virtual-scroller';
36 37
     IncidentHandleModule,
37 38
     IncidentSerVisitModule,
38 39
     IncidentSerMessageModule,
40
+    IncidentSerCallModule,
39 41
     VirtualScrollerModule,
40 42
   ]
41 43
 })

+ 4 - 1
src/common.less

@@ -16,6 +16,9 @@
16 16
 .mt8 {
17 17
   margin-top: 8px !important;
18 18
 }
19
+.mt0 {
20
+  margin-top: 0 !important;
21
+}
19 22
 .ml16 {
20 23
   margin-left: 16px !important;
21 24
 }
@@ -263,7 +266,7 @@
263 266
 // list模板样式 start
264 267
 .list-template {
265 268
   padding: 8px;
266
-  .ant-calendar-picker {
269
+  nz-range-picker {
267 270
     width: 373px!important;
268 271
   }
269 272
   .list-template__content {