Browse Source

拉取代码

maotao 2 weeks ago
parent
commit
cb992f1539

+ 15 - 4
components/bigScreen/bigScreen.vue

@@ -392,10 +392,21 @@
392 392
       },
393 393
       // 底部扫描
394 394
       Scanning(qrcodePrefix = '') {
395
-				// this.ScanningCommon('', '250515541895@_1');
396
-        if (!this.SMFlag) {
397
-          return;
398
-        }
395
+				// 标本码
396
+				// this.ScanningCommon('', '250516486743@_1');
397
+				
398
+				// 快捷建单-轮巡工单码
399
+				// this.ScanningCommon('', '3330ec8e-76eb-413e-b000-995f08d2ff96');
400
+				
401
+				// 中转科室码--金银湖流转中心
402
+				// this.ScanningCommon('', '7d047a94-e102-446c-b477-94f977faaebd');
403
+				
404
+				// 终点科室核对码--本部住院检验科
405
+				// this.ScanningCommon('', '95c5de27-c05f-11ea-8cfe-000c29097622');
406
+				
407
+        // if (!this.SMFlag) {
408
+        //   return;
409
+        // }
399 410
         this.SMFlag = false;
400 411
         SM().then((content) => {
401 412
           this.ScanningCommon(qrcodePrefix, content);

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

+ 3 - 4
manifest.json

@@ -1,5 +1,5 @@
1 1
 {
2
-    /* "name" : "病理全流程", */
2
+    // "name" : "大势科技",
3 3
     "name" : "",
4 4
     "appid" : "__UNI__9F2011E",
5 5
     "description" : "",
@@ -123,9 +123,8 @@
123 123
             "disableHostCheck" : true,
124 124
             "proxy" : {
125 125
                 "/service" : {
126
-                    "target" : "http://192.168.3.108", //请求的目标域名
127
-
128
-                    // "target" : "http://192.168.4.163", //宋程玉本地
126
+                    // "target" : "http://192.168.3.108", //请求的目标域名
127
+                    "target" : "http://192.168.4.163", //宋程玉本地
129 128
                     "changeOrigin" : true, //是否跨域
130 129
                     "secure" : false
131 130
                 }

+ 8 - 0
pages.json

@@ -760,6 +760,14 @@
760 760
 		      "titleNView": false
761 761
 		    }
762 762
 		  }
763
+		},
764
+		{
765
+		  "path": "pages/viewSpe/viewSpe",
766
+		  "style": {
767
+		    "h5": {
768
+		      "titleNView": false
769
+		    }
770
+		  }
763 771
 		}
764 772
   ],
765 773
   "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`,
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;

+ 122 - 0
pages/receipt_infopage/receipt_infopage.vue

@@ -420,6 +420,9 @@
420 420
           infoDATA.taskType.associationType.value == 'specimen' ||
421 421
           infoDATA.taskType.associationType.value == 'specimenPlan'
422 422
         " hover-class="seimin-btn-hover">查看标本</view>
423
+			
424
+			<view class="btn3" @click="redeployScan(infoDATA)" v-if="(infoDATA.taskType.associationType.value == 'specimen' ||
425
+			    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>
423 426
       <view class="btn3" @click="viewDrugsBag(infoDATA)" v-if="infoDATA.taskType.associationType.value == 'drugsBag'" hover-class="seimin-btn-hover">查看业务流程</view>
424 427
       <view class="btn3" @click="toDrugBatches(infoDATA.drugs.batchNo)" v-if="infoDATA.taskType.associationType.value == 'drugsBag' && taskTypeConfig.drugsBatchInfo == 1" hover-class="seimin-btn-hover">药品批次</view>
425 428
       <view class="btn3" @click="viewBlood(infoDATA)" v-if="infoDATA.taskType.associationType.value == 'ordinary' && infoDATA.taskType.ordinaryField.value == 'blood'" hover-class="seimin-btn-hover">查看血制品</view>
@@ -449,6 +452,13 @@
449 452
     </checkboxModal>
450 453
 		<!-- PDA扫描 -->
451 454
 		<scanner></scanner>
455
+		<!-- 标本转派 -->
456
+		<uni-popup ref="alertDialog" type="dialog" :mask-click="false">
457
+			<uni-popup-dialog type="info" cancelText="否" confirmText="是" title="提示" @confirm="dialogConfirm"
458
+				@close="dialogClose">
459
+				<text v-html="speContent"></text>
460
+			</uni-popup-dialog>
461
+		</uni-popup>
452 462
   </view>
453 463
 </template>
454 464
 <script>
@@ -518,6 +528,9 @@
518 528
         // 特殊情况关闭原因开关
519 529
         textareaFlag: false,
520 530
         textareaText: "",
531
+				tasktype: null,
532
+				sPehandoverOrder: null ,//是否转派
533
+				speContent: null,
521 534
       };
522 535
     },
523 536
     filters: {
@@ -1076,6 +1089,68 @@
1076 1089
           url: "../receiptpage/receiptpage",
1077 1090
         });
1078 1091
       },
1092
+			// 转派
1093
+			redeployScan(workOrder){
1094
+				if (!this.SMFlag) {
1095
+				  return;
1096
+				}
1097
+				this.SMFlag = false;
1098
+				SM().then((content) => {
1099
+				  uni.showLoading({
1100
+				    title: "加载中",
1101
+				    mask: true,
1102
+				  });
1103
+					// let content = '3262'
1104
+				  post("/workerOrder/transfer ", {
1105
+							handoverId: content,
1106
+							orderId: workOrder.id
1107
+				    })
1108
+				    .then((result) => {
1109
+				      this.SMFlag = true;
1110
+							uni.hideLoading();
1111
+				      if (result.state == 205) {
1112
+								this.speContent = result.msg
1113
+								this.handoverId = content
1114
+				        this.$refs.alertDialog.open()
1115
+				      }else{
1116
+								uni.showToast({
1117
+								  icon: "none",
1118
+								  title: result.msg,
1119
+								});
1120
+							} 
1121
+				    })
1122
+				}).catch(err => {
1123
+				  this.SMFlag = true;
1124
+				});
1125
+			},
1126
+			dialogConfirm() {
1127
+				uni.showLoading({
1128
+				  title: "加载中",
1129
+				  mask: true,
1130
+				});
1131
+				post("/workerOrder/transfer ", {
1132
+						handoverId: this.handoverId,
1133
+						orderId: this.infoDATA.id,
1134
+						transferOrder: 1
1135
+				  })
1136
+				.then((result) => {
1137
+					this.SMFlag = true;
1138
+					uni.hideLoading();
1139
+					if (result.state == 200) {
1140
+						uni.showToast({
1141
+						  icon: "none",
1142
+						  title: result.info || "转派成功",
1143
+						});
1144
+						setTimeout(_=>{
1145
+							this.goBack()
1146
+						},2000)
1147
+					} 
1148
+				})
1149
+			},
1150
+			dialogClose() {
1151
+				this.$refs.alertDialog.close()
1152
+				this.speContent = null
1153
+			},
1079 1154
       // 查看标本
1080 1155
       viewSpecimen(workOrder) {
1081 1156
         uni.navigateTo({
@@ -1580,6 +1655,51 @@
1580 1655
           }
1581 1656
         });
1582 1657
       },
1658
+			// 获取标本是否转派配置
1659
+			getSpeTaskConfig(){
1660
+				let postData = {
1661
+					idx: 0,
1662
+					sum: 10,
1663
+					taskType: {
1664
+						simpleQuery: true,
1665
+						hosId: {
1666
+							id: this.hosId
1667
+						},
1668
+						ordinaryField: {
1669
+							key:"ordinary_field",
1670
+							value: "specimenPackage"
1671
+						}
1672
+					}
1673
+				};
1674
+				 
1675
+				post("/simple/data/fetchDataList/taskType", postData).then((result) => {
1676
+					if (result.status == 200) {
1677
+						this.tasktype = result.list[0] || {};
1678
+						this.getSpeConfig();
1679
+					}
1680
+				});
1681
+			},
1682
+			// 获取配置
1683
+			getSpeConfig() {
1684
+				let postData = {
1685
+					idx: 0,
1686
+					sum: 10,
1687
+					taskTypeConfig: {
1688
+						taskTypeDTO: {
1689
+							hosId: {
1690
+								id: this.hosId
1691
+							},
1692
+							ordinaryField: this.tasktype.ordinaryField
1693
+						}
1694
+					}
1695
+				};;
1696
+			  post("/simple/data/fetchDataList/taskTypeConfig", postData).then((result) => {
1697
+					if (result.status == 200) {
1698
+						this.configs = result.list[0] || {};
1699
+						this.sPehandoverOrder = this.configs.handoverOrder || null;
1700
+					}
1701
+			  });
1702
+			},
1583 1703
       // 获取检查页面控制开关
1584 1704
       getTaskConfig(){
1585 1705
         post("/simple/data/fetchDataList/taskTypeConfig", {
@@ -1861,6 +1981,8 @@
1861 1981
         options.associationTypeValue == 'specimen' ||
1862 1982
         options.associationTypeValue == 'specimenPlan'
1863 1983
       ) {
1984
+				// 到达 送达 执行中
1985
+				this.getSpeTaskConfig();
1864 1986
         this.getInfoBySpecimen(id);
1865 1987
       } else {
1866 1988
         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>

+ 62 - 44
pages/scanning_Result/scanning_Result.vue

@@ -38,48 +38,51 @@
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"><view class="width-100">编码:</view> <text class="red">{{infoDATA.urgent==1?'急':''}}</text> {{infoDATA.scode}} {{infoDATA.speState && infoDATA.speState.name}}</view>
42
+      <view class="df"><view class="width-100">检验项目:</view> {{ infoDATA.specimenDesc || "-" }}</view>
43
+			<view class="df"><view class="width-100">类型:</view>{{ infoDATA.stype.name }} <text v-if="infoDATA.tubeType">、</text> {{infoDATA.tubeType && infoDATA.tubeType.name}}</view>
44
+      <view class="df">
45
+				<view class="width-100">科室:</view>
44 46
         {{ 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>
47
+        <text class="newicon newicon-arrow-right-full"></text>
46 48
         <text :class="{ red: isEndDeptRedShow }">{{ infoDATA.checkDept ? infoDATA.checkDept.dept : "" }}</text>
47 49
       </view>
48
-      <view>患者姓名 : {{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
49
-      <view>住院号 : {{ infoDATA.residenceNo || '-' }}</view>
50
+      <view class="df"><view class="width-100">患者姓名:</view>{{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
51
+      <view class="df"><view class="width-100">住院号:</view>{{ infoDATA.residenceNo || '-' }}</view>
50 52
     </view>
51 53
 
52 54
     <view class="Scanning_cont" v-if="
53 55
         (res.status == 11111 && type == 'specimenPlan') ||
54 56
         (res.status == 11111 && type == 'specimen')
55 57
       ">
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>
58
+			<view class="df"><view class="width-100">编码:</view> <text class="red">{{infoDATA.urgent==1?'急':''}}</text> {{infoDATA.scode}} {{infoDATA.speState && infoDATA.speState.name}}</view>
59
+			<view class="df"><view class="width-100">检验项目:</view> {{ infoDATA.specimenDesc || "-" }}</view>
60
+			<view class="df"><view class="width-100">类型:</view>{{ infoDATA.stype.name }} <text v-if="infoDATA.tubeType">、</text> {{infoDATA.tubeType && infoDATA.tubeType.name}}</view>
61
+			<view class="df">
62
+				<view class="width-100">科室:</view>
63
+			  {{ infoDATA.sickRoom ? infoDATA.sickRoom.dept : "" }}
64
+			  <text class="newicon newicon-arrow-right-full"></text>
65
+			  <text :class="{ red: isEndDeptRedShow }">{{ infoDATA.checkDept ? infoDATA.checkDept.dept : "" }}</text>
66
+			</view>
67
+			<view class="df"><view class="width-100">患者姓名:</view>{{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
68
+			<view class="df"><view class="width-100">住院号:</view>{{ infoDATA.residenceNo || '-' }}</view>
66 69
     </view>
67 70
 
68 71
     <view class="Scanning_cont" v-if="
69 72
         (res.status == 200 && type == 'inspect') || type == 'patientTransport'
70 73
       ">
71
-      <view v-if="res.patient"> 患者姓名 : {{ res.patient || "-" }} </view>
72
-      <view v-if="res.residenceNo">
73
-        住院号 : {{ res.residenceNo || "-" }}
74
+      <view class="df" v-if="res.patient"> <view class="width-100">患者姓名:</view> {{ res.patient || "-" }} </view>
75
+      <view class="df" v-if="res.residenceNo">
76
+        <view class="width-100">住院号:</view> {{ res.residenceNo || "-" }}
74 77
       </view>
75
-      <view v-if="res.deptName">
76
-        住院科室 : {{ res.deptName !== "undefined" ? res.deptName : "-" }}
78
+      <view class="df" v-if="res.deptName">
79
+        <view class="width-100">住院科室:</view> {{ res.deptName !== "undefined" ? res.deptName : "-" }}
77 80
       </view>
78
-      <view v-if="res.bedNum">
79
-        床号 : {{ res.bedNum !== "undefined" ? res.bedNum : "-" }}
81
+      <view class="df" v-if="res.bedNum">
82
+        <view class="width-100">床号:</view> {{ res.bedNum !== "undefined" ? res.bedNum : "-" }}
80 83
       </view>
81
-      <view v-if="res.data">
82
-        检查项目 :
84
+      <view class="df" v-if="res.data">
85
+        <view class="width-100">检查项目:</view>
83 86
         <text v-for="(data, i) in res.data" :key="i">{{
84 87
           data.inspectName
85 88
         }}</text>
@@ -106,18 +109,18 @@
106 109
       </view>
107 110
     </view>
108 111
     <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
112
+      <view class="df"> <view class="width-100">药包类型:</view>  {{(infoDATA.packType && infoDATA.packType !== 0) ? DRUGSBAG_TYPE[infoDATA.packType] : "-"}} </view>
113
+      <view class="df" v-if="type == 'drugsBag'"> <view class="width-100">药包编码:</view>  #{{ infoDATA.packid }} </view>
114
+      <view class="df"
112 115
         v-if="type == 'drugsBag' && accountObj && (queryObj.type1 === 'drug-ddd-2' || queryObj.type1 === 'drug-dsd-2')">
113
-        交接人工号 : {{ accountObj.account }} </view>
114
-      <view
116
+        <view class="width-100">交接人工号:</view>  {{ accountObj.account }} </view>
117
+      <view class="df"
115 118
         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 }}
119
+        <view class="width-100">交接人姓名:</view>  {{ accountObj.accountName }} </view>
120
+      <view class="df"v-if="type == 'jPBag'">
121
+        <view class="width-100">静配药包编码:</view>  #{{ infoDATA.packid }}
119 122
       </view>
120
-      <view> 所属科室 : {{ infoDATA.target.dept || "-" }} </view>
123
+      <view class="df"> <view class="width-100">所属科室:</view>  {{ infoDATA.target.dept || "-" }} </view>
121 124
       <view v-if="infoType === 'drug-dsd-2' || infoType === 'jp-dsd-2'">
122 125
         工单已完成。
123 126
       </view>
@@ -1280,13 +1283,15 @@
1280 1283
 <style lang="less">
1281 1284
   .Scanning_Result {
1282 1285
     padding: 0 20rpx;
1283
-
1286
+		height: 96vh;
1287
+		position: relative;
1288
+		
1284 1289
     .Scanning_top {
1285 1290
       .Scanning_top_icon {
1286 1291
         width: 140rpx;
1287 1292
         height: 140rpx;
1288 1293
         margin: 0 auto;
1289
-        margin-top: 116rpx;
1294
+        margin-top: 40rpx;
1290 1295
         border-radius: 50%;
1291 1296
         line-height: 140rpx;
1292 1297
 
@@ -1321,12 +1326,23 @@
1321 1326
 
1322 1327
     .Scanning_cont {
1323 1328
       font-size: 32rpx;
1324
-      text-align: center;
1325
-
1326
-      view {
1327
-        margin-bottom: 16rpx;
1328
-      }
1329
-
1329
+      // text-align: center;
1330
+			margin-top: 40rpx;
1331
+			.df{
1332
+				display: flex;
1333
+				align-items: center;
1334
+				margin-bottom: 14rpx;
1335
+				
1336
+				.newicon{
1337
+					margin: 0 8rpx;
1338
+				}
1339
+			}
1340
+			
1341
+			.width-100{
1342
+				width: 160rpx;
1343
+				font-weight: 600;
1344
+			}
1345
+			
1330 1346
       .Scanning_cont_center {
1331 1347
         text-align: center;
1332 1348
       }
@@ -1366,12 +1382,14 @@
1366 1382
     .foot_btn_spe {
1367 1383
       line-height: 88rpx;
1368 1384
       height: 100rpx;
1369
-      margin-top: 40rpx;
1385
+      // margin-top: 40rpx;
1370 1386
       text-align: center;
1371 1387
       display: flex;
1372 1388
       justify-content: space-between;
1373 1389
       flex-wrap: wrap;
1374
-
1390
+			position: absolute;
1391
+			bottom: 220rpx;
1392
+			
1375 1393
       &::after {
1376 1394
         content: '';
1377 1395
         flex: 1;

+ 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;

+ 16 - 2
pages/specimenCheckingDetail/specimenCheckingDetail.vue

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

+ 38 - 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.specimenDesc.titleCount}})</text>
30
+					</view>
31
+					<view class="value" v-if="type === 'speTubeType'">
32
+					  <view>
33
+					    标本数量<text class="red">({{typeList.patient.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();
@@ -283,7 +307,8 @@
283 307
       },
284 308
       initData(){
285 309
         this.getInfo('patient');
286
-        this.getInfo('specimenDesc');
310
+				// this.getInfo('speTubeType');
311
+    //     this.getInfo('specimenDesc');
287 312
       },
288 313
     },
289 314
 		onShow(){
@@ -292,7 +317,7 @@
292 317
 			// #endif
293 318
 		},
294 319
     onLoad(options) {
295
-      console.log(options, "result");
320
+      console.log(JSON.parse(options.model), "result");
296 321
       this.queryObj = options;
297 322
       this.initData();
298 323
       // #ifdef APP-PLUS
@@ -306,7 +331,7 @@
306 331
 </script>
307 332
 <style lang="less" scoped>
308 333
   .Scanning_Result {
309
-    height: 100vh;
334
+    height: 98vh;
310 335
     display: flex;
311 336
     flex-direction: column;
312 337
     background-color: #fafbfd;
@@ -410,6 +435,11 @@
410 435
             border-bottom: none;
411 436
             flex-shrink: 0;
412 437
           }
438
+					
439
+					.underline{
440
+						text-decoration: underline;
441
+					}
442
+					
413 443
           .name,
414 444
           .value{
415 445
             padding: 0 40rpx;
@@ -430,11 +460,12 @@
430 460
       line-height: 66rpx;
431 461
       display: flex;
432 462
       justify-content: center;
433
-
463
+			padding: 0 20rpx;
464
+			
434 465
       .btn {
435 466
         height: 66rpx;
436 467
         flex: 1;
437
-        margin-right: 1%;
468
+        margin-right: 4%;
438 469
         background-image: linear-gradient(to right, #72c172, #3bb197);
439 470
         color: #fff;
440 471
         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>