Browse Source

大输液开发

maotao 7 months ago
parent
commit
4c3a9fe404
41 changed files with 6264 additions and 707 deletions
  1. 6 1
      src/app/app-routing.module.ts
  2. 56 0
      src/app/services/main.service.ts
  3. 10 0
      src/app/services/tool.service.ts
  4. 11 0
      src/app/share/hs-prompt-modal/hs-prompt-modal.component.ts
  5. 147 94
      src/app/share/pathology-add/pathology-add.component.html
  6. 39 0
      src/app/share/pathology-add/pathology-add.component.less
  7. 192 44
      src/app/share/pathology-add/pathology-add.component.ts
  8. 78 39
      src/app/share/pathology-detail/pathology-detail.component.html
  9. 6 0
      src/app/share/pathology-detail/pathology-detail.component.ts
  10. 18 6
      src/app/views/admin-office-prescription/admin-office-prescription.component.html
  11. 228 13
      src/app/views/dispensing-batch/dispensing-batch.component.html
  12. 12 1
      src/app/views/dispensing-batch/dispensing-batch.component.less
  13. 177 37
      src/app/views/dispensing-batch/dispensing-batch.component.ts
  14. 11 9
      src/app/views/dispensing-detail/dispensing-detail.component.html
  15. 17 0
      src/app/views/dispensing-info-detail/dispensing-info-detail-routing.module.ts
  16. 374 0
      src/app/views/dispensing-info-detail/dispensing-info-detail.component.html
  17. 238 0
      src/app/views/dispensing-info-detail/dispensing-info-detail.component.less
  18. 262 0
      src/app/views/dispensing-info-detail/dispensing-info-detail.component.ts
  19. 19 0
      src/app/views/dispensing-info-detail/dispensing-info-detail.module.ts
  20. 1 1
      src/app/views/drug-cloud/drug-cloud.component.html
  21. 1 1
      src/app/views/hushijiandan/hushijiandan.component.html
  22. 24 0
      src/app/views/inspect-statistics/inspect-statistics-routing.module.ts
  23. 90 0
      src/app/views/inspect-statistics/inspect-statistics.component.html
  24. 95 0
      src/app/views/inspect-statistics/inspect-statistics.component.less
  25. 141 0
      src/app/views/inspect-statistics/inspect-statistics.component.ts
  26. 19 0
      src/app/views/inspect-statistics/inspect-statistics.module.ts
  27. 2 0
      src/app/views/login/login.component.ts
  28. 10 0
      src/app/views/main/main-routing.module.ts
  29. 195 286
      src/app/views/pathology/pathology.component.html
  30. 251 4
      src/app/views/pathology/pathology.component.less
  31. 655 108
      src/app/views/pathology/pathology.component.ts
  32. 17 0
      src/app/views/pathologyScan/pathologyScan-routing.module.ts
  33. 282 0
      src/app/views/pathologyScan/pathologyScan.component.html
  34. 1290 0
      src/app/views/pathologyScan/pathologyScan.component.less
  35. 1194 0
      src/app/views/pathologyScan/pathologyScan.component.ts
  36. 17 0
      src/app/views/pathologyScan/pathologyScan.module.ts
  37. 29 25
      src/app/views/round-robin/round-robin.component.ts
  38. 27 33
      src/app/views/specimen-room-view/specimen-room-view.component.html
  39. 22 4
      src/app/views/specimen-room-view/specimen-room-view.component.less
  40. 1 1
      src/app/views/specimen-room-view/specimen-room-view.component.ts
  41. BIN
      src/assets/images/yc_logo.png

+ 6 - 1
src/app/app-routing.module.ts

@@ -79,12 +79,17 @@ const routes: Routes = [
79 79
 	  loadChildren: () => import('./views/specimen-room-view/specimen-room-view.module').then(m => m.SpecimenRoomViewModule),
80 80
 	  canActivate: [SpecimenRoomViewGuard]
81 81
 	},
82
-	// 标本间
82
+	// 病理科
83 83
 	{
84 84
 	  path: 'pathology',
85 85
 	  loadChildren: () => import('./views/pathology/pathology.module').then(m => m.PathologyModule),
86 86
 	  canActivate: [PathologyGuard]
87 87
 	},
88
+	// 病理科端-扫描条码
89
+	{
90
+	  path: 'pathologyScan',
91
+	  loadChildren: () => import('./views/pathologyScan/pathologyScan.module').then(m => m.PathologyScanModule),
92
+	},
88 93
   // 全局业务查看
89 94
   {
90 95
     path: 'disinfectionSupply',

+ 56 - 0
src/app/services/main.service.ts

@@ -879,4 +879,60 @@ export class MainService {
879 879
 	    headers: this.headers,
880 880
 	  });
881 881
 	}
882
+	
883
+	// 标本间获取批次号
884
+	generateBatchNumber() {
885
+	  return this.http.post(host.host + `/pathology/generateBatchNumber/blbatch`, {}, {
886
+	    headers: this.headers,
887
+	  });
888
+	}
889
+	
890
+	// 标本间获取标本接收信息
891
+	getSpecimenInfo(batchNo,deptId) {
892
+	  return this.http.post(host.host + `/pathology/getInfo/${batchNo}/${deptId}`, {}, {
893
+	    headers: this.headers,
894
+	  });
895
+	}
896
+	
897
+	// 标本间标本接收-交接完成
898
+	handoverCompleted(data) {
899
+	  return this.http.post(host.host + `/pathology/handoverCompleted`, data, {
900
+	    headers: this.headers,
901
+	  });
902
+	}
903
+	
904
+	// 病理科打包
905
+	pathologyPack(data) {
906
+	  return this.http.post(host.host + `/pathology/pack`, data, {
907
+	    headers: this.headers,
908
+	  });
909
+	}
910
+	
911
+	// 病理科今日接收汇总
912
+	pathologyToday(data) {
913
+	  return this.http.post(host.host + `/pathology/receiveToday`, data, {
914
+	    headers: this.headers,
915
+	  });
916
+	}
917
+	
918
+	// 大输液-发药批次-发药总量
919
+	drugsGross(batchId) {
920
+	  return this.http.get(host.host + `/infusion/solutions/drugsNum/${batchId}`, {
921
+	    headers: this.headers,
922
+	  });
923
+	}
924
+	
925
+	// 大输液-发药批次-发药信息
926
+	drugsInfo(data) {
927
+	  return this.http.post(host.host + `/infusion/solutions/dispensing/medicine/details`,data, {
928
+	    headers: this.headers,
929
+	  });
930
+	}
931
+	
932
+	// 统计分析-陪检统计
933
+	inspectionStatistics(data) {
934
+	  return this.http.post(host.host + `/report/accompanied/inspection`,data, {
935
+	    headers: this.headers,
936
+	  });
937
+	}
882 938
 }

+ 10 - 0
src/app/services/tool.service.ts

@@ -51,6 +51,10 @@ export class ToolService {
51 51
 	getCurrentUserId() {
52 52
 	  return JSON.parse(localStorage.getItem("user")).user.id;
53 53
 	}
54
+	//获取当前用户信息
55
+	getCurrentUserInfo() {
56
+	  return JSON.parse(localStorage.getItem("user")).user;
57
+	}
54 58
   //获取当前用户科室
55 59
   getCurrentUserDept() {
56 60
     return JSON.parse(localStorage.getItem("user")).user.dept;
@@ -195,6 +199,12 @@ export class ToolService {
195 199
         case "commonFault":
196 200
           coopBtns.commonFault = true; //常见故障
197 201
           break;
202
+				case "dispensingInfo":
203
+				  coopBtns.dispensingInfo = true; //发药信息
204
+				  break;
205
+				case "dispensingGross":
206
+				  coopBtns.dispensingGross = true; //发药总量
207
+				  break;	
198 208
       }
199 209
     });
200 210
     console.log(coopBtns);

+ 11 - 0
src/app/share/hs-prompt-modal/hs-prompt-modal.component.ts

@@ -187,6 +187,17 @@ export class HsPromptModalComponent implements OnInit {
187 187
           type: {id: "386"},
188 188
         },
189 189
       }
190
+    }else if(this.deptType === 'pathology'){
191
+      dataObj = {
192
+        idx: 0,
193
+        sum: 10,
194
+        department: {
195
+          searchType: 1,// 简单查询
196
+          hospital: { id: hosId },
197
+          dept: keywords,
198
+          type: {id: "282"},
199
+        },
200
+      }
190 201
     }
191 202
     this.mainService
192 203
       .getFetchDataList("data", "department", dataObj)

+ 147 - 94
src/app/share/pathology-add/pathology-add.component.html

@@ -5,14 +5,9 @@
5 5
 		<div class="content" *ngIf="!isSpinning">
6 6
 			<form nz-form [formGroup]="validateForm" class="addForm" (ngSubmit)="submitForm()">
7 7
 				<div class="content-item boder-right">
8
-					<nz-form-item class="form-item">
9
-						<nz-form-label nzRequired nzFor="intraoperativeRapidity" [nzSm]="6" [nzXs]="24">是否术中快速</nz-form-label>
10
-						<nz-form-control nzErrorTip="请选择!" [nzSm]="18" [nzXs]="24">
11
-							<nz-radio-group formControlName="intraoperativeRapidity">
12
-								<label nz-radio [nzValue]="1">是</label>
13
-								<label nz-radio [nzValue]="0">否</label>
14
-							</nz-radio-group>
15
-						</nz-form-control>
8
+					<nz-form-item class="form-title-box">
9
+						<div class="form-title">取标本位置:{{detailsData.surgeryDeptDTO.dept}}</div>
10
+						<div class="form-title">取材医生:{{detailsData.surgeryDoctorDTO?detailsData.surgeryDoctorDTO.name : '-'}}</div>
16 11
 					</nz-form-item>
17 12
 					<nz-form-item class="form-title-box">
18 13
 						<div class="form-title"><span class="font-weight-500">申请单编号:</span>{{detailsData.applyCode}}</div>
@@ -34,29 +29,42 @@
34 29
 					</nz-form-item>
35 30
 					
36 31
 					<nz-form-item>
37
-						<div class="form-title width-100 font-weight-500">病摘要:</div>
32
+						<div class="form-title width-100 font-weight-500">病摘要:</div>
38 33
 						<div>{{detailsData.medicalRecords||'无'}}</div>
39 34
 					</nz-form-item>
40 35
 					
41
-					<nz-form-item class="form-item">
36
+					<nz-form-item>
37
+						<div class="form-title width-100 font-weight-500">手术方案:</div>
38
+						<div>{{detailsData.surgicalPlan||'无'}}</div>
39
+					</nz-form-item>
40
+					
41
+					<!-- <nz-form-item class="form-item">
42 42
 						<nz-form-label nzRequired nzFor="surgicalPlan" [nzSm]="24" [nzXs]="24">手术方案</nz-form-label>
43 43
 						<nz-form-control nzErrorTip="请输入手术方案" [nzSm]="24" [nzXs]="24">
44
-							<textarea rows="3" nz-input formControlName="surgicalPlan" placeholder="请输入手术方案"></textarea>
44
+							<textarea rows="3" nz-input disabled formControlName="surgicalPlan" placeholder="请输入手术方案"></textarea>
45 45
 						</nz-form-control>
46
-					</nz-form-item>
46
+					</nz-form-item> -->
47 47
 				</div>
48 48
 				
49 49
 				<div class="content-item">
50
-					<nz-form-item class="form-item">
50
+	<!-- 				<nz-form-item class="form-item">
51 51
 						<nz-form-label nzRequired nzFor="intraoperativeFindings" [nzSm]="6" [nzXs]="24">术中所见</nz-form-label>
52 52
 						<nz-form-control nzErrorTip="请输入术中所见" [nzSm]="24" [nzXs]="24">
53 53
 							<textarea rows="3" nz-input formControlName="intraoperativeFindings" placeholder="请输入术中所见"></textarea>
54 54
 						</nz-form-control>
55
+					</nz-form-item> -->
56
+					<nz-form-item class="form-item">
57
+						<nz-form-label nzRequired nzFor="intraoperativeRapidity" [nzSm]="6" [nzXs]="24">是否术中快速</nz-form-label>
58
+						<nz-form-control nzErrorTip="请选择!" [nzSm]="18" [nzXs]="24">
59
+							<nz-radio-group formControlName="intraoperativeRapidity">
60
+								<label nz-radio [nzValue]="1">是</label>
61
+								<label nz-radio [nzValue]="0">否</label>
62
+							</nz-radio-group>
63
+						</nz-form-control>
55 64
 					</nz-form-item>
56
-					
57 65
 					<nz-form-item class="form-item">
58
-						<nz-form-label nzRequired nzFor="project" [nzSm]="5" [nzXs]="24">检验项目</nz-form-label>
59
-						<nz-form-control nzErrorTip="请选择检验项目!" [nzSm]="19" [nzXs]="24">
66
+						<nz-form-label nzRequired nzFor="project" [nzSm]="4" [nzXs]="24">检验项目</nz-form-label>
67
+						<nz-form-control nzErrorTip="请选择检验项目!" [nzSm]="20" [nzXs]="24">
60 68
 							<nz-input-group>
61 69
 								<nz-select nzSearch nzShowSearch nzMode="multiple" nzPlaceHolder="请选择检验项目" formControlName="project">
62 70
 									<ng-container *ngFor="let option of projectData">
@@ -67,41 +75,39 @@
67 75
 						</nz-form-control>
68 76
 					</nz-form-item>
69 77
 					
70
-					<nz-form-item class="form-item">
71
-						<nz-form-label nzRequired nzFor="specimenGenre" [nzSm]="5" [nzXs]="24">标本类型</nz-form-label>
72
-						<nz-form-control nzErrorTip="请选择标本类型!" [nzSm]="19" [nzXs]="24">
73
-							<nz-input-group>
74
-								<nz-select nzSearch nzShowSearch nzPlaceHolder="请选择标本类型" formControlName="specimenGenre">
75
-									<ng-container *ngFor="let option of specimenData">
76
-										<nz-option *ngIf="!isDeptLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
77
-									</ng-container>
78
-									<nz-option *ngIf="isDeptLoading" nzDisabled nzCustomContent>
79
-										<i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
80
-									</nz-option>
81
-								</nz-select>
82
-							</nz-input-group>
83
-						</nz-form-control>
84
-					</nz-form-item>
78
+					<div class="df-sb">
79
+						<nz-form-item class="form-item">
80
+							<nz-form-label nzRequired nzFor="specimenGenre">标本类型</nz-form-label>
81
+							<nz-form-control nzErrorTip="请选择标本类型!">
82
+								<nz-input-group>
83
+									<nz-select nzSearch nzShowSearch nzPlaceHolder="请选择标本类型" formControlName="specimenGenre">
84
+										<ng-container *ngFor="let option of specimenData">
85
+											<nz-option *ngIf="!isDeptLoading" [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
86
+										</ng-container>
87
+										<nz-option *ngIf="isDeptLoading" nzDisabled nzCustomContent>
88
+											<i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
89
+										</nz-option>
90
+									</nz-select>
91
+								</nz-input-group>
92
+							</nz-form-control>
93
+						</nz-form-item>
94
+						
95
+						<nz-form-item class="form-item-right">
96
+							<nz-form-label nzRequired nzFor="specimenNum">标本数量</nz-form-label>
97
+							<nz-form-control nzErrorTip="请输入标本数量!">
98
+								<input nz-input formControlName="specimenNum" disabled placeholder="请输入标本数量" nzSize="default" />
99
+							</nz-form-control>
100
+						</nz-form-item>
101
+					</div>
85 102
 					
86
-					<nz-form-item class="form-item">
87
-						<nz-form-label nzRequired nzFor="specimenNum" [nzSm]="5" [nzXs]="24">标本件数</nz-form-label>
88
-						<nz-form-control nzErrorTip="请输入标本件数!" [nzSm]="19" [nzXs]="24">
89
-							<input nz-input formControlName="specimenNum" disabled placeholder="请输入标本件数" nzSize="default" />
90
-						</nz-form-control>
91
-					</nz-form-item>
92 103
 					
93 104
 					<nz-form-item class="form-item">
94
-						<nz-form-label nzRequired nzFor="takePart" [nzSm]="5" [nzXs]="24">采取部位</nz-form-label>
95
-						<nz-form-control nzErrorTip="请输入采取部位!" [nzSm]="19" [nzXs]="24">
96
-							<input nz-input formControlName="takePart"  placeholder="请输入采取部位" nzSize="default" />
105
+						<nz-form-label nzRequired nzFor="takePart" [nzSm]="4" [nzXs]="24">部位</nz-form-label>
106
+						<nz-form-control nzErrorTip="请输入部位!" [nzSm]="20" [nzXs]="24">
107
+							<input nz-input formControlName="takePart"  placeholder="请输入部位" nzSize="default" />
97 108
 						</nz-form-control>
98 109
 					</nz-form-item>
99 110
 					
100
-					<nz-form-item class="form-title-box">
101
-						<div class="form-title">取标本位置:{{detailsData.surgeryDeptDTO.dept}}</div>
102
-						<div class="form-title">取材医生:{{detailsData.surgeryDoctorDTO?detailsData.surgeryDoctorDTO.name : '-'}}</div>
103
-					</nz-form-item>
104
-					
105 111
 					<nz-form-item class="form-item">
106 112
 						<nz-form-label nzRequired [nzSm]="3" [nzXs]="24">标本</nz-form-label>
107 113
 						<div class="add-icon-class" (click)='openSpecimen()'>
@@ -112,10 +118,7 @@
112 118
 					<div class="specimen-list">
113 119
 						<div *ngFor="let item of specimenList;let index=index;" class="specimen-item">
114 120
 							<div class="specimen-name" (click)="specimenEdit($event,item,index)">
115
-							{{item.partSource?item.partSource.name:''}} <span *ngIf="item.system">-</span>
116
-							{{item.system?item.system.name:''}} <span *ngIf="item.organ">-</span>
117
-							{{item.organ?item.organ.name:''}} <span>-</span>
118
-							{{item.sample?item.sample.name:item.specimenName}}
121
+							{{item.partSource?item.partSource.name:''}}{{item.organ?item.organ.name:''}}{{item.specimenName}}
119 122
 							</div>
120 123
 							<span class="icon_transport transport-lajitong specimen-icon" (click)="specimenDel($event,item,index)"></span>
121 124
 						</div>
@@ -171,7 +174,7 @@
171 174
 				</nz-form-item>
172 175
 				
173 176
 				<nz-form-item class="form-item">
174
-					<nz-form-label nzRequired [nzSm]="2" [nzXs]="24">标本名称</nz-form-label>
177
+					<nz-form-label [nzSm]="4" [nzXs]="24">标本名称快捷选择</nz-form-label>
175 178
 					<div class="specimen-list">
176 179
 						<div *ngFor="let item of specimenNameList;let index=index;" class="select-item"
177 180
 							[ngClass]="{'activeClass': index == specimenNameIndex}" (click)="specimenNameClick($event,item,index)">
@@ -180,11 +183,15 @@
180 183
 					</div>
181 184
 				</nz-form-item>
182 185
 				
183
-				<nz-form-item class="form-item" *ngIf="specimenNameName=='qita'">
184
-					<nz-form-label nzRequired nzFor="specimenName" [nzSm]="3" [nzXs]="24">其他标本名称</nz-form-label>
185
-					<nz-form-control nzErrorTip="请输入其他标本名称" [nzSm]="21" [nzXs]="24">
186
-						<input nz-input formControlName="specimenName" placeholder="请输入其他标本名称"/>
186
+				<nz-form-item class="form-item">
187
+					<nz-form-label nzRequired nzFor="specimenName" [nzSm]="3" [nzXs]="24">标本名称</nz-form-label>
188
+					<nz-form-control nzErrorTip="请输入标本名称" [nzSm]="21" [nzXs]="24">
189
+						<input nz-input maxlength="15" (ngModelChange)="specimenInput($event)" formControlName="specimenName" placeholder="请输入标本名称"/>
187 190
 					</nz-form-control>
191
+					<div class="empty-box">
192
+						<span class="name">{{specimenNameLength}}/15</span>
193
+						<span class="empty" (click)="emptData($event)">清空</span>
194
+					</div>
188 195
 				</nz-form-item>
189 196
 				
190 197
 				<nz-form-item class="form-item">
@@ -196,7 +203,8 @@
196 203
 			</form>
197 204
 		</div>
198 205
 		<div class="display_flex justify-content_flex-center bottom-btn">
199
-			<button class="btn btn-right" nz-button nzType="primary" (click)="submitSpecimen()" [nzLoading]="btnSpLoading">确定</button>
206
+			<button class="btn btn-right" nz-button nzType="primary" (click)="submitSpecimen(1)" [nzLoading]="btnSpLoading">确定</button>
207
+			<button class="btn btn-right" nz-button nzType="primary" (click)="submitSpecimen(2)">新增下一个标本</button>
200 208
 			<button class="btn cancel" nz-button nzType="default" (click)="hideSpecimenModal()">取消</button>
201 209
 		</div>
202 210
 	</div>
@@ -209,9 +217,13 @@
209 217
 <app-prompt-modal *ngIf="specimenModalShow" [content]="promptContent" [success]="ifSuccess" [show]="specimenModalShow"
210 218
   [info]="promptInfo" (closeModel)="closeSpecimenModel()"></app-prompt-modal>
211 219
 
212
- <!-- 删除模态框 -->
213
-<app-dialog-delete [delModal]="delModal" (hideDelModalEvent)="hideDelModal()" [btnLoading]="btnLoading"
214
-  (confirmDelEvent)="confirmDel()" content="您确认要删除标本吗?"></app-dialog-delete>
220
+ <!-- 新增下一个标本 -->
221
+<app-dialog-delete [delModal]="addMadal" (hideDelModalEvent)="hideAddModal()" [btnLoading]="addSpLoading"
222
+  (confirmDelEvent)="confirmAdd()" content="您确认要新增下一个标本吗?"></app-dialog-delete>
223
+	
224
+	<!-- 删除模态框 -->
225
+	<app-dialog-delete [delModal]="delModal" (hideDelModalEvent)="hideDelModal()" [btnLoading]="btnLoading"
226
+	  (confirmDelEvent)="confirmDel()" content="您确认要删除标本吗?"></app-dialog-delete>
215 227
 		
216 228
 <!-- 未打印 -->
217 229
 <div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="notModal">
@@ -257,55 +269,96 @@
257 269
 		<div class="monad">
258 270
 			<div *ngIf="printData && printData.specimenList && printData.specimenList.length>1" style="border: 1px solid #AAAAAA;
259 271
 				border-radius: 5px;font-size: 12px;">
260
-				<img style="width: 100%;height: 90px;border-radius: 5px;" [src]="printData.applyBarCode" alt="">
261
-				<div style="display: flex;border-bottom: 1px solid #AAAAAA;border-top: 1px solid #aaa;">
262
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">患者</div>
263
-					<div style="width:70%;padding:1px;">{{printData.patientName}}({{printData.patientAge}}岁)</div>
272
+				 <div style="display: flex;">
273
+					 <img style="width: 50%;height: 70px;border-radius: 5px;" [src]="printData.applyBarCode" alt="">
274
+					 <div style="width: 50%;">
275
+						 
276
+						 <img style="width: 100%; border-radius: 5px;
277
+						 	position: relative;top: 15px;right: 7px;" [src]="tool.logoUrl" alt="">
278
+					 	<!-- <img style="width: 100%; border-radius: 5px;
279
+					 		position: relative;top: 15px;right: 7px;" src="../../../assets/images/yc_logo.png" alt=""> -->
280
+					 </div>
281
+				 </div>
282
+				
283
+				<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
284
+					<div style="width:20%;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">患者姓名</div>
285
+					<div style="width:50%;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">{{printData.patientName}}</div>
286
+					<div style="width:14%;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">性别</div>
287
+					<div style="width:16%;padding:1px;border-top: 1px solid #aaa;">{{printData.specimenList[0].patientGender}}</div>
264 288
 				</div>
265 289
 				<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
266
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">住院信息</div>
267
-					<div style="width:70%;padding:1px;">{{printData.patientBedNum}}床/{{printData.residenceNo}}</div>
290
+					<div style="width:20%;border-right: 1px solid #AAAAAA;padding:1px;">住院号</div>
291
+					<div style="width:50%;border-right: 1px solid #AAAAAA;padding:1px;">{{printData.residenceNo}}</div>
292
+					<div style="width:14%;border-right: 1px solid #AAAAAA;padding:1px;">年龄</div>
293
+					<div style="width:16%;padding:1px;"> {{printData.patientAge}}岁</div>
268 294
 				</div>
269 295
 				<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
270
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">科室</div>
271
-					<div style="width:70%;padding:1px;">{{printData.patientDept}}</div>
296
+					<div style="width:20%;border-right: 1px solid #AAAAAA;padding:1px;">科室 </div>
297
+					<div style="width:50%;border-right: 1px solid #AAAAAA;
298
+					padding:1px;overflow: hidden;white-space: nowrap">{{printData.patientDept}}</div>
299
+					<div style="width:14%;border-right: 1px solid #AAAAAA;padding:1px;">床号</div>
300
+					<div style="width:16%;padding:1px;">{{printData.patientBedNum}}床</div>
272 301
 				</div>
273 302
 				<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
274
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">部位</div>
275
-					<div style="width:70%;padding:1px;">{{printData.takePart}}</div>
303
+					<div style="width:20%;border-right: 1px solid #AAAAAA;padding:1px;">部位 </div>
304
+					<div style="width:50%;border-right: 1px solid #AAAAAA;
305
+					padding:1px;overflow: hidden;white-space: nowrap">{{printData.takePart}}</div>
306
+					<div style="width:14%;border-right: 1px solid #AAAAAA;padding:1px;">标本数</div>
307
+					<div style="width:16%;padding:1px;">{{printData.specimenNum}}</div>
276 308
 				</div>
277 309
 				<div style="display: flex;">
278
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">标本数</div>
279
-					<div style="width:70%;padding:1px;">{{printData.specimenNum}}</div>
310
+					<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">日期</div>
311
+					<div style="width:80%;box-sizing: border-box;padding:1px;border-right: 1px solid #fff;">{{printData.specimenList[0].inVitroTime|date:'yyyy-MM-dd'}}</div>
280 312
 				</div>
313
+				
281 314
 			</div>
282
-			<div style="height: 10px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>1"></div>
315
+			<div style="height: 20px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>1"></div>
283 316
 			<div style="font-size: 12px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>0">
284 317
 				<div *ngFor="let data of printData.specimenList; let index=index;">
285
-					<div style="height: 30px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>1"></div>
286
-					<div style="border: 1px solid #AAAAAA;border-radius: 5px;">
287
-						<img style="width: 100%;height: 90px;border-radius: 5px;" [src]="data.barCode" alt="">
288
-						<div class="monad-sign" style="border-bottom: 1px solid #AAAAAA;padding-left:1px;">
289
-							<div>{{data.system}}-{{data.organ}}</div>
290
-							<div>({{index+1}}/{{printData.specimenList.length}}) {{data.partSource}}-{{data.specimenName}}</div>
291
-						</div>
292
-						<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
293
-							<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">患者</div>
294
-							<div style="width:70%;padding:1px;">{{data.patientName}}({{data.patientAge}}岁)</div>
295
-						</div>
296
-						<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
297
-							<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">住院信息</div>
298
-							<div style="width:70%;padding:1px;">{{data.patientBedNum}}床/{{data.residenceNo}}</div>
318
+				 <div style="height: 50px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>1"></div>
319
+				 <div style="border: 1px solid #AAAAAA;border-radius: 5px;">
320
+					 <div style="display: flex;">
321
+					 	<img style="width: 50%;height: 70px;border-radius: 5px;" [src]="data.barCode" alt="">
322
+						<div style="width: 50%;">
323
+							<img style="width: 100%; border-radius: 5px;
324
+								position: relative;top: 15px;right: 7px;" [src]="tool.logoUrl" alt="">
325
+							<!-- <img style="width: 100%;border-radius: 5px;
326
+								position: relative;top: 15px;right: 7px;" src="../../../assets/images/yc_logo.png" alt=""> -->
299 327
 						</div>
300
-						<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
301
-							<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">科室</div>
302
-							<div style="width:70%;padding:1px;">{{data.patientDept}}</div>
303
-						</div>
304
-						<div style="display: flex;">
305
-							<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">离体时间</div>
306
-							<div style="width:70%;padding:1px;">{{data.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'}}</div>
307
-						</div>
308
-					</div>
328
+					 </div>
329
+					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
330
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">患者姓名</div>
331
+					 	<div style="width:50%;box-sizing: border-box;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">{{data.patientName}}</div>
332
+						<div style="width:14%;box-sizing: border-box;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">性别</div>
333
+						<div style="width:16%;box-sizing: border-box;padding:1px;border-top: 1px solid #aaa;">{{data.patientGender}}</div>
334
+					 </div>
335
+					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
336
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">住院号</div>
337
+					 	<div style="width:50%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">{{data.residenceNo}}</div>
338
+						<div style="width:14%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">年龄</div>
339
+						<div style="width:16%;box-sizing: border-box;padding:1px;"> {{data.patientAge}}岁</div>
340
+					 </div>
341
+					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
342
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">科室 </div>
343
+					 	<div style="width:50%;box-sizing: border-box;border-right: 1px solid #AAAAAA;
344
+						padding:1px;overflow: hidden;white-space: nowrap">{{data.patientDept}}</div>
345
+						<div style="width:14%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">床号</div>
346
+						<div style="width:16%;box-sizing: border-box;padding:1px;">{{data.patientBedNum}}床</div>
347
+					 </div>
348
+					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
349
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">标本名称</div>
350
+					 	<div style="width:80%;box-sizing: border-box;padding:1px;border-right: 1px solid #fff;
351
+						padding:1px;overflow: hidden;white-space: nowrap">({{index+1}}/{{printData.specimenList.length}}){{data.partSource}}{{data.organ}}{{data.specimenName}}</div>
352
+					 </div>
353
+					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
354
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">申请单号</div>
355
+					 	<div style="width:80%;box-sizing: border-box;padding:1px;border-right: 1px solid #fff;">{{data.applyCode }}</div>
356
+					 </div>
357
+					 <div style="display: flex;">
358
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">日期</div>
359
+					 	<div style="width:80%;box-sizing: border-box;padding:1px;border-right: 1px solid #fff;">{{data.inVitroTime|date:'yyyy-MM-dd'}}</div>
360
+					 </div>
361
+				 </div>
309 362
 				</div>
310 363
 			</div>
311 364
 		</div>

+ 39 - 0
src/app/share/pathology-add/pathology-add.component.less

@@ -78,6 +78,32 @@
78 78
 					height: 460px;
79 79
 					overflow-y: auto;
80 80
 					padding: 0 15px;
81
+					.df-sb{
82
+						display: flex;
83
+						justify-content: space-between;
84
+						.form-item{
85
+							flex: 1;
86
+							display: flex;
87
+							flex-wrap: nowrap;
88
+							.ant-form-item-label{
89
+								width: 33%;
90
+							}
91
+							.ant-form-item-control-wrapper{
92
+								width: 60%;
93
+							}
94
+						}
95
+						.form-item-right{
96
+							flex: 1;
97
+							display: flex;
98
+							flex-wrap: nowrap;
99
+							.ant-form-item-label{
100
+								width: 33%;
101
+							}
102
+							.ant-form-item-control-wrapper{
103
+								width: 70%;
104
+							}
105
+						}
106
+					}
81 107
 					.form-title-box{
82 108
 						display: flex;
83 109
 						.form-title{
@@ -199,6 +225,7 @@
199 225
 				  margin-bottom: 14px;
200 226
 					display: flex;
201 227
 					flex-wrap: wrap;
228
+					position: relative;
202 229
 				  .ant-form-item-label {
203 230
 				    text-align: left;
204 231
 						font-weight: 500;
@@ -208,6 +235,18 @@
208 235
 							width: 400px;
209 236
 						}
210 237
 					}
238
+					.empty-box{
239
+						position: absolute;
240
+						right: 6px;
241
+						top: 8px;
242
+						.name{
243
+							color: #ccc;
244
+						}
245
+						.empty{
246
+							color: #64BD7B;
247
+							cursor: pointer;
248
+						}
249
+					}
211 250
 				}
212 251
 				.specimen-list{
213 252
 					flex: 1;

+ 192 - 44
src/app/share/pathology-add/pathology-add.component.ts

@@ -71,11 +71,11 @@ export class PathologyAddComponent implements OnInit {
71 71
 	// 初始化新增form表单
72 72
 	initForm() {
73 73
 		this.validateForm = this.fb.group({
74
-		  intraoperativeRapidity: [1, [Validators.required]],
74
+		  intraoperativeRapidity: [null, [Validators.required]],
75 75
 			specimenGenre: [null, [Validators.required]],
76
-			intraoperativeFindings: [null, [Validators.required]],
76
+			// intraoperativeFindings: [null, [Validators.required]],
77 77
 			project: [null, [Validators.required]],
78
-			surgicalPlan: [null, [Validators.required]],
78
+			// surgicalPlan: [null, [Validators.required]],
79 79
 			specimenNum: [null,[Validators.required]],
80 80
 			takePart: [null, [Validators.required]]
81 81
 		});
@@ -97,12 +97,12 @@ export class PathologyAddComponent implements OnInit {
97 97
 		  .subscribe((data) => {
98 98
 		    this.isSpinning = false;
99 99
 		    this.detailsData = data.list[0];
100
-				if(this.detailsData.surgicalPlan){
101
-					this.validateForm.controls.surgicalPlan.setValue(this.detailsData.surgicalPlan);
102
-				}
103
-				if(this.detailsData.intraoperativeFindings){
104
-					this.validateForm.controls.intraoperativeFindings.setValue(this.detailsData.intraoperativeFindings);
105
-				}
100
+				// if(this.detailsData.surgicalPlan){
101
+				// 	this.validateForm.controls.surgicalPlan.setValue(this.detailsData.surgicalPlan);
102
+				// }
103
+				// if(this.detailsData.intraoperativeFindings){
104
+				// 	this.validateForm.controls.intraoperativeFindings.setValue(this.detailsData.intraoperativeFindings);
105
+				// }
106 106
 				this.getProDicData()
107 107
 				this.getDicData()
108 108
 				this.getSampleData()
@@ -213,29 +213,31 @@ export class PathologyAddComponent implements OnInit {
213 213
 		  .getFetchDataList("simple/data", "dictionaryTree", postData)
214 214
 		  .subscribe((data) => {
215 215
 		    this.specimenNameList = data.list;
216
-				this.specimenNameList.push({
217
-					name:'其他',
218
-					id:'qita'
219
-				})
216
+				// this.specimenNameList.push({
217
+				// 	name:'其他',
218
+				// 	id:'qita'
219
+				// })
220 220
 				if(type=='edit'){
221 221
 					if(item.sample){
222 222
 						this.validateSpecimenForm = this.fb.group({
223
-						  remark: [null, []]
223
+						  remark: [null, []],
224
+							specimenName: [null, [Validators.required]]
224 225
 						});
225 226
 						setTimeout(_=>{
226 227
 							let index4 = this.specimenNameList.findIndex(i=>i.id==item.sample.id)
227 228
 							this.specimenNameIndex = index4
228 229
 							this.specimenNameName = item.sample.name
229 230
 							this.specimenNameId = Number(item.sample.id);
231
+							this.validateSpecimenForm.controls.specimenName.setValue(item.specimenName);
230 232
 						},100)
231 233
 					}else{
232
-						this.validateSpecimenForm = this.fb.group({
233
-						  remark: [null, []],
234
-							specimenName: [null, [Validators.required]]
235
-						});
236
-						this.specimenNameIndex = this.specimenNameList.length-1
237
-						this.specimenNameName = 'qita'
238
-						this.validateSpecimenForm.controls.specimenName.setValue(item.specimenName);
234
+						// this.validateSpecimenForm = this.fb.group({
235
+						//   remark: [null, []],
236
+						// 	specimenName: [null, [Validators.required]]
237
+						// });
238
+						// this.specimenNameIndex = this.specimenNameList.length-1
239
+						// // this.specimenNameName = 'qita'
240
+						// this.validateSpecimenForm.controls.specimenName.setValue(item.specimenName);
239 241
 					}
240 242
 					setTimeout(_=>{
241 243
 						this.validateSpecimenForm.controls.remark.setValue(item.remark);
@@ -294,7 +296,8 @@ export class PathologyAddComponent implements OnInit {
294 296
 	// 选择标本
295 297
 	openSpecimen(){
296 298
 		this.validateSpecimenForm = this.fb.group({
297
-		  remark: [null, []]
299
+		  remark: [null, []],
300
+			specimenName:[null, [Validators.required]],
298 301
 		});
299 302
 		this.specimenDetailId = null;
300 303
 		this.placeIndex = null;
@@ -362,25 +365,45 @@ export class PathologyAddComponent implements OnInit {
362 365
 	specimenNameClick(e,item,index){
363 366
 		this.specimenNameIndex = index
364 367
 		let remark = this.validateSpecimenForm.value.remark
365
-		if(item.id == 'qita'){
366
-			this.validateSpecimenForm = this.fb.group({
367
-			  remark: [remark?remark:null, []],
368
-				specimenName: [null, [Validators.required]]
369
-			});
370
-			this.specimenNameId = 'null'
371
-			this.specimenNameName = 'qita'
372
-		}else{
373
-			this.validateSpecimenForm = this.fb.group({
374
-			  remark: [remark?remark:null, []],
375
-			});
368
+		// if(item.id == 'qita'){
369
+		// 	this.validateSpecimenForm = this.fb.group({
370
+		// 	  remark: [remark?remark:null, []],
371
+		// 		specimenName: [null, [Validators.required]]
372
+		// 	});
373
+		// 	this.specimenNameId = 'null'
374
+		// 	this.specimenNameName = 'qita'
375
+		// }else{
376
+			// this.validateSpecimenForm = this.fb.group({
377
+			//   remark: [remark?remark:null, []],
378
+			// });
376 379
 			this.specimenNameId = item.id
377 380
 			this.specimenNameName = item.name
378
-		}
381
+			if(this.validateSpecimenForm.value.specimenName && this.validateSpecimenForm.value.specimenName.length){
382
+				if(item.name.length+this.validateSpecimenForm.value.specimenName.length>14){
383
+					this.message.error('字符长度不能超过15个')
384
+					return
385
+				}
386
+			}
387
+			
388
+			// if(this.validateSpecimenForm.value.specimenName && this.validateSpecimenForm.value.specimenName.length>15){
389
+			// 	this.message.error('字符长度不能超过15个')
390
+			// 	return
391
+			// }
392
+			let namn = null
393
+			if(this.validateSpecimenForm.value.specimenName){
394
+				namn = this.validateSpecimenForm.value.specimenName + '、'+ item.name
395
+			}else{
396
+				namn = item.name
397
+			}
398
+			this.validateSpecimenForm.controls.specimenName.setValue(namn);
399
+		// }
379 400
 	}
380 401
 	
381 402
 	// 保存标本
382 403
 	btnSpLoading:boolean = false;
383
-	submitSpecimen(){
404
+	addSpLoading:boolean = false;
405
+	addMadal:boolean = false;
406
+	submitSpecimen(type){
384 407
 		if(this.placeIndex==null){
385 408
 			this.message.error('请选择位置来源')
386 409
 			return
@@ -402,6 +425,14 @@ export class PathologyAddComponent implements OnInit {
402 425
 		  this.validateSpecimenForm.controls[i].updateValueAndValidity();
403 426
 		}
404 427
 		if (this.validateSpecimenForm.invalid) return;
428
+		if(this.validateSpecimenForm.value.specimenName.length>15){
429
+			this.message.error('字符长度不能超过15个')
430
+			return
431
+		}
432
+		if(type==2){
433
+			this.addMadal = true
434
+			return
435
+		}
405 436
 		let data = {
406 437
 			pathologyFormId:this.detailsData.id,
407 438
 			partSource:{
@@ -417,16 +448,16 @@ export class PathologyAddComponent implements OnInit {
417 448
 				id:this.specimenNameId
418 449
 			},
419 450
 			hosId:this.hosId,
420
-			specimenName:null,
451
+			specimenName:this.validateSpecimenForm.value.specimenName,
421 452
 			id:'',
422 453
 			remark:this.validateSpecimenForm.value.remark
423 454
 		};
424
-		if(this.specimenNameName == 'qita'){
425
-			delete data.sample
426
-			data.specimenName = this.validateSpecimenForm.value.specimenName
427
-		}else{
428
-			data.specimenName = this.specimenNameName
429
-		}
455
+		// if(this.specimenNameName == 'qita'){
456
+		// 	delete data.sample
457
+		// 	data.specimenName = this.validateSpecimenForm.value.specimenName
458
+		// }else{
459
+			// data.specimenName = this.specimenNameName
460
+		// }
430 461
 		let queryType = null
431 462
 		if(this.specimenDetailId){
432 463
 			queryType = 'updData'
@@ -441,13 +472,104 @@ export class PathologyAddComponent implements OnInit {
441 472
 		  .subscribe((res) => {
442 473
 		    this.btnSpLoading = false;
443 474
 		    if (res.status == 200) {
444
-		      this.showSpecimenModal("操作", true, "");
475
+					this.message.success('操作成功')
476
+					setTimeout(_=>{
477
+						this.closeSpecimenModel()
478
+					},200)
479
+		      // this.showSpecimenModal("操作", true, "");
445 480
 		    } else {
446
-		      this.showSpecimenModal("操作", false, res.msg);
481
+					this.message.error(res.msg)
482
+		      // this.showSpecimenModal("操作", false, res.msg);
447 483
 		    }
448 484
 		  });
449 485
 	}
450 486
 	
487
+	// 新增下一个标本
488
+	confirmAdd(){
489
+		this.addSpLoading = true
490
+		let data = {
491
+			pathologyFormId:this.detailsData.id,
492
+			partSource:{
493
+				id:this.placeId
494
+			},
495
+			system:{
496
+				id:this.systemId
497
+			},
498
+			organ:{
499
+				id:this.apparatusId
500
+			},
501
+			sample:{
502
+				id:this.specimenNameId
503
+			},
504
+			hosId:this.hosId,
505
+			specimenName:this.validateSpecimenForm.value.specimenName,
506
+			id:'',
507
+			remark:this.validateSpecimenForm.value.remark
508
+		};
509
+		// if(this.specimenNameName == 'qita'){
510
+		// 	delete data.sample
511
+		// 	data.specimenName = this.validateSpecimenForm.value.specimenName
512
+		// }else{
513
+		// 	data.specimenName = this.specimenNameName
514
+		// }
515
+		let queryType = null
516
+		if(this.specimenDetailId){
517
+			queryType = 'updData'
518
+			data.id = this.specimenDetailId
519
+		}else{
520
+			queryType = 'addData'
521
+			delete data.id
522
+		}
523
+		// this.btnSpLoading = true;
524
+		this.mainService
525
+		  .simplePost(queryType, "pathologySpecimen", data)
526
+		  .subscribe((res) => {
527
+		    // this.btnSpLoading = false;
528
+		    if (res.status == 200) {
529
+					this.message.success('操作成功')
530
+					this.validateSpecimenForm = this.fb.group({
531
+					  remark: [null, []],
532
+						specimenName:[null, [Validators.required]],
533
+					});
534
+					this.specimenDetailId = null;
535
+					this.specimenNameIndex = null;
536
+					this.specimenNameId = null;
537
+					
538
+					this.placeIndex = null;
539
+					this.placeId = null;
540
+					
541
+					// this.specimenNameList=[]; //标本名称数据
542
+					// this.specimenNameName = null;
543
+					
544
+					this.addSpLoading = false;
545
+					this.addMadal = false;
546
+					
547
+		    } else {
548
+					this.message.error(res.msg)
549
+		    }
550
+		  });
551
+	}
552
+	
553
+	// 新增下一个标本
554
+	hideAddModal() {
555
+	  this.addMadal = false;
556
+	}
557
+	
558
+	//清空标本名称
559
+	emptData(e){
560
+		e.stopPropagation()
561
+		this.validateSpecimenForm.controls.specimenName.setValue('')
562
+	}
563
+	
564
+	// 监听输入字数
565
+	specimenNameLength:any=0;
566
+	specimenInput(e){
567
+		if(e.length>15){
568
+			return
569
+		}
570
+		this.specimenNameLength = e.length
571
+	}
572
+	
451 573
 	// 获取标本列表
452 574
 	getSampleData(){
453 575
 		let data={
@@ -461,11 +583,21 @@ export class PathologyAddComponent implements OnInit {
461 583
 		  .getFetchDataList("data", "pathologySpecimen", data)
462 584
 		  .subscribe((res) => {
463 585
 		    this.specimenList = res.list
586
+				let str = []
587
+				if(res.list.length>0){
588
+					for(let i of res.list){
589
+						str.push(i.system.name + '-' + i.organ.name)
590
+					}
591
+					const newStr = new Set(str);
592
+					const newData = Array.from(newStr);
593
+					this.validateForm.controls.takePart.setValue(newData.join('、'));
594
+				}
464 595
 				this.validateForm.controls.specimenNum.setValue(this.specimenList.length);
465 596
 		  });
466 597
 	}
467 598
 	
468 599
 	hideSpecimenModal(){
600
+		this.getSampleData()
469 601
 		this.specimenModal = false
470 602
 	}
471 603
 	
@@ -507,16 +639,25 @@ export class PathologyAddComponent implements OnInit {
507 639
 		delete data.pathologyForm.surgeryDeptDTO
508 640
 		delete data.pathologyForm.surgeryDoctorDTO
509 641
 		delete data.pathologyForm.specimenGenre
642
+		data.pathologyForm.specimenNum = this.specimenList.length
643
+		console.log(77,data.pathologyForm.specimenNum)
644
+
510 645
 		this.printLoading = true;
511 646
 		this.mainService
512 647
 		  .pathologyPrint(data)
513 648
 		  .subscribe((res:any) => {
514 649
 				if(res.status==200){
515 650
 					let arr = res.data;
651
+					// if(arr.specimenList.length==1){
652
+					// 	for(let i of arr.specimenList){
653
+					// 		i.applyCode = data.pathologyForm.applyCode
654
+					// 	}
655
+					// }
516 656
 					if(arr.applyBarCode){
517 657
 						arr.applyBarCode = this.sanitizer.bypassSecurityTrustResourceUrl(arr.applyBarCode)
518 658
 					}
519 659
 					for(let i of arr.specimenList){
660
+						i.applyCode = arr.applyCode?arr.applyCode:data.pathologyForm.applyCode
520 661
 						i.barCode = this.sanitizer.bypassSecurityTrustResourceUrl(i.barCode)
521 662
 					}
522 663
 					that.printLoading = false;
@@ -600,6 +741,7 @@ export class PathologyAddComponent implements OnInit {
600 741
 				}
601 742
 			}
602 743
 		};
744
+		data.pathologyForm.specimenNum = this.specimenList.length
603 745
 		delete data.pathologyForm.patientDTO
604 746
 		delete data.pathologyForm.surgeryDeptDTO
605 747
 		delete data.pathologyForm.surgeryDoctorDTO 
@@ -610,10 +752,16 @@ export class PathologyAddComponent implements OnInit {
610 752
 		  .subscribe((res:any) => {
611 753
 				if(res.status==200){
612 754
 					let arr = res.data;
755
+					// if(arr.specimenList.length==1){
756
+					// 	for(let i of arr.specimenList){
757
+					// 		i.applyCode = data.pathologyForm.applyCode
758
+					// 	}
759
+					// }
613 760
 					if(arr.applyBarCode){
614 761
 						arr.applyBarCode = this.sanitizer.bypassSecurityTrustResourceUrl(arr.applyBarCode)
615 762
 					}
616 763
 					for(let i of arr.specimenList){
764
+						i.applyCode = arr.applyCode?arr.applyCode:data.pathologyForm.applyCode
617 765
 						i.barCode = this.sanitizer.bypassSecurityTrustResourceUrl(i.barCode)
618 766
 					}
619 767
 					that.btnLoading = false;

+ 78 - 39
src/app/share/pathology-detail/pathology-detail.component.html

@@ -28,22 +28,22 @@
28 28
 					</div>
29 29
 					
30 30
 					<div class="form-list">
31
-						<div class="form-title font-weight-500">病摘要:</div>
31
+						<div class="form-title font-weight-500">病摘要:</div>
32 32
 						<div class="indent">{{detailsData.medicalRecords||'无'}}</div>
33 33
 					</div>
34 34
 					<div class="form-list">
35 35
 						<div class="form-title font-weight-500">手术方案:</div>
36 36
 						<div class="indent">{{detailsData.surgicalPlan||'无'}}</div>
37 37
 					</div>
38
-					<div class="form-list">
38
+			<!-- 		<div class="form-list">
39 39
 						<div class="form-title font-weight-500">术中所见:</div>
40 40
 						<div class="indent">{{detailsData.intraoperativeFindings||'无'}}</div>
41
-					</div>
41
+					</div> -->
42 42
 
43 43
 					<div class="form-title-box">
44 44
 						<div class="form-title"><span class="font-weight-500">标本类型:</span>{{detailsData.specimenType.name||'无'}}</div>
45
-						<div class="form-title"><span class="font-weight-500">标本数:</span>{{detailsData.specimenNum||'无'}}</div>
46
-						<div class="form-title"><span class="font-weight-500">采取部位:</span>{{detailsData.takePart||'无'}}</div>
45
+						<div class="form-title"><span class="font-weight-500">标本数:</span>{{detailsData.specimenNum||'无'}}</div>
46
+						<div class="form-title"><span class="font-weight-500">部位:</span>{{detailsData.takePart||'无'}}</div>
47 47
 					</div>
48 48
 					
49 49
 					<div class="form-title-box">
@@ -56,10 +56,7 @@
56 56
 						<div class="form-title font-weight-500">标本:</div>
57 57
 						<div class="form-title-box">
58 58
 							<div class="form-title" *ngFor="let item of specimenList">
59
-								{{item.partSource?item.partSource.name:''}} <span *ngIf="item.system">-</span>
60
-								{{item.system?item.system.name:''}} <span *ngIf="item.organ">-</span>
61
-								{{item.organ?item.organ.name:''}} <span>-</span>
62
-								{{item.sample?item.sample.name:item.specimenName}}
59
+								{{item.partSource?item.partSource.name:''}}{{item.organ?item.organ.name:''}}{{item.specimenName}}
63 60
 							</div>
64 61
 						</div>
65 62
 					</div>
@@ -74,11 +71,11 @@
74 71
 								</nz-step>
75 72
 								<ng-template #tpl>
76 73
 									<div *ngIf="index==pathologyLogs.length-1" class="step-size">
77
-										<div style="color: #49B856;">{{item.operationType.name}}</div>
74
+										<div style="color: #49B856;">{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
78 75
 										<div style="color:#333;">{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto.name}}</div>
79 76
 									</div>
80 77
 									<div *ngIf="index!=pathologyLogs.length-1" class="step-size">
81
-										<div>{{item.operationType.name}}</div>
78
+										<div>{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
82 79
 										<div>{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto.name}}</div>
83 80
 									</div>
84 81
 								</ng-template>
@@ -89,7 +86,7 @@
89 86
 			<div class="display_flex justify-content_flex-center bottom-btn">
90 87
 				<button class="btn btn-right" *ngIf="detailsData.status.value==6 || 
91 88
 				detailsData.status.value==7 || detailsData.status.value==8 || 
92
-				detailsData.status.value==9 || detailsData.status.value==10"nz-button nzType="primary" (click)="closeDetailMoadl()">确定</button>
89
+				detailsData.status.value==9 || detailsData.status.value==10"nz-button nzType="primary" (click)="closeDetailMoadl()">知道了</button>
93 90
 				
94 91
 				<button class="btn btn-right" *ngIf="detailsData.status.value==2 || 
95 92
 				detailsData.status.value==3 || detailsData.status.value==4 || 
@@ -100,7 +97,9 @@
100 97
 				detailsData.status.value==5" nz-button nzType="primary" 
101 98
 				(click)="immobilization()">标本固定</button> -->
102 99
 				
103
-				<button class="btn cancel" nz-button nzType="default" (click)="closeDetailMoadl()">取消</button>
100
+				<button class="btn cancel" *ngIf="detailsData.status.value==2 || 
101
+				detailsData.status.value==3 || detailsData.status.value==4 || 
102
+				detailsData.status.value==5" nz-button nzType="default" (click)="closeDetailMoadl()">取消</button>
104 103
 			</div>
105 104
 		</div>
106 105
 	<div class="mask-style" *ngIf="isSpinning">
@@ -113,53 +112,93 @@
113 112
 		<div class="monad">
114 113
 			<div *ngIf="printData && printData.specimenList && printData.specimenList.length>1" style="border: 1px solid #AAAAAA;
115 114
 				border-radius: 5px;font-size: 12px;">
116
-				<img style="width: 100%;height: 90px;border-radius: 5px;" [src]="printData.applyBarCode" alt="">
117
-				<div style="display: flex;border-bottom: 1px solid #AAAAAA;border-top: 1px solid #aaa;">
118
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">患者</div>
119
-					<div style="width:70%;padding:1px;">{{printData.patientName}}({{printData.patientAge}}岁)</div>
115
+				 <div style="display: flex;">
116
+					 <img style="width: 50%;height: 70px;border-radius: 5px;" [src]="printData.applyBarCode" alt="">
117
+					 <div style="width: 50%;">
118
+						 <img style="width: 100%; border-radius: 5px;
119
+						 	position: relative;top: 15px;right: 7px;" [src]="tool.logoUrl" alt="">
120
+<!-- 					 	<img style="width: 100%; border-radius: 5px;
121
+					 		position: relative;top: 15px;right: 7px;" src="../../../assets/images/yc_logo.png" alt=""> -->
122
+					 </div>
123
+				 </div>
124
+				
125
+				<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
126
+					<div style="width:20%;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">患者姓名</div>
127
+					<div style="width:50%;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">{{printData.patientName}}</div>
128
+					<div style="width:14%;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">性别</div>
129
+					<div style="width:16%;padding:1px;border-top: 1px solid #aaa;">{{printData.specimenList[0].patientGender}}</div>
120 130
 				</div>
121 131
 				<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
122
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">住院信息</div>
123
-					<div style="width:70%;padding:1px;">{{printData.patientBedNum}}床/{{printData.residenceNo}}</div>
132
+					<div style="width:20%;border-right: 1px solid #AAAAAA;padding:1px;">住院号</div>
133
+					<div style="width:50%;border-right: 1px solid #AAAAAA;padding:1px;">{{printData.residenceNo}}</div>
134
+					<div style="width:14%;border-right: 1px solid #AAAAAA;padding:1px;">年龄</div>
135
+					<div style="width:16%;padding:1px;"> {{printData.patientAge}}岁</div>
124 136
 				</div>
125 137
 				<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
126
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">科室</div>
127
-					<div style="width:70%;padding:1px;">{{printData.patientDept}}</div>
138
+					<div style="width:20%;border-right: 1px solid #AAAAAA;padding:1px;">科室 </div>
139
+					<div style="width:50%;border-right: 1px solid #AAAAAA;
140
+					padding:1px;overflow: hidden;white-space: nowrap">{{printData.patientDept}}</div>
141
+					<div style="width:14%;border-right: 1px solid #AAAAAA;padding:1px;">床号</div>
142
+					<div style="width:16%;padding:1px;">{{printData.patientBedNum}}床</div>
128 143
 				</div>
129 144
 				<div style="display: flex;border-bottom: 1px solid #AAAAAA;">
130
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">部位</div>
131
-					<div style="width:70%;padding:1px;">{{printData.takePart}}</div>
145
+					<div style="width:20%;border-right: 1px solid #AAAAAA;padding:1px;">部位 </div>
146
+					<div style="width:50%;border-right: 1px solid #AAAAAA;
147
+					padding:1px;overflow: hidden;white-space: nowrap">{{printData.takePart}}</div>
148
+					<div style="width:14%;border-right: 1px solid #AAAAAA;padding:1px;">标本数</div>
149
+					<div style="width:16%;padding:1px;">{{printData.specimenNum}}</div>
132 150
 				</div>
133 151
 				<div style="display: flex;">
134
-					<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">标本数</div>
135
-					<div style="width:70%;padding:1px;">{{printData.specimenNum}}</div>
152
+					<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">日期</div>
153
+					<div style="width:80%;box-sizing: border-box;padding:1px;border-right: 1px solid #fff;">{{printData.specimenList[0].inVitroTime|date:'yyyy-MM-dd'}}</div>
136 154
 				</div>
155
+				
137 156
 			</div>
138
-			<div style="height: 10px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>1"></div>
157
+			<div style="height: 20px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>1"></div>
139 158
 			<div style="font-size: 12px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>0">
140 159
 				<div *ngFor="let data of printData.specimenList; let index=index;">
141
-				 <div style="height: 30px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>1"></div>
160
+				 <div style="height: 50px;" *ngIf="printData && printData.specimenList && printData.specimenList.length>1"></div>
142 161
 				 <div style="border: 1px solid #AAAAAA;border-radius: 5px;">
143
-					 <img style="width: 100%;height: 90px;border-radius: 5px;" [src]="data.barCode" alt="">
144
-					 <div class="monad-sign" style="border-bottom: 1px solid #AAAAAA; padding-left:1px;">
145
-					 	<div>{{data.system}}-{{data.organ}}</div>
146
-					 	<div>({{index+1}}/{{printData.specimenList.length}}) {{data.partSource}}-{{data.specimenName}}</div>
162
+					 <div style="display: flex;">
163
+					 	<img style="width: 50%;height: 70px;border-radius: 5px;" [src]="data.barCode" alt="">
164
+						<div style="width: 50%;">
165
+							<img style="width: 100%; border-radius: 5px;
166
+								position: relative;top: 15px;right: 7px;" [src]="tool.logoUrl" alt="">
167
+							<!-- <img style="width: 100%;border-radius: 5px;
168
+								position: relative;top: 15px;right: 7px;" src="../../../assets/images/yc_logo.png" alt=""> -->
169
+						</div>
170
+					 </div>
171
+					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
172
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">患者姓名</div>
173
+					 	<div style="width:50%;box-sizing: border-box;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">{{data.patientName}}</div>
174
+						<div style="width:14%;box-sizing: border-box;border-right: 1px solid #AAAAAA;border-top: 1px solid #aaa;padding:1px;">性别</div>
175
+						<div style="width:16%;box-sizing: border-box;padding:1px;border-top: 1px solid #aaa;">{{data.patientGender}}</div>
176
+					 </div>
177
+					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
178
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">住院号</div>
179
+					 	<div style="width:50%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">{{data.residenceNo}}</div>
180
+						<div style="width:14%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">年龄</div>
181
+						<div style="width:16%;box-sizing: border-box;padding:1px;"> {{data.patientAge}}岁</div>
147 182
 					 </div>
148 183
 					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
149
-					 	<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">患者</div>
150
-					 	<div style="width:70%;padding:1px;">{{data.patientName}}({{data.patientAge}}岁)</div>
184
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">科室 </div>
185
+					 	<div style="width:50%;box-sizing: border-box;border-right: 1px solid #AAAAAA;
186
+						padding:1px;overflow: hidden;white-space: nowrap">{{data.patientDept}}</div>
187
+						<div style="width:14%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">床号</div>
188
+						<div style="width:16%;box-sizing: border-box;padding:1px;">{{data.patientBedNum}}床</div>
151 189
 					 </div>
152 190
 					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
153
-					 	<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">住院信息</div>
154
-					 	<div style="width:70%;padding:1px;">{{data.patientBedNum}}床/{{data.residenceNo}}</div>
191
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">标本名称</div>
192
+					 	<div style="width:80%;box-sizing: border-box;padding:1px;border-right: 1px solid #fff;
193
+						padding:1px;overflow: hidden;white-space: nowrap">({{index+1}}/{{printData.specimenList.length}}){{data.partSource}}{{data.organ}}{{data.specimenName}}</div>
155 194
 					 </div>
156 195
 					 <div style="display: flex;border-bottom: 1px solid #AAAAAA;">
157
-					 	<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">科室</div>
158
-					 	<div style="width:70%;padding:1px;">{{data.patientDept}}</div>
196
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">申请单号</div>
197
+					 	<div style="width:80%;box-sizing: border-box;padding:1px;border-right: 1px solid #fff;">{{data.applyCode }}</div>
159 198
 					 </div>
160 199
 					 <div style="display: flex;">
161
-					 	<div style="width:30%;border-right: 1px solid #AAAAAA;padding:1px;">离体时间</div>
162
-					 	<div style="width:70%;padding:1px;">{{data.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'}}</div>
200
+					 	<div style="width:20%;box-sizing: border-box;border-right: 1px solid #AAAAAA;padding:1px;">日期</div>
201
+					 	<div style="width:80%;box-sizing: border-box;padding:1px;border-right: 1px solid #fff;">{{data.inVitroTime|date:'yyyy-MM-dd'}}</div>
163 202
 					 </div>
164 203
 				 </div>
165 204
 				</div>

+ 6 - 0
src/app/share/pathology-detail/pathology-detail.component.ts

@@ -106,10 +106,16 @@ export class PathologyDetailComponent implements OnInit {
106 106
 		  .subscribe((res:any) => {
107 107
 				if(res.status==200){
108 108
 					let arr = res.data;
109
+					// if(arr.specimenList.length==1){
110
+					// 	for(let i of arr.specimenList){
111
+					// 		i.applyCode = data.pathologyForm.applyCode
112
+					// 	}
113
+					// }
109 114
 					if(arr.applyBarCode){
110 115
 						arr.applyBarCode = this.sanitizer.bypassSecurityTrustResourceUrl(arr.applyBarCode)
111 116
 					}
112 117
 					for(let i of arr.specimenList){
118
+						i.applyCode = arr.applyCode?arr.applyCode:data.pathologyForm.applyCode
113 119
 						i.barCode = this.sanitizer.bypassSecurityTrustResourceUrl(i.barCode)
114 120
 					}
115 121
 					that.printLoading = false;

+ 18 - 6
src/app/views/admin-office-prescription/admin-office-prescription.component.html

@@ -175,14 +175,21 @@
175 175
 					justify-content: center;
176 176
 					flex-wrap: wrap;
177 177
 					border-right: 1px solid #e7e7e7;
178
-					border-bottom: 1px solid #e7e7e7;">包装规格</div>
178
+					border-bottom: 1px solid #e7e7e7;">15日消耗</div>
179 179
 					
180
-					<div style="width: 10%;display: flex;font-size: 12px;
180
+					<div style="width: 8%;display: flex;font-size: 12px;
181 181
 					align-items: center;
182 182
 					justify-content: center;
183 183
 					flex-wrap: wrap;
184 184
 					border-right: 1px solid #e7e7e7;
185
-					border-bottom: 1px solid #e7e7e7;">实际消耗</div>
185
+					border-bottom: 1px solid #e7e7e7;">包规</div>
186
+					
187
+					<div style="width: 8%;display: flex;font-size: 12px;
188
+					align-items: center;
189
+					justify-content: center;
190
+					flex-wrap: wrap;
191
+					border-right: 1px solid #e7e7e7;
192
+					border-bottom: 1px solid #e7e7e7;">实消</div>
186 193
 					
187 194
 					<div style="width: 10%;display: flex;font-size: 12px;
188 195
 					align-items: center;
@@ -195,7 +202,6 @@
195 202
 					align-items: center;
196 203
 					justify-content: center;
197 204
 					flex-wrap: wrap;
198
-					border-right: 1px solid #e7e7e7;
199 205
 					border-bottom: 1px solid #e7e7e7;">箱数</div>
200 206
 				</div>
201 207
 				<div *ngFor="let data of codes" style="display: flex;">
@@ -218,9 +224,16 @@
218 224
 					justify-content: center;
219 225
 					flex-wrap: wrap;
220 226
 					border-right: 1px solid #e7e7e7;
227
+					border-bottom: 1px solid #e7e7e7;">{{data.fifteenExpendCount}}</div>
228
+					
229
+					<div style="width: 8%;display: flex;font-size: 12px;
230
+					align-items: center;
231
+					justify-content: center;
232
+					flex-wrap: wrap;
233
+					border-right: 1px solid #e7e7e7;
221 234
 					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.packingSpecs }}</div>
222 235
 					
223
-					<div style="width: 10%;display: flex;font-size: 12px;
236
+					<div style="width: 8%;display: flex;font-size: 12px;
224 237
 					align-items: center;
225 238
 					justify-content: center;
226 239
 					flex-wrap: wrap;
@@ -238,7 +251,6 @@
238 251
 					align-items: center;
239 252
 					justify-content: center;
240 253
 					flex-wrap: wrap;
241
-					border-right: 1px solid #e7e7e7;
242 254
 					border-bottom: 1px solid #e7e7e7;">
243 255
 						<span *ngIf="data.drugsInfoDTO.drugName!='合计'">
244 256
 							{{ data.cartonNum }} {{data.giveOutType && data.giveOutType.value==1?

+ 228 - 13
src/app/views/dispensing-batch/dispensing-batch.component.html

@@ -1,7 +1,7 @@
1 1
 <div class="list-template">
2 2
   <div class="list-template__content">
3 3
     <div class="list-template__top" nz-row>
4
-      <div nz-col nzLg='18' class="list-template__searchBox">
4
+      <div nz-col nzLg='16' class="list-template__searchBox">
5 5
         <div class="list-template__searchItem">
6 6
           <span class="label">批次号:</span>
7 7
           <input nz-input class="formItem" [(ngModel)]="batchNumber" placeholder="请输入批次号" nzSize="default" />
@@ -12,6 +12,7 @@
12 12
 					(ngModelChange)="changeDate($event)"></nz-range-picker>
13 13
         </div>
14 14
       </div>
15
+			<div nz-col nzLg='2' class="autoUpdate">{{ logTime }}秒</div>
15 16
       <div nz-col nzLg="6" class="list-template__btns">
16 17
         <button class="btn default" (click)='search()'>搜索</button>
17 18
         <button class="btn default ml8" (click)='reset()'>重置</button>
@@ -36,7 +37,7 @@
36 37
           </tr>
37 38
         </thead>
38 39
         <tbody>
39
-          <tr *ngFor="let data of listOfData" (click)="selectedListData(data.id)">
40
+          <tr *ngFor="let data of listOfData">
40 41
             <td>{{ data.batchNo || '-' }}</td>
41 42
             <td>{{ data.createTime|date:'yyyy-MM-dd HH:mm' }}</td>
42 43
             <td>
@@ -54,7 +55,10 @@
54 55
 								<span *ngIf="coopBtns.edit && data.batchState.name=='未发药'" (click)="edit($event,data)">编辑</span>
55 56
 								<span *ngIf="coopBtns.del && data.batchState.name=='未发药'" (click)="showDelModal($event,data.id)">删除</span>
56 57
                 <span *ngIf="coopBtns.config && data.batchState.name=='未发药'" (click)="detail($event,data)">配置</span>
57
-                <span *ngIf="coopBtns.print && data.batchState.name=='已发药'" (click)="print($event,data, data.id)">打印</span>
58
+								<span *ngIf="coopBtns.dispensingGross && data.batchState.name=='已发药'" (click)="dispensingGross($event, data)">发药总量</span>
59
+                <span *ngIf="coopBtns.dispensingInfo && data.batchState.name=='已发药'" (click)="dispensingInfo($event, data)">发药信息</span>
60
+								<span *ngIf="coopBtns.export && data.batchState.name=='已发药'" (click)="exportPc($event, data)">导出</span>
61
+								<span *ngIf="coopBtns.print && data.batchState.name=='已发药'" (click)="print($event,data, data.id)">打印</span>
58 62
                 <span *ngIf="coopBtns.batchPrint && data.batchState.name=='未发药'" (click)="dispensingPrint($event, data, data.id)">发药并打印</span>
59 63
               </div>
60 64
             </td>
@@ -87,11 +91,11 @@
87 91
        	  </nz-form-control>
88 92
        	</nz-form-item>
89 93
        	<nz-form-item>
90
-       	  <nz-form-label nzRequired nzFor="department">取药科室</nz-form-label>
94
+       	  <nz-form-label nzRequired nzFor="addDepartment">取药科室</nz-form-label>
91 95
        	  <nz-form-control nzErrorTip="请选择取药科室!">
92 96
        	    <nz-input-group>
93
-       				<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" (nzOnSearch)="changeInp($event)" nzServerSearch nzShowSearch nzPlaceHolder="请选择申请科室" formControlName="department">
94
-       				  <ng-container *ngFor="let option of hospitals1">
97
+       				<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" (nzOnSearch)="changeInp($event)" nzServerSearch nzShowSearch nzPlaceHolder="请选择申请科室" formControlName="addDepartment">
98
+       				  <ng-container *ngFor="let option of addHospitals">
95 99
        				    <nz-option *ngIf="!isDeptLoading" [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
96 100
        				  </ng-container>
97 101
        				  <nz-option *ngIf="isDeptLoading" nzDisabled nzCustomContent>
@@ -124,7 +128,110 @@
124 128
   <!-- 编辑模态框 -->
125 129
   <app-dialog-delete [delModal]="editModal" (hideDelModalEvent)="hideDelModal1()" [btnLoading]="saveLoading"
126 130
     (confirmDelEvent)="confirmDel1()" [content]="'保存后会重置您的发药科室的药品信息,您确认吗?'"></app-dialog-delete>
127
-
131
+	
132
+	<!-- 发药总量 -->
133
+	<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="grossModal">
134
+	  <div class="modalBody modalBody-ga">
135
+	    <div class="title">发药总量<i class="icon_transport transport-guanbi" (click)="hideGrossModal()"></i>
136
+	    </div>
137
+	    <overlay-scrollbars #osComponentRef1 class="content">
138
+	      <div class="list-template__bottom">
139
+	        <nz-table class="list-template__nzTable" [nzData]="viewData" nzSize="middle" [nzShowPagination]="false"
140
+	          [nzLoading]="grossLoading">
141
+	          <thead>
142
+	            <tr class="thead">
143
+	              <th>药品名称</th>
144
+	              <th>药品规格</th>
145
+	              <th>包装规格</th>
146
+	              <th>发药总量</th>
147
+								<th>箱数合计</th>
148
+	            </tr>
149
+	          </thead>
150
+	          <tbody>
151
+	            <tr *ngFor="let data of viewData">
152
+	              <td>{{ data.drugsInfoDTO.drugName}}</td>
153
+	              <td>{{ data.drugsInfoDTO.specs}}</td>
154
+	              <td>{{ data.drugsInfoDTO.packingSpecs}}</td>
155
+								<td>{{ data.actualCount}}</td>
156
+								<td>
157
+									{{data.cartonNum}} 箱 &nbsp;
158
+									<span *ngIf="data.afterInventory>0">
159
+										{{data.afterInventory}} {{data.drugsInfoDTO.unit}}
160
+									</span>
161
+								</td>
162
+	            </tr>
163
+	          </tbody>
164
+	        </nz-table>
165
+	      </div>
166
+	    </overlay-scrollbars>
167
+	    <div class="display_flex justify-content_flex-center">
168
+	      <button class="btn" nz-button nzType="primary" (click)="hideGrossModal()">知道了</button>
169
+	    </div>
170
+	  </div>
171
+	</div>
172
+	
173
+	<!-- 发药信息 -->
174
+	<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="infoModal">
175
+	  <div class="modalBody modalBody-ga">
176
+	    <div class="title">发药信息<i class="icon_transport transport-guanbi" (click)="hideInfoModal()"></i>
177
+	    </div>
178
+			<div class="list-template__top" nz-row>
179
+			  <div nz-col nzLg='19' class="list-template__searchBox">
180
+			    <div class="list-template__searchItem">
181
+			      <span class="label">科室:</span>
182
+			      <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择科室" [(ngModel)]="infoDepartment">
183
+			        <ng-container *ngFor="let option of hospitals1">
184
+			          <nz-option [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
185
+			        </ng-container>
186
+			      </nz-select>
187
+			    </div>
188
+			  </div>
189
+			  <div nz-col nzLg="5" class="list-template__btns">
190
+			    <button class="btn default" (click)='searchInfo()'>搜索</button>
191
+					<button class="btn default" (click)='resetInfo()'>重置</button>
192
+			  </div>
193
+			</div>
194
+	    <overlay-scrollbars #osComponentRef1 class="content">
195
+	      <div class="list-template__bottom">
196
+	        <nz-table class="list-template__nzTable" [nzData]="infoData" nzSize="middle" [nzShowPagination]="false"
197
+	          [nzLoading]="infoLoading">
198
+	          <thead>
199
+	            <tr class="thead">
200
+								<th>科室名称</th>
201
+								<th>药品名称</th>
202
+								<th>规格</th>
203
+								<th>消耗数量</th>
204
+								<th>原库存数</th>
205
+								<th>增发</th>
206
+								<th>包装规格</th>
207
+	              <th>发药箱数</th>
208
+	              <th>实发数量</th>
209
+	              <th>计算后库存</th>
210
+	            </tr>
211
+	          </thead>
212
+	          <tbody>
213
+	            <tr *ngFor="let data of infoData">
214
+	              <td>{{ data['0']}}</td>
215
+								<td>{{ data['1']}}</td>
216
+								<td>{{ data['2']}}</td>
217
+								<td>{{ data['3']}}</td>
218
+								<td>{{ data['4']}}</td>
219
+	              <td>{{ data['5'] }}</td>
220
+	              <td>{{ data['6'] }}</td>
221
+								<td>{{ data['7'] }}</td>
222
+								<td>{{ data['8'] }}</td>
223
+								<td>{{ data['9'] }}</td>
224
+	            </tr>
225
+	          </tbody>
226
+	        </nz-table>
227
+	      </div>
228
+	    </overlay-scrollbars>
229
+	    <div class="display_flex justify-content_flex-center">
230
+	      <button class="btn" nz-button nzType="primary" (click)="hideInfoModal()">知道了</button>
231
+	    </div>
232
+	  </div>
233
+	</div>
234
+	
128 235
   <!-- 打印 -->
129 236
   <div id="report" style="display: none">
130 237
 		<div class="monad" *ngFor="let item of printData"
@@ -167,14 +274,21 @@
167 274
 					justify-content: center;
168 275
 					flex-wrap: wrap;
169 276
 					border-right: 1px solid #e7e7e7;
170
-					border-bottom: 1px solid #e7e7e7;">包装规格</div>
277
+					border-bottom: 1px solid #e7e7e7;">15日消耗</div>
171 278
 					
172
-					<div style="width: 10%;display: flex;font-size: 12px;
279
+					<div style="width: 8%;display: flex;font-size: 12px;
280
+					align-items: center;
281
+					justify-content: center;
282
+					flex-wrap: wrap;
283
+					border-right: 1px solid #e7e7e7;
284
+					border-bottom: 1px solid #e7e7e7;">包规</div>
285
+					
286
+					<div style="width: 8%;display: flex;font-size: 12px;
173 287
 					align-items: center;
174 288
 					justify-content: center;
175 289
 					flex-wrap: wrap;
176 290
 					border-right: 1px solid #e7e7e7;
177
-					border-bottom: 1px solid #e7e7e7;">实际消耗</div>
291
+					border-bottom: 1px solid #e7e7e7;">实消</div>
178 292
 					
179 293
 					<div style="width: 10%;display: flex;font-size: 12px;
180 294
 					align-items: center;
@@ -187,7 +301,6 @@
187 301
 					align-items: center;
188 302
 					justify-content: center;
189 303
 					flex-wrap: wrap;
190
-					border-right: 1px solid #e7e7e7;
191 304
 					border-bottom: 1px solid #e7e7e7;">箱数</div>
192 305
 					
193 306
 				</div>
@@ -211,9 +324,16 @@
211 324
 					justify-content: center;
212 325
 					flex-wrap: wrap;
213 326
 					border-right: 1px solid #e7e7e7;
327
+					border-bottom: 1px solid #e7e7e7;">{{data.fifteenExpendCount}}</div>
328
+					
329
+					<div style="width: 8%;display: flex;font-size: 12px;
330
+					align-items: center;
331
+					justify-content: center;
332
+					flex-wrap: wrap;
333
+					border-right: 1px solid #e7e7e7;
214 334
 					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.packingSpecs }}</div>
215 335
 					
216
-					<div style="width: 10%;display: flex;font-size: 12px;
336
+					<div style="width: 8%;display: flex;font-size: 12px;
217 337
 					align-items: center;
218 338
 					justify-content: center;
219 339
 					flex-wrap: wrap;
@@ -231,7 +351,6 @@
231 351
 					align-items: center;
232 352
 					justify-content: center;
233 353
 					flex-wrap: wrap;
234
-					border-right: 1px solid #e7e7e7;
235 354
 					border-bottom: 1px solid #e7e7e7;">
236 355
 					<span *ngIf="data.drugsInfoDTO.drugName!='合计'">
237 356
 						{{ data.giveOutType.value==1 ? data.actualCount :data.cartonNum }}
@@ -243,6 +362,102 @@
243 362
 				</div>
244 363
 			</div>
245 364
 		</div>
365
+		
366
+		<div class="monad" 
367
+				style="padding: 10px;
368
+				border: 1px solid #e7e7e7;
369
+				border-radius: 5px;margin-bottom: 40px;">
370
+			<div class="monad-title" 
371
+				style="text-align: center;
372
+				font-size: 18px;
373
+				border-bottom: 1px solid #e7e7e7;
374
+				padding-bottom: 10px;">
375
+				大输液批次消耗汇总单
376
+			</div>
377
+			<div class="monad-sign" style="display: flex;line-height: 23px;font-size: 14px;">
378
+				<div style="margin-right: 15px;" *ngIf="printData.length">日期:{{printData[0].createTime|date:'yyyy-MM-dd HH:mm'}}</div>
379
+				<div style="margin-right: 15px;">批次号:{{batchNo}}</div>
380
+			</div>
381
+			<div style="border: 1px solid #e7e7e7;border-bottom: none;font-size: 14px;">
382
+				<div class="thead" style="display: flex;">
383
+					<div style="width: 40%;display: flex;font-size: 12px;
384
+					align-items: center;
385
+					justify-content: center;
386
+					flex-wrap: wrap;
387
+					border-right: 1px solid #e7e7e7;
388
+					border-bottom: 1px solid #e7e7e7;">药品名称</div>
389
+					
390
+					<div style="width: 20%;display: flex;font-size: 12px;
391
+					align-items: center;
392
+					justify-content: center;
393
+					flex-wrap: wrap;
394
+					border-right: 1px solid #e7e7e7;
395
+					border-bottom: 1px solid #e7e7e7;">药品规格</div>
396
+					
397
+					<div style="width: 13%;display: flex;font-size: 12px;
398
+					align-items: center;
399
+					justify-content: center;
400
+					flex-wrap: wrap;
401
+					border-right: 1px solid #e7e7e7;
402
+					border-bottom: 1px solid #e7e7e7;">包装规格</div>
403
+					
404
+					<div style="width: 13%;display: flex;font-size: 12px;
405
+					align-items: center;
406
+					justify-content: center;
407
+					flex-wrap: wrap;
408
+					border-right: 1px solid #e7e7e7;
409
+					border-bottom: 1px solid #e7e7e7;">发药总量</div>
410
+
411
+					<div style="width: 14%;display: flex;font-size: 12px;
412
+					align-items: center;
413
+					justify-content: center;
414
+					flex-wrap: wrap;
415
+					border-bottom: 1px solid #e7e7e7;">箱数合计</div>
416
+					
417
+				</div>
418
+				<div *ngFor="let data of summaryDataList" style="display: flex;">
419
+					<div style="width: 40%;display: flex;font-size: 12px;
420
+					align-items: center;
421
+					justify-content: center;
422
+					flex-wrap: wrap;
423
+					border-right: 1px solid #e7e7e7;
424
+					border-bottom: 1px solid #e7e7e7;">{{data.drugsInfoDTO.drugName}}</div>
425
+					
426
+					<div style="width: 20%;display: flex;font-size: 12px;
427
+					align-items: center;
428
+					justify-content: center;
429
+					flex-wrap: wrap;
430
+					border-right: 1px solid #e7e7e7;
431
+					border-bottom: 1px solid #e7e7e7;">{{data.drugsInfoDTO.specs}}</div>
432
+					
433
+					<div style="width: 13%;display: flex;font-size: 12px;
434
+					align-items: center;
435
+					justify-content: center;
436
+					flex-wrap: wrap;
437
+					border-right: 1px solid #e7e7e7;
438
+					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.packingSpecs }}</div>
439
+					
440
+					<div style="width: 13%;display: flex;font-size: 12px;
441
+					align-items: center;
442
+					justify-content: center;
443
+					flex-wrap: wrap;
444
+					border-right: 1px solid #e7e7e7;
445
+					border-bottom: 1px solid #e7e7e7;">{{data.actualCount}}</div>
446
+					
447
+					<div style="width: 14%;display: flex;font-size: 12px;
448
+					align-items: center;
449
+					justify-content: center;
450
+					flex-wrap: wrap;
451
+					border-bottom: 1px solid #e7e7e7;">
452
+					{{data.cartonNum}} 箱 &nbsp;
453
+					<span *ngIf="data.afterInventory>0">
454
+						{{data.afterInventory}} {{data.drugsInfoDTO.unit}}
455
+					</span>
456
+					</div>
457
+					
458
+				</div>
459
+			</div>
460
+		</div>
246 461
   </div>
247 462
 
248 463
 </div>

+ 12 - 1
src/app/views/dispensing-batch/dispensing-batch.component.less

@@ -24,6 +24,9 @@
24 24
   }
25 25
 }
26 26
 
27
+.autoUpdate{
28
+	text-align: right;
29
+}
27 30
 .save {
28 31
   position: fixed;
29 32
   left: 0;
@@ -32,7 +35,15 @@
32 35
   height: 100%;
33 36
   background: rgba(0, 0, 0, 0.4);
34 37
   z-index: 99;
35
-
38
+	.modalBody-ga{
39
+		width: 80% !important;
40
+		.list-template__searchBox{
41
+			margin-top: 10px;
42
+		}
43
+		.ant-select{
44
+			width: 20%;
45
+		}
46
+	}
36 47
   .modalBody {
37 48
     width: 350px;
38 49
     background: #fff;

+ 177 - 37
src/app/views/dispensing-batch/dispensing-batch.component.ts

@@ -1,4 +1,4 @@
1
-import { Component, OnInit, ViewChild } from "@angular/core";
1
+import { Component, OnInit, ViewChild, OnDestroy } from "@angular/core";
2 2
 import { ActivatedRoute, Router } from "@angular/router";
3 3
 import {
4 4
   FormBuilder,
@@ -22,7 +22,8 @@ import { HttpRequest, HttpResponse, HttpClient } from '@angular/common/http';
22 22
   templateUrl: "./dispensing-batch.component.html",
23 23
   styleUrls: ["./dispensing-batch.component.less"],
24 24
 })
25
-export class DispensingBatchComponent implements OnInit {
25
+
26
+export class DispensingBatchComponent implements OnInit, OnDestroy {
26 27
   @ViewChild("osComponentRef1", {
27 28
     read: OverlayScrollbarsComponent,
28 29
     static: false,
@@ -37,17 +38,22 @@ export class DispensingBatchComponent implements OnInit {
37 38
     private tool: ToolService,
38 39
     private http: HttpClient,
39 40
   ) {}
40
-
41
+	
42
+	ngOnDestroy() {
43
+		clearInterval(this.logTimer)
44
+	}
45
+	
41 46
   ngOnInit() {
42
-    this.searchParentDeptSubject.pipe(debounceTime(500)).subscribe((e) => {
43
-			this.isDeptLoading = true;
44
-			this.getDeparts(e);
45
-    });
47
+		this.searchParentDeptSubject.pipe(debounceTime(500)).subscribe((e) => {
48
+			this.getAddDeparts(e);
49
+		});
46 50
 		this.hosId = this.tool.getCurrentHospital().id;
47 51
     this.coopBtns = this.tool.initCoopBtns(this.route);
48 52
     this.initForm();
53
+		this.getAddDeparts('')
49 54
     this.getAllHospital();
50 55
     this.getDeptHandoverType();
56
+		this.autoUpdate(true)
51 57
   }
52 58
   listOfData: any[] = []; //表格数据
53 59
   promptContent: string; //操作提示框提示信息
@@ -59,6 +65,7 @@ export class DispensingBatchComponent implements OnInit {
59 65
   validateForm: FormGroup; //新增/编辑表单
60 66
   coopId: number; //表格中执行操作的id
61 67
   department: number; //所属科室
68
+	infoDepartment: number; //所属科室
62 69
 	hosId: number; 
63 70
 	dateRange;//时间
64 71
 	loadAllConsumeDept: boolean = true;//是否加载所有消耗科室
@@ -77,7 +84,8 @@ export class DispensingBatchComponent implements OnInit {
77 84
   deptsPhoneId = 1; //科室电话自增id
78 85
   allParentdepart: any = []; //所有的父级科室列表
79 86
   hospitals1: any = []; //科室列表(搜索)
80
-	rowData: object = {}; //打印选择列表
87
+	addHospitals: any = [];
88
+	rowData: any = null; //打印选择列表
81 89
 	editModal:boolean = false; //编辑时弹框
82 90
   searchParentDeptSubject = new Subject();
83 91
   // 初始化增删改按钮
@@ -89,6 +97,7 @@ export class DispensingBatchComponent implements OnInit {
89 97
   //搜索父级科室
90 98
 	isDeptLoading = false;
91 99
   changeInp(e) {
100
+		this.isDeptLoading = true;
92 101
     this.searchParentDeptSubject.next(e);
93 102
   }
94 103
   // 配送建单
@@ -105,6 +114,24 @@ export class DispensingBatchComponent implements OnInit {
105 114
     this.editModal = false;
106 115
   }
107 116
 	
117
+	// 30s倒计时
118
+	logTimer = null; //定时器
119
+	logTime = 0; //自动刷新秒数
120
+	logTimeConst = 30; //自动刷新秒数
121
+	autoUpdate(flag = true) {
122
+	  if (flag) {
123
+	    this.logTime = this.logTimeConst;
124
+	  }
125
+	  clearInterval(this.logTimer);
126
+	  this.logTimer = setInterval(() => {
127
+	    this.logTime--;
128
+	    if (this.logTime === 0) {
129
+	      this.logTime = this.logTimeConst;
130
+				this.getList()
131
+	    }
132
+	  }, 1000);
133
+	}
134
+	
108 135
   // 编辑保存
109 136
   confirmDel1() {
110 137
     var that = this;
@@ -117,7 +144,7 @@ export class DispensingBatchComponent implements OnInit {
117 144
 			startTime:this.formStartDate?this.formStartDate:this.loadStartTime,//发起时间开始
118 145
 			endTime:this.formEndDate?this.formEndDate:this.loadEndTime,//发起时间结束
119 146
 			hosId:this.hosId,
120
-			pharmacy:this.validateForm.value.department,
147
+			pharmacy:this.validateForm.value.addDepartment,
121 148
 			id:that.coopId,
122 149
 			loadAllConsumeDept:this.validateForm.value.loadAllConsumeDept?1:0
123 150
     };
@@ -205,40 +232,50 @@ export class DispensingBatchComponent implements OnInit {
205 232
 	}
206 233
 	
207 234
 	// 获取所有科室
208
-  getDeparts(dept) {
209
-    var that = this;
210
-    let data = {
211
-      department: {
212
-        dept,
213
-        hospital: {
214
-          id: this.hosId
215
-        },
235
+  getDeparts() {
236
+		let data = {
237
+		  batchId:this.rowData.id
238
+		};
239
+		this.mainService
240
+		  .getConsumeDept(data)
241
+		  .subscribe((res) => {
242
+				this.isDeptLoading = false;
243
+				this.hospitals1 = res.data
244
+		  });
245
+  }
246
+	
247
+	// 获取药房科室
248
+	getAddDeparts(dept) {
249
+		var that = this;
250
+		let data = {
251
+			department: {
252
+				dept,
253
+				hospital: {
254
+					id: this.hosId
255
+				},
216 256
 				type:{
217 257
 					id:''
218 258
 				}
219
-      },
220
-      idx: 0,
221
-      sum: 20,
222
-    };
259
+			},
260
+			idx: 0,
261
+			sum: 20,
262
+		};
223 263
 		that.mainService.getDictionary("list", "dept_type").subscribe((res) => {
224
-		  let typeData = res.find(i=>i.value=='pharmacyRoom');
264
+			let typeData = res.find(i=>i.value=='pharmacyRoom');
225 265
 			if(typeData){
226 266
 				data.department.type.id = typeData.id
227 267
 			}
228 268
 			that.mainService
229
-			  .getFetchDataList("data", "department", data)
230
-			  .subscribe((data) => {
231
-					setTimeout(_=>{
232
-						this.hospitals1 = data.list
233
-						that.isDeptLoading = false;
234
-					},500)
235
-			  });
269
+				.getFetchDataList("data", "department", data)
270
+				.subscribe((data) => {
271
+					this.addHospitals = data.list
272
+					that.isDeptLoading = false;
273
+				});
236 274
 		});
237
-  }
238
-	
275
+	}
276
+		
239 277
   // 获取所有院区
240 278
   getAllHospital() {
241
-		this.getDeparts('')
242 279
     this.getList();
243 280
   }
244 281
 
@@ -275,7 +312,7 @@ export class DispensingBatchComponent implements OnInit {
275 312
 		.subscribe((result) => {
276 313
 			if (result.status == 200) {
277 314
 				let data = result.list[0] || {};
278
-				this.validateForm.controls.department.setValue(data.pharmacyDept || '');
315
+				this.validateForm.controls.addDepartment.setValue(data.pharmacyDept || '');
279 316
 				this.add = true;
280 317
 				this.modal = true;
281 318
 				this.isAddDeptsPhone = true;
@@ -299,7 +336,7 @@ export class DispensingBatchComponent implements OnInit {
299 336
   initForm() {
300 337
     this.validateForm = this.fb.group({
301 338
       dispensingTime: [null, [Validators.required]],
302
-      department: [null, [Validators.required]],
339
+      addDepartment: [null, [Validators.required]],
303 340
 			loadAllConsumeDept: [true,[]]
304 341
     });
305 342
 		let date = new Date();
@@ -320,7 +357,7 @@ export class DispensingBatchComponent implements OnInit {
320 357
 			startTime:this.formStartDate?this.formStartDate:this.loadStartTime,//发起时间开始
321 358
 			endTime:this.formEndDate?this.formEndDate:this.loadEndTime,//发起时间结束
322 359
 			hosId:this.hosId,
323
-			pharmacy:this.validateForm.value.department,
360
+			pharmacy:this.validateForm.value.addDepartment,
324 361
 			loadAllConsumeDept:this.validateForm.value.loadAllConsumeDept?1:0
325 362
     };
326 363
   
@@ -350,7 +387,7 @@ export class DispensingBatchComponent implements OnInit {
350 387
     this.add = false;
351 388
     this.coopId = data.id;
352 389
     this.coopItem = data;
353
-    this.validateForm.controls.department.setValue(data.pharmacy);
390
+    this.validateForm.controls.addDepartment.setValue(data.pharmacy);
354 391
     this.validateForm.controls.dispensingTime.setValue([data.startTime,data.endTime]);
355 392
 		if(data.loadAllConsumeDept==1){
356 393
 			this.validateForm.controls.loadAllConsumeDept.setValue(true);
@@ -411,7 +448,106 @@ export class DispensingBatchComponent implements OnInit {
411 448
         }
412 449
       });
413 450
   }
414
-
451
+	
452
+	// 发药总量
453
+	grossModal:boolean = false;
454
+	grossLoading:boolean = false;
455
+	viewData:any = [];
456
+	dispensingGross(e,data){
457
+		this.grossModal = true
458
+		this.grossLoading = true
459
+		this.mainService
460
+		  .drugsGross(data.id)
461
+		  .subscribe((res:any) => {
462
+		    this.grossLoading = false;
463
+				this.viewData = res.data
464
+		  });
465
+	}
466
+	
467
+	// 关闭发药总量
468
+	hideGrossModal(){
469
+		this.grossModal = false
470
+	}
471
+	
472
+	// 发药信息
473
+	infoModal:boolean = false;
474
+	infoLoading:boolean = false;
475
+	infoData:any = [];
476
+	dispensingInfo(e,data){
477
+		this.rowData = data
478
+		this.getDeparts()
479
+		this.infoModal = true
480
+		this.infoLoading = true
481
+		this.mainService
482
+		  .drugsInfo({
483
+				batchId:data.id,
484
+				dataType:'batchDispensingMedicine'
485
+			}).subscribe((res:any) => {
486
+		    this.infoLoading = false;
487
+				this.infoData = res.list
488
+		  });
489
+	}
490
+	
491
+	// 关闭发药信息
492
+	hideInfoModal(){
493
+		this.infoModal = false
494
+	}
495
+	// 发药信息搜索
496
+	searchInfo(){
497
+		this.getInfo()
498
+	}
499
+	
500
+	getInfo(){
501
+		this.infoLoading = true
502
+		this.mainService
503
+		  .drugsInfo({
504
+				deptId:this.infoDepartment,
505
+				batchId:this.rowData.id,
506
+				dataType:'batchDispensingMedicine'
507
+			}).subscribe((res:any) => {
508
+		    this.infoLoading = false;
509
+				this.infoData = res.list
510
+		  });
511
+	}
512
+	
513
+	// 发药信息重置
514
+	resetInfo(){
515
+		this.infoDepartment = null
516
+		this.getInfo()
517
+	}
518
+	
519
+	// 导出
520
+	maskFlag:any = null;
521
+	exportPc(e,data){
522
+		this.maskFlag = this.message.loading("正在导出..", {
523
+		  nzDuration: 0,
524
+		}).messageId;
525
+		this.mainService.exportReport("drugsBatch", {
526
+			batchId:data.id
527
+		}).subscribe(
528
+		  (res:any) => {
529
+		    this.message.remove(this.maskFlag);
530
+		    this.maskFlag = false;
531
+		    this.message.success('导出成功');
532
+		    var file = new Blob([res], {
533
+		      type: "application/vnd.ms-excel",
534
+		    });
535
+		    var fileURL = URL.createObjectURL(file);
536
+		    var a = document.createElement("a");
537
+		    a.href = fileURL;
538
+		    a.target = "_blank";
539
+		    a.download = `发药批次数据-${data.batchNo}.xls`;
540
+		    document.body.appendChild(a);
541
+		    a.click();
542
+		  },
543
+		  (err) => {
544
+		    this.message.remove(this.maskFlag);
545
+		    this.maskFlag = false;
546
+		    this.message.error('导出失败');
547
+		  }
548
+		);
549
+	}
550
+	
415 551
   // 查看
416 552
   detail(e, data) {
417 553
     e.stopPropagation();
@@ -420,6 +556,8 @@ export class DispensingBatchComponent implements OnInit {
420 556
 
421 557
 	// 发药并打印
422 558
 	printData = []; 
559
+	summaryDataList = [];
560
+	batchNo:any = null;
423 561
 	print(e, data, id){
424 562
 		this.rowData = data
425 563
 		e.stopPropagation();
@@ -428,7 +566,9 @@ export class DispensingBatchComponent implements OnInit {
428 566
 		that.mainService
429 567
 		  .transfusionPrint("drugsBatch", id)
430 568
 		  .subscribe((res) => {
569
+				this.batchNo = res.data.batchNo
431 570
 				let arr = res.data.drugsListDTOS;
571
+				this.summaryDataList = res.data.summaryDataList;
432 572
 				for(let i of arr){
433 573
 					for(let t of i.drugsConfigureDTOS){
434 574
 						t.deptName = i.pharmacyDTO?i.pharmacyDTO.dept:'-'

+ 11 - 9
src/app/views/dispensing-detail/dispensing-detail.component.html

@@ -10,15 +10,16 @@
10 10
         <thead>
11 11
           <tr class="thead">
12 12
             <th nzWidth="25%">药品名称</th>
13
-            <th nzWidth="16%">规格</th>
14
-						<th nzWidth="8%">消耗量</th>
15
-						<th nzWidth="6%">原库存</th>
16
-						<th nzWidth="8%">包装规格</th>
17
-						<th nzWidth="8%">发药箱数</th>
18
-						<th nzWidth="5%">实发</th>
19
-            <th nzWidth="6%">新库存</th>
20
-						<th nzWidth="5%">增减</th>
21
-            <th nzWidth="13%">操作</th>
13
+            <th>规格</th>
14
+						<th>实消</th>
15
+						<th>15日消耗</th>
16
+						<th>原库存</th>
17
+						<th>包规</th>
18
+						<th>发药箱数</th>
19
+						<th>实发</th>
20
+            <th>新库存</th>
21
+						<th>增减</th>
22
+            <th>操作</th>
22 23
           </tr>
23 24
         </thead>
24 25
         <tbody>
@@ -29,6 +30,7 @@
29 30
 						</td>
30 31
             <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.specs:'-' }}</td>
31 32
             <td>{{ data.expendCount||'0' }}</td>
33
+						<td>{{ data.fifteenExpendCount||'0' }}</td>
32 34
             <td>{{ data.formerInventory || '0' }}</td>
33 35
             <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.packingSpecs:'0' }}</td>
34 36
 						<td>{{ data.cartonNum || 0 }}</td> 

+ 17 - 0
src/app/views/dispensing-info-detail/dispensing-info-detail-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+import { DispensingInfoDetailComponent } from './dispensing-info-detail.component';
4
+
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: DispensingInfoDetailComponent
10
+  }
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule]
16
+})
17
+export class DispensingInfoDetailRoutingModule { }

+ 374 - 0
src/app/views/dispensing-info-detail/dispensing-info-detail.component.html

@@ -0,0 +1,374 @@
1
+<div class="list-template">
2
+  <div class="list-template__content">
3
+    <div class="list-template__top" nz-row>
4
+      <div nz-col nzLg='18' class="list-template__searchBox">
5
+        <div class="list-template__searchItem searchItem-100">
6
+          <span class="label">发药时间区间:</span>
7
+          <nz-range-picker [(ngModel)]="dateRange" nzFormat="yyyy-MM-dd HH:mm:ss"
8
+					(ngModelChange)="changeDate($event)"></nz-range-picker>
9
+        </div>
10
+				<div class="list-template__searchItem">
11
+				  <span class="label">科室名称:</span>
12
+				  <nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" (nzOnSearch)="changeInp($event,'dept')" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择申请科室" [(ngModel)]="department">
13
+				    <ng-container *ngFor="let option of hospitals1">
14
+				      <nz-option *ngIf="!loading" [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
15
+				    </ng-container>
16
+				    <nz-option *ngIf="loading" nzDisabled nzCustomContent>
17
+				      <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
18
+				    </nz-option>
19
+				  </nz-select>
20
+				</div>
21
+				<div class="list-template__searchItem">
22
+				  <span class="label">药品名称:</span>
23
+					<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" (nzOnSearch)="changeInp($event,'commodity')" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择商品名称" [(ngModel)]="commodity">
24
+					  <ng-container *ngFor="let option of commodityData">
25
+					    <nz-option *ngIf="!loading" [nzLabel]="option.drugName + '('+option.specs+')'" [nzValue]="option.id"></nz-option>
26
+					  </ng-container>
27
+					  <nz-option *ngIf="loading" nzDisabled nzCustomContent>
28
+					    <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
29
+					  </nz-option>
30
+					</nz-select>
31
+				</div>
32
+				
33
+				<div class="list-template__searchItem">
34
+				  <span class="label">批次号:</span>
35
+					<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" (nzOnSearch)="changeInp($event,'batch')" nzServerSearch nzShowSearch nzAllowClear nzPlaceHolder="请选择批次号" [(ngModel)]="batch">
36
+					  <ng-container *ngFor="let option of batchData">
37
+					    <nz-option *ngIf="!loading" [nzLabel]="option.batchNo" [nzValue]="option.id"></nz-option>
38
+					  </ng-container>
39
+					  <nz-option *ngIf="loading" nzDisabled nzCustomContent>
40
+					    <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
41
+					  </nz-option>
42
+					</nz-select>
43
+				</div>
44
+      </div>
45
+      <div nz-col nzLg="6" class="list-template__btns">
46
+        <button class="btn default" (click)='search()'>搜索</button>
47
+        <button class="btn default ml8" (click)='reset()'>重置</button>
48
+				<button *ngIf="coopBtns.export" class="btn default ml8" (click)='excelExport()'>导出</button>
49
+      </div>
50
+    </div>
51
+    <div class="list-template__bottom">
52
+      <nz-table class="list-template__nzTable" [nzData]="listOfData" nzSize="middle" [nzShowPagination]="false"
53
+        [nzLoading]="loading1">
54
+        <thead>
55
+          <tr class="thead">
56
+            <th>批次号|科室</th>
57
+						<th>商品名称|规格</th>
58
+            <th>消耗量+增发+原库存=实发量</th>
59
+            <th>包装规格</th>
60
+            <th>发药箱数</th>
61
+            <th>新库存</th>
62
+            <th>发药日期</th>
63
+          </tr>
64
+        </thead>
65
+        <tbody v-if="listOfData && listOfData.length>0">
66
+          <tr *ngFor="let data of listOfData" (click)="selectedListData(data.id)">
67
+            <td>
68
+							<div>{{ data['0'] }}</div>
69
+							<div>{{ data['1'] }}</div>
70
+						</td>
71
+						<td>
72
+							<div>{{ data['2']}}</div>
73
+							<div>{{ data['3']}}</div>
74
+						</td>
75
+            <td>{{ data['4']}} + {{data['5']}} +
76
+						 {{data['6'] }} = {{data.num}}</td>
77
+						 
78
+            <td>{{ data['7']}}</td>
79
+            <td>{{ data['8']==0 ? '-' : data['8']}}</td>
80
+						<td>{{ data['9']}}</td>
81
+						<td>{{ data['10']}}</td>
82
+          </tr>
83
+        </tbody>
84
+      </nz-table>
85
+      <div class="list-template__pagination">
86
+        <nz-pagination [(nzPageIndex)]="pageIndex" [(nzTotal)]="listLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
87
+          (nzPageIndexChange)="getList()" (nzPageSizeChange)="getList()">
88
+        </nz-pagination>
89
+      </div>
90
+    </div>
91
+  </div>
92
+
93
+  <!-- 新增/编辑模态框 -->
94
+  <div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="modal">
95
+    <div class="modalBody">
96
+      <div class="title">科室发药单-查看<i class="icon_transport transport-guanbi" (click)="hideModal()"></i>
97
+      </div>
98
+      <overlay-scrollbars #osComponentRef1 class="content">
99
+        <div class="list-template__bottom">
100
+          <nz-table class="list-template__nzTable" [nzData]="viewData" nzSize="middle" [nzShowPagination]="false"
101
+            [nzLoading]="loading1">
102
+            <thead>
103
+              <tr class="thead">
104
+								<th nzWidth="10%">药品标识</th>
105
+                <th nzWidth="10%">药品名称</th>
106
+                <th nzWidth="10%">规格</th>
107
+                <th nzWidth="10%">消耗数量</th>
108
+                <th nzWidth="10%">实发数量</th>
109
+                <th nzWidth="10%">包装规格</th>
110
+                <th nzWidth="10%">发药药箱</th>
111
+                <th nzWidth="10%">原库存数</th>
112
+                <th nzWidth="10%">计算后库存</th>
113
+        				<th nzWidth="10%">增减</th>
114
+              </tr>
115
+            </thead>
116
+            <tbody>
117
+              <tr *ngFor="let data of viewData">
118
+								<td>{{ data.drugsInfoDTO?data.drugsInfoDTO.drugCode:'无' }}</td>
119
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.drugName:'无' }}</td>
120
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.specs:'无' }}</td>
121
+                <td>{{ data.expendCount||'0' }}</td>
122
+                <td>{{ data.actualCount||'0' }}</td>
123
+                <td>{{ data.drugsInfoDTO?data.drugsInfoDTO.packingSpecs:'0' }}</td>
124
+                <td>{{ data.cartonNum || '0' }}</td>
125
+                <td>{{ data.formerInventory || '0' }}</td>
126
+                <td>{{ data.afterInventory || '0'}}</td>
127
+        				<td>{{ data.addSub || '0' }}</td>
128
+              </tr>
129
+            </tbody>
130
+          </nz-table>
131
+        </div>
132
+      </overlay-scrollbars>
133
+      <div class="display_flex justify-content_flex-center">
134
+        <button class="btn" nz-button nzType="primary" (click)="hideModal()">知道了</button>
135
+      </div>
136
+    </div>
137
+  </div>
138
+
139
+  <!-- 打印 -->
140
+  <div id="report" style="display: none;">
141
+		<div class="monad" 
142
+				*ngIf="rowData"
143
+				style="padding: 10px;
144
+				border: 1px solid #e7e7e7;
145
+				border-radius: 5px;">
146
+			<div class="monad-title" 
147
+				style="text-align: center;
148
+				font-size: 18px;
149
+				border-bottom: 1px solid #e7e7e7;
150
+				padding-bottom: 10px;">
151
+				大输液发药单-{{rowData.applyDeptDTO?rowData.applyDeptDTO.dept:''}}
152
+			</div>
153
+			<div class="monad-sign" style="display: flex;line-height: 23px;font-size: 14px;">
154
+				<div style="margin-right: 15px;">日期:{{rowData.createTime|date:'yyyy-MM-dd HH:mm'}}</div>
155
+				<div style="margin-right: 15px;">批次号:{{rowData.batch?rowData.batch.batchNo:'-'}}</div>
156
+				<div style="margin-right: 15px;">单号:{{rowData.packingNo}}</div>
157
+			</div>
158
+			<div class="monad-sign" style="display: flex;line-height: 23px;font-size: 14px;">
159
+				<div style="margin-right: 15px;">取药药房:{{rowData.pharmacyDTO?rowData.pharmacyDTO.dept:'-'}}</div>
160
+			</div>
161
+			<div style="border: 1px solid #e7e7e7;border-bottom: none;font-size: 14px;">
162
+				<div class="thead" style="display: flex;">
163
+					<div style="width: 40%;display: flex;font-size: 12px;
164
+					align-items: center;
165
+					justify-content: center;
166
+					flex-wrap: wrap;
167
+					border-right: 1px solid #e7e7e7;
168
+					border-bottom: 1px solid #e7e7e7;">药品名称</div>
169
+					
170
+					<div style="width: 20%;display: flex;font-size: 12px;
171
+					align-items: center;
172
+					justify-content: center;
173
+					flex-wrap: wrap;
174
+					border-right: 1px solid #e7e7e7;
175
+					border-bottom: 1px solid #e7e7e7;">规格</div>
176
+					
177
+					<div style="width: 10%;display: flex;font-size: 12px;
178
+					align-items: center;
179
+					justify-content: center;
180
+					flex-wrap: wrap;
181
+					border-right: 1px solid #e7e7e7;
182
+					border-bottom: 1px solid #e7e7e7;">15日消耗</div>
183
+					
184
+					<div style="width: 8%;display: flex;font-size: 12px;
185
+					align-items: center;
186
+					justify-content: center;
187
+					flex-wrap: wrap;
188
+					border-right: 1px solid #e7e7e7;
189
+					border-bottom: 1px solid #e7e7e7;">包规</div>
190
+					
191
+					<div style="width: 8%;display: flex;font-size: 12px;
192
+					align-items: center;
193
+					justify-content: center;
194
+					flex-wrap: wrap;
195
+					border-right: 1px solid #e7e7e7;
196
+					border-bottom: 1px solid #e7e7e7;">实消</div>
197
+					
198
+					<div style="width: 10%;display: flex;font-size: 12px;
199
+					align-items: center;
200
+					justify-content: center;
201
+					flex-wrap: wrap;
202
+					border-right: 1px solid #e7e7e7;
203
+					border-bottom: 1px solid #e7e7e7;">临时增发</div>
204
+					
205
+					<div style="width: 10%;display: flex;font-size: 12px;
206
+					align-items: center;
207
+					justify-content: center;
208
+					flex-wrap: wrap;
209
+					border-bottom: 1px solid #e7e7e7;">箱数</div>
210
+				</div>
211
+				<div *ngFor="let data of codes" style="display: flex;">
212
+					<div style="width: 40%;display: flex;font-size: 12px;
213
+					align-items: center;
214
+					justify-content: center;
215
+					flex-wrap: wrap;
216
+					border-right: 1px solid #e7e7e7;
217
+					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.drugName }}</div>
218
+					
219
+					<div style="width: 20%;display: flex;font-size: 12px;
220
+					align-items: center;
221
+					justify-content: center;
222
+					flex-wrap: wrap;
223
+					border-right: 1px solid #e7e7e7;
224
+					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.specs }}</div>
225
+					
226
+					<div style="width: 10%;display: flex;font-size: 12px;
227
+					align-items: center;
228
+					justify-content: center;
229
+					flex-wrap: wrap;
230
+					border-right: 1px solid #e7e7e7;
231
+					border-bottom: 1px solid #e7e7e7;">15日消耗</div>
232
+					
233
+					<div style="width: 8%;display: flex;font-size: 12px;
234
+					align-items: center;
235
+					justify-content: center;
236
+					flex-wrap: wrap;
237
+					border-right: 1px solid #e7e7e7;
238
+					border-bottom: 1px solid #e7e7e7;">{{ data.drugsInfoDTO.packingSpecs }}</div>
239
+					
240
+					<div style="width: 8%;display: flex;font-size: 12px;
241
+					align-items: center;
242
+					justify-content: center;
243
+					flex-wrap: wrap;
244
+					border-right: 1px solid #e7e7e7;
245
+					border-bottom: 1px solid #e7e7e7;">{{ data.expendCount }}</div>
246
+					
247
+					<div style="width: 10%;display: flex;font-size: 12px;
248
+					align-items: center;
249
+					justify-content: center;
250
+					flex-wrap: wrap;
251
+					border-right: 1px solid #e7e7e7;
252
+					border-bottom: 1px solid #e7e7e7;">{{ data.addSub || 0 }}</div>
253
+					
254
+					<div style="width: 10%;display: flex;font-size: 12px;
255
+					align-items: center;
256
+					justify-content: center;
257
+					flex-wrap: wrap;
258
+					border-bottom: 1px solid #e7e7e7;">
259
+						<span *ngIf="data.drugsInfoDTO.drugName!='合计'">
260
+							{{ data.cartonNum }} {{data.giveOutType && data.giveOutType.value==1?
261
+							data.drugsInfoDTO.unit:'箱'}}
262
+						</span>
263
+					</div>
264
+					
265
+				</div>
266
+			</div>
267
+		</div>
268
+		
269
+		<div class="monad"
270
+				style="padding: 10px;
271
+				border: 1px solid #e7e7e7;
272
+				border-radius: 5px;margin-bottom: 40px;">
273
+			<div class="monad-title" 
274
+				style="text-align: center;
275
+				font-size: 18px;
276
+				border-bottom: 1px solid #e7e7e7;
277
+				padding-bottom: 10px;">
278
+				大输液批次消耗汇总单
279
+			</div>
280
+			<div class="monad-sign" style="display: flex;line-height: 23px;font-size: 14px;">
281
+				<div style="margin-right: 15px;">日期:666</div>
282
+				<div style="margin-right: 15px;">批次号:777</div>
283
+			</div>
284
+			<div style="border: 1px solid #e7e7e7;border-bottom: none;font-size: 14px;">
285
+				<div class="thead" style="display: flex;">
286
+					<div style="width: 40%;display: flex;font-size: 12px;
287
+					align-items: center;
288
+					justify-content: center;
289
+					flex-wrap: wrap;
290
+					border-right: 1px solid #e7e7e7;
291
+					border-bottom: 1px solid #e7e7e7;">药品名称</div>
292
+					
293
+					<div style="width: 20%;display: flex;font-size: 12px;
294
+					align-items: center;
295
+					justify-content: center;
296
+					flex-wrap: wrap;
297
+					border-right: 1px solid #e7e7e7;
298
+					border-bottom: 1px solid #e7e7e7;">药品规格</div>
299
+					
300
+					<div style="width: 13%;display: flex;font-size: 12px;
301
+					align-items: center;
302
+					justify-content: center;
303
+					flex-wrap: wrap;
304
+					border-right: 1px solid #e7e7e7;
305
+					border-bottom: 1px solid #e7e7e7;">包装规格</div>
306
+					
307
+					<div style="width: 13%;display: flex;font-size: 12px;
308
+					align-items: center;
309
+					justify-content: center;
310
+					flex-wrap: wrap;
311
+					border-right: 1px solid #e7e7e7;
312
+					border-bottom: 1px solid #e7e7e7;">发药总量</div>
313
+		
314
+					<div style="width: 14%;display: flex;font-size: 12px;
315
+					align-items: center;
316
+					justify-content: center;
317
+					flex-wrap: wrap;
318
+					border-bottom: 1px solid #e7e7e7;">箱数合计</div>
319
+					
320
+				</div>
321
+				<div style="display: flex;">
322
+					<div style="width: 40%;display: flex;font-size: 12px;
323
+					align-items: center;
324
+					justify-content: center;
325
+					flex-wrap: wrap;
326
+					border-right: 1px solid #e7e7e7;
327
+					border-bottom: 1px solid #e7e7e7;">葡萄胎</div>
328
+					
329
+					<div style="width: 20%;display: flex;font-size: 12px;
330
+					align-items: center;
331
+					justify-content: center;
332
+					flex-wrap: wrap;
333
+					border-right: 1px solid #e7e7e7;
334
+					border-bottom: 1px solid #e7e7e7;">100ml*1</div>
335
+					
336
+					<div style="width: 13%;display: flex;font-size: 12px;
337
+					align-items: center;
338
+					justify-content: center;
339
+					flex-wrap: wrap;
340
+					border-right: 1px solid #e7e7e7;
341
+					border-bottom: 1px solid #e7e7e7;">100</div>
342
+					
343
+					<div style="width: 13%;display: flex;font-size: 12px;
344
+					align-items: center;
345
+					justify-content: center;
346
+					flex-wrap: wrap;
347
+					border-right: 1px solid #e7e7e7;
348
+					border-bottom: 1px solid #e7e7e7;">200</div>
349
+					
350
+					
351
+					<div style="width: 14%;display: flex;font-size: 12px;
352
+					align-items: center;
353
+					justify-content: center;
354
+					flex-wrap: wrap;
355
+					border-bottom: 1px solid #e7e7e7;">
356
+					<span>
357
+						20箱
358
+					</span>
359
+					</div>
360
+					
361
+				</div>
362
+			</div>
363
+		</div>
364
+  </div>
365
+
366
+</div>
367
+<!-- 操作成功/失败提示框 -->
368
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
369
+  [info]="promptInfo"></app-prompt-modal>
370
+
371
+<!-- 查看详情 -->
372
+<router-outlet></router-outlet>
373
+<!-- 遮罩 -->
374
+<app-mask *ngIf="maskFlag"></app-mask>

+ 238 - 0
src/app/views/dispensing-info-detail/dispensing-info-detail.component.less

@@ -0,0 +1,238 @@
1
+@import "../../../../src/theme.less";
2
+:host {
3
+  .add-button {
4
+    margin: 0 auto 16px !important;
5
+  }
6
+  .targetDept {
7
+    overflow: hidden;
8
+    // width: 90px;
9
+    text-overflow: ellipsis;
10
+    white-space: nowrap;
11
+  }
12
+  .dynamic {
13
+    margin-bottom: 16px;
14
+    display: flex;
15
+    align-items: center;
16
+    input {
17
+      width: 90%;
18
+    }
19
+    i {
20
+      margin-left: 8px;
21
+      cursor: pointer;
22
+      font-size: 18px;
23
+    }
24
+  }
25
+}
26
+
27
+.searchItem-100{
28
+	.label{
29
+		width: 100px !important;
30
+	}
31
+}
32
+.save {
33
+  position: fixed;
34
+  left: 0;
35
+  top: 0;
36
+  width: 100%;
37
+  height: 100%;
38
+  background: rgba(0, 0, 0, 0.4);
39
+  z-index: 99;
40
+
41
+  .modalBody {
42
+    width: 350px;
43
+    background: #fff;
44
+    border-radius: 5px;
45
+    padding: 10px 20px;
46
+    color: #333;
47
+
48
+    .title {
49
+      width: 100%;
50
+      text-align: center;
51
+      font-size: 18px;
52
+      position: relative;
53
+
54
+      i {
55
+        position: absolute;
56
+        right: 0;
57
+        top: 0;
58
+        font-size: 20px;
59
+        color: #666;
60
+        cursor: pointer;
61
+        padding: 0 5px;
62
+      }
63
+    }
64
+
65
+    .content {
66
+      width: 100%;
67
+      height: 117px;
68
+      background: #f9fafb;
69
+      border: 1px solid #e5e9ed;
70
+      border-radius: 5px;
71
+      overflow: hidden;
72
+      margin-top: 12px;
73
+
74
+      div {
75
+        text-align: center;
76
+        margin: 0;
77
+
78
+        &.icon {
79
+          margin-top: 17px;
80
+
81
+          i {
82
+            color: #34b349;
83
+            font-size: 30px !important;
84
+
85
+            &.transport-wenhao {
86
+              color: #f5a523;
87
+            }
88
+
89
+            &.transport-shibai {
90
+              color: #ff3a52;
91
+            }
92
+          }
93
+        }
94
+
95
+        &.defeat {
96
+          color: #333;
97
+          font-size: 18px;
98
+        }
99
+
100
+        &:nth-child(3) {
101
+          font-size: 14px;
102
+          color: #666;
103
+        }
104
+      }
105
+    }
106
+
107
+    button {
108
+      margin-top: 10px;
109
+
110
+      &.btn {
111
+        margin-left: 8px;
112
+      }
113
+    }
114
+  }
115
+
116
+  // 新增
117
+  &.add {
118
+    .modalBody {
119
+      width: 80%;
120
+      height: auto;
121
+
122
+      .content {
123
+        width: 100%;
124
+        height: auto;
125
+        padding: 19px 14px 0 14px;
126
+        max-height: 500px;
127
+        overflow-y: auto;
128
+				
129
+				.list-template__bottom {
130
+				  background: #f9fafb;
131
+				  border: 1px solid #e5e9ed;
132
+				  border-radius: 8px;
133
+				  padding-bottom: 56px;
134
+				  position: relative;
135
+				  .list-template__nzTable {
136
+				    padding: 16px 16px 0;
137
+				
138
+				    .thead {
139
+				      background-image: linear-gradient(to right, @bg-start, @bg-end);
140
+				
141
+				      th {
142
+				        background: transparent;
143
+				        color: #fff;
144
+				        text-align: center;
145
+				      }
146
+				    }
147
+				
148
+				    .ant-table-body {
149
+				      border-bottom: 1px solid #e5e9ed;
150
+				    }
151
+				
152
+				    .ant-table-tbody {
153
+				      tr {
154
+				        text-align: center;
155
+				        color: #333;
156
+				
157
+				        td {
158
+				          border: none;
159
+				
160
+				          &.tab_hover:hover{
161
+				            text-decoration: underline;
162
+				            cursor: pointer;
163
+				          }
164
+				
165
+				          .coop {
166
+				            button{
167
+				              color: #333;
168
+				            }
169
+				            span,button {
170
+				              display: inline-block;
171
+				              padding: 0 8px;
172
+				              cursor: pointer;
173
+				              position: relative;
174
+				
175
+				              &::after {
176
+				                content: "|";
177
+				                position: absolute;
178
+				                top: 0;
179
+				                right: 0;
180
+				              }
181
+				
182
+				              &:hover,
183
+				              &:active {
184
+				                color: @primary-color;
185
+				              }
186
+				
187
+				              &:nth-last-child(1) {
188
+				                &::after {
189
+				                  content: "";
190
+				                }
191
+				              }
192
+				            }
193
+				          }
194
+				        }
195
+				      }
196
+				    }
197
+				  }
198
+				  .list-template__pagination {
199
+				    height: 56px;
200
+				    display: flex;
201
+				    align-items: center;
202
+				    position: absolute;
203
+				    right: 8px;
204
+				  }
205
+				}
206
+				
207
+        .addForm {
208
+          .ant-form-item {
209
+            margin-bottom: 14px;
210
+
211
+            .ant-form-item-label {
212
+              line-height: 14px;
213
+              text-align: left;
214
+            }
215
+          }
216
+        }
217
+
218
+        .editForm {
219
+          .ant-form-item {
220
+            margin-bottom: 14px;
221
+
222
+            .ant-form-item-label {
223
+              line-height: 0;
224
+              text-align: left;
225
+            }
226
+          }
227
+        }
228
+      }
229
+
230
+      button {
231
+        &:nth-child(1) {
232
+          margin-right: 20px;
233
+        }
234
+      }
235
+    }
236
+  }
237
+}
238
+

+ 262 - 0
src/app/views/dispensing-info-detail/dispensing-info-detail.component.ts

@@ -0,0 +1,262 @@
1
+import { Component, OnInit, ViewChild} from "@angular/core";
2
+import { ActivatedRoute, Router } from "@angular/router";
3
+import {
4
+  FormBuilder,
5
+  Validators,
6
+  FormGroup,
7
+  FormControl,
8
+} from "@angular/forms";
9
+
10
+import { MainService } from "../../services/main.service";
11
+import { OverlayScrollbarsComponent } from "overlayscrollbars-ngx";
12
+import { ToolService } from "../../services/tool.service";
13
+import { format, startOfDay, endOfDay } from "date-fns";
14
+import { NzMessageService } from "ng-zorro-antd";
15
+import { Subject } from "rxjs";
16
+import { debounceTime, filter } from "rxjs/operators";
17
+import host from "../../../assets/js/http";
18
+import { HttpRequest, HttpResponse, HttpClient } from '@angular/common/http';
19
+
20
+@Component({
21
+  selector: "app-dispensing-info-detail",
22
+  templateUrl: "./dispensing-info-detail.component.html",
23
+  styleUrls: ["./dispensing-info-detail.component.less"],
24
+})
25
+export class DispensingInfoDetailComponent implements OnInit{
26
+  @ViewChild("osComponentRef1", {
27
+    read: OverlayScrollbarsComponent,
28
+    static: false,
29
+  })
30
+  osComponentRef1: OverlayScrollbarsComponent;
31
+  constructor(
32
+    private message: NzMessageService,
33
+    private fb: FormBuilder,
34
+    private route: ActivatedRoute,
35
+    private router: Router,
36
+    private mainService: MainService,
37
+    private tool: ToolService,
38
+    private http: HttpClient,
39
+  ) {}
40
+	
41
+  ngOnInit() {
42
+    this.searchParentDeptSubject.pipe(debounceTime(500)).subscribe((e) => {
43
+     if(e[1]=='dept'){
44
+			 this.getDeparts(e[0]);
45
+		 }else if(e[1]=='commodity'){
46
+			 this.getCommodityData(e[0])
47
+		 }else{
48
+			 this.getBathData(e[0])
49
+		 }
50
+
51
+    });
52
+		this.hosId = this.tool.getCurrentHospital().id;
53
+    this.coopBtns = this.tool.initCoopBtns(this.route);
54
+    this.getAllquest();
55
+  }
56
+  listOfData: any[] = []; //表格数据
57
+  promptContent: string; //操作提示框提示信息
58
+  ifSuccess: boolean; //操作成功/失败
59
+  promptInfo: string; //操作结果提示信息
60
+  promptModalShow: boolean; //操作提示框是否展示
61
+  modal: boolean = false; //新增/编辑模态框
62
+  add: boolean; //true:新增;false:编辑
63
+  validateForm: FormGroup; //新增/编辑表单
64
+  coopId: number; //表格中执行操作的id
65
+  department: ""; //所属科室
66
+	batch:any = null;
67
+	commodity:any = null;
68
+	hosId: number; 
69
+	dateRange;//时间
70
+  batchNumber; //批次号
71
+  num; //编码
72
+  deptalias; //别名
73
+  type; //类型
74
+  deptHandoverType; //类型
75
+  pageIndex: number = 1; //页码
76
+  listLength: number = 10; //总条数
77
+  pageSize: number = 10; //每页条数
78
+  btnLoading: boolean = false; //确认按钮loading状态
79
+  printLoading: boolean = false; //批量打印按钮loading状态
80
+  deptPhones: any = []; //新添加的科室电话列表
81
+  isAddDeptsPhone = true; //添加新的科室电话是否禁用
82
+  deptsPhoneId = 1; //科室电话自增id
83
+  allParentdepart: any = []; //所有的父级科室列表
84
+  hospitals1: any = []; //科室列表(搜索)
85
+	rowData: object = {}; //打印选择列表
86
+  searchParentDeptSubject = new Subject();
87
+  // 初始化增删改按钮
88
+  coopBtns: any = {};
89
+	viewData: any = []; //科室单查看数据
90
+	commodityData:any = [];
91
+	batchData:any = [];
92
+	maskFlag:any = null;
93
+	
94
+	
95
+  // 导出
96
+  excelExport(){
97
+    this.maskFlag = this.message.loading("正在导出..", {
98
+      nzDuration: 0,
99
+    }).messageId;
100
+    this.mainService.exportReport("dispensingMedicine", {
101
+			deptId:this.department,
102
+			batchId:this.batch,
103
+			startTime: this.startDate,
104
+			endTime: this.endDate,
105
+			drugId:this.commodity,
106
+			hosId:this.hosId
107
+		}).subscribe(
108
+      (data) => {
109
+        this.message.remove(this.maskFlag);
110
+        this.maskFlag = false;
111
+        this.message.success('导出成功');
112
+        var file = new Blob([data], {
113
+          type: "application/vnd.ms-excel",
114
+        });
115
+        var fileURL = URL.createObjectURL(file);
116
+        var a = document.createElement("a");
117
+        a.href = fileURL;
118
+        a.target = "_blank";
119
+        a.download = "发药信息详情.xls";
120
+        document.body.appendChild(a);
121
+        a.click();
122
+      },
123
+      (err) => {
124
+        this.message.remove(this.maskFlag);
125
+        this.maskFlag = false;
126
+        this.message.error('导出失败');
127
+      }
128
+    );
129
+  }
130
+
131
+  //搜索父级科室
132
+	loading = false;
133
+  changeInp(e,type) {
134
+		this.loading = true
135
+    this.searchParentDeptSubject.next([e,type]);
136
+  }
137
+
138
+  // 搜索
139
+  search() {
140
+    this.pageIndex = 1;
141
+    this.getList();
142
+  }
143
+  // 重置
144
+  reset() {
145
+    this.pageIndex = 1;
146
+    this.department = null;
147
+		this.batch = null;
148
+		this.commodity = null;
149
+    this.batchNumber = "";
150
+		this.dateRange = [];
151
+		this.startDate = "";
152
+		this.endDate = "";
153
+    this.getList();
154
+  }
155
+  // 表格数据
156
+  loading1 = false;
157
+  getList() {
158
+    var that = this;
159
+    let data = {
160
+      idx: that.pageIndex - 1,
161
+      sum: that.pageSize,
162
+			deptId:this.department,
163
+			batchId:this.batch,
164
+			startTime: this.startDate,
165
+			endTime: this.endDate,
166
+			drugId:this.commodity,
167
+			hosId:this.hosId
168
+    };
169
+		this.loading1 = true;
170
+		this.mainService
171
+			.drugsInfo(data).subscribe((res:any) => {
172
+				this.loading1 = false;
173
+				for(let i of res.list){
174
+					i.num = i['4'] + i['5'] + i['6']
175
+				}
176
+				this.listOfData = res.list
177
+				that.listLength = res.totalNum;
178
+			});
179
+  }
180
+	
181
+	// 日期选择
182
+	startDate: string; //发起时间开始
183
+	endDate: string; //发起时间结束
184
+	changeDate(result?): void {
185
+	  if (result.length==0) {
186
+	    this.startDate = this.endDate = null;
187
+	    return;
188
+	  }
189
+	  this.startDate = format(startOfDay(result[0]), 'yyyy-MM-dd HH:mm:ss');
190
+	  this.endDate = format(endOfDay(result[1]), 'yyyy-MM-dd HH:mm:ss');
191
+		this.dateRange = [this.startDate,this.endDate]
192
+	}
193
+	
194
+	// 获取所有科室
195
+  getDeparts(dept) {
196
+    var that = this;
197
+    let data = {
198
+      department: {
199
+        dept,
200
+        hospital: {
201
+          id: this.hosId
202
+        },
203
+      },
204
+      idx: 0,
205
+      sum: 20,
206
+    };
207
+    that.mainService
208
+		.getFetchDataList("data", "department", data)
209
+		.subscribe((data) => {
210
+			this.loading = false
211
+			this.hospitals1 = data.list
212
+		});
213
+  }
214
+	
215
+	// 获取药品
216
+	getCommodityData(name) {
217
+	  let data = {
218
+	    drugsInfo: {
219
+	      drugName: name || "",
220
+	      hosId: this.hosId || "" ,
221
+	    	drugType:{
222
+	    		id:'20327'
223
+	    	}
224
+	    },
225
+	    idx: 0,
226
+	    sum: 10,
227
+	  };
228
+	  this.mainService
229
+		.getFetchDataList("data", "drugsInfo", data)
230
+		.subscribe((data) => {
231
+			this.loading = false
232
+			this.commodityData = data.list
233
+		});
234
+	}
235
+	
236
+	// 获取批次号
237
+	getBathData(name) {
238
+	  let data = {
239
+	    drugsBatch: {
240
+	    	batchNo:name,
241
+	    	hosId: this.hosId,
242
+				batchStatus:{
243
+					value:2
244
+				}
245
+	    },
246
+	    idx: 0,
247
+	    sum: 10,
248
+	  };
249
+	  this.mainService
250
+		.getFetchDataList("data", "drugsBatch", data)
251
+		.subscribe((data) => {
252
+			this.loading = false
253
+			this.batchData = data.list
254
+		});
255
+	}
256
+  getAllquest() {
257
+		this.getDeparts('')
258
+		this.getCommodityData('')
259
+		this.getBathData('')
260
+    this.getList();
261
+  }
262
+}

+ 19 - 0
src/app/views/dispensing-info-detail/dispensing-info-detail.module.ts

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

+ 1 - 1
src/app/views/drug-cloud/drug-cloud.component.html

@@ -17,7 +17,7 @@
17 17
           <span class="label">药品:</span>
18 18
 					<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" (nzOnSearch)="changeInp($event,'drug')" nzServerSearch nzShowSearch nzPlaceHolder="请选择药品" [(ngModel)]="drug">
19 19
 					  <ng-container *ngFor="let option of drugData">
20
-					    <nz-option *ngIf="!isDeptLoading" [nzLabel]="option.drugName" [nzValue]="option.id"></nz-option>
20
+					    <nz-option *ngIf="!isDeptLoading" [nzLabel]="option.drugName + '('+option.specs+')'" [nzValue]="option.id"></nz-option>
21 21
 					  </ng-container>
22 22
 					  <nz-option *ngIf="isDeptLoading" nzDisabled nzCustomContent>
23 23
 					    <i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...

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

@@ -1663,7 +1663,7 @@
1663 1663
                             <!-- 【是否开启手术即将开始通知】开启 -->
1664 1664
                             <button class="btn1 mr8 mb8 mt8" (click)="pickUpPatient($event, item)" *ngIf="item.state && item.state.value == 3">一键接患者</button>
1665 1665
                             <!-- 手术状态是【手术中】,并且【是否开通送回病房】开启 -->
1666
-														<button *ngIf="surgeryWKOMsg.patientDTO && surgeryConfigs && surgeryConfigs.isPathologyForm == 1" class="btn1 mr8 mb8 mt8" (click)="pathologyAddItem($event,item)">病理申请单</button>
1666
+														<button *ngIf="item.patientDTO && surgeryConfigs && surgeryConfigs.isPathologyForm == 1" class="btn1 mr8 mb8 mt8" (click)="pathologyAddItem($event,item)">病理申请单</button>
1667 1667
                             <button class="btn1 mr8 mb8 mt8" (click)="sendWard($event, item)" *ngIf="item.patientDTO && surgeryConfigs && surgeryConfigs.remandClinical == 1 && item.state && item.state.value == 8">送回病房</button>
1668 1668
                             <!-- 手术状态是【手术中】,并且【是否开通送回苏醒室】开启 -->
1669 1669
                             <button class="btn1 mr8 mb8 mt8" (click)="sendAwakeningRoom($event, item)" *ngIf="item.patientDTO && surgeryConfigs && surgeryConfigs.remandRecovery == 1 && item.state && item.state.value == 8">送回苏醒间</button>

+ 24 - 0
src/app/views/inspect-statistics/inspect-statistics-routing.module.ts

@@ -0,0 +1,24 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+import { InspectStatisticsComponent } from './inspect-statistics.component';
4
+import { OrderDetailComponent } from '../../share/order-detail/order-detail.component';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: InspectStatisticsComponent,
10
+		children: [
11
+		  {
12
+		    // 查看详情
13
+		    path: 'orderDetail/:id',
14
+		    component: OrderDetailComponent,
15
+		  }
16
+		]
17
+  }
18
+];
19
+
20
+@NgModule({
21
+  imports: [RouterModule.forChild(routes)],
22
+  exports: [RouterModule]
23
+})
24
+export class InspectStatisticsRoutingModule { }

+ 90 - 0
src/app/views/inspect-statistics/inspect-statistics.component.html

@@ -0,0 +1,90 @@
1
+<div class="list-template">
2
+  <div class="list-template__content">
3
+    <div class="list-template__top" nz-row>
4
+      <div nz-col nzXl="18" class="list-template__searchBox">
5
+        <div class="list-template__searchItem">
6
+          <span class="label">完成时间区间</span>:
7
+					<nz-range-picker [(ngModel)]="dateRange" nzFormat="yyyy-MM-dd HH:mm:ss"
8
+					(ngModelChange)="changeDate($event)"></nz-range-picker>
9
+        </div>
10
+      </div>
11
+      <div nz-col nzXl="6" class="list-template__btns">
12
+        <button nz-button class="btn default" (click)="search()">搜索</button>
13
+        <button nz-button class="btn default ml8" (click)="reset()">
14
+          重置
15
+        </button>
16
+				<button nz-button class="btn default ml8" (click)="excelExport()">
17
+				  导出
18
+				</button>
19
+      </div>
20
+    </div>
21
+    <div class="list-template__bottom">
22
+      <nz-table
23
+        class="list-template__nzTable"
24
+        [nzData]="listOfData"
25
+        nzSize="middle"
26
+        [nzShowPagination]="false"
27
+        [nzLoading]="loading1"
28
+      >
29
+        <thead>
30
+          <tr class="thead">
31
+						<th nzWidth="50px">序号</th>
32
+						<th>发起时间</th>
33
+						<th>完成时间</th>
34
+						<th>起点科室</th>
35
+						<th>目标科室</th>
36
+						<th nzWidth="30%">工单备注</th>
37
+						<th>患者住院号</th>
38
+						<th>姓名</th>
39
+						<th>转运人员</th>
40
+            <th nzWidth="70px">操作</th>
41
+          </tr>
42
+        </thead>
43
+        <tbody>
44
+          <tr *ngFor="let data of listOfData; let index = index">
45
+						<td>{{ index+(pageIndex-1) * pageSize + 1 }}</td>
46
+            <td>{{ data['1'] | date:'yyyy-MM-dd HH:mm:ss' }}</td>
47
+            <td>{{ data['2'] | date:'yyyy-MM-dd HH:mm:ss' }}</td>
48
+            <td>{{ data['3']}}</td>
49
+            <td>{{ data['4'] }}</td>
50
+            <td>{{ data['5'] }}</td>
51
+            <td>{{ data['6'] }}</td>
52
+            <td>{{ data['7'] }}</td>
53
+						<td>{{ data['8'] }}</td>
54
+            <td>
55
+              <div class="coop">
56
+                <span
57
+                  *ngIf="coopBtns.look"
58
+                  (click)="personDetail(data)"
59
+                  >查看</span
60
+                >
61
+              </div>
62
+            </td>
63
+          </tr>
64
+        </tbody>
65
+      </nz-table>
66
+      <div class="list-template__pagination">
67
+        <nz-pagination
68
+          [(nzPageIndex)]="pageIndex"
69
+          [(nzTotal)]="listLength"
70
+          nzShowSizeChanger
71
+          [(nzPageSize)]="pageSize"
72
+          (nzPageIndexChange)="getList()"
73
+          (nzPageSizeChange)="getList()"
74
+        >
75
+        </nz-pagination>
76
+      </div>
77
+    </div>
78
+  </div>
79
+</div>
80
+<!-- 操作成功/失败提示框 -->
81
+<app-prompt-modal
82
+  *ngIf="promptModalShow"
83
+  [content]="promptContent"
84
+  [success]="ifSuccess"
85
+  [show]="promptModalShow"
86
+  [info]="promptInfo"
87
+></app-prompt-modal>
88
+
89
+<!-- 查看详情 -->
90
+<router-outlet></router-outlet>

+ 95 - 0
src/app/views/inspect-statistics/inspect-statistics.component.less

@@ -0,0 +1,95 @@
1
+@import "../../../../src/theme.less";
2
+.list-template__searchItem{
3
+	.label{
4
+		width: 100px !important;
5
+	}
6
+}
7
+.save {
8
+  position: fixed;
9
+  left: 0;
10
+  top: 0;
11
+  width: 100%;
12
+  height: 100%;
13
+  background: rgba(0, 0, 0, 0.4);
14
+  z-index: 99;
15
+
16
+  .modalBody {
17
+    width: 1000px;
18
+    background: #fff;
19
+    border-radius: 5px;
20
+    padding: 10px 20px;
21
+    color: #333;
22
+
23
+    .title {
24
+      width: 100%;
25
+      text-align: center;
26
+      font-size: 18px;
27
+      position: relative;
28
+
29
+      i {
30
+        position: absolute;
31
+        right: 0;
32
+        top: 0;
33
+        font-size: 20px;
34
+        color: #666;
35
+        cursor: pointer;
36
+        padding: 0 5px;
37
+      }
38
+    }
39
+
40
+    .content {
41
+      width: 100%;
42
+      border: 1px solid #e5e9ed;
43
+      border-radius: 5px;
44
+      overflow: hidden;
45
+      margin-top: 12px;
46
+
47
+      .conItem {
48
+        color: #333;
49
+
50
+        .jiTit {
51
+          height: 50px;
52
+          line-height: 50px;
53
+          border-bottom: 1px solid #e5e9ed;
54
+          padding: 0 32px;
55
+        }
56
+
57
+        .defeat {
58
+          font-size: 14px;
59
+          color: #333;
60
+          padding: 15px 32px;
61
+          min-height: 125px;
62
+        }
63
+
64
+        &.noCon {
65
+          background: #f9fafb;
66
+          padding: 16px 32px 24px 32px;
67
+          border-top: 1px solid #e5e9ed;
68
+
69
+          .title {
70
+            text-align: left;
71
+            font-size: 14px;
72
+            margin-bottom: 8px;
73
+          }
74
+
75
+          textarea {
76
+            min-height: 210px;
77
+          }
78
+        }
79
+      }
80
+    }
81
+
82
+    button {
83
+      margin-top: 10px;
84
+      margin-left: 10px;
85
+    }
86
+  }
87
+
88
+  .txtL {
89
+    text-align: left !important;
90
+  }
91
+
92
+  .txtR {
93
+    text-align: right !important;
94
+  }
95
+}

+ 141 - 0
src/app/views/inspect-statistics/inspect-statistics.component.ts

@@ -0,0 +1,141 @@
1
+import { Component, OnInit } from "@angular/core";
2
+import { ActivatedRoute, Router } from "@angular/router";
3
+
4
+import { MainService } from "../../services/main.service";
5
+import { DateService } from "../../services/date.service";
6
+import { MyServiceService } from "../../services/my-service.service";
7
+import { ToolService } from "../../services/tool.service";
8
+import { format, startOfDay, endOfDay, startOfToday } from 'date-fns';
9
+import { NzMessageService } from "ng-zorro-antd";
10
+
11
+@Component({
12
+  selector: "app-inspect-statistics",
13
+  templateUrl: "./inspect-statistics.component.html",
14
+  styleUrls: ["./inspect-statistics.component.less"],
15
+})
16
+export class InspectStatisticsComponent implements OnInit {
17
+  constructor(
18
+		private message: NzMessageService,
19
+    private route: ActivatedRoute,
20
+    private router: Router,
21
+    private mainService: MainService,
22
+    private dateService: DateService,
23
+    private myService: MyServiceService,
24
+    private tool: ToolService
25
+  ) {}
26
+
27
+  ngOnInit() {
28
+		const todayStart = startOfToday();
29
+		const formattedTodayStart = format(todayStart, 'yyyy-MM-dd');
30
+		this.startDate = formattedTodayStart+' '+'00:00:00';
31
+		this.endDate = formattedTodayStart+' '+'23:59:59';
32
+		this.dateRange = [this.startDate,this.endDate];
33
+		this.hosId = this.tool.getCurrentHospital().id;
34
+    this.coopBtns = this.tool.initCoopBtns(this.route);
35
+		this.getList();
36
+  }
37
+	hosId:any = null;
38
+  listOfData: any[] = []; //表格数据
39
+  pageIndex: number = 1; //表格当前页码
40
+  pageSize: number = 10; //表格每页展示条数
41
+  listLength: number = 10; //表格总数据量
42
+
43
+  dateRange: any = []; //发起时间区间 天
44
+
45
+  promptContent: string; //操作提示框提示信息
46
+  ifSuccess: boolean; //操作成功/失败
47
+  promptInfo: string; //操作结果提示信息
48
+  promptModalShow: boolean; //操作提示框是否展示
49
+
50
+
51
+  // 初始化增删改按钮
52
+  coopBtns: any = {};
53
+  searchData: any = {}; // 综合统计页面带过来的参数
54
+
55
+ // 搜索
56
+ search() {
57
+   this.pageIndex = 1;
58
+   this.getList();
59
+ }
60
+ // 重置
61
+ reset() {
62
+  this.pageIndex = 1;
63
+  this.startDate = null;
64
+ 	this.endDate = null;
65
+ 	this.dateRange = [];
66
+  this.getList();
67
+ }
68
+ // 表格数据
69
+ loading1 = false;
70
+ getList() {
71
+   var that = this;
72
+   let data = {
73
+     idx: that.pageIndex - 1,
74
+     sum: that.pageSize,
75
+     startTime: this.startDate,
76
+     endTime: this.endDate,
77
+     // hosId: this.hosId
78
+   };
79
+
80
+   this.loading1 = true;
81
+   that.mainService
82
+     .inspectionStatistics(data)
83
+     .subscribe((res:any) => {
84
+       this.loading1 = false;
85
+       that.listOfData = res.list;
86
+       that.listLength = res.totalNum;
87
+     });
88
+ }
89
+ 
90
+ // 日期选择
91
+ startDate: string; //发起时间开始
92
+ endDate: string; //发起时间结束
93
+ changeDate(result?): void {
94
+   if (result.length==0) {
95
+     this.startDate = this.endDate = null;
96
+     return;
97
+   }
98
+   this.startDate = format(startOfDay(result[0]), 'yyyy-MM-dd HH:mm:ss');
99
+   this.endDate = format(endOfDay(result[1]), 'yyyy-MM-dd HH:mm:ss');
100
+	 this.dateRange = [this.startDate,this.endDate]
101
+ }
102
+
103
+// 导出
104
+	maskFlag:any = null;
105
+	excelExport(){
106
+		this.maskFlag = this.message.loading("正在导出..", {
107
+		  nzDuration: 0,
108
+		}).messageId;
109
+		this.mainService.exportReport("accompaniedInspection", {
110
+			startTime: this.startDate,
111
+			endTime: this.endDate,
112
+		}).subscribe(
113
+		  (data) => {
114
+		    this.message.remove(this.maskFlag);
115
+		    this.maskFlag = false;
116
+		    this.message.success('导出成功');
117
+		    var file = new Blob([data], {
118
+		      type: "application/vnd.ms-excel",
119
+		    });
120
+		    var fileURL = URL.createObjectURL(file);
121
+		    var a = document.createElement("a");
122
+		    a.href = fileURL;
123
+		    a.target = "_blank";
124
+		    a.download = `陪检统计数据.xls`;
125
+		    document.body.appendChild(a);
126
+		    a.click();
127
+		  },
128
+		  (err) => {
129
+		    this.message.remove(this.maskFlag);
130
+		    this.maskFlag = false;
131
+		    this.message.error('导出失败');
132
+		  }
133
+		);
134
+	}
135
+	
136
+  //查看
137
+  personDetail(data) {
138
+		this.router.navigateByUrl("/main/inspectStatistics/orderDetail/" + data['0']);
139
+  }
140
+
141
+}

+ 19 - 0
src/app/views/inspect-statistics/inspect-statistics.module.ts

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

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

@@ -37,6 +37,8 @@ export class LoginComponent implements OnInit {
37 37
   ngOnInit() {
38 38
     this.http = http;
39 39
     this.isSingleSignOn = location.href.includes("?");
40
+		localStorage.removeItem("scanCodeData");
41
+		localStorage.removeItem("pathologyActiveIndex");
40 42
     if (this.isSingleSignOn) {
41 43
       this.singleSignOn();
42 44
     } else {

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

@@ -588,6 +588,16 @@ const routes: Routes = [
588 588
         path: "assetsConsumable",
589 589
         loadChildren: () => import("../assets-consumable/assets-consumable.module").then((m) => m.AssetsConsumableModule),
590 590
       },
591
+			// 陪检统计
592
+			{
593
+			  path: "inspectStatistics",
594
+			  loadChildren: () => import("../inspect-statistics/inspect-statistics.module").then((m) => m.InspectStatisticsModule),
595
+			},
596
+			// 发药信息详情
597
+			{
598
+			  path: "dispensingInfoDetail",
599
+			  loadChildren: () => import("../dispensing-info-detail/dispensing-info-detail.module").then((m) => m.DispensingInfoDetailModule),
600
+			},
591 601
     ],
592 602
   },
593 603
 ];

+ 195 - 286
src/app/views/pathology/pathology.component.html

@@ -7,12 +7,12 @@
7 7
 		</h2>
8 8
     </div>
9 9
     <div class="pharmacy-name">
10
-			<div class="mar-ri-30">
10
+			<div class="mar-ri-30" *ngIf="toDayData">
11 11
 				今日接收:
12
-				申请单 <span class="weight">50</span> &nbsp;
13
-				标本 <span class="weight">50</span>&nbsp;
14
-				送出 <span class="weight">50</span>&nbsp;
15
-				速冻 <span class="weight">50</span>&nbsp;
12
+				申请单 <span class="weight">{{toDayData.pathologyFormNum}}</span> &nbsp;
13
+				标本 <span class="weight">{{toDayData.specimenNum}}</span>&nbsp;
14
+				速冻 <span class="weight">{{toDayData.rapidityNum}}</span>&nbsp;
15
+				送出申请单 <span class="weight">{{toDayData.sendOut}}</span>&nbsp;
16 16
 			</div>
17 17
       <div class="pharmacy-name__total">
18 18
 				<nz-input-group nzSize="large">
@@ -38,12 +38,12 @@
38 38
 	<div class="tabs">
39 39
 		<div class="tabs-item">
40 40
 			<div class="tabs-item-item" [ngClass]="{'activeClass': activeIndex == 0}" (click)="tabClick(0)">交接本</div>
41
-			<div class="tabs-item-item" [ngClass]="{'activeClass': activeIndex == 1}" (click)="tabClick(1)">实时术中快速<span class="red">(13)</span></div>
41
+			<div class="tabs-item-item" [ngClass]="{'activeClass': activeIndex == 1}" (click)="tabClick(1)">实时术中快速<span class="red" *ngIf="toDayData">({{toDayData.unReceiveRapidityNum?toDayData.unReceiveRapidityNum:0}})</span></div>
42 42
 			<div class="tabs-item-item" [ngClass]="{'activeClass': activeIndex == 2}" (click)="tabClick(2)">打包配送</div>
43 43
 		</div>
44 44
 		<div class="tabs-btn">
45
-			<button class="btn default" nzSize="small" (click)='connect()'>接</button>
46
-			<button class="btn default" nzSize="small" (click)='packaging()'>打包</button>
45
+			<button class="btn default" nz-button nzType="primary" nzSize="small" (click)='connect()'>接</button>
46
+			<button class="btn default" nz-button nzType="primary" nzSize="small" (click)='packaging()'>打包</button>
47 47
 		</div>
48 48
 	</div>
49 49
   <!-- 头部 end -->
@@ -102,15 +102,15 @@
102 102
 			      </thead>
103 103
 			      <tbody>
104 104
 			        <tr *ngFor="let data of listOneData">
105
-			          <td><span style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
106
-								<td>{{ data.patientDTO.patientName || '-' }}</td>
107
-			          <td>{{ data.residenceNo}}</td>
105
+			          <td><span *ngIf="data.intraoperativeRapidity==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
106
+								<td>{{ data.patientDTO?data.patientDTO.patientName : '-' }}</td>
107
+			          <td>{{ data.patientDTO.patientCode}}</td>
108 108
 			          <td>{{ data.takePart}}</td>
109 109
 			          <td>{{ data.specimenNum}}</td>
110
-			          <td>{{ data.drugNum || '0'}}</td>
111
-								<td>{{ data.cartonNum || '0' }}</td>
112
-								<td>{{ data.totalPrice || '0' }}</td>
113
-								<td>{{ data.time|date:'yyyy-MM-dd HH:mm'  }}</td>
110
+			          <td>{{ data.patientDTO?data.patientDTO.department.dept : '-'}}</td>
111
+								<td>{{ data.deliveryUserDTO?data.deliveryUserDTO.name : '-' }}</td>
112
+								<td>{{ data.receiveUserDTO?data.receiveUserDTO.name : '-' }}</td>
113
+								<td>{{ data.receiveTime|date:'yyyy-MM-dd HH:mm:ss'  }}</td>
114 114
 			          <td>
115 115
 			            <div class="coop">
116 116
 										<span (click)="oneLook($event,data)">查看</span>
@@ -149,19 +149,19 @@
149 149
       	      </thead>
150 150
       	      <tbody>
151 151
       	        <tr *ngFor="let data of listTwoData">
152
-      	          <td><span style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
153
-      	          <td>{{ data.patientDTO.patientName || '-' }}</td>
154
-      	          <td>{{ data.residenceNo}}</td>
155
-      	          <td>{{ data.takePart}}</td>
156
-      	          <td>{{ data.specimenNum}}</td>
157
-      	          <td>{{ data.drugNum || '0'}}</td>
158
-      	          <td>{{ data.cartonNum || '0' }}</td>
159
-      	          <td>{{ data.totalPrice || '0' }}</td>
160
-      	          <td>
161
-      	            <div class="coop">
162
-      								<span (click)="oneLook($event,data)">查看</span>
163
-      	            </div>
164
-      	          </td>
152
+      	         <td><span *ngIf="data.intraoperativeRapidity==1" style="color: red;">速</span>{{ data.applyCode || '-' }}</td>
153
+      	         <td>{{ data.patientDTO?data.patientDTO.patientName : '-' }}</td>
154
+      	         <td>{{ data.patientDTO.patientCode}}</td>
155
+      	         <td>{{ data.takePart}}</td>
156
+      	         <td>{{ data.specimenNum}}</td>
157
+      	         <td>{{ data.patientDTO?data.patientDTO.department.dept : '-'}}</td>
158
+      	         <td>{{ data.deliveryUserDTO?data.deliveryUserDTO.name : '-' }}</td>
159
+      	         <td>{{ data.status?data.status.name:'-' }}</td>
160
+      	         <td>
161
+      	           <div class="coop">
162
+      	         		<span (click)="oneLook($event,data)">查看</span>
163
+      	           </div>
164
+      	         </td>
165 165
       	        </tr>
166 166
       	      </tbody>
167 167
       	    </nz-table>
@@ -195,25 +195,27 @@
195 195
 				      </thead>
196 196
 				      <tbody>
197 197
 				        <tr *ngFor="let data of listThreeData">
198
-				          <td>{{ data.batchNo || '-' }}</td>
198
+				          <td>{{ data.packCode || '-' }}</td>
199 199
 									<td>
200
-										<div>{{data.batchNo }}</div>
201
-										<div>{{data.batchNo }}</div>
200
+										<div>{{data.packUserDTO.name }}</div>
201
+										<div>{{data.packTime|date:'yyyy-MM-dd HH:mm' }}</div>
202 202
 									</td>
203
-				          <td>{{ data.createTime|date:'yyyy-MM-dd HH:mm' }}</td>
204
-				          <td>{{ data.pharmacyDTO?data.pharmacyDTO.dept:'-' }}</td>
203
+				          <td>{{ data.pathologyFormNum }}</td>
204
+				          <td>{{ data.specimenNum }}</td>
205 205
 				          <td>
206
-				          	<div>{{data.batchNo }}</div>
207
-				          	<div>{{data.batchNo }}</div>
206
+				          	<div>{{data.deliveryUserDTO?data.deliveryUserDTO.name:'-' }}</div>
207
+				          	<div>{{data.deliveryTime|date:'yyyy-MM-dd HH:mm' || '-' }}</div>
208 208
 				          </td>
209 209
 				          <td>
210
-				          	<div>{{data.batchNo }}</div>
211
-				          	<div>{{data.batchNo }}</div>
210
+				          	<div>{{data.receiveUserDTO?data.receiveUserDTO.name:'-' }}</div>
211
+				          	<div>{{data.receiveTime|date:'yyyy-MM-dd HH:mm' || '-' }}</div>
212 212
 				          </td>
213
-									<td>{{ data.batchState?data.batchState.name : '-' }}</td>
213
+									<td>{{ data.status.name }}</td>
214 214
 				          <td>
215 215
 				            <div class="coop">
216
-											<span (click)="oneLook($event,data)">查看</span>
216
+											<span (click)="threeLook($event,data)">查看标本</span>
217
+											<span (click)="reprint($event,data)">补打</span>
218
+											<span *ngIf="data.status.value==1" (click)="distribution($event,data)">配送</span>
217 219
 				            </div>
218 220
 				          </td>
219 221
 				        </tr>
@@ -230,7 +232,7 @@
230 232
     </div>
231 233
   </div>
232 234
   <!-- 主体部分 end -->
233
-  <router-outlet></router-outlet>
235
+  <!-- <router-outlet></router-outlet> -->
234 236
 </div>
235 237
 
236 238
 <!-- 科室切换提示框 -->
@@ -241,7 +243,7 @@
241 243
   [show]="hsPromptModalShow"
242 244
   (closeModelHs)="closeModelHs($event)"
243 245
   (clearModelHs)="clearModelHs($event)"
244
-  deptType="nurse"
246
+  deptType="pathology"
245 247
 > 
246 248
   <!-- 返回系统按钮 -->
247 249
   <!-- 右侧悬浮框 -->
@@ -290,241 +292,12 @@
290 292
 </app-hs-prompt-modal>
291 293
 
292 294
 
293
-<!-- 关联标本/手术室 -->
294
-<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="relevanceModal">
295
-	<div class="modalBody">
296
-		<div class="title">关联科室</div>
297
-		<overlay-scrollbars #osComponentRef1 class="content">
298
-		 <form nz-form [formGroup]="validateForm" class="addForm" (ngSubmit)="submitForm()">
299
-			<nz-form-item>
300
-				<nz-form-label nzRequired nzFor="specimen" [nzSm]="5" [nzXs]="24">关联标本间</nz-form-label>
301
-				<nz-form-control nzErrorTip="请选择标本间!" [nzSm]="19" [nzXs]="24">
302
-					<nz-input-group>
303
-						<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择标本间" formControlName="specimen">
304
-							<ng-container *ngFor="let option of specimenData">
305
-								<nz-option [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
306
-							</ng-container>
307
-						</nz-select>
308
-					</nz-input-group>
309
-				</nz-form-control>
310
-			</nz-form-item>
311
-			
312
-			<nz-form-item>
313
-				<nz-form-label nzRequired nzFor="operation" [nzSm]="5" [nzXs]="24">关联手术间</nz-form-label>
314
-				<nz-form-control nzErrorTip="请选择手术间!" [nzSm]="19" [nzXs]="24">
315
-					<nz-input-group>
316
-						<nz-select class="formItem" nzMode="multiple" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择请选择手术间" formControlName="operation">
317
-							<ng-container *ngFor="let option of operationData">
318
-								<nz-option [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
319
-							</ng-container>
320
-						</nz-select>
321
-					</nz-input-group>
322
-				</nz-form-control>
323
-			</nz-form-item>
324
-			
325
-			<nz-form-item>
326
-				<nz-form-label nzRequired nzFor="generate">标本是否直接生成配送单</nz-form-label>
327
-				<nz-form-control nzErrorTip="请选择!">
328
-					<nz-radio-group formControlName="generate">
329
-						<label nz-radio [nzValue]="1">是</label>
330
-						<label nz-radio [nzValue]="0">否</label>
331
-					</nz-radio-group>
332
-				</nz-form-control>
333
-			</nz-form-item>
334
-		 </form>
335
-		</overlay-scrollbars>
336
-		<div class="display_flex justify-content_flex-center">
337
-			<button class="btn" nz-button nzType="primary" (click)="submitForm()" [nzLoading]="btnLoading">确定</button>
338
-		</div>
339
-	</div>
340
-</div>
341
-
342
-
343
-<!-- 标本接收 -->
344
-<div class="pathology-box display_flex align-items_center justify-content_flex-center" *ngIf="fixationModal">
345
-	<div class="pathology-content">
346
-		<div class="title">标本接收
347
-		<i class="icon_transport transport-guanbi" (click)="hideSpecimenModal()"></i></div>
348
-		<div class="content">
349
-			<div class="content-item">
350
-				<!-- <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> -->
351
-				<div class="disp-fl">
352
-					<div class="disp-title">
353
-						接收申请单数: <span class="weight">50</span>  &nbsp;
354
-						接收标本数: <span class="weight">50</span>  
355
-					</div>
356
-					<div>
357
-						<!-- <div class="width-120">标本条码:</div> -->
358
-						<input nz-input id="specimen" placeholder="可扫描物理标本条码及包码" [(ngModel)]="specimenCode" (ngModelChange)="codeChange($event)"/>
359
-					</div>
360
-					<div class="error-class">{{errorMsg}}</div>
361
-				</div>
362
-				<div class="list-template">
363
-				  <div class="list-template__content">
364
-						<div class="list-template__bottom" style="padding: 0 !important;">
365
-							<nz-table class="list-template__nzTable" [nzData]="codeData" nzSize="middle" [nzShowPagination]="false"
366
-								[nzLoading]="tableLoading">
367
-								<thead>
368
-									<tr class="thead">
369
-										<th>申请单号 | 申请科室</th>
370
-										<th>患者姓名 | 住院号</th>
371
-										<th>标本数</th>
372
-										<th>部位</th>
373
-										<th>标本名称</th>
374
-									</tr>
375
-								</thead>
376
-								<tbody>
377
-									<tr *ngFor="let data of codeData let index = index">
378
-										<td>
379
-											<div>{{ data.applyCode}}</div>
380
-											<div>{{ data.surgeryDeptDTO.dept}}</div>
381
-										</td>
382
-										<td>
383
-											<div>{{ data.patientDTO.patientName}}</div>
384
-											<div>{{ data.patientDTO.residenceNo}}</div>
385
-										</td>
386
-										<td>{{ data.specimenNum}}</td>
387
-										<td>{{ data.takePart}}</td>
388
-										<td>
389
-											<div *ngFor="let item of data.pathologySpecimenDTOList">
390
-												{{item.partSource?item.partSource.name:''}} <span *ngIf="item.system">-</span>
391
-												{{item.system?item.system.name:''}} <span *ngIf="item.organ">-</span>
392
-												{{item.organ?item.organ.name:''}} <span *ngIf="item.sample">-</span>
393
-												{{item.sample?item.sample.name:''}}
394
-											</div>
395
-										</td>
396
-									</tr>
397
-								</tbody>
398
-							</nz-table>
399
-						</div>
400
-					</div>
401
-				</div>
402
-			</div>
403
-		</div>
404
-		<div class="display_flex justify-content_flex-center bottom-btn">
405
-			<button class="btn btn-right" nz-button nzType="primary" (click)="submitFixationForm()" [nzLoading]="btnLoading">交接完成</button>
406
-			<!-- <button class="btn cancel" nz-button nzType="default" (click)="hideSpecimenModal()">取消</button> -->
407
-		</div>
408
-	</div>
409
-</div>
410
-
411
-
412 295
 <!-- 查看详情 -->
413
-<div class="pathology-box display_flex align-items_center justify-content_flex-center" *ngIf="listDetailMoadl">
414
-	<div class="pathology-content">
415
-		<div class="title">查看详情
416
-		<i class="icon_transport transport-guanbi" (click)="closeDetail()"></i></div>
417
-		<div class="content">
418
-			<div class="content-item">
419
-				<div class="list-template">
420
-				  <div class="list-template__content">
421
-						<div class="list-template__bottom" style="padding: 0 !important;">
422
-							<nz-table class="list-template__nzTable" [nzData]="codeData" nzSize="middle" [nzShowPagination]="false"
423
-								[nzLoading]="tableLoading">
424
-								<thead>
425
-									<tr class="thead">
426
-										<th>申请单号 | 申请科室</th>
427
-										<th>患者姓名 | 住院号</th>
428
-										<th>标本数</th>
429
-										<th>部位</th>
430
-										<th>标本名称</th>
431
-									</tr>
432
-								</thead>
433
-								<tbody>
434
-									<tr *ngFor="let data of codeData let index = index">
435
-										<td>
436
-											<div>{{ data.applyCode}}</div>
437
-											<div>{{ data.surgeryDeptDTO.dept}}</div>
438
-										</td>
439
-										<td>
440
-											<div>{{ data.patientDTO.patientName}}</div>
441
-											<div>{{ data.patientDTO.residenceNo}}</div>
442
-										</td>
443
-										<td>{{ data.specimenNum}}</td>
444
-										<td>{{ data.takePart}}</td>
445
-										<td>
446
-											<div *ngFor="let item of data.pathologySpecimenDTOList">
447
-												{{item.partSource?item.partSource.name:''}} <span *ngIf="item.system">-</span>
448
-												{{item.system?item.system.name:''}} <span *ngIf="item.organ">-</span>
449
-												{{item.organ?item.organ.name:''}} <span *ngIf="item.sample">-</span>
450
-												{{item.sample?item.sample.name:''}}
451
-											</div>
452
-										</td>
453
-									</tr>
454
-								</tbody>
455
-							</nz-table>
456
-						</div>
457
-					</div>
458
-				</div>
459
-			</div>
460
-		</div>
461
-		<div class="display_flex justify-content_flex-center bottom-btn">
462
-			<button class="btn btn-right" nz-button nzType="primary" (click)="closeDetail()">知道了</button>
463
-		</div>
464
-	</div>
465
-</div>
466
-
467
-
468
-<!-- 操作成功/失败提示框 -->
469
-<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
470
-  [info]="promptInfo" (closeModel)="closeModel()"></app-prompt-modal>
471
-	
472
-<!-- 标本固定信息 -->
473
-<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="verificationMoadl">
474
-	<div class="modalBody no-width">
475
-		<div class="title">标本固定信息<i class="icon_transport transport-guanbi" (click)="hideVerificationModal()"></i>
476
-		</div>
477
-		<div class="content">
478
-			<form nz-form [formGroup]="validateVerificationForm" class="addForm" (ngSubmit)="submitVerificationForm()">
479
-				<nz-form-item>
480
-				  <nz-form-label nzRequired [nzSpan]="6" nzFor="fixationTime">固定时间</nz-form-label>
481
-				  <nz-form-control [nzSpan]="18" nzErrorTip="请选择固定时间!">
482
-				    <nz-input-group>
483
-							<nz-date-picker formControlName="fixationTime" 
484
-							[nzShowTime]="{ nzFormat: 'yyyy-MM-dd HH:mm:ss' }" nzFormat="yyyy-MM-dd HH:mm:ss"
485
-							(ngModelChange)="formChangeDate($event)"></nz-date-picker>
486
-						</nz-input-group>
487
-				  </nz-form-control>
488
-				</nz-form-item>
489
-				<nz-form-item>
490
-				  <nz-form-label nzRequired [nzSpan]="6" nzFor="jobNumber">工号</nz-form-label>
491
-					<nz-form-control [nzSpan]="18" nzErrorTip="请输入工号!">
492
-						<input nz-input (ngModelChange)="numberChange($event)" formControlName="jobNumber" placeholder="请输入工号" nzSize="default" />
493
-					</nz-form-control>
494
-				</nz-form-item>
495
-				<nz-form-item>
496
-				  <nz-form-label nzRequired [nzSpan]="6" nzFor="name">姓名</nz-form-label>
497
-					<nz-form-control [nzSpan]="18" nzErrorTip="请输入姓名!">
498
-						<input nz-input disabled formControlName="name" placeholder="请输入姓名" nzSize="default" />
499
-					</nz-form-control>
500
-				</nz-form-item>
501
-				<nz-form-item>
502
-				  <nz-form-label nzRequired [nzSpan]="8" nzFor="fixative">固体液类型</nz-form-label>
503
-				  <nz-form-control [nzSpan]="16" nzErrorTip="请选择固体液类型!">
504
-				    <nz-input-group>
505
-							<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择固体液类型" formControlName="fixative">
506
-							  <ng-container *ngFor="let option of fixativeData">
507
-							    <nz-option [nzLabel]="option.name" [nzValue]="option.id"></nz-option>
508
-							  </ng-container>
509
-							</nz-select>
510
-						</nz-input-group>
511
-				  </nz-form-control>
512
-				</nz-form-item>
513
-			</form>
514
-		</div>
515
-		<div class="display_flex justify-content_flex-center bottom-btn">
516
-			<button class="btn btn-right" nz-button nzType="primary" (click)="submitVerificationForm()" [nzLoading]="btnInfoLoading">确定</button>
517
-			<button class="btn cancel" nz-button nzType="default" (click)="hideVerificationModal()">取消</button>
518
-		</div>
519
-	</div>
520
-</div>
521
-
522
-<!-- 标本查看详情-->
523 296
 <div class="pathology-box display_flex align-items_center justify-content_flex-center" *ngIf="detailMoadl">
524 297
 	<div class="pathology-content">
525 298
 		<div class="title">查看详情
526 299
 		<i class="icon_transport transport-guanbi" (click)="closeDetailMoadl()"></i></div>
527
-		<div class="content">
300
+		<div class="content border">
528 301
 			<div class="content-item boder-right">
529 302
 				<div class="form-title-box">
530 303
 					<div class="form-title"><span class="font-weight-500">是否术中快速:</span>{{detailsData.intraoperativeRapidity==1?'是':'否'}}</div>
@@ -550,22 +323,18 @@
550 323
 				</div>
551 324
 				
552 325
 				<div class="form-list">
553
-					<div class="form-title font-weight-500">病摘要:</div>
326
+					<div class="form-title font-weight-500">病摘要:</div>
554 327
 					<div class="indent">{{detailsData.medicalRecords||'无'}}</div>
555 328
 				</div>
556 329
 				<div class="form-list">
557 330
 					<div class="form-title font-weight-500">手术方案:</div>
558 331
 					<div class="indent">{{detailsData.surgicalPlan||'无'}}</div>
559 332
 				</div>
560
-				<div class="form-list">
561
-					<div class="form-title font-weight-500">术中所见:</div>
562
-					<div class="indent">{{detailsData.intraoperativeFindings||'无'}}</div>
563
-				</div>
564 333
 
565 334
 				<div class="form-title-box">
566 335
 					<div class="form-title"><span class="font-weight-500">标本类型:</span>{{detailsData.specimenType.name||'无'}}</div>
567
-					<div class="form-title"><span class="font-weight-500">标本数:</span>{{detailsData.specimenNum||'无'}}</div>
568
-					<div class="form-title"><span class="font-weight-500">采取部位:</span>{{detailsData.takePart||'无'}}</div>
336
+					<div class="form-title"><span class="font-weight-500">标本数量:</span>{{detailsData.specimenNum||'无'}}</div>
337
+					<div class="form-title"><span class="font-weight-500">部位:</span>{{detailsData.takePart||'无'}}</div>
569 338
 				</div>
570 339
 				
571 340
 				<div class="form-title-box">
@@ -578,10 +347,7 @@
578 347
 					<div class="form-title font-weight-500">标本:</div>
579 348
 					<div class="form-title specimen-list">
580 349
 						<div *ngFor="let item of specimenList" class="specimen-item-class">
581
-							{{item.partSource?item.partSource.name:''}} <span *ngIf="item.system">-</span>
582
-							{{item.system?item.system.name:''}} <span *ngIf="item.organ">-</span>
583
-							{{item.organ?item.organ.name:''}} <span *ngIf="item.sample">-</span>
584
-							{{item.sample?item.sample.name:''}}
350
+							{{item.partSource?item.partSource.name:''}}{{item.organ?item.organ.name:''}}{{item.specimenName}}
585 351
 						</div>
586 352
 					</div>
587 353
 				</div>
@@ -598,11 +364,11 @@
598 364
 							</nz-step>
599 365
 							<ng-template #tpl>
600 366
 								<div *ngIf="index==pathologyLogs.length-1" class="step-size">
601
-									<div style="color: #49B856;">{{item.operationType.name}}</div>
367
+									<div style="color: #49B856;">{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
602 368
 									<div style="color:#333;">{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto.name}}</div>
603 369
 								</div>
604 370
 								<div *ngIf="index!=pathologyLogs.length-1" class="step-size">
605
-									<div>{{item.operationType.name}}</div>
371
+									<div>{{item.operationType.name}} {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
606 372
 									<div>{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto.name}}</div>
607 373
 								</div>
608 374
 							</ng-template>
@@ -611,12 +377,155 @@
611 377
 			</div>
612 378
 		</div>
613 379
 		<div class="display_flex justify-content_flex-center bottom-btn">
614
-			<button class="btn btn-right" nz-button nzType="primary" (click)="closeDetailMoadl()">确定</button>
615
-			<button class="btn cancel" nz-button nzType="default" (click)="closeDetailMoadl()">取消</button>
380
+			<button class="btn btn-right" nz-button nzType="primary" (click)="closeDetailMoadl()">知道了</button>
616 381
 		</div>
617 382
 	</div>
618 383
 </div>
619 384
 
385
+<!-- 操作成功/失败提示框 -->
386
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
387
+  [info]="promptInfo" (closeModel)="closeModel()"></app-prompt-modal>
388
+	
389
+
620 390
 <div class="mask-style" *ngIf="isSpinning">
621 391
 	<nz-spin nzSimple class="spin-style"></nz-spin>
392
+</div>
393
+
394
+<!-- 补打 -->
395
+<app-dialog-delete [delModal]="printModal" (hideDelModalEvent)="hidePrintModal()" [btnLoading]="parintLoading"
396
+  (confirmDelEvent)="confirmPrintDel()" [content]="'您确认要重新打印条码吗?'"></app-dialog-delete>
397
+	
398
+<!-- 配送 -->
399
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="distributionModal">
400
+	<div class="modalBody">
401
+		<div class="title">配送信息填写<i class="icon_transport transport-guanbi" (click)="hideDistributionModal()"></i>
402
+		</div>
403
+		<div class="content">
404
+		 <div class="title-class">包内含申请单{{rowData.pathologyFormNum}}张、标本{{rowData.specimenNum}}支,请填写配送人员工号。</div>
405
+		 <form nz-form [formGroup]="validateForm" class="addForm" (ngSubmit)="submitDistributionForm()">
406
+			<nz-form-item>
407
+				<nz-form-label nzRequired nzFor="jobNumber">配送人工号</nz-form-label>
408
+				<nz-form-control nzErrorTip="请输入配送人工号!">
409
+					<input nz-input (ngModelChange)="numberChange($event)" formControlName="jobNumber" placeholder="请输入配送人工号" nzSize="default" />
410
+				</nz-form-control>
411
+			</nz-form-item>
412
+			<nz-form-item class="form-name">
413
+				<nz-form-label style="margin-left: 12px;">配送人姓名</nz-form-label>
414
+				<!-- <nz-form-control nzErrorTip="请输入配送人工号!"> -->
415
+					<div class="job-class">{{distributionName}}</div>
416
+				<!-- </nz-form-control> -->
417
+			</nz-form-item>
418
+			<nz-form-item>
419
+				<nz-form-label nzRequired nzFor="gurop">接收院区</nz-form-label>
420
+				<nz-form-control nzErrorTip="请选择接收院区!">
421
+					<nz-input-group>
422
+						<nz-select class="formItem" (ngModelChange)="changeHospDate($event)" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择接收院区" formControlName="gurop">
423
+							<ng-container *ngFor="let option of hospital">
424
+								<nz-option [nzLabel]="option.hosName" [nzValue]="option.id"></nz-option>
425
+							</ng-container>
426
+						</nz-select>
427
+					</nz-input-group>
428
+				</nz-form-control>
429
+			</nz-form-item>
430
+			<nz-form-item>
431
+				<nz-form-label nzRequired nzFor="department">接收科室</nz-form-label>
432
+				<nz-form-control nzErrorTip="请选择接收科室!">
433
+					<nz-input-group>
434
+						<nz-select class="formItem" [nzDropdownMatchSelectWidth]="false" nzShowSearch nzPlaceHolder="请选择接收科室" formControlName="department">
435
+							<ng-container *ngFor="let option of department">
436
+								<nz-option *ngIf="!isDeptLoading" [nzLabel]="option.dept" [nzValue]="option.id"></nz-option>
437
+							</ng-container>
438
+							<nz-option *ngIf="isDeptLoading" nzDisabled nzCustomContent>
439
+								<i nz-icon nzType="loading" class="loading-icon"></i> 搜索中...
440
+							</nz-option>
441
+						</nz-select>
442
+					</nz-input-group>
443
+				</nz-form-control>
444
+			</nz-form-item>
445
+		 </form>
446
+		</div>
447
+		<div class="display_flex justify-content_flex-center">
448
+			<button class="btn" nz-button nzType="primary" (click)="submitDistributionForm()" [nzLoading]="btnLoading">确定配送</button>
449
+			<button class="btn cancel" nz-button nzType="default" (click)="hideDistributionModal()">取消</button>
450
+		</div>
451
+	</div>
452
+</div>
453
+
454
+<!-- 配送接收 -->
455
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="receptionModal">
456
+	<div class="modalBody">
457
+		<div class="title">配送接收<i class="icon_transport transport-guanbi" (click)="hideReceptionModal()"></i>
458
+		</div>
459
+		<div class="content">
460
+		 <div class="title-class">
461
+			 包内含申请单12张、标本100,请确认接收。
462
+			</div>
463
+		 <form nz-form [formGroup]="validateConnectForm" class="addForm" (ngSubmit)="submitReceptionForm()">
464
+			<nz-form-item>
465
+				<nz-form-label nzRequired nzFor="receptionNumber">接收人工号</nz-form-label>
466
+				<nz-form-control nzErrorTip="请输入接收人工号!">
467
+					<input nz-input (ngModelChange)="receptionChange($event)" formControlName="receptionNumber" placeholder="请输入接收人工号" nzSize="default" />
468
+				</nz-form-control>
469
+			</nz-form-item>
470
+			<nz-form-item class="form-name">
471
+				<nz-form-label style="margin-left: 12px;">接收人姓名</nz-form-label>
472
+				<!-- <nz-form-control nzErrorTip="请输入接收人工号!"> -->
473
+					<div class="job-class">{{receptionName}}</div>
474
+				<!-- </nz-form-control> -->
475
+			</nz-form-item>
476
+			<nz-form-item>
477
+				<nz-form-label nzRequired nzFor="dispatchingNumber">配送人工号</nz-form-label>
478
+				<nz-form-control nzErrorTip="请输入配送人工号!">
479
+					<input nz-input (ngModelChange)="dispatchingChange($event)" formControlName="dispatchingNumber" placeholder="请输入配送人工号" nzSize="default" />
480
+				</nz-form-control>
481
+			</nz-form-item>
482
+			<nz-form-item class="form-name">
483
+				<nz-form-label style="margin-left: 12px;">配送人姓名</nz-form-label>
484
+				<!-- <nz-form-control nzErrorTip="请输入配送人工号!"> -->
485
+					<div class="job-class">{{dispatchingName}}</div>
486
+				<!-- </nz-form-control> -->
487
+			</nz-form-item>
488
+		 </form>
489
+		</div>
490
+		<div class="display_flex justify-content_flex-center">
491
+			<button class="btn" nz-button nzType="primary" (click)="submitReceptionForm()" [nzLoading]="btnConnectLoading">确定接收</button>
492
+			<button class="btn cancel" nz-button nzType="default" (click)="hideReceptionModal()">取消</button>
493
+		</div>
494
+	</div>
495
+</div>
496
+
497
+<!-- 打包并打印 -->
498
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="packModal">
499
+	<div class="modalBody">
500
+		<div class="title">打包并打印<i class="icon_transport transport-guanbi" (click)="hidePackModal()"></i>
501
+		</div>
502
+		<div class="content-modal">
503
+			 本次共扫描单据50张、标本40,是否打包并打印?
504
+		</div>
505
+		<div class="display_flex justify-content_flex-center">
506
+			<button class="btn" nz-button nzType="primary" (click)="submitPackForm()" [nzLoading]="btnPackLoading">打包并打印</button>
507
+			<button class="btn cancel" nz-button nzType="default" (click)="hidePackModal()">取消</button>
508
+		</div>
509
+	</div>
510
+</div>
511
+
512
+<!-- 打印 -->
513
+<div id="report" style="display: none;" *ngIf="printData">
514
+	<div class="monad">
515
+		<div style="font-size: 10px;padding: 2px;">
516
+			<!-- <div> -->
517
+				<div style="display: flex;align-items: center;justify-content: center;">
518
+					<img style="width: 100%;height: 60px;" [src]="printData.qrCode" alt="">
519
+				</div>
520
+				<div style="padding: 1px;">
521
+					<div style="display: flex;flex-wrap: nowrap;margin-bottom:3px;">包码:{{printData.packCode}}</div>
522
+					<div style="display: flex;">打包时间:{{printData.packTime|date:'yyyy-MM-dd HH:mm:ss'}}</div>
523
+					<!-- <div style="display: flex;">打包人:{{printData.packUserDTO?printData.packUserDTO.name:'-'}}</div> -->
524
+					<!-- <div style="display: flex;margin-bottom:6px;">申请单数:{{printData.pathologyFormNum}}</div> -->
525
+					<!-- <div style="display: flex;margin-bottom:6px;">标本数:{{printData.specimenNum}}</div> -->
526
+				</div>
527
+			<!-- </div> -->
528
+			<!-- <div style="display: flex;">打包时间:{{printData.packTime|date:'yyyy-MM-dd HH:mm:ss'}}</div> -->
529
+		</div>
530
+	</div>
622 531
 </div>

+ 251 - 4
src/app/views/pathology/pathology.component.less

@@ -193,6 +193,8 @@
193 193
 			align-items: center;
194 194
 			.btn{
195 195
 				margin-left: 10px;
196
+				background: #49b856;
197
+				color: #fff;
196 198
 			}
197 199
 		}
198 200
 	}
@@ -622,7 +624,7 @@
622 624
 				.ant-form-item {
623 625
 				  margin-bottom: 14px;
624 626
 					display: flex;
625
-					flex-wrap: wrap;
627
+					// flex-wrap: wrap;
626 628
 				  .ant-form-item-label {
627 629
 				    text-align: left;
628 630
 						font-weight: 500;
@@ -666,7 +668,7 @@
666 668
 	width: 100%;
667 669
 	height: 100%;
668 670
 	background: rgba(0, 0, 0, 0.4);
669
-	z-index: 99;
671
+	z-index: 9999;
670 672
 	.pathology-content{
671 673
 		width: 80%;
672 674
 		background: #fff;
@@ -689,14 +691,16 @@
689 691
 		    padding: 0 5px;
690 692
 		  }
691 693
 		}
694
+		.border{
695
+			border: 1px solid #e5e9ed;
696
+		}
692 697
 		.content{
693 698
 			width: 100%;
694 699
 			background: #f9fafb;
695
-			// border: 1px solid #e5e9ed;
696 700
 			border-radius: 5px;
697 701
 			margin-top: 12px;
698 702
 			height: 460px;
699
-			// display: flex;
703
+			display: flex;
700 704
 			// .addForm{
701 705
 				// display: flex;
702 706
 				.font-weight-500{
@@ -707,6 +711,7 @@
707 711
 					width: 100%;
708 712
 				}
709 713
 				.content-item{
714
+					flex: 1;
710 715
 					// height: auto;
711 716
 					// max-height: 460px;
712 717
 					// overflow-y: auto;
@@ -750,6 +755,9 @@
750 755
 							margin-left: 10px;
751 756
 						}
752 757
 					}
758
+					.df-center{
759
+						justify-content: center;
760
+					}
753 761
 					.form-list{
754 762
 						margin-bottom: 10px;
755 763
 						.specimen-list{
@@ -823,6 +831,9 @@
823 831
 				}
824 832
 			// }
825 833
 		}
834
+		.border{
835
+			border: 1px solid #e5e9ed;
836
+		}
826 837
 		.bottom-btn{
827 838
 			margin-top: 10px;
828 839
 			.btn-right{
@@ -833,6 +844,242 @@
833 844
 	
834 845
 }
835 846
 
847
+
848
+.save {
849
+  position: fixed;
850
+  left: 0;
851
+  top: 0;
852
+  width: 100%;
853
+  height: 100%;
854
+  background: rgba(0, 0, 0, 0.4);
855
+  z-index: 99;
856
+
857
+  .modalBody {
858
+    width: 350px;
859
+    background: #fff;
860
+    border-radius: 5px;
861
+    padding: 10px 20px;
862
+    color: #333;
863
+
864
+    .title {
865
+      width: 100%;
866
+      text-align: center;
867
+      font-size: 18px;
868
+      position: relative;
869
+
870
+      i {
871
+        position: absolute;
872
+        right: 0;
873
+        top: 0;
874
+        font-size: 20px;
875
+        color: #666;
876
+        cursor: pointer;
877
+        padding: 0 5px;
878
+      }
879
+    }
880
+
881
+    .content {
882
+      width: 100%;
883
+      height: 117px;
884
+      background: #f9fafb;
885
+      border: 1px solid #e5e9ed;
886
+      border-radius: 5px;
887
+      overflow: hidden;
888
+      margin-top: 12px;
889
+
890
+      div {
891
+        text-align: center;
892
+        margin: 0;
893
+				line-height: 30px;
894
+        &.icon {
895
+          margin-top: 17px;
896
+
897
+          i {
898
+            color: #34b349;
899
+            font-size: 30px !important;
900
+
901
+            &.transport-wenhao {
902
+              color: #f5a523;
903
+            }
904
+
905
+            &.transport-shibai {
906
+              color: #ff3a52;
907
+            }
908
+          }
909
+        }
910
+
911
+        &.defeat {
912
+          color: #333;
913
+          font-size: 18px;
914
+        }
915
+
916
+        &:nth-child(3) {
917
+          font-size: 14px;
918
+          color: #666;
919
+        }
920
+      }
921
+    }
922
+
923
+    button {
924
+      margin-top: 10px;
925
+
926
+      &.btn {
927
+        margin-left: 8px;
928
+      }
929
+    }
930
+  }
931
+
932
+  // 新增
933
+  &.add {
934
+    .modalBody {
935
+      width: 420px;
936
+      height: auto;
937
+			.content-modal{
938
+				height: 150px;
939
+				background: #f9fafb;
940
+				border: 1px solid #e5e9ed;
941
+				border-radius: 5px;
942
+				margin-top: 12px;
943
+				display: flex;
944
+				align-items: center;
945
+				justify-content: center;
946
+			}
947
+      .content {
948
+        width: 100%;
949
+        height: auto;
950
+        padding: 0px 14px 0 14px;
951
+        max-height: 500px;
952
+        overflow-y: auto;
953
+				.title-class{
954
+					border-bottom: 1px solid #e5e9ed;
955
+					line-height: 40px;
956
+					margin-bottom: 15px;
957
+				}
958
+				.ant-select{
959
+					width: 100%;
960
+				}
961
+				.ant-calendar-picker{
962
+					width: 100% !important;
963
+				}
964
+				.list-template__bottom {
965
+				  background: #f9fafb;
966
+				  border: 1px solid #e5e9ed;
967
+				  border-radius: 8px;
968
+				  padding-bottom: 56px;
969
+				  position: relative;
970
+				  .list-template__nzTable {
971
+				    padding: 16px 16px 0;
972
+				
973
+				    .thead {
974
+				      background-image: linear-gradient(to right, @bg-start, @bg-end);
975
+				
976
+				      th {
977
+				        background: transparent;
978
+				        color: #fff;
979
+				        text-align: center;
980
+				      }
981
+				    }
982
+				
983
+				    .ant-table-body {
984
+				      border-bottom: 1px solid #e5e9ed;
985
+				    }
986
+				
987
+				    .ant-table-tbody {
988
+				      tr {
989
+				        text-align: center;
990
+				        color: #333;
991
+				
992
+				        td {
993
+				          border: none;
994
+				
995
+				          &.tab_hover:hover{
996
+				            text-decoration: underline;
997
+				            cursor: pointer;
998
+				          }
999
+				
1000
+				          .coop {
1001
+				            button{
1002
+				              color: #333;
1003
+				            }
1004
+				            span,button {
1005
+				              display: inline-block;
1006
+				              padding: 0 8px;
1007
+				              cursor: pointer;
1008
+				              position: relative;
1009
+				
1010
+				              &::after {
1011
+				                content: "|";
1012
+				                position: absolute;
1013
+				                top: 0;
1014
+				                right: 0;
1015
+				              }
1016
+				
1017
+				              &:hover,
1018
+				              &:active {
1019
+				                color: @primary-color;
1020
+				              }
1021
+				
1022
+				              &:nth-last-child(1) {
1023
+				                &::after {
1024
+				                  content: "";
1025
+				                }
1026
+				              }
1027
+				            }
1028
+				          }
1029
+				        }
1030
+				      }
1031
+				    }
1032
+				  }
1033
+				  .list-template__pagination {
1034
+				    height: 56px;
1035
+				    display: flex;
1036
+				    align-items: center;
1037
+				    position: absolute;
1038
+				    right: 8px;
1039
+				  }
1040
+				}
1041
+				
1042
+        .addForm {
1043
+          .ant-form-item {
1044
+            margin-bottom: 14px;
1045
+
1046
+            .ant-form-item-label {
1047
+              // line-height: 14px;
1048
+              text-align: left;
1049
+							width: 132px;
1050
+            }
1051
+						.job-class{
1052
+							text-align: left;
1053
+							line-height: 40px !important;
1054
+							width: 100%;
1055
+						}
1056
+						.ant-form-item-control-wrapper{
1057
+							width: 100%;
1058
+						}
1059
+          }
1060
+        }
1061
+
1062
+        .editForm {
1063
+          .ant-form-item {
1064
+            margin-bottom: 14px;
1065
+
1066
+            .ant-form-item-label {
1067
+              line-height: 0;
1068
+              text-align: left;
1069
+            }
1070
+          }
1071
+        }
1072
+      }
1073
+
1074
+      button {
1075
+        &:nth-child(1) {
1076
+          margin-right: 20px;
1077
+        }
1078
+      }
1079
+    }
1080
+  }
1081
+}
1082
+
836 1083
 .mask-style{
837 1084
 	width: 100%;
838 1085
 	height: 100%;

File diff suppressed because it is too large
+ 655 - 108
src/app/views/pathology/pathology.component.ts


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

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

+ 282 - 0
src/app/views/pathologyScan/pathologyScan.component.html

@@ -0,0 +1,282 @@
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 *ngIf="dataType=='receive'" class="title-weight">标本接收</div>
12
+						<div *ngIf="dataType=='pack'" class="title-weight">标本打包</div>
13
+						<div *ngIf="dataType?dataType=='receive' : businessType == 'connect'">
14
+							接收申请单数: <span class="weight">{{otherData.pathologyFormNum}}</span>  &nbsp;
15
+							接收标本数: <span class="weight">{{otherData.specimenNum}}</span>  
16
+						</div>
17
+						<div *ngIf="dataType?dataType=='pack' : businessType == 'packaging'">
18
+							打包申请单数: <span class="weight">{{otherData.pathologyFormNum}}</span>  &nbsp;
19
+							打包标本数: <span class="weight">{{otherData.specimenNum}}</span>  
20
+						</div>
21
+					</div>
22
+					
23
+					<div *ngIf="dataType!='pathologyPack' && businessType!='packagLook'">
24
+						<input nz-input id="specimen" [placeholder]="placeholder" [(ngModel)]="specimenCode" (ngModelChange)="codeChange($event)"/>
25
+					</div>
26
+					<div class="error-class">{{errorMsg}}</div>
27
+				</div>
28
+				<div class="list-template">
29
+				  <div class="list-template__content">
30
+						<div class="list-template__bottom" style="padding: 0 !important;">
31
+							<nz-table class="list-template__nzTable" [nzData]="codeData" nzSize="middle" [nzShowPagination]="false"
32
+								[nzLoading]="tableLoading">
33
+								<thead>
34
+									<tr class="thead">
35
+										<th>申请单号 | 申请科室</th>
36
+										<th>患者姓名 | 住院号</th>
37
+										<th>标本数</th>
38
+										<th>部位</th>
39
+										<th>标本名称</th>
40
+									</tr>
41
+								</thead>
42
+								<tbody>
43
+									<tr *ngFor="let data of codeData let index = index">
44
+										<td>
45
+											<div>{{ data.applyCode}}</div>
46
+											<div>{{ data.patientDTO.department.dept}}</div>
47
+										</td>
48
+										<td>
49
+											<div>{{ data.patientDTO.patientName}}</div>
50
+											<div>{{ data.patientDTO.residenceNo}}</div>
51
+										</td>
52
+										<td>{{ data.specimenNum}}</td>
53
+										<td>{{ data.takePart}}</td>
54
+										<td>
55
+											<div *ngFor="let item of data.pathologySpecimenDTOList">
56
+												{{item.partSource?item.partSource.name:''}}{{item.organ?item.organ.name:''}}{{item.specimenName}}
57
+											</div>
58
+										</td>
59
+									</tr>
60
+								</tbody>
61
+							</nz-table>
62
+							<div class="list-template__pagination">
63
+							  <nz-pagination [(nzPageIndex)]="pageReceptionIndex" [(nzTotal)]="listReceptionLength" nzShowSizeChanger [(nzPageSize)]="pageSize"
64
+							    (nzPageIndexChange)="pageChange()" (nzPageSizeChange)="pageChange()">
65
+							  </nz-pagination>
66
+							</div>
67
+						</div>
68
+					</div>
69
+				</div>
70
+			</div>
71
+		</div>
72
+		<div class="display_flex justify-content_flex-center bottom-btn">
73
+			<button class="btn btn-right" *ngIf="dataType?dataType=='receive' : businessType == 'connect'" [disabled]="codeData.length==0" nz-button nzType="primary" (click)="submitFixationForm()" [nzLoading]="btnLoading">交接完成</button>
74
+			<button class="btn btn-right" *ngIf="dataType?dataType=='pack' : businessType == 'packaging'" [disabled]="codeData.length==0" nz-button nzType="primary" (click)="submitScanForm()" [nzLoading]="btnLoading">扫描完成</button>
75
+			<button class="btn btn-right" *ngIf="dataType=='pathologyPack'" nz-button nzType="primary" [disabled]="codeData.length==0" (click)="connectAccomplish()" [nzLoading]="btnMultiLoading">交接完成</button>
76
+			<button class="btn cancel" *ngIf="dataType=='pathologyPack'" nz-button nzType="default" (click)="hideSpecimenModal()">取消</button>
77
+			<button class="btn cancel" *ngIf="dataType?dataType=='pack' : businessType == 'packaging'" nz-button nzType="default" (click)="hideSpecimenModal()">取消</button>
78
+			<button class="btn btn-right" *ngIf="businessType=='packagLook'" nz-button nzType="primary" (click)="hideSpecimenModal()">知道了</button>
79
+		</div>
80
+	</div>
81
+</div>
82
+</div>
83
+
84
+<!-- 多支标本提示 -->
85
+<div class="multi add display_flex align-items_center justify-content_flex-center" *ngIf="multiModal">
86
+	<div class="pathology-content">
87
+		<div class="title">多支标本提示
88
+		<i class="icon_transport transport-guanbi" (click)="hideMultiModal()"></i></div>
89
+		<div class="content border">
90
+			<div class="content-item">
91
+				<div class="center">提示:{{scanCodeData.patientName}}的申请单含<span>{{codeMultiData.length}}</span>支标本,您已扫描<span>{{muArr.length}}</span>支</div>
92
+				<div class="disp-fl df-center">
93
+					<div>
94
+						<input nz-input id="multiSpecimen" placeholder="可扫描物理标本条码及包码" [(ngModel)]="specimenMultiCode" (ngModelChange)="codeMultiChange($event)"/>
95
+					</div>
96
+					<div class="error-class">{{errorMultiMsg}}</div>
97
+				</div>
98
+				<div class="list-template">
99
+				  <div class="list-template__content">
100
+						<div class="list-template__bottom" style="padding: 0 !important;">
101
+							<nz-table class="list-template__nzTable" [nzData]="codeMultiData" nzSize="middle" [nzShowPagination]="false"
102
+								[nzLoading]="tableLoading">
103
+								<thead>
104
+									<tr class="thead">
105
+										<th>序号</th>
106
+										<th>条码号</th>
107
+										<th>标本名称</th>
108
+										<th *ngIf="dataType=='receive'">已接收 | 未接收</th>
109
+										<th *ngIf="dataType=='pack'">已扫描 | 未扫描</th>
110
+									</tr>
111
+								</thead>
112
+								<tbody>
113
+									<tr *ngFor="let data of codeMultiData let index = index">
114
+										<td>{{index+1}}</td>
115
+										<td>{{ data.specimenCode}}</td>
116
+										<td>
117
+											{{data.partSource?data.partSource.name:''}}{{data.organ?data.organ.name:''}}{{data.specimenName}}
118
+										</td>
119
+										<td *ngIf="dataType=='receive'">
120
+											<div *ngIf="data.isScan==1">已接收</div>
121
+											<div *ngIf="data.isScan==0" class="red">未接收</div>
122
+										</td>
123
+										<td *ngIf="dataType=='pack'">
124
+											<div *ngIf="data.isScan==1">已扫描</div>
125
+											<div *ngIf="data.isScan==0" class="red">未扫描</div>
126
+										</td>
127
+									</tr>
128
+								</tbody>
129
+							</nz-table>
130
+						</div>
131
+					</div>
132
+				</div>
133
+			</div>
134
+		</div>
135
+		<div class="display_flex justify-content_flex-center bottom-btn">
136
+			<button class="btn btn-right" *ngIf="dataType=='receive'" nz-button nzType="primary" (click)="submitMultiForm()" [nzLoading]="btnMultiLoading">确认接收</button>
137
+			<button class="btn btn-right" *ngIf="dataType=='pack'" nz-button nzType="primary" (click)="submitMultiScanForm()" [nzLoading]="btnMultiLoading">扫描完成</button>
138
+			<button class="btn cancel" nz-button nzType="default" (click)="hideMultiModal()">取消</button>
139
+		</div>
140
+	</div>
141
+</div>
142
+
143
+
144
+
145
+<!-- 操作成功/失败提示框 -->
146
+<app-prompt-modal *ngIf="promptModalShow" [content]="promptContent" [success]="ifSuccess" [show]="promptModalShow"
147
+  [info]="promptInfo" (closeModel)="closeModel()"></app-prompt-modal>
148
+	
149
+
150
+<div class="mask-style" *ngIf="isSpinning">
151
+	<nz-spin nzSimple class="spin-style"></nz-spin>
152
+</div>
153
+
154
+<!-- 人员交接 -->
155
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="connectModal">
156
+	<div class="modalBody">
157
+		<div class="title">人员交接<i class="icon_transport transport-guanbi" (click)="hideConnectModal()"></i>
158
+		</div>
159
+		<div class="content">
160
+		 <div class="title-class">
161
+			 <div>配送人应送达:单据{{mustReceived.pathologyFormNum}}张、
162
+			 标本{{mustReceived.specimenNum}}、速冻标本{{mustReceived.rapidityNum}}</div>
163
+			 <div>本次共接收单据
164
+			 <span [ngClass]="{'red': currReceived.pathologyFormNum < mustReceived.pathologyFormNum}">
165
+				 {{currReceived.pathologyFormNum}}
166
+			 </span>张、
167
+			 标本<span [ngClass]="{'red': currReceived.specimenNum<mustReceived.specimenNum}">{{currReceived.specimenNum}}</span>、速冻标本
168
+			 <span [ngClass]="{'red': currReceived.rapidityNum<mustReceived.rapidityNum}">{{currReceived.rapidityNum}}</span>
169
+			 </div>
170
+			</div>
171
+		 <form nz-form [formGroup]="validateConnectForm" class="addForm" (ngSubmit)="submitConnectForm()">
172
+			<nz-form-item>
173
+				<nz-form-label nzRequired nzFor="receptionNumber">接收人工号</nz-form-label>
174
+				<nz-form-control nzErrorTip="请输入接收人工号!">
175
+					<input nz-input (ngModelChange)="receptionChange($event)" formControlName="receptionNumber" placeholder="请输入接收人工号" nzSize="default" />
176
+				</nz-form-control>
177
+			</nz-form-item>
178
+			<nz-form-item class="form-name">
179
+				<nz-form-label style="margin-left: 12px;">接收人姓名</nz-form-label>
180
+				<!-- <nz-form-control nzErrorTip="请输入接收人工号!"> -->
181
+					<div class="job-class">{{receptionName}}</div>
182
+				<!-- </nz-form-control> -->
183
+			</nz-form-item>
184
+			<nz-form-item>
185
+				<nz-form-label nzRequired nzFor="dispatchingNumber">配送人工号</nz-form-label>
186
+				<nz-form-control nzErrorTip="请输入配送人工号!">
187
+					<input nz-input (ngModelChange)="dispatchingChange($event)" formControlName="dispatchingNumber" 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
+				<!-- <nz-form-control nzErrorTip="请输入配送人工号!"> -->
193
+					<div class="job-class">{{dispatchingName}}</div>
194
+				<!-- </nz-form-control> -->
195
+			</nz-form-item>
196
+		 </form>
197
+		</div>
198
+		<div class="display_flex justify-content_flex-center">
199
+			<button class="btn" nz-button nzType="primary" (click)="submitConnectForm()" [nzLoading]="btnConnectLoading">确定</button>
200
+			<button class="btn cancel" nz-button nzType="default" (click)="hideConnectModal()">取消</button>
201
+		</div>
202
+	</div>
203
+</div>
204
+
205
+<!-- 配送接收 -->
206
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="receptionModal">
207
+	<div class="modalBody">
208
+		<div class="title">配送接收<i class="icon_transport transport-guanbi" (click)="hideReceptionModal()"></i>
209
+		</div>
210
+		<div class="content">
211
+		 <div class="title-class">
212
+			 包内含申请单{{otherData.pathologyFormNum}}张、标本{{otherData.specimenNum}},请确认接收。
213
+			</div>
214
+		 <form nz-form [formGroup]="validateConnectForm" class="addForm" (ngSubmit)="submitReceptionForm()">
215
+			<nz-form-item>
216
+				<nz-form-label nzRequired nzFor="receptionNumber">接收人工号</nz-form-label>
217
+				<nz-form-control nzErrorTip="请输入接收人工号!">
218
+					<input nz-input (ngModelChange)="receptionChange($event)" formControlName="receptionNumber" placeholder="请输入接收人工号" nzSize="default" />
219
+				</nz-form-control>
220
+			</nz-form-item>
221
+			<nz-form-item class="form-name">
222
+				<nz-form-label style="margin-left: 12px;">接收人姓名</nz-form-label>
223
+				<!-- <nz-form-control nzErrorTip="请输入接收人工号!"> -->
224
+					<div class="job-class">{{receptionName}}</div>
225
+				<!-- </nz-form-control> -->
226
+			</nz-form-item>
227
+			<nz-form-item>
228
+				<nz-form-label nzRequired nzFor="dispatchingNumber">配送人工号</nz-form-label>
229
+				<nz-form-control nzErrorTip="请输入配送人工号!">
230
+					<input nz-input (ngModelChange)="dispatchingChange($event)" formControlName="dispatchingNumber" placeholder="请输入配送人工号" nzSize="default" />
231
+				</nz-form-control>
232
+			</nz-form-item>
233
+			<nz-form-item class="form-name">
234
+				<nz-form-label style="margin-left: 12px;">配送人姓名</nz-form-label>
235
+				<!-- <nz-form-control nzErrorTip="请输入配送人工号!"> -->
236
+					<div class="job-class">{{dispatchingName}}</div>
237
+				<!-- </nz-form-control> -->
238
+			</nz-form-item>
239
+		 </form>
240
+		</div>
241
+		<div class="display_flex justify-content_flex-center">
242
+			<button class="btn" nz-button nzType="primary" (click)="submitReceptionForm()" [nzLoading]="btnConnectLoading">确定接收</button>
243
+			<button class="btn cancel" nz-button nzType="default" (click)="hideReceptionModal()">取消</button>
244
+		</div>
245
+	</div>
246
+</div>
247
+
248
+<!-- 打包并打印 -->
249
+<div class="save add display_flex align-items_center justify-content_flex-center" *ngIf="packModal">
250
+	<div class="modalBody">
251
+		<div class="title">打包并打印<i class="icon_transport transport-guanbi" (click)="hidePackModal()"></i>
252
+		</div>
253
+		<div class="content-modal">
254
+			 本次共扫描单据{{otherData.pathologyFormNum}}张、标本{{otherData.specimenNum}},是否打包并打印?
255
+		</div>
256
+		<div class="display_flex justify-content_flex-center">
257
+			<button class="btn" nz-button nzType="primary" (click)="submitPackForm()" [nzLoading]="btnPackLoading">打包并打印</button>
258
+			<button class="btn cancel" nz-button nzType="default" (click)="hidePackModal()">取消</button>
259
+		</div>
260
+	</div>
261
+</div>
262
+
263
+<!-- 打印 -->
264
+<div id="report" style="display: none;">
265
+	<div class="monad">
266
+		<div style="font-size: 10px;padding: 2px;">
267
+			<!-- <div> -->
268
+				<div style="display: flex;align-items: center;justify-content: center;">
269
+					<img style="width: 100%;height: 60px;" [src]="printData.qrCode" alt="">
270
+				</div>
271
+				<div style="padding: 1px;">
272
+					<div style="display: flex;flex-wrap: nowrap;margin-bottom:3px;">包码:{{printData.packCode}}</div>
273
+					<div style="display: flex;">打包时间:{{printData.packTime|date:'yyyy-MM-dd HH:mm:ss'}}</div>
274
+					<!-- <div style="display: flex;">打包人:{{printData.packUserDTO?printData.packUserDTO.name:'-'}}</div> -->
275
+					<!-- <div style="display: flex;margin-bottom:6px;">申请单数:{{printData.pathologyFormNum}}</div> -->
276
+					<!-- <div style="display: flex;margin-bottom:6px;">标本数:{{printData.specimenNum}}</div> -->
277
+				</div>
278
+			<!-- </div> -->
279
+			<!-- <div style="display: flex;">打包时间:{{printData.packTime|date:'yyyy-MM-dd HH:mm:ss'}}</div> -->
280
+		</div>
281
+	</div>
282
+</div>

File diff suppressed because it is too large
+ 1290 - 0
src/app/views/pathologyScan/pathologyScan.component.less


File diff suppressed because it is too large
+ 1194 - 0
src/app/views/pathologyScan/pathologyScan.component.ts


+ 17 - 0
src/app/views/pathologyScan/pathologyScan.module.ts

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

+ 29 - 25
src/app/views/round-robin/round-robin.component.ts

@@ -189,23 +189,23 @@ export class RoundRobinComponent implements OnInit {
189 189
   depting = "";
190 190
   searchDepartment(dept, type) {
191 191
     this.depting = dept;
192
-		let typeId = null
192
+		let postData={
193
+			department: {
194
+				dept,
195
+				hospital: { id: this.hosId },
196
+				cascadeHosId: this.hosId,
197
+				type: { id: null },
198
+			},
199
+			idx: 0,
200
+			sum: 5,
201
+		}
193 202
 		if(this.selectedTasktype.associationType.value == "specimen"){
194
-			typeId = 282 
203
+			postData.department.type.id = 282
204
+			delete postData.department.hospital
195 205
 		}else{
196
-			typeId = 383
206
+			postData.department.type.id = 383
207
+			delete postData.department.cascadeHosId
197 208
 		}
198
-    let postData = {
199
-      department: {
200
-        dept,
201
-        type: { id: typeId },
202
-        hospital: {
203
-          id: this.hosId,
204
-        },
205
-      },
206
-      idx: 0,
207
-      sum: 5,
208
-    };
209 209
     this.mainService
210 210
       .getFetchDataList("data", "department", postData)
211 211
       .subscribe((result) => {
@@ -313,6 +313,7 @@ export class RoundRobinComponent implements OnInit {
313 313
   addModal() {
314 314
     this.add = true; //新增
315 315
     this.modal = true;
316
+		this.selectedTasktype = null;
316 317
     this.initForm();
317 318
   }
318 319
   //关闭新增/编辑弹框
@@ -601,21 +602,24 @@ export class RoundRobinComponent implements OnInit {
601 602
       targetDept.forEach((item, index) => {
602 603
         targetDeptArr.push({ id: item, dept: targetDeptShow[index] });
603 604
       });
604
-			let typeId = null
605
+			let query={
606
+				department: {
607
+					hospital: { id: data.hospital },
608
+					cascadeHosId:data.hospital,
609
+					type: { id: null },
610
+				},
611
+				idx: 0,
612
+				sum: 20,
613
+			}
605 614
 			if(this.selectedTasktype.associationType.value == "specimen"){
606
-				typeId = 282
615
+				query.department.type.id = 282
616
+				delete query.department.hospital
607 617
 			}else{
608
-				typeId = 383
618
+				query.department.type.id = 383
619
+				delete query.department.cascadeHosId
609 620
 			}
610 621
       this.mainService
611
-        .getFetchDataList("data", "department", {
612
-          department: {
613
-            hospital: { id: data.hospital },
614
-            type: { id: typeId },
615
-          },
616
-          idx: 0,
617
-          sum: 20,
618
-        })
622
+        .getFetchDataList("data", "department", query)
619 623
         .subscribe((data) => {
620 624
           this.maskFlagLoading2 = false;
621 625
           if (!this.maskFlagLoading1 && !this.maskFlagLoading2) {

+ 27 - 33
src/app/views/specimen-room-view/specimen-room-view.component.html

@@ -82,15 +82,15 @@
82 82
 									<span class="sign-red" *ngIf="item.intraoperativeRapidity==1">速冻</span>
83 83
 									{{item.applyCode || '无'}}
84 84
 								</span>
85
-                <span title="姓名" class="weight">{{item.patientDTO.patientName || '无'}}</span>
85
+                <span title="姓名" class="weight text-right">{{item.patientDTO.patientName || '无'}}</span>
86 86
               </div>
87 87
               <div class="pharmacy-main__selectionItem">
88
-                <span title="部位">部位:{{item.takePart || '无'}}</span>
89
-                <span title="标本数">标本数:{{item.specimenNum || '无'}}</span>
88
+                <span class="text-left" [title]="item.takePart">部位:{{item.takePart || '无'}}</span>
89
+                <span class="text-right" title="标本数">标本数:{{item.specimenNum || '无'}}</span>
90 90
               </div>
91 91
               <div class="pharmacy-main__selectionItem">
92 92
                 <span title="手术间">手术间:{{item.surgeryDeptDTO.dept || '无'}}</span>
93
-                <span title="离体时间">离体时间:{{item.inVitroTime?(item.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
93
+                <span class="text-right" title="离体时间">离体时间:{{item.inVitroTime?(item.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
94 94
               </div>
95 95
             </div>
96 96
           </div>
@@ -172,15 +172,15 @@
172 172
             			<span class="sign-red" *ngIf="item.intraoperativeRapidity==1">速冻</span>
173 173
             			{{item.applyCode || '无'}}
174 174
             		</span>
175
-                <span title="姓名" class="weight">{{item.patientDTO.patientName || '无'}}</span>
175
+                <span title="姓名" class="weight text-right">{{item.patientDTO.patientName || '无'}}</span>
176 176
               </div>
177 177
               <div class="pharmacy-main__selectionItem">
178
-                <span title="部位">部位:{{item.takePart || '无'}}</span>
179
-                <span title="标本数">标本数:{{item.specimenNum || '无'}}</span>
178
+                <span class="text-left" [title]="item.takePart">部位:{{item.takePart || '无'}}</span>
179
+                <span class="text-right" title="标本数">标本数:{{item.specimenNum || '无'}}</span>
180 180
               </div>
181 181
               <div class="pharmacy-main__selectionItem">
182 182
                 <span title="离体时间">离体时间:{{item.inVitroTime?(item.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
183
-								<span title="固定时间">固定时间:{{item.fixationTime?(item.fixationTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
183
+								<span class="text-right" title="固定时间">固定时间:{{item.fixationTime?(item.fixationTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
184 184
               </div>
185 185
             </div>
186 186
           </div>
@@ -262,19 +262,19 @@
262 262
             			<span class="sign-red" *ngIf="item.intraoperativeRapidity==1">速冻</span>
263 263
             			{{item.applyCode || '无'}}
264 264
             		</span>
265
-                <span title="姓名" class="weight">{{item.patientDTO.patientName || '无'}}</span>
265
+                <span title="姓名" class="weight text-right">{{item.patientDTO.patientName || '无'}}</span>
266 266
               </div>
267 267
               <div class="pharmacy-main__selectionItem">
268
-                <span title="部位">部位:{{item.takePart || '无'}}</span>
269
-                <span title="标本数">标本数:{{item.specimenNum || '无'}}</span>
268
+                <span class="text-left" [title]="item.takePart">部位:{{item.takePart || '无'}}</span>
269
+                <span class="text-right" title="标本数">标本数:{{item.specimenNum || '无'}}</span>
270 270
               </div>
271 271
               <div class="pharmacy-main__selectionItem">
272 272
                 <span title="离体时间">离体时间:{{item.inVitroTime?(item.inVitroTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
273
-            		<span title="固定时间">固定时间:{{item.fixationTime?(item.fixationTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
273
+            		<span class="text-right" title="固定时间">固定时间:{{item.fixationTime?(item.fixationTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
274 274
               </div>
275 275
 							<div class="pharmacy-main__selectionItem">
276 276
 							  <span title="配送人">配送人:{{item.deliveryUserDTO?item.deliveryUserDTO.name:'无'}}</span>
277
-								<span title="离科时间">离科时间:{{item.leaveDeptTime?(item.leaveDeptTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
277
+								<span class="text-right" title="离科时间">离科时间:{{item.leaveDeptTime?(item.leaveDeptTime|date:'yyyy-MM-dd HH:mm:ss'):'无'}}</span>
278 278
 							</div>
279 279
             </div>
280 280
           </div>
@@ -487,23 +487,23 @@
487 487
 				</div>
488 488
 				
489 489
 				<div class="form-list">
490
-					<div class="form-title font-weight-500">病摘要:</div>
490
+					<div class="form-title font-weight-500">病摘要:</div>
491 491
 					<div class="indent">{{codeData.medicalRecords||'无'}}</div>
492 492
 				</div>
493 493
 				<div class="form-list">
494 494
 					<div class="form-title font-weight-500">手术方案:</div>
495 495
 					<div class="indent">{{codeData.surgicalPlan||'无'}}</div>
496 496
 				</div>
497
-				<div class="form-list">
497
+	<!-- 			<div class="form-list">
498 498
 					<div class="form-title font-weight-500">术中所见:</div>
499 499
 					<div class="indent">{{codeData.intraoperativeFindings||'无'}}</div>
500
-				</div>
500
+				</div> -->
501 501
 				<div class="form-title-box">
502 502
 					<div class="form-title"><span class="font-weight-500">标本类型:</span>{{codeData.specimenType?codeData.specimenType.name:'无'}}</div>
503
-					<div class="form-title"><span class="font-weight-500">标本数:</span>{{codeData.specimenNum?codeData.specimenNum:'无'}}</div>
503
+					<div class="form-title"><span class="font-weight-500">标本数:</span>{{codeData.specimenNum?codeData.specimenNum:'无'}}</div>
504 504
 				</div>
505 505
 				<div class="form-title-box">
506
-					<div class="form-title"><span class="font-weight-500">采取部位:</span>{{codeData.takePart||'无'}}</div>
506
+					<div class="form-title"><span class="font-weight-500">部位:</span>{{codeData.takePart||'无'}}</div>
507 507
 					<div class="form-title"><span class="font-weight-500">取标本位置:</span>{{codeData.surgeryDeptDTO?codeData.surgeryDeptDTO.dept:''}}</div>
508 508
 					<div class="form-title"><span class="font-weight-500">取材医生:</span>{{codeData.surgeryDoctorDTO?codeData.surgeryDoctorDTO.name : '-'}}</div>
509 509
 				</div>
@@ -538,10 +538,7 @@
538 538
 										<td>{{index+1}}</td>
539 539
 										<td>{{ data.specimenCode}}</td>
540 540
 										<td>
541
-											{{data.partSource?data.partSource.name:''}} <span *ngIf="data.system">-</span>
542
-											{{data.system?data.system.name:''}} <span *ngIf="data.organ">-</span>
543
-											{{data.organ?data.organ.name:''}} <span>-</span>
544
-											{{data.sample?data.sample.name:data.specimenName}}
541
+											{{data.partSource?data.partSource.name:''}}{{data.organ?data.organ.name:''}}{{data.specimenName}}
545 542
 										</td>
546 543
 									</tr>
547 544
 								</tbody>
@@ -643,22 +640,22 @@
643 640
 				</div>
644 641
 				
645 642
 				<div class="form-list">
646
-					<div class="form-title font-weight-500">病摘要:</div>
643
+					<div class="form-title font-weight-500">病摘要:</div>
647 644
 					<div class="indent">{{detailsData.medicalRecords||'无'}}</div>
648 645
 				</div>
649 646
 				<div class="form-list">
650 647
 					<div class="form-title font-weight-500">手术方案:</div>
651 648
 					<div class="indent">{{detailsData.surgicalPlan||'无'}}</div>
652 649
 				</div>
653
-				<div class="form-list">
650
+	<!-- 			<div class="form-list">
654 651
 					<div class="form-title font-weight-500">术中所见:</div>
655 652
 					<div class="indent">{{detailsData.intraoperativeFindings||'无'}}</div>
656
-				</div>
653
+				</div> -->
657 654
 
658 655
 				<div class="form-title-box">
659 656
 					<div class="form-title"><span class="font-weight-500">标本类型:</span>{{detailsData.specimenType.name||'无'}}</div>
660
-					<div class="form-title"><span class="font-weight-500">标本数:</span>{{detailsData.specimenNum||'无'}}</div>
661
-					<div class="form-title"><span class="font-weight-500">采取部位:</span>{{detailsData.takePart||'无'}}</div>
657
+					<div class="form-title"><span class="font-weight-500">标本数:</span>{{detailsData.specimenNum||'无'}}</div>
658
+					<div class="form-title"><span class="font-weight-500">部位:</span>{{detailsData.takePart||'无'}}</div>
662 659
 				</div>
663 660
 				
664 661
 				<div class="form-title-box">
@@ -671,10 +668,7 @@
671 668
 					<div class="form-title font-weight-500">标本:</div>
672 669
 					<div class="form-title specimen-list">
673 670
 						<div *ngFor="let item of specimenList" class="specimen-item-class">
674
-							{{item.partSource?item.partSource.name:''}} <span *ngIf="item.system">-</span>
675
-							{{item.system?item.system.name:''}} <span *ngIf="item.organ">-</span>
676
-							{{item.organ?item.organ.name:''}} <span>-</span>
677
-							{{item.sample?item.sample.name:item.specimenName}}
671
+							{{item.partSource?item.partSource.name:''}}{{item.organ?item.organ.name:''}}{{item.specimenName}}
678 672
 						</div>
679 673
 					</div>
680 674
 				</div>
@@ -691,11 +685,11 @@
691 685
 							</nz-step>
692 686
 							<ng-template #tpl>
693 687
 								<div *ngIf="index==pathologyLogs.length-1" class="step-size">
694
-									<div style="color: #49B856;">{{item.operationType.name}}</div>
688
+									<div style="color: #49B856;">{{item.operationType.name}}  {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
695 689
 									<div style="color:#333;">{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto.name}}</div>
696 690
 								</div>
697 691
 								<div *ngIf="index!=pathologyLogs.length-1" class="step-size">
698
-									<div>{{item.operationType.name}}</div>
692
+									<div>{{item.operationType.name}}  {{item.handoverUserDto?item.handoverUserDto.name:''}}</div>
699 693
 									<div>{{item.createTime|date:'yyyy-MM-dd HH:mm:ss'}} {{item.operationUserDto.name}}</div>
700 694
 								</div>
701 695
 							</ng-template>

+ 22 - 4
src/app/views/specimen-room-view/specimen-room-view.component.less

@@ -104,7 +104,7 @@
104 104
         font-size: 16px;
105 105
 				display: flex;
106 106
 				.pharmacy-title{
107
-					width: 160px;
107
+					width: 170px;
108 108
 					font-weight: 600;
109 109
 					font-size: 22px;
110 110
 				}
@@ -211,8 +211,9 @@
211 211
       display: flex;
212 212
       flex-direction: column;
213 213
       background-color: #f9fafb;
214
-      flex: 1;
215
-      margin: 0 4px;
214
+      // flex: 1;
215
+			width: 33%;
216
+      // margin: 0 4px;
216 217
       box-sizing: border-box;
217 218
       border: 1px solid #e5e9ed;
218 219
       // 标题 start
@@ -335,6 +336,12 @@
335 336
               justify-content: space-between;
336 337
               padding: 0 8px;
337 338
 							margin-bottom: 5px;
339
+							// &:nth-of-typespan(1){
340
+							// 	text-align: left;
341
+							// }
342
+							// &:nth-of-typespan(2){
343
+							// 	text-align: right;
344
+							// }
338 345
 							.weight{
339 346
 								font-weight: 500;
340 347
 								.sign-red{
@@ -351,9 +358,20 @@
351 358
                   justify-content: flex-start;
352 359
                 }
353 360
               }
361
+							.text-left{
362
+								text-align: left;
363
+							}
364
+							.text-right{
365
+								text-align: right;
366
+							}
354 367
               span {
355 368
                 color: #666;
356
-                font-size: 12px;
369
+                font-size: 14px;
370
+								width: 50%;
371
+								white-space: nowrap;
372
+								overflow: hidden;
373
+								text-overflow: ellipsis;
374
+								// flex: 1;
357 375
               }
358 376
               strong {
359 377
                 color: #333;

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

@@ -655,7 +655,7 @@ export class SpecimenRoomViewComponent implements OnInit, OnDestroy {
655 655
     }
656 656
     let postData = {
657 657
 			idx: 0,
658
-			sum: 9999,
658
+			sum: 50,
659 659
 			pathologyForm:{
660 660
 				detailsType: type,
661 661
 				keyWords:searchKey,

BIN
src/assets/images/yc_logo.png