Browse Source

标本打包

seimin 6 days ago
parent
commit
91ba71b3e7

+ 135 - 0
components/bigScreen/bigScreen.vue

@@ -258,6 +258,44 @@
258 258
           }
259 259
         })
260 260
       },
261
+      //获取标本打包信息
262
+      getSpecimenPackageInfo(responeseData, code){
263
+        console.log(responeseData);
264
+        uni.showLoading({
265
+          title: "加载中",
266
+          mask: true,
267
+        });
268
+      
269
+        post(`/transflow/scanInfo`, {type: responeseData.packageType, id: responeseData.data.id, orderStateValue: responeseData.orderStateValue}).then(res => {
270
+          uni.hideLoading();
271
+          if(res.state == 200){
272
+            if(res.data){
273
+              let orderId = responeseData.orderId;
274
+              let config = res.data.taskTypeConfig || {};
275
+              console.log(res);
276
+              if(responeseData.orderStateValue == 2 || responeseData.orderStateValue == 3 || (responeseData.orderStateValue == 4 && responeseData.workerId == uni.getStorageSync('userData').user.id)){
277
+                // 待抢单、待接单、待到达(本人),进入起点科室流程
278
+                uni.navigateTo({
279
+                  url: `/pages/specimenPackage/createOrder/createOrder?packageType=${responeseData.packageType}&packageId=${responeseData.data.id}&orderId=${responeseData.orderId || ''}&type=receive`,
280
+                });
281
+              }else if(responeseData.orderStateValue == 5 && responeseData.workerId == uni.getStorageSync('userData').user.id){
282
+                // 待送达(本人),进入终点科室流程
283
+                this.pageSpecimenPackageNavigateByConfig(config, responeseData, responeseData, code)
284
+              }else{
285
+                // 查看标本包信息
286
+                uni.navigateTo({
287
+                  url: `/pages/specimenPackage/createOrder/createOrder?packageType=${responeseData.packageType}&packageId=${responeseData.data.id}&type=view`,
288
+                });
289
+              }
290
+            }
291
+          }else{
292
+            uni.showToast({
293
+              icon: "none",
294
+              title: res.msg || "接口获取数据失败!",
295
+            });
296
+          }
297
+        })
298
+      },
261 299
       // 工单完成
262 300
       completeOrder(responseData, queryObj){
263 301
         console.log(responseData, queryObj)
@@ -294,6 +332,43 @@
294 332
           }
295 333
         })
296 334
       },
335
+      // 标本打包-工单完成
336
+      completeSpecimenPackageOrder(responseData, queryObj){
337
+        console.log(responseData, queryObj)
338
+        uni.showLoading({
339
+          title: "加载中",
340
+          mask: true,
341
+        });
342
+        let postData = {
343
+          "type": queryObj.packageType,
344
+          "packageId": responseData.dto.id,
345
+          "orderId": responseData.orderId,
346
+        };
347
+        post('/transflow/checkComplete', postData).then(res => {
348
+          uni.hideLoading();
349
+          if(res.state == 200){
350
+             uni.showToast({
351
+               icon: "none",
352
+               title: responseData.orderStateValue == 4 ? "交接成功,请尽快送达科室!" : (responseData.orderStateValue == 5 ? "交接成功,完成配送!" : ""),
353
+               duration: 60000,
354
+               mask: true,
355
+               complete(){
356
+                 setTimeout(() => {
357
+                   uni.hideToast();
358
+                   uni.redirectTo({
359
+                     url: `/pages/receiptpage/receiptpage`,
360
+                   });
361
+                 }, 2000)
362
+               }
363
+             });
364
+          }else{
365
+            uni.showToast({
366
+              icon: "none",
367
+              title: res.msg || "接口获取数据失败!",
368
+            });
369
+          }
370
+        })
371
+      },
297 372
       // 根据配置跳转页面
298 373
       pageNavigateByConfig(config, responseData, queryObj, code){
299 374
         let drugsBagType = queryObj.drugsBagType;
@@ -390,6 +465,49 @@
390 465
           });
391 466
         }
392 467
       },
468
+      // 标本打包-根据配置跳转页面
469
+      pageSpecimenPackageNavigateByConfig(config, responseData, queryObj, code){
470
+        let packageType = queryObj.packageType;
471
+        let orderId = responseData.orderId;
472
+        let packageId = responseData.data.id;
473
+        let orderStateValue = responseData.orderStateValue;
474
+        if(config.spePackageModel === 1){
475
+          // 一单一包
476
+          if(responseData.orderStateValue == 5){
477
+            // 待送达
478
+            uni.showLoading({
479
+              title: "加载中",
480
+              mask: true,
481
+            });
482
+            post("/transflow/scanBind", { type: packageType, orderId, code }).then((ress) => {
483
+              uni.hideLoading();
484
+              if (ress.state == 200) {
485
+                if(ress.data.msg){
486
+                  uni.showToast({
487
+                    icon: "none",
488
+                    title: ress.data.msg || "接口获取数据失败!",
489
+                  });
490
+                }else{
491
+                  if(config.drugsEndCheck === 1){
492
+                    // 终点科室支持核对
493
+                    uni.navigateTo({
494
+                      url: `/pages/specimenPackage/createOrder/createOrder?packageType=${packageType}&packageId=${packageId}&orderId=${orderId}&type=end`,
495
+                    });
496
+                  }else{
497
+                    // 终点科室不支持核对
498
+                    this.completeSpecimenPackageOrder(responseData, queryObj);
499
+                  }
500
+                }
501
+              } else {
502
+                uni.showToast({
503
+                  icon: "none",
504
+                  title: ress.msg || "接口获取数据失败!",
505
+                });
506
+              }
507
+            });
508
+          }
509
+        }
510
+      },
393 511
       // 底部扫描
394 512
       Scanning(qrcodePrefix = '') {
395 513
         if (!this.SMFlag) {
@@ -534,6 +652,23 @@
534 652
                           url: `/pages/scanning_drug/scanning_drug?drugsBagId=${res.drugsBagId}&drugsBagBatchNo=${res.drugsBagBatchNo}`,
535 653
                         });
536 654
                       }
655
+                    } else if (res.type == 'specimenPackage') {
656
+                      res.packageType = res.type;
657
+                      //标本打包
658
+                      if(res.data.status.value === '0'){
659
+                        // 未配置状态的标本包-查看标本包信息
660
+                        uni.navigateTo({
661
+                          url: `/pages/specimenPackage/createOrder/createOrder?packageType=${res.packageType}&packageId=${res.data.id}&type=view`,
662
+                        });
663
+                      }else if(res.orderId){
664
+                        // 有工单
665
+                        this.getSpecimenPackageInfo(res, code);
666
+                      }else{
667
+                        // 没有工单,进入起点科室流程
668
+                        uni.navigateTo({
669
+                          url: `/pages/specimenPackage/createOrder/createOrder?packageType=${res.packageType}&packageId=${res.data.id}&type=build`,
670
+                        });
671
+                      }
537 672
                     } else if (res.type == 'nucleicAcid') {
538 673
                       //扫核酸码
539 674
                       uni.navigateTo({

+ 2 - 2
components/showModel/showModel.vue

@@ -82,13 +82,13 @@
82 82
           hover-class="seimin-btn-hover"
83 83
           >{{ operate.know || "" }}</view
84 84
         >
85
-        <view
85
+        <!-- <view
86 86
           v-if="operate.know && timerFlag"
87 87
           class="showModel__know"
88 88
           @click="cancelTimer"
89 89
           hover-class="seimin-btn-hover"
90 90
           >取消自动关闭</view
91
-        >
91
+        > -->
92 92
       </view>
93 93
     </view>
94 94
   </view>

+ 17 - 1
pages.json

@@ -744,7 +744,23 @@
744 744
 		      "titleNView": false
745 745
 		    }
746 746
 		  }
747
-		}
747
+		},
748
+    {
749
+      "path": "pages/specimenPackage/createOrder/createOrder", //标本打包-创建工单
750
+      "style": {
751
+        "h5": {
752
+          "titleNView": false
753
+        }
754
+      }
755
+    },
756
+    {
757
+      "path": "pages/specimenPackage/checkPage/checkPage", //标本打包-核对交接
758
+      "style": {
759
+        "h5": {
760
+          "titleNView": false
761
+        }
762
+      }
763
+    }
748 764
   ],
749 765
   "globalStyle": {
750 766
     "navigationBarTextStyle": "black",

+ 11 - 0
pages/receipt_infopage/receipt_infopage.vue

@@ -255,6 +255,17 @@
255 255
           </text>
256 256
         </view>
257 257
       </view>
258
+      <!-- 标本打包 -->
259
+      <view class="page_item_info" v-if="infoDATA.taskType.associationType.value == 'ordinary' && infoDATA.taskType.ordinaryField.value == 'specimenPackage'">
260
+        <view>
261
+          <text class="page_item_info_title">打包码</text>
262
+          <text class="text">{{infoDATA.pathologyPackInfoDTO ? infoDATA.pathologyPackInfoDTO.packCode : ''}}</text>
263
+        </view>
264
+        <view>
265
+          <text class="page_item_info_title">标本数量</text>
266
+          <text class="text">{{infoDATA.pathologyPackInfoDTO ? infoDATA.pathologyPackInfoDTO.specimenNum : ''}}</text>
267
+        </view>
268
+      </view>
258 269
       <!-- 标本 -->
259 270
       <view class="page_item_info" v-if="
260 271
           infoDATA.taskType.associationType.value == 'specimen' ||

+ 621 - 0
pages/specimenPackage/checkPage/checkPage.vue

@@ -0,0 +1,621 @@
1
+<template>
2
+  <view class="Scanning_Result">
3
+    <view class="Scanning_top">
4
+      <view class="Scanning_top_icon">
5
+        <text v-if="workOrder.endDepts">{{workOrder.endDepts[0].dept}}签到—{{noScanNum}}/{{totalNum}}</text>
6
+      </view>
7
+    </view>
8
+
9
+    <view class="Scanning_cont">
10
+      <scroll-view scroll-y class="scrollContent">
11
+        <view class="column" v-for="item in specimenPackageList" :key="item.id">
12
+          <view class="row bd">
13
+            <view class="name">{{item.deptName}}</view>
14
+            <view class="value" :class="{ red: item.sacnState === 0 }">{{item.sacnState === 0 ? '未扫描' : '已扫描'}}</view>
15
+          </view>
16
+          <view class="row">
17
+            <view class="name">{{item.pack_code}}</view>
18
+            <view class="value">{{item.count}}</view>
19
+          </view>
20
+        </view>
21
+      </scroll-view>
22
+    </view>
23
+
24
+    <view class="foot_btn_spe">
25
+      <view class="column">
26
+        <template v-if="!config.drugsEndManual">
27
+          <view class="btn" @click="Scanning_again()">继续扫描</view>
28
+          <view class="btn" @click="scanCode()">扫一扫核对交接</view>
29
+        </template>
30
+        
31
+        <!-- 三个按钮-样式 -->
32
+        <template v-else-if="config.drugsEndManual">
33
+          <view class="btn" @click="scanCode()">扫一扫核对交接</view>
34
+          <view class="btn" @click="fillInManually(config.drugsEndManual.value)">{{config.drugsEndManual.name}}核对交接</view>
35
+          <view class="btnW100"  @click="Scanning_again()">继续扫描</view>
36
+        </template>
37
+      </view>
38
+    </view>
39
+    <!-- 填写交接人工号弹窗 -->
40
+    <selectAccount @click.stop.native v-if="hosModels.disjunctor" :disjunctor="hosModels.disjunctor" @ok="hosOk"
41
+      @cancel="hosCancel">
42
+    </selectAccount>
43
+    <!-- 动态密钥 -->
44
+    <numberKeyModel v-if="showKey" :keyArr="keyArr" @cancel="showKey = false" @confirm="confirmKey($event)"></numberKeyModel>
45
+  </view>
46
+</template>
47
+<script>
48
+  import numberKeyModel from "@/components/numberKeyModel/numberKeyModel.vue";
49
+  import {
50
+    get,
51
+    post,
52
+    SM,
53
+    webHandle
54
+  } from "@/http/http.js";
55
+  export default {
56
+    data() {
57
+      return {
58
+        hosId: uni.getStorageSync('userData').user.currentHospital.id,
59
+        specimenPackageList: [], //标本包列表
60
+        queryObj: {}, //路由传递过来的数据
61
+        workOrder: {}, //工单信息
62
+        config: {}, //配置
63
+        SMFlag: true, //控制扫码
64
+        // 填写交接人工号弹窗model
65
+        hosModels: {
66
+          disjunctor: false,
67
+        },
68
+        showKey:false,
69
+        keyNum:4, //密钥位数
70
+        isNumberKey:false, //是否开启动态密钥
71
+        keyArr: [],
72
+        totalNum: 0,//总数量
73
+        noScanNum: 0,//未扫描
74
+      };
75
+    },
76
+    components: {
77
+    	numberKeyModel,
78
+    },
79
+    onShow() {
80
+      this.SMFlag = true;
81
+    },
82
+    methods: {
83
+      // 获取配置
84
+      getConfig() {
85
+        let postData = {
86
+          idx: 0,
87
+          sum: 9999,
88
+      		hospitalConfig:{
89
+      			hosId:this.hosId,
90
+      			model:"all"
91
+      		}
92
+        };
93
+      
94
+        post("/simple/data/fetchDataList/hospitalConfig",postData).then((result) => {
95
+            if (result.status == 200) {
96
+      				this.keyArr = []
97
+      				for(let i of result.list){
98
+      					if(i.key=='digitalSecretKey'){
99
+      						if(i.value==1){
100
+      							this.isNumberKey = true
101
+      						}else{
102
+      							this.isNumberKey = false
103
+      						}
104
+      					}else if(i.key=='numberDigitalSecretKey'){
105
+      						this.keyNum = Number(i.value)
106
+      					}
107
+      				}
108
+      				for(let i = 0; i < this.keyNum; i++){
109
+      					this.keyArr.push({
110
+      						value:null
111
+      					})
112
+      				}
113
+      				console.log(444,this.keyArr)
114
+            }
115
+          });
116
+      },
117
+      confirmKey(data){
118
+      	this.padChange(data)
119
+      	this.showKey = false
120
+      },
121
+      isShowKey(){
122
+      	this.showKey = true
123
+      },
124
+      padChange(scannerCode){
125
+        if(!this.isNumberKey){
126
+        	scannerCode = scannerCode.replace('\n','')
127
+        }
128
+        this.bigScan(scannerCode);
129
+      },
130
+      // 手动填写
131
+      fillInManually(value){
132
+        if(value == 1){
133
+          // 填写工号
134
+          this.showSelectAccount();
135
+        }else if(value == 2){
136
+          // 动态密钥
137
+          this.isShowKey();
138
+        }
139
+      },
140
+      // 填写交接人工号-确认
141
+      hosOk(data) {
142
+        console.log(data);
143
+        const {
144
+          accountName,
145
+          account,
146
+          accountId
147
+        } = data;
148
+        if (!accountName && !account) {
149
+          //没有填写交接人
150
+          uni.showModal({
151
+            title: "提示",
152
+            content: "请填写交接人工号!",
153
+            showCancel: false,
154
+            success: function(res) {
155
+              if (res.confirm) {
156
+                console.log("用户点击确定");
157
+              } else if (res.cancel) {
158
+                console.log("用户点击取消");
159
+              }
160
+            },
161
+          });
162
+          return;
163
+        } else if ((!accountName && account) || (accountName && !account)) {
164
+          //没有填写交接人
165
+          uni.showModal({
166
+            title: "提示",
167
+            content: "请填写正确的交接人工号!",
168
+            showCancel: false,
169
+            success: function(res) {
170
+              if (res.confirm) {
171
+                console.log("用户点击确定");
172
+              } else if (res.cancel) {
173
+                console.log("用户点击取消");
174
+              }
175
+            },
176
+          });
177
+          return;
178
+        }
179
+        this.hosModels.disjunctor = false;
180
+        this.validateAccount(data);
181
+      },
182
+      // 填写交接人工号-取消
183
+      hosCancel() {
184
+        this.hosModels.disjunctor = false;
185
+        this.flag = true;
186
+      },
187
+      // 填写交接人工号弹窗
188
+      showSelectAccount() {
189
+        this.hosModels = {
190
+          disjunctor: true,
191
+        };
192
+      },
193
+      // 手动填写工号校验
194
+      validateAccount(accountObj){
195
+        const {
196
+          accountName,
197
+          account,
198
+          accountId
199
+        } = accountObj;
200
+        uni.showLoading({
201
+          title: "加载中",
202
+          mask: true,
203
+        });
204
+
205
+        let postData = {
206
+          extraType: 'inputAccountValid',
207
+          type: this.queryObj.packageType,
208
+          orderStateValue: this.workOrder.gdState.value,
209
+          userId: accountId,
210
+          orderId: this.workOrder.id,
211
+        }
212
+
213
+        post("/transflow/extra", postData)
214
+          .then((res) => {
215
+            uni.hideLoading();
216
+            if(res.state == 200){
217
+              if(res.data){
218
+                if (res.data.codeBean) {
219
+                  if(res.data.codeBean.valid){
220
+                    this.pageNavigateByConfig(this.config, this.workOrder, this.queryObj, { id: accountId, name: accountName }, res.data.codeBean.departmentDTO);
221
+                  }else{
222
+                    uni.showToast({
223
+                      icon: "none",
224
+                      title: res.data.codeBean.msg || "接口获取数据失败!",
225
+                    });
226
+                  }
227
+                } else {
228
+                  uni.showToast({
229
+                    icon: "none",
230
+                    title: "接口获取数据失败!",
231
+                  });
232
+                }
233
+              }else{
234
+                uni.showToast({
235
+                  icon: "none",
236
+                  title: "接口获取数据失败!",
237
+                });
238
+              }
239
+            }else{
240
+              uni.showToast({
241
+                icon: "none",
242
+                title: res.msg || "接口获取数据失败!",
243
+              });
244
+            }
245
+          });
246
+      },
247
+      // 工单完成
248
+      completeOrder(workOrder, queryObj, accountObj){
249
+        uni.showLoading({
250
+          title: "加载中",
251
+          mask: true,
252
+        });
253
+        let postData = {
254
+          "orderId": -1,
255
+          "type": queryObj.packageType,
256
+          "packageIds": this.specimenPackageList.map(v => v.packageId).toString(),
257
+          "handover": accountObj ? accountObj.id : undefined,
258
+        };
259
+        post('/transflow/complete', postData).then(res => {
260
+          uni.hideLoading();
261
+          if(res.state == 200){
262
+            uni.showToast({
263
+              icon: "none",
264
+              title: workOrder.gdState.value == 4 ? "交接成功,请尽快送达科室!" : (workOrder.gdState.value == 5 ? "交接成功,完成配送!" : ""),
265
+              duration: 60000,
266
+              mask: true,
267
+              complete(){
268
+                setTimeout(() => {
269
+                  uni.hideToast();
270
+                  uni.redirectTo({
271
+                    url: `/pages/receiptpage/receiptpage`,
272
+                  });
273
+                }, 2000)
274
+              }
275
+            });
276
+          }else{
277
+            uni.showToast({
278
+              icon: "none",
279
+              title: res.msg || "接口获取数据失败!",
280
+            });
281
+          }
282
+        })
283
+      },
284
+      // 根据配置跳转页面
285
+      pageNavigateByConfig(config, workOrder, queryObj, accountObj, departmentDTO){
286
+        console.log(accountObj, departmentDTO);
287
+        let packageType = queryObj.packageType;
288
+        let orderId = workOrder.id;
289
+        if(workOrder.gdState.value == 4){
290
+          // 待到达
291
+          if(config.drugsStartPhoto === 1){
292
+            // 起点科室支持拍照留存
293
+            uni.navigateTo({
294
+              url: `/pages/newDrug/photoRetention/photoRetention?packageType=${packageType}&orderId=${orderId}&accountId=${accountObj ? accountObj.id : ''}&accountName=${accountObj ? accountObj.name : ''}&accountDeptName=${departmentDTO ? departmentDTO.dept : ''}`,
295
+            });
296
+          }else{
297
+            // 起点科室不支持拍照留存
298
+            this.completeOrder(workOrder, queryObj, accountObj);
299
+          }
300
+        }else if(workOrder.gdState.value == 5){
301
+          // 待送达
302
+          if(config.drugsEndPhoto === 1){
303
+            // 起点科室支持拍照留存
304
+            uni.navigateTo({
305
+              url: `/pages/newDrug/photoRetention/photoRetention?packageType=${packageType}&orderId=${orderId}&accountId=${accountObj ? accountObj.id : ''}&accountName=${accountObj ? accountObj.name : ''}&accountDeptName=${departmentDTO ? departmentDTO.dept : ''}`,
306
+            });
307
+          }else{
308
+            // 起点科室不支持拍照留存
309
+            this.completeOrder(workOrder, queryObj, accountObj);
310
+          }
311
+        }
312
+      },
313
+      // 扫一扫交接
314
+      scanCode(){
315
+        if (!this.SMFlag) {
316
+          return;
317
+        }
318
+        this.SMFlag = false;
319
+        SM().then((content) => {
320
+          uni.showLoading({
321
+            title: "加载中",
322
+            mask: true,
323
+          });
324
+
325
+          this.bigScan(content);
326
+        }).catch(err => {
327
+          this.SMFlag = true;
328
+        });
329
+      },
330
+      // 扫码
331
+      bigScan(content){
332
+        let postData = {
333
+          type: this.queryObj.packageType,
334
+          orderStateValue: this.workOrder.gdState.value,
335
+          code: content,
336
+          orderId: this.workOrder.id,
337
+        }
338
+
339
+        post("/transflow/bigScan", postData)
340
+          .then((res) => {
341
+            this.SMFlag = true;
342
+            uni.hideLoading();
343
+            if (res.codeBean) {
344
+              if(res.codeBean.valid){
345
+                this.pageNavigateByConfig(this.config, this.workOrder, this.queryObj, res.codeBean.userDTO, res.codeBean.departmentDTO);
346
+              }else{
347
+                uni.showToast({
348
+                  icon: "none",
349
+                  title: res.codeBean.msg || "接口获取数据失败!",
350
+                });
351
+              }
352
+            } else {
353
+              uni.showToast({
354
+                icon: "none",
355
+                title: "接口获取数据失败!",
356
+              });
357
+            }
358
+          });
359
+      },
360
+      // 继续扫描
361
+      Scanning_again(isFlag = false) {
362
+        if (!this.SMFlag) {
363
+          return;
364
+        }
365
+        this.SMFlag = false;
366
+        SM().then((ress1) => {
367
+          this.hand_scanning_common(ress1, 'scan', isFlag);
368
+        }).catch(err => {
369
+          this.SMFlag = true;
370
+        });
371
+      },
372
+      // 手动输入和扫码公共方法
373
+      hand_scanning_common(ress1, type, isFlag = false) {
374
+        // ----------------
375
+        uni.showLoading({
376
+          title: "加载中",
377
+          mask: true,
378
+        });
379
+        //检验二维码的有效性
380
+        post("/dept/scanning", {
381
+          content: ress1,
382
+        }).then((result) => {
383
+          this.SMFlag = true;
384
+          if (result.state == 200 || result.state == 201) {
385
+            let codes = result.code;
386
+            if (codes) {
387
+              this.input_common(ress1, type, isFlag);
388
+            } else {
389
+              uni.hideLoading();
390
+            }
391
+          } else {
392
+            uni.hideLoading();
393
+            uni.showToast({
394
+              icon: "none",
395
+              title: result.info || "接口获取数据失败!",
396
+            });
397
+          }
398
+        });
399
+        // ------------------------------
400
+      },
401
+      // 录入到工单
402
+      input_common(ress1, type, isFlag = false){
403
+        uni.showLoading({
404
+          title: "加载中",
405
+          mask: true,
406
+        });
407
+        post("/transflow/scanBind", { type: this.queryObj.packageType, orderId: this.queryObj.orderId, code: ress1 }).then((ress) => {
408
+          uni.hideLoading();
409
+          if (ress.state == 200) {
410
+            if(ress.data.msg){
411
+              uni.showToast({
412
+                icon: "none",
413
+                title: ress.data.msg || "接口获取数据失败!",
414
+              });
415
+            }else{
416
+              uni.redirectTo({
417
+                url: `/pages/specimenPackage/checkPage/checkPage?packageType=${this.queryObj.packageType}&packageId=${ress.data.dto.id}&orderId=${this.queryObj.orderId}&scanOrHand=${type}`,
418
+              });
419
+            }
420
+          } else {
421
+            uni.showToast({
422
+              icon: "none",
423
+              title: ress.msg || "接口获取数据失败!",
424
+            });
425
+          }
426
+        });
427
+      },
428
+      // 初始化
429
+      init(){
430
+        uni.showLoading({
431
+          title: "加载中",
432
+          mask: true,
433
+        });
434
+
435
+        let info$ = post(`/transflow/extra`, {type: this.queryObj.packageType, extraType: 'orderInfo', orderId: +this.queryObj.orderId, checkComplete: '1'});
436
+        let config$ = post(`/simple/data/fetchDataList/taskTypeConfig`, {
437
+            "idx": 0,
438
+            "sum": 1,
439
+            "taskTypeConfig": {
440
+                "taskTypeDTO": {
441
+                    "hosId": {
442
+                        "id": this.hosId
443
+                    },
444
+                    "ordinaryField": {
445
+                        "key": "ordinary_field",
446
+                        "value": this.queryObj.packageType
447
+                    }
448
+                }
449
+            }
450
+        });
451
+
452
+        Promise.all([info$, config$]).then(result => {
453
+          
454
+          let [info, config] = result || [];
455
+
456
+          if(info.state == 200){
457
+            if(info.data){
458
+              this.workOrder = info.data.workOrder || {};
459
+            }
460
+          }else{
461
+            uni.hideLoading();
462
+            uni.showToast({
463
+              icon: "none",
464
+              title: info.msg || "接口获取数据失败!",
465
+            });
466
+          }
467
+
468
+          if(config.status == 200){
469
+            let list  = config.list || [];
470
+            this.config = list.length ? list[0] : {};
471
+          }else{
472
+            uni.hideLoading();
473
+            uni.showToast({
474
+              icon: "none",
475
+              title: config.msg || "接口获取数据失败!",
476
+            });
477
+          }
478
+          
479
+          post(`/nurse/specimen/getSpePackageScanCount`, {endDeptId: this.workOrder.endDepts[0].id}).then((ress) => {
480
+            uni.hideLoading();
481
+            if(ress.state == 200){
482
+              this.specimenPackageList = ress.data || [];
483
+              this.noScanNum = this.specimenPackageList.filter(v => v.sacnState !== 0).length;
484
+              this.totalNum = this.specimenPackageList.length;
485
+            }else{
486
+              uni.showToast({
487
+                icon: "none",
488
+                title: ress.msg || "接口获取数据失败!",
489
+              });
490
+            }
491
+          });
492
+        })
493
+      },
494
+    },
495
+    onLoad(options) {
496
+      console.log(options, "options");
497
+      this.queryObj = options;
498
+      this.init();
499
+      this.getConfig();
500
+      // #ifdef APP-PLUS
501
+      webHandle("no", "app");
502
+      // #endif
503
+      // #ifdef H5
504
+      webHandle("no", "wx");
505
+      // #endif
506
+    },
507
+  };
508
+</script>
509
+<style lang="less" scoped>
510
+  .Scanning_Result {
511
+    background: #FAFBFD;
512
+    padding: 0 24rpx;
513
+    display: flex;
514
+    flex-direction: column;
515
+    height: 100vh;
516
+
517
+    .Scanning_top {
518
+      margin: 24rpx auto;
519
+      .Scanning_top_icon {
520
+        font-size: 38rpx;
521
+        font-weight: bold;
522
+        .newicon{
523
+          margin: 0 32rpx;
524
+        }
525
+      }
526
+    }
527
+
528
+    .Scanning_cont {
529
+      flex: 1;
530
+      min-height: 0;
531
+      display: flex;
532
+      flex-direction: column;
533
+      .scrollContent{
534
+        flex: 1;
535
+        min-height: 0;
536
+      }
537
+      .column{
538
+        font-size: 30rpx;
539
+        padding: 24rpx;
540
+        background: #FAFBFD;
541
+        border: 1rpx solid #E1E1E1;
542
+        margin-top: 16rpx;
543
+        border-radius: 8rpx;
544
+        .row{
545
+          display: flex;
546
+          justify-content: space-between;
547
+          align-items: center;
548
+          margin-top: 24rpx;
549
+          &:first-of-type{
550
+            margin-top: 0;
551
+          }
552
+        }
553
+        .bd{
554
+          font-weight: bold;
555
+        }
556
+        &:first-of-type{
557
+          margin-top: 0;
558
+        }
559
+        &.head{
560
+          font-size: 30rpx;
561
+          color: #000000;
562
+          border: 1rpx solid #D9D9D9;
563
+          box-shadow: 0rpx 3rpx 6rpx 1rpx rgba(0,0,0,0.16);
564
+          background: #FBFCFE;
565
+        }
566
+        .value1{
567
+          flex: 2;
568
+          text-align: left;
569
+          word-break: break-all;
570
+          flex-shrink: 0;
571
+        }
572
+        .value2,.value3{
573
+          flex: 1;
574
+          text-align: center;
575
+          word-break: break-all;
576
+          flex-shrink: 0;
577
+        }
578
+      }
579
+    }
580
+
581
+    .foot_btn_spe {
582
+      margin: 24rpx 0;
583
+      display: flex;
584
+      flex-direction: column;
585
+      align-items: center;
586
+      gap: 24rpx;
587
+      font-weight: bold;
588
+
589
+      .column{
590
+        width: 100%;
591
+        display: flex;
592
+        justify-content: space-between;
593
+        gap: 24rpx;
594
+        flex-wrap: wrap;
595
+
596
+        .btn {
597
+          height: 78rpx;
598
+          width: calc(50% - 24rpx);
599
+          background: linear-gradient( 90deg, #6FC073 0%, #3DB197 100%);
600
+          color: #fff;
601
+          border-radius: 4rpx;
602
+          font-size: 30rpx;
603
+          display: flex;
604
+          justify-content: center;
605
+          align-items: center;
606
+        }
607
+        .btnW100 {
608
+          height: 78rpx;
609
+          width: 100%;
610
+          background: linear-gradient( 90deg, #6FC073 0%, #3DB197 100%);
611
+          color: #fff;
612
+          border-radius: 4rpx;
613
+          font-size: 30rpx;
614
+          display: flex;
615
+          justify-content: center;
616
+          align-items: center;
617
+        }
618
+      }
619
+    }
620
+  }
621
+</style>

+ 661 - 0
pages/specimenPackage/createOrder/createOrder.vue

@@ -0,0 +1,661 @@
1
+<template>
2
+  <view class="Scanning_Result">
3
+    <view class="Scanning_top">
4
+      <view class="Scanning_top_icon">
5
+        <text class="cubeic-ok newicon newicon-duigou"></text>
6
+      </view>
7
+      <view class="ScanTips">扫描成功</view>
8
+    </view>
9
+
10
+    <view class="Scanning_cont">
11
+      <scroll-view scroll-y class="scrollContent">
12
+        <view class="column">
13
+          <view class="name">打包单号:</view>
14
+          <view class="value">{{specimenPackageDTO.packCode}}</view>
15
+        </view>
16
+        <view class="column">
17
+          <view class="name">打包科室:</view>
18
+          <view class="value">{{specimenPackageDTO.packDeptDTO ? specimenPackageDTO.packDeptDTO.dept : ''}}</view>
19
+        </view>
20
+        <view class="column">
21
+          <view class="name">终点科室:</view>
22
+          <view class="value">{{specimenPackageDTO.targetDeptDTO ? specimenPackageDTO.targetDeptDTO.dept : ''}}</view>
23
+        </view>
24
+        <view class="column">
25
+          <view class="name">检验科室:</view>
26
+          <view class="value">
27
+            <template v-if="specimenPackageDTO.endDeptList">
28
+              <view class="valueBlock" v-for="item of specimenPackageDTO.endDeptList" :key="item.id">
29
+                {{item.dept}}
30
+              </view>
31
+            </template>
32
+          </view>
33
+        </view>
34
+        <view class="column">
35
+          <view class="name">标本数:</view>
36
+          <view class="value">{{specimenPackageDTO.specimenNum}}</view>
37
+        </view>
38
+        <view class="column">
39
+          <view class="name">试管类型:</view>
40
+          <view class="value">
41
+            <view class="valueBlock" v-for="tube2 of tube" :key="tube2.id">
42
+              <view class="valueItem" v-for="item of tube2" :key="item.id">{{item.name}}:{{item.size}}</view>
43
+            </view>
44
+          </view>
45
+        </view>
46
+      </scroll-view>
47
+    </view>
48
+
49
+    <view class="foot_btn_spe" v-if="config.id">
50
+      <view class="column">
51
+        <!-- 需要核对 -->
52
+        <template v-if="config.drugsStartCheck === 1">
53
+          <!-- 两个按钮-样式 设计如此,别BB -->
54
+          <template v-if="(queryObj.type === 'build' || queryObj.type === 'receive') && (config.drugsCreateSign === 1 || config.drugsReceiveSign === 1) && !config.drugsStartManual">
55
+            <view class="btn" @click="goIndex()">返回</view>
56
+            <view class="btn" @click="createOrBuildOrder(undefined, 'scan')" v-if="queryObj.type === 'build' && config.drugsCreateSign === 1">建单签到扫一扫</view>
57
+            <view class="btn" @click="createOrBuildOrder(undefined, 'hand')" v-if="queryObj.type === 'build' && config.drugsCreateSign === 1 && config.drugsStartManual">建单签到{{config.drugsStartManual.name}}</view>
58
+            <view class="btn" @click="createOrBuildOrder(orderId, 'scan')" v-if="queryObj.type === 'receive' && config.drugsReceiveSign === 1">接单签到扫一扫</view>
59
+            <view class="btn" @click="createOrBuildOrder(orderId, 'hand')" v-if="queryObj.type === 'receive' && config.drugsReceiveSign === 1 && config.drugsStartManual">接单签到{{config.drugsStartManual.name}}</view>
60
+          </template>
61
+          
62
+          <!-- 三个按钮-样式 设计如此,别BB -->
63
+          <template v-else-if="(queryObj.type === 'build' || queryObj.type === 'receive') && (config.drugsCreateSign === 1 || config.drugsReceiveSign === 1) && config.drugsStartManual">
64
+            <view class="btn" @click="createOrBuildOrder(undefined, 'scan')" v-if="queryObj.type === 'build' && config.drugsCreateSign === 1">建单签到扫一扫</view>
65
+            <view class="btn" @click="createOrBuildOrder(undefined, 'hand')" v-if="queryObj.type === 'build' && config.drugsCreateSign === 1 && config.drugsStartManual">建单签到{{config.drugsStartManual.name}}</view>
66
+            <view class="btn" @click="createOrBuildOrder(orderId, 'scan')" v-if="queryObj.type === 'receive' && config.drugsReceiveSign === 1">接单签到扫一扫</view>
67
+            <view class="btn" @click="createOrBuildOrder(orderId, 'hand')" v-if="queryObj.type === 'receive' && config.drugsReceiveSign === 1 && config.drugsStartManual">接单签到{{config.drugsStartManual.name}}</view>
68
+            <view class="btnW100 grayBg" @click="goIndex()">返回</view>
69
+          </template>
70
+        </template>
71
+        <!-- 不需要核对 -->
72
+        <template  v-if="config.drugsStartCheck !== 1">
73
+          <view class="btn" @click="goIndex()">返回</view>
74
+          <view class="btn" @click="createOrBuildOrder()" v-if="queryObj.type === 'build' && config.drugsCreateSign === 1">建单并签到</view>
75
+          <view class="btn" @click="createOrBuildOrder(orderId)" v-if="queryObj.type === 'receive' && config.drugsReceiveSign === 1">接单并签到</view>
76
+        </template>
77
+        <!-- 查看 -->
78
+        <template v-if="queryObj.type === 'view'">
79
+          <view class="btnW100" @click="goIndex()">返回</view>
80
+        </template>
81
+        <!-- 终点科室核对 -->
82
+        <template v-if="queryObj.type === 'end'">
83
+          <view class="btn" @click="goIndex()">返回</view>
84
+          <view class="btn" @click="toCheckPage()">批量交接</view>
85
+        </template>
86
+        
87
+      </view>
88
+    </view>
89
+    <!-- 填写交接人工号弹窗 -->
90
+    <selectAccount @click.stop.native v-if="hosModels.disjunctor" :disjunctor="hosModels.disjunctor" @ok="hosOk"
91
+      @cancel="hosCancel">
92
+    </selectAccount>
93
+    <!-- 动态密钥 -->
94
+    <numberKeyModel v-if="showKey" :keyArr="keyArr" @cancel="showKey = false" @confirm="confirmKey($event)"></numberKeyModel>
95
+  </view>
96
+</template>
97
+<script>
98
+  import numberKeyModel from "@/components/numberKeyModel/numberKeyModel.vue";
99
+  import {
100
+    get,
101
+    post,
102
+    SM,
103
+    webHandle
104
+  } from "@/http/http.js";
105
+  import chunk from 'lodash-es/chunk'
106
+  export default {
107
+    data() {
108
+      return {
109
+        queryObj: {}, //路由传递过来的数据
110
+        specimenPackageDTO: {}, //标本包信息
111
+        config: {}, //药品的业务流程配置
112
+        orderId: undefined, //根据药包查询到的工单ID
113
+        tube: [],//试管类型
114
+        SMFlag: true, //控制扫码
115
+        workOrder: {}, //工单信息
116
+        // 填写交接人工号弹窗model
117
+        hosModels: {
118
+          disjunctor: false,
119
+        },
120
+        showKey:false,
121
+        keyNum:4, //密钥位数
122
+        isNumberKey:false, //是否开启动态密钥
123
+        keyArr: [],
124
+      };
125
+    },
126
+    components: {
127
+    	numberKeyModel,
128
+    },
129
+    onShow() {
130
+      this.SMFlag = true;
131
+    },
132
+    methods: {
133
+      // 返回
134
+      goIndex(){
135
+       uni.redirectTo({
136
+         url: `/pages/receiptpage/receiptpage`,
137
+       });
138
+      },
139
+      // 批量交接
140
+      toCheckPage(){
141
+       uni.redirectTo({
142
+         url: `/pages/specimenPackage/checkPage/checkPage?packageType=${this.queryObj.packageType}&packageId=${this.queryObj.packageId}&orderId=${this.queryObj.orderId}`,
143
+       });
144
+      },
145
+      // 根据配置跳转页面
146
+      pageNavigateByConfig(config, responseData, queryObj, checkType){
147
+        let packageType = queryObj.packageType;
148
+        let orderId = responseData.orderId;
149
+        let packageId = queryObj.packageId;
150
+        let orderStateValue = responseData.orderStateValue;
151
+        if(config.spePackageModel === 1){
152
+          // 一单一包
153
+          if(responseData.orderStateValue == 4){
154
+            // 待到达
155
+            if(config.drugsStartCheck === 1){
156
+              // 起点科室支持核对
157
+              if(checkType === 'scan'){
158
+                // 扫码
159
+                this.scanCode();
160
+              }else if(checkType === 'hand'){
161
+                // 手动输入
162
+                this.fillInManually(config.drugsStartManual.value);
163
+              }
164
+            }else{
165
+              // 起点科室不支持核对
166
+              this.completeOrder(responseData, queryObj);
167
+            }
168
+          }
169
+        }
170
+      },
171
+      // 扫一扫交接
172
+      scanCode(){
173
+        if (!this.SMFlag) {
174
+          return;
175
+        }
176
+        this.SMFlag = false;
177
+        SM().then((content) => {
178
+          uni.showLoading({
179
+            title: "加载中",
180
+            mask: true,
181
+          });
182
+      
183
+          this.bigScan(content);
184
+        }).catch(err => {
185
+          this.SMFlag = true;
186
+        });
187
+      },
188
+      // 扫码
189
+      bigScan(content){
190
+        let postData = {
191
+          type: this.queryObj.packageType,
192
+          orderStateValue: this.workOrder.gdState.value,
193
+          code: content,
194
+          orderId: this.workOrder.id,
195
+        }
196
+      
197
+        post("/transflow/bigScan", postData)
198
+          .then((res) => {
199
+            this.SMFlag = true;
200
+            uni.hideLoading();
201
+            if (res.codeBean) {
202
+              if(res.codeBean.valid){
203
+                this.pageCheckNavigateByConfig(this.config, this.workOrder, this.queryObj, res.codeBean.userDTO, res.codeBean.departmentDTO);
204
+              }else{
205
+                uni.showToast({
206
+                  icon: "none",
207
+                  title: res.codeBean.msg || "接口获取数据失败!",
208
+                });
209
+              }
210
+            } else {
211
+              uni.showToast({
212
+                icon: "none",
213
+                title: "接口获取数据失败!",
214
+              });
215
+            }
216
+          });
217
+      },
218
+      // 获取配置
219
+      getConfig() {
220
+        let postData = {
221
+          idx: 0,
222
+          sum: 9999,
223
+      		hospitalConfig:{
224
+      			hosId:this.hosId,
225
+      			model:"all"
226
+      		}
227
+        };
228
+      
229
+        post("/simple/data/fetchDataList/hospitalConfig",postData).then((result) => {
230
+            if (result.status == 200) {
231
+      				this.keyArr = []
232
+      				for(let i of result.list){
233
+      					if(i.key=='digitalSecretKey'){
234
+      						if(i.value==1){
235
+      							this.isNumberKey = true
236
+      						}else{
237
+      							this.isNumberKey = false
238
+      						}
239
+      					}else if(i.key=='numberDigitalSecretKey'){
240
+      						this.keyNum = Number(i.value)
241
+      					}
242
+      				}
243
+      				for(let i = 0; i < this.keyNum; i++){
244
+      					this.keyArr.push({
245
+      						value:null
246
+      					})
247
+      				}
248
+      				console.log(444,this.keyArr)
249
+            }
250
+          });
251
+      },
252
+      confirmKey(data){
253
+      	this.padChange(data)
254
+      	this.showKey = false
255
+      },
256
+      isShowKey(){
257
+      	this.showKey = true
258
+      },
259
+      padChange(scannerCode){
260
+        if(!this.isNumberKey){
261
+        	scannerCode = scannerCode.replace('\n','')
262
+        }
263
+        this.bigScan(scannerCode);
264
+      },
265
+      // 手动填写
266
+      fillInManually(value){
267
+        if(value == 1){
268
+          // 填写工号
269
+          this.showSelectAccount();
270
+        }else if(value == 2){
271
+          // 动态密钥
272
+          this.isShowKey();
273
+        }
274
+      },
275
+      // 填写交接人工号-确认
276
+      hosOk(data) {
277
+        console.log(data);
278
+        const {
279
+          accountName,
280
+          account,
281
+          accountId
282
+        } = data;
283
+        if (!accountName && !account) {
284
+          //没有填写交接人
285
+          uni.showModal({
286
+            title: "提示",
287
+            content: "请填写交接人工号!",
288
+            showCancel: false,
289
+            success: function(res) {
290
+              if (res.confirm) {
291
+                console.log("用户点击确定");
292
+              } else if (res.cancel) {
293
+                console.log("用户点击取消");
294
+              }
295
+            },
296
+          });
297
+          return;
298
+        } else if ((!accountName && account) || (accountName && !account)) {
299
+          //没有填写交接人
300
+          uni.showModal({
301
+            title: "提示",
302
+            content: "请填写正确的交接人工号!",
303
+            showCancel: false,
304
+            success: function(res) {
305
+              if (res.confirm) {
306
+                console.log("用户点击确定");
307
+              } else if (res.cancel) {
308
+                console.log("用户点击取消");
309
+              }
310
+            },
311
+          });
312
+          return;
313
+        }
314
+        this.hosModels.disjunctor = false;
315
+        this.validateAccount(data);
316
+      },
317
+      // 填写交接人工号-取消
318
+      hosCancel() {
319
+        this.hosModels.disjunctor = false;
320
+        this.flag = true;
321
+      },
322
+      // 填写交接人工号弹窗
323
+      showSelectAccount() {
324
+        this.hosModels = {
325
+          disjunctor: true,
326
+        };
327
+      },
328
+      // 手动填写工号校验
329
+      validateAccount(accountObj){
330
+        const {
331
+          accountName,
332
+          account,
333
+          accountId
334
+        } = accountObj;
335
+        uni.showLoading({
336
+          title: "加载中",
337
+          mask: true,
338
+        });
339
+      
340
+        let postData = {
341
+          extraType: 'inputAccountValid',
342
+          type: this.queryObj.packageType,
343
+          orderStateValue: this.workOrder.gdState.value,
344
+          userId: accountId,
345
+          orderId: this.workOrder.id,
346
+        }
347
+      
348
+        post("/transflow/extra", postData)
349
+          .then((res) => {
350
+            uni.hideLoading();
351
+            if(res.state == 200){
352
+              if(res.data){
353
+                if (res.data.codeBean) {
354
+                  if(res.data.codeBean.valid){
355
+                    this.pageCheckNavigateByConfig(this.config, this.workOrder, this.queryObj, { id: accountId, name: accountName }, res.data.codeBean.departmentDTO);
356
+                  }else{
357
+                    uni.showToast({
358
+                      icon: "none",
359
+                      title: res.data.codeBean.msg || "接口获取数据失败!",
360
+                    });
361
+                  }
362
+                } else {
363
+                  uni.showToast({
364
+                    icon: "none",
365
+                    title: "接口获取数据失败!",
366
+                  });
367
+                }
368
+              }else{
369
+                uni.showToast({
370
+                  icon: "none",
371
+                  title: "接口获取数据失败!",
372
+                });
373
+              }
374
+            }else{
375
+              uni.showToast({
376
+                icon: "none",
377
+                title: res.msg || "接口获取数据失败!",
378
+              });
379
+            }
380
+          });
381
+      },
382
+      // 核对-根据配置跳转页面
383
+      pageCheckNavigateByConfig(config, workOrder, queryObj, accountObj, departmentDTO){
384
+        console.log(accountObj, departmentDTO);
385
+        let packageType = queryObj.packageType;
386
+        let orderId = workOrder.id;
387
+        this.completeCheckOrder(workOrder, queryObj, accountObj);
388
+      },
389
+      // 核对-工单完成
390
+      completeCheckOrder(workOrder, queryObj, accountObj){
391
+        uni.showLoading({
392
+          title: "加载中",
393
+          mask: true,
394
+        });
395
+        let postData = {
396
+          "type": queryObj.packageType,
397
+          "orderId": workOrder.id,
398
+          "packageId": +this.queryObj.packageId,
399
+          "handover": accountObj ? accountObj.id : undefined,
400
+        };
401
+        post('/transflow/checkComplete', postData).then(res => {
402
+          uni.hideLoading();
403
+          if(res.state == 200){
404
+            uni.showToast({
405
+              icon: "none",
406
+              title: workOrder.gdState.value == 4 ? "交接成功,请尽快送达科室!" : (workOrder.gdState.value == 5 ? "交接成功,完成配送!" : ""),
407
+              duration: 60000,
408
+              mask: true,
409
+              complete(){
410
+                setTimeout(() => {
411
+                  uni.hideToast();
412
+                  uni.redirectTo({
413
+                    url: `/pages/receiptpage/receiptpage`,
414
+                  });
415
+                }, 2000)
416
+              }
417
+            });
418
+          }else{
419
+            uni.showToast({
420
+              icon: "none",
421
+              title: res.msg || "接口获取数据失败!",
422
+            });
423
+          }
424
+        })
425
+      },
426
+      // 工单完成
427
+      completeOrder(responseData, queryObj){
428
+        uni.showLoading({
429
+          title: "加载中",
430
+          mask: true,
431
+        });
432
+        let postData = {
433
+          "type": queryObj.packageType,
434
+          "packageId": +this.queryObj.packageId,
435
+          "orderId": responseData.orderId,
436
+        };
437
+        post('/transflow/checkComplete', postData).then(res => {
438
+          uni.hideLoading();
439
+          if(res.state == 200){
440
+            uni.showToast({
441
+              icon: "none",
442
+              title: responseData.orderStateValue == 4 ? "交接成功,请尽快送达科室!" : (responseData.orderStateValue == 5 ? "交接成功,完成配送!" : ""),
443
+              duration: 60000,
444
+              mask: true,
445
+              complete(){
446
+                setTimeout(() => {
447
+                  uni.hideToast();
448
+                  uni.redirectTo({
449
+                    url: `/pages/receiptpage/receiptpage`,
450
+                  });
451
+                }, 2000)
452
+              }
453
+            });
454
+          }else{
455
+            uni.showToast({
456
+              icon: "none",
457
+              title: res.msg || "接口获取数据失败!",
458
+            });
459
+          }
460
+        })
461
+      },
462
+      // 建单并签到/接单并签到-orderId
463
+      // 扫码scan/手动hand-checkType
464
+      createOrBuildOrder(orderId, checkType){
465
+        uni.showModal({
466
+          title: "提示",
467
+          content: `请确认是否${orderId ? '接' : '建'}单并签到?`,
468
+          success: (result) => {
469
+            if (result.confirm) {
470
+              console.log("用户点击确定");
471
+              let postData = {
472
+                type: this.queryObj.packageType,
473
+                id: +this.queryObj.packageId,
474
+                orderId,
475
+              };
476
+              uni.showLoading({
477
+                title: "加载中",
478
+                mask: true,
479
+              });
480
+              post(`/transflow/createOrTakeOrder`, postData).then((ress) => {
481
+                uni.hideLoading();
482
+                if (ress.state == 200) {
483
+                  if(ress.data.msg){
484
+                    uni.showToast({
485
+                      icon: "none",
486
+                      title: ress.data.msg || "接口获取数据失败!",
487
+                    });
488
+                  }else{
489
+                    this.workOrder = {
490
+                      id: ress.data.orderId,
491
+                      gdState: {
492
+                        value: ress.data.orderStateValue,
493
+                      },
494
+                    };
495
+                    console.log('workOrder', this.workOrder);
496
+                    this.pageNavigateByConfig(this.config, ress.data, this.queryObj, checkType);
497
+                  }
498
+                } else {
499
+                  uni.showToast({
500
+                    icon: "none",
501
+                    title: ress.msg || "接口获取数据失败!",
502
+                  });
503
+                }
504
+              });
505
+            } else if (result.cancel) {
506
+              console.log("用户点击取消");
507
+            }
508
+          },
509
+        });
510
+      },
511
+      //获取页面信息
512
+      getInfo(){
513
+        uni.showLoading({
514
+          title: "加载中",
515
+          mask: true,
516
+        });
517
+
518
+        post(`/transflow/scanInfo`, {type: this.queryObj.packageType, id: +this.queryObj.packageId, orderStateValue: this.queryObj.type === 'end' ? '5' : '4'}).then(res => {
519
+          uni.hideLoading();
520
+          if(res.state == 200){
521
+            if(res.data){
522
+              this.specimenPackageDTO = res.data.dto || {};
523
+              this.orderId = this.queryObj.orderId;
524
+              this.config = res.data.taskTypeConfig || {};
525
+              let tube = res.data.tube || [];
526
+              this.tube = chunk(tube, 3);
527
+            }
528
+          }else{
529
+            uni.showToast({
530
+              icon: "none",
531
+              title: res.msg || "接口获取数据失败!",
532
+            });
533
+          }
534
+        })
535
+      },
536
+    },
537
+    onLoad(options) {
538
+      console.log(options, "options");
539
+      this.queryObj = options;
540
+      this.getInfo();
541
+      this.getConfig();
542
+      // #ifdef APP-PLUS
543
+      webHandle("no", "app");
544
+      // #endif
545
+      // #ifdef H5
546
+      webHandle("no", "wx");
547
+      // #endif
548
+    },
549
+  };
550
+</script>
551
+<style lang="less" scoped>
552
+  .Scanning_Result {
553
+    background: #FAFBFD;
554
+    padding: 0 48rpx;
555
+    display: flex;
556
+    flex-direction: column;
557
+    height: 100vh;
558
+
559
+    .Scanning_top {
560
+      margin: 50rpx auto 64rpx;
561
+      display: flex;
562
+      flex-direction: column;
563
+      align-items: center;
564
+      .Scanning_top_icon {
565
+        width: 128rpx;
566
+        height: 128rpx;
567
+        border-radius: 50%;
568
+
569
+        .cubeic-ok {
570
+          font-size: 128rpx;
571
+          color: #35b34a;
572
+        }
573
+      }
574
+      .ScanTips{
575
+        margin-top: 34rpx;
576
+        font-size: 38rpx;
577
+        font-weight: bold;
578
+      }
579
+    }
580
+
581
+    .Scanning_cont {
582
+      flex: 1;
583
+      min-height: 0;
584
+      display: flex;
585
+      flex-direction: column;
586
+      .scrollContent{
587
+        flex: 1;
588
+        min-height: 0;
589
+      }
590
+      .column{
591
+        display: flex;
592
+        justify-content: center;
593
+        font-size: 30rpx;
594
+        margin-bottom: 32rpx;
595
+        .name{
596
+          font-weight: bold;
597
+          word-break: break-all;
598
+          flex-shrink: 0;
599
+        }
600
+        .value{
601
+          word-break: break-all;
602
+          flex: 1;
603
+          .valueBlock{
604
+            margin-top: 16rpx;
605
+            display: flex;
606
+            &:first-of-type{
607
+              margin-top: 0;
608
+            }
609
+            .valueItem{
610
+              flex: 1;
611
+            }
612
+          }
613
+        }
614
+      }
615
+    }
616
+
617
+    .foot_btn_spe {
618
+      margin: 24rpx 0;
619
+      display: flex;
620
+      flex-direction: column;
621
+      align-items: center;
622
+      gap: 24rpx;
623
+      font-weight: bold;
624
+
625
+      .column{
626
+        width: 100%;
627
+        display: flex;
628
+        justify-content: space-between;
629
+        gap: 24rpx;
630
+        flex-wrap: wrap;
631
+        
632
+        .grayBg{
633
+          background: #8F939C!important;
634
+        }
635
+
636
+        .btn {
637
+          height: 78rpx;
638
+          width: calc(50% - 24rpx);
639
+          background: linear-gradient( 90deg, #6FC073 0%, #3DB197 100%);
640
+          color: #fff;
641
+          border-radius: 4rpx;
642
+          font-size: 30rpx;
643
+          display: flex;
644
+          justify-content: center;
645
+          align-items: center;
646
+        }
647
+        .btnW100 {
648
+          height: 78rpx;
649
+          width: 100%;
650
+          background: linear-gradient( 90deg, #6FC073 0%, #3DB197 100%);
651
+          color: #fff;
652
+          border-radius: 4rpx;
653
+          font-size: 30rpx;
654
+          display: flex;
655
+          justify-content: center;
656
+          align-items: center;
657
+        }
658
+      }
659
+    }
660
+  }
661
+</style>