Bläddra i källkod

解决代码冲突

seimin 1 vecka sedan
förälder
incheckning
075dd1621e

+ 1 - 0
components/bigScreen/bigScreen.vue

@@ -510,6 +510,7 @@
510 510
       },
511 511
       // 底部扫描
512 512
       Scanning(qrcodePrefix = '') {
513
+				// this.ScanningCommon('', '250515541895@_1');
513 514
         if (!this.SMFlag) {
514 515
           return;
515 516
         }

+ 209 - 0
components/errorModel/errorModel.vue

@@ -0,0 +1,209 @@
1
+<template>
2
+  <view class="showModel" v-if="speDATA && speDATA.data">
3
+		<view class="showModel__wrap">
4
+			<view class="showModel__header">
5
+			  提示
6
+			</view>
7
+			<view class="content">
8
+				<view class="content-box">
9
+					<view class="icon">
10
+						<text class="red newicon newicon-guanbi1"></text>
11
+					</view>
12
+					<view class="list flex">
13
+						<view>条码:<text class="mar-rig" :class="speDATA.data.urgent==0?'green':'red'">{{speDATA.data.urgent==0?'普':'急'}}</text> {{speDATA.data.scode}}</view>
14
+						<view>{{speDATA.data.speState ? speDATA.data.speState.name : ''}}</view>
15
+					</view>
16
+					<view class="list">检查项目:{{ speDATA.data.specimenDesc || "-" }}</view>
17
+					<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>
18
+					<view class="list">患者:{{ speDATA.data.patientName}} <text v-if="speDATA.data.bedNum">({{speDATA.data.bedNum}})</text></view>
19
+					<view class="list">{{speDATA.data.sickRoom.dept}}
20
+					<text style="width: 4em;text-align: center;margin-left: 1em;margin-right: 1em;" class="newicon newicon-arrow-right-full"></text>
21
+					{{speDATA.data.checkDept.dept}}</view>
22
+					<view class="list weight">{{speDATA.msg}}</view>
23
+					<view class="list" v-if="speDATA.speVerifyType=='collectDept'
24
+					|| speDATA.speVerifyType=='testDept' || speDATA.speVerifyType=='tubeType'
25
+					|| speDATA.speVerifyType=='urgent'">
26
+						<checkbox-group @change="forceDeptInputBlur">
27
+						  <checkbox value="addConfig" :checked="addConfig" color="#49b856" />{{msg}}
28
+						</checkbox-group>
29
+					</view>
30
+				</view>
31
+			</view>
32
+			<view class="bottom">
33
+				<button class="bottom-btn confirm-btn" @click="confirm">是</button>
34
+				<button class="bottom-btn" @click="cancel">否</button>
35
+			</view>
36
+		</view>
37
+  </view>
38
+</template>
39
+
40
+<script>
41
+import {
42
+    get,
43
+    post,
44
+    SM
45
+  } from "../../http/http.js";
46
+export default {
47
+  data() {
48
+    return {
49
+      addConfig:false,
50
+			msg:null,
51
+    };
52
+  },
53
+  props: {
54
+		speDATA:{
55
+			type:Object,
56
+			default:{}
57
+		},
58
+		errorModal:{
59
+			type:Boolean,
60
+			default:false
61
+		},
62
+  },
63
+	watch:{
64
+		errorModal(e){
65
+			console.log(2222,e)
66
+			if(e){
67
+				if(this.speDATA.speVerifyType=='collectDept'){
68
+					this.msg = '增加收取科室'
69
+				}else if(this.speDATA.speVerifyType=='testDept'){
70
+					this.msg = '收取本科室不在提示'
71
+				}else if(this.speDATA.speVerifyType=='tubeType'){
72
+					this.msg = '收取此试管类型不在提示'
73
+				}else if(this.speDATA.speVerifyType=='urgent'){
74
+					this.msg = '记录本次操作,不在提示'
75
+				}
76
+			}
77
+		}
78
+	},
79
+	created(){
80
+	},
81
+  methods: {
82
+		forceDeptInputBlur(e){
83
+			this.addConfig = e.detail.value.length > 0
84
+		},
85
+    confirm(){
86
+			if(this.speDATA.speVerifyType!='collectDept'
87
+			&& this.speDATA.speVerifyType!='testDept' && this.speDATA.speVerifyType!='tubeType'
88
+			&& this.speDATA.speVerifyType!='urgent'){
89
+				this.addConfig = true
90
+			}
91
+			let data = {
92
+				code: this.speDATA.data.scode,
93
+				addConfig: this.addConfig
94
+			}
95
+			console.log(this.addConfig)
96
+			this.$emit('confirm', data)
97
+    },
98
+    cancel(){
99
+      this.$emit('cancel')
100
+    },
101
+  },
102
+};
103
+</script>
104
+
105
+<style lang="less" scoped>
106
+.showModel {
107
+  position: fixed;
108
+  left: 0;
109
+  right: 0;
110
+  top: 0;
111
+  bottom: 0;
112
+  background-color: rgba(0, 0, 0, 0.2);
113
+  z-index: 99;
114
+
115
+  .showModel__wrap {
116
+    width: 90%;
117
+    position: absolute;
118
+    left: 50%;
119
+    top: 50%;
120
+    transform: translate(-50%, -50%);
121
+    background-color: #fff;
122
+    border-radius: 12rpx;
123
+
124
+    .showModel__header {
125
+      font-size: 36rpx;
126
+      color: #000;
127
+			font-weight: bold;
128
+      height: 84rpx;
129
+      display: flex;
130
+      justify-content: center;
131
+      align-items: center;
132
+    }
133
+		.content{
134
+			background: #FAFBFD;
135
+			border-top: 1px solid #E6E6E6;
136
+			// margin-bottom: 20rpx;
137
+			.content-tip{
138
+				text-align: center;
139
+				padding: 50rpx 0 30rpx 0;
140
+				font-size: 28rpx;
141
+			}
142
+			.content-box{
143
+				padding: 24rpx;
144
+				
145
+				.icon{
146
+					text-align: center;
147
+					.red{
148
+						font-size: 80rpx;
149
+					}
150
+				}
151
+				
152
+				.flex{
153
+					display: flex;
154
+					justify-content: space-between;
155
+				}
156
+				
157
+				.weight{
158
+					font-weight: bold;
159
+				}
160
+				
161
+				.list{
162
+					padding: 20rpx 0;
163
+				}
164
+				
165
+				.content-item{
166
+					width: 80rpx;
167
+					height: 80rpx;
168
+					border-radius: 10rpx;
169
+					border: 1px solid #CCCCCC;
170
+					color: #000;
171
+					font-size: 32rpx;
172
+					// margin: 0 20rpx;
173
+					text-align: center;
174
+				}
175
+			}
176
+		}
177
+		.bottom{
178
+			border-top: 1px solid #ccc;
179
+			display: flex;
180
+			uni-button{
181
+				border-radius: 0 !important;
182
+				background: #fff !important;
183
+			}
184
+			uni-button:after{
185
+				border: none !important;
186
+			}
187
+			.bottom-btn{
188
+				color: #A8A8A8;
189
+				font-size: 30rpx;
190
+				padding: 20rpx 0;
191
+				width: 50%;
192
+				display: flex;
193
+				align-items: center;
194
+				justify-content: center;
195
+			}
196
+			.confirm-btn{
197
+				color: #5DAC6B;
198
+				border-right: 1px solid #ccc;
199
+			}
200
+		}
201
+  }
202
+	.green{
203
+		color: #49B856;
204
+	}
205
+	.mar-rig{
206
+		margin-right: 8rpx;
207
+	}
208
+}
209
+</style>

+ 17 - 1
pages.json

@@ -760,7 +760,23 @@
760 760
           "titleNView": false
761 761
         }
762 762
       }
763
-    }
763
+    },
764
+		{
765
+		  "path": "pages/speConfigurationGather/speConfigurationGather",
766
+		  "style": {
767
+		    "h5": {
768
+		      "titleNView": false
769
+		    }
770
+		  }
771
+		},
772
+		{
773
+		  "path": "pages/searchSqType/searchSqType",
774
+		  "style": {
775
+		    "h5": {
776
+		      "titleNView": false
777
+		    }
778
+		  }
779
+		}
764 780
   ],
765 781
   "globalStyle": {
766 782
     "navigationBarTextStyle": "black",

+ 37 - 16
pages/newDrug/checkPage/checkPage.vue

@@ -25,8 +25,10 @@
25 25
 
26 26
     <view class="foot_btn_spe">
27 27
       <view class="column">
28
-        <view class="btn" @click="scanCode()">扫一扫交接</view>
29
-        <view class="btn" @click="fillInManually(config.drugsStartManual.value)" v-if="workOrder.gdState && workOrder.gdState.value == 4 && config.drugsStartManual">{{config.drugsStartManual.name}}</view>
28
+				<view v-if="config.drugsStartCheck==0 && workOrder.gdState.value == 4" class="btn" @click="checkSubmit()">确认交接</view>
29
+        <view v-if="workOrder.gdState.value == 4 && config.drugsStartCheck==1" class="btn" @click="scanCode()">扫一扫交接</view>
30
+				<view v-if="workOrder.gdState.value == 5 && config.drugsEndCheck==1" class="btn" @click="scanCode()">扫一扫交接</view>
31
+				<view class="btn" @click="fillInManually(config.drugsStartManual.value)" v-if="workOrder.gdState && workOrder.gdState.value == 4 && config.drugsStartManual">{{config.drugsStartManual.name}}</view>
30 32
         <view class="btn" @click="fillInManually(config.drugsEndManual.value)" v-if="workOrder.gdState && workOrder.gdState.value == 5 && config.drugsEndManual">{{config.drugsEndManual.name}}</view>
31 33
       </view>
32 34
     </view>
@@ -36,7 +38,12 @@
36 38
     </selectAccount>
37 39
     <!-- 动态密钥 -->
38 40
     <numberKeyModel v-if="showKey" :keyArr="keyArr" @cancel="showKey = false" @confirm="confirmKey($event)"></numberKeyModel>
39
-  </view>
41
+		<!-- 核对交接 -->
42
+		<uni-popup ref="alertDialog" type="dialog" :mask-click="false">
43
+			<uni-popup-dialog type="info" cancelText="取消" confirmText="确定" title="提示" content="是否核对完成?" @confirm="dialogConfirm"
44
+				@close="dialogClose"></uni-popup-dialog>
45
+		</uni-popup>
46
+	</view>
40 47
 </template>
41 48
 <script>
42 49
   import numberKeyModel from "@/components/numberKeyModel/numberKeyModel.vue";
@@ -63,6 +70,7 @@
63 70
         keyNum:4, //密钥位数
64 71
         isNumberKey:false, //是否开启动态密钥
65 72
         keyArr: [],
73
+				checkDialog:false
66 74
       };
67 75
     },
68 76
     components: {
@@ -237,7 +245,7 @@
237 245
           });
238 246
       },
239 247
       // 工单完成
240
-      completeOrder(workOrder, queryObj, accountObj){
248
+      completeOrder(workOrder, queryObj, accountObj, type){
241 249
         uni.showLoading({
242 250
           title: "加载中",
243 251
           mask: true,
@@ -250,20 +258,21 @@
250 258
         post('/transflow/checkComplete', postData).then(res => {
251 259
           uni.hideLoading();
252 260
           if(res.state == 200){
261
+						if(type=='check'){
262
+							this.$refs.alertDialog.close()
263
+						}
253 264
             uni.showToast({
254 265
               icon: "none",
255
-              title: workOrder.gdState.value == 4 ? "交接成功,请尽快送达科室!" : (workOrder.gdState.value == 5 ? "交接成功,完成配送!" : ""),
256
-              duration: 60000,
266
+              title: workOrder.gdState.value == 4 ? "交接成功,请尽快送达科室!" : (workOrder.gdState.value == 5 ? "交接成功,完成配送!" : "交接成功"),
267
+              duration: 2000,
257 268
               mask: true,
258
-              complete(){
259
-                setTimeout(() => {
260
-                  uni.hideToast();
261
-                  uni.redirectTo({
262
-                    url: `/pages/receiptpage/receiptpage`,
263
-                  });
264
-                }, 2000)
265
-              }
266 269
             });
270
+						setTimeout(() => {
271
+						  // uni.hideToast();
272
+						  uni.redirectTo({
273
+						    url: `/pages/receiptpage/receiptpage`,
274
+						  });
275
+						}, 2000)
267 276
           }else{
268 277
             uni.showToast({
269 278
               icon: "none",
@@ -286,7 +295,7 @@
286 295
             });
287 296
           }else{
288 297
             // 起点科室不支持拍照留存
289
-            this.completeOrder(workOrder, queryObj, accountObj);
298
+            this.completeOrder(workOrder, queryObj, accountObj, "");
290 299
           }
291 300
         }else if(workOrder.gdState.value == 5){
292 301
           // 待送达
@@ -297,10 +306,22 @@
297 306
             });
298 307
           }else{
299 308
             // 起点科室不支持拍照留存
300
-            this.completeOrder(workOrder, queryObj, accountObj);
309
+            this.completeOrder(workOrder, queryObj, accountObj, "");
301 310
           }
302 311
         }
303 312
       },
313
+			// 核对交接
314
+			checkSubmit(){
315
+				this.$refs.alertDialog.open()
316
+			},
317
+			// 确定核对交接
318
+			dialogConfirm(){
319
+				this.completeOrder(this.workOrder, this.queryObj, "", "check")
320
+			},
321
+			// 取消核对交接
322
+			dialogClose(){
323
+				this.$refs.alertDialog.close()
324
+			},
304 325
       // 扫一扫交接
305 326
       scanCode(){
306 327
         if (!this.SMFlag) {

+ 5 - 0
pages/receiptpage/receiptpage.vue

@@ -2994,6 +2994,11 @@
2994 2994
       // #endif
2995 2995
     },
2996 2996
     onShow() {
2997
+			uni.removeStorageSync('startDept')
2998
+			uni.removeStorageSync('checkoutDept')
2999
+			uni.removeStorageSync('testTube')
3000
+			uni.removeStorageSync('speState')
3001
+			uni.removeStorageSync('gdData')
2997 3002
 			this.getConfig();
2998 3003
 			let that = this
2999 3004
 			// #ifdef APP-PLUS

+ 142 - 28
pages/scanning_B/scanning_B.vue

@@ -56,6 +56,14 @@
56 56
     <!-- 弹窗 -->
57 57
     <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
58 58
       :operate="models.operate" @know="know"></showModel>
59
+			<b></b>
60
+		<!-- 标本第一次拦截 -->
61
+		<uni-popup ref="alertDialog" type="dialog" :mask-click="false">
62
+			<uni-popup-dialog type="info" cancelText="否" confirmText="是" title="提示" @confirm="dialogConfirm"
63
+				@close="dialogClose">
64
+				<text v-html="speContent"></text>
65
+			</uni-popup-dialog>
66
+		</uni-popup>
59 67
   </view>
60 68
 </template>
61 69
 <script>
@@ -92,6 +100,10 @@
92 100
         },
93 101
         currentCode: "",
94 102
         type: "", //类型,orderSign|buildAndOrderSign
103
+				speCollectLimit:null,
104
+				speStartCollectShowConfig:null,
105
+				speContent:null,
106
+				speData:null
95 107
       };
96 108
     },
97 109
     methods: {
@@ -216,15 +228,24 @@
216 228
                 mask: true,
217 229
               });
218 230
               let postData = {
219
-                speId
231
+                speId,
232
+								speVerifyType:null
220 233
               }
221 234
               if (orderId) {
222 235
                 // 接单并签到
223 236
                 postData.orderId = orderId;
224 237
               }
238
+							if(this.speData){
239
+								postData.speVerifyType = this.speData.speVerifyType
240
+							}else{
241
+								delete postData.speVerifyType
242
+							}
225 243
               post("/workerOrder/specimenCreateAndSign", postData).then((res) => {
226
-                if (res.state == 200 || res.state == 201) {
244
+								this.speContent = null
245
+								this.speData = null
246
+								if (res.state == 200 || res.state == 201) {
227 247
                   uni.hideLoading();
248
+									this.$refs.alertDialog.close()
228 249
                   if (res.status == 200) {
229 250
                     // 跳转到扫描科室
230 251
                     // type1: res.type, //type类型
@@ -247,17 +268,23 @@
247 268
                     });
248 269
                   }
249 270
                 } else if (res.state == "0000") {
271
+									this.$refs.alertDialog.close()
250 272
                   uni.hideLoading();
251 273
                   this.currentCode = res.code;
252 274
                   this.res.workOrder = res.workOrder;
253 275
                   this.showSelectAccount();
254
-                } else {
276
+                } else if(res.status == 515){
255 277
                   uni.hideLoading();
256
-                  uni.showToast({
257
-                    icon: "none",
258
-                    title: res.msg || "接口获取数据失败!",
259
-                  });
260
-                }
278
+									this.$refs.alertDialog.open()
279
+									this.speContent = res.msg
280
+									this.speData = res
281
+                } else {
282
+									uni.hideLoading();
283
+									uni.showToast({
284
+									  icon: "none",
285
+									  title: res.msg || "接口获取数据失败!",
286
+									});
287
+								}
261 288
               });
262 289
             } else if (res.cancel) {
263 290
               console.log('用户点击取消');
@@ -265,6 +292,65 @@
265 292
           }
266 293
         });
267 294
       },
295
+			dialogConfirm() {
296
+				uni.showLoading({
297
+				  title: "加载中",
298
+				  mask: true,
299
+				});
300
+				let postData = {
301
+				  orderId: null,
302
+					speId: this.speData.data.id,
303
+					speVerifyType:null
304
+				}
305
+				if (this.res.workOrder) {
306
+				  // 接单并签到
307
+				  postData.orderId = this.res.workOrder.id;
308
+				}else{
309
+					delete postData.orderId
310
+				}
311
+				if(this.speData){
312
+					postData.speVerifyType = this.speData.speVerifyType
313
+				}else{
314
+					delete postData.speVerifyType
315
+				}
316
+				post("/workerOrder/specimenCreateAndSign", postData).then((res) => {
317
+				 this.speContent = null
318
+				 this.speData = null
319
+					if (res.state == 200 || res.state == 201) {
320
+						this.$refs.alertDialog.close()
321
+				    uni.hideLoading();
322
+				    if (res.status == 200) {
323
+				      this.breforeJump(res);
324
+				    } else {
325
+				      uni.navigateTo({
326
+				        url: `/pages/scanning_Result/scanning_Result?type=${res.workOrder.taskType.associationType.value}&type1=${res.type}&id=${res.workOrder.id}&status=600&msg=${res.msg}&isKs=1`,
327
+				      });
328
+				    }
329
+				  } else if (res.state == "0000") {
330
+						this.$refs.alertDialog.close()
331
+				    uni.hideLoading();
332
+				    this.currentCode = res.code;
333
+				    this.res.workOrder = res.workOrder;
334
+				    this.showSelectAccount();
335
+				  } else if(res.status == 515){
336
+				    uni.hideLoading();
337
+						this.$refs.alertDialog.open()
338
+						this.speContent = res.msg
339
+						this.speData = res
340
+				  } else {
341
+						uni.hideLoading();
342
+						uni.showToast({
343
+						  icon: "none",
344
+						  title: res.msg || "接口获取数据失败!",
345
+						});
346
+					}
347
+				});
348
+			},
349
+			dialogClose() {
350
+				this.$refs.alertDialog.close()
351
+				this.speContent = null
352
+				this.speData = null
353
+			},
268 354
       know() {
269 355
         this.models.disjunctor = false;
270 356
         if (this.models.icon === 'success') {
@@ -507,7 +593,8 @@
507 593
                     this.bigScanArriveNotOwner = data.bigScanArriveNotOwner === 1;
508 594
                     this.bigScanShowCreateBtn = data.bigScanShowCreateBtn === 1;
509 595
                     this.defaultScanSpe = data.defaultScanSpe === 1;
510
-
596
+										this.speCollectLimit = data.speCollectLimit;
597
+										this.speStartCollectShowConfig = data.speStartCollectShowConfig;
511 598
                     if(this.defaultScanSpe){
512 599
                       this.defaultJumpPage();
513 600
                     }else{
@@ -554,7 +641,7 @@
554 641
             orderId: workOrder.id,
555 642
           }
556 643
           post("/workerOrder/specimenCreateAndSign", postData).then((res) => {
557
-            if (res.state == 200 || res.state == 201) {
644
+						if (res.state == 200 || res.state == 201) {
558 645
               if (res.status == 200) {
559 646
                 // 跳转到扫描科室
560 647
                 // type1: res.type, //type类型
@@ -582,7 +669,12 @@
582 669
               this.currentCode = res.code;
583 670
               this.res.workOrder = res.workOrder;
584 671
               this.showSelectAccount();
585
-            } else {
672
+            } else if(res.status == 515){
673
+							uni.hideLoading();
674
+							this.$refs.alertDialog.open()
675
+							this.speContent = res.msg
676
+							this.speData = res
677
+						}else {
586 678
               uni.hideLoading();
587 679
               uni.showToast({
588 680
                 icon: "none",
@@ -609,23 +701,45 @@
609 701
             ress.msg = '成功';
610 702
             ress.specimenCount = res.specimenCount;
611 703
             ress.type = resObj.type;
612
-            uni.navigateTo({
613
-              url: `../scanning_Result/scanning_Result?type=${
614
-              resObj.workOrder.taskType.associationType.value
615
-            }&type1=${
616
-              resObj.type
617
-            }&infoData=${encodeURIComponent(
618
-              JSON.stringify(ress.data)
619
-            )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
620
-              this.currentCode
621
-            }&dept=${
622
-              resObj.dept
623
-            }&taskTypeId=${
624
-              resObj.workOrder.taskType.id
625
-            }&deptId=${resObj.deptId}&id=${resObj.workOrder.id}&model=${encodeURIComponent(
626
-              JSON.stringify(ress)
627
-            )}&speNum=${res.specimenCount}`,
628
-            });
704
+						if(this.speCollectLimit==1 && this.speStartCollectShowConfig==1){
705
+							let sessData = `type=${
706
+							  resObj.workOrder.taskType.associationType.value
707
+							}&type1=${
708
+							  resObj.type
709
+							}&infoData=${encodeURIComponent(
710
+							  JSON.stringify(ress.data)
711
+							)}&status=${ress.status}&msg=${ress.msg}&deptCode=${
712
+							  this.currentCode
713
+							}&dept=${
714
+							  resObj.dept
715
+							}&taskTypeId=${
716
+							  resObj.workOrder.taskType.id
717
+							}&deptId=${resObj.deptId}&id=${resObj.workOrder.id}&model=${encodeURIComponent(
718
+							  JSON.stringify(ress)
719
+							)}&speNum=${res.specimenCount}`
720
+							uni.setStorageSync('gdData', JSON.stringify(sessData))
721
+							uni.navigateTo({
722
+							  url: `../speConfigurationGather/speConfigurationGather?id=${resObj.workOrder.id}`,
723
+							});
724
+						}else{
725
+							uni.navigateTo({
726
+							  url: `../scanning_Result/scanning_Result?type=${
727
+							  resObj.workOrder.taskType.associationType.value
728
+							}&type1=${
729
+							  resObj.type
730
+							}&infoData=${encodeURIComponent(
731
+							  JSON.stringify(ress.data)
732
+							)}&status=${ress.status}&msg=${ress.msg}&deptCode=${
733
+							  this.currentCode
734
+							}&dept=${
735
+							  resObj.dept
736
+							}&taskTypeId=${
737
+							  resObj.workOrder.taskType.id
738
+							}&deptId=${resObj.deptId}&id=${resObj.workOrder.id}&model=${encodeURIComponent(
739
+							  JSON.stringify(ress)
740
+							)}&speNum=${res.specimenCount}`,
741
+							});
742
+						}
629 743
           })
630 744
         })
631 745
       },

+ 192 - 19
pages/scanning_Result/scanning_Result.vue

@@ -137,7 +137,8 @@
137 137
       <view class="btn3" @click="getNoScanSpecimen(false)">未扫描标本</view>
138 138
       <view class="btn3" @click="getNoScanSpecimen(true)">已扫描标本</view>
139 139
       <view class="btn2" @click="Scanning_complete(dataId)"> 完成扫描 </view>
140
-    </view>
140
+			<view class="btn2" v-if="speCollectLimit==1" @click="configuration(dataId)"> 配置收取 </view>
141
+		</view>
141 142
     <view class="foot_btn" v-if="
142 143
         (type != 'specimenPlan' &&
143 144
           type != 'specimen' &&
@@ -263,11 +264,14 @@
263 264
 		 <questionCode v-if="isQuestionModel" :orderId="dataId" @know="isQuestionModel = false"></questionCode>
264 265
 		<!-- PDA扫描 -->
265 266
 		<scanner></scanner>
267
+		<!-- 标本扫描拦截 -->
268
+		<errorModel v-show="errorModal" ref="model11" :errorModal="errorModal" :speDATA="speDATA" @cancel="cancelError" @confirm="confirmError($event)"></errorModel>
266 269
 	</view>
267 270
 </template>
268 271
 <script>
269 272
 	import scanner from "../../components/scanner/scanner.vue";
270 273
   import showModel from "../../components/showModel/showModel.vue";
274
+	import errorModel from "../../components/errorModel/errorModel.vue";
271 275
 	import questionCode from "../../components/questionCode/questionCode.vue";
272 276
   import {
273 277
     get,
@@ -284,7 +288,8 @@
284 288
   export default {
285 289
 		components:{
286 290
 			questionCode,
287
-			scanner
291
+			scanner,
292
+			errorModel
288 293
 		},
289 294
     data() {
290 295
       return {
@@ -335,6 +340,13 @@
335 340
         gotoFlag: true,
336 341
         content: "",
337 342
 				taskTypeId:"",
343
+				speCollectLimit:null,
344
+				errorModal:null,
345
+				speDATA:null,
346
+				interceptData:null,
347
+				intercept:null,
348
+				num: 0,
349
+				isShow:null
338 350
       };
339 351
     },
340 352
     methods: {
@@ -397,7 +409,19 @@
397 409
                 type: this.queryObj.type1,
398 410
                 deptCode: this.DEPTCode,
399 411
                 ids: [],
412
+								speVerifyType:null,
413
+								addConfig:null
400 414
               };
415
+							if(this.speDATA){
416
+								data.speVerifyType = this.speDATA.speVerifyType
417
+							}else{
418
+								delete data.speVerifyType
419
+							}
420
+							if(this.interceptData && this.interceptData.addConfig){
421
+								data.addConfig = 1
422
+							}else{
423
+								delete data.addConfig
424
+							}
401 425
               data.ids.push(this.dataId);
402 426
               let postType = "";
403 427
               if (this.type == "jPBag" || this.type == "drugsBag") {
@@ -426,11 +450,13 @@
426 450
               }
427 451
               post("/workerOrder/" + postType, data).then((ress) => {
428 452
                 uni.hideLoading();
453
+								this.speDATA = null
454
+								this.interceptData = null
429 455
                 if (ress.status == 200 || ress.status == 11111) {
430 456
                   //标本和标本轮巡工单,扫描标本后会自动调用摄像头,继续扫描,直到status不是200
431 457
                   if ((this.type == "specimenPlan" || this.type == "specimen") && ress.status != 11111) {
432 458
                     this.getPageConfigSpecimen((flag, type, ress) => {
433
-                      if(flag){
459
+                      if(flag && !this.isShow){
434 460
                         setTimeout(()=>{
435 461
                           if (type === 'scan') {
436 462
 														// #ifdef H5
@@ -442,6 +468,18 @@
442 468
                       if(ress){
443 469
                         this.infoDATA = ress.data;
444 470
                         this.speNum = ress.specimenCount;
471
+												// 标本拦截收取参数
472
+												let sessData = `type=${
473
+                          this.queryObj.type
474
+                        }&type1=${
475
+                          this.queryObj.type1
476
+                        }&infoData=${encodeURIComponent(
477
+                          JSON.stringify(ress.data)
478
+                        )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
479
+                          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`
481
+												uni.setStorageSync('gdData', JSON.stringify(sessData))
482
+												
445 483
                         uni.redirectTo({
446 484
                           url: `../scanning_Result/scanning_Result?type=${
447 485
                           this.queryObj.type
@@ -451,7 +489,7 @@
451 489
                           JSON.stringify(ress.data)
452 490
                         )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
453 491
                           this.queryObj.deptCode
454
-                        }&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&speNum=${this.speNum}&scanOrHand=${type}&isEndDeptRed=${this.isEndDeptRed}`,
492
+                        }&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&speNum=${this.speNum}&scanOrHand=${type}&isEndDeptRed=${this.isEndDeptRed}&isShow=1`,
455 493
                         });
456 494
                       }
457 495
                     }, type, ress.data, ress);
@@ -551,19 +589,27 @@
551 589
                     }&dept=${this.queryObj.dept}&id=${this.dataId}&model=${encodeURIComponent(JSON.stringify(ress))}&accountObj=${encodeURIComponent(JSON.stringify(this.accountObj))}&deptId=${this.deptId}&handover=${this.handover}`,
552 590
                     });
553 591
                   }
554
-                } else {
555
-                  uni.redirectTo({
556
-                    url: `../scanning_Result/scanning_Result?type=${
557
-                    this.queryObj.type
558
-                  }&type1=${this.queryObj.type1}&status=${ress.status}&msg=${
559
-                    ress.msg
560
-                  }&deptCode=${this.queryObj.deptCode}&dept=${
561
-                    this.queryObj.dept
562
-                  }&id=${this.dataId}&model=${encodeURIComponent(
563
-                    JSON.stringify(this.infoDATA)
564
-                  )}&accountObj=${encodeURIComponent(JSON.stringify(this.accountObj))}&deptId=${this.deptId}&handover=${this.handover}&scanOrHand=${type}&qrcode=${this.currentCode}`,
592
+                } else if (ress.status==513){
593
+									this.speDATA = ress
594
+									this.errorModal = true
595
+								} else if(ress.status==10004){
596
+                  uni.showToast({
597
+                    icon: "none",
598
+                    title: ress.msg,
565 599
                   });
566
-                }
600
+                }else{
601
+									uni.redirectTo({
602
+									  url: `../scanning_Result/scanning_Result?type=${
603
+									  this.queryObj.type
604
+									}&type1=${this.queryObj.type1}&status=${ress.status}&msg=${
605
+									  ress.msg
606
+									}&deptCode=${this.queryObj.deptCode}&dept=${
607
+									  this.queryObj.dept
608
+									}&id=${this.dataId}&model=${encodeURIComponent(
609
+									  JSON.stringify(this.infoDATA)
610
+									)}&accountObj=${encodeURIComponent(JSON.stringify(this.accountObj))}&deptId=${this.deptId}&handover=${this.handover}&scanOrHand=${type}&qrcode=${this.currentCode}`,
611
+									});
612
+								}
567 613
               });
568 614
             } else {
569 615
               uni.hideLoading();
@@ -578,6 +624,18 @@
578 624
         });
579 625
         // ------------------------------
580 626
       },
627
+			// 取消拦截
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
+			},
581 639
       // 查看未扫描标本
582 640
       // isScan true已扫描标本,false未扫描标本
583 641
       getNoScanSpecimen(isScan) {
@@ -601,6 +659,7 @@
601 659
       },
602 660
       // 继续扫描
603 661
       Scanning_again() {
662
+				// this.hand_scanning_common('250515584338@_1', 'scan')
604 663
         if (!this.SMFlag) {
605 664
           return;
606 665
         }
@@ -760,6 +819,13 @@
760 819
           url: "../receiptpage/receiptpage",
761 820
         });
762 821
       },
822
+			// 配置收取
823
+			configuration(id){
824
+				
825
+				uni.navigateTo({
826
+				  url: `../speConfigurationGather/speConfigurationGather?id=${id}`
827
+				});
828
+			},
763 829
       // 完成扫描
764 830
       Scanning_complete(id) {
765 831
         // 如果是标本配送和标本轮巡,则进入标本核对页面
@@ -981,9 +1047,10 @@
981 1047
                 if (res.status == 200) {
982 1048
                   let data = res.list[0];
983 1049
               		if(data){
1050
+										// this.speCollectLimit = data.speCollectLimit;
984 1051
                     let deptNotAlertList = data.deptNotAlertList || [];
985 1052
                     deptNotAlertList = deptNotAlertList.map(v => v.id);
986
-                    if(deptNotAlertList.includes(specimenDTO.checkDept.id)){
1053
+                    if(deptNotAlertList.includes(specimenDTO && specimenDTO.checkDept.id)){
987 1054
                       this.isEndDeptRed = true;
988 1055
                       console.log('红色')
989 1056
                       fn(false, type, ress);
@@ -1019,6 +1086,68 @@
1019 1086
           }
1020 1087
         });
1021 1088
       },
1089
+			getSys(){
1090
+				const userData = uni.getStorageSync("userData");
1091
+				console.log('userData', userData);
1092
+				// uni.showLoading({
1093
+				//   title: "加载中",
1094
+				//   mask: true,
1095
+				// });
1096
+				// 查询标本配送业务
1097
+				post("/simple/data/fetchDataList/taskType",{
1098
+				    "idx": 0,
1099
+				    "sum": 10,
1100
+				    "taskType": {
1101
+				        "simpleQuery": true,
1102
+				        "hosId": {
1103
+				            "id": userData.user.currentHospital.id
1104
+				        },
1105
+				        "associationType": {
1106
+				            "key": "association_types",
1107
+				            "value": "specimen"
1108
+				        }
1109
+				    }
1110
+				}).then((res) => {
1111
+				  if (res.status == 200) {
1112
+				    let taskTypeDTO = res.list[0];
1113
+						if(taskTypeDTO){
1114
+				      // 查询业务页面控制-标本
1115
+				      post("/simple/data/fetchDataList/taskTypeConfig",{
1116
+				          "idx": 0,
1117
+				          "sum": 10,
1118
+				          "taskTypeConfig": {
1119
+				            taskTypeDTO,
1120
+				          }
1121
+				      }).then((res) => {
1122
+				        // uni.hideLoading();
1123
+				        if (res.status == 200) {
1124
+				          let data = res.list[0];
1125
+				      		if(data){
1126
+										this.speCollectLimit = data.speCollectLimit;
1127
+				          }
1128
+				        } else {
1129
+				          uni.showToast({
1130
+				            icon: "none",
1131
+				            title: res.msg || "接口获取数据失败!",
1132
+				          });
1133
+				        }
1134
+				      });
1135
+				    }else{
1136
+				      uni.hideLoading();
1137
+				      uni.showToast({
1138
+				        icon: "none",
1139
+				        title: "未查询到标本配送业务!",
1140
+				      });
1141
+				    }
1142
+				  } else {
1143
+				    uni.hideLoading();
1144
+				    uni.showToast({
1145
+				      icon: "none",
1146
+				      title: res.msg || "接口获取数据失败!",
1147
+				    });
1148
+				  }
1149
+				});
1150
+			}
1022 1151
     },
1023 1152
     onShow() {
1024 1153
       this.SMFlag = true;
@@ -1032,14 +1161,46 @@
1032 1161
 			// #endif
1033 1162
     },
1034 1163
     onLoad(options) {
1164
+			this.intercept = options.intercept
1165
+			this.isShow = options.isShow
1035 1166
       this.isEndDeptRedShow = options.isEndDeptRed === 'true';
1036
-      if (options.status == 200&&options.scanOrHand === 'hand'&&(options.type === "specimen"||options.type === "specimenPlan")) {
1037
-        this.getPageConfigSpecimen((flag) => {
1167
+			this.getSys()
1168
+      if (options.status == 200&&(options.scanOrHand === 'hand')&&(options.type === "specimen"||options.type === "specimenPlan")) {
1169
+				this.getPageConfigSpecimen((flag) => {
1038 1170
           if(flag){
1039 1171
             this.hand_again();
1040 1172
           }
1041 1173
         });
1042 1174
       }
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') {
1196
+			// 					// #ifdef H5
1197
+			// 					this.Scanning_again();
1198
+			// 					// #endif
1199
+			// 				// }
1200
+			// 			},500)
1201
+			// 		}
1202
+			// 	})
1203
+			// }
1043 1204
 			console.log(options , "options");
1044 1205
       this.queryObj = options;
1045 1206
       this.isKs = this.queryObj.isKs;
@@ -1049,6 +1210,7 @@
1049 1210
         this.infoDATA = JSON.parse(options.model);
1050 1211
       }
1051 1212
 			console.log(this.infoDATA , "infoDATA");
1213
+			
1052 1214
       if (options.accountObj && options.accountObj != "undefined") {
1053 1215
         this.accountObj = JSON.parse(options.accountObj);
1054 1216
       }
@@ -1073,6 +1235,7 @@
1073 1235
       this.res["deptName"] = options.deptName;
1074 1236
       this.res["bedNum"] = options.bedNum;
1075 1237
       this.infoType = options.type1;
1238
+			
1076 1239
 			if((this.infoType == 'trans-dsd-1' || this.infoType == 'ins-dsd-1'
1077 1240
 				|| this.infoType == 'ins-half-ok' || this.infoDATA.type == 'ins-half-ok')
1078 1241
 				&& this.res.status == 200){
@@ -1095,6 +1258,16 @@
1095 1258
       }
1096 1259
       this.DEPTCode = options.deptCode;
1097 1260
       this.type = options.type;
1261
+			
1262
+			// 标本收取拦截参数
1263
+			let sessData = `type=${
1264
+			  this.queryObj.type
1265
+			}&type1=${
1266
+			  this.queryObj.type1
1267
+			}&infoData=${options.infoData}&status=${options.status}&msg=${options.msg}&deptCode=${
1268
+			  this.queryObj.deptCode
1269
+			}&dept=${this.queryObj.dept}&id=${this.dataId}&model=${options.model}&speNum=${this.speNum}&scanOrHand=${options.scanOrHand}&isEndDeptRed=${options.isEndDeptRed}`
1270
+			uni.setStorageSync('gdData', JSON.stringify(sessData))
1098 1271
       // #ifdef APP-PLUS
1099 1272
       webHandle("no", "app");
1100 1273
       // #endif

+ 411 - 0
pages/searchSqType/searchSqType.vue

@@ -0,0 +1,411 @@
1
+<template>
2
+	<view class="content">
3
+		<view class="search-keyword">
4
+			<view class="padding">
5
+				<uni-easyinput prefixIcon="search" v-model="key" :clearable="false" placeholder="请输入" @input="searchKey">
6
+				</uni-easyinput>
7
+			</view>
8
+			<scroll-view class="keyword-list-box" scroll-y>
9
+				<label v-for="(row, index) in dataList" :key="row.id" @click="itemClick(row)"
10
+					>
11
+					<view class="keyword-entry" :class="selectData.includes(row.id) ? 'selectStyle' : ''">
12
+						<view class="keyword-text">
13
+							{{type=="startDept" || type=="checkoutDept" ? row.dept : row.name}}
14
+						</view>
15
+					</view>
16
+				</label>
17
+			</scroll-view>
18
+		</view>
19
+		<view class="toolbar">
20
+			<view class="btn cancel" @click="determine('back')" hover-class="seimin-btn-hover">
21
+				取消
22
+			</view>
23
+			<view class="btn affirm" @click="determine('submit')" hover-class="seimin-btn-hover">
24
+				确定
25
+			</view>
26
+		</view>
27
+	</view>
28
+</template>
29
+
30
+<script>
31
+	import {
32
+		post,
33
+		webHandle
34
+	} from "../../http/http.js";
35
+	import debounce from 'lodash-es/debounce'
36
+	export default {
37
+		data() {
38
+			return {
39
+				key:null,
40
+				type: "", //进入该页面的类型
41
+				hosId: "",
42
+				dataList: [],
43
+				selectData: [],
44
+				allData:[],
45
+				// startDept: [],
46
+				// checkoutDept: [],
47
+				// testTube: [],
48
+				// speState: []
49
+				gdId:null
50
+			};
51
+		},
52
+		onLoad(options) {
53
+			this.hosId = uni.getStorageSync("userData").user.currentHospital.id;
54
+			console.log(options, 'options');
55
+			this.type = options.type
56
+			this.gdId = options.id
57
+			if(options.type=='startDept'){
58
+				this.getStartDept()
59
+			}else if (options.type=='checkoutDept'){
60
+				this.getCheckoutDept()
61
+			}else if (options.type=='testTube'){
62
+				this.getTestTube()
63
+			}else if (options.type=='speState'){
64
+				this.getSpeState()
65
+			}
66
+		},
67
+		methods: {
68
+			searchKey(e){
69
+				if(this.type=='startDept'){
70
+					this.handleSearch1()
71
+				}else if (this.type=='checkoutDept'){
72
+					this.handleSearch2()
73
+				}
74
+			},
75
+			handleSearch1: debounce(function() {
76
+			  this.getStartDept();
77
+			}, 500),
78
+			handleSearch2: debounce(function() {
79
+			  this.getCheckoutDept();
80
+			}, 500),
81
+			//获取起点科室
82
+			getStartDept() {
83
+				let postData = {
84
+					idx: 0,
85
+					sum: 20,
86
+					department:{
87
+						searchType: 1,
88
+						hospital: {
89
+							id: this.hosId
90
+						},
91
+						dept: this.key
92
+					}
93
+				}
94
+				post("/simple/data/fetchDataList/department", postData).then((res) => {
95
+					this.dataList = res.list
96
+				})
97
+			},
98
+			// 获取检验科室
99
+			getCheckoutDept(){
100
+				let postData1 = {
101
+					key:'dept_type',
102
+					type: "list"
103
+				}
104
+				post("/common/common/getDictionary", postData1).then((res2) => {
105
+					let item = res2.find(i=>i.name=='检验科室')
106
+					let data1 = {
107
+					  idx: 0,
108
+					  sum: 20,
109
+					  department: {
110
+					    hospital: { id: this.hosId || "" },
111
+					    type: { id: item.id || "" },
112
+							dept: this.key,
113
+					  },
114
+					};
115
+					post("/simple/data/fetchDataList/department", data1).then((res) => {
116
+						this.dataList = res.list;
117
+					});
118
+				})
119
+			},
120
+			// 获取试管类型
121
+			getTestTube(){
122
+				let postData1 = {
123
+					key:'specimen_tube_type',
124
+					type: "list"
125
+				}
126
+				post("/common/common/getDictionary", postData1).then((res) => {
127
+					this.dataList = res
128
+				})
129
+			},
130
+			// 获取标本状态
131
+			getSpeState(){
132
+				let postData1 = {
133
+					key:'speState',
134
+					type: "list"
135
+				}
136
+				post("/common/common/getDictionary", postData1).then((res) => {
137
+					this.dataList = res
138
+				})
139
+			},
140
+			// 确认
141
+			determine(type) {
142
+				this.allData = []
143
+				this.dataList.forEach(i=>{
144
+					for(let x of this.selectData){
145
+						if(i.id == x){
146
+							this.allData.push(i)
147
+						}
148
+					}
149
+				})
150
+				console.log(3333, this.allData)
151
+				if (type == 'back') {
152
+					uni.navigateBack({
153
+						delta: 1,
154
+					})
155
+				} else {
156
+					if(this.type=='startDept'){
157
+						let data = uni.getStorageSync('startDept')
158
+						if(data){
159
+							let arr = JSON.parse(data)
160
+							for(let i of this.allData){
161
+								arr.push(i)
162
+							}
163
+							uni.setStorageSync('startDept', JSON.stringify(arr))
164
+						}else{
165
+							uni.setStorageSync('startDept', JSON.stringify(this.allData))
166
+						}
167
+					}else if (this.type=='checkoutDept'){
168
+						let data = uni.getStorageSync('checkoutDept')
169
+						if(data){
170
+							let arr = JSON.parse(data)
171
+							for(let i of this.allData){
172
+								arr.push(i)
173
+							}
174
+							uni.setStorageSync('checkoutDept', JSON.stringify(arr))
175
+						}else{
176
+							uni.setStorageSync('checkoutDept', JSON.stringify(this.allData))
177
+						}
178
+					}else if (this.type=='testTube'){
179
+						uni.setStorageSync('testTube', JSON.stringify(this.allData))
180
+					}else if (this.type=='speState'){
181
+						uni.setStorageSync('speState', JSON.stringify(this.allData))
182
+					}
183
+					uni.navigateTo({
184
+						url: `../speConfigurationGather/speConfigurationGather?type=${this.type}&id=${this.gdId}&back=1`
185
+					});
186
+				}
187
+			},
188
+			// 选择楼栋
189
+			itemClick(item) {
190
+				let index = this.selectData.indexOf(item.id)
191
+				if (index == -1) {
192
+					this.selectData.push(item.id)
193
+				} else {
194
+					this.selectData.splice(index, 1)
195
+				}
196
+			}
197
+		},
198
+	};
199
+</script>
200
+<style scoped>
201
+	.is-input-border{
202
+		border-color: #eee !important
203
+	}
204
+</style>
205
+<style scoped lang="less">
206
+	view {
207
+		display: block;
208
+	}
209
+
210
+	.title {
211
+		padding: 30rpx;
212
+		font-size: 32rpx;
213
+		text-align: center;
214
+		font-weight: bold;
215
+	}
216
+
217
+	// 底部
218
+	.toolbar {
219
+		position: fixed;
220
+		left: 0;
221
+		right: 0;
222
+		bottom: 30rpx;
223
+		width: 96%;
224
+		margin-left: 2%;
225
+		z-index: 9999;
226
+		display: flex;
227
+		justify-content: space-between;
228
+		align-items: center;
229
+		box-sizing: border-box;
230
+
231
+		.btn {
232
+			width: 48%;
233
+			height: 88rpx;
234
+			line-height: 88rpx;
235
+			text-align: center;
236
+			border-radius: 10rpx;
237
+		}
238
+
239
+		.affirm {
240
+			background-color: #49B856;
241
+			color: #fff;
242
+		}
243
+
244
+		.cancel {
245
+			background-color: #AFAFAF;
246
+			color: #fff;
247
+		}
248
+	}
249
+
250
+	.search-box {
251
+		width: 95%;
252
+		background-color: rgb(242, 242, 242);
253
+		padding: 15upx 2.5%;
254
+		display: flex;
255
+		justify-content: space-between;
256
+		position: sticky;
257
+		top: 0;
258
+	}
259
+
260
+	.search-box .mSearch-input-box {
261
+		width: 100%;
262
+	}
263
+
264
+	.search-box .input-box {
265
+		width: 85%;
266
+		flex-shrink: 1;
267
+		display: flex;
268
+		justify-content: center;
269
+		align-items: center;
270
+	}
271
+
272
+	.search-box .search-btn {
273
+		width: 15%;
274
+		margin: 0 0 0 2%;
275
+		display: flex;
276
+		justify-content: center;
277
+		align-items: center;
278
+		flex-shrink: 0;
279
+		font-size: 28upx;
280
+		color: #fff;
281
+		background: linear-gradient(to right, #ff9801, #ff570a);
282
+		border-radius: 60upx;
283
+	}
284
+
285
+	.search-box .input-box>input {
286
+		width: 100%;
287
+		height: 60upx;
288
+		font-size: 32upx;
289
+		border: 0;
290
+		border-radius: 60upx;
291
+		-webkit-appearance: none;
292
+		-moz-appearance: none;
293
+		appearance: none;
294
+		padding: 0 3%;
295
+		margin: 0;
296
+		background-color: #ffffff;
297
+	}
298
+
299
+	.placeholder-class {
300
+		color: #9e9e9e;
301
+	}
302
+
303
+	.search-keyword {
304
+		width: 100%;
305
+		background-color: rgb(242, 242, 242);
306
+	}
307
+	
308
+	.padding{
309
+		// padding: 0 20rpx;
310
+	}
311
+	
312
+	.keyword-list-box {
313
+		height: calc(100vh - 220rpx);
314
+		padding-top: 10upx;
315
+		border-radius: 20upx 20upx 0 0;
316
+		background-color: #fff;
317
+	}
318
+
319
+	.selectStyle {
320
+		color: #49B856 !important;
321
+	}
322
+
323
+	.keyword-entry-tap {
324
+		background-color: #eee;
325
+	}
326
+
327
+	.keyword-entry {
328
+		width: 94%;
329
+		height: 80rpx;
330
+		margin: 0 3%;
331
+		font-size: 30rpx;
332
+		color: #333;
333
+		display: flex;
334
+		justify-content: center;
335
+		align-items: center;
336
+		border-bottom: solid 1rpx #DEDEDE;
337
+	}
338
+
339
+	.keyword-entry image {
340
+		width: 60upx;
341
+		height: 60upx;
342
+	}
343
+
344
+	.keyword-entry .keyword-text,
345
+	.keyword-entry .keyword-img {
346
+		height: 80upx;
347
+		display: flex;
348
+		align-items: center;
349
+	}
350
+
351
+	.keyword-entry .keyword-text {
352
+		// width: 90%;
353
+	}
354
+
355
+	.keyword-entry .keyword-img {
356
+		width: 10%;
357
+		justify-content: center;
358
+	}
359
+
360
+	.keyword-box {
361
+		height: calc(100vh - 110upx);
362
+		border-radius: 20upx 20upx 0 0;
363
+		background-color: #fff;
364
+	}
365
+
366
+	.keyword-box .keyword-block {
367
+		padding: 10upx 0;
368
+	}
369
+
370
+	.keyword-box .keyword-block .keyword-list-header {
371
+		width: 94%;
372
+		padding: 10upx 3%;
373
+		font-size: 27upx;
374
+		color: #333;
375
+		display: flex;
376
+		justify-content: space-between;
377
+	}
378
+
379
+	.keyword-box .keyword-block .keyword-list-header image {
380
+		width: 40upx;
381
+		height: 40upx;
382
+	}
383
+
384
+	.keyword-box .keyword-block .keyword {
385
+		width: 94%;
386
+		padding: 3px 3%;
387
+		display: flex;
388
+		flex-flow: wrap;
389
+		justify-content: flex-start;
390
+	}
391
+
392
+	.keyword-box .keyword-block .hide-hot-tis {
393
+		display: flex;
394
+		justify-content: center;
395
+		font-size: 28upx;
396
+		color: #6b6b6b;
397
+	}
398
+
399
+	.keyword-box .keyword-block .keyword>view {
400
+		display: flex;
401
+		justify-content: center;
402
+		align-items: center;
403
+		border-radius: 60upx;
404
+		padding: 0 20upx;
405
+		margin: 10upx 20upx 10upx 0;
406
+		height: 60upx;
407
+		font-size: 28upx;
408
+		background-color: rgb(242, 242, 242);
409
+		color: #6b6b6b;
410
+	}
411
+</style>

+ 446 - 0
pages/speConfigurationGather/speConfigurationGather.vue

@@ -0,0 +1,446 @@
1
+<template>
2
+  <view class="container">
3
+		<view class="title">标本收取限制配置</view>
4
+		<view class="content">
5
+			<view class="list" v-if="this.list.collectDeptList && this.list.collectDeptList.length>0">
6
+				<view class="top">
7
+					<view class="title">起点科室</view>
8
+					<text class="right-icon newicon newicon-weibiaoti2010104" @click="search('startDept')"></text>
9
+				</view>
10
+				<view class="content" v-for="(item, index) in startDept" :key="index">
11
+					<view class="name">{{item.dept}}</view>
12
+					<text class="right-icon newicon newicon-lajitong" v-if="index!=0" @click="delect(index, '1')"></text>
13
+				</view>
14
+			</view>
15
+			<view class="list">
16
+				<view class="top">
17
+					<view class="title">检验科室</view>
18
+					<text class="right-icon newicon newicon-weibiaoti2010104" @click="search('checkoutDept')"></text>
19
+				</view>
20
+				<view class="content" v-for="(item, index) in checkoutDept" :key="index">
21
+					<view class="name">{{item.dept}}</view>
22
+					<text class="right-icon newicon newicon-lajitong" @click="delect(index, '2')"></text>
23
+				</view>
24
+			</view>
25
+			<view class="list">
26
+				<view class="top">
27
+					<view class="title">试管类型</view>
28
+					<text class="right-icon newicon newicon-weibiaoti2010104" @click="search('testTube')"></text>
29
+				</view>
30
+				<view class="content" v-for="(item, index) in testTube" :key="index">
31
+					<view class="name">{{item.name}}</view>
32
+					<text class="right-icon newicon newicon-lajitong" @click="delect(index, '3')"></text>
33
+				</view>
34
+			</view>
35
+			<view class="list">
36
+				<view class="top">
37
+					<view class="title">标本状态</view>
38
+					<text class="right-icon newicon newicon-weibiaoti2010104" @click="search('speState')"></text>
39
+				</view>
40
+				<view class="content" v-for="(item, index) in speStateData" :key="index">
41
+					<view class="name">{{item.name}}</view>
42
+					<text class="right-icon newicon newicon-lajitong" @click="delect(index, '4')"></text>
43
+				</view>
44
+			</view>
45
+			<view class="list">
46
+				<view class="top">
47
+					<view class="title">紧急普通</view>
48
+					<checkbox-group @change="checkboxChange">
49
+						<label v-for="item in urgencyData" :key="item.value">
50
+							<view>
51
+								<checkbox :value="item.value" :checked="item.checked" color="#42b983"/>
52
+							</view>
53
+							<view>{{item.name}}</view>
54
+						</label>
55
+					</checkbox-group>
56
+				</view>
57
+			</view>
58
+			<view class="list">
59
+				<view class="top">
60
+					<view class="title">重复收取</view>
61
+					<radio-group @change="radioChange">
62
+						<label v-for="(item, index) in repetition" :key="item.value">
63
+							<view>
64
+								<radio :value="item.value" :checked="index === current" color="#42b983"/>
65
+							</view>
66
+							<view>{{item.name}}</view>
67
+						</label>
68
+					</radio-group>
69
+				</view>
70
+			</view>
71
+		</view>
72
+		<view class="footer">
73
+			<view class="btn cancel" hover-class="seimin-btn-hover" @click="goBack()">取消</view>
74
+			<view class="btn affirm" hover-class="seimin-btn-hover" @click="submit()">确定</view>
75
+		</view>
76
+  </view>
77
+</template>
78
+
79
+<script>
80
+  import { get, post} from "../../http/http.js";
81
+  export default {
82
+    data() {
83
+      return {
84
+        hosId: uni.getStorageSync('userData').user.currentHospital.id,
85
+        list: [],
86
+				startDept:[],
87
+				checkoutDept:[],
88
+				speStateData:[],
89
+				testTube:[],
90
+				urgencyData:[
91
+					{value:'1',name:'紧急',checked:false},
92
+					{value:'0',name:'普通',checked:false},
93
+				],
94
+				repetition:[
95
+					{value:'1',name:'是'},
96
+					{value:'0',name:'否'},
97
+				],
98
+				current:null,
99
+				gdId:null,
100
+				id:null,
101
+				detailHosId:null,
102
+				back:0
103
+      };
104
+    },
105
+		onLoad(options) {
106
+			console.log('options111111', options);
107
+			this.gdId = options.id
108
+			if(options.back){
109
+				this.back = 1
110
+			}else{
111
+				this.back = 0
112
+			}
113
+			this.getSpeDetail()
114
+			let startDept = uni.getStorageSync('startDept')
115
+			let checkoutDept = uni.getStorageSync('checkoutDept')
116
+			let testTube = uni.getStorageSync('testTube')
117
+			let speState = uni.getStorageSync('speState')
118
+			if(startDept){ //需要追加
119
+				this.startDept = JSON.parse(startDept)
120
+			}
121
+			 if (checkoutDept){ //需要追加
122
+				this.checkoutDept = JSON.parse(checkoutDept)
123
+			}
124
+			 if (testTube){
125
+				this.testTube = JSON.parse(testTube)
126
+			}
127
+			 if (speState){
128
+				this.speStateData = JSON.parse(speState)
129
+			}
130
+		},
131
+    methods:{
132
+			getSpeDetail(){
133
+				post("/simple/data/fetchDataList/speOrderCollectInfo", {
134
+					idx: 0,
135
+					sum: 9999,
136
+					speOrderCollectInfo:{
137
+						gdId: this.gdId,
138
+						hosId: this.hosId
139
+					}
140
+				}).then((result) => {
141
+				  uni.hideLoading();
142
+				  if (result.status == 200) {
143
+						this.list = result.list[0] || [];
144
+						this.id = result.list[0].id
145
+						this.detailHosId = result.list[0].hosId
146
+						this.createTime = result.list[0].createTime
147
+						if(result.list[0].collectDeptList){
148
+							for(let i of this.startDept){
149
+								result.list[0].collectDeptList.push(i)
150
+							}
151
+							let data = result.list[0].collectDeptList
152
+							let newList2 = []
153
+							let newList3 = []
154
+							data.forEach((item) => {
155
+								if (!newList2.includes(item.id)) {
156
+									newList2.push(item.id)
157
+								}
158
+							})
159
+							newList2.forEach(i=>{
160
+								newList3.push(data.find(x=> x.id == i))
161
+							})
162
+							this.startDept = newList3
163
+						}
164
+						if(result.list[0].testDeptList){
165
+							for(let i of this.checkoutDept){
166
+								result.list[0].testDeptList.push(i)
167
+							}
168
+							let data = result.list[0].testDeptList
169
+							let newList2 = []
170
+							let newList3 = []
171
+							data.forEach((item) => {
172
+								if (!newList2.includes(item.id)) {
173
+									newList2.push(item.id)
174
+								}
175
+							})
176
+							newList2.forEach(i=>{
177
+								newList3.push(data.find(x=> x.id == i))
178
+							})
179
+							this.checkoutDept = newList3
180
+						}else{
181
+							let data = this.checkoutDept
182
+							let newList2 = []
183
+							let newList3 = []
184
+							data.forEach((item) => {
185
+								if (!newList2.includes(item.id)) {
186
+									newList2.push(item.id)
187
+								}
188
+							})
189
+							newList2.forEach(i=>{
190
+								newList3.push(data.find(x=> x.id == i))
191
+							})
192
+							this.checkoutDept = newList3
193
+						}
194
+						if(result.list[0].tubeTypeList){
195
+							if(this.back == 0 || this.testTube.length==0){
196
+								this.testTube = this.testTube.concat(result.list[0].tubeTypeList) 
197
+							}
198
+						}
199
+						if(result.list[0].speStateList){
200
+							if(this.back == 0 || this.speStateData.length==0){
201
+								this.speStateData = this.speStateData.concat(result.list[0].speStateList) 
202
+							}
203
+						}
204
+						if(result.list[0].urgent){
205
+							let urgent = result.list[0].urgent.split(',')
206
+							this.urgencyData.forEach(i=>{
207
+								for(let x of urgent){
208
+									if(i.value == x){
209
+										i.checked = true
210
+									}
211
+								}
212
+							})
213
+						}
214
+						result.list[0].repeatCollect = result.list[0].repeatCollect+''
215
+						if(result.list[0].repeatCollect){
216
+							for (let i = 0; i < this.repetition.length; i++) {
217
+									if (this.repetition[i].value == result.list[0].repeatCollect) {
218
+											this.current = i;
219
+											break;
220
+									}
221
+							}
222
+						}
223
+				  } else {
224
+				    uni.showToast({
225
+				      icon: "none",
226
+				      title: result.msg || "接口获取数据失败!",
227
+				    });
228
+				  }
229
+				});
230
+			},
231
+      goBack() {
232
+        uni.navigateBack();
233
+      },
234
+			search(type){
235
+				uni.navigateTo({
236
+				  url: `../searchSqType/searchSqType?type=${type}&id=${this.gdId}`
237
+				});
238
+			},
239
+			delect(index, type){
240
+				if(type=='1'){
241
+					this.startDept.splice(index, 1)
242
+					uni.setStorageSync('startDept', JSON.stringify(this.startDept))
243
+				}else if (type=='2'){
244
+					this.checkoutDept.splice(index, 1)
245
+					uni.setStorageSync('checkoutDept', JSON.stringify(this.checkoutDept))
246
+				}else if (type=='3'){
247
+					this.testTube.splice(index, 1)
248
+					uni.setStorageSync('testTube', JSON.stringify(this.testTube))
249
+				}else if (type=='4'){
250
+					this.speStateData.splice(index, 1)
251
+					uni.setStorageSync('speState', JSON.stringify(this.speStateData))
252
+				}
253
+			},
254
+			submit(){
255
+				uni.showLoading({
256
+				  title: '加载中',
257
+				  mask: true,
258
+				})
259
+				let data = {
260
+					id: this.id,
261
+					gdId: this.gdId,
262
+					hosId: this.detailHosId,
263
+					createTime: this.createTime,
264
+					collectDept: this.startDept && this.startDept.length>0 ? this.startDept.map(i => { return i.id}).join(',') : undefined,
265
+					repeatCollect: this.repetition[this.current] && this.repetition[this.current].value || undefined,
266
+					speState: this.speStateData && this.speStateData.length>0 ? this.speStateData.map(i => { return i.id}).join(',') : undefined,
267
+					testDept: this.checkoutDept && this.checkoutDept.length>0 ? this.checkoutDept.map(i => { return i.id}).join(',') : undefined,
268
+					tubeType: this.testTube && this.testTube.length>0 ? this.testTube.map(i => { return i.id}).join(',') : undefined,
269
+					urgent: null
270
+				}
271
+				let value = []
272
+				this.urgencyData.forEach(i=>{
273
+					if(i.checked){
274
+						value.push(i.value)
275
+					}
276
+				})
277
+				if(value.length>0){
278
+					data.urgent = value.join(',')
279
+				}else{
280
+					delete data.urgent
281
+				}
282
+				post("/simple/data/updData/speOrderCollectInfo", data).then((result) => {
283
+				  uni.hideLoading();
284
+				  if (result.status == 200) {
285
+						uni.removeStorageSync('startDept')
286
+						uni.removeStorageSync('checkoutDept')
287
+						uni.removeStorageSync('testTube')
288
+						uni.removeStorageSync('speState')
289
+						let sessData = uni.getStorageSync('gdData')
290
+						let data = null
291
+						if(sessData){
292
+							data = JSON.parse(sessData)
293
+						}else{
294
+							data = null
295
+						}
296
+						uni.navigateTo({
297
+						  url: `../scanning_Result/scanning_Result?${data}&intercept=1&isShow=0`,
298
+						});
299
+				  } else {
300
+				    uni.showToast({
301
+				      icon: "none",
302
+				      title: result.msg || "接口获取数据失败!",
303
+				    });
304
+				  }
305
+				});
306
+			},
307
+			radioChange(evt) {
308
+					for (let i = 0; i < this.repetition.length; i++) {
309
+							if (this.repetition[i].value == evt.detail.value) {
310
+									this.current = i;
311
+									break;
312
+							}
313
+					}
314
+			},
315
+			checkboxChange(e){
316
+				var items = this.urgencyData,
317
+						values = e.detail.value;
318
+					for (var i = 0, lenI = items.length; i < lenI; ++i) {
319
+						const item = items[i]
320
+						if(values.includes(item.value)){
321
+							this.$set(item,'checked',true)
322
+						}else{
323
+							this.$set(item,'checked',false)
324
+						}
325
+					}
326
+			},
327
+      selectItem(user){
328
+        uni.redirectTo({
329
+          url: `/pages/transferWorkOrder/transferWorkOrderPatient?userId=${user.id}&userName=${user.name}&userAccount=${user.account}`,
330
+        });
331
+      },
332
+      getList(keyword){
333
+        uni.showLoading({
334
+          title: "加载中",
335
+        });
336
+        post("/simple/data/fetchDataList/user", {
337
+          idx: 0,
338
+          sum: 25,
339
+          user: {
340
+            hosId: this.hosId,
341
+            name: keyword || undefined,
342
+            online: true,
343
+          }
344
+        }).then((result) => {
345
+          uni.hideLoading();
346
+          if (result.status == 200) {
347
+            this.list = result.list || [];
348
+          } else {
349
+            uni.showToast({
350
+              icon: "none",
351
+              title: result.msg || "接口获取数据失败!",
352
+            });
353
+          }
354
+        });
355
+      },
356
+    }
357
+  }
358
+</script>
359
+
360
+<style scoped>
361
+	uni-checkbox-group,
362
+	uni-radio-group{
363
+		display: flex;
364
+	}
365
+	.uni-label-pointer{
366
+		display: flex;
367
+		margin-left: 20rpx;
368
+	}
369
+/* 	uni-radio-group{
370
+		
371
+	} */
372
+</style>
373
+<style lang="less" scoped>
374
+.container{
375
+  width: 100%;
376
+	height: 100vh;
377
+	.title{
378
+		font-size: 32rpx;
379
+		font-weight: bold;
380
+		color: #49B856;
381
+		text-align: center;
382
+		padding: 20rpx 0;
383
+	}
384
+	.content{
385
+		height: 82vh;
386
+		overflow-y: auto;
387
+		.list{
388
+			.top{
389
+				display: flex;
390
+				justify-content: space-between;
391
+				align-items: center;
392
+				padding: 20rpx;
393
+				border-bottom: 1px solid #E6E6E6;
394
+				.title{
395
+					font-size: 32rpx;
396
+					font-weight: bold;
397
+					color: #000;
398
+				}
399
+				.right-icon{
400
+					color: #888;
401
+				}
402
+			}
403
+			.content{
404
+				display: flex;
405
+				justify-content: space-between;
406
+				align-items: center;
407
+				padding: 0 20rpx;
408
+				height: 80rpx;
409
+				.name{
410
+					
411
+				}
412
+				.right-icon{
413
+					color: #888;
414
+				}
415
+			}
416
+		}
417
+	}
418
+  .footer{
419
+		padding: 0 20rpx;
420
+    margin-top: 24rpx;
421
+    margin-bottom: 24rpx;
422
+    line-height: 80rpx;
423
+    height: 80rpx;
424
+    background: #fff;
425
+    display: flex;
426
+		justify-content: space-between;
427
+    align-items: center;
428
+    .btn {
429
+			width: 48%;
430
+      height: 80rpx;
431
+      border-radius: 8rpx;
432
+      font-size: 32rpx;
433
+      text-align: center;
434
+    }
435
+		.affirm{
436
+			background-color: #49B856;
437
+			color: #fff;
438
+		}
439
+		.cancel{
440
+			background-color: #AFAFAF;
441
+			color: #fff;
442
+		}
443
+  }
444
+}
445
+
446
+</style>

+ 26 - 3
static/font/demo_index.html

@@ -55,6 +55,12 @@
55 55
           <ul class="icon_lists dib-box">
56 56
           
57 57
             <li class="dib">
58
+              <span class="icon newicon">&#xe644;</span>
59
+                <div class="name">修改</div>
60
+                <div class="code-name">&amp;#xe644;</div>
61
+              </li>
62
+          
63
+            <li class="dib">
58 64
               <span class="icon newicon">&#xea89;</span>
59 65
                 <div class="name">休息中</div>
60 66
                 <div class="code-name">&amp;#xea89;</div>
@@ -732,9 +738,9 @@
732 738
 <pre><code class="language-css"
733 739
 >@font-face {
734 740
   font-family: 'newicon';
735
-  src: url('iconfont.woff2?t=1744858396442') format('woff2'),
736
-       url('iconfont.woff?t=1744858396442') format('woff'),
737
-       url('iconfont.ttf?t=1744858396442') format('truetype');
741
+  src: url('iconfont.woff2?t=1747104804641') format('woff2'),
742
+       url('iconfont.woff?t=1747104804641') format('woff'),
743
+       url('iconfont.ttf?t=1747104804641') format('truetype');
738 744
 }
739 745
 </code></pre>
740 746
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -761,6 +767,15 @@
761 767
         <ul class="icon_lists dib-box">
762 768
           
763 769
           <li class="dib">
770
+            <span class="icon newicon newicon-weibiaoti2010104"></span>
771
+            <div class="name">
772
+              修改
773
+            </div>
774
+            <div class="code-name">.newicon-weibiaoti2010104
775
+            </div>
776
+          </li>
777
+          
778
+          <li class="dib">
764 779
             <span class="icon newicon newicon-xiuxizhong"></span>
765 780
             <div class="name">
766 781
               休息中
@@ -1779,6 +1794,14 @@
1779 1794
           
1780 1795
             <li class="dib">
1781 1796
                 <svg class="icon svg-icon" aria-hidden="true">
1797
+                  <use xlink:href="#newicon-weibiaoti2010104"></use>
1798
+                </svg>
1799
+                <div class="name">修改</div>
1800
+                <div class="code-name">#newicon-weibiaoti2010104</div>
1801
+            </li>
1802
+          
1803
+            <li class="dib">
1804
+                <svg class="icon svg-icon" aria-hidden="true">
1782 1805
                   <use xlink:href="#newicon-xiuxizhong"></use>
1783 1806
                 </svg>
1784 1807
                 <div class="name">休息中</div>

+ 7 - 3
static/font/iconfont.css

@@ -1,8 +1,8 @@
1 1
 @font-face {
2 2
   font-family: "newicon"; /* Project id 4304849 */
3
-  src: url('~@/static/font/iconfont.woff2?t=1744858396442') format('woff2'),
4
-       url('~@/static/font/iconfont.woff?t=1744858396442') format('woff'),
5
-       url('~@/static/font/iconfont.ttf?t=1744858396442') format('truetype');
3
+  src: url('~@/static/font/iconfont.woff2?t=1747104804641') format('woff2'),
4
+       url('~@/static/font/iconfont.woff?t=1747104804641') format('woff'),
5
+       url('~@/static/font/iconfont.ttf?t=1747104804641') format('truetype');
6 6
 }
7 7
 
8 8
 .newicon {
@@ -13,6 +13,10 @@
13 13
   -moz-osx-font-smoothing: grayscale;
14 14
 }
15 15
 
16
+.newicon-weibiaoti2010104:before {
17
+  content: "\e644";
18
+}
19
+
16 20
 .newicon-xiuxizhong:before {
17 21
   content: "\ea89";
18 22
 }

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
static/font/iconfont.js


+ 7 - 0
static/font/iconfont.json

@@ -6,6 +6,13 @@
6 6
   "description": "",
7 7
   "glyphs": [
8 8
     {
9
+      "icon_id": "1069107",
10
+      "name": "修改",
11
+      "font_class": "weibiaoti2010104",
12
+      "unicode": "e644",
13
+      "unicode_decimal": 58948
14
+    },
15
+    {
9 16
       "icon_id": "8189388",
10 17
       "name": "休息中",
11 18
       "font_class": "xiuxizhong",

BIN
static/font/iconfont.ttf


BIN
static/font/iconfont.woff


BIN
static/font/iconfont.woff2