Bläddra i källkod

Merge branch 'master' into develop

seimin 4 månader sedan
förälder
incheckning
3e39f4e7af
27 ändrade filer med 5846 tillägg och 57 borttagningar
  1. 10 0
      src/app/app-routing.module.ts
  2. 2 2
      src/app/services/main.service.ts
  3. 52 1
      src/app/share/pathology-add/pathology-add.component.html
  4. 32 19
      src/app/share/pathology-add/pathology-add.component.ts
  5. 51 1
      src/app/share/pathology-detail/pathology-detail.component.html
  6. 23 1
      src/app/views/hushijiandan/hushijiandan.component.html
  7. 117 11
      src/app/views/hushijiandan/hushijiandan.component.ts
  8. 2 0
      src/app/views/login/login.component.ts
  9. 1 0
      src/app/views/main/main.component.html
  10. 9 0
      src/app/views/main/main.component.ts
  11. 17 0
      src/app/views/pathology-check/pathology-check-routing.module.ts
  12. 186 0
      src/app/views/pathology-check/pathology-check.component.html
  13. 1338 0
      src/app/views/pathology-check/pathology-check.component.less
  14. 718 0
      src/app/views/pathology-check/pathology-check.component.ts
  15. 17 0
      src/app/views/pathology-check/pathology-check.module.ts
  16. 17 0
      src/app/views/pathology-communication-book/pathology-communication-book-routing.module.ts
  17. 456 0
      src/app/views/pathology-communication-book/pathology-communication-book.component.html
  18. 1719 0
      src/app/views/pathology-communication-book/pathology-communication-book.component.less
  19. 715 0
      src/app/views/pathology-communication-book/pathology-communication-book.component.ts
  20. 18 0
      src/app/views/pathology-communication-book/pathology-communication-book.module.ts
  21. 47 5
      src/app/views/pathology/pathology.component.html
  22. 227 1
      src/app/views/pathology/pathology.component.less
  23. 23 7
      src/app/views/pathology/pathology.component.ts
  24. 1 1
      src/app/views/pathologyScan/pathologyScan.component.ts
  25. 19 5
      src/app/views/specimen-room-view/specimen-room-view.component.html
  26. 5 1
      src/app/views/specimen-room-view/specimen-room-view.component.less
  27. 24 2
      src/app/views/specimen-room-view/specimen-room-view.component.ts

+ 10 - 0
src/app/app-routing.module.ts

@@ -101,6 +101,16 @@ const routes: Routes = [
101 101
 		path: 'pathologySample',
102 102
 		loadChildren: () => import('./views/pathology-sample/pathology-sample.module').then(m => m.PathologySampleModule),
103 103
 	},
104
+	// 病理交接本
105
+	{
106
+		path: 'pathologyCommunicationBook',
107
+		loadChildren: () => import('./views/pathology-communication-book/pathology-communication-book.module').then(m => m.PathologyCommunicationBookModule),
108
+	},
109
+	// 交接本核对页
110
+	{
111
+		path: 'pathologyCheck',
112
+		loadChildren: () => import('./views/pathology-check/pathology-check.module').then(m => m.PathologyCheckModule),
113
+	},
104 114
   // 全局业务查看
105 115
   {
106 116
     path: 'disinfectionSupply',

+ 2 - 2
src/app/services/main.service.ts

@@ -966,8 +966,8 @@ export class MainService {
966 966
 	}
967 967
 
968 968
 	// 标本间获取标本接收信息
969
-	getSpecimenInfo(batchNo,deptId) {
970
-	  return this.http.post(host.host + `/pathology/getInfo/${batchNo}/${deptId}`, {}, {
969
+	getSpecimenInfo(batchNo,deptId,data) {
970
+	  return this.http.post(host.host + `/pathology/getInfo/${batchNo}/${deptId}`, data, {
971 971
 	    headers: this.headers,
972 972
 	  });
973 973
 	}

+ 52 - 1
src/app/share/pathology-add/pathology-add.component.html

@@ -287,7 +287,7 @@
287 287
   <!-- 打印 -->
288 288
   <div id="report" style="display: none;">
289 289
 		<div class="monad">
290
-			<div *ngIf="printData && printData.specimenList && printData.specimenList.length" style="border: 1px solid #AAAAAA;
290
+<!-- 			<div *ngIf="printData && printData.specimenList && printData.specimenList.length" style="border: 1px solid #AAAAAA;
291 291
 				border-radius: 5px;font-size: 12px;">
292 292
 				 <div *ngIf="pathologyBarCode==1" style="display: flex;align-items: center;flex-wrap: nowrap;height: 80px;padding: 0 1px;">
293 293
 					 <div style="width: 60%;height: 70px;text-align: center;">
@@ -388,6 +388,57 @@
388 388
 					 </div>
389 389
 				 </div>
390 390
 				</div>
391
+			</div> -->
392
+			
393
+			<!-- 12.11新版打印样式 -->
394
+			<div style="font-size: 12px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>0">
395
+				<div *ngFor="let data of printData.specimenList; let index=index;">
396
+				 <div>
397
+					 <div style="display: flex;align-items: center;flex-wrap: nowrap;height: 70px;padding: 0 1px;">
398
+						 <div style="width: 60%;height: 70px;text-align: center;">
399
+							 <img style="max-width: 90%;height: 80%;" [src]="data.barCode" alt="">
400
+							 <div>标本号:{{data.specimenCode}}</div>
401
+						 </div>
402
+						 <div style="width: 40%;height: 100%;text-align: center;display: flex;align-items: center;">
403
+							 <img style="max-width: 100%;max-height: 100%;" [src]="tool.logoUrl" alt="">
404
+						 </div>
405
+					 </div>
406
+					 <div style="display: flex;justify-content: space-between;">
407
+						 <div style="width: 70%;margin-right:15px;">
408
+						 	<div style="display: flex; justify-content: space-between; margin-top:11px;">
409
+								<div>患者: {{data.patientName}}</div>
410
+								<div>性别: {{data.patientGender}}</div>
411
+							</div>
412
+							<div style="margin-top:11px;">
413
+								<div>住院号: {{data.residenceNo}}</div>
414
+							</div>
415
+							<div style="margin-top:11px;">
416
+								<div>科室: {{data.patientDept}}</div>
417
+							</div>
418
+							<div style="margin-top:11px;">
419
+								<div>日期: {{data.inVitroTime|date:'yyyy-MM-dd'}}</div>
420
+							</div>
421
+							<div style="margin-top:11px;">
422
+								<div style="width: 100%;height: 32px;overflow: hidden;">部位: {{data.partSource}}{{data.organ}}{{data.specimenName}}</div>
423
+							</div>
424
+						 </div>
425
+						 <div style="width: 30%;">
426
+							<div style="margin-top:11px;">年龄: {{data.patientAge}}岁</div>
427
+							<div style="margin-top:11px;">床号: {{data.patientBedNum}}床</div>
428
+							<div style="margin-top:11px;" *ngIf="operation == 'addPrint'">标本数: {{index+1}}/{{printData.specimenNum}}</div>
429
+							<div style="margin-top:11px;" *ngIf="operation != 'addPrint'">标本数: {{index+1}}/{{printData.specimenList.length}}</div>
430
+							<div style="width: 100%;height: 65px;display: flex;margin-top: 5px;">
431
+							 <div style="height: 55px;width: 55px;">
432
+								 <img style="max-width: 100%;max-height: 100%;position: relative;left: -2px;" [src]="printData.applyBarCode" alt="">
433
+								 <div style="position: relative;left: -18px;">{{printData.applyCode}}</div>
434
+							 </div>
435
+							 <div style="width: 12px;position: relative; top: 5px;">申请单</div>
436
+							</div>
437
+						 </div>
438
+					 </div>
439
+				 </div>
440
+				 <div style="height: 26px;"></div>
441
+				</div>
391 442
 			</div>
392 443
 		</div>
393 444
   </div>

+ 32 - 19
src/app/share/pathology-add/pathology-add.component.ts

@@ -279,23 +279,30 @@ export class PathologyAddComponent implements OnInit {
279 279
 			this.mainService.getFetchDataList("simple/data", "dictionaryTree", postData).subscribe((res) => {
280 280
 				this.specimenNameList = res.list;
281 281
 				if(type=='edit'){
282
+					this.validateSpecimenForm = this.fb.group({
283
+					  remark: [null, []],
284
+						specimenName: [null, [Validators.required]]
285
+					});
282 286
 					if(item.sample){
283
-						this.validateSpecimenForm = this.fb.group({
284
-						  remark: [null, []],
285
-							specimenName: [null, [Validators.required]]
286
-						});
287 287
 						setTimeout(_=>{
288 288
 							let index4 = this.specimenNameList.findIndex(i=>i.id==item.sample.id)
289 289
 							this.specimenNameIndex = index4
290 290
 							this.specimenNameName = item.sample.name
291 291
 							this.specimenNameId = Number(item.sample.id);
292 292
 							this.validateSpecimenForm.controls.specimenName.setValue(item.specimenName);
293
-						},100)
293
+							this.validateSpecimenForm.controls.remark.setValue(item.remark);
294
+							this.specimenModal = true
295
+						},50)
296
+					}else{
297
+						setTimeout(_=>{
298
+							this.specimenNameIndex = null
299
+							this.specimenNameName = ''
300
+							this.specimenNameId = null
301
+							this.validateSpecimenForm.controls.specimenName.setValue(item.specimenName);
302
+							this.validateSpecimenForm.controls.remark.setValue(item.remark);
303
+							this.specimenModal = true
304
+						},50)
294 305
 					}
295
-					setTimeout(_=>{
296
-						this.validateSpecimenForm.controls.remark.setValue(item.remark);
297
-						this.specimenModal = true
298
-					},50)
299 306
 				}
300 307
 			});
301 308
 		}else{
@@ -307,27 +314,33 @@ export class PathologyAddComponent implements OnInit {
307 314
 			  .subscribe((data) => {
308 315
 			    this.specimenNameList = data.list;
309 316
 					if(type=='edit'){
317
+						this.validateSpecimenForm = this.fb.group({
318
+						  remark: [null, []],
319
+							specimenName: [null, [Validators.required]]
320
+						});
310 321
 						if(item.sample){
311
-							this.validateSpecimenForm = this.fb.group({
312
-							  remark: [null, []],
313
-								specimenName: [null, [Validators.required]]
314
-							});
315 322
 							setTimeout(_=>{
316 323
 								let index4 = this.specimenNameList.findIndex(i=>i.id==item.sample.id)
317 324
 								this.specimenNameIndex = index4
318 325
 								this.specimenNameName = item.sample.name
319 326
 								this.specimenNameId = Number(item.sample.id);
320 327
 								this.validateSpecimenForm.controls.specimenName.setValue(item.specimenName);
321
-							},100)
328
+								this.validateSpecimenForm.controls.remark.setValue(item.remark);
329
+								this.specimenModal = true
330
+							},50)
331
+						}else{
332
+							setTimeout(_=>{
333
+								this.specimenNameIndex = null
334
+								this.specimenNameName = ''
335
+								this.specimenNameId = null
336
+								this.validateSpecimenForm.controls.specimenName.setValue(item.specimenName);
337
+								this.validateSpecimenForm.controls.remark.setValue(item.remark);
338
+								this.specimenModal = true
339
+							},50)
322 340
 						}
323
-						setTimeout(_=>{
324
-							this.validateSpecimenForm.controls.remark.setValue(item.remark);
325
-							this.specimenModal = true
326
-						},50)
327 341
 					}
328 342
 			  });
329 343
 		}
330
-
331 344
 	}
332 345
 	
333 346
 	// 删除标本

+ 51 - 1
src/app/share/pathology-detail/pathology-detail.component.html

@@ -112,7 +112,7 @@
112 112
 <!-- 打印 -->
113 113
   <div id="report" style="display: none;">
114 114
 		<div class="monad">
115
-			<div *ngIf="printData && printData.specimenList && printData.specimenList.length>1" style="border: 1px solid #AAAAAA;
115
+			<!-- <div *ngIf="printData && printData.specimenList && printData.specimenList.length>1" style="border: 1px solid #AAAAAA;
116 116
 				border-radius: 5px;font-size: 12px;">
117 117
 				 <div *ngIf="pathologyBarCode==1" style="display: flex;align-items: center;flex-wrap: nowrap;height: 80px;padding: 0 1px;">
118 118
 					 <div style="width: 60%;height: 70px;text-align: center;">
@@ -213,6 +213,56 @@
213 213
 					 </div>
214 214
 				 </div>
215 215
 				</div>
216
+			</div> -->
217
+			<!-- 12.11新版打印样式 -->
218
+			<div style="font-size: 12px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>0">
219
+				<div *ngFor="let data of printData.specimenList; let index=index;">
220
+				 <div>
221
+					 <div style="display: flex;align-items: center;flex-wrap: nowrap;height: 70px;padding: 0 1px;">
222
+						 <div style="width: 60%;height: 70px;text-align: center;">
223
+							 <img style="max-width: 90%;height: 80%;" [src]="data.barCode" alt="">
224
+							 <div>标本号:{{data.specimenCode}}</div>
225
+						 </div>
226
+						 <div style="width: 40%;height: 100%;text-align: center;display: flex;align-items: center;">
227
+							 <img style="max-width: 100%;max-height: 100%;" [src]="tool.logoUrl" alt="">
228
+						 </div>
229
+					 </div>
230
+					 <div style="display: flex;justify-content: space-between;">
231
+						 <div style="width: 70%;margin-right:15px;">
232
+						 	<div style="display: flex; justify-content: space-between; margin-top:11px;">
233
+								<div>患者: {{data.patientName}}</div>
234
+								<div>性别: {{data.patientGender}}</div>
235
+							</div>
236
+							<div style="margin-top:11px;">
237
+								<div>住院号: {{data.residenceNo}}</div>
238
+							</div>
239
+							<div style="margin-top:11px;">
240
+								<div>科室: {{data.patientDept}}</div>
241
+							</div>
242
+							<div style="margin-top:11px;">
243
+								<div>日期: {{data.inVitroTime|date:'yyyy-MM-dd'}}</div>
244
+							</div>
245
+							<div style="margin-top:11px;">
246
+								<div style="width: 100%;height: 32px;overflow: hidden;">部位: {{data.partSource}}{{data.organ}}{{data.specimenName}}</div>
247
+							</div>
248
+						 </div>
249
+						 <div style="width: 30%;">
250
+							<div style="margin-top:11px;">年龄: {{data.patientAge}}岁</div>
251
+							<div style="margin-top:11px;">床号: {{data.patientBedNum}}床</div>
252
+							<div style="margin-top:11px;" *ngIf="operation == 'addPrint'">标本数: {{index+1}}/{{printData.specimenNum}}</div>
253
+							<div style="margin-top:11px;" *ngIf="operation != 'addPrint'">标本数: {{index+1}}/{{printData.specimenList.length}}</div>
254
+							<div style="width: 100%;height: 65px;display: flex;margin-top: 5px;">
255
+							 <div style="height: 55px;width: 55px;">
256
+								 <img style="max-width: 100%;max-height: 100%;position: relative;left: -2px;" [src]="printData.applyBarCode" alt="">
257
+								 <div style="position: relative;left: -18px;">{{printData.applyCode}}</div>
258
+							 </div>
259
+							 <div style="width: 12px;position: relative; top: 5px;">申请单</div>
260
+							</div>
261
+						 </div>
262
+					 </div>
263
+				 </div>
264
+				 <div style="height: 26px;"></div>
265
+				</div>
216 266
 			</div>
217 267
 		</div>
218 268
   </div>

+ 23 - 1
src/app/views/hushijiandan/hushijiandan.component.html

@@ -854,7 +854,10 @@
854 854
               <!-- 手术排程信息 -->
855 855
               <div *ngIf="checkedTableType == 'surgery'" style="flex: 1; height: 100%;min-height:0;">
856 856
                 <div class="searchBox display_flex align-items_center justify-content_space-between">
857
-                  <div class="left alignC display_flex justify-content_flex-center align-items_center"></div>
857
+                  <div class="left alignC display_flex justify-content_flex-center align-items_center">
858
+										<span class="label">排程时间:</span>
859
+										<nz-date-picker [(ngModel)]="scheduleTime" (ngModelChange)="changeDate($event)"></nz-date-picker>
860
+									</div>
858 861
                   <div class="btns">
859 862
                     <button
860 863
                       nz-button
@@ -2600,6 +2603,7 @@
2600 2603
 							<th>申请时间</th>
2601 2604
 							<th>申请科室</th>
2602 2605
 							<th>状态</th>
2606
+							<th>操作</th>
2603 2607
 						</tr>
2604 2608
 					</thead>
2605 2609
 					<tbody>
@@ -2613,6 +2617,13 @@
2613 2617
 							<td>{{ data.createTime | date:'yyyy-MM-dd HH:mm'}}</td>
2614 2618
 							<td>{{ data.patientDTO.department? data.patientDTO.department.dept:'-'}}</td>
2615 2619
 							<td>{{ data.status?data.status.name:'-'}}</td>
2620
+							<td>
2621
+							  <div class="coop">
2622
+							    <span *ngIf="data.status.value==1 || data.status.value==2 
2623
+									|| data.status.value==3 || data.status.value==4 || 
2624
+									data.status.value==5" (click)="cancellation(data)">作废</span>
2625
+							  </div>
2626
+							</td>
2616 2627
 						</tr>
2617 2628
 					</tbody>
2618 2629
 				</nz-table>
@@ -2629,6 +2640,17 @@
2629 2640
 	<nz-spin nzSimple class="spin-style"></nz-spin>
2630 2641
 </div>
2631 2642
 
2643
+<!-- 作废模态框 -->
2644
+<app-dialog-delete [delModal]="cancellationModal" (hideDelModalEvent)="cancelCancellation()" [btnLoading]="cancellationLoading" 
2645
+  (confirmDelEvent)="confirmCancellation()" (cancelDelEvent)="cancelCancellation()" content="是否作废申请单?" confirmTxt="是" cancelTxt="否">
2646
+</app-dialog-delete>
2647
+
2648
+<!-- 新增申请单提示 -->
2649
+<nz-modal [(nzVisible)]="isPathologyVisible" nzTitle="提示" (nzOnCancel)="handlePathologyCancel()" (nzOnOk)="handlePathologyOk()">
2650
+	<p><span class="red" *ngIf="viewData.length>0">{{viewData[0].patientDTO.patientName}}({{viewData[0].patientDTO.patientCode}})</span>患者已有申请单,如需<span class="red">追加新标本</span>可在<span class="red">原有</span>申请单中<span class="red">添加</span>;您确认要添加新的申请单吗?</p>
2651
+	<p>注意:<span class="red">一个申请单出一个报告,请谨慎添加申请单;</span></p>
2652
+</nz-modal>
2653
+		
2632 2654
 <!-- 修改密码 -->
2633 2655
 <nz-modal [(nzVisible)]="isPwdVisible" nzTitle="修改密码" (nzOnCancel)="pwdHandleCancel()" (nzOnOk)="pwdHandleOk()" [nzOkLoading]="pwdIsOkLoading" (nzAfterOpen)="pwdAfterOpen()">
2634 2656
   <div>

+ 117 - 11
src/app/views/hushijiandan/hushijiandan.component.ts

@@ -33,6 +33,7 @@ import {
33 33
   startOfDay,
34 34
   endOfDay,
35 35
   parse,
36
+	subHours 
36 37
 } from "date-fns";
37 38
 import { SourceId } from "src/app/type/types";
38 39
 import cloneDeep from 'lodash-es/cloneDeep'
@@ -335,10 +336,32 @@ export class HushijiandanComponent implements OnInit {
335 336
 		    }
336 337
 		  });
337 338
 	}
338
-
339
+	
339 340
 	// 新增申请单自选类型
340 341
 	applicationType:any;
342
+	isPathologyVisible:any = false;
341 343
 	addPathologyType(type){
344
+		this.applicationType = type
345
+		if(this.viewData.length>0){
346
+			this.isPathologyVisible = true
347
+		}else{
348
+			this.submitPathlogyForm()
349
+		}
350
+	}
351
+	
352
+	// 取消新增申请单自选类型
353
+	handlePathologyCancel(){
354
+		this.applicationType = null
355
+		this.isPathologyVisible = false
356
+	}
357
+	
358
+	// 确定新增申请单自选类型
359
+	handlePathologyOk(){
360
+		this.submitPathlogyForm()
361
+	}
362
+	
363
+	// 新增申请单自选类型
364
+	submitPathlogyForm(){
342 365
 		if(this.openType=='btn'){
343 366
 			this.surgeryDataId = this.surgeryWKOMsg.id
344 367
 			this.patientDataId = this.surgeryWKOMsg.patientDTO.id
@@ -346,7 +369,6 @@ export class HushijiandanComponent implements OnInit {
346 369
 			this.surgeryDataId = this.scheduleItem.id
347 370
 			this.patientDataId = this.scheduleItem.patientDTO.id
348 371
 		}
349
-		this.applicationType = type
350 372
 		let data = {
351 373
 			idx: 0,
352 374
 			sum: 9999,
@@ -354,17 +376,18 @@ export class HushijiandanComponent implements OnInit {
354 376
 			patientId: this.patientDataId || "",
355 377
 			hosId: this.currentHospital.id || "" ,
356 378
 			operationType: 'pathologyForm',
357
-			pathologyFormType: type
379
+			pathologyFormType: this.applicationType
358 380
 		};
359 381
 		this.mainService
360 382
 		.simplePost("addData", "pathologyForm", data)
361 383
 		.subscribe((data) => {
362 384
 			this.detailId = data.data.id
385
+			this.isPathologyVisible = false
363 386
 			this.multiDialog = false
364 387
 			this.pathologyModal = true
365 388
 		});
366 389
 	}
367
-
390
+	
368 391
 	// 手术排程-病理申请单
369 392
 	openType:any;
370 393
 	scheduleItem:any;
@@ -490,7 +513,43 @@ export class HushijiandanComponent implements OnInit {
490 513
 			}
491 514
 		});
492 515
 	}
493
-
516
+	
517
+	// 获取病理申请单最新数据
518
+	getPathologyData(){
519
+		if(this.openType=='btn'){
520
+			this.surgeryDataId = this.surgeryWKOMsg.id
521
+			this.patientDataId = this.surgeryWKOMsg.patientDTO.id
522
+		}else{
523
+			this.surgeryDataId = this.scheduleItem.id
524
+			this.patientDataId = this.scheduleItem.patientDTO.id
525
+		}
526
+		let data = {
527
+			idx: 0,
528
+			sum: 9999,
529
+			pathologyForm: {
530
+				patientId: this.patientDataId || "",
531
+				hosId: this.currentHospital.id || "" ,
532
+				operationType: 'pathologyForm',
533
+				order:'createTime desc'
534
+			},
535
+		};
536
+		this.isSpinning = true
537
+		this.mainService
538
+		.getFetchDataList("data", "pathologyForm", data)
539
+		.subscribe((data) => {
540
+			this.isSpinning = false
541
+			this.viewData = data.list
542
+			for(let i of this.viewData){
543
+				if(i.pathologyInspectDTOS){
544
+					i.arr = []
545
+					for(let x of i.pathologyInspectDTOS){
546
+						i.arr.push(x.inspectProject.name)
547
+					}
548
+				}
549
+			}
550
+		})
551
+	}
552
+	
494 553
 	// 申请单号点击
495 554
 	itemClick(item){
496 555
 		this.detailId = item.id
@@ -508,7 +567,36 @@ export class HushijiandanComponent implements OnInit {
508 567
 			}
509 568
 		},200)
510 569
 	}
511
-
570
+	
571
+	// 申请单作废
572
+	cancellationLoading:any = false;
573
+	cancellationModal:any = false;
574
+	cancellation(data){
575
+		this.coopId = data.id
576
+		this.cancellationModal = true
577
+	}
578
+	
579
+	// 确定作废
580
+	confirmCancellation(){
581
+		this.cancellationLoading = true;
582
+		this.mainService
583
+		.coopTypeConfig('rmvData', 'pathologyForm', [this.coopId])
584
+		.subscribe((data) => {
585
+			this.cancellationLoading = false;
586
+			this.cancelCancellation();
587
+			if (data["status"] == 200) {
588
+				this.showPromptModal("作废", true, "", "application");
589
+			} else {
590
+				this.showPromptModal("作废", false, data["msg"]);
591
+			}
592
+		});
593
+	}
594
+	
595
+	// 取消作废
596
+	cancelCancellation(){
597
+		this.cancellationModal = false
598
+	}
599
+	
512 600
 	hideModal(){
513 601
 		this.multiDialog = false
514 602
 	}
@@ -1029,8 +1117,11 @@ export class HushijiandanComponent implements OnInit {
1029 1117
     } else if (e === "bb") {
1030 1118
       this.getOrderList();
1031 1119
       this.getSpecimenWorkOrderMsg();
1032
-    }
1120
+    } else if (e === "application"){
1121
+			this.getPathologyData()
1122
+		}
1033 1123
   }
1124
+
1034 1125
   // 其他建单
1035 1126
   selectOtherId; //选中的id
1036 1127
   otherSearch = ""; //搜索的关键词
@@ -1138,6 +1229,7 @@ export class HushijiandanComponent implements OnInit {
1138 1229
 
1139 1230
   // 手术提示信息
1140 1231
   surgeryLoading = false;
1232
+	now:any = new Date();
1141 1233
   getSurgeryWKOMsg() {
1142 1234
     if(this.currentDept.typeValue != 'surgery'){
1143 1235
       return;
@@ -1146,8 +1238,8 @@ export class HushijiandanComponent implements OnInit {
1146 1238
       idx: 0,
1147 1239
       sum: 1,
1148 1240
       surgery: {
1149
-        applyDateStart: format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss"),
1150
-        applyDateEnd: format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss"),
1241
+        applyDateStart: format(subHours(new Date(),12), "yyyy-MM-dd HH:mm:ss"),
1242
+        applyDateEnd: format(endOfDay(new Date()), "yyyy-MM-dd")+' '+'23:59:59',
1151 1243
         // hosId: this.currentHospital.id,
1152 1244
         surgeryDept: this.loginUserDeptId,
1153 1245
         state: {
@@ -3910,6 +4002,20 @@ export class HushijiandanComponent implements OnInit {
3910 4002
         that.adviceListLength = data.totalNum || 0;
3911 4003
       });
3912 4004
   }
4005
+	
4006
+	startDate:any = format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
4007
+	endDate:any = format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
4008
+	scheduleTime: any = format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
4009
+	changeDate(result){
4010
+		if(result){
4011
+			this.startDate = format(result, 'yyyy-MM-dd') +' '+ '00:00:00';
4012
+			this.endDate = format(result, 'yyyy-MM-dd') +' '+'23:59:59';
4013
+		}else{
4014
+			this.startDate = null
4015
+			this.endDate = null
4016
+		}
4017
+	}
4018
+	
3913 4019
   // 手术排程信息表格数据
3914 4020
   surgeryList: any = [];
3915 4021
   surgeryPageIndex: number = 1; //表格当前页码
@@ -3924,8 +4030,8 @@ export class HushijiandanComponent implements OnInit {
3924 4030
     }
3925 4031
     let postData:any = {
3926 4032
       surgery: {
3927
-        applyDateStart: format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss"),
3928
-        applyDateEnd: format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss"),
4033
+				applyDateStart: this.startDate,
4034
+				applyDateEnd: this.endDate,
3929 4035
         // hosId: this.currentHospital.id,
3930 4036
       },
3931 4037
       idx: this.surgeryPageIndex - 1,

+ 2 - 0
src/app/views/login/login.component.ts

@@ -237,6 +237,8 @@ export class LoginComponent implements OnInit {
237 237
       }
238 238
       canLogin = true;
239 239
     });
240
+		localStorage.setItem("bookBatchNo",'')
241
+		localStorage.setItem("specimenBatchNo",'')
240 242
 		if(this.paramsData.toPage1 && this.paramsData.cardNO1){
241 243
 			this.msg.success("登录成功!", {
242 244
 			  nzDuration: 1000,

+ 1 - 0
src/app/views/main/main.component.html

@@ -47,6 +47,7 @@
47 47
               <div class="dropdownItem" *ngIf="specimenRoomView" (click)="toSpecimenRoomView()">标本间端</div>
48 48
               <div class="dropdownItem" *ngIf="pathology" (click)="toPathology()">病理科端</div>
49 49
 							<div class="dropdownItem" *ngIf="sampling" (click)="toSampling()">门诊病理采样端</div>
50
+							<div class="dropdownItem" *ngIf="communicationBook" (click)="toCommunicationBook()">病理交接本</div>
50 51
 							<div class="dropdownItem" *ngIf="disinfectionSupplyRole" (click)="toDisinfectionSupply()">全局业务查看</div>
51 52
             </div>
52 53
           </div>

+ 9 - 0
src/app/views/main/main.component.ts

@@ -32,6 +32,7 @@ export class MainComponent implements OnInit {
32 32
 	specimenRoomView: boolean = false; //标本间权限
33 33
 	pathology: boolean = false; //病理科权限
34 34
 	sampling: boolean = false; //门诊病理采样端权限
35
+	communicationBook: boolean = false; //病理交接本权限
35 36
   disinfectionSupplyRole: boolean = false; //全局业务查看权限
36 37
   incidentConfigRole: boolean = false; //事件配置权限
37 38
   otherConfigRole: boolean = false; //三方配置权限
@@ -307,6 +308,10 @@ export class MainComponent implements OnInit {
307 308
 			  this.sampling = true;
308 309
 			  console.log("门诊病理采样端权限");
309 310
 			}
311
+			if (e.link == "pathologyCommunicationBook") {
312
+			  this.communicationBook = true;
313
+			  console.log("病理交接本权限");
314
+			}
310 315
       if (e.link == "disinfectionSupply") {
311 316
         this.disinfectionSupplyRole = true;
312 317
         console.log("全局业务查看权限");
@@ -450,6 +455,10 @@ export class MainComponent implements OnInit {
450 455
 	toSampling(): void {
451 456
 	  this.router.navigateByUrl("pathologySample");
452 457
 	}
458
+	// 病理交接本
459
+	toCommunicationBook(): void {
460
+	  this.router.navigateByUrl("pathologyCommunicationBook");
461
+	}
453 462
   // 全局业务查看
454 463
   toDisinfectionSupply(): void {
455 464
     this.router.navigateByUrl("disinfectionSupply");

+ 17 - 0
src/app/views/pathology-check/pathology-check-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from "@angular/core";
2
+import { Routes, RouterModule } from "@angular/router";
3
+import { PathologyCheckComponent } from "./pathology-check.component";
4
+import { DetailSampleComponent } from 'src/app/share/detail-sample/detail-sample.component';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: "",
9
+    component: PathologyCheckComponent
10
+  },
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule],
16
+})
17
+export class PathologyCheckRoutingModule {}

+ 186 - 0
src/app/views/pathology-check/pathology-check.component.html

@@ -0,0 +1,186 @@
1
+<!-- 标本接收 -->
2
+<div class="pathology-box display_flex align-items_center justify-content_flex-center" *ngIf="fixationModal">
3
+	<div class="pathology-content">
4
+		<div class="title">
5
+		<!-- <i class="icon_transport transport-guanbi" (click)="hideSpecimenModal()"></i></div> -->
6
+		<div class="content">
7
+			<div class="content-item">
8
+				<!-- <div class="center">提示:申请单含<span class="red">{{codeData.specimenNum}}</span>只标本,已扫<span class="red">{{codeData.pathologySpecimenDTOList.length}}</span>只<span *ngIf="codeData.pathologySpecimenDTOList.length < codeData.specimenNum">,请继续扫描标本。</span></div> -->
9
+				<div class="disp-fl">
10
+					<div class="disp-title">
11
+						<div>
12
+							应送申请单: <span class="weight">{{otherData.pathologyFormNum}}</span> &nbsp;
13
+							标本: <span class="weight">{{otherData.specimenNum}}</span>&nbsp;
14
+							已扫描申请单: <span class="weight">{{otherData.scanPathologyFormNum}}</span>&nbsp;
15
+							标本: <span class="weight">{{otherData.scanSpecimenNum}}</span>&nbsp;
16
+						</div>
17
+					</div>
18
+					
19
+					<div *ngIf="dataType!='pathologyPack' && businessType!='packagLook'">
20
+						<input nz-input id="specimen" [placeholder]="placeholder" [(ngModel)]="specimenCode" (ngModelChange)="codeChange($event)"/>
21
+					</div>
22
+					<div class="error-class">{{errorMsg}}</div>
23
+				</div>
24
+				<div class="tabs">
25
+					<div class="tabs-item">
26
+						<div class="tabs-item-item" [ngClass]="{'activeClass': activeIndex == 0}" (click)="tabClick(0)">已扫描</div>
27
+						<div class="tabs-item-item" [ngClass]="{'activeClass': activeIndex == 1}" (click)="tabClick(1)">未扫描</div>
28
+					</div>
29
+				</div>
30
+				<div class="list-template">
31
+				  <div class="list-template__content">
32
+						<div class="list-template__bottom" style="padding: 0 !important;">
33
+							<nz-table class="list-template__nzTable" [nzData]="codeData" nzSize="middle" [nzShowPagination]="false"
34
+								[nzLoading]="tableLoading">
35
+								<thead>
36
+									<tr class="thead">
37
+										<th nzWidth="220px">申请单号 | 申请科室</th>
38
+										<th nzWidth="220px">患者姓名 | 住院号</th>
39
+										<th nzWidth="120px">标本数</th>
40
+										<th nzWidth="260px">部位</th>
41
+										<th nzWidth="120px">产生科室</th>
42
+										<th>离体时间</th>
43
+										<th>固定时间</th>
44
+									</tr>
45
+								</thead>
46
+								<tbody>
47
+									<tr *ngFor="let data of codeData let index = index">
48
+										<td>
49
+											<div>{{ data.applyCode}}</div>
50
+											<div>{{ data.patientDTO.department.dept}}</div>
51
+										</td>
52
+										<td>
53
+											<div>{{ data.patientDTO.patientName}}</div>
54
+											<div>{{ data.patientDTO.residenceNo}}</div>
55
+										</td>
56
+										<td>{{ data.specimenNum}}</td>
57
+										<td>{{ data.takePart}}</td>
58
+										<td>{{ data.surgeryDeptDTO?data.surgeryDeptDTO.dept:'-'}}</td>
59
+										<td>{{ data.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
60
+										<td>{{ data.fixationTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
61
+									</tr>
62
+								</tbody>
63
+							</nz-table>
64
+							<div class="list-template__pagination">
65
+							  <nz-pagination [(nzPageIndex)]="pageReceptionIndex" [(nzTotal)]="listReceptionLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
66
+							    (nzPageIndexChange)="pageChange()" (nzPageSizeChange)="pageChange()">
67
+							  </nz-pagination>
68
+							</div>
69
+						</div>
70
+					</div>
71
+				</div>
72
+			</div>
73
+		</div>
74
+		<div class="display_flex justify-content_flex-center bottom-btn">
75
+			<button class="btn btn-right" [disabled]="alreadyData.length==0" nz-button nzType="primary" (click)="submitFixationForm()" [nzLoading]="btnLoading">核对完成</button>
76
+			<!-- <button class="btn btn-right" *ngIf="dataType?dataType=='pack' : businessType == 'packaging'" [disabled]="codeData.length==0" nz-button nzType="primary" (click)="submitScanForm()" [nzLoading]="btnLoading">核对完成</button> -->
77
+			<!-- <button class="btn btn-right" *ngIf="dataType=='pathologyPack'" nz-button nzType="primary" [disabled]="codeData.length==0" (click)="connectAccomplish()" [nzLoading]="btnMultiLoading">核对完成</button> -->
78
+			<button class="btn cancel" nz-button nzType="default" (click)="hideSpecimenModal()">取消</button>
79
+<!-- 			<button class="btn cancel" *ngIf="dataType?dataType=='pack' : businessType == 'packaging'" nz-button nzType="default" (click)="hideSpecimenModal()">取消</button>
80
+			<button class="btn btn-right" *ngIf="businessType=='packagLook'" nz-button nzType="primary" (click)="hideSpecimenModal()">知道了</button> -->
81
+		</div>
82
+	</div>
83
+</div>
84
+</div>
85
+
86
+<!-- 多支标本提示 -->
87
+<div class="multi add display_flex align-items_center justify-content_flex-center" *ngIf="multiModal">
88
+	<div class="pathology-content">
89
+		<div class="title">多支标本提示
90
+		<i class="icon_transport transport-guanbi" (click)="hideMultiModal()"></i></div>
91
+		<div class="content border">
92
+			<div class="content-item">
93
+				<div class="center">提示:{{scanCodeData.patientName}}的申请单含<span>{{codeMultiData.length}}</span>支标本,您已扫描<span>{{muArr.length}}</span>支</div>
94
+				<div class="disp-fl df-center">
95
+					<div>
96
+						<input nz-input id="multiSpecimen" placeholder="可扫描物理标本条码及申请单" [(ngModel)]="specimenMultiCode" (ngModelChange)="codeMultiChange($event)"/>
97
+					</div>
98
+					<div class="error-class">{{errorMultiMsg}}</div>
99
+				</div>
100
+				<div class="list-template">
101
+				  <div class="list-template__content">
102
+						<div class="list-template__bottom" style="padding: 0 !important;">
103
+							<nz-table class="list-template__nzTable" [nzData]="codeMultiData" nzSize="middle" [nzShowPagination]="false"
104
+								[nzLoading]="tableLoading">
105
+								<thead>
106
+									<tr class="thead">
107
+										<th>序号</th>
108
+										<th>条码号</th>
109
+										<th>标本名称</th>
110
+										<th>已扫描 | 未扫描</th>
111
+									</tr>
112
+								</thead>
113
+								<tbody>
114
+									<tr *ngFor="let data of codeMultiData let index = index">
115
+										<td>{{index+1}}</td>
116
+										<td>{{ data.specimenCode}}</td>
117
+										<td>
118
+											<span *ngIf="data.partSource && data.partSource.value!=1">{{data.partSource?data.partSource.name:''}}</span>{{data.organ?data.organ.name:''}}{{data.specimenName}}
119
+										</td>
120
+										<td>
121
+											<div *ngIf="data.isScan==1">已扫描</div>
122
+											<div *ngIf="data.isScan==0" class="red">未扫描</div>
123
+										</td>
124
+									</tr>
125
+								</tbody>
126
+							</nz-table>
127
+						</div>
128
+					</div>
129
+				</div>
130
+			</div>
131
+		</div>
132
+		<div class="display_flex justify-content_flex-center bottom-btn">
133
+			<button class="btn btn-right" nz-button nzType="primary" (click)="submitMultiScanForm()" [nzLoading]="btnMultiLoading">扫描完成</button>
134
+			<button class="btn cancel" nz-button nzType="default" (click)="hideMultiModal()">取消</button>
135
+		</div>
136
+	</div>
137
+</div>
138
+
139
+
140
+
141
+<!-- 操作成功/失败提示框 -->
142
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
143
+  [info]="promptInfo" (closeModel)="hideSpecimenModal()"></app-prompt-modal>
144
+	
145
+<div class="mask-style" *ngIf="isSpinning">
146
+	<nz-spin nzSimple class="spin-style"></nz-spin>
147
+</div>
148
+
149
+<!-- 核对 -->
150
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="connectModal">
151
+	<div class="modalBody">
152
+		<div class="title">信息核对<i class="icon_transport transport-guanbi" (click)="hideConnectModal()"></i>
153
+		</div>
154
+		<div class="content">
155
+		 <div class="title-class">
156
+			 您本次共扫描<span class="red">{{mustReceived.pathologyFormNum}}</span>申请单 标本<span class="red">{{mustReceived.specimenNum}}</span>份
157
+		 </div>
158
+		 <form nz-form [formGroup]="validateConnectForm" class="addForm" (ngSubmit)="submitConnectForm()">
159
+			<nz-form-item>
160
+				<nz-form-label nzRequired nzFor="dispatchingNumber">配送人工号</nz-form-label>
161
+				<nz-form-control nzErrorTip="请输入配送人工号!">
162
+					<input nz-input (ngModelChange)="dispatchingChange($event)" formControlName="dispatchingNumber" placeholder="请输入配送人工号" nzSize="default" />
163
+				</nz-form-control>
164
+			</nz-form-item>
165
+			<nz-form-item class="form-name">
166
+				<nz-form-label style="margin-left: 12px;">配送人姓名</nz-form-label>
167
+					<div class="job-class">{{dispatchingName}}</div>
168
+			</nz-form-item>
169
+			<nz-form-item>
170
+				<nz-form-label nzRequired nzFor="receptionNumber">核对人工号</nz-form-label>
171
+				<nz-form-control nzErrorTip="请输入核对人工号!">
172
+					<input nz-input (ngModelChange)="receptionChange($event)" formControlName="receptionNumber" placeholder="请输入核对人工号" nzSize="default" />
173
+				</nz-form-control>
174
+			</nz-form-item>
175
+			<nz-form-item class="form-name">
176
+				<nz-form-label style="margin-left: 12px;">核对人姓名</nz-form-label>
177
+					<div class="job-class">{{receptionName}}</div>
178
+			</nz-form-item>
179
+		 </form>
180
+		</div>
181
+		<div class="display_flex justify-content_flex-center">
182
+			<button class="btn" nz-button nzType="primary" (click)="submitConnectForm()" [nzLoading]="btnConnectLoading">确定</button>
183
+			<button class="btn cancel" nz-button nzType="default" (click)="hideConnectModal()">取消</button>
184
+		</div>
185
+	</div>
186
+</div>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1338 - 0
src/app/views/pathology-check/pathology-check.component.less


+ 718 - 0
src/app/views/pathology-check/pathology-check.component.ts

@@ -0,0 +1,718 @@
1
+import { Component, OnInit, ViewChild, OnDestroy } from "@angular/core";
2
+import { MainService } from "../../services/main.service";
3
+import { ActivatedRoute, Router } from "@angular/router";
4
+import { OverlayScrollbarsComponent } from "overlayscrollbars-ngx";
5
+import { startOfDay, format, endOfDay } from "date-fns";
6
+import { ToolService } from 'src/app/services/tool.service';
7
+import { NzMessageService, NzNotificationService } from "ng-zorro-antd";
8
+import { debounceTime } from 'rxjs/operators';
9
+import { Subject } from 'rxjs';
10
+import { DomSanitizer } from '@angular/platform-browser';
11
+
12
+import {
13
+  FormBuilder,
14
+  Validators,
15
+  FormGroup,
16
+  FormControl,
17
+} from "@angular/forms";
18
+
19
+@Component({
20
+  selector: "app-pathology-check",
21
+  templateUrl: "./pathology-check.component.html",
22
+  styleUrls: ["./pathology-check.component.less"],
23
+})
24
+export class PathologyCheckComponent implements OnInit, OnDestroy {
25
+  @ViewChild("osComponentRef1", {
26
+    read: OverlayScrollbarsComponent,
27
+    static: false,
28
+  })
29
+  osComponentRef1: OverlayScrollbarsComponent;
30
+  @ViewChild("osComponentRef2", {
31
+    read: OverlayScrollbarsComponent,
32
+    static: false,
33
+  })
34
+  osComponentRef2: OverlayScrollbarsComponent;
35
+  @ViewChild("osComponentRef3", {
36
+    read: OverlayScrollbarsComponent,
37
+    static: false,
38
+  })
39
+  osComponentRef3: OverlayScrollbarsComponent;
40
+  @ViewChild("osComponentRef4", {
41
+    read: OverlayScrollbarsComponent,
42
+    static: false,
43
+  })
44
+  osComponentRef4: OverlayScrollbarsComponent;
45
+  @ViewChild("osComponentRef5", {
46
+    read: OverlayScrollbarsComponent,
47
+    static: false,
48
+  })
49
+  osComponentRef5: OverlayScrollbarsComponent;
50
+  constructor(
51
+	private mainService: MainService,
52
+	public router: Router,
53
+	private route: ActivatedRoute,
54
+	public tool: ToolService,
55
+	private fb: FormBuilder,
56
+	private message: NzMessageService,
57
+	private notification: NzNotificationService,
58
+	private sanitizer: DomSanitizer,
59
+
60
+	) {}
61
+  // 今日药单量
62
+  todayTotal: undefined;
63
+  // 今日已完成
64
+  todayComplete: undefined;
65
+  //手术间数据
66
+  printPharmacyList = []; //数据列表
67
+  printPharmacyIdx = 0; //页码
68
+  printPharmacyTotal = 0; //总数
69
+  printPharmacyFlag = false; //是否查看更多
70
+  printPharmacySearchKey = ""; //搜索的内容
71
+  printPharmacyLoad = false; //按钮的loading
72
+  // 标本间列表
73
+  waitPharmacyList = [];
74
+  waitPharmacyIdx = 0;
75
+  waitPharmacyTotal = 0;
76
+  waitPharmacyFlag = false;
77
+  waitPharmacySearchKey = "";
78
+  waitPharmacyLoad = false;
79
+  // 今日离科列表
80
+  pharmacyList = [];
81
+  pharmacyIdx = 0;
82
+  pharmacyTotal = 0;
83
+  pharmacyFlag = false;
84
+  pharmacySearchKey = "";
85
+  pharmacyLoad = false;
86
+  // 配送中列表
87
+  distributionList = [];
88
+  distributionIdx = 0;
89
+  distributionTotal = 0;
90
+  distributionFlag = false;
91
+  distributionSearchKey = "";
92
+  distributionLoad = false;
93
+  // 已完成列表
94
+  completedList = [];
95
+  completedIdx = 0;
96
+  completedTotal = 0;
97
+  completedFlag = false;
98
+  completedSearchKey = "";
99
+  completedLoad = false;
100
+
101
+	barCode:any; //条码搜索
102
+  // other
103
+  loginUser: any = localStorage.getItem("user")
104
+    ? JSON.parse(localStorage.getItem("user")).user
105
+    : null; //登录人信息
106
+
107
+  logTimer = null; //定时器
108
+  logTime = 0; //自动刷新秒数
109
+  logTimeConst = 60; //自动刷新秒数
110
+
111
+  time = new Date().getTime(); // 时间戳
112
+  timer = null; // 时间定时器
113
+	relevanceModal:boolean = false //关联标本和手术室
114
+	validateForm: FormGroup; //关联标本和手术室表单
115
+	validateVerificationForm: FormGroup; //核验标本
116
+	validateConnectForm: FormGroup; //核验标本
117
+	specimenData:any = []; //标本间数据
118
+	operationData:any = []; //手术间数据
119
+	fixationModal:boolean = false //标本接收固定
120
+	verificationMoadl:boolean = false //标本核验
121
+	specimenCode:any; //标本条码
122
+	listOneData:any=[];
123
+	listOneLength:any;
124
+	pageOneIndex:any = 1;
125
+	pageSize:any = 10;
126
+	listTwoData:any=[];
127
+	listTwoLength:any;
128
+	pageTwoIndex:any = 1;
129
+	listThreeData:any=[];
130
+	listThreeLength:any;
131
+	pageThreeIndex:any = 1;
132
+	loading1:boolean = false;
133
+	loading2:boolean = false;
134
+	loading3:boolean = false;
135
+	loading4:boolean = false;
136
+	loading5:boolean = false;
137
+	fixativeData:any = []; //固体液类型
138
+	hosId:any;
139
+	userId:any;
140
+	detailsData:any;
141
+	isSpinning:boolean = false; //全屏加载状态
142
+	codeData:any = []; //标本条码数据
143
+	btnInfoLoading :boolean = false; //标本加固加载
144
+	activeIndex:any = 0; //tabs选择状态
145
+	changeInpSubject = new Subject(); //防抖
146
+	changeInpSubjectUser = new Subject(); //防抖
147
+	changeInpSubjectDepartment = new Subject(); //防抖
148
+	intraoperativeRapidity:any = null; //术中快速
149
+	deliveryUser:any //配送人
150
+	acceptTime:any; //接收时间
151
+	userData:any = []; //配送人数据
152
+	isLoading:boolean = false;
153
+	listDetailMoadl:boolean = false; //详情弹框
154
+	department:any = []; //科室数据
155
+	hospital:any = []; //院区数据
156
+	distributionName:any;
157
+	businessType:any = null;
158
+	multiModal:boolean = false;
159
+	specimenMultiCode:any = null;
160
+	codeMultiData:any=[];
161
+	errorMultiMsg:any = null;
162
+	connectModal:boolean = false; //标本交接弹框
163
+	receptionModal:boolean = false; //标本接收弹框
164
+	deptId:any = null;
165
+	detailMoadl:boolean = false;
166
+	scanCodeData:any = null;
167
+	batchNo:any = null;
168
+	dataType:any = null;
169
+	muArr:any = [];
170
+	packId:any = null;
171
+	userInfo:any = null;
172
+	placeholder:any = null;
173
+	placeholderType:any = null;
174
+	operationType:any = 'pathologyHandoverBook';
175
+  ngOnDestroy() {
176
+    clearTimeout(this.timer);
177
+    clearTimeout(this.logTimer);
178
+  }
179
+
180
+  ngOnInit() {
181
+		this.changeInpSubject.pipe(debounceTime(500)).subscribe((v) => {
182
+		  this.searchSpecimenData(v[0])
183
+		});
184
+		this.hosId = this.tool.getCurrentHospital().id;
185
+		this.userId = this.tool.getCurrentUserId()
186
+		this.deptId = this.tool.getCurrentUserDept().id
187
+		this.userInfo = this.tool.getCurrentUserInfo()
188
+		this.batchNo = this.route.snapshot.queryParams.batchNo
189
+		this.businessType = this.route.snapshot.queryParams.businessType
190
+		this.placeholderType = this.route.snapshot.queryParams.placeholder
191
+		this.packId = this.route.snapshot.queryParams.packId //打包配送查看标本
192
+		this.operationType = localStorage.getItem("checkType"); //入口类型
193
+		if(this.placeholderType==1){
194
+			this.placeholder = '可扫描物理标本条码'
195
+		}else{
196
+			this.placeholder = '可扫描物理标本条码及申请单'
197
+		}
198
+		let scanData = localStorage.getItem("scanCodeData")
199
+		this.dataType = localStorage.getItem("dataType")
200
+		// if(this.packId && this.businessType=='packagLook'){
201
+		// 	this.getJsData(5)
202
+		// 	return
203
+		// }
204
+		if(scanData){
205
+			let data = JSON.parse(localStorage.getItem("scanCodeData"))
206
+			this.scanCodeData = data.data[0]
207
+			// 包的状态为配送中展示配送接收弹框
208
+			// if(this.dataType=='pathologyPack'){
209
+			// 	this.getJsData(4)
210
+			// }
211
+			if(this.scanCodeData.pathologySpecimenDTOList &&
212
+			this.scanCodeData.pathologySpecimenDTOList.length>1){
213
+				this.muArr = []
214
+				for(let i of this.scanCodeData.pathologySpecimenDTOList){
215
+					if(i.isScan==1){
216
+						this.muArr.push(i)
217
+					}
218
+				}
219
+				this.getJsData(3)
220
+			}else if(this.scanCodeData.pathologySpecimenDTOList &&
221
+			this.scanCodeData.pathologySpecimenDTOList.length==1){
222
+				this.notification.create('success','提示',data.msg);
223
+				this.getJsData(1)
224
+			}
225
+		}else{
226
+			if(this.placeholderType==1){
227
+				if(this.businessType=='connect'){
228
+					this.dataType = 'receive'
229
+				}else if(this.businessType=='packaging'){
230
+					this.dataType = 'pack'
231
+				}
232
+			}
233
+			this.getJsData(1)
234
+		}
235
+
236
+  }
237
+	
238
+	//tab切换
239
+	tabClick(type){
240
+		this.activeIndex = type
241
+		localStorage.setItem("pathologyActiveIndex",type)
242
+		this.getJsData(1)
243
+	}
244
+	
245
+	// 分页
246
+	noType:any='none';
247
+	pageChange(){
248
+		if(this.dataType=='pathologyPack'){
249
+			this.noType='show'
250
+			this.getJsData(4)
251
+		}else if(this.packId && this.businessType=='packagLook'){
252
+			this.getJsData(5)
253
+		}else{
254
+			this.getJsData(1)
255
+		}
256
+	}
257
+
258
+	// 获取标本接收数据
259
+	pageReceptionIndex:any = 1;
260
+	listReceptionLength:any = 0;
261
+	otherData:any=null;
262
+	alreadyData:any = [];
263
+	getJsData(type){
264
+		let data = {
265
+		  idx: this.pageReceptionIndex-1,
266
+		  sum: this.pageSize,
267
+		  pathologyForm: {
268
+		    batchNo:this.batchNo,
269
+				surgeryDeptId:this.deptId,
270
+				handoverType:this.operationType,
271
+				unScan:null
272
+		  },
273
+		};
274
+		if(this.operationType == 'pathologyHandoverBook'){
275
+			data.pathologyForm.surgeryDeptId = this.deptId
276
+		}else{
277
+			delete data.pathologyForm.surgeryDeptId
278
+		}
279
+		if(this.activeIndex==1){
280
+			data.pathologyForm.unScan = 1
281
+		}else{
282
+			delete data.pathologyForm.unScan
283
+		}
284
+		this.tableLoading = true;
285
+		this.mainService
286
+		  .getFetchDataList("data", "pathologyForm", data)
287
+		  .subscribe((res) => {
288
+				this.tableLoading = false;
289
+				if(type==1 || type==4 || type==5){
290
+					this.fixationModal = true
291
+					if(this.activeIndex==0){
292
+						this.alreadyData = res.list;
293
+						this.codeData = this.alreadyData
294
+					}else{
295
+						this.codeData = res.list;
296
+					}
297
+					if(type==1){
298
+						setTimeout(_=>{
299
+							document.getElementById('specimen').focus();
300
+						},200)
301
+					}else if(type==4 && this.noType=='none'){
302
+						this.connectAccomplish()
303
+					}
304
+				}else if(type==3){
305
+					this.codeMultiData = this.scanCodeData.pathologySpecimenDTOList
306
+					this.fixationModal = true
307
+					this.multiModal = true
308
+					setTimeout(_=>{
309
+						document.getElementById('multiSpecimen').focus();
310
+					},200)
311
+				}
312
+				this.otherData = res.otherData;
313
+				this.listReceptionLength = res.totalNum;
314
+		  });
315
+	}
316
+
317
+	// 配送中包交接完成
318
+	connectAccomplish(){
319
+		this.validateConnectForm = this.fb.group({
320
+		  receptionNumber: [this.userInfo.account, [Validators.required]],
321
+			dispatchingNumber: [this.scanCodeData.deliveryUserDTO.account, [Validators.required]]
322
+		});
323
+		this.dispatchingName = this.scanCodeData.deliveryUserDTO.name;
324
+		this.dispatchingUserId = this.scanCodeData.deliveryUserDTO.id
325
+
326
+		this.receptionName = this.userInfo.name;
327
+		this.connectUserId = this.userInfo.id;
328
+
329
+		this.receptionModal = true
330
+		this.barCode = null
331
+	}
332
+
333
+	// 确定接收包
334
+	submitReceptionForm(){
335
+		for (const i in this.validateConnectForm.controls) {
336
+		  this.validateConnectForm.controls[i].markAsDirty();
337
+		  this.validateConnectForm.controls[i].updateValueAndValidity();
338
+		}
339
+		if (this.validateConnectForm.invalid) return;
340
+		let data = {
341
+			receiveUser:this.connectUserId,
342
+			deliveryUser:this.dispatchingUserId,
343
+			operationType:this.operationType,
344
+			id:this.scanCodeData.id
345
+		};
346
+		this.btnConnectLoading = true
347
+		this.mainService
348
+		  .simplePost("updData", "pathologyPackInfo", data)
349
+		  .subscribe((data) => {
350
+				this.btnConnectLoading = false
351
+				if (data.status == 200) {
352
+					this.message.success('交接成功')
353
+					setTimeout(_=>{
354
+						this.hideSpecimenModal()
355
+					},500)
356
+				} else {
357
+				  this.message.error(data.msg)
358
+				}
359
+		  });
360
+	}
361
+
362
+	// 关闭配送接收
363
+	hideReceptionModal(){
364
+		this.receptionModal = false
365
+	}
366
+
367
+	// 监听人员交接接收人工号输入
368
+	connectUserId:any = null;
369
+	receptionName:any = null;
370
+	receptionChange(e){
371
+		if(e.length < 3) {
372
+			this.receptionName = null;
373
+			return
374
+		}
375
+		let query = {
376
+		  account: e
377
+		};
378
+		this.mainService
379
+		  .jobSearch(query)
380
+		  .subscribe((data:any) => {
381
+				if(data.status==200){
382
+					this.receptionName = data.userName;
383
+					this.connectUserId = data.userId
384
+				}else{
385
+					this.receptionName = null;
386
+					this.connectUserId =null
387
+				}
388
+		  });
389
+	}
390
+
391
+	// 监听人员交接配送人工号输入
392
+	dispatchingUserId:any = null;
393
+	dispatchingName:any = null;
394
+	dispatchingChange(e){
395
+		if(e.length < 3) {
396
+			this.dispatchingName = null;
397
+			return
398
+		}
399
+		let query = {
400
+		  account: e
401
+		};
402
+		this.mainService
403
+		  .jobSearch(query)
404
+		  .subscribe((data:any) => {
405
+				if(data.status==200){
406
+					this.dispatchingName = data.userName;
407
+					this.dispatchingUserId = data.userId
408
+				}else{
409
+					this.dispatchingName = null;
410
+					this.dispatchingUserId =null
411
+				}
412
+		  });
413
+	}
414
+
415
+	// 确定核对
416
+	mustReceived:any = null;
417
+	currReceived:any = null;
418
+	btnLoading:any = false;
419
+	submitFixationForm(){
420
+		this.btnLoading = true
421
+		this.mainService.getSpecimenInfo(this.batchNo,this.deptId,{
422
+			operationType:'handoverDelivery'
423
+		}).subscribe((res:any) => {
424
+			this.btnLoading = false
425
+			this.mustReceived = res;
426
+			// this.currReceived = res.data.currReceived;
427
+			this.btnConnectLoading = false
428
+			// if(this.codeData[0].deliveryUserDTO){
429
+			// 	this.validateConnectForm = this.fb.group({
430
+			// 		receptionNumber: [this.userInfo.account, [Validators.required]],
431
+			// 		dispatchingNumber: [this.codeData[0].deliveryUserDTO.account, [Validators.required]]
432
+			// 	});
433
+			// 	this.dispatchingName = this.codeData[0].deliveryUserDTO.name;
434
+			// 	this.dispatchingUserId = this.codeData[0].deliveryUserDTO.id
435
+			// }else{
436
+			// 	this.validateConnectForm = this.fb.group({
437
+			// 		receptionNumber: [null, [Validators.required]],
438
+			// 		dispatchingNumber: [null, [Validators.required]]
439
+			// 	});
440
+			// 	this.dispatchingName = null;
441
+			// 	this.dispatchingUserId = null
442
+			// }
443
+			// this.receptionName = this.userInfo.name;
444
+			// this.connectUserId = this.userInfo.id;
445
+			this.validateConnectForm = this.fb.group({
446
+				receptionNumber: [null, [Validators.required]],
447
+				dispatchingNumber: [null, [Validators.required]]
448
+			});
449
+			this.dispatchingName = null;
450
+			this.dispatchingUserId = null
451
+			this.connectModal = true
452
+		});
453
+	}
454
+	// 关闭核对
455
+	hideConnectModal(){
456
+		this.connectModal = false
457
+	}
458
+
459
+	// 确定核对提交
460
+	btnConnectLoading:boolean = false;
461
+	submitConnectForm(){
462
+		for (const i in this.validateConnectForm.controls) {
463
+		  this.validateConnectForm.controls[i].markAsDirty();
464
+		  this.validateConnectForm.controls[i].updateValueAndValidity();
465
+		}
466
+		if (this.validateConnectForm.invalid) return;
467
+		let data = {
468
+			batchNo:this.batchNo,
469
+			checkUser:this.connectUserId,
470
+			deliveryUser:this.dispatchingUserId
471
+		};
472
+		this.btnConnectLoading = true
473
+		this.mainService
474
+		  .handoverCompleted(data)
475
+		  .subscribe((res:any) => {
476
+				this.btnConnectLoading = false
477
+		    if (res.status == 200) {
478
+					if(this.operationType=='pathologyHandoverBook'){
479
+						localStorage.setItem("bookBatchNo",'')
480
+					}else{
481
+						localStorage.setItem("specimenBatchNo",'')
482
+					}
483
+		      this.showPromptModal("操作", true, "");
484
+		    } else {
485
+		      this.showPromptModal("操作", false, res.msg);
486
+		    }
487
+		  });
488
+	}
489
+
490
+	// 返回
491
+	hideSpecimenModal(){
492
+		localStorage.setItem("scanCodeData",'')
493
+		if(this.operationType=='pathologyHandoverBook'){//交接本
494
+			this.router.navigateByUrl(`/pathologyCommunicationBook?type=detail`)
495
+		}else if(this.operationType=='surgery'){//手术间
496
+			this.router.navigateByUrl(`/nurse`)
497
+		}else if(this.operationType=='specimenDept'){//标本间
498
+			this.router.navigateByUrl(`/specimenRoomView`)
499
+		}else if(this.operationType=='pathology'){//病理端
500
+			this.router.navigateByUrl(`/pathology`)
501
+		}else if(this.operationType=='sample'){//门诊病理
502
+			this.router.navigateByUrl(`/pathologySample`)
503
+		}
504
+	}
505
+
506
+	// 输入工号查询姓名
507
+	handoverUserId:any = null;
508
+	numberChange(e){
509
+		if(e.length < 3) {
510
+			this.distributionName = null;
511
+			return
512
+		}
513
+		let query = {
514
+		  account: e
515
+		};
516
+		this.mainService
517
+		  .jobSearch(query)
518
+		  .subscribe((data:any) => {
519
+				if(data.status==200){
520
+					this.distributionName = data.userName;
521
+					this.handoverUserId = data.userId
522
+				}else{
523
+					this.distributionName = null;
524
+					this.handoverUserId =null
525
+				}
526
+		  });
527
+	}
528
+
529
+	// 成功/失败提示框
530
+	closeModel(){
531
+		localStorage.setItem("scanCodeData",'')
532
+		this.router.navigateByUrl(`/pathology?type=detail`);
533
+	}
534
+
535
+	// 关闭配送信息
536
+	hideVerificationModal(){
537
+		this.verificationMoadl = false
538
+		setTimeout(_=>{
539
+			document.getElementById('Binput').focus();
540
+		},200)
541
+	}
542
+
543
+
544
+	// 监听交接/打包扫描条码
545
+	tableLoading:boolean = false;
546
+	codeChange(e){
547
+		this.changeInpSubject.next([e]);
548
+	}
549
+
550
+	// 标本搜索条码
551
+	errorMsg:any = null;
552
+	searchSpecimenData(e){
553
+		if(!e){
554
+			return
555
+		}
556
+		if(e.length < 10) {
557
+			return
558
+		}
559
+		let data = {
560
+			barcode:e,
561
+			deptId:this.deptId,
562
+			batchNo:this.batchNo,
563
+			platform:this.operationType,
564
+		}
565
+		this.tableLoading = true
566
+		this.mainService.pathologyScanCode(data)
567
+		.subscribe((res:any) => {
568
+			this.tableLoading = false
569
+			this.specimenCode = null
570
+			if(res.status==200){
571
+				this.scanCodeData = res.data[0]
572
+				this.dataType = res.dataType
573
+				if(res.data[0].pathologySpecimenDTOList.length>1){
574
+					for(let i of res.data[0].pathologySpecimenDTOList){
575
+						if(i.isScan==1){
576
+							this.muArr.push(i)
577
+						}
578
+					}
579
+					this.multiModal = true
580
+					this.codeMultiData = res.data[0].pathologySpecimenDTOList
581
+					localStorage.setItem("scanCodeData",JSON.stringify(res))
582
+				}else{
583
+					this.notification.create('success','提示',res.msg);
584
+					this.activeIndex = 0
585
+					this.codeData = []
586
+					this.getJsData(1)
587
+				}
588
+				this.errorMsg = null
589
+			}else{
590
+				this.errorMsg = res.msg
591
+			}
592
+		})
593
+	}
594
+
595
+	// 关闭多只标本
596
+	hideMultiModal(){
597
+		localStorage.setItem("scanCodeData",'');
598
+		this.multiModal = false;
599
+		this.errorMultiMsg = null;
600
+		this.muArr = [];
601
+		this.getJsData(1);
602
+		setTimeout(_=>{
603
+			document.getElementById('specimen').focus();
604
+		},200)
605
+	}
606
+
607
+	// 监听多只标本扫描
608
+	codeMultiChange(e){
609
+		if(!e){
610
+			return
611
+		}
612
+		if(e.length < 10) {
613
+			return
614
+		}
615
+		let data={
616
+			barcode:e,
617
+			deptId:this.deptId,
618
+			pathologyFormId:this.scanCodeData.id,
619
+			platform:this.operationType,
620
+		}
621
+		setTimeout(_=>{
622
+			this.tableLoading = true
623
+			this.mainService.pathologyScanCode(data)
624
+			.subscribe((res:any) => {
625
+				this.tableLoading = false
626
+				this.specimenMultiCode = null
627
+				if(res.status==200){
628
+					this.dataType = res.dataType
629
+					this.muArr = []
630
+					this.codeMultiData = res.data[0].pathologySpecimenDTOList
631
+					for(let i of res.data[0].pathologySpecimenDTOList){
632
+						if(i.isScan==1){
633
+							this.muArr.push(i)
634
+						}
635
+					}
636
+					this.multiModal = true
637
+					localStorage.setItem("scanCodeData",JSON.stringify(res))
638
+					this.errorMultiMsg = null
639
+				}else{
640
+					this.errorMultiMsg = res.msg
641
+				}
642
+			})
643
+		},500)
644
+	}
645
+
646
+	// 多只标本确定接受
647
+	btnMultiLoading:boolean = false;
648
+	submitMultiForm(){
649
+		let data1 = JSON.parse(localStorage.getItem("scanCodeData"))
650
+		this.scanCodeData = data1.data[0]
651
+		for(let i of this.scanCodeData.pathologySpecimenDTOList){
652
+			if(i.isScan==0){
653
+				this.message.error('有未扫描的标本,请继续扫描')
654
+				return
655
+			}
656
+		}
657
+		let data: any = {
658
+			id:this.scanCodeData.id,
659
+			operationType:this.operationType,
660
+			batchNo:this.batchNo
661
+		};
662
+		this.btnMultiLoading = true;
663
+		this.mainService
664
+		.simplePost("addData", "pathologyForm", data)
665
+		.subscribe((res) => {
666
+			this.message.success('操作成功')
667
+			setTimeout(_=>{
668
+				this.btnMultiLoading = false;
669
+				this.hideMultiModal()
670
+			},500)
671
+		});
672
+	}
673
+
674
+	// 多只标本扫描
675
+	submitMultiScanForm(){
676
+		let data1 = JSON.parse(localStorage.getItem("scanCodeData"))
677
+		this.scanCodeData = data1.data[0]
678
+		for(let i of this.scanCodeData.pathologySpecimenDTOList){
679
+			if(i.isScan==0){
680
+				this.message.error('有未扫描的标本,请继续扫描')
681
+				return
682
+			}
683
+		}
684
+		let data: any = {
685
+			id:this.scanCodeData.id,
686
+			operationType:this.operationType,
687
+			batchNo:this.batchNo
688
+		};
689
+		this.btnMultiLoading = true;
690
+		this.mainService
691
+		.simplePost("addData", "pathologyForm", data)
692
+		.subscribe((res) => {
693
+			this.message.success('操作成功')
694
+			setTimeout(_=>{
695
+				this.activeIndex = 0
696
+				this.btnMultiLoading = false;
697
+				this.codeData = []
698
+				this.hideMultiModal()
699
+			},500)
700
+		});
701
+	}
702
+
703
+	promptModalShow:boolean = false;
704
+	promptContent:any = null;
705
+	ifSuccess:any = null;
706
+	promptInfo:any = null;
707
+	// 扫描展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
708
+	showPromptModal(con, success, promptInfo?) {
709
+	  this.promptModalShow = false;
710
+	  this.promptContent = con;
711
+	  this.ifSuccess = success;
712
+	  this.promptInfo = promptInfo;
713
+	  setTimeout(() => {
714
+	    this.promptModalShow = true;
715
+	  }, 100);
716
+	}
717
+}
718
+

+ 17 - 0
src/app/views/pathology-check/pathology-check.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { PathologyCheckRoutingModule } from './pathology-check-routing.module';
5
+import { ShareModule } from 'src/app/share/share.module';
6
+import { PathologyCheckComponent } from './pathology-check.component';
7
+
8
+
9
+@NgModule({
10
+  declarations: [PathologyCheckComponent],
11
+  imports: [
12
+    CommonModule,
13
+    PathologyCheckRoutingModule,
14
+    ShareModule
15
+  ]
16
+})
17
+export class PathologyCheckModule { }

+ 17 - 0
src/app/views/pathology-communication-book/pathology-communication-book-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from "@angular/core";
2
+import { Routes, RouterModule } from "@angular/router";
3
+import { PathologyCommunicationBookComponent } from "./pathology-communication-book.component";
4
+import { DetailSampleComponent } from 'src/app/share/detail-sample/detail-sample.component';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: "",
9
+    component: PathologyCommunicationBookComponent
10
+  },
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule],
16
+})
17
+export class PathologyCommunicationBookRoutingModule {}

+ 456 - 0
src/app/views/pathology-communication-book/pathology-communication-book.component.html

@@ -0,0 +1,456 @@
1
+<div class="pharmacy">
2
+  <!-- 头部 start -->
3
+  <div class="pharmacy-header">
4
+   <div class="pharmacy-logo">
5
+			<div class="pharmacy-name__title">一站式服务管理平台</div>
6
+    </div>
7
+    <div class="pharmacy-name">
8
+			<div class="pharmacy-title">标本交接本</div>
9
+      <div class="pharmacy-name__total">
10
+				<nz-input-group nzSize="large">
11
+					<input type="text" id="Binput" (ngModelChange)="specimenCodeChange($event)" [(ngModel)]="barCode" nz-input placeholder="可扫描物理标本条码及申请单" />
12
+				</nz-input-group>
13
+				<!-- <ng-template #suffixButton>
14
+					<button nz-button nzType="primary" nzSize="large" nzSearch (click)="searchSpecimen()">搜索</button>
15
+				</ng-template> -->
16
+      </div>
17
+			<div class="error-box">
18
+				<div class="error-class">{{searchMsg}}</div>
19
+			</div>
20
+    </div>
21
+    <div class="right">
22
+      <div class="userInfo dropdown">
23
+        <div class="user" (mouseenter)="showDropdown = true" (mouseleave)="showDropdown = false">
24
+          <img src="../../assets/images/icon_keshi.png" alt="">
25
+          <span><ng-container *ngIf="loginUser.dept">{{deptDisplay == 2 ? loginUser.dept.deptalias : loginUser.dept.dept}}-</ng-container>{{loginUser.name}}</span>
26
+          <i class="icon_transport transport-xiala1 ml8"></i>
27
+        </div>
28
+        <div class="dropdown-content r8" [hidden]="!showDropdown" (mouseenter)="showDropdown = true" (mouseleave)="showDropdown = false">
29
+          <div class="dropdownItem" (click)="changeKsNow()">切换科室</div>
30
+					<div class="dropdownItem" (click)="toMain()">回到系统管理</div>
31
+          <div class="dropdownItem" (click)="logOut()">退出</div>
32
+        </div>
33
+      </div>
34
+    </div>
35
+  </div>
36
+	<div class="communication-tip">
37
+		<div class="mar-ri-30" *ngIf="toDayData">
38
+			今日产生:
39
+			申请单 <span class="weight">{{toDayData.pathologyFormNum || 0}}</span> &nbsp;
40
+			标本 <span class="weight">{{toDayData.specimenNum || 0}}</span>&nbsp;
41
+			速冻 <span class="weight">{{toDayData.rapidityNum || 0}}</span>&nbsp;
42
+		</div>
43
+	  <div class="mar-ri-30" *ngIf="toDayData">
44
+	  	今日送出:
45
+	  	申请单 <span class="weight">{{toDayData.sendOutPathologyFormNum || 0}}</span> &nbsp;
46
+	  	标本 <span class="weight">{{toDayData.sendOutSpecimenNum || 0}}</span>&nbsp;
47
+	  	速冻 <span class="weight">{{toDayData.sendOutRapidityNum || 0}}</span>&nbsp;
48
+	  </div>
49
+	</div>
50
+	<div class="tabs">
51
+		<div class="tabs-item">
52
+			<div class="tabs-item-item" [ngClass]="{'activeClass': activeIndex == 0}" (click)="tabClick(0)">交接本</div>
53
+		</div>
54
+		<div class="tabs-btn">
55
+			<button class="btn default" nz-button nzType="primary" nzSize="small" (click)='distributionTab()'>配送清点</button>
56
+		</div>
57
+	</div>
58
+  <!-- 头部 end -->
59
+  <div class="pharmacy-main">
60
+    <div *ngIf="activeIndex==0" class="list-template pharmacy-main__list pharmacy-main__print">
61
+			<div class="list-template__content">
62
+			  <div class="list-template__top" nz-row>
63
+			    <div nz-col nzLg='18' class="list-template__searchBox">
64
+			      <div class="list-template__searchItem">
65
+			        <span class="label">离体时间:</span>
66
+			        <nz-range-picker [(ngModel)]="acceptTime" nzFormat="yyyy-MM-dd HH:mm:ss"
67
+							(ngModelChange)="changeDate($event)"></nz-range-picker>
68
+			      </div>
69
+						<div class="list-template__searchItem">
70
+						  <span class="label">患者:</span>
71
+							<input type="text" class="search-input" [(ngModel)]="deliveryUser" nz-input placeholder="请输入患者" />
72
+<!-- 							<nz-select class="formItem" (nzOnSearch)="changeUserInp($event)"
73
+							  [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择患者"
74
+							  [(ngModel)]="deliveryUser">
75
+							  <ng-container *ngFor="let option of userData">
76
+							    <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
77
+							  </ng-container>
78
+							  <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
79
+							    <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
80
+							  </nz-option>
81
+							</nz-select> -->
82
+						</div>
83
+						<div class="list-template__searchItem">
84
+						  <span class="label">状态:</span>
85
+							<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择状态"
86
+							  [(ngModel)]="status">
87
+							  <ng-container *ngFor="let option of statusData">
88
+							    <nz-option [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
89
+							  </ng-container>
90
+							</nz-select>
91
+						</div>
92
+						<div class="list-template__searchItem">
93
+						  <span class="label">术中快速:</span>
94
+							<nz-radio-group [(ngModel)]="pathologyFormType">
95
+								<label nz-radio nzValue="1">是</label>
96
+								<label nz-radio nzValue="0">否</label>
97
+							</nz-radio-group>
98
+						</div>
99
+			    </div>
100
+			    <div nz-col nzLg="6" class="list-template__btns">
101
+			      <button class="btn default" (click)='search()'>搜索</button>
102
+			      <button class="btn default ml8" (click)='reset()'>重置</button>
103
+			    </div>
104
+			  </div>
105
+			  <div class="list-template__bottom">
106
+			    <nz-table class="list-template__nzTable" [nzData]="listOneData" nzSize="middle" [nzShowPagination]="false"
107
+			      [nzLoading]="loading1">
108
+			      <thead>
109
+			        <tr class="thead">
110
+			          <th>申请单号</th>
111
+								<th>状态</th>
112
+			          <th>患者姓名</th>
113
+			          <th>住院号</th>
114
+			          <th nzWidth="100px">部位</th>
115
+			          <th>标本数</th>
116
+			          <th>申请科室</th>
117
+								<th>离体时间</th>
118
+								<th>固定时间</th>
119
+			          <th>配送人</th>
120
+								<th>配送时间</th>
121
+			          <th nzWidth="80px">操作</th>
122
+			        </tr>
123
+			      </thead>
124
+			      <tbody>
125
+			        <tr *ngFor="let data of listOneData">
126
+			          <td><span *ngIf="data.pathologyFormType==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
127
+								<td>{{ data.status?data.status.name : '-' }}</td>
128
+								<td>{{ data.patientDTO.patientName}}</td>
129
+			          <td>{{ data.patientDTO.residenceNo}}</td>
130
+			          <td>{{ data.takePart}}</td>
131
+			          <td>{{ data.specimenNum}}</td>
132
+			          <td>{{ data.patientDTO?data.patientDTO.department.dept : '-'}}</td>
133
+								<td>{{ data.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
134
+								<td>{{ data.fixationTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
135
+								<td>{{ data.deliveryUserDTO?data.deliveryUserDTO.name : '-' }}</td>
136
+								<td>{{ data.leaveDeptTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
137
+			          <td>
138
+			            <div class="coop">
139
+										<span (click)="oneLook($event,data)">查看</span>
140
+			            </div>
141
+			          </td>
142
+			        </tr>
143
+			      </tbody>
144
+			    </nz-table>
145
+			    <div class="list-template__pagination">
146
+			      <nz-pagination [(nzPageIndex)]="pageOneIndex" [(nzTotal)]="listOneLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
147
+			        (nzPageIndexChange)="getConnectList()" (nzPageSizeChange)="getConnectList()">
148
+			      </nz-pagination>
149
+			    </div>
150
+			  </div>
151
+			</div>
152
+    </div>
153
+
154
+    <div class="pharmacy-main__list pharmacy-main__waitDelivery">
155
+      <div *ngIf="activeIndex==1" class="list-template pharmacy-main__list pharmacy-main__print">
156
+      	<div class="list-template__content">
157
+      	  <div class="list-template__bottom">
158
+      	    <nz-table class="list-template__nzTable" [nzData]="listTwoData" nzSize="middle" [nzShowPagination]="false"
159
+      	      [nzLoading]="loading2">
160
+      	      <thead>
161
+      	        <tr class="thead">
162
+      	          <th>申请单号</th>
163
+      	          <th>患者姓名</th>
164
+      	          <th>住院号</th>
165
+      	          <th>部位</th>
166
+      	          <th>标本数</th>
167
+      	          <th>申请科室</th>
168
+      	          <th>配送人</th>
169
+      	          <th>状态</th>
170
+      	          <th>操作</th>
171
+      	        </tr>
172
+      	      </thead>
173
+      	      <tbody>
174
+      	        <tr *ngFor="let data of listTwoData">
175
+      	         <td><span *ngIf="data.pathologyFormType==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
176
+      	         <td>{{ data.patientDTO?data.patientDTO.patientName : '-' }}</td>
177
+      	         <td>{{ data.patientDTO.patientCode}}</td>
178
+      	         <td>{{ data.takePart}}</td>
179
+      	         <td>{{ data.specimenNum}}</td>
180
+      	         <td>{{ data.patientDTO?data.patientDTO.department.dept : '-'}}</td>
181
+      	         <td>{{ data.deliveryUserDTO?data.deliveryUserDTO.name : '-' }}</td>
182
+      	         <td>{{ data.status?data.status.name:'-' }}</td>
183
+      	         <td>
184
+      	           <div class="coop">
185
+      	         		<span (click)="oneLook($event,data)">查看</span>
186
+      	           </div>
187
+      	         </td>
188
+      	        </tr>
189
+      	      </tbody>
190
+      	    </nz-table>
191
+      	    <div class="list-template__pagination">
192
+      	      <nz-pagination [(nzPageIndex)]="pageTwoIndex" [(nzTotal)]="listTwoLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
193
+      	        (nzPageIndexChange)="getSpeedinessList()" (nzPageSizeChange)="getSpeedinessList()">
194
+      	      </nz-pagination>
195
+      	    </div>
196
+      	  </div>
197
+      	</div>
198
+      </div>
199
+    </div>
200
+
201
+    <div class="pharmacy-main__list pharmacy-main__delivery">
202
+			<div *ngIf="activeIndex==2" class="list-template pharmacy-main__list pharmacy-main__print">
203
+				<div class="list-template__content">
204
+				  <div class="list-template__bottom">
205
+				    <nz-table class="list-template__nzTable" [nzData]="listThreeData" nzSize="middle" [nzShowPagination]="false"
206
+				      [nzLoading]="loading3">
207
+				      <thead>
208
+				        <tr class="thead">
209
+				          <th>包号</th>
210
+				          <th>打包人 | 打包时间</th>
211
+				          <th>申请单数</th>
212
+				          <th>标本数</th>
213
+									<th>配送人 | 配送时间</th>
214
+									<th>接收人 | 接收时间</th>
215
+				          <th>状态</th>
216
+				          <th>操作</th>
217
+				        </tr>
218
+				      </thead>
219
+				      <tbody>
220
+				        <tr *ngFor="let data of listThreeData">
221
+				          <td>{{ data.packCode || '-' }}</td>
222
+									<td>
223
+										<div>{{data.packUserDTO.name }}</div>
224
+										<div>{{data.packTime|date:'yyyy-MM-dd HH:mm' }}</div>
225
+									</td>
226
+				          <td>{{ data.pathologyFormNum }}</td>
227
+				          <td>{{ data.specimenNum }}</td>
228
+				          <td>
229
+				          	<div>{{data.deliveryUserDTO?data.deliveryUserDTO.name:'-' }}</div>
230
+				          	<div>{{data.deliveryTime|date:'yyyy-MM-dd HH:mm' || '-' }}</div>
231
+				          </td>
232
+				          <td>
233
+				          	<div>{{data.receiveUserDTO?data.receiveUserDTO.name:'-' }}</div>
234
+				          	<div>{{data.receiveTime|date:'yyyy-MM-dd HH:mm' || '-' }}</div>
235
+				          </td>
236
+									<td>{{ data.status.name }}</td>
237
+				          <td>
238
+				            <div class="coop">
239
+											<span (click)="threeLook($event,data)">查看标本</span>
240
+											<span (click)="reprint($event,data)">补打</span>
241
+											<span *ngIf="data.status.value==1" (click)="distribution($event,data)">配送</span>
242
+				            </div>
243
+				          </td>
244
+				        </tr>
245
+				      </tbody>
246
+				    </nz-table>
247
+				    <div class="list-template__pagination">
248
+				      <nz-pagination [(nzPageIndex)]="pageThreeIndex" [(nzTotal)]="listThreeLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
249
+				        (nzPageIndexChange)="getPackList()" (nzPageSizeChange)="getPackList()">
250
+				      </nz-pagination>
251
+				    </div>
252
+				  </div>
253
+				</div>
254
+			</div>
255
+    </div>
256
+  </div>
257
+  <!-- 主体部分 end -->
258
+  <!-- <router-outlet></router-outlet> -->
259
+</div>
260
+
261
+<!-- 科室切换提示框 -->
262
+<app-hs-prompt-modal
263
+  [changeShow]="changeShow"
264
+  [closeTime]="closeTime"
265
+  [closeTimeFlag]="closeTimeFlag"
266
+  [show]="hsPromptModalShow"
267
+  (closeModelHs)="closeModelHs($event)"
268
+  (clearModelHs)="clearModelHs($event)"
269
+> 
270
+  <!-- 返回系统按钮 -->
271
+  <!-- 右侧悬浮框 -->
272
+   <div id="fixedMenu" class="fixed" *ngIf="mainRole">
273
+    <div class="right">
274
+      <div class="fixedMenu hujiaozhongxin">
275
+        <div class="menuItems">
276
+          <div class="item">快捷菜单</div>
277
+        </div>
278
+      </div>
279
+      <div class="fixedMenu">
280
+        <div class="menuItems">
281
+          <div
282
+            class="others"
283
+            [ngStyle]="{
284
+              height: showLastItems
285
+                ? mainRole
286
+                  ? 35 * 2 + 'px'
287
+                  : 35 * 1 + 'px'
288
+                : 0
289
+            }"
290
+          >
291
+            <div
292
+              [ngClass]="{ item: true, checked: fixedTab == 'back' }"
293
+              *ngIf="mainRole"
294
+              (click)="checkFixedTab('toSystem')"
295
+            >
296
+              返回系统
297
+            </div>
298
+          </div>
299
+        </div>
300
+        <div class="arrow" *ngIf="!showLastItems" (click)="fixedMenuXiala()">
301
+          <i class="icon_transport transport-xiala2-01"></i>
302
+        </div>
303
+        <div class="arrow" *ngIf="showLastItems" (click)="fixedMenuShangla()">
304
+          <i class="icon_transport transport-shangla-"></i>
305
+        </div>
306
+      </div>
307
+    </div>
308
+    <div
309
+      *ngIf="showLastItems && fixedTab != ''"
310
+      (click)="fixedMenuShangla()"
311
+      class="fixedMark"
312
+    ></div>
313
+  </div>
314
+</app-hs-prompt-modal>
315
+
316
+
317
+<!-- 查看详情 -->
318
+<div class="pathology-box display_flex align-items_center justify-content_flex-center" *ngIf="detailMoadl">
319
+	<div class="pathology-content">
320
+		<div class="title">查看详情
321
+		<i class="icon_transport transport-guanbi" (click)="closeDetailMoadl()"></i></div>
322
+		<div class="content border">
323
+			<div class="content-item boder-right">
324
+				<div class="form-title-box">
325
+					<div class="form-title"><span class="font-weight-500">是否术中快速:</span>{{detailsData.pathologyFormType==1?'是':'否'}}</div>
326
+					<div class="form-title"><span class="font-weight-500">申请单编号:</span>{{detailsData.applyCode}}</div>
327
+					<div class="form-title"><span class="font-weight-500">状态:</span>{{detailsData.status.name}}</div>
328
+					<div class="form-title"><span class="font-weight-500">科室名称:</span>{{detailsData.patientDTO.department.dept}}</div>
329
+				</div>
330
+				<div class="form-title-box">
331
+					<div class="form-title"><span class="font-weight-500">住院号:</span>{{detailsData.patientDTO.patientCode}}</div>
332
+					<div class="form-title"><span class="font-weight-500">患者信息:</span>{{detailsData.patientDTO.patientName}} ({{detailsData.patientDTO.bedNum}}床)</div>
333
+					<div class="form-title"><span class="font-weight-500">年龄:</span>{{detailsData.patientDTO.age||'-'}}岁</div>
334
+				</div>
335
+				
336
+				<div class="form-title-box">
337
+					<div class="form-title"><span class="font-weight-500">检验项目:</span>{{project||'无'}}</div>
338
+				</div>
339
+				
340
+				<div class="form-list">
341
+					<div class="form-title font-weight-500">诊断:</div>
342
+					<div class="indent">
343
+						{{detailsData.diagnose||'无'}}
344
+					</div>
345
+				</div>
346
+				
347
+				<div class="form-list">
348
+					<div class="form-title font-weight-500">病历摘要:</div>
349
+					<div class="indent">{{detailsData.medicalRecords||'无'}}</div>
350
+				</div>
351
+				<div class="form-list">
352
+					<div class="form-title font-weight-500">手术方案:</div>
353
+					<div class="indent">{{detailsData.surgicalPlan||'无'}}</div>
354
+				</div>
355
+
356
+				<div class="form-title-box">
357
+					<div class="form-title"><span class="font-weight-500">标本类型:</span>{{detailsData.specimenType.name||'无'}}</div>
358
+					<div class="form-title"><span class="font-weight-500">标本数量:</span>{{detailsData.specimenNum||'无'}}</div>
359
+					<div class="form-title"><span class="font-weight-500">部位:</span>{{detailsData.takePart||'无'}}</div>
360
+				</div>
361
+				
362
+				<div class="form-title-box">
363
+					<div class="form-title"><span class="font-weight-500">送检医生:</span>{{detailsData.surgeryDoctorDTO?detailsData.surgeryDoctorDTO.name : '-'}}</div>
364
+					<div class="form-title"><span class="font-weight-500">离体时间:</span>{{detailsData.inVitroTime?(detailsData.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</div>
365
+					<div class="form-title"><span class="font-weight-500">固定时间:</span>{{detailsData.fixationTime?(detailsData.fixationTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</div>
366
+				</div>
367
+				
368
+				<div class="form-list">
369
+					<div class="form-title font-weight-500">标本:</div>
370
+					<div class="form-title specimen-list">
371
+						<div *ngFor="let item of specimenList" class="specimen-item-class form-title cursors" (click)="specimenView(item)">
372
+							<span *ngIf="item.partSource && item.partSource.value!=1">{{item.partSource?item.partSource.name:''}}</span>{{item.organ?item.organ.name:''}}{{item.specimenName}}({{item.specimenCode}})
373
+						</div>
374
+					</div>
375
+				</div>
376
+
377
+			</div>
378
+			
379
+			<div class="content-item-right">
380
+				<div class="step-title">病理闭环</div>
381
+				<nz-steps [nzCurrent]="stepLength" nzDirection="vertical" nzSize="small">
382
+					<ng-container *ngFor="let item of pathologyLogs; let index = index">
383
+							<nz-step
384
+								[nzDescription]="tpl"
385
+							>
386
+							</nz-step>
387
+							<ng-template #tpl>
388
+								<div *ngIf="index==pathologyLogs.length-1" class="step-size">
389
+									<div style="color: #49B856;">{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
390
+									<div style="color:#333;">{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto?item.operationUserDto.name:''}}</div>
391
+								</div>
392
+								<div *ngIf="index!=pathologyLogs.length-1" class="step-size">
393
+									<div>{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
394
+									<div>{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto?item.operationUserDto.name:''}}</div>
395
+								</div>
396
+							</ng-template>
397
+						</ng-container>
398
+				</nz-steps>
399
+			</div>
400
+		</div>
401
+		<div class="display_flex justify-content_flex-center bottom-btn">
402
+			<button class="btn btn-right" nz-button nzType="primary" (click)="closeDetailMoadl()">知道了</button>
403
+		</div>
404
+	</div>
405
+</div>
406
+
407
+<!-- 操作成功/失败提示框 -->
408
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
409
+  [info]="promptInfo" (closeModel)="closeModel()"></app-prompt-modal>
410
+	
411
+
412
+<div class="mask-style" *ngIf="isSpinning">
413
+	<nz-spin nzSimple class="spin-style"></nz-spin>
414
+</div>
415
+
416
+<!-- 查看标本 -->
417
+<div class="look">
418
+	<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="specimenViewDialog">
419
+		<div class="modalBody modalBody-ga">
420
+			<div class="title">查看标本<i class="icon_transport transport-guanbi" (click)="closeSpecimenModal()"></i>
421
+			</div>
422
+			<overlay-scrollbars #osComponentRef1 class="content">
423
+				<div class="list-template__bottom">
424
+					<nz-table class="list-template__nzTable" [nzData]="viewData" nzSize="middle" [nzShowPagination]="false"
425
+						[nzLoading]="loading1">
426
+						<thead>
427
+							<tr class="thead">
428
+								<th>标本名称</th>
429
+								<th>编码</th>
430
+								<th>备注</th>
431
+								<th>离体时间</th>
432
+								<th>离体操作人</th>
433
+								<th>固定时间</th>
434
+								<th>固定操作人</th>
435
+							</tr>
436
+						</thead>
437
+						<tbody>
438
+							<tr *ngFor="let data of viewData">
439
+								<td>{{ data.specimenName }}</td>
440
+								<td>{{ data.specimenCode }}</td>
441
+								<td>{{ data.remark ? data.remark : '无' }}</td>
442
+								<td>{{ data.inVitroTime ? (data.inVitroTime|date:'yyyy-MM-dd HH:mm:ss') : '-' }}</td>
443
+								<td>{{ data.inVitroOperator ? data.inVitroOperator.name : '-' }}</td>
444
+								<td>{{ data.fixationTime ? (data.fixationTime|date:'yyyy-MM-dd HH:mm:ss') : '-' }}</td>
445
+								<td>{{ data.fixationOperator ? data.fixationOperator.name : '-' }}</td>
446
+							</tr>
447
+						</tbody>
448
+					</nz-table>
449
+				</div>
450
+			</overlay-scrollbars>
451
+			<div class="display_flex justify-content_flex-center">
452
+				<button class="btn" nz-button nzType="primary" (click)="closeSpecimenModal()">知道了</button>
453
+			</div>
454
+		</div>
455
+	</div>
456
+</div>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1719 - 0
src/app/views/pathology-communication-book/pathology-communication-book.component.less


+ 715 - 0
src/app/views/pathology-communication-book/pathology-communication-book.component.ts

@@ -0,0 +1,715 @@
1
+import { Component, OnInit, ViewChild, OnDestroy } from "@angular/core";
2
+import { MainService } from "../../services/main.service";
3
+import { ActivatedRoute, Router } from "@angular/router";
4
+import { OverlayScrollbarsComponent } from "overlayscrollbars-ngx";
5
+import { startOfDay, format, endOfDay } from "date-fns";
6
+import { ToolService } from 'src/app/services/tool.service';
7
+import { NzMessageService } from "ng-zorro-antd";
8
+import { debounceTime } from 'rxjs/operators';
9
+import { Subject } from 'rxjs';
10
+import { DomSanitizer } from '@angular/platform-browser';
11
+
12
+import {
13
+  FormBuilder,
14
+  Validators,
15
+  FormGroup,
16
+  FormControl,
17
+} from "@angular/forms";
18
+
19
+@Component({
20
+  selector: "app-pathology-communication-book",
21
+  templateUrl: "./pathology-communication-book.component.html",
22
+  styleUrls: ["./pathology-communication-book.component.less"],
23
+})
24
+export class PathologyCommunicationBookComponent implements OnInit, OnDestroy {
25
+  @ViewChild("osComponentRef1", {
26
+    read: OverlayScrollbarsComponent,
27
+    static: false,
28
+  })
29
+  osComponentRef1: OverlayScrollbarsComponent;
30
+  @ViewChild("osComponentRef2", {
31
+    read: OverlayScrollbarsComponent,
32
+    static: false,
33
+  })
34
+  osComponentRef2: OverlayScrollbarsComponent;
35
+  @ViewChild("osComponentRef3", {
36
+    read: OverlayScrollbarsComponent,
37
+    static: false,
38
+  })
39
+  osComponentRef3: OverlayScrollbarsComponent;
40
+  @ViewChild("osComponentRef4", {
41
+    read: OverlayScrollbarsComponent,
42
+    static: false,
43
+  })
44
+  osComponentRef4: OverlayScrollbarsComponent;
45
+  @ViewChild("osComponentRef5", {
46
+    read: OverlayScrollbarsComponent,
47
+    static: false,
48
+  })
49
+  osComponentRef5: OverlayScrollbarsComponent;
50
+  constructor(
51
+	private mainService: MainService,
52
+	public router: Router,
53
+	private route: ActivatedRoute,
54
+	public tool: ToolService,
55
+	private fb: FormBuilder,
56
+	private message: NzMessageService,
57
+	private sanitizer: DomSanitizer,
58
+	) {}
59
+  // 今日药单量
60
+  todayTotal: undefined;
61
+  // 今日已完成
62
+  todayComplete: undefined;
63
+  //手术间数据
64
+  printPharmacyList = []; //数据列表
65
+  printPharmacyIdx = 0; //页码
66
+  printPharmacyTotal = 0; //总数
67
+  printPharmacyFlag = false; //是否查看更多
68
+  printPharmacySearchKey = ""; //搜索的内容
69
+  printPharmacyLoad = false; //按钮的loading
70
+  // 标本间列表
71
+  waitPharmacyList = [];
72
+  waitPharmacyIdx = 0;
73
+  waitPharmacyTotal = 0;
74
+  waitPharmacyFlag = false;
75
+  waitPharmacySearchKey = "";
76
+  waitPharmacyLoad = false;
77
+  // 今日离科列表
78
+  pharmacyList = [];
79
+  pharmacyIdx = 0;
80
+  pharmacyTotal = 0;
81
+  pharmacyFlag = false;
82
+  pharmacySearchKey = "";
83
+  pharmacyLoad = false;
84
+  // 配送中列表
85
+  distributionList = [];
86
+  distributionIdx = 0;
87
+  distributionTotal = 0;
88
+  distributionFlag = false;
89
+  distributionSearchKey = "";
90
+  distributionLoad = false;
91
+  // 已完成列表
92
+  completedList = [];
93
+  completedIdx = 0;
94
+  completedTotal = 0;
95
+  completedFlag = false;
96
+  completedSearchKey = "";
97
+  completedLoad = false;
98
+
99
+	barCode:any; //条码搜索
100
+  // other
101
+  loginUser: any = localStorage.getItem("user")
102
+    ? JSON.parse(localStorage.getItem("user")).user
103
+    : null; //登录人信息
104
+
105
+  logTimer = null; //定时器
106
+  logTime = 0; //自动刷新秒数
107
+  logTimeConst = 60; //自动刷新秒数
108
+
109
+  time = new Date().getTime(); // 时间戳
110
+  timer = null; // 时间定时器
111
+	showDropdown:boolean = false;
112
+	relevanceModal:boolean = false //关联标本和手术室
113
+	validateForm: FormGroup; //关联标本和手术室表单
114
+	validateVerificationForm: FormGroup; //核验标本
115
+	validateConnectForm: FormGroup; //核验标本
116
+	specimenData:any = []; //标本间数据
117
+	operationData:any = []; //手术间数据
118
+	fixationModal:boolean = false //标本接收固定
119
+	verificationMoadl:boolean = false //标本核验
120
+	specimenCode:any; //标本条码
121
+	listOneData:any=[];
122
+	listOneLength:any;
123
+	pageOneIndex:any = 1;
124
+	pageSize:any = 10;
125
+	listTwoData:any=[];
126
+	listTwoLength:any;
127
+	pageTwoIndex:any = 1;
128
+	listThreeData:any=[];
129
+	listThreeLength:any;
130
+	pageThreeIndex:any = 1;
131
+	loading1:boolean = false;
132
+	loading2:boolean = false;
133
+	loading3:boolean = false;
134
+	loading4:boolean = false;
135
+	loading5:boolean = false;
136
+	fixativeData:any = []; //固体液类型
137
+	hosId:any;
138
+	userId:any;
139
+	detailsData:any;
140
+	isSpinning:boolean = false; //全屏加载状态
141
+	codeData:any = []; //标本条码数据
142
+	btnInfoLoading :boolean = false; //标本加固加载
143
+	activeIndex:any = 0; //tabs选择状态
144
+	changeInpSubject = new Subject(); //防抖
145
+	changeInpSubjectUser = new Subject(); //防抖
146
+	changeInpSubjectSpecimen = new Subject(); //防抖
147
+	changeInpSubjectDepartment = new Subject(); //防抖
148
+	pathologyFormType:any = null; //术中快速
149
+	status:any; //状态
150
+	deliveryUser:any //配送人
151
+	userData:any = []; //患者数据
152
+	statusData:any = []; //状态数据
153
+	isLoading:boolean = false;
154
+	listDetailMoadl:boolean = false; //详情弹框
155
+	department:any = []; //科室数据
156
+	hospital:any = []; //院区数据
157
+	distributionName:any;
158
+	businessType:any = null;
159
+	multiModal:boolean = false;
160
+	specimenMultiCode:any = null;
161
+	codeMultiData:any=[];
162
+	errorMultiMsg:any = null;
163
+	connectModal:boolean = false; //标本交接弹框
164
+	receptionModal:boolean = false; //标本接收弹框
165
+	deptId:any = null;
166
+	detailMoadl:boolean = false;
167
+	rowData:any = null; //table选中数据
168
+	toDayData:any = null;
169
+	toDayTime:any = null;
170
+	backType:any = 'list';
171
+	mainRole:any = false;
172
+	loginUserDeptId: number = JSON.parse(localStorage.getItem("user")).user.dept
173
+	  .id; //登录人所属科室
174
+  ngOnDestroy() {
175
+    clearTimeout(this.timer);
176
+    clearTimeout(this.logTimer);
177
+		clearTimeout(this.timer);
178
+		clearInterval(this.toDayTime)
179
+  }
180
+
181
+  ngOnInit() {
182
+		// this.changeInpSubject.pipe(debounceTime(500)).subscribe((v) => {
183
+		//   this.searchSpecimenData(v[0])
184
+		// });
185
+		this.changeInpSubjectSpecimen.pipe(debounceTime(100)).subscribe((v) => {
186
+		  this.searchSpecimen(v[0])
187
+		});
188
+		// this.changeInpSubjectUser.pipe(debounceTime(500)).subscribe((v) => {
189
+		// 	this.isLoading = true
190
+		//   this.getUserData(v[0])
191
+		// });
192
+		this.hosId = this.tool.getCurrentHospital().id;
193
+		this.userId = this.tool.getCurrentUserId()
194
+		this.deptId = this.tool.getCurrentUserDept().id
195
+		this.getConnectList()
196
+		if(this.route.snapshot.queryParams && this.route.snapshot.queryParams.type){
197
+			this.backType = this.route.snapshot.queryParams.type
198
+		}
199
+		// this.getUserData('')
200
+		this.getToday()
201
+		if(this.backType=='list'){
202
+			this.changeKs();
203
+		}
204
+		this.getStatusDic()
205
+		clearInterval(this.toDayTime)
206
+		this.toDayTime = setInterval(_=>{
207
+			this.getToday()
208
+		},60000)
209
+  }
210
+
211
+	//tab切换
212
+	tabClick(type){
213
+		this.activeIndex = type
214
+		localStorage.setItem("pathologyActiveIndex",type)
215
+		if(type==0){
216
+			this.getConnectList()
217
+		}
218
+	}
219
+	
220
+	// 获取状态字典
221
+	getStatusDic(){
222
+		this.mainService.getDictionary("list", "pathology_form_status").subscribe((res) => {
223
+			this.statusData = res
224
+		});
225
+	}
226
+	
227
+	// 获取今日接收数据
228
+	getToday(){
229
+		this.mainService
230
+		  .pathologyToday({
231
+				deptId:this.deptId,
232
+				platform:'pathologyHandoverBook'
233
+			})
234
+		  .subscribe((data:any) => {
235
+		    this.toDayData = data.data
236
+		  });
237
+	}
238
+	
239
+	//配送人搜索
240
+	changeUserInp(e){
241
+		this.changeInpSubjectUser.next([e]);
242
+	}
243
+
244
+	// 获取配送人
245
+	getUserData(e){
246
+		let query={
247
+			idx: 0,
248
+			sum: 10,
249
+			user: {
250
+			  name: e,
251
+			},
252
+		}
253
+		this.mainService
254
+		.getFetchDataList("data", "user", query)
255
+		.subscribe((res) => {
256
+			this.isLoading = false
257
+			this.userData = res.list
258
+		});
259
+	}
260
+
261
+	// 搜索
262
+	search() {
263
+	  this.pageOneIndex = 1;
264
+	  this.getConnectList();
265
+	}
266
+	// 重置
267
+	reset() {
268
+	  this.pageOneIndex = 1;
269
+		this.status = null;
270
+		this.pathologyFormType = null;
271
+		this.deliveryUser = null;
272
+	  this.getConnectList();
273
+	}
274
+	// 交接本数据
275
+	getConnectList() {
276
+	  var that = this;
277
+	  let data = {
278
+	    idx: that.pageOneIndex - 1,
279
+	    sum: that.pageSize,
280
+	    pathologyForm: {
281
+	      startTime: this.startDate,
282
+	  		endTime: this.endDate,
283
+				surgeryDeptId:this.deptId,
284
+				keyWords:this.deliveryUser,
285
+				operationType:'pathologyHandoverBookList',
286
+				status:{
287
+					id:this.status
288
+				},
289
+				pathologyFormType:this.pathologyFormType
290
+	    },
291
+	  };
292
+	  this.loading1 = true;
293
+	  that.mainService
294
+	    .getFetchDataList("data", "pathologyForm", data)
295
+	    .subscribe((data) => {
296
+	      this.loading1 = false;
297
+	      that.listOneData = data.list;
298
+	      that.listOneLength = data.totalNum;
299
+	    });
300
+	}
301
+
302
+	// 查看
303
+	project:any = [];
304
+	oneLook(e,data){
305
+		this.isSpinning = true
306
+		this.mainService.getFetchData("data", "pathologyForm", data.id)
307
+		.subscribe((data) => {
308
+			this.isSpinning = false
309
+			this.detailMoadl = true
310
+			// this.distributionModal = true
311
+			this.detailsData = data.data
312
+		  this.specimenList = data.data.pathologySpecimenDTOList||[]
313
+			this.pathologyLogs = data.data.formLogDTOS
314
+			this.stepLength = this.pathologyLogs.length
315
+			if(this.detailsData.pathologyInspectDTOS){
316
+				this.project = this.detailsData.pathologyInspectDTOS.map(i=>{
317
+					return i.inspectProject.name
318
+				})
319
+				this.project = this.project.join('、')
320
+			}
321
+		});
322
+	}
323
+
324
+	// 配送清点
325
+	distributionTab(){
326
+		this.batchNo = localStorage.getItem("bookBatchNo")
327
+		if(this.batchNo){
328
+			localStorage.setItem("scanCodeData",'')
329
+			localStorage.setItem("checkType",'pathologyHandoverBook')
330
+			this.router.navigateByUrl(`/pathologyCheck?batchNo=${this.batchNo}`);
331
+		}else{
332
+			this.mainService.generateBatchNumber()
333
+			.subscribe((res:any) =>{
334
+				this.batchNo = res.data
335
+				localStorage.setItem("bookBatchNo",res.data)
336
+				localStorage.setItem("scanCodeData",'')
337
+				localStorage.setItem("checkType",'pathologyHandoverBook')
338
+				this.router.navigateByUrl(`/pathologyCheck?batchNo=${this.batchNo}`);
339
+			})
340
+		}
341
+	}
342
+	
343
+	// 关闭查看标本
344
+	closeSpecimenModal(){
345
+		this.specimenViewDialog = false
346
+	}
347
+	
348
+	// 查看标本
349
+	specimenViewDialog:any = false;
350
+	viewData:any = [];
351
+	specimenItem:any;
352
+	specimenView(item){
353
+		this.viewData = []
354
+		this.specimenViewDialog = true
355
+		this.specimenItem = item;
356
+		this.viewData.push(item)
357
+	}
358
+	
359
+	// 获取院区
360
+	getHospitalData(){
361
+		let arr = this.tool.getHospitalList().filter(i=>i.parent==undefined)
362
+		this.hospital = arr
363
+		// let data = {
364
+		//   idx: 0,
365
+		//   sum: 9999,
366
+		// 	hospital:{
367
+		// 		selectType:'level1'
368
+		// 	}
369
+		// };
370
+		// this.mainService
371
+		//   .getFetchDataList("data", "hospital", data)
372
+		//   .subscribe((res) => {
373
+		//     this.hospital = res.list;
374
+		//   });
375
+	}
376
+
377
+	// 选择院区
378
+	hospitalId:any=null;
379
+	changeHospDate(e){
380
+		this.validateForm.controls.department.setValue(null)
381
+		this.hospitalId = e
382
+		this.getDepartmentData('',e)
383
+	}
384
+
385
+	// 获取科室
386
+	isDeptLoading:boolean = false;
387
+	getDepartmentData(e,hospital){
388
+		// this.mainService.getDictionary("list", "dept_type").subscribe((res2) => {
389
+			// let item = res2.find(i=>i.name=='检验科室')
390
+			let data = {
391
+			  idx: 0,
392
+			  sum: 999,
393
+			  department: {
394
+					dept:e,
395
+			    hospital: { id: this.hospitalId || "" },
396
+			    type: {id:null},
397
+			  },
398
+			};
399
+			this.mainService
400
+			  .getFetchDataList("data", "department", data)
401
+			  .subscribe((res) => {
402
+					this.isDeptLoading = false
403
+			    this.department = res.list;
404
+			  });
405
+		// });
406
+	}
407
+
408
+	// 接收时间
409
+	startDate:any = format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
410
+	endDate:any = format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
411
+	acceptTime:any = [this.startDate,this.endDate];
412
+	changeDate(result){
413
+		if(result.length>0){
414
+			this.startDate = format(result[0], 'yyyy-MM-dd' +' '+'00:00:00');
415
+			this.endDate = format(result[1], 'yyyy-MM-dd' +' '+'23:59:59');
416
+			this.acceptTime = [this.startDate,this.endDate]
417
+		}else{
418
+			this.startDate = null;
419
+			this.endDate = null;
420
+			this.acceptTime = []
421
+		}
422
+	}
423
+
424
+	// 标本条码搜索
425
+	searchMsg:any = null
426
+	batchNo:any = null;
427
+	scanCodeData:any = null;
428
+	dataType:any = null;
429
+	searchSpecimen(e){
430
+		if(!e){
431
+			return
432
+		}
433
+		if(e.length < 10) {
434
+			return
435
+		}
436
+		this.isSpinning = true
437
+		this.batchNo = localStorage.getItem("bookBatchNo")
438
+		if(this.batchNo){
439
+			let data={
440
+				barcode:e,
441
+				deptId:this.deptId,
442
+				batchNo:this.batchNo,
443
+				platform:'pathologyHandoverBook',
444
+			}
445
+			this.mainService.pathologyScanCode(data)
446
+			.subscribe((res:any) => {
447
+				this.isSpinning = false
448
+				if(res.status==200){
449
+					localStorage.setItem("scanCodeData",JSON.stringify(res))
450
+					localStorage.setItem("dataType",res.dataType)
451
+					localStorage.setItem("checkType",'pathologyHandoverBook')
452
+					this.router.navigateByUrl(`/pathologyCheck?batchNo=${this.batchNo}&businessType=connect`);
453
+					this.searchMsg = null
454
+				}else{
455
+					this.barCode = null
456
+					this.searchMsg = res.msg
457
+				}
458
+			})
459
+		}else{
460
+			this.mainService.generateBatchNumber()
461
+			.subscribe((res1:any) => {
462
+				if(res1.status==200){
463
+					this.batchNo = res1.data
464
+					localStorage.setItem("bookBatchNo",res1.data)
465
+					let data={
466
+						barcode:e,
467
+						deptId:this.deptId,
468
+						batchNo:this.batchNo,
469
+						platform:'pathologyHandoverBook',
470
+					}
471
+					this.mainService.pathologyScanCode(data)
472
+					.subscribe((res:any) => {
473
+						this.isSpinning = false
474
+						if(res.status==200){
475
+							localStorage.setItem("scanCodeData",JSON.stringify(res))
476
+							localStorage.setItem("dataType",res.dataType)
477
+							localStorage.setItem("checkType",'pathologyHandoverBook')
478
+							this.router.navigateByUrl(`/pathologyCheck?batchNo=${this.batchNo}&businessType=connect`);
479
+							this.searchMsg = null
480
+						}else{
481
+							this.barCode = null
482
+							this.searchMsg = res.msg
483
+						}
484
+					})
485
+				}
486
+			})
487
+		}
488
+	}
489
+	
490
+	// 获取标本接收数据
491
+	pageReceptionIndex:any = 1;
492
+	listReceptionLength:any = 0;
493
+	tableLoading:any = false;
494
+	otherData:any=null;
495
+	getJsData(type){
496
+		let data = {
497
+		  idx: this.pageReceptionIndex-1,
498
+		  sum: this.pageSize,
499
+		  pathologyForm: {
500
+		    batchNo:this.batchNo,
501
+		  },
502
+		};
503
+		this.tableLoading = true;
504
+		this.mainService
505
+		  .getFetchDataList("data", "pathologyForm", data)
506
+		  .subscribe((res) => {
507
+				this.tableLoading = false;
508
+				if(type==1){
509
+					this.fixationModal = true
510
+					setTimeout(_=>{
511
+						document.getElementById('specimen').focus();
512
+					},200)
513
+				}else if(type==3){
514
+					this.fixationModal = true
515
+					this.multiModal = true
516
+					setTimeout(_=>{
517
+						document.getElementById('multiSpecimen').focus();
518
+					},200)
519
+				}
520
+		    this.codeData = res.list;
521
+				this.otherData = res.otherData;
522
+				this.listReceptionLength = res.totalNum;
523
+		  });
524
+	}
525
+
526
+	getNewDept(){
527
+		let postData = {
528
+		  currentHosId: this.hosId,
529
+		  loginType: "PC",
530
+		};
531
+		this.mainService.changeHospital(postData).subscribe((result) => {
532
+		  if (result.status == 200) {
533
+		    let dataObj = {
534
+		      user: {
535
+		        dept: {
536
+		          id: this.validateForm.value.specimen,
537
+		        },
538
+		        id: JSON.parse(localStorage.getItem("user")).user.id,
539
+		      },
540
+		    };
541
+		    this.mainService
542
+		      .coopData("updData", "user", dataObj)
543
+		      .subscribe((data) => {
544
+		        if (data.status == 200) {
545
+		          this.getCurrentUserNow();
546
+		        }
547
+		      });
548
+		  }
549
+		});
550
+	}
551
+
552
+	// 获取当前用户信息
553
+	getCurrentUserNow() {
554
+	  this.mainService.getCurrentUser1().subscribe((data:any) => {
555
+	    if (data["status"] == 200) {
556
+				this.loginUser = data.data
557
+	      let user = JSON.parse(localStorage.getItem("user"));
558
+	      user.user.dept = data["data"].dept;
559
+	      user.user.currentHospital = data["data"].currentHospital;
560
+	      localStorage.setItem("user", JSON.stringify(user));
561
+	    }
562
+	  });
563
+	}
564
+
565
+	// 成功/失败提示框
566
+	closeModel(){
567
+		
568
+	}
569
+
570
+	// 监听标本条码
571
+	specimenCodeChange(e){
572
+		this.businessType = 'connect'
573
+		this.changeInpSubjectSpecimen.next([e]);
574
+	}
575
+
576
+	pathologyLogs:any=[];
577
+	specimenList:any=[]
578
+	stepLength:any = 0;
579
+	closeDetailMoadl(){
580
+		this.detailMoadl = false
581
+	}
582
+
583
+  // 退出
584
+  logOut(): void {
585
+    // 假退出
586
+    let hospital = this.tool.getCurrentHospital();
587
+    if(hospital){
588
+      this.router.navigate(["login", hospital.id]);
589
+    }else{
590
+      this.router.navigateByUrl("login");
591
+    }
592
+    localStorage.removeItem("user");
593
+    localStorage.removeItem("menu");
594
+    localStorage.removeItem("index");
595
+		localStorage.removeItem("scanCodeData");
596
+		localStorage.removeItem("dataType");
597
+		localStorage.removeItem("pathologyActiveIndex");
598
+    // 假退出
599
+    this.mainService.logOut().subscribe((data) => {
600
+      if (data.status == 200) {
601
+        if(hospital){
602
+          this.router.navigate(["login", hospital.id]);
603
+        }else{
604
+          this.router.navigateByUrl("login");
605
+        }
606
+        localStorage.removeItem("user");
607
+        localStorage.removeItem("menu");
608
+        localStorage.removeItem("index");
609
+				localStorage.removeItem("scanCodeData");
610
+				localStorage.removeItem("dataType");
611
+				localStorage.removeItem("pathologyActiveIndex");
612
+      }
613
+    });
614
+
615
+  }
616
+
617
+  // 右侧菜单
618
+  showLastItems: boolean = false;
619
+  // 下拉
620
+  fixedMenuXiala() {
621
+    this.showLastItems = true;
622
+  }
623
+
624
+  // 上拉
625
+  fixedMenuShangla() {
626
+    this.showLastItems = false;
627
+  }
628
+	
629
+	// 回到系统管理
630
+	toMain() {
631
+	  this.router.navigateByUrl("main");
632
+	}
633
+	
634
+  // 切换右侧菜单Tab
635
+  fixedTab: string = "";
636
+  checkFixedTab(type: string) {
637
+    if (type == "toSystem") {
638
+      this.router.navigateByUrl("main");
639
+    }
640
+    if (this.fixedTab == type) {
641
+      this.fixedTab = "";
642
+    } else {
643
+      this.fixedTab = type;
644
+    }
645
+  }
646
+	
647
+  //科室切换
648
+  changeShow = true;
649
+  closeTime = 3;
650
+  closeTimeFlag = 0;
651
+  hsPromptModalShow: boolean = false; //科室切换提示框是否展示
652
+  timerCloseTime = null;
653
+  deptDisplay = 1; //护士端是否显示可以别名,1是显示科室名称,2是显示科室别名
654
+  //子传父接收
655
+  closeModelHs(e) {
656
+    this.hsPromptModalShow = JSON.parse(e).show;
657
+    this.changeShow = JSON.parse(e).changeShow;
658
+		setTimeout(_=>{
659
+			document.getElementById('Binput').focus();
660
+		},200)
661
+  }
662
+  //子传父接收
663
+  clearModelHs(e) {
664
+    if (JSON.parse(e).clear === true) {
665
+      clearInterval(this.timerCloseTime);
666
+    }
667
+    this.changeShow = JSON.parse(e).changeShow;
668
+		setTimeout(_=>{
669
+			document.getElementById('Binput').focus();
670
+		},200)
671
+  }
672
+  // 头部切换科室
673
+  changeKsNow() {
674
+    this.hsPromptModalShow = true;
675
+    clearInterval(this.timerCloseTime);
676
+    this.changeShow = false;
677
+  }
678
+  // 切换科室
679
+  changeKs() {
680
+    this.hsPromptModalShow = true;
681
+    // (1)	当用户设置为正数时,用户必须查看此窗体指定秒数。
682
+    // (2)	当用户设置为负数时,用户可点击知道了也可倒计时自动关闭。
683
+    // (3)	如果用户填写0则为无自动关闭和强制查看时间。
684
+    if (this.closeTimeFlag === 0) {
685
+      return;
686
+    }
687
+    this.closeTime = Math.abs(this.closeTimeFlag);
688
+    clearInterval(this.timerCloseTime);
689
+    this.timerCloseTime = setInterval(() => {
690
+      this.closeTime = Math.max(--this.closeTime, 0);
691
+      if (this.closeTime === 0) {
692
+        if (this.closeTimeFlag <= 0) {
693
+          this.hsPromptModalShow = false;
694
+        }
695
+        clearInterval(this.timerCloseTime);
696
+      }
697
+    }, 1000);
698
+  }
699
+
700
+	promptModalShow:boolean = false;
701
+	promptContent:any = null;
702
+	ifSuccess:any = null;
703
+	promptInfo:any = null;
704
+	// 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
705
+	showPromptModal(con, success, promptInfo?) {
706
+	  this.promptModalShow = false;
707
+	  this.promptContent = con;
708
+	  this.ifSuccess = success;
709
+	  this.promptInfo = promptInfo;
710
+	  setTimeout(() => {
711
+	    this.promptModalShow = true;
712
+	  }, 100);
713
+	}
714
+}
715
+

+ 18 - 0
src/app/views/pathology-communication-book/pathology-communication-book.module.ts

@@ -0,0 +1,18 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+
4
+import { PathologyCommunicationBookRoutingModule } from './pathology-communication-book-routing.module';
5
+import { ShareModule } from 'src/app/share/share.module';
6
+import { PathologyCommunicationBookComponent } from './pathology-communication-book.component';
7
+import { DragModule } from 'src/app/directives/drag/drag.module';
8
+
9
+@NgModule({
10
+  declarations: [PathologyCommunicationBookComponent],
11
+  imports: [
12
+		DragModule,
13
+    CommonModule,
14
+    PathologyCommunicationBookRoutingModule,
15
+    ShareModule
16
+  ]
17
+})
18
+export class PathologyCommunicationBookModule { }

+ 47 - 5
src/app/views/pathology/pathology.component.html

@@ -76,7 +76,7 @@
76 76
 						</div>
77 77
 						<div class="list-template__searchItem">
78 78
 						  <span class="label">术中快速:</span>
79
-							<nz-radio-group [(ngModel)]="intraoperativeRapidity">
79
+							<nz-radio-group [(ngModel)]="pathologyFormType">
80 80
 								<label nz-radio nzValue="1">是</label>
81 81
 								<label nz-radio nzValue="0">否</label>
82 82
 							</nz-radio-group>
@@ -106,7 +106,7 @@
106 106
 			      </thead>
107 107
 			      <tbody>
108 108
 			        <tr *ngFor="let data of listOneData">
109
-			          <td><span *ngIf="data.intraoperativeRapidity==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
109
+			          <td><span *ngIf="data.pathologyFormType==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
110 110
 								<td>{{ data.patientDTO?data.patientDTO.patientName : '-' }}</td>
111 111
 			          <td>{{ data.patientDTO.patientCode}}</td>
112 112
 			          <td>{{ data.takePart}}</td>
@@ -153,7 +153,7 @@
153 153
       	      </thead>
154 154
       	      <tbody>
155 155
       	        <tr *ngFor="let data of listTwoData">
156
-      	         <td><span *ngIf="data.intraoperativeRapidity==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
156
+      	         <td><span *ngIf="data.pathologyFormType==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
157 157
       	         <td>{{ data.patientDTO?data.patientDTO.patientName : '-' }}</td>
158 158
       	         <td>{{ data.patientDTO.patientCode}}</td>
159 159
       	         <td>{{ data.takePart}}</td>
@@ -324,7 +324,7 @@
324 324
 		<div class="content border">
325 325
 			<div class="content-item boder-right">
326 326
 				<div class="form-title-box">
327
-					<div class="form-title"><span class="font-weight-500">是否术中快速:</span>{{detailsData.intraoperativeRapidity==1?'是':'否'}}</div>
327
+					<div class="form-title"><span class="font-weight-500">是否术中快速:</span>{{detailsData.pathologyFormType==1?'是':'否'}}</div>
328 328
 					<div class="form-title"><span class="font-weight-500">申请单编号:</span>{{detailsData.applyCode}}</div>
329 329
 					<div class="form-title"><span class="font-weight-500">状态:</span>{{detailsData.status.name}}</div>
330 330
 					<div class="form-title"><span class="font-weight-500">科室名称:</span>{{detailsData.patientDTO.department.dept}}</div>
@@ -370,7 +370,7 @@
370 370
 				<div class="form-list">
371 371
 					<div class="form-title font-weight-500">标本:</div>
372 372
 					<div class="form-title specimen-list">
373
-						<div *ngFor="let item of specimenList" class="specimen-item-class">
373
+						<div *ngFor="let item of specimenList" class="specimen-item-class form-title cursors" (click)="specimenView(item)">
374 374
 							<span *ngIf="item.partSource && item.partSource.value!=1">{{item.partSource?item.partSource.name:''}}</span>{{item.organ?item.organ.name:''}}{{item.specimenName}}({{item.specimenCode}})
375 375
 						</div>
376 376
 					</div>
@@ -415,6 +415,48 @@
415 415
 	<nz-spin nzSimple class="spin-style"></nz-spin>
416 416
 </div>
417 417
 
418
+<!-- 查看标本 -->
419
+<div class="look">
420
+	<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="specimenViewDialog">
421
+		<div class="modalBody modalBody-ga">
422
+			<div class="title">查看标本<i class="icon_transport transport-guanbi" (click)="closeSpecimenModal()"></i>
423
+			</div>
424
+			<overlay-scrollbars #osComponentRef1 class="content">
425
+				<div class="list-template__bottom">
426
+					<nz-table class="list-template__nzTable" [nzData]="viewData" nzSize="middle" [nzShowPagination]="false"
427
+						[nzLoading]="loading1">
428
+						<thead>
429
+							<tr class="thead">
430
+								<th>标本名称</th>
431
+								<th>编码</th>
432
+								<th>备注</th>
433
+								<th>离体时间</th>
434
+								<th>离体操作人</th>
435
+								<th>固定时间</th>
436
+								<th>固定操作人</th>
437
+							</tr>
438
+						</thead>
439
+						<tbody>
440
+							<tr *ngFor="let data of viewData">
441
+								<td>{{ data.specimenName }}</td>
442
+								<td>{{ data.specimenCode }}</td>
443
+								<td>{{ data.remark ? data.remark : '无' }}</td>
444
+								<td>{{ data.inVitroTime ? (data.inVitroTime|date:'yyyy-MM-dd HH:mm:ss') : '-' }}</td>
445
+								<td>{{ data.inVitroOperator ? data.inVitroOperator.name : '-' }}</td>
446
+								<td>{{ data.fixationTime ? (data.fixationTime|date:'yyyy-MM-dd HH:mm:ss') : '-' }}</td>
447
+								<td>{{ data.fixationOperator ? data.fixationOperator.name : '-' }}</td>
448
+							</tr>
449
+						</tbody>
450
+					</nz-table>
451
+				</div>
452
+			</overlay-scrollbars>
453
+			<div class="display_flex justify-content_flex-center">
454
+				<button class="btn" nz-button nzType="primary" (click)="closeSpecimenModal()">知道了</button>
455
+			</div>
456
+		</div>
457
+	</div>
458
+</div>
459
+
418 460
 <!-- 补打 -->
419 461
 <app-dialog-delete [delModal]="printModal" (hideDelModalEvent)="hidePrintModal()" [btnLoading]="parintLoading"
420 462
   (confirmDelEvent)="confirmPrintDel()" [content]="'您确认要重新打印条码吗?'"></app-dialog-delete>

+ 227 - 1
src/app/views/pathology/pathology.component.less

@@ -781,6 +781,8 @@
781 781
 							.specimen-item-class{
782 782
 								margin-right: 40px;
783 783
 								color:#333;
784
+								cursor: pointer;
785
+								text-decoration: underline;
784 786
 							}
785 787
 						}
786 788
 						.indent{
@@ -831,6 +833,7 @@
831 833
 				}
832 834
 				.boder-right{
833 835
 					border-right: 1px solid #e5e9ed;
836
+					overflow-y: auto;
834 837
 				}
835 838
 				.specimen-item{
836 839
 					display: flex;
@@ -1195,4 +1198,227 @@
1195 1198
         margin-right: 40px;
1196 1199
       }
1197 1200
     }
1198
-  }
1201
+  }
1202
+	
1203
+	.look{
1204
+		.save {
1205
+		  position: fixed;
1206
+		  left: 0;
1207
+		  top: 0;
1208
+		  width: 100%;
1209
+		  height: 100%;
1210
+		  background: rgba(0, 0, 0, 0.4);
1211
+		  z-index: 9999;
1212
+			.modalBody-ga{
1213
+				width: 80% !important;
1214
+				.list-template__searchBox{
1215
+					margin-top: 10px;
1216
+				}
1217
+				.ant-select{
1218
+					width: 20%;
1219
+				}
1220
+			}
1221
+		  .modalBody {
1222
+		    width: 350px;
1223
+		    background: #fff;
1224
+		    border-radius: 5px;
1225
+		    padding: 10px 20px;
1226
+		    color: #333;
1227
+		
1228
+		    .title {
1229
+		      width: 100%;
1230
+		      text-align: center;
1231
+		      font-size: 18px;
1232
+		      position: relative;
1233
+		
1234
+		      i {
1235
+		        position: absolute;
1236
+		        right: 0;
1237
+		        top: 0;
1238
+		        font-size: 20px;
1239
+		        color: #666;
1240
+		        cursor: pointer;
1241
+		        padding: 0 5px;
1242
+		      }
1243
+		    }
1244
+		
1245
+		    .content {
1246
+		      width: 100%;
1247
+		      height: 117px;
1248
+		      background: #f9fafb;
1249
+		      border: 1px solid #e5e9ed;
1250
+		      border-radius: 5px;
1251
+		      overflow: hidden;
1252
+		      margin-top: 12px;
1253
+		
1254
+		      div {
1255
+		        text-align: center;
1256
+		        margin: 0;
1257
+		
1258
+		        &.icon {
1259
+		          margin-top: 17px;
1260
+		
1261
+		          i {
1262
+		            color: #34b349;
1263
+		            font-size: 30px !important;
1264
+		
1265
+		            &.transport-wenhao {
1266
+		              color: #f5a523;
1267
+		            }
1268
+		
1269
+		            &.transport-shibai {
1270
+		              color: #ff3a52;
1271
+		            }
1272
+		          }
1273
+		        }
1274
+		
1275
+		        &.defeat {
1276
+		          color: #333;
1277
+		          font-size: 18px;
1278
+		        }
1279
+		
1280
+		        &:nth-child(3) {
1281
+		          font-size: 14px;
1282
+		          color: #666;
1283
+		        }
1284
+		      }
1285
+		    }
1286
+		
1287
+		    button {
1288
+		      margin-top: 10px;
1289
+		
1290
+		      &.btn {
1291
+		        margin-left: 8px;
1292
+		      }
1293
+		    }
1294
+		  }
1295
+		
1296
+		  // 新增
1297
+		  &.add {
1298
+		    .modalBody {
1299
+		      width: 420px;
1300
+		      height: auto;
1301
+		
1302
+		      .content {
1303
+		        width: 100%;
1304
+		        height: auto;
1305
+		        padding: 19px 14px 0 14px;
1306
+		        max-height: 500px;
1307
+		        overflow-y: auto;
1308
+						
1309
+						.ant-select{
1310
+							width: 100%;
1311
+						}
1312
+						.ant-calendar-picker{
1313
+							width: 100% !important;
1314
+						}
1315
+						.list-template__bottom {
1316
+						  background: #f9fafb;
1317
+						  border: 1px solid #e5e9ed;
1318
+						  border-radius: 8px;
1319
+						  padding-bottom: 56px;
1320
+						  position: relative;
1321
+						  .list-template__nzTable {
1322
+						    padding: 16px 16px 0;
1323
+						
1324
+						    .thead {
1325
+						      background-image: linear-gradient(to right, @bg-start, @bg-end);
1326
+						
1327
+						      th {
1328
+						        background: transparent;
1329
+						        color: #fff;
1330
+						        text-align: center;
1331
+						      }
1332
+						    }
1333
+						
1334
+						    .ant-table-body {
1335
+						      border-bottom: 1px solid #e5e9ed;
1336
+						    }
1337
+						
1338
+						    .ant-table-tbody {
1339
+						      tr {
1340
+						        text-align: center;
1341
+						        color: #333;
1342
+						
1343
+						        td {
1344
+						          border: none;
1345
+						
1346
+						          &.tab_hover:hover{
1347
+						            text-decoration: underline;
1348
+						            cursor: pointer;
1349
+						          }
1350
+						
1351
+						          .coop {
1352
+						            button{
1353
+						              color: #333;
1354
+						            }
1355
+						            span,button {
1356
+						              display: inline-block;
1357
+						              padding: 0 8px;
1358
+						              cursor: pointer;
1359
+						              position: relative;
1360
+						
1361
+						              &::after {
1362
+						                content: "|";
1363
+						                position: absolute;
1364
+						                top: 0;
1365
+						                right: 0;
1366
+						              }
1367
+						
1368
+						              &:hover,
1369
+						              &:active {
1370
+						                color: @primary-color;
1371
+						              }
1372
+						
1373
+						              &:nth-last-child(1) {
1374
+						                &::after {
1375
+						                  content: "";
1376
+						                }
1377
+						              }
1378
+						            }
1379
+						          }
1380
+						        }
1381
+						      }
1382
+						    }
1383
+						  }
1384
+						  .list-template__pagination {
1385
+						    height: 56px;
1386
+						    display: flex;
1387
+						    align-items: center;
1388
+						    position: absolute;
1389
+						    right: 8px;
1390
+						  }
1391
+						}
1392
+						
1393
+		        .addForm {
1394
+		          .ant-form-item {
1395
+		            margin-bottom: 14px;
1396
+		
1397
+		            .ant-form-item-label {
1398
+		              line-height: 14px;
1399
+		              text-align: left;
1400
+		            }
1401
+		          }
1402
+		        }
1403
+		
1404
+		        .editForm {
1405
+		          .ant-form-item {
1406
+		            margin-bottom: 14px;
1407
+		
1408
+		            .ant-form-item-label {
1409
+		              line-height: 0;
1410
+		              text-align: left;
1411
+		            }
1412
+		          }
1413
+		        }
1414
+		      }
1415
+		
1416
+		      button {
1417
+		        &:nth-child(1) {
1418
+		          margin-right: 20px;
1419
+		        }
1420
+		      }
1421
+		    }
1422
+		  }
1423
+		}
1424
+	}

+ 23 - 7
src/app/views/pathology/pathology.component.ts

@@ -144,7 +144,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
144 144
 	changeInpSubjectUser = new Subject(); //防抖
145 145
 	changeInpSubjectSpecimen = new Subject(); //防抖
146 146
 	changeInpSubjectDepartment = new Subject(); //防抖
147
-	intraoperativeRapidity:any = null; //术中快速
147
+	pathologyFormType:any = null; //术中快速
148 148
 	deliveryUser:any //配送人
149 149
 	acceptTime:any; //接收时间
150 150
 	userData:any = []; //配送人数据
@@ -313,7 +313,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
313 313
 	  this.startDate = null;
314 314
 		this.endDate = null;
315 315
 		this.acceptTime = [];
316
-		this.intraoperativeRapidity = null;
316
+		this.pathologyFormType = null;
317 317
 		this.deliveryUser = null;
318 318
 	  this.getConnectList();
319 319
 	}
@@ -328,7 +328,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
328 328
 	  		endTime: this.endDate,
329 329
 				receiveDept:this.deptId,
330 330
 				deliveryUser:this.deliveryUser,
331
-				intraoperativeRapidity:this.intraoperativeRapidity
331
+				pathologyFormType:this.pathologyFormType
332 332
 	    },
333 333
 	  };
334 334
 	  this.loading1 = true;
@@ -349,8 +349,8 @@ export class PathologyComponent implements OnInit, OnDestroy {
349 349
 		  sum: that.pageSize,
350 350
 		  pathologyForm: {
351 351
 				executiveDept:this.deptId,
352
-				intraoperativeRapidity:1,
353
-				operationType:'intraoperativeRapidity'
352
+				pathologyFormType:1,
353
+				operationType:'pathologyFormType'
354 354
 		  },
355 355
 		};
356 356
 		this.loading2 = true;
@@ -510,7 +510,23 @@ export class PathologyComponent implements OnInit, OnDestroy {
510 510
 		this.isDeptLoading = true
511 511
 		this.changeInpSubjectDepartment.next([e]);
512 512
 	}
513
-
513
+	
514
+	// 关闭查看标本
515
+	closeSpecimenModal(){
516
+		this.specimenViewDialog = false
517
+	}
518
+	
519
+	// 查看标本
520
+	specimenViewDialog:any = false;
521
+	viewData:any = [];
522
+	specimenItem:any;
523
+	specimenView(item){
524
+		this.viewData = []
525
+		this.specimenViewDialog = true
526
+		this.specimenItem = item;
527
+		this.viewData.push(item)
528
+	}
529
+	
514 530
 	// 获取院区
515 531
 	getHospitalData(){
516 532
 		let arr = this.tool.getHospitalList().filter(i=>i.parent==undefined)
@@ -791,7 +807,7 @@ export class PathologyComponent implements OnInit, OnDestroy {
791 807
 	currReceived:any = null;
792 808
 	submitFixationForm(){
793 809
 		this.btnLoading = true
794
-		this.mainService.getSpecimenInfo(this.batchNo,this.deptId).subscribe((res:any) => {
810
+		this.mainService.getSpecimenInfo(this.batchNo,this.deptId,{}).subscribe((res:any) => {
795 811
 			this.btnLoading = false
796 812
 			this.mustReceived = res.data.mustReceived;
797 813
 			this.currReceived = res.data.currReceived;

+ 1 - 1
src/app/views/pathologyScan/pathologyScan.component.ts

@@ -512,7 +512,7 @@ export class PathologyScanComponent implements OnInit, OnDestroy {
512 512
 	currReceived:any = null;
513 513
 	submitFixationForm(){
514 514
 		this.btnLoading = true
515
-		this.mainService.getSpecimenInfo(this.batchNo,this.deptId).subscribe((res:any) => {
515
+		this.mainService.getSpecimenInfo(this.batchNo,this.deptId,{}).subscribe((res:any) => {
516 516
 			this.btnLoading = false
517 517
 			this.mustReceived = res.data.mustReceived;
518 518
 			this.currReceived = res.data.currReceived;

+ 19 - 5
src/app/views/specimen-room-view/specimen-room-view.component.html

@@ -26,6 +26,7 @@
26 26
 			<div>
27 27
 				<div class="error-class">{{searchMsg}}</div>
28 28
 			</div>
29
+			<button class="right-btn" nz-button nzType="primary" (click)="specimenCheck()">标本核对</button>
29 30
     </div>
30 31
     <div class="userInfo">
31 32
       <div class="wel">欢迎您:</div>
@@ -79,7 +80,8 @@
79 80
             <div class="pharmacy-main__selectionInfo">
80 81
               <div class="pharmacy-main__selectionItem">
81 82
                 <span title="住院号" class="weight">
82
-									<span class="sign-red" *ngIf="item.intraoperativeRapidity==1">速冻</span>
83
+									<span class="sign-red" *ngIf="item.pathologyFormType==1">速</span>
84
+									<span *ngIf="item.pathologyFormType==0">普</span>
83 85
 									{{item.applyCode || '无'}}
84 86
 								</span>
85 87
                 <span title="姓名" class="weight text-right">{{item.patientDTO.patientName || '无'}}</span>
@@ -169,8 +171,9 @@
169 171
             <div class="pharmacy-main__selectionInfo">
170 172
               <div class="pharmacy-main__selectionItem">
171 173
                 <span title="住院号" class="weight">
172
-            			<span class="sign-red" *ngIf="item.intraoperativeRapidity==1">速冻</span>
173
-            			{{item.applyCode || '无'}}
174
+									<span class="sign-red" *ngIf="item.pathologyFormType==1">速</span>
175
+									<span *ngIf="item.pathologyFormType==0">普</span>
176
+									{{item.applyCode || '无'}}
174 177
             		</span>
175 178
                 <span title="姓名" class="weight text-right">{{item.patientDTO.patientName || '无'}}</span>
176 179
               </div>
@@ -259,8 +262,9 @@
259 262
             <div class="pharmacy-main__selectionInfo">
260 263
               <div class="pharmacy-main__selectionItem">
261 264
                 <span title="住院号" class="weight">
262
-            			<span class="sign-red" *ngIf="item.intraoperativeRapidity==1">速冻</span>
263
-            			{{item.applyCode || '无'}}
265
+            			<span class="sign-red" *ngIf="item.pathologyFormType==1">速</span>
266
+            			<span *ngIf="item.pathologyFormType==0">普</span>
267
+									{{item.applyCode || '无'}}
264 268
             		</span>
265 269
                 <span title="姓名" class="weight text-right">{{item.patientDTO.patientName || '无'}}</span>
266 270
               </div>
@@ -445,6 +449,16 @@
445 449
 					</nz-radio-group>
446 450
 				</nz-form-control>
447 451
 			</nz-form-item>
452
+			
453
+			<nz-form-item>
454
+				<nz-form-label nzRequired nzFor="showFrozen">标本是否显示速冻</nz-form-label>
455
+				<nz-form-control nzErrorTip="请选择!">
456
+					<nz-radio-group formControlName="showFrozen">
457
+						<label nz-radio [nzValue]="1">是</label>
458
+						<label nz-radio [nzValue]="0">否</label>
459
+					</nz-radio-group>
460
+				</nz-form-control>
461
+			</nz-form-item>
448 462
 		 </form>
449 463
 		</overlay-scrollbars>
450 464
 		<div class="display_flex justify-content_flex-center">

+ 5 - 1
src/app/views/specimen-room-view/specimen-room-view.component.less

@@ -89,6 +89,7 @@
89 89
       align-items: center;
90 90
 			width: 60%;
91 91
 			justify-content: center;
92
+			position: relative;
92 93
       .pharmacy-name__title {
93 94
         font-size: 22px;
94 95
         color: #333;
@@ -112,6 +113,10 @@
112 113
 			.error-class{
113 114
 				color: red;
114 115
 			}
116
+			.right-btn{
117
+				position: absolute;
118
+				right: 10px;
119
+			}
115 120
     }
116 121
 
117 122
     .pharmacy-operate {
@@ -345,7 +350,6 @@
345 350
 								font-weight: 500;
346 351
 								.sign-red{
347 352
 									color: red;
348
-									margin-right: 10px;
349 353
 								}
350 354
 							}
351 355
               .moreContent{

+ 24 - 2
src/app/views/specimen-room-view/specimen-room-view.component.ts

@@ -161,7 +161,24 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
161 161
       this.runTime();
162 162
     }, 500);
163 163
   }
164
-
164
+	
165
+	// 标本核对
166
+	batchNo:any = null;
167
+	specimenCheck(){
168
+		this.batchNo = localStorage.getItem("specimenBatchNo")
169
+		if(this.batchNo){
170
+			localStorage.setItem("checkType",'specimenDept')
171
+			this.router.navigateByUrl(`/pathologyCheck?batchNo=${this.batchNo}`);
172
+		}else{
173
+			this.mainService.generateBatchNumber()
174
+			.subscribe((res:any) =>{
175
+				localStorage.setItem("specimenBatchNo",res.data)
176
+				localStorage.setItem("checkType",'specimenDept')
177
+				this.router.navigateByUrl(`/pathologyCheck?batchNo=${res.data}`);
178
+			})
179
+		}
180
+	}
181
+	
165 182
 	// 标本条码搜索
166 183
 	searchSpecimen(e){
167 184
 		if(!this.barCode){
@@ -181,7 +198,6 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
181 198
 			if(res.status==200){
182 199
 				this.codeData = res.data[0]
183 200
 				let item = this.codeData.pathologySpecimenDTOList.find(i=>i.specimenCode == e)
184
-				console.log(7,item)
185 201
 				if(!item.fixationTime && this.codeData.pathologyFormType==0){
186 202
 					if(this.codeData.status.value==2 || this.codeData.status.value==3 ||
187 203
 						this.codeData.status.value==4){
@@ -265,6 +281,8 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
265 281
 		this.btnLoading = true
266 282
 		this.mainService.getDictionary("list", "fixing_liquid_type").subscribe((res) => {
267 283
 			this.fixativeData = res
284
+			let item = this.fixativeData.find(i=>i.value==1)
285
+			this.validateVerificationForm.controls.fixative.setValue(item.id);
268 286
 			this.btnLoading = false
269 287
 			this.verificationMoadl = true
270 288
 		});
@@ -384,6 +402,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
384 402
 					this.validateForm.controls.operation.setValue(deptArr);
385 403
 				}
386 404
 				this.validateForm.controls.specimen.setValue(data.dept.id);
405
+				this.validateForm.controls.showFrozen.setValue(data.showFrozen);
387 406
 				if(data.autoCreateOrder){
388 407
 					this.validateForm.controls.generate.setValue(data.autoCreateOrder);
389 408
 				}
@@ -397,12 +416,14 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
397 416
 			  specimen: [this.validateForm.value.specimen, [Validators.required]],
398 417
 				operation: [this.validateForm.value.operation, [Validators.required]],
399 418
 				generate:[this.validateForm.value.generate, [Validators.required]],
419
+				showFrozen:[this.validateForm.value.showFrozen, [Validators.required]],
400 420
 			});
401 421
 		}else{
402 422
 			this.validateForm = this.fb.group({
403 423
 			  specimen: [null, [Validators.required]],
404 424
 				operation: [null, [Validators.required]],
405 425
 				generate:[1, [Validators.required]],
426
+				showFrozen:[0, [Validators.required]],
406 427
 			});
407 428
 		}
408 429
 		this.relevanceModal = true
@@ -420,6 +441,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
420 441
 		let data = {
421 442
 		  user: {
422 443
 		    autoCreateOrder: this.validateForm.value.generate,
444
+				showFrozen: this.validateForm.value.showFrozen,
423 445
 				dept:{
424 446
 					id:this.validateForm.value.specimen
425 447
 				},