maotao 4 місяців тому
батько
коміт
69f35185bb

+ 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',

+ 4 - 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%">
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

+ 20 - 4
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'
@@ -1138,6 +1139,7 @@ export class HushijiandanComponent implements OnInit {
1138 1139
 
1139 1140
   // 手术提示信息
1140 1141
   surgeryLoading = false;
1142
+	now:any = new Date();
1141 1143
   getSurgeryWKOMsg() {
1142 1144
     if(this.currentDept.typeValue != 'surgery'){
1143 1145
       return;
@@ -1146,8 +1148,8 @@ export class HushijiandanComponent implements OnInit {
1146 1148
       idx: 0,
1147 1149
       sum: 1,
1148 1150
       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"),
1151
+        applyDateStart: format(subHours(new Date(),12), "yyyy-MM-dd HH:mm:ss"),
1152
+        applyDateEnd: format(endOfDay(new Date()), "yyyy-MM-dd")+' '+'23:59:59',
1151 1153
         // hosId: this.currentHospital.id,
1152 1154
         surgeryDept: this.loginUserDeptId,
1153 1155
         state: {
@@ -3903,6 +3905,20 @@ export class HushijiandanComponent implements OnInit {
3903 3905
         that.adviceListLength = data.totalNum || 0;
3904 3906
       });
3905 3907
   }
3908
+	
3909
+	startDate:any = format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
3910
+	endDate:any = format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
3911
+	scheduleTime: any = format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
3912
+	changeDate(result){
3913
+		if(result){
3914
+			this.startDate = format(result, 'yyyy-MM-dd') +' '+ '00:00:00';
3915
+			this.endDate = format(result, 'yyyy-MM-dd') +' '+'23:59:59';
3916
+		}else{
3917
+			this.startDate = null
3918
+			this.endDate = null
3919
+		}
3920
+	}
3921
+	
3906 3922
   // 手术排程信息表格数据
3907 3923
   surgeryList: any = [];
3908 3924
   surgeryPageIndex: number = 1; //表格当前页码
@@ -3917,8 +3933,8 @@ export class HushijiandanComponent implements OnInit {
3917 3933
     }
3918 3934
     let postData:any = {
3919 3935
       surgery: {
3920
-        applyDateStart: format(startOfDay(new Date()), "yyyy-MM-dd HH:mm:ss"),
3921
-        applyDateEnd: format(endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss"),
3936
+				applyDateStart: this.startDate,
3937
+				applyDateEnd: this.endDate,
3922 3938
         // hosId: this.currentHospital.id,
3923 3939
       },
3924 3940
       idx: this.surgeryPageIndex - 1,

+ 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 {}

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

@@ -0,0 +1,201 @@
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.rapidityNum}}</span>&nbsp;
15
+							申请单标本: <span class="weight">{{otherData.rapidityNum}}</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>申请单号 | 申请科室</th>
38
+										<th>患者姓名 | 住院号</th>
39
+										<th>标本数</th>
40
+										<th>部位</th>
41
+										<th>产生科室</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.takePart}}</td>
59
+										<td>{{ data.receiveTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
60
+										<td>{{ data.receiveTime|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]="codeData.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 *ngIf="dataType=='receive'">已接收 | 未接收</th>
111
+										<th *ngIf="dataType=='pack'">已扫描 | 未扫描</th>
112
+									</tr>
113
+								</thead>
114
+								<tbody>
115
+									<tr *ngFor="let data of codeMultiData let index = index">
116
+										<td>{{index+1}}</td>
117
+										<td>{{ data.specimenCode}}</td>
118
+										<td>
119
+											<span *ngIf="data.partSource && data.partSource.value!=1">{{data.partSource?data.partSource.name:''}}</span>{{data.organ?data.organ.name:''}}{{data.specimenName}}
120
+										</td>
121
+										<td *ngIf="dataType=='receive'">
122
+											<div *ngIf="data.isScan==1">已接收</div>
123
+											<div *ngIf="data.isScan==0" class="red">未接收</div>
124
+										</td>
125
+										<td *ngIf="dataType=='pack'">
126
+											<div *ngIf="data.isScan==1">已扫描</div>
127
+											<div *ngIf="data.isScan==0" class="red">未扫描</div>
128
+										</td>
129
+									</tr>
130
+								</tbody>
131
+							</nz-table>
132
+						</div>
133
+					</div>
134
+				</div>
135
+			</div>
136
+		</div>
137
+		<div class="display_flex justify-content_flex-center bottom-btn">
138
+			<button class="btn btn-right" *ngIf="dataType=='receive'" nz-button nzType="primary" (click)="submitMultiForm()" [nzLoading]="btnMultiLoading">确认接收</button>
139
+			<button class="btn btn-right" *ngIf="dataType=='pack'" nz-button nzType="primary" (click)="submitMultiScanForm()" [nzLoading]="btnMultiLoading">扫描完成</button>
140
+			<button class="btn cancel" nz-button nzType="default" (click)="hideMultiModal()">取消</button>
141
+		</div>
142
+	</div>
143
+</div>
144
+
145
+
146
+
147
+<!-- 操作成功/失败提示框 -->
148
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
149
+  [info]="promptInfo" (closeModel)="hideSpecimenModal()"></app-prompt-modal>
150
+	
151
+<div class="mask-style" *ngIf="isSpinning">
152
+	<nz-spin nzSimple class="spin-style"></nz-spin>
153
+</div>
154
+
155
+<!-- 核对 -->
156
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="connectModal">
157
+	<div class="modalBody">
158
+		<div class="title">核对<i class="icon_transport transport-guanbi" (click)="hideConnectModal()"></i>
159
+		</div>
160
+		<div class="content">
161
+		 <div class="title-class">
162
+	<!-- 		 <div>配送人应送达:单据{{mustReceived.pathologyFormNum}}张、
163
+			 标本{{mustReceived.specimenNum}}、速冻标本{{mustReceived.rapidityNum}}</div>
164
+			 <div>本次共接收单据
165
+			 <span [ngClass]="{'red': currReceived.pathologyFormNum < mustReceived.pathologyFormNum}">
166
+				 {{currReceived.pathologyFormNum}}
167
+			 </span>张、
168
+			 标本<span [ngClass]="{'red': currReceived.specimenNum<mustReceived.specimenNum}">{{currReceived.specimenNum}}</span>、速冻标本
169
+			 <span [ngClass]="{'red': currReceived.rapidityNum<mustReceived.rapidityNum}">{{currReceived.rapidityNum}}</span>
170
+			 </div> -->
171
+			 您本次共扫描<span class="red">10</span>申请单 标本<span class="red">25</span>份
172
+		 </div>
173
+		 <form nz-form [formGroup]="validateConnectForm" class="addForm" (ngSubmit)="submitConnectForm()">
174
+			<nz-form-item>
175
+				<nz-form-label nzRequired nzFor="dispatchingNumber">配送人工号</nz-form-label>
176
+				<nz-form-control nzErrorTip="请输入配送人工号!">
177
+					<input nz-input (ngModelChange)="dispatchingChange($event)" formControlName="dispatchingNumber" placeholder="请输入配送人工号" nzSize="default" />
178
+				</nz-form-control>
179
+			</nz-form-item>
180
+			<nz-form-item class="form-name">
181
+				<nz-form-label style="margin-left: 12px;">配送人姓名</nz-form-label>
182
+					<div class="job-class">{{dispatchingName}}</div>
183
+			</nz-form-item>
184
+			<nz-form-item>
185
+				<nz-form-label nzRequired nzFor="receptionNumber">核对人工号</nz-form-label>
186
+				<nz-form-control nzErrorTip="请输入核对人工号!">
187
+					<input nz-input (ngModelChange)="receptionChange($event)" formControlName="receptionNumber" placeholder="请输入核对人工号" nzSize="default" />
188
+				</nz-form-control>
189
+			</nz-form-item>
190
+			<nz-form-item class="form-name">
191
+				<nz-form-label style="margin-left: 12px;">核对人姓名</nz-form-label>
192
+					<div class="job-class">{{receptionName}}</div>
193
+			</nz-form-item>
194
+		 </form>
195
+		</div>
196
+		<div class="display_flex justify-content_flex-center">
197
+			<button class="btn" nz-button nzType="primary" (click)="submitConnectForm()" [nzLoading]="btnConnectLoading">确定</button>
198
+			<button class="btn cancel" nz-button nzType="default" (click)="hideConnectModal()">取消</button>
199
+		</div>
200
+	</div>
201
+</div>

Різницю між файлами не показано, бо вона завелика
+ 1338 - 0
src/app/views/pathology-check/pathology-check.component.less


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

@@ -0,0 +1,712 @@
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
+  ngOnDestroy() {
175
+    clearTimeout(this.timer);
176
+    clearTimeout(this.logTimer);
177
+  }
178
+
179
+  ngOnInit() {
180
+		this.changeInpSubject.pipe(debounceTime(500)).subscribe((v) => {
181
+		  this.searchSpecimenData(v[0])
182
+		});
183
+		this.hosId = this.tool.getCurrentHospital().id;
184
+		this.userId = this.tool.getCurrentUserId()
185
+		this.deptId = this.tool.getCurrentUserDept().id
186
+		this.userInfo = this.tool.getCurrentUserInfo()
187
+		this.batchNo = this.route.snapshot.queryParams.batchNo
188
+		this.businessType = this.route.snapshot.queryParams.businessType
189
+		this.placeholderType = this.route.snapshot.queryParams.placeholder
190
+		this.packId = this.route.snapshot.queryParams.packId //打包配送查看标本
191
+		if(this.placeholderType==1){
192
+			this.placeholder = '可扫描物理标本条码'
193
+		}else{
194
+			this.placeholder = '可扫描物理标本条码及包码'
195
+		}
196
+		let scanData = localStorage.getItem("scanCodeData")
197
+		//dataType类型:receive:病理科接收标本,pack:病理科打包标本
198
+		//pathologyPack: 病理包扫码
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.getJsData(1)
223
+			}
224
+		}else{
225
+			if(this.placeholderType==1){
226
+				if(this.businessType=='connect'){
227
+					this.dataType = 'receive'
228
+				}else if(this.businessType=='packaging'){
229
+					this.dataType = 'pack'
230
+				}
231
+			}
232
+			this.getJsData(1)
233
+		}
234
+
235
+  }
236
+	
237
+	//tab切换
238
+	tabClick(type){
239
+		this.activeIndex = type
240
+		localStorage.setItem("pathologyActiveIndex",type)
241
+		if(type==0){
242
+			this.getJsData(1)
243
+		}else if(type==1){
244
+			this.getJsData(1)
245
+		}
246
+	}
247
+	
248
+	// 分页
249
+	noType:any='none';
250
+	pageChange(){
251
+		if(this.dataType=='pathologyPack'){
252
+			this.noType='show'
253
+			this.getJsData(4)
254
+		}else if(this.packId && this.businessType=='packagLook'){
255
+			this.getJsData(5)
256
+		}else{
257
+			this.getJsData(1)
258
+		}
259
+	}
260
+
261
+	// 获取标本接收数据
262
+	pageReceptionIndex:any = 1;
263
+	listReceptionLength:any = 0;
264
+	otherData:any=null;
265
+	getJsData(type){
266
+		let data = {
267
+		  idx: this.pageReceptionIndex-1,
268
+		  sum: this.pageSize,
269
+		  pathologyForm: {
270
+		    batchNo:this.batchNo,
271
+				packId:null
272
+		  },
273
+		};
274
+		if(type==4){
275
+			data.pathologyForm.packId = this.scanCodeData.id
276
+			delete data.pathologyForm.batchNo
277
+		}else if(type==5){
278
+			data.pathologyForm.packId = this.packId
279
+			delete data.pathologyForm.batchNo
280
+		}else{
281
+			delete data.pathologyForm.packId
282
+		}
283
+		this.tableLoading = true;
284
+		this.mainService
285
+		  .getFetchDataList("data", "pathologyForm", data)
286
+		  .subscribe((res) => {
287
+				this.tableLoading = false;
288
+				if(type==1 || type==4 || type==5){
289
+					this.fixationModal = true
290
+					this.codeData = res.list;
291
+					if(type==1){
292
+						setTimeout(_=>{
293
+							document.getElementById('specimen').focus();
294
+						},200)
295
+					}else if(type==4 && this.noType=='none'){
296
+						this.connectAccomplish()
297
+					}
298
+				}else if(type==3){
299
+					this.codeMultiData = this.scanCodeData.pathologySpecimenDTOList
300
+					this.fixationModal = true
301
+					this.multiModal = true
302
+					setTimeout(_=>{
303
+						document.getElementById('multiSpecimen').focus();
304
+					},200)
305
+				}
306
+				this.otherData = res.otherData;
307
+				this.listReceptionLength = res.totalNum;
308
+		  });
309
+	}
310
+
311
+	// 配送中包交接完成
312
+	connectAccomplish(){
313
+		this.validateConnectForm = this.fb.group({
314
+		  receptionNumber: [this.userInfo.account, [Validators.required]],
315
+			dispatchingNumber: [this.scanCodeData.deliveryUserDTO.account, [Validators.required]]
316
+		});
317
+		this.dispatchingName = this.scanCodeData.deliveryUserDTO.name;
318
+		this.dispatchingUserId = this.scanCodeData.deliveryUserDTO.id
319
+
320
+		this.receptionName = this.userInfo.name;
321
+		this.connectUserId = this.userInfo.id;
322
+
323
+		this.receptionModal = true
324
+		this.barCode = null
325
+	}
326
+
327
+	// 确定接收包
328
+	submitReceptionForm(){
329
+		for (const i in this.validateConnectForm.controls) {
330
+		  this.validateConnectForm.controls[i].markAsDirty();
331
+		  this.validateConnectForm.controls[i].updateValueAndValidity();
332
+		}
333
+		if (this.validateConnectForm.invalid) return;
334
+		let data = {
335
+			receiveUser:this.connectUserId,
336
+			deliveryUser:this.dispatchingUserId,
337
+			operationType:'bagReceive',
338
+			id:this.scanCodeData.id
339
+		};
340
+		this.btnConnectLoading = true
341
+		this.mainService
342
+		  .simplePost("updData", "pathologyPackInfo", data)
343
+		  .subscribe((data) => {
344
+				this.btnConnectLoading = false
345
+				if (data.status == 200) {
346
+					this.message.success('交接成功')
347
+					setTimeout(_=>{
348
+						this.hideSpecimenModal()
349
+					},500)
350
+				} else {
351
+				  this.message.error(data.msg)
352
+				}
353
+		  });
354
+	}
355
+
356
+	// 关闭配送接收
357
+	hideReceptionModal(){
358
+		this.receptionModal = false
359
+	}
360
+
361
+	// 监听人员交接接收人工号输入
362
+	connectUserId:any = null;
363
+	receptionName:any = null;
364
+	receptionChange(e){
365
+		if(e.length < 3) {
366
+			this.receptionName = null;
367
+			return
368
+		}
369
+		let query = {
370
+		  account: e
371
+		};
372
+		this.mainService
373
+		  .jobSearch(query)
374
+		  .subscribe((data:any) => {
375
+				if(data.status==200){
376
+					this.receptionName = data.userName;
377
+					this.connectUserId = data.userId
378
+				}else{
379
+					this.receptionName = null;
380
+					this.connectUserId =null
381
+				}
382
+		  });
383
+	}
384
+
385
+	// 监听人员交接配送人工号输入
386
+	dispatchingUserId:any = null;
387
+	dispatchingName:any = null;
388
+	dispatchingChange(e){
389
+		if(e.length < 3) {
390
+			this.dispatchingName = null;
391
+			return
392
+		}
393
+		let query = {
394
+		  account: e
395
+		};
396
+		this.mainService
397
+		  .jobSearch(query)
398
+		  .subscribe((data:any) => {
399
+				if(data.status==200){
400
+					this.dispatchingName = data.userName;
401
+					this.dispatchingUserId = data.userId
402
+				}else{
403
+					this.dispatchingName = null;
404
+					this.dispatchingUserId =null
405
+				}
406
+		  });
407
+	}
408
+
409
+	// 确定核对
410
+	mustReceived:any = null;
411
+	currReceived:any = null;
412
+	btnLoading:any = false;
413
+	submitFixationForm(){
414
+		this.btnLoading = true
415
+		this.mainService.getSpecimenInfo(this.batchNo,this.deptId).subscribe((res:any) => {
416
+			this.btnLoading = false
417
+			this.mustReceived = res.data.mustReceived;
418
+			this.currReceived = res.data.currReceived;
419
+			this.btnConnectLoading = false
420
+			if(this.codeData[0].deliveryUserDTO){
421
+				this.validateConnectForm = this.fb.group({
422
+					receptionNumber: [this.userInfo.account, [Validators.required]],
423
+					dispatchingNumber: [this.codeData[0].deliveryUserDTO.account, [Validators.required]]
424
+				});
425
+				this.dispatchingName = this.codeData[0].deliveryUserDTO.name;
426
+				this.dispatchingUserId = this.codeData[0].deliveryUserDTO.id
427
+			}else{
428
+				this.validateConnectForm = this.fb.group({
429
+					receptionNumber: [null, [Validators.required]],
430
+					dispatchingNumber: [null, [Validators.required]]
431
+				});
432
+				this.dispatchingName = null;
433
+				this.dispatchingUserId = null
434
+			}
435
+			this.receptionName = this.userInfo.name;
436
+			this.connectUserId = this.userInfo.id;
437
+			this.connectModal = true
438
+		});
439
+	}
440
+	// 关闭核对
441
+	hideConnectModal(){
442
+		this.connectModal = false
443
+	}
444
+
445
+	// 确定核对提交
446
+	btnConnectLoading:boolean = false;
447
+	submitConnectForm(){
448
+		for (const i in this.validateConnectForm.controls) {
449
+		  this.validateConnectForm.controls[i].markAsDirty();
450
+		  this.validateConnectForm.controls[i].updateValueAndValidity();
451
+		}
452
+		if (this.validateConnectForm.invalid) return;
453
+		let data = {
454
+			batchNo:this.batchNo,
455
+			receiveDept:this.deptId,
456
+			receiverUser:this.connectUserId,
457
+			deliveryUser:this.dispatchingUserId
458
+		};
459
+		this.btnConnectLoading = true
460
+		this.mainService
461
+		  .handoverCompleted(data)
462
+		  .subscribe((res:any) => {
463
+				this.btnConnectLoading = false
464
+		    if (res.status == 200) {
465
+		      this.showPromptModal("操作", true, "");
466
+		    } else {
467
+		      this.showPromptModal("操作", false, res.msg);
468
+		    }
469
+		  });
470
+	}
471
+
472
+	// 返回
473
+	hideSpecimenModal(){
474
+		localStorage.setItem("scanCodeData",'')
475
+		let type = localStorage.getItem("checkType")
476
+		if(type=='communicationBook'){//交接本
477
+			this.router.navigateByUrl(`/pathologyCommunicationBook?type=detail`)
478
+		}else if(type=='surgery'){//手术间
479
+			this.router.navigateByUrl(`/nurse`)
480
+		}else if(type=='specimen'){//标本间
481
+			this.router.navigateByUrl(`/specimenRoomView`)
482
+		}else if(type=='pathology'){//病理端
483
+			this.router.navigateByUrl(`/pathology`)
484
+		}else if(type=='sample'){//门诊病理
485
+			this.router.navigateByUrl(`/pathologySample`)
486
+		}
487
+	}
488
+
489
+	// 输入工号查询姓名
490
+	handoverUserId:any = null;
491
+	numberChange(e){
492
+		if(e.length < 3) {
493
+			this.distributionName = null;
494
+			return
495
+		}
496
+		let query = {
497
+		  account: e
498
+		};
499
+		this.mainService
500
+		  .jobSearch(query)
501
+		  .subscribe((data:any) => {
502
+				if(data.status==200){
503
+					this.distributionName = data.userName;
504
+					this.handoverUserId = data.userId
505
+				}else{
506
+					this.distributionName = null;
507
+					this.handoverUserId =null
508
+				}
509
+		  });
510
+	}
511
+
512
+	// 成功/失败提示框
513
+	closeModel(){
514
+		localStorage.setItem("scanCodeData",'')
515
+		this.router.navigateByUrl(`/pathology?type=detail`);
516
+	}
517
+
518
+	// 关闭配送信息
519
+	hideVerificationModal(){
520
+		this.verificationMoadl = false
521
+		setTimeout(_=>{
522
+			document.getElementById('Binput').focus();
523
+		},200)
524
+	}
525
+
526
+
527
+	// 监听交接/打包扫描条码
528
+	tableLoading:boolean = false;
529
+	codeChange(e){
530
+		this.changeInpSubject.next([e]);
531
+	}
532
+
533
+	// 标本接收搜索条码
534
+	errorMsg:any = null;
535
+	searchSpecimenData(e){
536
+		if(!e){
537
+			return
538
+		}
539
+		if(e.length < 10) {
540
+			return
541
+		}
542
+		let data = {
543
+			barcode:e,
544
+			deptId:this.deptId,
545
+			batchNo:this.batchNo,
546
+			tabType:null
547
+		}
548
+		if(this.dataType=='receive'){
549
+			data.tabType = 'receive'
550
+		}else if(this.dataType=='pack'){
551
+			data.tabType = 'pack'
552
+		}else{
553
+			delete data.tabType
554
+		}
555
+		this.tableLoading = true
556
+		this.mainService.pathologyScanCode(data)
557
+		.subscribe((res:any) => {
558
+			this.tableLoading = false
559
+			this.specimenCode = null
560
+			if(res.status==200){
561
+				this.scanCodeData = res.data[0]
562
+				this.dataType = res.dataType
563
+				if(res.data[0].pathologySpecimenDTOList.length>1){
564
+					for(let i of res.data[0].pathologySpecimenDTOList){
565
+						if(i.isScan==1){
566
+							this.muArr.push(i)
567
+						}
568
+					}
569
+					this.multiModal = true
570
+					this.codeMultiData = res.data[0].pathologySpecimenDTOList
571
+					localStorage.setItem("scanCodeData",JSON.stringify(res))
572
+				}else{
573
+					let tip = `扫描“申请单号”的标本“标本号” + “标本名称”成功`
574
+					this.notification.create('success','提示',tip);
575
+					this.getJsData(1)
576
+				}
577
+				this.errorMsg = null
578
+			}else{
579
+				this.errorMsg = res.msg
580
+			}
581
+		})
582
+	}
583
+
584
+	// 关闭多只标本
585
+	hideMultiModal(){
586
+		localStorage.setItem("scanCodeData",'');
587
+		this.multiModal = false;
588
+		this.errorMultiMsg = null;
589
+		this.muArr = [];
590
+		this.getJsData(1);
591
+		setTimeout(_=>{
592
+			document.getElementById('specimen').focus();
593
+		},200)
594
+	}
595
+
596
+	// 监听多只标本扫描
597
+	codeMultiChange(e){
598
+		if(!e){
599
+			return
600
+		}
601
+		if(e.length < 10) {
602
+			return
603
+		}
604
+		let data={
605
+			barcode:e,
606
+			deptId:this.deptId,
607
+			pathologyFormId:this.scanCodeData.id,
608
+			tabType:null
609
+		}
610
+		if(this.dataType=='receive'){
611
+			data.tabType = 'receive'
612
+		}else if(this.dataType=='pack'){
613
+			data.tabType = 'pack'
614
+		}else{
615
+			delete data.tabType
616
+		}
617
+		setTimeout(_=>{
618
+			this.tableLoading = true
619
+			this.mainService.pathologyScanCode(data)
620
+			.subscribe((res:any) => {
621
+				this.tableLoading = false
622
+				this.specimenMultiCode = null
623
+				if(res.status==200){
624
+					this.dataType = res.dataType
625
+					this.muArr = []
626
+					this.codeMultiData = res.data[0].pathologySpecimenDTOList
627
+					for(let i of res.data[0].pathologySpecimenDTOList){
628
+						if(i.isScan==1){
629
+							this.muArr.push(i)
630
+						}
631
+					}
632
+					this.multiModal = true
633
+					localStorage.setItem("scanCodeData",JSON.stringify(res))
634
+					this.errorMultiMsg = null
635
+				}else{
636
+					this.errorMultiMsg = res.msg
637
+				}
638
+			})
639
+		},500)
640
+	}
641
+
642
+	// 多只标本确定接受
643
+	btnMultiLoading:boolean = false;
644
+	submitMultiForm(){
645
+		let data1 = JSON.parse(localStorage.getItem("scanCodeData"))
646
+		this.scanCodeData = data1.data[0]
647
+		for(let i of this.scanCodeData.pathologySpecimenDTOList){
648
+			if(i.isScan==0){
649
+				this.message.error('有未扫描的标本,请继续扫描')
650
+				return
651
+			}
652
+		}
653
+		let data: any = {
654
+			id:this.scanCodeData.id,
655
+			operationType:'pathologyReceive',
656
+			batchNo:this.batchNo
657
+		};
658
+		this.btnMultiLoading = true;
659
+		this.mainService
660
+		.simplePost("addData", "pathologyForm", data)
661
+		.subscribe((res) => {
662
+			this.message.success('操作成功')
663
+			setTimeout(_=>{
664
+				this.btnMultiLoading = false;
665
+				this.hideMultiModal()
666
+			},500)
667
+		});
668
+	}
669
+
670
+	// 多只标本打包
671
+	submitMultiScanForm(){
672
+		let data1 = JSON.parse(localStorage.getItem("scanCodeData"))
673
+		this.scanCodeData = data1.data[0]
674
+		for(let i of this.scanCodeData.pathologySpecimenDTOList){
675
+			if(i.isScan==0){
676
+				this.message.error('有未扫描的标本,请继续扫描')
677
+				return
678
+			}
679
+		}
680
+		let data: any = {
681
+			id:this.scanCodeData.id,
682
+			operationType:'pathologyPack',
683
+			batchNo:this.batchNo
684
+		};
685
+		this.btnMultiLoading = true;
686
+		this.mainService
687
+		.simplePost("addData", "pathologyForm", data)
688
+		.subscribe((res) => {
689
+			this.message.success('操作成功')
690
+			setTimeout(_=>{
691
+				this.btnMultiLoading = false;
692
+				this.hideMultiModal()
693
+			},500)
694
+		});
695
+	}
696
+
697
+	promptModalShow:boolean = false;
698
+	promptContent:any = null;
699
+	ifSuccess:any = null;
700
+	promptInfo:any = null;
701
+	// 扫描展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
702
+	showPromptModal(con, success, promptInfo?) {
703
+	  this.promptModalShow = false;
704
+	  this.promptContent = con;
705
+	  this.ifSuccess = success;
706
+	  this.promptInfo = promptInfo;
707
+	  setTimeout(() => {
708
+	    this.promptModalShow = true;
709
+	  }, 100);
710
+	}
711
+}
712
+

+ 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 {}

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

@@ -0,0 +1,619 @@
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>
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}}</span> &nbsp;
40
+			标本 <span class="weight">{{toDayData.specimenNum}}</span>&nbsp;
41
+			速冻 <span class="weight">{{toDayData.rapidityNum}}</span>&nbsp;
42
+		</div>
43
+	  <div class="mar-ri-30" *ngIf="toDayData">
44
+	  	今日送出:
45
+	  	申请单 <span class="weight">{{toDayData.pathologyFormNum}}</span> &nbsp;
46
+	  	标本 <span class="weight">{{toDayData.specimenNum}}</span>&nbsp;
47
+	  	速冻 <span class="weight">{{toDayData.rapidityNum}}</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
+							<nz-select class="formItem" (nzOnSearch)="changeUserInp($event)"
72
+							  [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择患者"
73
+							  [(ngModel)]="deliveryUser">
74
+							  <ng-container *ngFor="let option of userData">
75
+							    <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
76
+							  </ng-container>
77
+							  <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
78
+							    <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
79
+							  </nz-option>
80
+							</nz-select>
81
+						</div>
82
+						<div class="list-template__searchItem">
83
+						  <span class="label">状态:</span>
84
+							<nz-select class="formItem" (nzOnSearch)="changeUserInp($event)"
85
+							  [nzDropdownMatchSelectWidth]="false" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择状态"
86
+							  [(ngModel)]="status">
87
+							  <ng-container *ngFor="let option statusData">
88
+							    <nz-option *ngIf="!isLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
89
+							  </ng-container>
90
+							  <nz-option *ngIf="isLoading" nzDisabled nzCustomContent>
91
+							    <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
92
+							  </nz-option>
93
+							</nz-select>
94
+						</div>
95
+						<div class="list-template__searchItem">
96
+						  <span class="label">术中快速:</span>
97
+							<nz-radio-group [(ngModel)]="intraoperativeRapidity">
98
+								<label nz-radio nzValue="1">是</label>
99
+								<label nz-radio nzValue="0">否</label>
100
+							</nz-radio-group>
101
+						</div>
102
+			    </div>
103
+			    <div nz-col nzLg="6" class="list-template__btns">
104
+			      <button class="btn default" (click)='search()'>搜索</button>
105
+			      <button class="btn default ml8" (click)='reset()'>重置</button>
106
+			    </div>
107
+			  </div>
108
+			  <div class="list-template__bottom">
109
+			    <nz-table class="list-template__nzTable" [nzData]="listOneData" nzSize="middle" [nzShowPagination]="false"
110
+			      [nzLoading]="loading1">
111
+			      <thead>
112
+			        <tr class="thead">
113
+			          <th>申请单号</th>
114
+								<th>状态</th>
115
+			          <th>患者姓名</th>
116
+			          <th>住院号</th>
117
+			          <th>部位</th>
118
+			          <th>标本数</th>
119
+			          <th>申请科室</th>
120
+								<th>离体时间</th>
121
+								<th>固定时间</th>
122
+			          <th>配送人</th>
123
+								<th>配送时间</th>
124
+			          <th>操作</th>
125
+			        </tr>
126
+			      </thead>
127
+			      <tbody>
128
+			        <tr *ngFor="let data of listOneData">
129
+			          <td><span *ngIf="data.intraoperativeRapidity==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
130
+								<td>{{ data.patientDTO?data.patientDTO.patientName : '-' }}</td>
131
+								<td>{{ data.patientDTO.patientCode}}</td>
132
+			          <td>{{ data.patientDTO.patientCode}}</td>
133
+			          <td>{{ data.takePart}}</td>
134
+			          <td>{{ data.specimenNum}}</td>
135
+			          <td>{{ data.patientDTO?data.patientDTO.department.dept : '-'}}</td>
136
+								<td>{{ data.receiveTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
137
+								<td>{{ data.receiveTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
138
+								<td>{{ data.deliveryUserDTO?data.deliveryUserDTO.name : '-' }}</td>
139
+								<td>{{ data.receiveTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
140
+			          <td>
141
+			            <div class="coop">
142
+										<span (click)="oneLook($event,data)">查看</span>
143
+			            </div>
144
+			          </td>
145
+			        </tr>
146
+			      </tbody>
147
+			    </nz-table>
148
+			    <div class="list-template__pagination">
149
+			      <nz-pagination [(nzPageIndex)]="pageOneIndex" [(nzTotal)]="listOneLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
150
+			        (nzPageIndexChange)="getConnectList()" (nzPageSizeChange)="getConnectList()">
151
+			      </nz-pagination>
152
+			    </div>
153
+			  </div>
154
+			</div>
155
+    </div>
156
+
157
+    <div class="pharmacy-main__list pharmacy-main__waitDelivery">
158
+      <div *ngIf="activeIndex==1" class="list-template pharmacy-main__list pharmacy-main__print">
159
+      	<div class="list-template__content">
160
+      	  <div class="list-template__bottom">
161
+      	    <nz-table class="list-template__nzTable" [nzData]="listTwoData" nzSize="middle" [nzShowPagination]="false"
162
+      	      [nzLoading]="loading2">
163
+      	      <thead>
164
+      	        <tr class="thead">
165
+      	          <th>申请单号</th>
166
+      	          <th>患者姓名</th>
167
+      	          <th>住院号</th>
168
+      	          <th>部位</th>
169
+      	          <th>标本数</th>
170
+      	          <th>申请科室</th>
171
+      	          <th>配送人</th>
172
+      	          <th>状态</th>
173
+      	          <th>操作</th>
174
+      	        </tr>
175
+      	      </thead>
176
+      	      <tbody>
177
+      	        <tr *ngFor="let data of listTwoData">
178
+      	         <td><span *ngIf="data.intraoperativeRapidity==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
179
+      	         <td>{{ data.patientDTO?data.patientDTO.patientName : '-' }}</td>
180
+      	         <td>{{ data.patientDTO.patientCode}}</td>
181
+      	         <td>{{ data.takePart}}</td>
182
+      	         <td>{{ data.specimenNum}}</td>
183
+      	         <td>{{ data.patientDTO?data.patientDTO.department.dept : '-'}}</td>
184
+      	         <td>{{ data.deliveryUserDTO?data.deliveryUserDTO.name : '-' }}</td>
185
+      	         <td>{{ data.status?data.status.name:'-' }}</td>
186
+      	         <td>
187
+      	           <div class="coop">
188
+      	         		<span (click)="oneLook($event,data)">查看</span>
189
+      	           </div>
190
+      	         </td>
191
+      	        </tr>
192
+      	      </tbody>
193
+      	    </nz-table>
194
+      	    <div class="list-template__pagination">
195
+      	      <nz-pagination [(nzPageIndex)]="pageTwoIndex" [(nzTotal)]="listTwoLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
196
+      	        (nzPageIndexChange)="getSpeedinessList()" (nzPageSizeChange)="getSpeedinessList()">
197
+      	      </nz-pagination>
198
+      	    </div>
199
+      	  </div>
200
+      	</div>
201
+      </div>
202
+    </div>
203
+
204
+    <div class="pharmacy-main__list pharmacy-main__delivery">
205
+			<div *ngIf="activeIndex==2" class="list-template pharmacy-main__list pharmacy-main__print">
206
+				<div class="list-template__content">
207
+				  <div class="list-template__bottom">
208
+				    <nz-table class="list-template__nzTable" [nzData]="listThreeData" nzSize="middle" [nzShowPagination]="false"
209
+				      [nzLoading]="loading3">
210
+				      <thead>
211
+				        <tr class="thead">
212
+				          <th>包号</th>
213
+				          <th>打包人 | 打包时间</th>
214
+				          <th>申请单数</th>
215
+				          <th>标本数</th>
216
+									<th>配送人 | 配送时间</th>
217
+									<th>接收人 | 接收时间</th>
218
+				          <th>状态</th>
219
+				          <th>操作</th>
220
+				        </tr>
221
+				      </thead>
222
+				      <tbody>
223
+				        <tr *ngFor="let data of listThreeData">
224
+				          <td>{{ data.packCode || '-' }}</td>
225
+									<td>
226
+										<div>{{data.packUserDTO.name }}</div>
227
+										<div>{{data.packTime|date:'yyyy-MM-dd HH:mm' }}</div>
228
+									</td>
229
+				          <td>{{ data.pathologyFormNum }}</td>
230
+				          <td>{{ data.specimenNum }}</td>
231
+				          <td>
232
+				          	<div>{{data.deliveryUserDTO?data.deliveryUserDTO.name:'-' }}</div>
233
+				          	<div>{{data.deliveryTime|date:'yyyy-MM-dd HH:mm' || '-' }}</div>
234
+				          </td>
235
+				          <td>
236
+				          	<div>{{data.receiveUserDTO?data.receiveUserDTO.name:'-' }}</div>
237
+				          	<div>{{data.receiveTime|date:'yyyy-MM-dd HH:mm' || '-' }}</div>
238
+				          </td>
239
+									<td>{{ data.status.name }}</td>
240
+				          <td>
241
+				            <div class="coop">
242
+											<span (click)="threeLook($event,data)">查看标本</span>
243
+											<span (click)="reprint($event,data)">补打</span>
244
+											<span *ngIf="data.status.value==1" (click)="distribution($event,data)">配送</span>
245
+				            </div>
246
+				          </td>
247
+				        </tr>
248
+				      </tbody>
249
+				    </nz-table>
250
+				    <div class="list-template__pagination">
251
+				      <nz-pagination [(nzPageIndex)]="pageThreeIndex" [(nzTotal)]="listThreeLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
252
+				        (nzPageIndexChange)="getPackList()" (nzPageSizeChange)="getPackList()">
253
+				      </nz-pagination>
254
+				    </div>
255
+				  </div>
256
+				</div>
257
+			</div>
258
+    </div>
259
+  </div>
260
+  <!-- 主体部分 end -->
261
+  <!-- <router-outlet></router-outlet> -->
262
+</div>
263
+
264
+<!-- 科室二维码模态框 -->
265
+<!-- 在模态框所在的 div 添加属性 [appDrag] -->
266
+<div appDrag class="modal" *ngIf="isShowNurseCode">
267
+  <div class="header drag-title">
268
+    <h2>签到二维码</h2>
269
+    <i
270
+      class="icon-close icon_transport transport-guanbi1"
271
+      (click)="closeNurseCode()"
272
+    ></i>
273
+  </div>
274
+  <div class="dialog-center">
275
+    <div class="dialog-code">
276
+      <img [src]="nurseCodeImg" alt="" />
277
+    </div>
278
+  </div>
279
+  <div class="dialog-operate">
280
+    <strong class="dialog-refresh" (click)="showNurseCode()">刷新</strong>
281
+    <span>{{ refreshQRCodeTime }}s</span>
282
+  </div>
283
+</div>
284
+<!-- 科室切换提示框 -->
285
+<app-hs-prompt-modal
286
+  [changeShow]="changeShow"
287
+  [closeTime]="closeTime"
288
+  [closeTimeFlag]="closeTimeFlag"
289
+  [show]="hsPromptModalShow"
290
+  (closeModelHs)="closeModelHs($event)"
291
+  (clearModelHs)="clearModelHs($event)"
292
+  deptType="pathology"
293
+> 
294
+  <!-- 返回系统按钮 -->
295
+  <!-- 右侧悬浮框 -->
296
+   <div id="fixedMenu" class="fixed" *ngIf="mainRole">
297
+    <div class="right">
298
+      <div class="fixedMenu hujiaozhongxin">
299
+        <div class="menuItems">
300
+          <div class="item">快捷菜单</div>
301
+        </div>
302
+      </div>
303
+      <div class="fixedMenu">
304
+        <div class="menuItems">
305
+          <div
306
+            class="others"
307
+            [ngStyle]="{
308
+              height: showLastItems
309
+                ? mainRole
310
+                  ? 35 * 2 + 'px'
311
+                  : 35 * 1 + 'px'
312
+                : 0
313
+            }"
314
+          >
315
+            <div
316
+              [ngClass]="{ item: true, checked: fixedTab == 'back' }"
317
+              *ngIf="mainRole"
318
+              (click)="checkFixedTab('toSystem')"
319
+            >
320
+              返回系统
321
+            </div>
322
+          </div>
323
+        </div>
324
+        <div class="arrow" *ngIf="!showLastItems" (click)="fixedMenuXiala()">
325
+          <i class="icon_transport transport-xiala2-01"></i>
326
+        </div>
327
+        <div class="arrow" *ngIf="showLastItems" (click)="fixedMenuShangla()">
328
+          <i class="icon_transport transport-shangla-"></i>
329
+        </div>
330
+      </div>
331
+    </div>
332
+    <div
333
+      *ngIf="showLastItems && fixedTab != ''"
334
+      (click)="fixedMenuShangla()"
335
+      class="fixedMark"
336
+    ></div>
337
+  </div>
338
+</app-hs-prompt-modal>
339
+
340
+
341
+<!-- 查看详情 -->
342
+<div class="pathology-box display_flex align-items_center justify-content_flex-center" *ngIf="detailMoadl">
343
+	<div class="pathology-content">
344
+		<div class="title">查看详情
345
+		<i class="icon_transport transport-guanbi" (click)="closeDetailMoadl()"></i></div>
346
+		<div class="content border">
347
+			<div class="content-item boder-right">
348
+				<div class="form-title-box">
349
+					<div class="form-title"><span class="font-weight-500">是否术中快速:</span>{{detailsData.intraoperativeRapidity==1?'是':'否'}}</div>
350
+					<div class="form-title"><span class="font-weight-500">申请单编号:</span>{{detailsData.applyCode}}</div>
351
+					<div class="form-title"><span class="font-weight-500">状态:</span>{{detailsData.status.name}}</div>
352
+					<div class="form-title"><span class="font-weight-500">科室名称:</span>{{detailsData.patientDTO.department.dept}}</div>
353
+				</div>
354
+				<div class="form-title-box">
355
+					<div class="form-title"><span class="font-weight-500">住院号:</span>{{detailsData.patientDTO.patientCode}}</div>
356
+					<div class="form-title"><span class="font-weight-500">患者信息:</span>{{detailsData.patientDTO.patientName}} ({{detailsData.patientDTO.bedNum}}床)</div>
357
+					<div class="form-title"><span class="font-weight-500">年龄:</span>{{detailsData.patientDTO.age||'-'}}岁</div>
358
+				</div>
359
+				
360
+				<div class="form-title-box">
361
+					<div class="form-title"><span class="font-weight-500">检验项目:</span>{{project||'无'}}</div>
362
+				</div>
363
+				
364
+				<div class="form-list">
365
+					<div class="form-title font-weight-500">诊断:</div>
366
+					<div class="indent">
367
+						{{detailsData.diagnose||'无'}}
368
+					</div>
369
+				</div>
370
+				
371
+				<div class="form-list">
372
+					<div class="form-title font-weight-500">病历摘要:</div>
373
+					<div class="indent">{{detailsData.medicalRecords||'无'}}</div>
374
+				</div>
375
+				<div class="form-list">
376
+					<div class="form-title font-weight-500">手术方案:</div>
377
+					<div class="indent">{{detailsData.surgicalPlan||'无'}}</div>
378
+				</div>
379
+
380
+				<div class="form-title-box">
381
+					<div class="form-title"><span class="font-weight-500">标本类型:</span>{{detailsData.specimenType.name||'无'}}</div>
382
+					<div class="form-title"><span class="font-weight-500">标本数量:</span>{{detailsData.specimenNum||'无'}}</div>
383
+					<div class="form-title"><span class="font-weight-500">部位:</span>{{detailsData.takePart||'无'}}</div>
384
+				</div>
385
+				
386
+				<div class="form-title-box">
387
+					<div class="form-title"><span class="font-weight-500">送检医生:</span>{{detailsData.surgeryDoctorDTO?detailsData.surgeryDoctorDTO.name : '-'}}</div>
388
+					<div class="form-title"><span class="font-weight-500">离体时间:</span>{{detailsData.inVitroTime?(detailsData.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</div>
389
+					<div class="form-title"><span class="font-weight-500">固定时间:</span>{{detailsData.fixationTime?(detailsData.fixationTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</div>
390
+				</div>
391
+				
392
+				<div class="form-list">
393
+					<div class="form-title font-weight-500">标本:</div>
394
+					<div class="form-title specimen-list">
395
+						<div *ngFor="let item of specimenList" class="specimen-item-class form-title cursors" (click)="specimenView(item)">
396
+							<span *ngIf="item.partSource && item.partSource.value!=1">{{item.partSource?item.partSource.name:''}}</span>{{item.organ?item.organ.name:''}}{{item.specimenName}}({{item.specimenCode}})
397
+						</div>
398
+					</div>
399
+				</div>
400
+
401
+			</div>
402
+			
403
+			<div class="content-item-right">
404
+				<div class="step-title">病理闭环</div>
405
+				<nz-steps [nzCurrent]="stepLength" nzDirection="vertical" nzSize="small">
406
+					<ng-container *ngFor="let item of pathologyLogs; let index = index">
407
+							<nz-step
408
+								[nzDescription]="tpl"
409
+							>
410
+							</nz-step>
411
+							<ng-template #tpl>
412
+								<div *ngIf="index==pathologyLogs.length-1" class="step-size">
413
+									<div style="color: #49B856;">{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
414
+									<div style="color:#333;">{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto?item.operationUserDto.name:''}}</div>
415
+								</div>
416
+								<div *ngIf="index!=pathologyLogs.length-1" class="step-size">
417
+									<div>{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
418
+									<div>{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto?item.operationUserDto.name:''}}</div>
419
+								</div>
420
+							</ng-template>
421
+						</ng-container>
422
+				</nz-steps>
423
+			</div>
424
+		</div>
425
+		<div class="display_flex justify-content_flex-center bottom-btn">
426
+			<button class="btn btn-right" nz-button nzType="primary" (click)="closeDetailMoadl()">知道了</button>
427
+		</div>
428
+	</div>
429
+</div>
430
+
431
+<!-- 操作成功/失败提示框 -->
432
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
433
+  [info]="promptInfo" (closeModel)="closeModel()"></app-prompt-modal>
434
+	
435
+
436
+<div class="mask-style" *ngIf="isSpinning">
437
+	<nz-spin nzSimple class="spin-style"></nz-spin>
438
+</div>
439
+
440
+<!-- 查看标本 -->
441
+<div class="look">
442
+	<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="specimenViewDialog">
443
+		<div class="modalBody modalBody-ga">
444
+			<div class="title">查看标本<i class="icon_transport transport-guanbi" (click)="closeSpecimenModal()"></i>
445
+			</div>
446
+			<overlay-scrollbars #osComponentRef1 class="content">
447
+				<div class="list-template__bottom">
448
+					<nz-table class="list-template__nzTable" [nzData]="viewData" nzSize="middle" [nzShowPagination]="false"
449
+						[nzLoading]="loading1">
450
+						<thead>
451
+							<tr class="thead">
452
+								<th>标本名称</th>
453
+								<th>编码</th>
454
+								<th>备注</th>
455
+								<th>离体时间</th>
456
+								<th>离体操作人</th>
457
+								<th>固定时间</th>
458
+								<th>固定操作人</th>
459
+							</tr>
460
+						</thead>
461
+						<tbody>
462
+							<tr *ngFor="let data of viewData">
463
+								<td>{{ data.specimenName }}</td>
464
+								<td>{{ data.specimenCode }}</td>
465
+								<td>{{ data.remark ? data.remark : '无' }}</td>
466
+								<td>{{ data.inVitroTime ? (data.inVitroTime|date:'yyyy-MM-dd HH:mm:ss') : '-' }}</td>
467
+								<td>{{ data.inVitroOperator ? data.inVitroOperator.name : '-' }}</td>
468
+								<td>{{ data.fixationTime ? (data.fixationTime|date:'yyyy-MM-dd HH:mm:ss') : '-' }}</td>
469
+								<td>{{ data.fixationOperator ? data.fixationOperator.name : '-' }}</td>
470
+							</tr>
471
+						</tbody>
472
+					</nz-table>
473
+				</div>
474
+			</overlay-scrollbars>
475
+			<div class="display_flex justify-content_flex-center">
476
+				<button class="btn" nz-button nzType="primary" (click)="closeSpecimenModal()">知道了</button>
477
+			</div>
478
+		</div>
479
+	</div>
480
+</div>
481
+
482
+<!-- 补打 -->
483
+<app-dialog-delete [delModal]="printModal" (hideDelModalEvent)="hidePrintModal()" [btnLoading]="parintLoading"
484
+  (confirmDelEvent)="confirmPrintDel()" [content]="'您确认要重新打印条码吗?'"></app-dialog-delete>
485
+	
486
+<!-- 配送 -->
487
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="distributionModal">
488
+	<div class="modalBody">
489
+		<div class="title">配送信息填写<i class="icon_transport transport-guanbi" (click)="hideDistributionModal()"></i>
490
+		</div>
491
+		<div class="content">
492
+		 <div class="title-class">包内含申请单{{rowData.pathologyFormNum}}张、标本{{rowData.specimenNum}}支,请填写配送人员工号。</div>
493
+		 <form nz-form [formGroup]="validateForm" class="addForm" (ngSubmit)="submitDistributionForm()">
494
+			<nz-form-item>
495
+				<nz-form-label nzRequired nzFor="jobNumber">配送人工号</nz-form-label>
496
+				<nz-form-control nzErrorTip="请输入配送人工号!">
497
+					<input nz-input (ngModelChange)="numberChange($event)" formControlName="jobNumber" placeholder="请输入配送人工号" nzSize="default" />
498
+				</nz-form-control>
499
+			</nz-form-item>
500
+			<nz-form-item class="form-name">
501
+				<nz-form-label style="margin-left: 12px;">配送人姓名</nz-form-label>
502
+				<!-- <nz-form-control nzErrorTip="请输入配送人工号!"> -->
503
+					<div class="job-class">{{distributionName}}</div>
504
+				<!-- </nz-form-control> -->
505
+			</nz-form-item>
506
+			<nz-form-item>
507
+				<nz-form-label nzRequired nzFor="gurop">接收院区</nz-form-label>
508
+				<nz-form-control nzErrorTip="请选择接收院区!">
509
+					<nz-input-group>
510
+						<nz-select class="formItem" (ngModelChange)="changeHospDate($event)" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择接收院区" formControlName="gurop">
511
+							<ng-container *ngFor="let option of hospital">
512
+								<nz-option [nzLabel]="option.hosName" [nzValue]="option.id"></nz-option>
513
+							</ng-container>
514
+						</nz-select>
515
+					</nz-input-group>
516
+				</nz-form-control>
517
+			</nz-form-item>
518
+			<nz-form-item>
519
+				<nz-form-label nzRequired nzFor="department">接收科室</nz-form-label>
520
+				<nz-form-control nzErrorTip="请选择接收科室!">
521
+					<nz-input-group>
522
+						<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择接收科室" formControlName="department">
523
+							<ng-container *ngFor="let option of department">
524
+								<nz-option *ngIf="!isDeptLoading" [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
525
+							</ng-container>
526
+							<nz-option *ngIf="isDeptLoading" nzDisabled nzCustomContent>
527
+								<i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
528
+							</nz-option>
529
+						</nz-select>
530
+					</nz-input-group>
531
+				</nz-form-control>
532
+			</nz-form-item>
533
+		 </form>
534
+		</div>
535
+		<div class="display_flex justify-content_flex-center">
536
+			<button class="btn" nz-button nzType="primary" (click)="submitDistributionForm()" [nzLoading]="btnLoading">确定配送</button>
537
+			<button class="btn cancel" nz-button nzType="default" (click)="hideDistributionModal()">取消</button>
538
+		</div>
539
+	</div>
540
+</div>
541
+
542
+<!-- 配送接收 -->
543
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="receptionModal">
544
+	<div class="modalBody">
545
+		<div class="title">配送接收<i class="icon_transport transport-guanbi" (click)="hideReceptionModal()"></i>
546
+		</div>
547
+		<div class="content">
548
+		 <div class="title-class">
549
+			 包内含申请单12张、标本100,请确认接收。
550
+			</div>
551
+		 <form nz-form [formGroup]="validateConnectForm" class="addForm" (ngSubmit)="submitReceptionForm()">
552
+			<nz-form-item>
553
+				<nz-form-label nzRequired nzFor="receptionNumber">接收人工号</nz-form-label>
554
+				<nz-form-control nzErrorTip="请输入接收人工号!">
555
+					<input nz-input (ngModelChange)="receptionChange($event)" formControlName="receptionNumber" placeholder="请输入接收人工号" nzSize="default" />
556
+				</nz-form-control>
557
+			</nz-form-item>
558
+			<nz-form-item class="form-name">
559
+				<nz-form-label style="margin-left: 12px;">接收人姓名</nz-form-label>
560
+				<!-- <nz-form-control nzErrorTip="请输入接收人工号!"> -->
561
+					<div class="job-class">{{receptionName}}</div>
562
+				<!-- </nz-form-control> -->
563
+			</nz-form-item>
564
+			<nz-form-item>
565
+				<nz-form-label nzRequired nzFor="dispatchingNumber">配送人工号</nz-form-label>
566
+				<nz-form-control nzErrorTip="请输入配送人工号!">
567
+					<input nz-input (ngModelChange)="dispatchingChange($event)" formControlName="dispatchingNumber" placeholder="请输入配送人工号" nzSize="default" />
568
+				</nz-form-control>
569
+			</nz-form-item>
570
+			<nz-form-item class="form-name">
571
+				<nz-form-label style="margin-left: 12px;">配送人姓名</nz-form-label>
572
+				<!-- <nz-form-control nzErrorTip="请输入配送人工号!"> -->
573
+					<div class="job-class">{{dispatchingName}}</div>
574
+				<!-- </nz-form-control> -->
575
+			</nz-form-item>
576
+		 </form>
577
+		</div>
578
+		<div class="display_flex justify-content_flex-center">
579
+			<button class="btn" nz-button nzType="primary" (click)="submitReceptionForm()" [nzLoading]="btnConnectLoading">确定接收</button>
580
+			<button class="btn cancel" nz-button nzType="default" (click)="hideReceptionModal()">取消</button>
581
+		</div>
582
+	</div>
583
+</div>
584
+
585
+<!-- 打包并打印 -->
586
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="packModal">
587
+	<div class="modalBody">
588
+		<div class="title">打包并打印<i class="icon_transport transport-guanbi" (click)="hidePackModal()"></i>
589
+		</div>
590
+		<div class="content-modal">
591
+			 本次共扫描单据50张、标本40,是否打包并打印?
592
+		</div>
593
+		<div class="display_flex justify-content_flex-center">
594
+			<button class="btn" nz-button nzType="primary" (click)="submitPackForm()" [nzLoading]="btnPackLoading">打包并打印</button>
595
+			<button class="btn cancel" nz-button nzType="default" (click)="hidePackModal()">取消</button>
596
+		</div>
597
+	</div>
598
+</div>
599
+
600
+<!-- 打印 -->
601
+<div id="report" style="display: none;" *ngIf="printData">
602
+	<div class="monad">
603
+		<div style="font-size: 10px;padding: 2px;">
604
+			<!-- <div> -->
605
+				<div style="display: flex;align-items: center;justify-content: center;">
606
+					<img style="width: 100%;height: 60px;" [src]="printData.qrCode" alt="">
607
+				</div>
608
+				<div style="padding: 1px;">
609
+					<div style="display: flex;flex-wrap: nowrap;margin-bottom:3px;">包码:{{printData.packCode}}</div>
610
+					<div style="display: flex;">打包时间:{{printData.packTime|date:'yyyy-MM-dd HH:mm:ss'}}</div>
611
+					<!-- <div style="display: flex;">打包人:{{printData.packUserDTO?printData.packUserDTO.name:'-'}}</div> -->
612
+					<!-- <div style="display: flex;margin-bottom:6px;">申请单数:{{printData.pathologyFormNum}}</div> -->
613
+					<!-- <div style="display: flex;margin-bottom:6px;">标本数:{{printData.specimenNum}}</div> -->
614
+				</div>
615
+			<!-- </div> -->
616
+			<!-- <div style="display: flex;">打包时间:{{printData.packTime|date:'yyyy-MM-dd HH:mm:ss'}}</div> -->
617
+		</div>
618
+	</div>
619
+</div>

Різницю між файлами не показано, бо вона завелика
+ 1712 - 0
src/app/views/pathology-communication-book/pathology-communication-book.component.less


Різницю між файлами не показано, бо вона завелика
+ 1394 - 0
src/app/views/pathology-communication-book/pathology-communication-book.component.ts


+ 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 { }

+ 43 - 1
src/app/views/pathology/pathology.component.html

@@ -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
+	}

+ 17 - 1
src/app/views/pathology/pathology.component.ts

@@ -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)