Browse Source

调度台留言列表

seimin 1 week ago
parent
commit
ff9f7b999b

+ 1 - 1
proxy.conf.json

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

+ 22 - 2
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.html

@@ -41,8 +41,9 @@
41 41
               <td>
42 42
                 <div class="coop">
43 43
                   <span *ngIf="data.isExcute === 0" (click)="createOrder(data)">生成工单</span>
44
-                  <span (click)="visit(data)">回访录音</span>
44
+                  <span *ngIf="data.isExcute === 0 || data.isExcute === 1" (click)="addModal(data.recFileName)">回访录音</span>
45 45
                   <span *ngIf="data.isExcute === 0" (click)="showDelModal(data, '确认不受理后,将无法转换为事件工单!', '不受理', 'notAccepted')">不受理</span>
46
+                  <span *ngIf="data.isExcute === 1" (click)="openItsmDetails(data.incidentDTO)">查看故障单</span>
46 47
                 </div>
47 48
               </td>
48 49
             </tr>
@@ -60,7 +61,26 @@
60 61
   </div>
61 62
 </div>
62 63
 
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>
79
+
63 80
 <!-- 操作成功/失败提示框 -->
64 81
 <app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow" [info]="promptInfo"></app-prompt-modal>
65 82
 
66
-<app-dialog-delete [delModal]="delModal" (hideDelModalEvent)="hideDelModal()" [btnLoading]="btnLoading" (confirmDelEvent)="confirmDelFn()" [content]="tipsMsg1"></app-dialog-delete>
83
+<app-dialog-delete [delModal]="delModal" (hideDelModalEvent)="hideDelModal()" [btnLoading]="btnLoading" (confirmDelEvent)="confirmDelFn()" [content]="tipsMsg1"></app-dialog-delete>
84
+
85
+<!-- 详情 -->
86
+<app-incident-detail [id]="coopData.id" *ngIf="detailModalShow" (closeModelHs)="closeDetailModelOrder($event)" (confirmModelHs)="confirmDetailModelOrder($event)"></app-incident-detail>

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

@@ -238,3 +238,176 @@
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
+}

+ 29 - 4
src/app/components/incidentManagement/incident-ser-message/incident-ser-message.component.ts

@@ -116,6 +116,19 @@ export class IncidentSerMessageComponent implements OnInit {
116 116
     this.closeModelHs.emit({ show: false, data: data });
117 117
   }
118 118
 
119
+  // 播放录音弹框
120
+  audioPath = ""; //录音文件地址
121
+  addModal(recFileName) {
122
+    this.modal = true;
123
+    this.audioPath = location.origin + recFileName;
124
+    console.log(this.audioPath)
125
+  }
126
+  //关闭播放录音弹框
127
+  modal: boolean = false; //模态框
128
+  hideAddModal() {
129
+    this.modal = false;
130
+  }
131
+
119 132
   // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
120 133
   promptContent: string; //操作提示框提示信息
121 134
   ifSuccess: boolean; //操作成功/失败
@@ -149,10 +162,6 @@ export class IncidentSerMessageComponent implements OnInit {
149 162
         isExcute: this.activeTabValue === '' ? undefined : this.activeTabValue,
150 163
         startTime: this.searchDTO.dateRange ? format(startOfDay(this.searchDTO.dateRange[0]), 'yyyy-MM-dd HH:mm:ss') : undefined,
151 164
         endTime: this.searchDTO.dateRange ? format(endOfDay(this.searchDTO.dateRange[1]), 'yyyy-MM-dd HH:mm:ss') : undefined,
152
-        // orderBy: 'arrive_time desc',
153
-        // hosId: this.hosId,
154
-        // stype: this.searchCriteria.stype ? { id: this.searchCriteria.stype } : undefined,
155
-        // specimenDesc: this.searchCriteria.specimenDesc ? this.specimenDescList.find(v => v.id == this.searchCriteria.specimenDesc).name: undefined,
156 165
       }
157 166
     }
158 167
     this.loading = true;
@@ -162,6 +171,22 @@ export class IncidentSerMessageComponent implements OnInit {
162 171
       this.total = data.totalNum;
163 172
     })
164 173
   }
174
+
175
+  // 查看ITSM工单详情
176
+  detailModalShow = false; //弹窗开关
177
+  openItsmDetails(data) {
178
+    this.coopData = data;
179
+    this.detailModalShow = true;
180
+  }
181
+  // 关闭弹窗
182
+  closeDetailModelOrder(e) {
183
+    this.detailModalShow = JSON.parse(e).show;
184
+  }
185
+  // 弹窗确定
186
+  confirmDetailModelOrder(e){
187
+    console.log(e);
188
+    this.detailModalShow = false;
189
+  }
165 190
 }
166 191
 
167 192
 

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

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

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

@@ -817,7 +817,7 @@
817 817
               <div nz-row>
818 818
                 <div nz-col nzSpan="">
819 819
                   <nz-input-group nzAddOnAfter="秒">
820
-                    <nz-input-number class="w100" [(ngModel)]="workerInfoTime" [nzMin]="10" [nzStep]="1" placeholder="请输入配送人员刷新时间"></nz-input-number>
820
+                    <nz-input-number class="w100" [(ngModel)]="workerInfoTime" [nzMin]="60" [nzStep]="1" placeholder="请输入配送人员刷新时间"></nz-input-number>
821 821
                   </nz-input-group>
822 822
                 </div>
823 823
               </div>
@@ -829,7 +829,7 @@
829 829
               <div nz-row>
830 830
                 <div nz-col nzSpan="">
831 831
                   <nz-input-group nzAddOnAfter="秒">
832
-                    <nz-input-number class="w100" [(ngModel)]="orderInfoTime" [nzMin]="10" [nzStep]="1" placeholder="请输入工单刷新时间"></nz-input-number>
832
+                    <nz-input-number class="w100" [(ngModel)]="orderInfoTime" [nzMin]="60" [nzStep]="1" placeholder="请输入工单刷新时间"></nz-input-number>
833 833
                   </nz-input-group>
834 834
                 </div>
835 835
               </div>
@@ -1213,7 +1213,7 @@
1213 1213
           <div class="newTopItem">
1214 1214
             <span class="grayFont">申请人:</span>
1215 1215
             <ng-container *ngIf="buildType === '报修转事件'">{{incidentMsg.requesterName}}</ng-container>
1216
-            <ng-container *ngIf="!buildType">
1216
+            <ng-container *ngIf="buildType !== '报修转事件'">
1217 1217
               <nz-select style="width: 160px" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch (nzOnSearch)="changeCommonInp('requester', $event)" nzPlaceHolder="请选择申请人" [(ngModel)]="incidentModel.requester" (ngModelChange)="changeApplyRequester($event)" nzAllowClear>
1218 1218
                 <ng-container *ngFor="let option of applicationRequesterList">
1219 1219
                   <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
@@ -2277,7 +2277,7 @@
2277 2277
           </button>
2278 2278
         </ng-container>
2279 2279
         <ng-container *ngIf="currentTabIndex === '99999'">
2280
-          <label nz-checkbox [(ngModel)]="isBuildOrderAgagin" *ngIf="buildType !== '报修转事件'">是否连续建单</label>
2280
+          <label nz-checkbox [(ngModel)]="isBuildOrderAgagin" *ngIf="buildType !== '报修转事件' && buildType !== '留言转事件'">是否连续建单</label>
2281 2281
           <button nz-button class="btn" nzType="primary" (click)="directOrder()">
2282 2282
             直接解决
2283 2283
           </button>

+ 41 - 22
src/app/views/fuwutai/fuwutai.component.ts

@@ -737,8 +737,8 @@ export class FuwutaiComponent implements OnInit {
737 737
   patientCareCol: number = 6; //顶部工单列数(4列-8人,7列-14人,6列-单排 )
738 738
   hurseInfoHiding = '1'; //护工信息隐藏
739 739
   txtLabelCol: number = 1; //工单信息列数
740
-  workerInfoTime: number = 30; //配送人员刷新时间
741
-  orderInfoTime: number = 30; //工单刷新时间
740
+  workerInfoTime: number = 60; //配送人员刷新时间
741
+  orderInfoTime: number = 60; //工单刷新时间
742 742
   audioNotDispatched: boolean = true; //是否开启定时播报未派出工单提示音
743 743
   cotHeight: number; //工单初始化高度
744 744
   unassignedList: any = []; //未分派数据
@@ -1334,7 +1334,9 @@ export class FuwutaiComponent implements OnInit {
1334 1334
     let postData: any = {
1335 1335
       idx: 0,
1336 1336
       sum: 1,
1337
-      hjzxRecord: {},
1337
+      hjzxRecord: {
1338
+        isExcute: 0,
1339
+      },
1338 1340
     };
1339 1341
 
1340 1342
     this.mainService
@@ -2265,6 +2267,7 @@ export class FuwutaiComponent implements OnInit {
2265 2267
         "acceptUser": { id: this.tool.getCurrentUserId() },
2266 2268
         "callID": this.incidentModel.callID || undefined,
2267 2269
         "incomingPhone": this.incidentModel.incomingPhone || undefined,
2270
+        "hjzxRecordId": this.incidentModel.hjzxRecordId || undefined,
2268 2271
       },
2269 2272
     };
2270 2273
 
@@ -2272,7 +2275,7 @@ export class FuwutaiComponent implements OnInit {
2272 2275
       if(this.buildType === '报修转事件'){
2273 2276
         postData.incident.fromWx = true;
2274 2277
       }
2275
-      Object.assign(postData.incident, this.editOrder);
2278
+      postData.incident = Object.assign({}, this.editOrder, postData.incident);
2276 2279
     }
2277 2280
 
2278 2281
     this.mainService
@@ -2923,13 +2926,14 @@ export class FuwutaiComponent implements OnInit {
2923 2926
         "incomingPhone": this.incidentModel.incomingPhone || undefined,
2924 2927
         "candidateGroups": this.incidentModel.group || undefined,
2925 2928
         "assignee": this.incidentModel.user || undefined,
2929
+        "hjzxRecordId": this.incidentModel.hjzxRecordId || undefined,
2926 2930
       }
2927 2931
     };
2928 2932
     if(this.buildType){
2929 2933
       if(this.buildType === '报修转事件'){
2930 2934
         postData.incident.fromWx = true;
2931 2935
       }
2932
-      Object.assign(postData.incident, this.editOrder);
2936
+      postData.incident = Object.assign({}, this.editOrder, postData.incident);
2933 2937
     }
2934 2938
     console.log(postData);
2935 2939
     // return;
@@ -2992,13 +2996,14 @@ export class FuwutaiComponent implements OnInit {
2992 2996
         "incomingPhone": this.incidentModel.incomingPhone || undefined,
2993 2997
         "candidateGroups": this.incidentModel.group || undefined,
2994 2998
         "assignee": this.incidentModel.user || undefined,
2999
+        "hjzxRecordId": this.incidentModel.hjzxRecordId || undefined,
2995 3000
       }
2996 3001
     };
2997 3002
     if(this.buildType){
2998 3003
       if(this.buildType === '报修转事件'){
2999 3004
         postData.incident.fromWx = true;
3000 3005
       }
3001
-      Object.assign(postData.incident, this.editOrder);
3006
+      postData.incident = Object.assign({}, this.editOrder, postData.incident);
3002 3007
     }
3003 3008
     console.log(postData);
3004 3009
     // return;
@@ -4249,33 +4254,47 @@ export class FuwutaiComponent implements OnInit {
4249 4254
           phone: e.data.ano,
4250 4255
         },
4251 4256
       };
4257
+      this.maskFlag = this.msg.loading("正在加载中..", {
4258
+        nzDuration: 0,
4259
+      }).messageId;
4260
+
4252 4261
       this.mainService
4253 4262
         .getFetchDataList("data", "department", postData)
4254 4263
         .subscribe((result) => {
4264
+          this.msg.remove(this.maskFlag);
4265
+          this.maskFlag = false;
4255 4266
           if (result.status == 200) {
4256
-            console.log(result);
4257
-            if (result.list.length > 0) {
4258
-              //绑定了科室
4259
-              if (!this.newOrderShow && !this.newOrderShowOpen) {
4260
-                let incidentModel:any = {department: result.list[0]};
4261
-                let incidentMsg:any = {};
4267
+            this.mainService.getDictionary("list", "incident_source").subscribe((res) => {
4268
+              let sourceList = res || [];
4269
+              let incidentModel:any = {
4270
+                hjzxRecordId: e.data.id,
4271
+                incomingPhone: e.data.ano,
4272
+              };
4273
+              let incidentMsg:any = {};
4274
+              let source = sourceList.find(v => v.value === 'record');
4275
+              source && (incidentModel.source = source.id);
4276
+              if (result.list.length > 0) {
4277
+                //绑定了科室
4278
+                incidentModel.department = result.list[0];
4279
+                incidentModel.department && incidentModel.department.hospital && (incidentModel.hosId = incidentModel.department.hospital.parent ? incidentModel.department.hospital.parent.id : incidentModel.department.hospital.id);
4280
+                incidentModel.department && incidentModel.department.building && (incidentModel.area = incidentModel.department.building.id);
4281
+                incidentModel.department && incidentModel.department.floor && (incidentModel.place = incidentModel.department.floor.id);
4282
+                incidentModel.department && incidentModel.department.address && (incidentModel.houseNumber = incidentModel.department.address);
4262 4283
                 incidentModel.department && (incidentMsg.deptManyPhone = incidentModel.department.manyPhone);
4263 4284
                 incidentModel.department && (incidentMsg.deptName = incidentModel.department.dept);
4285
+
4264 4286
                 incidentModel.department && (incidentModel.department = incidentModel.department.id);
4265
-                // incidentModel.source && (incidentModel.source = incidentModel.source.id);
4266
-                // incidentModel.area && (incidentModel.area = incidentModel.area.id);
4267
-                // incidentModel.place && (incidentModel.place = incidentModel.place.id);
4287
+                this.incidentModel = incidentModel;
4288
+                console.log('this.incidentModel:', this.incidentModel)
4289
+                this.incidentMsg = incidentMsg;
4290
+                this.showNewOrder('', '', true, '留言转事件');
4291
+              } else {
4292
+                //没绑定科室
4268 4293
                 this.incidentModel = incidentModel;
4269 4294
                 this.incidentMsg = incidentMsg;
4270
-                console.log('this.applicationDeptList:', this.applicationDeptList)
4271
-                console.log('incidentModel:', incidentModel)
4272 4295
                 this.showNewOrder('', '', true, '留言转事件');
4273 4296
               }
4274
-            } else {
4275
-              //没绑定科室
4276
-              console.log(this.newOrderShow);
4277
-              this.showNewOrder('', '', true, '留言转事件');
4278
-            }
4297
+            });
4279 4298
           }
4280 4299
         });
4281 4300
     }