seimin 1 gadu atpakaļ
vecāks
revīzija
8589821711

+ 1 - 1
main.js

@@ -7,7 +7,7 @@ import './mixins/mixin'
7 7
 // new VConsole();
8 8
 // import eruda from 'eruda';
9 9
 // eruda.init();
10
-console.info('v2.4.43');
10
+console.info('v2.4.44');
11 11
 Vue.prototype.wx = wx //声明扫码
12 12
 Vue.prototype.audios = [] //待播放的语音集合
13 13
 // #endif

+ 8 - 0
pages.json

@@ -468,6 +468,14 @@
468 468
         }
469 469
       }
470 470
 
471
+    }, {
472
+      "path": "pages/orderSignBloodDetail/orderSignBloodDetail",
473
+      "style": {
474
+        "h5": {
475
+          "titleNView": false
476
+        }
477
+      }
478
+
471 479
     }
472 480
   ],
473 481
   "globalStyle": {

+ 121 - 19
pages/endOrderSignBlood/endOrderSignBlood.vue

@@ -10,7 +10,7 @@
10 10
     </view>
11 11
 
12 12
     <view class="Scanning_cont_cont">
13
-       <view>您已到达{{queryObj.deptName}},您需要交接血制品数量为 <text class="red fz58">{{dataList.bloodTotalCount}}</text></view>
13
+       <view>您已到达{{queryObj.deptName}},请选择血制品进行交接</view>
14 14
     </view>
15 15
 
16 16
     <view class="Scanning_top">
@@ -21,14 +21,20 @@
21 21
 
22 22
     <view class="Scanning_cont">
23 23
       <view class="list" v-for="(v2, i2) of dataList.children" :key="i2">
24
-        <view class="list_top">
25
-          <text class="newicon newicon-a-ziyuan7"></text>
26
-          <view class="title1 ellipsis">
27
-            <text>{{v2.patientName}}</text><text>{{v2.hosNum}}</text>
28
-          </view>
29
-          <view>
30
-            <text>{{v2.count}}袋</text>
31
-          </view>
24
+        <view class="list_top" :class="{disabled: v2.state.value == 5}">
25
+          <checkbox-group @change="changeCheckbox(v2)" style="width: 100%;">
26
+            <label style="display: flex;position: relative;">
27
+              <checkbox class="checkbox" :checked="v2.checked" :disabled="v2.state.value == 5" />
28
+              <text class="newicon newicon-a-ziyuan7"></text>
29
+              <view class="title1 ellipsis">
30
+                <text>{{v2.patientName}}</text><text>{{v2.hosNum}}</text>
31
+              </view>
32
+              <view style="display: flex;align-items: center;justify-content: space-between;">
33
+                <text>{{v2.count}}袋</text>
34
+                <text class="state">{{v2.state ? v2.state.name : ''}}</text>
35
+              </view>
36
+            </label>
37
+          </checkbox-group>
32 38
         </view>
33 39
         <view class="list_bottom_wrap" v-for="(v3, i3) of v2.children" :key="i3" @click="v3.checked = !v3.checked">
34 40
           <view class="list_bottom">
@@ -68,8 +74,8 @@
68 74
       </view>
69 75
     </view>
70 76
     <view class="foot_btn_spe">
71
-      <view class="btn1" @click="complete()" v-if="dataList.bloodTotalCount">核对完成</view>
72
-      <view class="btn3" @click="goBack()">取消</view>
77
+      <view class="btn1" @click="complete()" v-if="dataList.bloodTotalCount">{{isComplete ? '核对完成-完成工单' : '核对完成'}}</view>
78
+      <view class="btn3" @click="goBack()">返回</view>
73 79
     </view>
74 80
     <!-- 填写交接人工号弹窗 -->
75 81
     <selectAccount @click.stop.native v-if="hosModels.disjunctor" :content="hosModels.content" :disjunctor="hosModels.disjunctor" @ok="hosOk"
@@ -94,11 +100,55 @@
94 100
         },
95 101
         dataList: {},
96 102
         queryObj: {}, //路由传递过来的数据
103
+        isComplete: false,
97 104
       };
98 105
     },
99 106
     methods: {
107
+      // arrayToObject(dataList){
108
+      //   let bloodList = [];
109
+      //   dataList.forEach(item1 => {
110
+      //     item1.children.forEach(item2 => {
111
+      //       bloodList = bloodList.concat(item2.children);
112
+      //     })
113
+      //   })
114
+      //   let obj = {};
115
+      //   bloodList.forEach(v => {
116
+      //     if(obj[v.gdid]){
117
+      //       obj[v.gdid].push(v)
118
+      //     }else{
119
+      //       obj[v.gdid] = [];
120
+      //     }
121
+      //   })
122
+      //   return obj;
123
+      // },
124
+      changeCheckbox(data){
125
+        data.checked = !data.checked;
126
+        
127
+        // console.log(this.dataList.children);
128
+        // let dataResList = this.dataList.children.filter(v => v.state.value == 4);
129
+        // let bloodResObj = this.arrayToObject(dataResList);
130
+        
131
+        // let dataCheckedList = this.dataList.children.filter(v => v.checked && v.state.value == 4);
132
+        // let bloodCheckedObj = this.arrayToObject(dataCheckedList);
133
+        
134
+        // let isComplete = false;
135
+        // for(let key in bloodResObj){
136
+        //   if(bloodCheckedObj[key] && bloodCheckedObj[key].length === bloodResObj[key].length){
137
+        //     isComplete = true;
138
+        //     break;
139
+        //   }
140
+        // }
141
+        
142
+        // this.isComplete = isComplete;
143
+        
144
+        
145
+        let allData = this.dataList.children.filter(v => v.state.value == 4);
146
+        let allDataChecked = this.dataList.children.filter(v => v.checked && v.state.value == 4);
147
+        this.isComplete = allData.length === allDataChecked.length;
148
+      },
100 149
       // 核对完成
101 150
       complete(){
151
+        console.log(this.dataList.children);
102 152
         uni.showLoading({
103 153
           title: "加载中",
104 154
           mask: true,
@@ -192,12 +242,25 @@
192 242
       },
193 243
       // 填写交接人工号弹窗
194 244
       showSelectAccount() {
245
+        console.log(this.dataList.children);
246
+        let dataList = this.dataList.children.filter(v => v.checked && v.state.value == 4);
247
+        let bloodNum = dataList.reduce((pre,current) => pre + current.count, 0);
248
+        let patientNum = dataList.length;
195 249
         this.hosModels = {
196
-          content: "确定核对完成,请输入交接人员工号",
250
+          content: `已选择${patientNum}名患者共${bloodNum}袋血制品,确定核对完成,请输入交接人员工号!`,
197 251
           disjunctor: true,
198 252
         };
199 253
       },
200 254
       checkComplete(accountObj){
255
+        console.log(this.dataList.children);
256
+        let dataList = this.dataList.children.filter(v => v.checked && v.state.value == 4);
257
+        let bloodList = [];
258
+        dataList.forEach(item1 => {
259
+          item1.children.forEach(item2 => {
260
+            bloodList = bloodList.concat(item2.children);
261
+          })
262
+        })
263
+        console.log(bloodList);
201 264
         uni.showLoading({
202 265
           title: "加载中",
203 266
           mask: true,
@@ -205,7 +268,9 @@
205 268
         let postData = {
206 269
           "type": "bloodTake",
207 270
           "orderId": 0,
208
-          "orderIds": this.queryObj.orderIds || undefined,
271
+          delivery: this.queryObj.type === 'delivery' ? true : undefined,
272
+          // "orderIds": this.queryObj.orderIds || undefined,
273
+          bloodIds: bloodList.map(v => v.id).toString(),
209 274
         };
210 275
         if (accountObj) {
211 276
           postData.handoverUser = accountObj.accountId;
@@ -273,6 +338,7 @@
273 338
               dataNewList.children.push({
274 339
                 patientName: key2.split('|')[0],
275 340
                 hosNum: key2.split('|')[1],
341
+                state: array3[0].children[0].state,
276 342
                 count: array3.reduce((pre, current) => pre + current.count, 0),
277 343
                 children: array3,
278 344
               });
@@ -435,7 +501,7 @@
435 501
         padding: 16rpx 20rpx;
436 502
         flex: 1;
437 503
         &.title1{
438
-          flex: 4;
504
+          flex: 2;
439 505
           word-break: break-all;
440 506
         }
441 507
       }
@@ -458,20 +524,56 @@
458 524
           font-size: 30rpx;
459 525
           position: relative;
460 526
           padding-bottom: 16rpx;
527
+          
528
+          &.disabled{
529
+            color: #767676!important;
530
+            .newicon-a-ziyuan7,
531
+            .state{
532
+              color: #767676!important;
533
+            }
534
+          }
535
+          
536
+          .checkbox{
537
+            position: absolute;
538
+            left: 16rpx;
539
+            top: 14rpx;
540
+            /deep/ .uni-checkbox-input{
541
+              width: 28rpx!important;
542
+              height: 28rpx!important;
543
+            }
544
+            
545
+            /deep/ .uni-checkbox-input.uni-checkbox-input-checked:before{
546
+              font-size: 28rpx!important;
547
+            }
548
+            
549
+            /deep/ .uni-checkbox-input.uni-checkbox-input-checked{
550
+              color: #42b983!important;
551
+            }
552
+          }
553
+          
554
+          /deep/ .checkbox:not([disabled]) .uni-checkbox-input:hover {
555
+            border-color: #42b983 !important;
556
+            color: #42b983 !important;
557
+          }
461 558
 
462 559
           .newicon-a-ziyuan7{
463 560
             position: absolute;
464
-            left: 12rpx;
561
+            left: 54rpx;
465 562
             top: 14rpx;
466 563
             font-size: 32rpx;
467 564
             color: #49b856;
468 565
           }
566
+          .state{
567
+            font-size: 22rpx;
568
+            font-weight: bold;
569
+            color: #49b856;
570
+          }
469 571
           view{
470 572
             padding: 16rpx 20rpx 0 0;
471 573
             flex: 1;
472 574
             &.title1{
473
-              padding: 16rpx 20rpx 0 54rpx;
474
-              flex: 5;
575
+              padding: 16rpx 20rpx 0 94rpx;
576
+              flex: 3;
475 577
               text:first-of-type{
476 578
                 margin-right: 16rpx;
477 579
               }
@@ -486,8 +588,8 @@
486 588
             padding: 0 20rpx 16rpx 5rpx;
487 589
             flex: 1;
488 590
             &.title1{
489
-              padding: 0 20rpx 16rpx 54rpx;
490
-              flex: 5;
591
+              padding: 0 60rpx 16rpx 54rpx;
592
+              flex: 3;
491 593
               display: flex;
492 594
             }
493 595
             &.title2{

+ 13 - 5
pages/my_list/my_list.vue

@@ -44,7 +44,7 @@
44 44
         <view class="page_item" v-for="(infoDATA, i) of workData" :key="infoDATA.id" @click="detailIt(infoDATA)">
45 45
           <view class="page_item_top">
46 46
             <view class="page_item_top_L">
47
-              <text class="L_text">单号:{{ infoDATA.gdcode }}</text>
47
+              <text class="L_text">{{ infoDATA.gdcode }}</text>
48 48
               <view class="page_item_cont_start emergency1" v-if="infoDATA.emergencyType.value == 1">
49 49
                 <text>
50 50
                   <text
@@ -67,10 +67,9 @@
67 67
               <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'drugsBag'">药品<template v-if="infoDATA.goodsRemark">-{{infoDATA.goodsRemark}}</template></text>
68 68
               <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'jPBag'">静配<template v-if="infoDATA.goodsRemark">-{{infoDATA.goodsRemark}}</template></text>
69 69
               <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'inspect'">陪检<template v-if="infoDATA.goodsRemark">-{{infoDATA.goodsRemark}}</template></text>
70
-              <text class="L_iocn" v-if="
71
-                  infoDATA.taskType.associationType.value == 'patientTransport'
72
-                ">转运<template v-if="infoDATA.goodsRemark">-{{infoDATA.goodsRemark}}</template></text>
70
+              <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'patientTransport'">转运<template v-if="infoDATA.goodsRemark">-{{infoDATA.goodsRemark}}</template></text>
73 71
               <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'other'">其他<template v-if="infoDATA.goodsRemark">-{{infoDATA.goodsRemark}}</template></text>
72
+              <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'ordinary' && infoDATA.taskType.ordinaryField.value == 'blood'">血制品<template v-if="infoDATA.goodsRemark">-{{infoDATA.goodsRemark}}</template></text>
74 73
             </view>
75 74
             <view class="page_item_top_R">
76 75
               <view class="num" v-if="infoDATA.gdState.value != 6">
@@ -110,12 +109,16 @@
110 109
           <view class="page_item_foot">
111 110
             <view class="page_item_foot_text">
112 111
               <text class="text1">完成时间</text>&nbsp;&nbsp;
113
-              <text class="text1">{{ infoDATA.completeTime || '' }}</text>
112
+              <text class="text1" style="margin-left: 8rpx;">{{ infoDATA.completeTime || '' }}</text>
114 113
             </view>
115 114
             <view class="page_item_foot_text" @click.stop="goToDetail(infoDATA)" v-if="infoDATA.taskType.associationType.value==='specimen' || infoDATA.taskType.associationType.value==='specimenPlan'">
116 115
               <text class="text1">{{infoDATA.taskType.associationType.value==='specimen' ? '扫描接收数量' : '扫描送达数量'}}</text>&nbsp;&nbsp;
117 116
               <text class="text1 b">{{ infoDATA.actualReceiveNum || 0 }}</text>
118 117
             </view>
118
+            <view class="page_item_foot_text" @click.stop="goToDetailBlood(infoDATA)" v-if="infoDATA.taskType.associationType.value == 'ordinary' && infoDATA.taskType.ordinaryField.value == 'blood'">
119
+              <text class="text1">接收数量</text>&nbsp;&nbsp;
120
+              <text class="text1 b">{{ infoDATA.actualReceiveNum || 0 }}</text>
121
+            </view>
119 122
           </view>
120 123
         </view>
121 124
       </view>
@@ -173,6 +176,11 @@
173 176
       showModel,
174 177
     },
175 178
     methods: {
179
+      goToDetailBlood(order){
180
+        uni.navigateTo({
181
+          url: `../orderSignBloodDetail/orderSignBloodDetail?orderIds=${order.id}&deptName=${order.endDepts[0].dept}&deptId=${order.endDepts[0].id}`,
182
+        });
183
+      },
176 184
       goToDetail(order){
177 185
         console.log(order)
178 186
         let data = {

+ 580 - 0
pages/orderSignBloodDetail/orderSignBloodDetail.vue

@@ -0,0 +1,580 @@
1
+<template>
2
+  <view class="Scanning_Result">
3
+    <view class="Scanning_top">
4
+      <view class="title1">{{queryObj.deptName}}</view>
5
+      <view>{{dataList.patientTotalCount}}人</view>
6
+      <view>{{dataList.bloodTotalCount}}袋</view>
7
+    </view>
8
+
9
+    <view class="Scanning_cont">
10
+      <view class="list" v-for="(v2, i2) of dataList.children" :key="i2">
11
+        <view class="list_top">
12
+          <text class="newicon newicon-a-ziyuan7"></text>
13
+          <view class="title1 ellipsis">
14
+            <text>{{v2.patientName}}</text><text>{{v2.hosNum}}</text>
15
+          </view>
16
+          <view>
17
+            <text>{{v2.count}}袋</text>
18
+          </view>
19
+        </view>
20
+        <view class="list_bottom_wrap" v-for="(v3, i3) of v2.children" :key="i3" @click="v3.checked = !v3.checked">
21
+          <view class="list_bottom">
22
+            <view class="title1 ellipsis">
23
+              <text class="ellipsis">{{v3.bloodCode}}</text>
24
+              <text>{{v3.volume}}{{v3.unit}}</text>
25
+            </view>
26
+            <view class="title2">
27
+              <text>{{v3.count}}袋</text>
28
+              <text class="newicon newicon-a-ziyuan3" :class="{active: v3.checked}"></text>
29
+            </view>
30
+          </view>
31
+
32
+          <view class="list_detail" v-if="v3.checked">
33
+            <view class="list_detail_item" v-for="(v4, i4) of v3.children" :key="i4">
34
+              <view class="list_detail_item_title">
35
+                <text>{{v4.bloodCode}}{{v4.productCode ? '+' + v4.productCode : ''}}</text>
36
+                <text class="blue serialNumber">{{i4 + 1}}</text>
37
+              </view>
38
+              <view class="list_detail_item_content">
39
+                <view>
40
+                  <text>血型:{{v4.aboType}}</text>
41
+                  <text class="ml16">RH(D):{{v4.rhType}}</text>
42
+                </view>
43
+                <view>
44
+                  <text>失效时间:{{v4.overDate | formatDate('yyyy-MM-dd hh:mm')}}</text>
45
+                  <!-- <text class="zhi">至</text> -->
46
+                  <!-- <text></text> -->
47
+                </view>
48
+                <view class="list_detail_item_content_status">
49
+                  <text class="blue">{{v4.state ? v4.state.name : ''}}</text>
50
+                </view>
51
+              </view>
52
+            </view>
53
+          </view>
54
+        </view>
55
+        <view class="list_top">
56
+          <view class="receiver">
57
+            <text>交接人:{{v2.receiverDTO ? v2.receiverDTO.name : ''}}</text>
58
+            <text>交接时间:{{v2.receiveTime | formatDate('MM-dd hh:mm')}}</text>
59
+          </view>
60
+        </view>
61
+      </view>
62
+    </view>
63
+    <view class="foot_btn_spe">
64
+      <view class="btn3" @click="goBack()">返回</view>
65
+    </view>
66
+    <!-- 填写交接人工号弹窗 -->
67
+    <selectAccount @click.stop.native v-if="hosModels.disjunctor" :content="hosModels.content" :disjunctor="hosModels.disjunctor" @ok="hosOk"
68
+      @cancel="hosCancel">
69
+    </selectAccount>
70
+  </view>
71
+</template>
72
+<script>
73
+  import {
74
+    get,
75
+    post,
76
+    SM,
77
+    webHandle
78
+  } from "../../http/http.js";
79
+  export default {
80
+    data() {
81
+      return {
82
+        hosId: uni.getStorageSync('userData').user.currentHospital.id,
83
+        // 填写交接人工号弹窗model
84
+        hosModels: {
85
+          disjunctor: false,
86
+        },
87
+        dataList: {},
88
+        queryObj: {}, //路由传递过来的数据
89
+      };
90
+    },
91
+    methods: {
92
+      // 核对完成
93
+      complete(){
94
+        uni.showLoading({
95
+          title: "加载中",
96
+          mask: true,
97
+        });
98
+        post('/simple/data/fetchDataList/taskTypeConfig', {
99
+          idx: 0,
100
+          sum: 1,
101
+          taskTypeConfig: {
102
+            "taskTypeDTO": {
103
+                "hosId": {
104
+                    "id": this.hosId
105
+                },
106
+                "ordinaryField": {
107
+                    "key": "ordinary_field",
108
+                    "value": "blood"
109
+                }
110
+            }
111
+          },
112
+        }).then(res => {
113
+          uni.hideLoading();
114
+          if(res.status == 200){
115
+           let list = res.list || [];
116
+           if(list.length > 0){
117
+             let signTypeList = list[0].signTypeList || [];
118
+             let signType = signTypeList.find( v => v.value == 6 );
119
+             if(signType){
120
+               this.showSelectAccount();
121
+             }else{
122
+               this.checkComplete();
123
+             }
124
+           }else{
125
+            uni.showToast({
126
+              icon: "none",
127
+              title: "请配置血制品任务类型!",
128
+            });
129
+           }
130
+          }else{
131
+            uni.showToast({
132
+              icon: "none",
133
+              title: res.msg || "接口获取数据失败!",
134
+            });
135
+          }
136
+        })
137
+      },
138
+      // 填写交接人工号-确认
139
+      hosOk(data) {
140
+        console.log(data);
141
+        const {
142
+          accountName,
143
+          account,
144
+          accountId
145
+        } = data;
146
+        if (!accountName && !account) {
147
+          //没有填写交接人
148
+          uni.showModal({
149
+            title: "提示",
150
+            content: "请填写交接人工号!",
151
+            showCancel: false,
152
+            success: function(res) {
153
+              if (res.confirm) {
154
+                console.log("用户点击确定");
155
+              } else if (res.cancel) {
156
+                console.log("用户点击取消");
157
+              }
158
+            },
159
+          });
160
+          return;
161
+        } else if ((!accountName && account) || (accountName && !account)) {
162
+          //没有填写交接人
163
+          uni.showModal({
164
+            title: "提示",
165
+            content: "请填写正确的交接人工号!",
166
+            showCancel: false,
167
+            success: function(res) {
168
+              if (res.confirm) {
169
+                console.log("用户点击确定");
170
+              } else if (res.cancel) {
171
+                console.log("用户点击取消");
172
+              }
173
+            },
174
+          });
175
+          return;
176
+        }
177
+        this.hosModels.disjunctor = false;
178
+        this.checkComplete(data);
179
+      },
180
+      // 填写交接人工号-取消
181
+      hosCancel() {
182
+        this.hosModels.disjunctor = false;
183
+        this.flag = true;
184
+      },
185
+      // 填写交接人工号弹窗
186
+      showSelectAccount() {
187
+        this.hosModels = {
188
+          content: "确定核对完成,请输入交接人员工号",
189
+          disjunctor: true,
190
+        };
191
+      },
192
+      checkComplete(accountObj){
193
+        uni.showLoading({
194
+          title: "加载中",
195
+          mask: true,
196
+        });
197
+        let postData = {
198
+          "type": "bloodTake",
199
+          "orderId": 0,
200
+          "orderIds": this.queryObj.orderIds || undefined,
201
+        };
202
+        if (accountObj) {
203
+          postData.handoverUser = accountObj.accountId;
204
+        }
205
+        post('/transflow/checkComplete', postData).then(res => {
206
+          uni.hideLoading();
207
+          if(res.state == 200){
208
+             uni.navigateTo({
209
+               url: `../receiptpage/receiptpage`,
210
+             });
211
+          }else{
212
+            uni.showToast({
213
+              icon: "none",
214
+              title: res.msg || "接口获取数据失败!",
215
+            });
216
+          }
217
+        })
218
+      },
219
+      // 返回
220
+      goBack() {
221
+        uni.navigateBack();
222
+      },
223
+      //获取页面信息
224
+      getInfo(){
225
+        uni.showLoading({
226
+          title: "加载中",
227
+          mask: true,
228
+        });
229
+        post('/transflow/scanInfo', {
230
+          "code": "nb",
231
+          "id": 0,
232
+          "type": "bloodTake",
233
+          "bloodReceived": true,//我的-工单-血制品-详情
234
+          "deptOrderDetails": true,
235
+          "orderIds": this.queryObj.orderIds,
236
+          "deptId": this.queryObj.deptId,
237
+        }).then(res => {
238
+          uni.hideLoading();
239
+          if(res.state == 200){
240
+            let dataList = res.data.data || {};
241
+            // 第一层
242
+            let dataNewList = {
243
+              bloodTotalCount: 0,
244
+              patientTotalCount: 0,
245
+              children: [],
246
+            };
247
+
248
+            for (let key2 in dataList) {
249
+              let value2 = dataList[key2];
250
+              console.log(value2);
251
+              // 第三层,第四层
252
+              let array3 = [];
253
+              for (let key3 in value2) {
254
+                let value3 = value2[key3];
255
+                console.log(dataNewList);
256
+                array3.push({
257
+                  checked: false,
258
+                  bloodCode: key3.split('|')[0],
259
+                  volume: key3.split('|')[1],
260
+                  unit: key3.split('|')[2],
261
+                  count: value3.length,
262
+                  children: value3,
263
+                });
264
+              }
265
+              // 第二层
266
+              dataNewList.children.push({
267
+                patientName: key2.split('|')[0],
268
+                hosNum: key2.split('|')[1],
269
+                count: array3.reduce((pre, current) => pre + current.count, 0),
270
+                receiverDTO: array3[0].children[0].receiverDTO,
271
+                receiveTime: array3[0].children[0].receiveTime,
272
+                children: array3,
273
+              });
274
+            }
275
+            // 计算第一层血袋数量
276
+            dataNewList.bloodTotalCount = dataNewList.children.reduce((pre, current) => pre + current.count, 0);
277
+            // 计算第一层患者数量
278
+            dataNewList.patientTotalCount = Object.keys(dataList).length;
279
+            console.log(dataNewList)
280
+            // 赋值
281
+            this.dataList = dataNewList;
282
+          }else{
283
+            uni.showToast({
284
+              icon: "none",
285
+              title: res.msg || "接口获取数据失败!",
286
+            });
287
+          }
288
+        })
289
+      },
290
+
291
+    },
292
+    onLoad(options) {
293
+      console.log(options, "result");
294
+      this.queryObj = options;
295
+      this.getInfo();
296
+      // #ifdef APP-PLUS
297
+      webHandle("no", "app");
298
+      // #endif
299
+      // #ifdef H5
300
+      webHandle("no", "wx");
301
+      // #endif
302
+    },
303
+  };
304
+</script>
305
+<style lang="less" scoped>
306
+  .Scanning_Result {
307
+    padding: 16rpx;
308
+    display: flex;
309
+    flex-direction: column;
310
+    height: 100vh;
311
+    background-color: #f5f7fb;
312
+
313
+    .ml16{
314
+      margin-left: 16rpx;
315
+    }
316
+
317
+    .blue{
318
+      color: #49b856!important;
319
+    }
320
+
321
+    .ellipsis{
322
+      white-space: nowrap;
323
+      overflow: hidden;
324
+      text-overflow: ellipsis;
325
+    }
326
+
327
+    .Scanning_top_top {
328
+      .Scanning_top_icon {
329
+        width: 140rpx;
330
+        height: 140rpx;
331
+        margin: 50rpx auto 40rpx;
332
+        border-radius: 50%;
333
+
334
+        .speNum{
335
+          text-align: center;
336
+          font-size: 140rpx;
337
+        }
338
+
339
+        .cubeic-ok {
340
+          font-size: 140rpx;
341
+          color: #35b34a;
342
+        }
343
+
344
+        .cubeic-close {
345
+          font-size: 140rpx;
346
+          color: #ff3b53;
347
+        }
348
+      }
349
+
350
+      .Scanning_top_text {
351
+        .text1 {
352
+          font-size: 48rpx;
353
+          text-align: center;
354
+        }
355
+
356
+        .success_tips {
357
+          color: red;
358
+          font-size: 30rpx;
359
+        }
360
+      }
361
+    }
362
+
363
+    .Scanning_cont_cont {
364
+      padding-bottom: 50rpx;
365
+      text-align: center;
366
+      display: flex;
367
+      flex-direction: column;
368
+
369
+      .fz58{
370
+        font-size: 58rpx;
371
+      }
372
+
373
+      .table_bodys{
374
+        overflow-y: auto;
375
+        flex: 1;
376
+      }
377
+
378
+      .table_head{
379
+        display: flex;
380
+        margin-top: 50rpx;
381
+        .ml16{
382
+          margin-left: 16rpx;
383
+        }
384
+
385
+        view {
386
+          height: 110rpx;
387
+          line-height: 1;
388
+          flex: 1;
389
+          font-weight: bold;
390
+          color: #000;
391
+          font-size: 38rpx;
392
+          display: flex;
393
+          justify-content: center;
394
+          align-items: center;
395
+        }
396
+      }
397
+
398
+      .table_body{
399
+        background: #F3FAF7;
400
+        border-radius: 8px;
401
+        border: 1px solid #E9E9E9;
402
+        display: flex;
403
+        margin-bottom: 20rpx;
404
+        padding: 30rpx 20rpx;
405
+        view {
406
+          line-height: 1;
407
+          flex: 1;
408
+          color: #555;
409
+          font-size: 38rpx;
410
+          display: flex;
411
+          justify-content: center;
412
+          align-items: center;
413
+          word-break: break-all;
414
+        }
415
+      }
416
+    }
417
+
418
+
419
+    .Scanning_top {
420
+      margin-top: 16rpx;
421
+      background-color: #fff;
422
+      color: #49b856;
423
+      font-weight: bold;
424
+      font-size: 30rpx;
425
+      display: flex;
426
+      align-items: center;
427
+      line-height: 1.1;
428
+
429
+      view{
430
+        padding: 16rpx 20rpx;
431
+        flex: 1;
432
+        &.title1{
433
+          flex: 4;
434
+          word-break: break-all;
435
+        }
436
+      }
437
+    }
438
+
439
+    .Scanning_cont {
440
+      flex: 1;
441
+      display: flex;
442
+      flex-direction: column;
443
+      overflow-y: auto;
444
+
445
+      .list{
446
+        background-color: #fff;
447
+        margin-top: 16rpx;
448
+        line-height: 1;
449
+        .list_top{
450
+          display: flex;
451
+          font-weight: bold;
452
+          color: #000;
453
+          font-size: 30rpx;
454
+          position: relative;
455
+          padding-bottom: 16rpx;
456
+
457
+          .newicon-a-ziyuan7{
458
+            position: absolute;
459
+            left: 12rpx;
460
+            top: 14rpx;
461
+            font-size: 32rpx;
462
+            color: #49b856;
463
+          }
464
+          view{
465
+            padding: 16rpx 20rpx 0 0;
466
+            flex: 1;
467
+            &.title1{
468
+              padding: 16rpx 20rpx 0 54rpx;
469
+              flex: 5;
470
+              text:first-of-type{
471
+                margin-right: 16rpx;
472
+              }
473
+            }
474
+            &.receiver{
475
+              color: #49b856;
476
+              padding: 16rpx 20rpx 0 54rpx;
477
+              font-size: 26rpx;
478
+              text:first-of-type{
479
+                margin-right: 40rpx;
480
+              }
481
+            }
482
+          }
483
+        }
484
+        .list_bottom{
485
+          display: flex;
486
+          font-size: 25rpx;
487
+          color: #767676;
488
+          view{
489
+            padding: 0 20rpx 16rpx 5rpx;
490
+            flex: 1;
491
+            &.title1{
492
+              padding: 0 20rpx 16rpx 54rpx;
493
+              flex: 5;
494
+              display: flex;
495
+            }
496
+            &.title2{
497
+              display: flex;
498
+              align-items: center;
499
+            }
500
+            .newicon-a-ziyuan3{
501
+              color: #cdcdcd;
502
+              font-size: 12rpx;
503
+              margin-left: 20rpx;
504
+              transform: rotate(180deg);
505
+              transition: all 0.5s;
506
+              &.active{
507
+                transform: rotate(0deg);
508
+              }
509
+            }
510
+          }
511
+        }
512
+
513
+        .list_detail{
514
+          border: 2rpx solid #C6C6C6;
515
+          padding: 22rpx 30rpx 0;
516
+          font-size: 26rpx;
517
+          .list_detail_item{
518
+            margin-bottom: 22rpx;
519
+            padding: 10rpx 0;
520
+            background-color: #F3FAF7;
521
+            .list_detail_item_title{
522
+              padding: 0 17rpx 6rpx;
523
+              border-bottom: 2rpx solid #C3C3C3;
524
+              display: flex;
525
+              align-items: center;
526
+              justify-content: space-between;
527
+
528
+              .serialNumber{
529
+                font-size: 38rpx;
530
+              }
531
+            }
532
+            .list_detail_item_content{
533
+              padding: 0 17rpx;
534
+
535
+              view{
536
+                line-height: 35rpx;
537
+                margin-top: 17rpx;
538
+                &:first-of-type{
539
+                  margin-top: 9rpx;
540
+                }
541
+              }
542
+
543
+              .zhi{
544
+                margin-left: 60rpx;
545
+                margin-right: 60rpx;
546
+              }
547
+
548
+              .list_detail_item_content_status{
549
+                display: flex;
550
+                justify-content: flex-end;
551
+                text{
552
+                  font-weight: bold;
553
+                }
554
+              }
555
+            }
556
+          }
557
+        }
558
+      }
559
+    }
560
+
561
+    .foot_btn_spe {
562
+      line-height: 64rpx;
563
+      height: 64rpx;
564
+      margin-bottom: 40rpx;
565
+      text-align: center;
566
+      display: flex;
567
+      justify-content: space-between;
568
+
569
+      view {
570
+        height: 64rpx;
571
+        flex: 1;
572
+        margin: 0 1%;
573
+        background-image: linear-gradient(to right, #72c172, #3bb197);
574
+        color: #fff;
575
+        border-radius: 8rpx;
576
+        font-size: 26rpx;
577
+      }
578
+    }
579
+  }
580
+</style>

+ 43 - 0
pages/receiptpage/receiptpage.vue

@@ -281,6 +281,11 @@
281 281
               <!-- 其他临床服务-追加 -->
282 282
               <view v-if="item.taskType.associationType.value == 'other' && item.worker && item.worker.id && clinicalMultiplayerMode === 1 && showAppendUser === 1 && item.clinicalTaskIdsFlag && !item.copyBy" class="page_item_btn" @click="additionalUser(item)" hover-class="seimin-btn-hover">追加</view>
283 283
             </view>
284
+            <!-- 如果是万能交接-血制品 -->
285
+            <view class="page_item_btn" v-if="selectedLabelSlots == '执行中' && item.taskType.associationType.value == 'ordinary' && delivery === 1 && item.taskType.ordinaryField.value == 'blood' && item.gdState.value == 5" hover-class="seimin-btn-hover">
286
+              <view class="page_item_btn" @click="goTobloodEnd(item)" hover-class="seimin-btn-hover">送达交接</view>
287
+            </view>
288
+            
284 289
             <view class="page_item_btn" v-if="selectedLabelSlots == '待接单'" @click="showAlerts(item)" hover-class="seimin-btn-hover">接单</view>
285 290
           </view>
286 291
           <view class="L-l"></view>
@@ -386,6 +391,7 @@
386 391
         hosId: uni.getStorageSync('userData').user.currentHospital.id,
387 392
         clinicalMultiplayerMode: 0,
388 393
         showAppendUser: 0,
394
+        delivery: 0,
389 395
         clinicalTaskIds: [],
390 396
         other: {
391 397
           user: {},
@@ -521,6 +527,11 @@
521 527
       selectAccount,
522 528
     },
523 529
     methods: {
530
+      goTobloodEnd(order){
531
+        uni.navigateTo({
532
+          url: `../endOrderSignBlood/endOrderSignBlood?orderIds=${order.id}&deptName=${order.endDepts[0].dept}&deptId=${order.endDepts[0].id}&type=delivery`,
533
+        });
534
+      },
524 535
       async initList(){
525 536
         uni.showLoading({
526 537
           title: "加载中",
@@ -553,9 +564,23 @@
553 564
           })
554 565
         }
555 566
         
567
+        this.getBloodPageConfig()
556 568
         this.waitingOrdersGetNum();
557 569
         this.executingOrders(0);
558 570
       },
571
+      // 获取血制品页面控制开关
572
+      async getBloodPageConfig(){
573
+        let result = await this.getTaskBloodConfig();
574
+        if (result.status == 200) {
575
+          if(result.list && result.list[0]){
576
+            this.delivery = result.list[0].delivery;
577
+          }else{
578
+            this.delivery = 0;
579
+          }
580
+        } else {
581
+          this.delivery = 0;
582
+        }
583
+      },
559 584
       //获取其他临床服务业务类型
560 585
       getOtherAssociationTypes(){
561 586
         return post('/common/common/getDictionary', {
@@ -574,6 +599,24 @@
574 599
             }
575 600
         });
576 601
       },
602
+      // 获取血制品页面控制开关
603
+      getTaskBloodConfig(){
604
+        return post("/simple/data/fetchDataList/taskTypeConfig", {
605
+            "idx": 0,
606
+            "sum": 10,
607
+            "taskTypeConfig": {
608
+                "taskTypeDTO": {
609
+                    "hosId": {
610
+                        "id": this.hosId
611
+                    },
612
+                    "ordinaryField": {
613
+                        "key": "ordinary_field",
614
+                        "value": "blood"
615
+                    }
616
+                }
617
+            }
618
+        });
619
+      },
577 620
       // 手动查询-确认
578 621
       checkboxOk(bulkCopy) {
579 622
         console.log(bulkCopy);

+ 3 - 1
pages/startOrderSignBlood/startOrderSignBlood.vue

@@ -46,6 +46,7 @@
46 46
     data() {
47 47
       return {
48 48
         orderIds: '',
49
+        bloodIds: '',
49 50
         hosId: uni.getStorageSync('userData').user.currentHospital.id,
50 51
         // 填写交接人工号弹窗model
51 52
         hosModels: {
@@ -167,7 +168,7 @@
167 168
         let postData = {
168 169
           "type": "bloodTake",
169 170
           "orderId": 0,
170
-          "orderIds": this.orderIds || undefined,
171
+          "bloodIds": this.bloodIds || undefined,
171 172
         };
172 173
         if (accountObj) {
173 174
           postData.handoverUser = accountObj.accountId;
@@ -215,6 +216,7 @@
215 216
             this.orderIds = res.data.orderIds;
216 217
             this.dataList = res.data.data || [];
217 218
             this.deptTotalCount = this.dataList.length;
219
+            this.bloodIds = this.dataList.reduce((pre, current) => pre + current.bloodIds + ',', '').slice(0, -1);
218 220
             this.patientTotalCount = this.dataList.reduce((pre, current) => pre + current.patientCount, 0);
219 221
             this.bloodTotalCount = this.dataList.reduce((pre, current) => pre + current.bloodCount, 0);
220 222
           }else{