3 次代码提交 97eb7f8430 ... aba960187e

作者 SHA1 备注 提交日期
  maotao aba960187e 试管类型开发 1 周之前
  maotao 0cdbb52669 Merge branch 'master' of http://git.dashitech.com/seimin/zy-wechat 1 周之前
  maotao cb992f1539 拉取代码 1 周之前

+ 12 - 1
components/bigScreen/bigScreen.vue

@@ -510,7 +510,18 @@
510 510
       },
511 511
       // 底部扫描
512 512
       Scanning(qrcodePrefix = '') {
513
-				// this.ScanningCommon('', '250515541895@_1');
513
+				// 标本码
514
+				// this.ScanningCommon('', '250522891576@_1');
515
+				
516
+				// 快捷建单-轮巡工单码
517
+				// this.ScanningCommon('', '3330ec8e-76eb-413e-b000-995f08d2ff96');
518
+				
519
+				// 中转科室码--金银湖流转中心
520
+				// this.ScanningCommon('', '7d047a94-e102-446c-b477-94f977faaebd');
521
+				
522
+				// 终点科室核对码--本部住院检验科
523
+				// this.ScanningCommon('', '95c5de27-c05f-11ea-8cfe-000c29097622');
524
+				
514 525
         if (!this.SMFlag) {
515 526
           return;
516 527
         }

+ 1 - 1
components/specimenListItem/specimenListItem.vue

@@ -13,7 +13,7 @@
13 13
     <view class="page_item_cont">
14 14
       <view class="page_item_cont_T">
15 15
         <view class="page_item_cont_title">
16
-          <view style="width: 10em;"> {{item.stype ? item.stype.name : '无'}} </view>
16
+          <view style="width: 10em;"> {{item.stype ? item.stype.name : '无'}} <text v-if="item.tubeType">、</text> {{item.tubeType && item.tubeType.name}}</view>
17 17
           <view class="text_big">{{ item.scode || "无" }}</view>
18 18
         </view>
19 19
         <view class="page_item_cont_title">

+ 1 - 1
manifest.json

@@ -1,5 +1,5 @@
1 1
 {
2
-    /* "name" : "病理全流程", */
2
+    // "name" : "大势科技",
3 3
     "name" : "",
4 4
     "appid" : "__UNI__9F2011E",
5 5
     "description" : "",

+ 16 - 0
pages.json

@@ -776,6 +776,22 @@
776 776
 		      "titleNView": false
777 777
 		    }
778 778
 		  }
779
+		},
780
+		{
781
+		  "path": "pages/viewSpe/viewSpe",
782
+		  "style": {
783
+		    "h5": {
784
+		      "titleNView": false
785
+		    }
786
+		  }
787
+		},
788
+		{
789
+		  "path": "pages/speError/speError",
790
+		  "style": {
791
+		    "h5": {
792
+		      "titleNView": false
793
+		    }
794
+		  }
779 795
 		}
780 796
   ],
781 797
   "globalStyle": {

+ 63 - 8
pages/checkAfterBigScreen/checkAfterBigScreen.vue

@@ -19,9 +19,21 @@
19 19
           检验科室标本数量:
20 20
         </view>
21 21
         <view class="page_item_cont_title" v-for="(item, i) in info.data" :key="i">
22
-          <view>{{item[1]}}</view>
23
-          <view class="text_big" @click="goToSpeDetail(item[1],item[2])"><text class="underline">{{item[3]}}</text>只
24
-          </view>
22
+					<uni-collapse :border="false">
23
+						<uni-collapse-item titleBorder="none">
24
+							<template v-slot:title>
25
+								<view class="page_item_cont_title_coll">
26
+									<view>{{item.deptName}}</view>
27
+									<view class="text_big" @click.stop="goToSpeDetail(item.deptName,item.deptQrCode)"><text class="underline">{{item.speCount}}</text>只</view>
28
+								</view>
29
+							</template>
30
+							<view class="content">
31
+								<view class="list" v-for="x in item.tubeTypeData" @click="viewSpe(item.deptName,item.deptQrCode,x.tubeTypeId)">
32
+									{{x.tubeTypeName}}:<text class="underline-item">{{x.speCount}}</text>
33
+								</view>
34
+							</view>
35
+						</uni-collapse-item>
36
+					</uni-collapse>
25 37
         </view>
26 38
       </view>
27 39
     </view>
@@ -61,6 +73,11 @@
61 73
       };
62 74
     },
63 75
     methods: {
76
+			viewSpe(deptName, qrCode, id){
77
+				uni.navigateTo({
78
+				  url: `../viewSpe/viewSpe?deptName=${deptName}&workOrderId=${this.queryObj.ids}&deptCode=${qrCode}&tubeTypeId=${id}&isScan=1&specimensCheck=1&noScan=1`,
79
+				});
80
+			},
64 81
       // 填写交接人工号-确认
65 82
       hosOk(data) {
66 83
         console.log(data);
@@ -224,17 +241,25 @@
224 241
   };
225 242
 </script>
226 243
 <style lang="less" scoped>
244
+	/deep/ .uni-collapse-item--border{
245
+		border-bottom-color: #fff !important;
246
+	}
247
+	
248
+	/deep/ .uni-collapse-item__title-arrow{
249
+		margin-right: 0 !important;
250
+	}
227 251
   .checkAfterScanning {
228 252
     .checkAfterScanning_title {
229 253
       padding: 50rpx 0;
230 254
       font-size: 46rpx;
231 255
       font-weight: 550;
232 256
       text-align: center;
233
-      border-bottom: 1px solid #ccc;
257
+      // border-bottom: 1px solid #ccc;
234 258
     }
235 259
 
236 260
     .page_item_cont {
237
-      min-height: 90rpx;
261
+      height: 73vh;
262
+      overflow-y: auto;
238 263
       padding: 0 20rpx;
239 264
       text-align: left;
240 265
       position: relative;
@@ -253,18 +278,41 @@
253 278
           text-decoration: underline;
254 279
         }
255 280
       }
256
-
281
+			
282
+			.underline-item{
283
+				// text-decoration: underline;
284
+				// margin-right: 40rpx;
285
+			}
286
+			
257 287
       .page_item_cont_T {
258 288
         padding-top: 28rpx;
259 289
         padding-bottom: 28rpx;
260 290
         font-size: 28rpx;
261
-
291
+        background: #fff;
292
+        border: 1px solid #CBCBCB;
293
+        border-radius: 10rpx;
294
+        padding: 20rpx;
295
+				
262 296
         .page_item_cont_title {
263 297
           height: 100%;
264 298
           font-size: 32rpx;
265 299
           display: flex;
266 300
           justify-content: space-between;
267 301
           align-items: center;
302
+					.content{
303
+						display: flex;
304
+						flex-wrap: wrap;
305
+						.list{
306
+							font-size: 28rpx;
307
+							height: 60rpx;
308
+							line-height: 60rpx;
309
+							width: 50%;
310
+							border-bottom: 1rpx solid #E6E6E6;
311
+							&:last-child{
312
+								border-bottom: none;
313
+							}
314
+						}
315
+					}
268 316
         }
269 317
 
270 318
         .page_item_cont_title2 {
@@ -277,7 +325,14 @@
277 325
           align-items: center;
278 326
         }
279 327
       }
280
-
328
+			
329
+			.page_item_cont_title_coll{
330
+				display: flex;
331
+				justify-content: space-between;
332
+				align-items: center;
333
+				margin-right: 8rpx;
334
+			}
335
+			
281 336
       .page_item_cont_B {
282 337
         padding-top: 28rpx;
283 338
         margin-bottom: 28rpx;

+ 68 - 11
pages/checkAfterScanning/checkAfterScanning.vue

@@ -19,8 +19,21 @@
19 19
           检验科室标本数量:
20 20
         </view>
21 21
         <view class="page_item_cont_title" v-for="(item, i) in info.data" :key="i">
22
-          <view>{{item[1]}}</view>
23
-          <view class="text_big" @click="goToSpeDetail(item[1],item[2])"><text class="underline">{{item[3]}}</text>只</view>
22
+         <uni-collapse :border="false">
23
+						<uni-collapse-item titleBorder="none">
24
+							<template v-slot:title>
25
+								<view class="page_item_cont_title_coll">
26
+									<view>{{item.deptName}}</view>
27
+									<view class="text_big" @click.stop="goToSpeDetail(item.deptName,item.deptQrCode)"><text class="underline">{{item.speCount}}</text>只</view>
28
+								</view>
29
+							</template>
30
+							<view class="content">
31
+								<view class="list" v-for="x in item.tubeTypeData" @click="viewSpe(item.deptName,item.deptQrCode,x.tubeTypeId)">
32
+									{{x.tubeTypeName}}:<text class="underline-item">{{x.speCount}}</text>
33
+								</view>
34
+							</view>
35
+						</uni-collapse-item>
36
+					</uni-collapse>
24 37
         </view>
25 38
       </view>
26 39
     </view>
@@ -80,6 +93,11 @@
80 93
 			numberKeyModel
81 94
 		},
82 95
     methods: {
96
+			viewSpe(deptName, qrCode, id){
97
+				uni.navigateTo({
98
+				  url: `../viewSpe/viewSpe?deptName=${deptName}&workOrderId=${encodeURIComponent(JSON.stringify([this.queryObj.id]))}&deptCode=${qrCode}&tubeTypeId=${id}&isScan=1&specimensCheck=1`,
99
+				});
100
+			},
83 101
 			confirmKey(data){
84 102
 				this.Scanning_complete('key')
85 103
 				this.contentData = data
@@ -558,17 +576,26 @@
558 576
   };
559 577
 </script>
560 578
 <style lang="less" scoped>
579
+	/deep/ .uni-collapse-item--border{
580
+		border-bottom-color: #fff !important;
581
+	}
582
+	
583
+	/deep/ .uni-collapse-item__title-arrow{
584
+		margin-right: 0 !important;
585
+	}
586
+	
561 587
   .checkAfterScanning {
562 588
     .checkAfterScanning_title {
563 589
       padding: 50rpx 0;
564 590
       font-size: 46rpx;
565 591
       font-weight: 550;
566 592
       text-align: center;
567
-      border-bottom: 1px solid #ccc;
593
+      // border-bottom: 1px solid #ccc;
568 594
     }
569 595
 
570 596
     .page_item_cont {
571
-      min-height: 90rpx;
597
+      height: 73vh;
598
+			overflow-y: auto;
572 599
       padding: 0 20rpx;
573 600
       text-align: left;
574 601
       position: relative;
@@ -582,23 +609,46 @@
582 609
         font-size: 32rpx;
583 610
         font-weight: 700;
584 611
         margin-top: 10rpx;
585
-
586
-        .underline{
587
-          text-decoration: underline;
588
-        }
589 612
       }
590
-
613
+			
614
+			.underline{
615
+			  text-decoration: underline;
616
+			}
617
+			
618
+			.underline-item{
619
+				// text-decoration: underline;
620
+				// margin-right: 40rpx;
621
+			}
622
+			
591 623
       .page_item_cont_T {
592 624
         padding-top: 28rpx;
593 625
         padding-bottom: 28rpx;
594 626
         font-size: 28rpx;
595
-
627
+				background: #fff;
628
+				border: 1px solid #CBCBCB;
629
+				border-radius: 10rpx;
630
+				padding: 20rpx;
631
+						
596 632
         .page_item_cont_title {
597 633
           height: 100%;
598 634
           font-size: 32rpx;
599 635
           display: flex;
600 636
           justify-content: space-between;
601 637
           align-items: center;
638
+					.content{
639
+						display: flex;
640
+						flex-wrap: wrap;
641
+						.list{
642
+							font-size: 28rpx;
643
+							height: 60rpx;
644
+							line-height: 60rpx;
645
+							width: 50%;
646
+							border-bottom: 1rpx solid #E6E6E6;
647
+							&:last-child{
648
+								border-bottom: none;
649
+							}
650
+						}
651
+					}
602 652
         }
603 653
         .page_item_cont_title2{
604 654
           margin-top: 36rpx;
@@ -610,7 +660,14 @@
610 660
           align-items: center;
611 661
         }
612 662
       }
613
-
663
+			
664
+			.page_item_cont_title_coll{
665
+				display: flex;
666
+				justify-content: space-between;
667
+				align-items: center;
668
+				margin-right: 8rpx;
669
+			}
670
+			
614 671
       .page_item_cont_B {
615 672
         padding-top: 28rpx;
616 673
         margin-bottom: 28rpx;

+ 136 - 0
pages/receipt_infopage/receipt_infopage.vue

@@ -431,6 +431,9 @@
431 431
           infoDATA.taskType.associationType.value == 'specimen' ||
432 432
           infoDATA.taskType.associationType.value == 'specimenPlan'
433 433
         " hover-class="seimin-btn-hover">查看标本</view>
434
+			
435
+			<view class="btn3" @click="redeployScan(infoDATA)" v-if="(infoDATA.taskType.associationType.value == 'specimen' ||
436
+			    infoDATA.taskType.associationType.value == 'specimenPlan') && sPehandoverOrder==1 && (infoDATA.gdState.value==4 || infoDATA.gdState.value==5 || infoDATA.gdState.value==8)" hover-class="seimin-btn-hover">转派</view>
434 437
       <view class="btn3" @click="viewDrugsBag(infoDATA)" v-if="infoDATA.taskType.associationType.value == 'drugsBag'" hover-class="seimin-btn-hover">查看业务流程</view>
435 438
       <view class="btn3" @click="toDrugBatches(infoDATA.drugs.batchNo)" v-if="infoDATA.taskType.associationType.value == 'drugsBag' && taskTypeConfig.drugsBatchInfo == 1" hover-class="seimin-btn-hover">药品批次</view>
436 439
       <view class="btn3" @click="viewBlood(infoDATA)" v-if="infoDATA.taskType.associationType.value == 'ordinary' && infoDATA.taskType.ordinaryField.value == 'blood'" hover-class="seimin-btn-hover">查看血制品</view>
@@ -460,6 +463,13 @@
460 463
     </checkboxModal>
461 464
 		<!-- PDA扫描 -->
462 465
 		<scanner></scanner>
466
+		<!-- 标本转派 -->
467
+		<uni-popup ref="alertDialog" type="dialog" :mask-click="false">
468
+			<uni-popup-dialog type="info" cancelText="否" confirmText="是" title="提示" @confirm="dialogConfirm"
469
+				@close="dialogClose">
470
+				<text v-html="speContent"></text>
471
+			</uni-popup-dialog>
472
+		</uni-popup>
463 473
   </view>
464 474
 </template>
465 475
 <script>
@@ -529,6 +539,9 @@
529 539
         // 特殊情况关闭原因开关
530 540
         textareaFlag: false,
531 541
         textareaText: "",
542
+				tasktype: null,
543
+				sPehandoverOrder: null ,//是否转派
544
+				speContent: null,
532 545
       };
533 546
     },
534 547
     filters: {
@@ -1087,6 +1100,82 @@
1087 1100
           url: "../receiptpage/receiptpage",
1088 1101
         });
1089 1102
       },
1103
+			// 转派
1104
+			redeployScan(workOrder){
1105
+				if (!this.SMFlag) {
1106
+				  return;
1107
+				}
1108
+				this.SMFlag = false;
1109
+				SM().then((content) => {
1110
+				  uni.showLoading({
1111
+				    title: "加载中",
1112
+				    mask: true,
1113
+				  });
1114
+					const regex = /^[^{}]+$/; // 验证是否是json对象
1115
+					let code = null
1116
+					console.log(12345,regex.test(content))
1117
+					if(!regex.test(content)){
1118
+						code = JSON.parse(content)
1119
+					}else{
1120
+						code = null
1121
+						uni.hideLoading();
1122
+						uni.showToast({
1123
+						  icon: "none",
1124
+						  title: '请扫描正确的二维码',
1125
+						});
1126
+						this.SMFlag = true;
1127
+						return
1128
+					}
1129
+				  post("/workerOrder/transfer ", {
1130
+							handoverId: code.id ? code.id : null,
1131
+							orderId: workOrder.id
1132
+				    })
1133
+				    .then((result) => {
1134
+				      this.SMFlag = true;
1135
+							uni.hideLoading();
1136
+				      if (result.state == 205) {
1137
+								this.speContent = result.msg
1138
+								this.handoverId = code.id ? code.id : null
1139
+				        this.$refs.alertDialog.open()
1140
+				      }else{
1141
+								uni.showToast({
1142
+								  icon: "none",
1143
+								  title: result.msg,
1144
+								});
1145
+							} 
1146
+				    })
1147
+				}).catch(err => {
1148
+				  this.SMFlag = true;
1149
+				});
1150
+			},
1151
+			dialogConfirm() {
1152
+				uni.showLoading({
1153
+				  title: "加载中",
1154
+				  mask: true,
1155
+				});
1156
+				post("/workerOrder/transfer ", {
1157
+						handoverId: this.handoverId,
1158
+						orderId: this.infoDATA.id,
1159
+						transferOrder: 1
1160
+				  })
1161
+				.then((result) => {
1162
+					this.SMFlag = true;
1163
+					uni.hideLoading();
1164
+					if (result.state == 200) {
1165
+						uni.showToast({
1166
+						  icon: "none",
1167
+						  title: result.info || "转派成功",
1168
+						});
1169
+						setTimeout(_=>{
1170
+							this.goBack()
1171
+						},2000)
1172
+					} 
1173
+				})
1174
+			},
1175
+			dialogClose() {
1176
+				this.$refs.alertDialog.close()
1177
+				this.speContent = null
1178
+			},
1090 1179
       // 查看标本
1091 1180
       viewSpecimen(workOrder) {
1092 1181
         uni.navigateTo({
@@ -1591,6 +1680,51 @@
1591 1680
           }
1592 1681
         });
1593 1682
       },
1683
+			// 获取标本是否转派配置
1684
+			getSpeTaskConfig(){
1685
+				let postData = {
1686
+					idx: 0,
1687
+					sum: 10,
1688
+					taskType: {
1689
+						simpleQuery: true,
1690
+						hosId: {
1691
+							id: this.hosId
1692
+						},
1693
+						associationType: {
1694
+							key:"association_types",
1695
+							value: "specimen"
1696
+						}
1697
+					}
1698
+				};
1699
+				 
1700
+				post("/simple/data/fetchDataList/taskType", postData).then((result) => {
1701
+					if (result.status == 200) {
1702
+						this.tasktype = result.list[0] || {};
1703
+						this.getSpeConfig();
1704
+					}
1705
+				});
1706
+			},
1707
+			// 获取配置
1708
+			getSpeConfig() {
1709
+				let postData = {
1710
+					idx: 0,
1711
+					sum: 10,
1712
+					taskTypeConfig: {
1713
+						taskTypeDTO: {
1714
+							hosId: {
1715
+								id: this.hosId
1716
+							},
1717
+							associationType: this.tasktype.associationType
1718
+						}
1719
+					}
1720
+				};;
1721
+			  post("/simple/data/fetchDataList/taskTypeConfig", postData).then((result) => {
1722
+					if (result.status == 200) {
1723
+						this.configs = result.list[0] || {};
1724
+						this.sPehandoverOrder = this.configs.handoverOrder || null;
1725
+					}
1726
+			  });
1727
+			},
1594 1728
       // 获取检查页面控制开关
1595 1729
       getTaskConfig(){
1596 1730
         post("/simple/data/fetchDataList/taskTypeConfig", {
@@ -1872,6 +2006,8 @@
1872 2006
         options.associationTypeValue == 'specimen' ||
1873 2007
         options.associationTypeValue == 'specimenPlan'
1874 2008
       ) {
2009
+				// 到达 送达 执行中
2010
+				this.getSpeTaskConfig();
1875 2011
         this.getInfoBySpecimen(id);
1876 2012
       } else {
1877 2013
         this.getInfo(id);

+ 1 - 1
pages/scanning_B/scanning_B.vue

@@ -19,7 +19,7 @@
19 19
     </view>
20 20
 
21 21
     <view class="Scanning_cont" v-if="res.status == 200 || res.status == 666">
22
-      <view>标本类型 : {{ infoDATA.stype.name || "-" }}</view>
22
+      <view>标本类型 : {{ infoDATA.stype.name || "-" }} <text v-if="res.data.tubeType">、</text> {{res.data.tubeType && res.data.tubeType.name}}</view>
23 23
       <view>标本编码 : {{ infoDATA.scode || "-" }}</view>
24 24
       <view>标本状态 : <text :class="{ red: res.data.speState && res.data.speState.value == 8 }">{{ res.data.speState ? res.data.speState.name : "-" }}</text></view>
25 25
       <view>申请科室 : {{ infoDATA.sickRoom || "-" }}</view>

+ 132 - 98
pages/scanning_Result/scanning_Result.vue

@@ -38,48 +38,58 @@
38 38
         (res.status == 200 && type == 'specimenPlan') ||
39 39
         (res.status == 200 && type == 'specimen')
40 40
       ">
41
-      <view>{{ infoDATA.stype.name }}({{infoDATA.scode}})</view>
42
-      <view>检验项目 : {{ infoDATA.specimenDesc || "-" }}</view>
43
-      <view>
41
+			<view class="df">
42
+				<view class="width-100">编 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 码:</view> 
43
+				<view>
44
+					<text class="red">{{infoDATA.urgent==1?'急':''}}</text>
45
+					<text class="mar-le">{{infoDATA.scode}} </text>
46
+				</view>
47
+				<view class="po-ab">{{infoDATA.speState && infoDATA.speState.name}}</view>
48
+			</view>
49
+      <view class="df"><view class="width-100">检验项目:</view> {{ infoDATA.specimenDesc || "-" }}</view>
50
+			<view class="df"><view class="width-100">类 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 型:</view>{{ infoDATA.stype.name }} <text v-if="infoDATA.tubeType">、</text> {{infoDATA.tubeType && infoDATA.tubeType.name}}</view>
51
+      <view class="df">
52
+				<view class="width-100">科 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 室:</view>
44 53
         {{ infoDATA.sickRoom ? infoDATA.sickRoom.dept : "" }}
45
-        <text style="width: 4em;text-align: center;margin-left: 1em;margin-right: 1em;" class="newicon newicon-arrow-right-full"></text>
54
+        <text class="newicon newicon-arrow-right-full"></text>
46 55
         <text :class="{ red: isEndDeptRedShow }">{{ infoDATA.checkDept ? infoDATA.checkDept.dept : "" }}</text>
47 56
       </view>
48
-      <view>患者姓名 : {{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
49
-      <view>住院号 : {{ infoDATA.residenceNo || '-' }}</view>
57
+      <view class="df"><view class="width-100">患者姓名:</view>{{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
58
+      <view class="df"><view class="width-100">住院号:</view>{{ infoDATA.residenceNo || '-' }}</view>
50 59
     </view>
51 60
 
52 61
     <view class="Scanning_cont" v-if="
53 62
         (res.status == 11111 && type == 'specimenPlan') ||
54 63
         (res.status == 11111 && type == 'specimen')
55 64
       ">
56
-      <view>{{ infoDATA.stype.name }}({{infoDATA.scode}})</view>
57
-      <view>检验项目 : {{ infoDATA.specimenDesc || "-" }}</view>
58
-      <view>标本状态 : <text style="color: red">{{ infoDATA.speState ? infoDATA.speState.name : '' }}</text></view>
59
-      <view>
60
-        {{ infoDATA.sickRoom ? infoDATA.sickRoom.dept : "" }}
61
-        <text style="width: 4em;text-align: center;margin-left: 1em;margin-right: 1em;" class="newicon newicon-arrow-right-full"></text>
62
-        <text :class="{ red: isEndDeptRedShow }">{{ infoDATA.checkDept ? infoDATA.checkDept.dept : "" }}</text>
63
-      </view>
64
-      <view>患者姓名 : {{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
65
-      <view>住院号 : {{ infoDATA.residenceNo || '-' }}</view>
65
+			<view class="df"><view class="width-100">编码:</view> <text class="red">{{infoDATA.urgent==1?'急':''}}</text> {{infoDATA.scode}} {{infoDATA.speState && infoDATA.speState.name}}</view>
66
+			<view class="df"><view class="width-100">检验项目:</view> {{ infoDATA.specimenDesc || "-" }}</view>
67
+			<view class="df"><view class="width-100">类型:</view>{{ infoDATA.stype.name }} <text v-if="infoDATA.tubeType">、</text> {{infoDATA.tubeType && infoDATA.tubeType.name}}</view>
68
+			<view class="df">
69
+				<view class="width-100">科室:</view>
70
+			  {{ infoDATA.sickRoom ? infoDATA.sickRoom.dept : "" }}
71
+			  <text class="newicon newicon-arrow-right-full"></text>
72
+			  <text :class="{ red: isEndDeptRedShow }">{{ infoDATA.checkDept ? infoDATA.checkDept.dept : "" }}</text>
73
+			</view>
74
+			<view class="df"><view class="width-100">患者姓名:</view>{{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
75
+			<view class="df"><view class="width-100">住院号:</view>{{ infoDATA.residenceNo || '-' }}</view>
66 76
     </view>
67 77
 
68 78
     <view class="Scanning_cont" v-if="
69 79
         (res.status == 200 && type == 'inspect') || type == 'patientTransport'
70 80
       ">
71
-      <view v-if="res.patient"> 患者姓名 : {{ res.patient || "-" }} </view>
72
-      <view v-if="res.residenceNo">
73
-        住院号 : {{ res.residenceNo || "-" }}
81
+      <view class="df" v-if="res.patient"> <view class="width-100">患者姓名:</view> {{ res.patient || "-" }} </view>
82
+      <view class="df" v-if="res.residenceNo">
83
+        <view class="width-100">住院号:</view> {{ res.residenceNo || "-" }}
74 84
       </view>
75
-      <view v-if="res.deptName">
76
-        住院科室 : {{ res.deptName !== "undefined" ? res.deptName : "-" }}
85
+      <view class="df" v-if="res.deptName">
86
+        <view class="width-100">住院科室:</view> {{ res.deptName !== "undefined" ? res.deptName : "-" }}
77 87
       </view>
78
-      <view v-if="res.bedNum">
79
-        床号 : {{ res.bedNum !== "undefined" ? res.bedNum : "-" }}
88
+      <view class="df" v-if="res.bedNum">
89
+        <view class="width-100">床号:</view> {{ res.bedNum !== "undefined" ? res.bedNum : "-" }}
80 90
       </view>
81
-      <view v-if="res.data">
82
-        检查项目 :
91
+      <view class="df" v-if="res.data">
92
+        <view class="width-100">检查项目:</view>
83 93
         <text v-for="(data, i) in res.data" :key="i">{{
84 94
           data.inspectName
85 95
         }}</text>
@@ -106,18 +116,18 @@
106 116
       </view>
107 117
     </view>
108 118
     <view class="Scanning_cont" v-if="res.status == 200 && (type == 'drugsBag' || type == 'jPBag')">
109
-      <view> 药包类型 : {{(infoDATA.packType && infoDATA.packType !== 0) ? DRUGSBAG_TYPE[infoDATA.packType] : "-"}} </view>
110
-      <view v-if="type == 'drugsBag'"> 药包编码 : #{{ infoDATA.packid }} </view>
111
-      <view
119
+      <view class="df"> <view class="width-100">药包类型:</view>  {{(infoDATA.packType && infoDATA.packType !== 0) ? DRUGSBAG_TYPE[infoDATA.packType] : "-"}} </view>
120
+      <view class="df" v-if="type == 'drugsBag'"> <view class="width-100">药包编码:</view>  #{{ infoDATA.packid }} </view>
121
+      <view class="df"
112 122
         v-if="type == 'drugsBag' && accountObj && (queryObj.type1 === 'drug-ddd-2' || queryObj.type1 === 'drug-dsd-2')">
113
-        交接人工号 : {{ accountObj.account }} </view>
114
-      <view
123
+        <view class="width-100">交接人工号:</view>  {{ accountObj.account }} </view>
124
+      <view class="df"
115 125
         v-if="type == 'drugsBag' && accountObj && (queryObj.type1 === 'drug-ddd-2' || queryObj.type1 === 'drug-dsd-2')">
116
-        交接人姓名 : {{ accountObj.accountName }} </view>
117
-      <view v-if="type == 'jPBag'">
118
-        静配药包编码 : #{{ infoDATA.packid }}
126
+        <view class="width-100">交接人姓名:</view>  {{ accountObj.accountName }} </view>
127
+      <view class="df"v-if="type == 'jPBag'">
128
+        <view class="width-100">静配药包编码:</view>  #{{ infoDATA.packid }}
119 129
       </view>
120
-      <view> 所属科室 : {{ infoDATA.target.dept || "-" }} </view>
130
+      <view class="df"> <view class="width-100">所属科室:</view>  {{ infoDATA.target.dept || "-" }} </view>
121 131
       <view v-if="infoType === 'drug-dsd-2' || infoType === 'jp-dsd-2'">
122 132
         工单已完成。
123 133
       </view>
@@ -136,8 +146,8 @@
136 146
       <view class="btn3" @click="hand_again()">手动录入</view>
137 147
       <view class="btn3" @click="getNoScanSpecimen(false)">未扫描标本</view>
138 148
       <view class="btn3" @click="getNoScanSpecimen(true)">已扫描标本</view>
139
-      <view class="btn2" @click="Scanning_complete(dataId)"> 完成扫描 </view>
140
-			<view class="btn2" v-if="speCollectLimit==1" @click="configuration(dataId)"> 配置收取 </view>
149
+      <view class="btn3" @click="Scanning_complete(dataId)"> 完成扫描 </view>
150
+			<view class="btn3" v-if="speCollectLimit==1" @click="configuration(dataId)"> 配置收取 </view>
141 151
 		</view>
142 152
     <view class="foot_btn" v-if="
143 153
         (type != 'specimenPlan' &&
@@ -265,7 +275,7 @@
265 275
 		<!-- PDA扫描 -->
266 276
 		<scanner></scanner>
267 277
 		<!-- 标本扫描拦截 -->
268
-		<errorModel v-show="errorModal" ref="model11" :errorModal="errorModal" :speDATA="speDATA" @cancel="cancelError" @confirm="confirmError($event)"></errorModel>
278
+		<!-- <errorModel v-show="errorModal" ref="model11" :errorModal="errorModal" :speDATA="speDATA" @cancel="cancelError" @confirm="confirmError($event)"></errorModel> -->
269 279
 	</view>
270 280
 </template>
271 281
 <script>
@@ -456,7 +466,7 @@
456 466
                   //标本和标本轮巡工单,扫描标本后会自动调用摄像头,继续扫描,直到status不是200
457 467
                   if ((this.type == "specimenPlan" || this.type == "specimen") && ress.status != 11111) {
458 468
                     this.getPageConfigSpecimen((flag, type, ress) => {
459
-                      if(flag && !this.isShow){
469
+                      // if(flag && !this.isShow){
460 470
                         setTimeout(()=>{
461 471
                           if (type === 'scan') {
462 472
 														// #ifdef H5
@@ -464,7 +474,7 @@
464 474
 														// #endif
465 475
                           }
466 476
                         },500)
467
-                      }
477
+                      // }
468 478
                       if(ress){
469 479
                         this.infoDATA = ress.data;
470 480
                         this.speNum = ress.specimenCount;
@@ -477,7 +487,7 @@
477 487
                           JSON.stringify(ress.data)
478 488
                         )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
479 489
                           this.queryObj.deptCode
480
-                        }&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&speNum=${this.speNum}&scanOrHand=${type}&isEndDeptRed=${this.isEndDeptRed}&isShow=1`
490
+                        }&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&speNum=${this.speNum}&scanOrHand=${type}&isEndDeptRed=${this.isEndDeptRed}`
481 491
 												uni.setStorageSync('gdData', JSON.stringify(sessData))
482 492
 												
483 493
                         uni.redirectTo({
@@ -489,7 +499,7 @@
489 499
                           JSON.stringify(ress.data)
490 500
                         )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
491 501
                           this.queryObj.deptCode
492
-                        }&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&speNum=${this.speNum}&scanOrHand=${type}&isEndDeptRed=${this.isEndDeptRed}&isShow=1`,
502
+                        }&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&speNum=${this.speNum}&scanOrHand=${type}&isEndDeptRed=${this.isEndDeptRed}`,
493 503
                         });
494 504
                       }
495 505
                     }, type, ress.data, ress);
@@ -590,12 +600,22 @@
590 600
                     });
591 601
                   }
592 602
                 } else if (ress.status==513){
593
-									this.speDATA = ress
594
-									this.errorModal = true
603
+									uni.navigateTo({
604
+									  url: `../speError/speError?type=${
605
+									  this.queryObj.type
606
+									}&type1=${
607
+									  this.queryObj.type1
608
+									}&infoData=${encodeURIComponent(
609
+									  JSON.stringify(ress.data)
610
+									)}&status=${ress.status}&msg=${ress.msg}&deptCode=${
611
+									  this.queryObj.deptCode
612
+									}&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&speNum=${this.speNum}&scanOrHand=${type}&isEndDeptRed=${this.isEndDeptRed}`,
613
+									});
595 614
 								} else if(ress.status==10004){
596 615
                   uni.showToast({
597 616
                     icon: "none",
598
-                    title: ress.msg,
617
+										duration: 3000,
618
+                    title: ress.msg +','+ `扫描内容:${data.speCode}`,
599 619
                   });
600 620
                 }else{
601 621
 									uni.redirectTo({
@@ -621,21 +641,23 @@
621 641
               title: result.info || "接口获取数据失败!",
622 642
             });
623 643
           }
624
-        });
644
+        }).catch(err =>{
645
+					this.SMFlag = true;
646
+				});
625 647
         // ------------------------------
626 648
       },
627 649
 			// 取消拦截
628
-			cancelError(){
629
-				this.errorModal = false
630
-				this.interceptData = null
631
-				this.speDATA = null
632
-			},
633
-			// 确定标本拦截
634
-			confirmError(e){
635
-				this.errorModal = false
636
-				this.interceptData = e
637
-				this.hand_scanning_common(this.interceptData.code, 'scan')
638
-			},
650
+			// cancelError(){
651
+			// 	this.errorModal = false
652
+			// 	this.interceptData = null
653
+			// 	this.speDATA = null
654
+			// },
655
+			// // 确定标本拦截
656
+			// confirmError(e){
657
+			// 	this.errorModal = false
658
+			// 	this.interceptData = e
659
+			// 	this.hand_scanning_common(this.interceptData.code, 'scan')
660
+			// },
639 661
       // 查看未扫描标本
640 662
       // isScan true已扫描标本,false未扫描标本
641 663
       getNoScanSpecimen(isScan) {
@@ -659,7 +681,7 @@
659 681
       },
660 682
       // 继续扫描
661 683
       Scanning_again() {
662
-				// this.hand_scanning_common('250515584338@_1', 'scan')
684
+				// this.hand_scanning_common('250523620572@_1', 'scan')
663 685
         if (!this.SMFlag) {
664 686
           return;
665 687
         }
@@ -1161,6 +1183,7 @@
1161 1183
 			// #endif
1162 1184
     },
1163 1185
     onLoad(options) {
1186
+			console.log(77776666,options)
1164 1187
 			this.intercept = options.intercept
1165 1188
 			this.isShow = options.isShow
1166 1189
       this.isEndDeptRedShow = options.isEndDeptRed === 'true';
@@ -1172,34 +1195,18 @@
1172 1195
           }
1173 1196
         });
1174 1197
       }
1175
-			else if(options.scanOrHand === 'scan'){
1176
-				if(options.isShow==1){
1177
-					this.getPageConfigSpecimen((flag, type, ress) => {
1178
-						if(flag){
1179
-							setTimeout(()=>{
1180
-								// #ifdef H5
1181
-								this.Scanning_again();
1182
-								// #endif
1183
-							},500)
1184
-						}
1185
-					})
1186
-				}
1187
-			}
1188
-			// else if ((options.scanOrHand === 'scan' || options.type == "specimenPlan" || options.type == "specimen") && options.status != 11111) {
1189
-			// 	if(options.scanOrHand === 'scan' || this.intercept==1){
1190
-			// 		this.getSys()
1191
-			// 	}
1192
-			// 	this.getPageConfigSpecimen((flag, type, ress) => {
1193
-			// 		if(flag){
1194
-			// 			setTimeout(()=>{
1195
-			// 				// if (type === 'scan') {
1198
+			// else if(options.scanOrHand === 'scan'){
1199
+			// 	if(options.isShow==1){
1200
+			// 		this.getPageConfigSpecimen((flag, type, ress) => {
1201
+			// 			if(flag){
1202
+			// 				setTimeout(()=>{
1196 1203
 			// 					// #ifdef H5
1197 1204
 			// 					this.Scanning_again();
1198 1205
 			// 					// #endif
1199
-			// 				// }
1200
-			// 			},500)
1201
-			// 		}
1202
-			// 	})
1206
+			// 				},500)
1207
+			// 			}
1208
+			// 		})
1209
+			// 	}
1203 1210
 			// }
1204 1211
 			console.log(options , "options");
1205 1212
       this.queryObj = options;
@@ -1279,14 +1286,16 @@
1279 1286
 </script>
1280 1287
 <style lang="less">
1281 1288
   .Scanning_Result {
1282
-    padding: 0 20rpx;
1283
-
1289
+    padding: 0 24rpx;
1290
+		height: 96vh;
1291
+		position: relative;
1292
+		
1284 1293
     .Scanning_top {
1285 1294
       .Scanning_top_icon {
1286 1295
         width: 140rpx;
1287 1296
         height: 140rpx;
1288 1297
         margin: 0 auto;
1289
-        margin-top: 116rpx;
1298
+        margin-top: 40rpx;
1290 1299
         border-radius: 50%;
1291 1300
         line-height: 140rpx;
1292 1301
 
@@ -1321,12 +1330,37 @@
1321 1330
 
1322 1331
     .Scanning_cont {
1323 1332
       font-size: 32rpx;
1324
-      text-align: center;
1325
-
1326
-      view {
1327
-        margin-bottom: 16rpx;
1328
-      }
1329
-
1333
+      // text-align: center;
1334
+			margin-top: 40rpx;
1335
+			height: 50vh;
1336
+			overflow-y: auto;
1337
+			
1338
+			.df{
1339
+				display: flex;
1340
+				align-items: center;
1341
+				margin-bottom: 14rpx;
1342
+				position: relative;
1343
+				
1344
+				.newicon{
1345
+					margin: 0 8rpx;
1346
+				}
1347
+				
1348
+				.mar-le{
1349
+					margin-left: 20rpx;
1350
+				}
1351
+				
1352
+				.po-ab{
1353
+					position: absolute;
1354
+					right: 0;
1355
+				}
1356
+			}
1357
+			
1358
+			.width-100{
1359
+				width: 160rpx;
1360
+				font-weight: 600;
1361
+				text-align-last: justify;
1362
+			}
1363
+			
1330 1364
       .Scanning_cont_center {
1331 1365
         text-align: center;
1332 1366
       }
@@ -1366,21 +1400,21 @@
1366 1400
     .foot_btn_spe {
1367 1401
       line-height: 88rpx;
1368 1402
       height: 100rpx;
1369
-      margin-top: 40rpx;
1403
+      // margin-top: 40rpx;
1370 1404
       text-align: center;
1371 1405
       display: flex;
1372 1406
       justify-content: space-between;
1373 1407
       flex-wrap: wrap;
1374
-
1375
-      &::after {
1376
-        content: '';
1377
-        flex: 1;
1378
-      }
1408
+			
1409
+      // &::after {
1410
+      //   content: '';
1411
+      //   flex: 1;
1412
+      // }
1379 1413
 
1380 1414
       view {
1381 1415
         height: 88rpx;
1382 1416
         width: 48%;
1383
-        margin: 0 1%;
1417
+        // margin: 0 1%;
1384 1418
         background-image: linear-gradient(to right, #72c172, #3bb197);
1385 1419
         color: #fff;
1386 1420
         border-radius: 8rpx;

+ 405 - 0
pages/speError/speError.vue

@@ -0,0 +1,405 @@
1
+<template>
2
+  <view class="showModel">
3
+		<view class="showModel__wrap">
4
+			<view class="content" v-if="speDATA && speDATA.data">
5
+				<view class="content-box">
6
+					<view class="icon">
7
+						<text class="red newicon newicon-guanbi1"></text>
8
+						<!-- <text class="error-text">提示</text> -->
9
+					</view>
10
+					<view class="list weight red">{{speDATA.msg}}</view>
11
+					<view class="list flex">
12
+						<view>条码:<text class="mar-rig" :class="speDATA.data.urgent==0?'green':'red'">{{speDATA.data.urgent==0?'普':'急'}}</text> {{speDATA.data.scode}}</view>
13
+						<view>{{speDATA.data.speState ? speDATA.data.speState.name : ''}}</view>
14
+					</view>
15
+					<view class="list">检查项目:{{ speDATA.data.specimenDesc || "-" }}</view>
16
+					<view class="list">类型:{{speDATA.data.stype ? speDATA.data.stype.name : ''}} <text v-if="speDATA.data.tubeType">、</text> {{speDATA.data.tubeType && speDATA.data.tubeType.name || ''}}</view>
17
+					<view class="list">患者:{{ speDATA.data.patientName}} <text v-if="speDATA.data.bedNum">({{speDATA.data.bedNum}})</text></view>
18
+					<view class="list">{{speDATA.data.sickRoom.dept}}
19
+					<text style="width: 4em;text-align: center;margin-left: 1em;margin-right: 1em;" class="newicon newicon-arrow-right-full"></text>
20
+					{{speDATA.data.checkDept.dept}}</view>
21
+					<view class="list" v-if="speDATA.speVerifyType=='collectDept'
22
+					|| speDATA.speVerifyType=='testDept' || speDATA.speVerifyType=='tubeType'
23
+					|| speDATA.speVerifyType=='urgent'">
24
+						<checkbox-group @change="forceDeptInputBlur">
25
+						  <checkbox value="addConfig" :checked="addConfig" color="#49b856" />{{msg}}
26
+						</checkbox-group>
27
+					</view>
28
+				</view>
29
+			</view>
30
+			<view class="foot_btn_spe">
31
+			  <view class="btn green" @click="confirm()">是</view>
32
+			  <view class="btn gray" @click="cancel()">否</view>
33
+			</view>
34
+		</view>
35
+  </view>
36
+</template>
37
+
38
+<script>
39
+import {
40
+    get,
41
+    post,
42
+    SM
43
+  } from "../../http/http.js";
44
+export default {
45
+  data() {
46
+    return {
47
+      addConfig:false,
48
+			msg:null,
49
+			// 终点科室标红
50
+			isEndDeptRed: false,
51
+			currentCode: '', //当前小扫描的科室二维码
52
+			deptId: undefined,
53
+			handover: undefined,
54
+			SMFlag: true,
55
+			// 交接人信息
56
+			accountObj: undefined,
57
+			// 完成扫描的id
58
+			wcId: "",
59
+			wcFlag: false,
60
+			// 弹窗model
61
+			models: {
62
+			  disjunctor: false,
63
+			},
64
+			// 单选框弹窗model1
65
+			models1: {
66
+			  disjunctor: false,
67
+			},
68
+			// 完成扫描弹窗model1
69
+			models2: {
70
+			  disjunctor: false,
71
+			},
72
+			infoDATA: {},
73
+			res: {},
74
+			infoType: "",
75
+			DEPTCode: "",
76
+			RESData: {},
77
+			DEPT: "",
78
+			dataId: "",
79
+			type: "",
80
+			model: {},
81
+			speNum: 0,
82
+			queryObj: {}, //路由传递过来的数据
83
+			selectRadio: [], //单选框选中的数据,第一项是qrcode,第二项是名称
84
+			gotoFlag: true,
85
+			content: "",
86
+			taskTypeId:"",
87
+			errorModal:null,
88
+			speDATA:null,
89
+			interceptData:null,
90
+			intercept:null,
91
+    };
92
+  },
93
+	onLoad(options){
94
+		console.log(77776666,options)
95
+		this.intercept = options.intercept
96
+		this.queryObj = options;
97
+		if (options.model) {
98
+		  this.infoDATA = JSON.parse(options.model);
99
+			this.speDATA = JSON.parse(options.model);
100
+		}
101
+		
102
+		if (options.accountObj && options.accountObj != "undefined") {
103
+		  this.accountObj = JSON.parse(options.accountObj);
104
+		}
105
+		if (options.deptId && options.deptId != "undefined") {
106
+		  this.deptId = options.deptId;
107
+		}
108
+		if (options.handover && options.handover != "undefined") {
109
+		  this.handover = options.handover;
110
+		}
111
+		this.dataId = options.id;
112
+		if(options.taskTypeId){
113
+			this.taskTypeId = options.taskTypeId
114
+		}else if(this.infoDATA.workOrderList && this.infoDATA.workOrderList.length>0){
115
+			this.taskTypeId = this.infoDATA.workOrderList[0].taskType.id
116
+		}
117
+		this.RESData = options.resData;
118
+		this.res["status"] = options.status;
119
+		this.res["msg"] = options.msg;
120
+		this.res["patient"] = options.patient;
121
+		this.res["patientCode"] = options.patientCode;
122
+		this.res["deptName"] = options.deptName;
123
+		this.res["bedNum"] = options.bedNum;
124
+		this.infoType = options.type1;
125
+	
126
+		if (options.dept) {
127
+		  this.DEPT = options.dept;
128
+		}
129
+		if (options.speNum) {
130
+		  this.speNum = options.speNum;
131
+		}
132
+		this.DEPTCode = options.deptCode;
133
+		this.type = options.type;
134
+		this.setMsg()
135
+	},
136
+  methods: {
137
+		setMsg(){
138
+			if(this.speDATA.speVerifyType=='collectDept'){
139
+				this.msg = '增加收取科室'
140
+			}else if(this.speDATA.speVerifyType=='testDept'){
141
+				this.msg = '收取本科室不在提示'
142
+			}else if(this.speDATA.speVerifyType=='tubeType'){
143
+				this.msg = '收取此试管类型不在提示'
144
+			}else if(this.speDATA.speVerifyType=='urgent'){
145
+				this.msg = '记录本次操作,不在提示'
146
+			}
147
+		},
148
+		forceDeptInputBlur(e){
149
+			this.addConfig = e.detail.value.length > 0
150
+		},
151
+    confirm(){
152
+			if(this.speDATA.speVerifyType!='collectDept'
153
+			&& this.speDATA.speVerifyType!='testDept' && this.speDATA.speVerifyType!='tubeType'
154
+			&& this.speDATA.speVerifyType!='urgent'){
155
+				this.addConfig = true
156
+			}
157
+			let data = {
158
+				code: this.speDATA.data.scode,
159
+				addConfig: this.addConfig
160
+			}
161
+			this.interceptData = data
162
+			this.hand_scanning_common(this.interceptData.code, 'scan')
163
+    },
164
+		// 手动输入标本和扫码公共方法
165
+		hand_scanning_common(ress1, type) {
166
+		  // ----------------
167
+		  uni.showLoading({
168
+		    title: "加载中",
169
+		    mask: true,
170
+		  });
171
+		  //检验二维码的有效性
172
+		  post("/dept/scanning", {
173
+		    content: ress1,
174
+		  }).then((result) => {
175
+		    this.SMFlag = true;
176
+		    this.currentCode = result.code;
177
+		    if (result.state == 200 || result.state == 201) {
178
+		      let codes = result.code;
179
+		      if (codes) {
180
+		        let speCode = codes;
181
+		        let data = {
182
+		          code: speCode,
183
+		          type: this.queryObj.type1,
184
+		          deptCode: this.DEPTCode,
185
+		          ids: [],
186
+							speVerifyType:null,
187
+							addConfig:null
188
+		        };
189
+						if(this.speDATA){
190
+							data.speVerifyType = this.speDATA.speVerifyType
191
+						}else{
192
+							delete data.speVerifyType
193
+						}
194
+						if(this.interceptData && this.interceptData.addConfig){
195
+							data.addConfig = 1
196
+						}else{
197
+							delete data.addConfig
198
+						}
199
+		        data.ids.push(this.dataId);
200
+		        let postType = "";
201
+		        if (this.type == "jPBag" || this.type == "drugsBag") {
202
+		          postType = "handleDrugsAndJp";
203
+		          if(this.type == "drugsBag"){
204
+		            delete data.ids;
205
+		          }
206
+		          data.deptId = this.deptId;
207
+		          data.handover = this.handover;
208
+		        }
209
+		        if (this.type == "specimen") {
210
+		          data["speCode"] = data.code;
211
+		          delete data.code;
212
+		          postType = "handleSpes";
213
+		        }
214
+		        if (this.type == "specimenPlan") {
215
+		          data["speCode"] = data.code;
216
+		          delete data.code;
217
+		          postType = "handlePlanSpes";
218
+		        }
219
+		        if (this.type == "inspect") {
220
+		          postType = "handleIns";
221
+		        }
222
+		        if (this.type == "patientTransport") {
223
+		          postType = "handleTrans";
224
+		        }
225
+		        post("/workerOrder/" + postType, data).then((ress) => {
226
+		          uni.hideLoading();
227
+							this.speDATA = null
228
+							this.interceptData = null
229
+		          if (ress.status == 200 || ress.status == 11111) {
230
+		            //标本和标本轮巡工单,扫描标本后会自动调用摄像头,继续扫描,直到status不是200
231
+		            if ((this.type == "specimenPlan" || this.type == "specimen") && ress.status != 11111) {
232
+									if(ress){
233
+										this.infoDATA = ress.data;
234
+										this.speNum = ress.specimenCount;
235
+										uni.redirectTo({
236
+											url: `../scanning_Result/scanning_Result?type=${
237
+											this.queryObj.type
238
+										}&type1=${
239
+											this.queryObj.type1
240
+										}&infoData=${encodeURIComponent(
241
+											JSON.stringify(ress.data)
242
+										)}&status=${ress.status}&msg=${ress.msg}&deptCode=${
243
+											this.queryObj.deptCode
244
+										}&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&speNum=${this.speNum}&scanOrHand=scan&isEndDeptRed=${this.isEndDeptRed}`,
245
+										});
246
+									}
247
+		            }
248
+		          } else if (ress.status==513){
249
+								this.speDATA = ress
250
+								this.setMsg()
251
+							} else if(ress.status==10004){
252
+		            uni.showToast({
253
+		              icon: "none",
254
+		              title: ress.msg,
255
+		            });
256
+		          }else{
257
+								uni.redirectTo({
258
+								  url: `../scanning_Result/scanning_Result?type=${
259
+								  this.queryObj.type
260
+								}&type1=${this.queryObj.type1}&status=${ress.status}&msg=${
261
+								  ress.msg
262
+								}&deptCode=${this.queryObj.deptCode}&dept=${
263
+								  this.queryObj.dept
264
+								}&id=${this.dataId}&model=${encodeURIComponent(
265
+								  JSON.stringify(this.infoDATA)
266
+								)}&accountObj=${encodeURIComponent(JSON.stringify(this.accountObj))}&deptId=${this.deptId}&handover=${this.handover}&scanOrHand=scan&qrcode=${this.currentCode}`,
267
+								});
268
+							}
269
+		        });
270
+		      } else {
271
+		        uni.hideLoading();
272
+		      }
273
+		    } else {
274
+		      uni.hideLoading();
275
+		      uni.showToast({
276
+		        icon: "none",
277
+		        title: result.info || "接口获取数据失败!",
278
+		      });
279
+		    }
280
+		  });
281
+		},
282
+    cancel(){
283
+			uni.navigateBack();
284
+    },
285
+  },
286
+};
287
+</script>
288
+
289
+<style lang="less" scoped>
290
+.showModel {
291
+  // position: fixed;
292
+  // left: 0;
293
+  // right: 0;
294
+  // top: 0;
295
+  // bottom: 0;
296
+  // background-color: rgba(0, 0, 0, 0.2);
297
+  // z-index: 99;
298
+
299
+  .showModel__wrap {
300
+    // width: 90%;
301
+    // position: absolute;
302
+    // left: 50%;
303
+    // top: 50%;
304
+    // transform: translate(-50%, -50%);
305
+    background-color: #fff;
306
+    // border-radius: 12rpx;
307
+		height: 100vh;
308
+    .showModel__header {
309
+      font-size: 36rpx;
310
+      color: #000;
311
+			font-weight: bold;
312
+      height: 84rpx;
313
+      display: flex;
314
+      justify-content: center;
315
+      align-items: center;
316
+    }
317
+		.content{
318
+			background: #fff;
319
+			border-top: 1px solid #E6E6E6;
320
+			.content-tip{
321
+				text-align: center;
322
+				padding: 50rpx 0 30rpx 0;
323
+				font-size: 28rpx;
324
+			}
325
+			.content-box{
326
+				padding: 24rpx;
327
+				height: 83vh;
328
+				
329
+				.icon{
330
+					display: flex;
331
+					justify-content: center;
332
+					align-items: center;
333
+					.red{
334
+						font-size: 80rpx;
335
+					}
336
+					.error-text{
337
+						margin-left: 30rpx;
338
+						font-size: 40rpx;
339
+					}
340
+				}
341
+				
342
+				.flex{
343
+					display: flex;
344
+					justify-content: space-between;
345
+				}
346
+				
347
+				.weight{
348
+					font-weight: bold;
349
+					text-align: center;
350
+					font-size: 38rpx;
351
+				}
352
+				
353
+				.list{
354
+					padding: 20rpx 0;
355
+				}
356
+				
357
+				.content-item{
358
+					width: 80rpx;
359
+					height: 80rpx;
360
+					border-radius: 10rpx;
361
+					border: 1px solid #CCCCCC;
362
+					color: #000;
363
+					font-size: 32rpx;
364
+					// margin: 0 20rpx;
365
+					text-align: center;
366
+				}
367
+			}
368
+		}
369
+		.foot_btn_spe {
370
+			padding: 24rpx;
371
+		  line-height: 88rpx;
372
+		  height: 100rpx;
373
+		  text-align: center;
374
+		  display: flex;
375
+		  justify-content: space-between;
376
+		  flex-wrap: wrap;
377
+			
378
+		  view {
379
+		    height: 88rpx;
380
+		    width: 48%;
381
+		    color: #fff;
382
+		    border-radius: 8rpx;
383
+		    font-size: 32rpx;
384
+		    margin-top: 16rpx;
385
+		  }
386
+			
387
+			.green{
388
+				background-image: linear-gradient(to right, #72c172, #3bb197);
389
+				color: #fff !important;
390
+			}
391
+			
392
+			.gray{
393
+				background: #afafaf;
394
+				color: #fff;
395
+			}
396
+		}
397
+  }
398
+	.green{
399
+		color: #49B856;
400
+	}
401
+	.mar-rig{
402
+		margin-right: 8rpx;
403
+	}
404
+}
405
+</style>

+ 125 - 65
pages/specimenChecking/specimenChecking.vue

@@ -1,17 +1,30 @@
1 1
 <template>
2 2
   <view class="specimenChecking">
3 3
     <view class="title">请您确认一下科室标本数量!</view>
4
-    <view class="page_item_wrap" v-for="item in list" :key="item.deptId" @click="gotoDetail(item)">
4
+    <view class="page_item_wrap" v-for="item in list" :key="item.deptId">
5 5
       <view class="page_item">
6 6
         <view class="page_item_top">
7
-          <view class="page_item_top-inner">
8
-            <view class="page_item_top_L">
9
-              <view class="L_text">{{item.deptName}}</view>
10
-            </view>
11
-            <view class="page_item_top_R">
12
-              <view class="L_iocn">{{item.speNum}}</view>
13
-            </view>
14
-          </view>
7
+					<uni-collapse :border="false">
8
+						<uni-collapse-item titleBorder="none">
9
+							<template v-slot:title>
10
+								<view class="page_item_cont_title_coll" @click.stop="gotoDetail(item)">
11
+									<view class="page_item_top-inner">
12
+										<!-- <view class="page_item_top_L"> -->
13
+											<view class="L_text">{{item.deptName}}</view>
14
+										<!-- </view> -->
15
+										<view class="page_item_top_R">
16
+											<view class="L_iocn">{{item.speNum}}</view>
17
+										</view>
18
+									</view>
19
+								</view>
20
+							</template>
21
+							<view class="content">
22
+								<view class="list" v-for="x in item.tubeTypeDataList" @click="viewSpe(item, x.tubeTypeId)">
23
+									{{x.tubeTypeName}}:<text class="underline-item">{{x.speNum}}</text>
24
+								</view>
25
+							</view>
26
+						</uni-collapse-item>
27
+					</uni-collapse>
15 28
         </view>
16 29
         <!-- <view class="page_item_cont">
17 30
           <view class="page_item_cont_T">
@@ -70,6 +83,17 @@
70 83
       };
71 84
     },
72 85
     methods: {
86
+			viewSpe(item, tubeTypeId){
87
+				this.speNumChange = item.speNum;
88
+				this.changeSpeObj = {
89
+				  infoDATA: this.msg,
90
+				  id: item.deptId,
91
+				  endDepts:this.msg.targetDept,
92
+				}
93
+				uni.navigateTo({
94
+				  url: `../../pages/specimenCheckingDetail/specimenCheckingDetail?infoDATA=${encodeURIComponent(JSON.stringify(this.changeSpeObj.infoDATA))}&id=${this.changeSpeObj.id}&endDepts=${this.changeSpeObj.endDepts}&tubeTypeId=${tubeTypeId}`,
95
+				});
96
+			},
73 97
       //确认数量并建单-返回
74 98
       know() {
75 99
         this.models.disjunctor = false;
@@ -494,6 +518,14 @@
494 518
   };
495 519
 </script>
496 520
 <style lang="less" scoped>
521
+	/deep/ .uni-collapse-item--border{
522
+		border-bottom-color: #fff !important;
523
+	}
524
+	
525
+	/deep/ .uni-collapse-item__title-arrow{
526
+		margin-right: 0 !important;
527
+	}
528
+	
497 529
   .specimenChecking {
498 530
     padding-bottom: 100rpx;
499 531
 
@@ -572,64 +604,92 @@
572 604
         }
573 605
 
574 606
         .page_item_top {
575
-          height: 88rpx;
607
+          // height: 88rpx;
576 608
           // border-bottom: 2rpx dashed #e5e9ed;
577
-          padding: 0 16rpx;
578
-
579
-          .page_item_top-inner {
580
-            display: flex;
581
-            justify-content: space-between;
582
-            align-items: center;
583
-            height: 100%;
584
-
585
-            .page_item_top_L {
586
-              .emergencys {
587
-                background: #ff3b53 !important;
588
-                width: 124rpx !important;
589
-              }
590
-
591
-              .emergency {
592
-                background: #ff3b53 !important;
593
-              }
594
-
595
-              .emergency1 {
596
-                background: #49b856 !important;
597
-              }
598
-
599
-              .page_item_cont_start {
600
-                text-align: center;
601
-                height: 44rpx;
602
-                width: 104rpx;
603
-                line-height: 44rpx;
604
-                border-radius: 8rpx;
605
-                background: #49b856;
606
-                color: #fff;
607
-                display: inline-block;
608
-              }
609
-
610
-              .L_time {
611
-                color: #6cc076;
612
-                font-size: 32rpx;
613
-              }
614
-
615
-              .L_text {
616
-                font-size: 32rpx;
617
-                font-weight: 700;
618
-              }
619
-            }
620
-
621
-            .page_item_top_R {
622
-              font-size: 32rpx;
623
-
624
-              .L_iocn {
625
-                color: rgb(7, 134, 60);
626
-                font-size: 36rpx;
627
-                font-weight: 700;
628
-              }
629
-            }
630
-          }
609
+          padding: 20rpx 16rpx;
610
+					
611
+					.page_item_cont_title_coll{
612
+						display: flex;
613
+						justify-content: space-between;
614
+						align-items: center;
615
+						margin-right: 8rpx;
616
+						
617
+						.page_item_top-inner {
618
+						  display: flex;
619
+						  justify-content: space-between;
620
+						  align-items: center;
621
+						  height: 100%;
622
+							width: 100%;
623
+							
624
+						  .page_item_top_L {
625
+						    .emergencys {
626
+						      background: #ff3b53 !important;
627
+						      width: 124rpx !important;
628
+						    }
629
+						
630
+						    .emergency {
631
+						      background: #ff3b53 !important;
632
+						    }
633
+						
634
+						    .emergency1 {
635
+						      background: #49b856 !important;
636
+						    }
637
+						
638
+						    .page_item_cont_start {
639
+						      text-align: center;
640
+						      height: 44rpx;
641
+						      width: 104rpx;
642
+						      line-height: 44rpx;
643
+						      border-radius: 8rpx;
644
+						      background: #49b856;
645
+						      color: #fff;
646
+						      display: inline-block;
647
+						    }
648
+						
649
+						    .L_time {
650
+						      color: #6cc076;
651
+						      font-size: 32rpx;
652
+						    }
653
+						
654
+						    .L_text {
655
+						      font-size: 32rpx;
656
+						      font-weight: 700;
657
+						    }
658
+						  }
659
+						
660
+						  .page_item_top_R {
661
+						    font-size: 32rpx;
662
+						
663
+						    .L_iocn {
664
+						      color: rgb(7, 134, 60);
665
+						      font-size: 36rpx;
666
+						      font-weight: 700;
667
+						    }
668
+						  }
669
+						}
670
+					}
671
+					
672
+					.content{
673
+						display: flex;
674
+						flex-wrap: wrap;
675
+						.list{
676
+							font-size: 28rpx;
677
+							height: 60rpx;
678
+							line-height: 60rpx;
679
+							width: 50%;
680
+							border-bottom: 1rpx solid #E6E6E6;
681
+							&:last-child{
682
+								border-bottom: none;
683
+							}
684
+						}
685
+					}
631 686
         }
632
-
687
+				
688
+				.underline-item{
689
+					// text-decoration: underline;
690
+					// margin-right: 40rpx;
691
+				}
692
+				
633 693
         .page_item_cont {
634 694
           min-height: 90rpx;
635 695
           padding: 0 16rpx;

+ 17 - 3
pages/specimenCheckingDetail/specimenCheckingDetail.vue

@@ -35,7 +35,7 @@
35 35
         <view class="page_item_cont">
36 36
           <view class="page_item_cont_T">
37 37
             <view class="page_item_cont_title">
38
-              <view style="width: 10em;"> {{item.stype ? item.stype.name : '无'}} </view>
38
+              <view style="width: 10em;"> {{item.stype ? item.stype.name : '无'}} <text v-if="item.tubeType">、</text> {{item.tubeType && item.tubeType.name}}</view>
39 39
               <view class="text_big">{{ item.scode || "无" }}</view>
40 40
             </view>
41 41
             <view class="page_item_cont_title">
@@ -64,7 +64,7 @@
64 64
       <view class="R-l"></view>
65 65
     </view>
66 66
     <view class="foot_btn2">
67
-      <view class="btn2" @click="showChangeSpe()">修改数量</view>
67
+      <view class="btn2" @click="showChangeSpe()" v-if="!tubeTypeId">修改数量</view>
68 68
       <view class="btn2" @click="goto()">返回</view>
69 69
     </view>
70 70
     <!-- 修改标本数量弹窗 -->
@@ -122,6 +122,7 @@
122 122
         models: {
123 123
           disjunctor: false,
124 124
         },
125
+				tubeTypeId: null //试管类型
125 126
       };
126 127
     },
127 128
     methods: {
@@ -376,6 +377,7 @@
376 377
           checkDept: this.options.endDepts, //终点科室
377 378
           transDept: Number(this.msg.startDept), //起点科室id
378 379
           gdId: this.msg.uuid, //工单id或uuid
380
+					tubeTypeId: null //试管类型id
379 381
         };
380 382
         if (this.selectDeptId != "undefined") {
381 383
           if (Number(this.msg.startDept) != Number(this.selectDeptId)) {
@@ -385,6 +387,11 @@
385 387
             }
386 388
           }
387 389
         }
390
+				if(this.tubeTypeId){
391
+					postData.tubeTypeId = this.tubeTypeId
392
+				}else{
393
+					delete postData.tubeTypeId
394
+				}
388 395
         post(`/api/getTransDeptSpecimens`, postData).then((res) => {
389 396
           uni.hideLoading();
390 397
           uni.stopPullDownRefresh();
@@ -650,8 +657,15 @@
650 657
     onLoad(options) {
651 658
       console.log(options, "快捷建单");
652 659
       this.options = options;
653
-      this.msg = JSON.parse(options.infoDATA);
660
+			if(options.infoDATA){
661
+				this.msg = JSON.parse(options.infoDATA);
662
+			}
654 663
       this.selectDeptId = options.id;
664
+			if(options.tubeTypeId){
665
+				this.tubeTypeId = options.tubeTypeId
666
+			}else{
667
+				this.tubeTypeId = null
668
+			}
655 669
       // this.msg = JSON.parse(options.infoDATA);
656 670
       // this.targetDeptShow = this.msg.targetDeptShow.split(",");
657 671
       this.getList();

+ 39 - 7
pages/specimenHandoverNew/specimenHandoverNew.vue

@@ -25,6 +25,14 @@
25 25
           <view class="name" v-if="type === 'specimenDesc'">
26 26
             项目名称<text class="red">({{typeList.specimenDesc.titleCount}})</text>
27 27
           </view>
28
+					<view class="name" v-if="type === 'speTubeType'">
29
+					  试管类型<text class="red">({{typeList.speTubeType.titleCount}})</text>
30
+					</view>
31
+					<view class="value" v-if="type === 'speTubeType'">
32
+					  <view>
33
+					    标本数量<text class="red">({{typeList.speTubeType.count}})</text>
34
+					  </view>
35
+					</view>
28 36
           <view class="value" v-if="type === 'patient'">
29 37
             <view>
30 38
               标本数量<text class="red">({{typeList.patient.count}})</text>
@@ -44,7 +52,17 @@
44 52
             <view class="name" v-if="type === 'specimenDesc'">
45 53
               {{item.specimen_desc}}
46 54
             </view>
47
-            <view class="value">
55
+						<view class="name" v-if="type === 'speTubeType'">
56
+						  {{item.tubeTypeName}}
57
+						</view>
58
+						
59
+						<view class="value" v-if="type === 'speTubeType'">
60
+						  <view>
61
+						    {{item.count}}
62
+						  </view>
63
+						</view>
64
+						
65
+            <view class="value" v-if="type != 'speTubeType'">
48 66
               <view>
49 67
                 {{item.count}}
50 68
               </view>
@@ -87,6 +105,12 @@
87 105
             count: 0,
88 106
             titleCount: 0,
89 107
           },
108
+					"speTubeType":{
109
+						id: -3,
110
+						name: '试管类型',
111
+						count: 0,
112
+						titleCount: 0,
113
+					},
90 114
           "specimenDesc": {
91 115
             id: -2,
92 116
             name: '检验项目',
@@ -246,7 +270,7 @@
246 270
       },
247 271
       clickTab(key){
248 272
         this.type = key;
249
-        this.initData();
273
+				this.getInfo(key);
250 274
       },
251 275
       onClick(){
252 276
         this.allStart();
@@ -272,6 +296,7 @@
272 296
             this.typeList[type].titleCount = result.title || 0;
273 297
             if(this.type === type){
274 298
               this.dataList = result.data || [];
299
+							console.log(7777,this.dataList)
275 300
             }
276 301
           } else {
277 302
             uni.showToast({
@@ -283,7 +308,8 @@
283 308
       },
284 309
       initData(){
285 310
         this.getInfo('patient');
286
-        this.getInfo('specimenDesc');
311
+				// this.getInfo('speTubeType');
312
+    //     this.getInfo('specimenDesc');
287 313
       },
288 314
     },
289 315
 		onShow(){
@@ -292,7 +318,7 @@
292 318
 			// #endif
293 319
 		},
294 320
     onLoad(options) {
295
-      console.log(options, "result");
321
+      console.log(JSON.parse(options.model), "result");
296 322
       this.queryObj = options;
297 323
       this.initData();
298 324
       // #ifdef APP-PLUS
@@ -306,7 +332,7 @@
306 332
 </script>
307 333
 <style lang="less" scoped>
308 334
   .Scanning_Result {
309
-    height: 100vh;
335
+    height: 98vh;
310 336
     display: flex;
311 337
     flex-direction: column;
312 338
     background-color: #fafbfd;
@@ -410,6 +436,11 @@
410 436
             border-bottom: none;
411 437
             flex-shrink: 0;
412 438
           }
439
+					
440
+					.underline{
441
+						text-decoration: underline;
442
+					}
443
+					
413 444
           .name,
414 445
           .value{
415 446
             padding: 0 40rpx;
@@ -430,11 +461,12 @@
430 461
       line-height: 66rpx;
431 462
       display: flex;
432 463
       justify-content: center;
433
-
464
+			padding: 0 20rpx;
465
+			
434 466
       .btn {
435 467
         height: 66rpx;
436 468
         flex: 1;
437
-        margin-right: 1%;
469
+        margin-right: 4%;
438 470
         background-image: linear-gradient(to right, #72c172, #3bb197);
439 471
         color: #fff;
440 472
         border-radius: 8rpx;

+ 11 - 8
pages/specimenOrderComplete/specimenOrderComplete.vue

@@ -12,13 +12,15 @@
12 12
     <view class="Scanning_cont">
13 13
       <view>您已到达{{queryObj.deptName}},请核对以下数量</view>
14 14
       <view class="table_head">
15
-        <view>科室</view>
16
-        <view>是否配送完成</view>
15
+        <view>科室名称</view>
16
+				<view>标本数量</view>
17
+        <view>是否签到</view>
17 18
       </view>
18 19
       <view class="table_bodys">
19 20
         <view class="table_body" v-for="(item, index) in dataList" :key="index">
20 21
           <view>{{item.dept}}</view>
21
-          <view :class="{red: item.all != item.complete}">{{item.all == item.complete ? '是' : '否'}}</view>
22
+					<view>{{item.complete}}/{{item.all}}</view>
23
+          <view :class="item.all != item.complete ? 'red' : 'green'">{{item.all == item.complete ? '是' : '否'}}</view>
22 24
         </view>
23 25
       </view>
24 26
     </view>
@@ -101,6 +103,9 @@
101 103
   };
102 104
 </script>
103 105
 <style lang="less" scoped>
106
+	.green{
107
+		color: #35b34a !important;
108
+	}
104 109
   .Scanning_Result {
105 110
     padding: 0 20rpx;
106 111
     display: flex;
@@ -175,17 +180,15 @@
175 180
       }
176 181
 
177 182
       .table_body{
178
-        background: #F3FAF7;
179
-        border-radius: 8px;
180
-        border: 1px solid #E9E9E9;
183
+        // background: #F3FAF7;
184
+        border-bottom: 1px solid #E9E9E9;
181 185
         display: flex;
182
-        margin-bottom: 20rpx;
183 186
         padding: 30rpx 20rpx;
184 187
         view {
185 188
           line-height: 1;
186 189
           flex: 1;
187 190
           color: #555;
188
-          font-size: 38rpx;
191
+          font-size: 28rpx;
189 192
           display: flex;
190 193
           justify-content: center;
191 194
           align-items: center;

+ 329 - 0
pages/viewSpe/viewSpe.vue

@@ -0,0 +1,329 @@
1
+<template>
2
+  <view class="pharmacyDetails">
3
+    <view class="pharmacyDetails_title">检验科室标本信息</view>
4
+    <view class="page_item footerOtherMargin">
5
+      <view class="page_item_wrap" v-for="(spe, i) in specimens" :key="spe.id">
6
+        <specimenListItem :i="i" :item="spe"></specimenListItem>
7
+        <view class="L-l"></view>
8
+        <view class="R-l"></view>
9
+      </view>
10
+    </view>
11
+    <view class="foot_btn2 footerPadding">
12
+      <view class="btn2" @click="goBack">返回</view>
13
+    </view>
14
+  </view>
15
+</template>
16
+<script>
17
+  import {
18
+    post,
19
+    webHandle
20
+  } from "../../http/http.js";
21
+  export default {
22
+    data() {
23
+      return {
24
+        queryObj: {}, //路由传递过来的数据
25
+        isScan: false,//true是已扫描标本,false是未扫描标本
26
+        workOrderId: -1,
27
+        deptCode: '',
28
+        specimens: [],
29
+      };
30
+    },
31
+    methods: {
32
+      // 返回
33
+      goBack() {
34
+        uni.navigateBack();
35
+      },
36
+      // 获取已扫描或未扫描标本信息
37
+      getNoScanSpecimen(isScan) {
38
+        let postData = {
39
+          gdIds: this.workOrderId,
40
+          currentPage: 0,
41
+          pageSize: 999,
42
+					tubeTypeId:this.tubeTypeId
43
+        };
44
+        
45
+        if(this.queryObj.specimensCheck){
46
+          //标本核对页面过来的
47
+          if(this.queryObj.deptName){
48
+            // 标本核对,已扫描总数
49
+            postData.deptQrCode = this.deptCode||undefined;
50
+            postData.specimensCheck = 1;
51
+          }
52
+        }else{
53
+          postData.deptQrCode = this.deptCode||undefined;
54
+        }
55
+        // 是否是已扫描
56
+        if(isScan && !this.queryObj.noScan){
57
+          // 显示已扫描,但添加scanned参数
58
+          postData.scanned = 1;
59
+        }
60
+        uni.showLoading({
61
+          title: "加载中",
62
+          mask: true,
63
+        });
64
+        post("/api/noScanSpecimenData", postData).then((res) => {
65
+          uni.hideLoading();
66
+          if (res.data) {
67
+            this.specimens = res.data;
68
+          }
69
+        });
70
+      },
71
+    },
72
+    onLoad(options) {
73
+      console.log(options);
74
+      this.queryObj = options;
75
+      this.workOrderId = JSON.parse(options.workOrderId);
76
+      this.deptCode = options.deptCode;
77
+			this.tubeTypeId = options.tubeTypeId;
78
+      this.isScan = Boolean(options.isScan);
79
+      this.getNoScanSpecimen(this.isScan);
80
+      // #ifdef APP-PLUS
81
+      webHandle("no", "app");
82
+      // #endif
83
+      // #ifdef H5
84
+      webHandle("no", "wx");
85
+      // #endif
86
+    },
87
+  };
88
+</script>
89
+<style lang="less" scoped>
90
+  .pharmacyDetails {
91
+    background-color: rgb(249, 250, 251);
92
+    padding-top: 50rpx;
93
+    height: 100%;
94
+    box-sizing: border-box;
95
+
96
+    .pharmacyDetails_title {
97
+      font-size: 46rpx;
98
+      font-weight: 550;
99
+      text-align: center;
100
+    }
101
+
102
+    .page_item_wrap {
103
+      position: relative;
104
+      margin-top: 32rpx;
105
+
106
+      .page_item {
107
+        margin-top: 16rpx;
108
+        margin-bottom: 124rpx;
109
+        background: #fff;
110
+        border-radius: 8rpx;
111
+        margin: 0 20rpx;
112
+        border: 2rpx solid #e5e9ed;
113
+        position: relative;
114
+        overflow: hidden;
115
+        padding: 0 16rpx;
116
+
117
+        .L {
118
+          width: 40rpx;
119
+          height: 40rpx;
120
+          border-radius: 50%;
121
+          background: #f9fafb;
122
+          position: absolute;
123
+          left: -20rpx;
124
+          top: 68rpx;
125
+          border: 2rpx solid #e5e9ed;
126
+        }
127
+
128
+        .R {
129
+          width: 40rpx;
130
+          height: 40rpx;
131
+          border-radius: 50%;
132
+          background: #f9fafb;
133
+          position: absolute;
134
+          float: right;
135
+          right: -20rpx;
136
+          top: 68rpx;
137
+          border: 2rpx solid #e5e9ed;
138
+        }
139
+
140
+        .page_item_top {
141
+          height: 88rpx;
142
+          border-bottom: 2rpx dashed #e5e9ed;
143
+          padding: 0 16rpx;
144
+
145
+          .page_item_top-inner {
146
+            display: flex;
147
+            justify-content: space-between;
148
+            align-items: center;
149
+            height: 100%;
150
+
151
+            .page_item_top_L {
152
+              .L_text {
153
+                font-size: 32rpx;
154
+                font-weight: 700;
155
+              }
156
+            }
157
+
158
+            .page_item_top_R {
159
+              font-size: 32rpx;
160
+
161
+              .L_iocn {
162
+                color: rgb(7, 134, 60);
163
+                font-size: 36rpx;
164
+                font-weight: 700;
165
+              }
166
+            }
167
+          }
168
+        }
169
+
170
+        .page_item_cont {
171
+          min-height: 90rpx;
172
+          padding: 0 16rpx;
173
+          text-align: left;
174
+          position: relative;
175
+
176
+          .text_big {
177
+            font-size: 32rpx;
178
+            font-weight: 700;
179
+            margin-top: 10rpx;
180
+          
181
+            p {
182
+              font-weight: 700;
183
+              line-height: 1.5;
184
+            }
185
+          }
186
+
187
+          .line {
188
+            height: 20rpx;
189
+            width: 2rpx;
190
+            border-left: 2rpx solid #e5e9ed;
191
+            position: absolute;
192
+            top: 82rpx;
193
+            left: 40rpx;
194
+          }
195
+
196
+          .page_item_cont_T {
197
+            padding-top: 28rpx;
198
+            padding-bottom: 28rpx;
199
+            font-size: 28rpx;
200
+
201
+            .page_item_cont_title {
202
+              height: 100%;
203
+              font-size: 32rpx;
204
+              display: flex;
205
+              justify-content: space-between;
206
+              align-items: center;
207
+            }
208
+          }
209
+
210
+          .page_item_cont_B {
211
+            padding-top: 28rpx;
212
+            margin-bottom: 28rpx;
213
+
214
+            .page_item_cont_title {
215
+              font-size: 32rpx;
216
+              display: flex;
217
+              justify-content: space-between;
218
+              align-items: center;
219
+            }
220
+          }
221
+
222
+          .page_item_cont_C {
223
+            margin-bottom: 28rpx;
224
+
225
+            .page_item_cont_title_C {
226
+              font-size: 32rpx;
227
+              display: flex;
228
+              justify-content: space-between;
229
+              align-items: center;
230
+            }
231
+          }
232
+
233
+          #infos {
234
+            display: none;
235
+          }
236
+        }
237
+      }
238
+
239
+      .L-l {
240
+        width: 2rpx;
241
+        height: 40rpx;
242
+        background: #f9fafb;
243
+        position: absolute;
244
+        left: 20rpx;
245
+        top: 72rpx;
246
+      }
247
+
248
+      .R-l {
249
+        width: 2rpx;
250
+        height: 40rpx;
251
+        background: #f9fafb;
252
+        position: absolute;
253
+        right: 20rpx;
254
+        top: 72rpx;
255
+      }
256
+    }
257
+
258
+    .cube-toolbar-item {
259
+      width: 710rpx;
260
+      height: 68rpx;
261
+      line-height: 68rpx;
262
+      position: fixed;
263
+      left: 20rpx;
264
+      bottom: 160rpx;
265
+      border-radius: 8rpx;
266
+      background: linear-gradient(to right, #72c172, #3bb197);
267
+      font-size: 36rpx;
268
+      color: #fff;
269
+      text-align: center;
270
+    }
271
+
272
+    .btn-wrap {
273
+      display: flex;
274
+      justify-content: space-between;
275
+      position: fixed;
276
+      left: 20rpx;
277
+      bottom: 160rpx;
278
+    }
279
+
280
+    .cube-toolbar-item1 {
281
+      width: 350rpx;
282
+      height: 68rpx;
283
+      line-height: 68rpx;
284
+      border-radius: 8rpx;
285
+      margin: 0 5rpx;
286
+      background: linear-gradient(to right, #72c172, #3bb197);
287
+      font-size: 36rpx;
288
+      color: #fff;
289
+      text-align: center;
290
+    }
291
+
292
+    .foot_btn2 {
293
+      position: fixed;
294
+      bottom: 0;
295
+      right: 20rpx;
296
+      left: 20rpx;
297
+      line-height: 66rpx;
298
+      height: 100rpx;
299
+      border-top: 2rpx solid #e5e9ed;
300
+      background: #f9fafb;
301
+      display: flex;
302
+      justify-content: space-between;
303
+
304
+      .btn2 {
305
+        height: 66rpx;
306
+        width: 100%;
307
+        margin: 0 1%;
308
+        background-image: linear-gradient(to right, #72c172, #3bb197);
309
+        color: #fff;
310
+        border-radius: 8rpx;
311
+        font-size: 32rpx;
312
+        margin-top: 16rpx;
313
+        text-align: center;
314
+      }
315
+
316
+      .btn3 {
317
+        height: 66rpx;
318
+        width: 48%;
319
+        margin: 0 1%;
320
+        background-image: linear-gradient(to right, #72c172, #3bb197);
321
+        color: #fff;
322
+        border-radius: 8rpx;
323
+        font-size: 32rpx;
324
+        margin-top: 16rpx;
325
+        text-align: center;
326
+      }
327
+    }
328
+  }
329
+</style>