seimin 2 months ago
parent
commit
d934de4f6e

+ 5 - 0
components/bigScreen/bigScreen.vue

@@ -491,6 +491,11 @@
491 491
                           uni.navigateTo({
492 492
                             url: `/pages/medicalWaste/medicalWasteSignIn/medicalWasteSignIn?code=${data.code}&deptName=${res.deptName}&deptId=${res.deptId}`,
493 493
                           });
494
+                        }else if(res.sign === 'patientIntelligentScan'){
495
+                          // 患者陪检和患者其他服务智能扫码
496
+                          uni.navigateTo({
497
+                            url: `/pages/newSendBack/sendBackOrder/sendBackOrder?deptId=${res.deptId}&code=${data.code}`,
498
+                          });
494 499
                         }else{
495 500
                           uni.navigateTo({
496 501
                             url: `../scanning_all/scanning_all?infoDATA=${encodeURIComponent(

+ 322 - 0
components/handViewPatient/handViewPatient.vue

@@ -0,0 +1,322 @@
1
+<template>
2
+  <view class="changeHospital" v-show="disjunctor">
3
+    <view class="changeHospital__wrap">
4
+      <view class="changeHospital__header" v-if="title">
5
+        {{ title }}
6
+      </view>
7
+      <view class="changeHospital__article">
8
+        <view class="uni-list-cell">
9
+          <view class="uni-list-cell-left">
10
+            {{name}}:
11
+          </view>
12
+          <view class="uni-list-cell-db">
13
+            <input class="uni-input" auto-focus="true" :placeholder="'请填写'+name" v-model="account"
14
+              @input="bindPickerChange($event)" />
15
+          </view>
16
+        </view>
17
+        <view class="uni-list-cell">
18
+          <view class="uni-list-cell-left">
19
+            患者姓名:
20
+          </view>
21
+          <view class="uni-list-cell-db-text">
22
+            <text v-show="!loading">{{patientDTO.patientName||'无'}}</text>
23
+            <view class="sk-circle" v-show="loading">
24
+              <view class="sk-circle-dot"></view>
25
+              <view class="sk-circle-dot"></view>
26
+              <view class="sk-circle-dot"></view>
27
+              <view class="sk-circle-dot"></view>
28
+              <view class="sk-circle-dot"></view>
29
+              <view class="sk-circle-dot"></view>
30
+              <view class="sk-circle-dot"></view>
31
+              <view class="sk-circle-dot"></view>
32
+              <view class="sk-circle-dot"></view>
33
+              <view class="sk-circle-dot"></view>
34
+              <view class="sk-circle-dot"></view>
35
+              <view class="sk-circle-dot"></view>
36
+            </view>
37
+          </view>
38
+        </view>
39
+      </view>
40
+      <view class="changeHospital__footer">
41
+        <view v-if="operate.ok" class="changeHospital__ok" @click="ok" hover-class="seimin-btn-hover">
42
+          {{ operate.ok || "" }}
43
+        </view>
44
+        <view v-if="operate.cancel" class="changeHospital__cancel" @click="cancel" hover-class="seimin-btn-hover">
45
+          {{ operate.cancel || "" }}
46
+        </view>
47
+      </view>
48
+    </view>
49
+  </view>
50
+</template>
51
+
52
+<script>
53
+  import {
54
+    post
55
+  } from "../../http/http.js";
56
+  export default {
57
+    data() {
58
+      return {
59
+        cValue: '', //当前输入的内容
60
+        loading: false,
61
+        userData: null,
62
+        hosId: null,
63
+        timer: null,
64
+        patientDTO: {}, //发药单对象
65
+        account: '',
66
+      };
67
+    },
68
+    watch: {
69
+      disjunctor(newValue) {
70
+        if (newValue && this.operate.know == "知道了") {
71
+          this.time = 5;
72
+          this.timer = setInterval(() => {
73
+            this.time--;
74
+            if (this.time <= 0) {
75
+              clearInterval(this.timer);
76
+              this.know();
77
+            }
78
+          }, 1000);
79
+        }
80
+      },
81
+    },
82
+    props: {
83
+      // 显示隐藏
84
+      disjunctor: {
85
+        type: Boolean,
86
+        default: false,
87
+      },
88
+      // 标题
89
+      title: {
90
+        type: String,
91
+        default: "提示",
92
+      },
93
+      // 操作按钮文字
94
+      operate: {
95
+        type: Object,
96
+        default: () => {
97
+          return {
98
+            ok: "确认",
99
+            cancel: "取消",
100
+          };
101
+        },
102
+      },
103
+      name: {
104
+        type: String,
105
+        default: '患者腕带码'
106
+      }
107
+    },
108
+    methods: {
109
+      //修改picker的值
110
+      bindPickerChange(e) {
111
+        this.patientDTO = {};
112
+        this.loading = true;
113
+        this.cValue = e.target.value;
114
+        clearTimeout(this.timer);
115
+        if (this.cValue.length <= 4) {
116
+          this.patientDTO = {};
117
+          this.loading = false;
118
+          return;
119
+        }
120
+        this.timer = setTimeout(() => {
121
+          let nAccount = e.target.value;
122
+          post("/patient/patientByCode ", {
123
+            "code": e.target.value,
124
+          }).then(result => {
125
+            if (result.status == 200) {
126
+              if (this.cValue === nAccount) {
127
+                if (result.data) {
128
+                  //有值
129
+                  this.patientDTO = result.data;
130
+                } else {
131
+                  // 没值
132
+                  this.patientDTO = {};
133
+                }
134
+                this.loading = false;
135
+              }
136
+            } else {
137
+              this.patientDTO = {};
138
+              this.loading = false;
139
+            }
140
+          }).catch(err=>{
141
+            this.patientDTO = {};
142
+            this.loading = false;
143
+          })
144
+        }, 500)
145
+      },
146
+      // 确定
147
+      ok() {
148
+        this.$emit("ok", this.patientDTO);
149
+      },
150
+      // 取消
151
+      cancel() {
152
+        this.$emit("cancel");
153
+      },
154
+    },
155
+    created() {
156
+      this.hosId = uni.getStorageSync('userData').user.currentHospital.id;
157
+    }
158
+  };
159
+</script>
160
+
161
+<style lang="less" scoped>
162
+  .changeHospital {
163
+    position: fixed;
164
+    left: 0;
165
+    right: 0;
166
+    top: 0;
167
+    bottom: 0;
168
+    background-color: rgba(0, 0, 0, 0.2);
169
+    z-index: 999;
170
+
171
+    .uni-list-cell {
172
+      width: 90%;
173
+      display: flex;
174
+      flex-direction: row;
175
+      justify-content: space-evenly;
176
+      align-items: center;
177
+      text-align: center;
178
+      margin-top: 32rpx;
179
+
180
+      .uni-list-cell-left {
181
+        flex: 3;
182
+        font-size: 32rpx;
183
+        color: #666;
184
+      }
185
+
186
+      .uni-list-cell-db {
187
+        border: 1px solid #e5e9ed;
188
+        background-color: #fff;
189
+        padding: 16rpx 0;
190
+        flex: 5;
191
+      }
192
+
193
+      .uni-list-cell-db-text {
194
+        flex: 5;
195
+        text-align: left;
196
+      }
197
+    }
198
+
199
+    .changeHospital__wrap {
200
+      width: 90vw;
201
+      position: absolute;
202
+      left: 50%;
203
+      top: 50%;
204
+      transform: translate(-50%, -50%);
205
+      background-color: #fff;
206
+      border-radius: 12rpx;
207
+      color: #666;
208
+
209
+      .changeHospital__header {
210
+        font-size: 36rpx;
211
+        color: #000;
212
+        height: 84rpx;
213
+        display: flex;
214
+        justify-content: center;
215
+        align-items: center;
216
+      }
217
+
218
+      .changeHospital__article {
219
+        width: 90%;
220
+        margin: 0 auto 25rpx;
221
+        padding: 48rpx 0;
222
+        background-color: rgb(249, 250, 251);
223
+        border: 2rpx solid rgb(229, 233, 237);
224
+        border-radius: 12rpx;
225
+        box-sizing: border-box;
226
+        display: flex;
227
+        flex-direction: column;
228
+        justify-content: center;
229
+        align-items: center;
230
+
231
+        &.p0 {
232
+          padding: 0;
233
+        }
234
+
235
+        .changeHospital__icon {
236
+          font-size: 138rpx;
237
+          margin-bottom: 32rpx;
238
+
239
+          &.changeHospital__icon--success {
240
+            color: rgb(52, 179, 73);
241
+          }
242
+
243
+          &.changeHospital__icon--warn {
244
+            color: rgb(245, 165, 35);
245
+          }
246
+
247
+          &.changeHospital__icon--error {
248
+            color: rgb(255, 58, 82);
249
+          }
250
+        }
251
+
252
+        .changeHospital__content {
253
+          font-size: 36rpx;
254
+        }
255
+
256
+        .changeHospital__info {
257
+          font-size: 32rpx;
258
+          color: rgb(102, 102, 102);
259
+        }
260
+
261
+        .specialCloseFlag {
262
+          width: 90%;
263
+          height: 100%;
264
+          padding: 16rpx;
265
+        }
266
+
267
+        .radio-wrap {
268
+          .radio-item {
269
+            margin-top: 16rpx;
270
+
271
+            /deep/ .uni-radio-input-checked {
272
+              background-color: #49b856 !important;
273
+              border-color: #49b856 !important;
274
+            }
275
+          }
276
+        }
277
+      }
278
+
279
+      .changeHospital__footer {
280
+        box-sizing: border-box;
281
+        height: 100rpx;
282
+        border-top: 2rpx solid rgb(229, 233, 237);
283
+        display: flex;
284
+        align-items: center;
285
+
286
+        view {
287
+          height: 100%;
288
+          display: flex;
289
+          align-items: center;
290
+          justify-content: center;
291
+          font-size: 36rpx;
292
+          color: rgb(102, 102, 102);
293
+          position: relative;
294
+
295
+          &:nth-of-type(2)::before {
296
+            content: "";
297
+            position: absolute;
298
+            left: 0;
299
+            bottom: 0;
300
+            width: 2rpx;
301
+            height: 87rpx;
302
+            background-color: rgb(229, 233, 237);
303
+          }
304
+        }
305
+
306
+        .changeHospital__ok {
307
+          flex: 1;
308
+          color: rgb(73, 184, 86);
309
+        }
310
+
311
+        .changeHospital__cancel {
312
+          flex: 1;
313
+        }
314
+
315
+        .changeHospital__know {
316
+          flex: 1;
317
+          color: rgb(73, 184, 86);
318
+        }
319
+      }
320
+    }
321
+  }
322
+</style>

+ 16 - 0
pages.json

@@ -704,6 +704,22 @@
704 704
           "titleNView": false
705 705
         }
706 706
       }
707
+    },
708
+    {
709
+      "path": "pages/newSendBack/sendBackPatient/sendBackPatient", //批量送回患者-添加患者
710
+      "style": {
711
+        "h5": {
712
+          "titleNView": false
713
+        }
714
+      }
715
+    },
716
+    {
717
+      "path": "pages/newSendBack/sendBackOrder/sendBackOrder", //批量送回患者-工单核对
718
+      "style": {
719
+        "h5": {
720
+          "titleNView": false
721
+        }
722
+      }
707 723
     }
708 724
   ],
709 725
   "globalStyle": {

+ 232 - 0
pages/newSendBack/sendBackOrder/sendBackOrder.vue

@@ -0,0 +1,232 @@
1
+<template>
2
+  <view class="Scanning_Result">
3
+    <view class="Scanning_top">
4
+      工单总数量:<text class="green">{{orderList.length}}</text>
5
+    </view>
6
+
7
+    <view class="Scanning_cont">
8
+      <scroll-view scroll-y class="scrollContent">
9
+        <view class="column" v-for="(item, index) in orderList" :key="item.id">
10
+          <view class="top">
11
+            <text class="">
12
+              <text class="orders green">{{index + 1}}</text>
13
+              <text class="gdcode">{{item.gdcode}}</text>
14
+            </text>
15
+            <text class="taskName">{{item.taskType.taskName}}</text>
16
+          </view>
17
+          <view class="bottom">
18
+            <view class="name">备注:</view>
19
+            <view class="value">{{item.workOrderRemark}}</view>
20
+          </view>
21
+          <view class="bottom">
22
+            <view class="name">{{item.patient.patientName}}({{item.patient.residenceNo}})</view>
23
+          </view>
24
+        </view>
25
+      </scroll-view>
26
+    </view>
27
+
28
+    <view class="foot_btn_spe">
29
+      <view class="column">
30
+        <view class="btn" @click="goBack()">取消</view>
31
+        <view class="btn" @click="orderSignAll()" v-if="orderList.length">一键签到</view>
32
+      </view>
33
+    </view>
34
+  </view>
35
+</template>
36
+<script>
37
+  import {
38
+    get,
39
+    post,
40
+    SM,
41
+    webHandle
42
+  } from "@/http/http.js";
43
+  export default {
44
+    data() {
45
+      return {
46
+        hosId: uni.getStorageSync("userData").user.currentHospital.id,
47
+        orderList: [],//工单列表
48
+        queryObj: {}, //路由传递过来的数据
49
+      };
50
+    },
51
+    methods: {
52
+      goBack(){
53
+        uni.navigateBack();
54
+      },
55
+      // 一键签到
56
+      orderSignAll(){
57
+        uni.showModal({
58
+          title: "提示",
59
+          content: "您确定一键签到吗?",
60
+          success: (res) => {
61
+            if (res.confirm) {
62
+              console.log("用户点击确定");
63
+              uni.showLoading({
64
+                mask: true,
65
+                title: '加载中'
66
+              })
67
+              let postData = {
68
+                "deptCode": this.queryObj.code,
69
+                "ids": this.orderList.map(v => v.id),
70
+              };
71
+              console.log(this.orderList);
72
+              post("/workerOrder/handleInsAndTrans", postData).then((res) => {
73
+                console.log(res)
74
+                uni.hideLoading();
75
+                if (res.status == 200) {
76
+                  uni.showToast({
77
+                    icon: 'success',
78
+                    title: '工单签到成功',
79
+                    duration: 2000,
80
+                    mask: true,
81
+                  });
82
+                  setTimeout(() => {
83
+                    uni.navigateTo({
84
+                      url: `/pages/receiptpage/receiptpage`,
85
+                    });
86
+                  }, 2000)
87
+                } else {
88
+                  uni.showToast({
89
+                    icon: "none",
90
+                    title: res.msg || "接口获取数据失败!",
91
+                  });
92
+                }
93
+              })
94
+            } else if (res.cancel) {
95
+              console.log("用户点击取消");
96
+            }
97
+          },
98
+        });
99
+      },
100
+      // 获取工单列表
101
+      getOrderList(){
102
+        uni.showLoading({
103
+          mask: true,
104
+          title: '加载中'
105
+        })
106
+        let postData = {
107
+          "deptId": +this.queryObj.deptId,
108
+        };
109
+
110
+        post("/workerOrder/patientIntelligentScan", postData).then((res) => {
111
+          console.log(res)
112
+          uni.hideLoading();
113
+          if (res.status == 200) {
114
+            this.orderList = res.data || [];
115
+          } else {
116
+            uni.showToast({
117
+              icon: "none",
118
+              title: res.msg || "接口获取数据失败!",
119
+            });
120
+          }
121
+        })
122
+      }
123
+    },
124
+    onLoad(options) {
125
+      console.log(options, "options");
126
+      this.queryObj = options;
127
+      this.getOrderList();
128
+      // #ifdef APP-PLUS
129
+      webHandle("no", "app");
130
+      // #endif
131
+      // #ifdef H5
132
+      webHandle("no", "wx");
133
+      // #endif
134
+    },
135
+  };
136
+</script>
137
+<style lang="less" scoped>
138
+  .green{
139
+    color:#49b856;
140
+  }
141
+  .Scanning_Result {
142
+    background: #EBEBEB;
143
+    display: flex;
144
+    flex-direction: column;
145
+    height: 100vh;
146
+
147
+    .Scanning_top {
148
+      display: flex;
149
+      justify-content: center;
150
+      align-items: center;
151
+      height: 63rpx;
152
+      font-size: 28rpx;
153
+      font-weight: bold;
154
+      background-color: #fff;
155
+      margin-top: 16rpx;
156
+    }
157
+
158
+    .Scanning_cont {
159
+      flex: 1;
160
+      min-height: 0;
161
+      display: flex;
162
+      flex-direction: column;
163
+      .scrollContent{
164
+        flex: 1;
165
+        min-height: 0;
166
+      }
167
+      .column{
168
+        padding: 24rpx;
169
+        font-size: 26rpx;
170
+        margin-top: 16rpx;
171
+        background-color: #fff;
172
+        .top,.bottom{
173
+          display: flex;
174
+          align-items: center;
175
+          .name{
176
+            flex-shrink: 0;
177
+          }
178
+          .value{
179
+            word-break: break-all;
180
+          }
181
+        }
182
+        .top{
183
+          .orders{
184
+            font-size: 28rpx;
185
+            font-weight: bold;
186
+            margin-right: 24rpx;
187
+          }
188
+          .gdcode{
189
+            font-weight: bold;
190
+          }
191
+          .taskName{
192
+            flex: 1;
193
+            text-align: right;
194
+          }
195
+        }
196
+        .bottom{
197
+          margin-top: 16rpx;
198
+        }
199
+      }
200
+    }
201
+
202
+    .foot_btn_spe {
203
+      padding: 24rpx;
204
+      display: flex;
205
+      flex-direction: column;
206
+      align-items: center;
207
+      gap: 24rpx;
208
+      font-weight: bold;
209
+
210
+      .column{
211
+        width: 100%;
212
+        height: 78rpx;
213
+        display: flex;
214
+        align-items: center;
215
+        justify-content: space-between;
216
+        gap: 24rpx;
217
+
218
+        .btn {
219
+          height: 100%;
220
+          flex: 1;
221
+          background: linear-gradient( 90deg, #6FC073 0%, #3DB197 100%);
222
+          color: #fff;
223
+          border-radius: 4rpx;
224
+          font-size: 30rpx;
225
+          display: flex;
226
+          justify-content: center;
227
+          align-items: center;
228
+        }
229
+      }
230
+    }
231
+  }
232
+</style>

+ 341 - 0
pages/newSendBack/sendBackPatient/sendBackPatient.vue

@@ -0,0 +1,341 @@
1
+<template>
2
+  <view class="Scanning_Result">
3
+    <view class="Scanning_top">
4
+      患者总数量:<text class="green">{{patientList.length}}</text>
5
+    </view>
6
+
7
+    <view class="Scanning_cont">
8
+      <scroll-view scroll-y class="scrollContent">
9
+        <view class="column" v-for="(item, index) in patientList" :key="item.id">
10
+          <view class="top">
11
+            <view class="name">姓名:</view>
12
+            <view class="value">{{item.patientName}}</view>
13
+            <text class="orders green">{{index + 1}}</text>
14
+          </view>
15
+          <view class="bottom">
16
+            <view class="name">住院号:</view>
17
+            <view class="value">{{item.residenceNo}}</view>
18
+          </view>
19
+        </view>
20
+      </scroll-view>
21
+    </view>
22
+
23
+    <view class="foot_btn_spe">
24
+      <view class="column">
25
+        <view class="btn" @click="scan()">扫一扫</view>
26
+        <view class="btn" @click="hand_again()">手动录入</view>
27
+      </view>
28
+      <view class="column" v-if="patientList.length">
29
+        <view class="btn" @click="buildOrder()">建单</view>
30
+      </view>
31
+    </view>
32
+    <!-- 手动查询患者弹窗 -->
33
+    <handViewPatient v-if="patientModels.disjunctor" :title="patientModels.title"
34
+      :disjunctor="patientModels.disjunctor" @ok="patientOk" @cancel="patientCancel">
35
+    </handViewPatient>
36
+  </view>
37
+</template>
38
+<script>
39
+  import {
40
+    get,
41
+    post,
42
+    SM,
43
+    webHandle
44
+  } from "@/http/http.js";
45
+  export default {
46
+    data() {
47
+      return {
48
+        hosId: uni.getStorageSync("userData").user.currentHospital.id,
49
+        patientList: [],//患者列表
50
+        queryObj: {}, //路由传递过来的数据
51
+        scanCount: '', //已扫描数量
52
+        SMFlag: true,
53
+        // 手动查询弹窗model
54
+        patientModels: {
55
+          disjunctor: false,
56
+        },
57
+      };
58
+    },
59
+    onShow() {
60
+      this.SMFlag = true;
61
+    },
62
+    methods: {
63
+      // 手动查询-确认
64
+      patientOk(data) {
65
+        console.log(data);
66
+        if (!data.id) {
67
+          //没有查询到患者
68
+          uni.showModal({
69
+            title: '提示',
70
+            content: "没有查询到患者!",
71
+            showCancel: false,
72
+            success: function(res) {
73
+              if (res.confirm) {
74
+                console.log('用户点击确定');
75
+              } else if (res.cancel) {
76
+                console.log('用户点击取消');
77
+              }
78
+            }
79
+          });
80
+          return;
81
+        }
82
+        this.patientModels.disjunctor = false;
83
+        this.hand_scanning_common(data.residenceNo, 'hand');
84
+      },
85
+      // 手动查询-取消
86
+      patientCancel() {
87
+        this.patientModels.disjunctor = false;
88
+      },
89
+      // 手动查询弹窗
90
+      showHandViewDrugsbag() {
91
+        this.patientModels = {
92
+          title: '填写发药单号',
93
+          disjunctor: true,
94
+        }
95
+      },
96
+      // 手动录入
97
+      hand_again() {
98
+        this.showHandViewDrugsbag();
99
+      },
100
+      // 核对交接
101
+      buildOrder(){
102
+        uni.showModal({
103
+          title: "提示",
104
+          content: "您确定建单吗?",
105
+          success: (res) => {
106
+            if (res.confirm) {
107
+              console.log("用户点击确定");
108
+              uni.showLoading({
109
+                mask: true,
110
+                title: '加载中'
111
+              })
112
+              let userId = uni.getStorageSync("userData").user.id;
113
+              let postData = {
114
+                "workOrder": [],
115
+              };
116
+              console.log(this.patientList);
117
+              this.patientList.forEach(v => {
118
+                postData.workOrder.push({
119
+                  sourceId: 4,
120
+                  "hosId": this.hosId,
121
+                  "startDept": {
122
+                    "id": this.queryObj.startDeptId
123
+                  },
124
+                  "createDept": this.queryObj.startDeptId,
125
+                  "patient": {
126
+                    "patientCode": v.patientCode
127
+                  },
128
+                  "worker": {
129
+                    "id": userId
130
+                  },
131
+                })
132
+              })
133
+              post("/workerOrder/returnSickRoom", postData).then((res) => {
134
+                console.log(res)
135
+                uni.hideLoading();
136
+                if (res.status == 200) {
137
+                  uni.showToast({
138
+                    icon: 'success',
139
+                    title: '建单成功',
140
+                    duration: 2000,
141
+                    mask: true,
142
+                  });
143
+                  setTimeout(() => {
144
+                    uni.navigateTo({
145
+                      url: `/pages/receiptpage/receiptpage`,
146
+                    });
147
+                  }, 2000)
148
+                } else {
149
+                  uni.showToast({
150
+                    icon: "none",
151
+                    title: res.msg || "接口获取数据失败!",
152
+                  });
153
+                }
154
+              })
155
+            } else if (res.cancel) {
156
+              console.log("用户点击取消");
157
+            }
158
+          },
159
+        });
160
+      },
161
+      // 扫一扫
162
+      scan(isFlag = false) {
163
+        if (!this.SMFlag) {
164
+          return;
165
+        }
166
+        this.SMFlag = false;
167
+        SM().then((ress1) => {
168
+          this.hand_scanning_common(ress1, 'scan', isFlag);
169
+        }).catch(err => {
170
+          this.SMFlag = true;
171
+        });
172
+      },
173
+      // 手动输入和扫码公共方法
174
+      hand_scanning_common(ress1, type, isFlag = false) {
175
+        // ----------------
176
+        uni.showLoading({
177
+          title: "加载中",
178
+          mask: true,
179
+        });
180
+        //检验二维码的有效性
181
+        post("/dept/scanning", {
182
+          content: ress1,
183
+        }).then((result) => {
184
+          this.SMFlag = true;
185
+          if (result.state == 200 || result.state == 201) {
186
+            let codes = result.code;
187
+            if (codes) {
188
+              this.input_common(ress1, type, isFlag);
189
+            } else {
190
+              uni.hideLoading();
191
+            }
192
+          } else {
193
+            uni.hideLoading();
194
+            uni.showToast({
195
+              icon: "none",
196
+              title: result.info || "接口获取数据失败!",
197
+            });
198
+          }
199
+        });
200
+        // ------------------------------
201
+      },
202
+      // 将患者添加到患者列表
203
+      input_common(ress1, type, isFlag = false){
204
+        uni.showLoading({
205
+          title: "加载中",
206
+          mask: true,
207
+        });
208
+        post("/patient/patientByCode ", { code: ress1 }).then((ress) => {
209
+          uni.hideLoading();
210
+          if (ress.status == 200) {
211
+            let flag = this.patientList.find(v => v.id == ress.data.id);
212
+            if(flag){
213
+              uni.showToast({
214
+                icon: "none",
215
+                title: "患者已存在!",
216
+              });
217
+            }else{
218
+              this.patientList.unshift(ress.data);
219
+              uni.showToast({
220
+                icon: "none",
221
+                title: "添加患者成功!",
222
+              });
223
+            }
224
+          } else {
225
+            uni.showToast({
226
+              icon: "none",
227
+              title: ress.msg || "接口获取数据失败!",
228
+            });
229
+          }
230
+        });
231
+      },
232
+    },
233
+    onLoad(options) {
234
+      console.log(options, "options");
235
+      this.queryObj = options;
236
+      this.patientList = [{id: options.patientId, patientName: options.patientName, residenceNo: options.patientResidenceNo, patientCode: options.patientCode}]
237
+      // #ifdef APP-PLUS
238
+      webHandle("no", "app");
239
+      // #endif
240
+      // #ifdef H5
241
+      webHandle("no", "wx");
242
+      // #endif
243
+    },
244
+  };
245
+</script>
246
+<style lang="less" scoped>
247
+  .green{
248
+    color:#49b856;
249
+  }
250
+  .Scanning_Result {
251
+    background: #EBEBEB;
252
+    display: flex;
253
+    flex-direction: column;
254
+    height: 100vh;
255
+
256
+    .Scanning_top {
257
+      display: flex;
258
+      justify-content: center;
259
+      align-items: center;
260
+      height: 63rpx;
261
+      font-size: 28rpx;
262
+      font-weight: bold;
263
+      background-color: #fff;
264
+      margin-top: 16rpx;
265
+    }
266
+
267
+    .Scanning_cont {
268
+      flex: 1;
269
+      min-height: 0;
270
+      display: flex;
271
+      flex-direction: column;
272
+      .scrollContent{
273
+        flex: 1;
274
+        min-height: 0;
275
+      }
276
+      .column{
277
+        padding: 24rpx 64rpx;
278
+        font-size: 26rpx;
279
+        margin-top: 16rpx;
280
+        background-color: #fff;
281
+        .top,.bottom{
282
+          height: 50%;
283
+          display: flex;
284
+          align-items: center;
285
+          .name{
286
+            
287
+          }
288
+          .value{
289
+            flex: 1;
290
+          }
291
+        }
292
+        .top{
293
+          position: relative;
294
+          .orders{
295
+            width: 64rpx;
296
+            text-align: center;
297
+            position: absolute;
298
+            left: -64rpx;
299
+            top: 50%;
300
+            transform: translateY(-50%);
301
+            font-size: 28rpx;
302
+            font-weight: bold;
303
+          }
304
+        }
305
+        .bottom{
306
+          margin-top: 16rpx;
307
+        }
308
+      }
309
+    }
310
+
311
+    .foot_btn_spe {
312
+      display: flex;
313
+      flex-direction: column;
314
+      align-items: center;
315
+      gap: 24rpx;
316
+      font-weight: bold;
317
+      padding: 24rpx;
318
+
319
+      .column{
320
+        width: 100%;
321
+        height: 78rpx;
322
+        display: flex;
323
+        align-items: center;
324
+        justify-content: space-between;
325
+        gap: 24rpx;
326
+
327
+        .btn {
328
+          height: 100%;
329
+          flex: 1;
330
+          background: linear-gradient( 90deg, #6FC073 0%, #3DB197 100%);
331
+          color: #fff;
332
+          border-radius: 4rpx;
333
+          font-size: 30rpx;
334
+          display: flex;
335
+          justify-content: center;
336
+          align-items: center;
337
+        }
338
+      }
339
+    }
340
+  }
341
+</style>

+ 2 - 2
pages/patientInformationList/patientInformationList.vue

@@ -241,7 +241,7 @@
241 241
         })
242 242
         let userId = uni.getStorageSync("userData").user.id;
243 243
         let postData = {
244
-          "workOrder": {
244
+          "workOrder": [{
245 245
             sourceId: 4,
246 246
             "hosId": this.hosId,
247 247
             "startDept": {
@@ -254,7 +254,7 @@
254 254
             "worker": {
255 255
               "id": userId
256 256
             },
257
-          },
257
+          }],
258 258
           "inspectMode": this.selectRadio.length > 0 ? this.selectRadio[0] : undefined,
259 259
         };
260 260
         console.log(postData);

+ 70 - 30
pages/scanning_ins/scanning_ins.vue

@@ -206,23 +206,16 @@
206 206
         </view>
207 207
       </view>
208 208
 
209
+      <view class="foot_btn1" v-if="infoDATA.residenceNo && batchCreationAndReturn == 1">
210
+				<view class="btn1 btn4" @click="scanDept('all')">批量送回病房</view>
211
+      </view>
209 212
       <view class="foot_btn2" v-if="workData && workData.length > 0 && isShow">
210
-        <!-- <view class="btn1" @click="allStart(typeData)">一键操作</view> -->
211 213
         <view class="btn1" :class="(!infoDATA.residenceNo && addService==0)?'btn5':''" @click="getInspectAndPatientTransform(typeData)">一键操作</view>
212
-        <!-- <view class="btn1" @click="scanDept()">送回病房</view> -->
213 214
 				<view class="btn1" v-if="infoDATA.residenceNo" @click="scanDept()">送回病房</view>
214 215
 				<view class="btn1" v-if="!infoDATA.residenceNo && addService==1" @click="additional()">追加服务</view>
215 216
         <view class="btn2" :class="(!infoDATA.residenceNo && addService==0)?'btn5':''" @click="showAlert">知道了</view>
216 217
       </view>
217
-      <!-- <view class="foot_btn2" v-if="
218
-          workData && workData.length === 0 && isShow && wechatFocusSwitch == 1
219
-        "> -->
220
-      <view class="foot_btn2" v-if="
221
-          workData && workData.length === 0 && isShow
222
-        ">
223
-        <!-- <view class="btn1" @click="help">{{
224
-          infoDATA.focusPatient == 1 ? "无需帮助" : "需要帮助"
225
-        }}</view> -->
218
+      <view class="foot_btn2" v-if="workData && workData.length === 0 && isShow">
226 219
         <view class="btn3" v-if="infoDATA.residenceNo" @click="scanDept()">送回病房</view>
227 220
 				<view class="btn3" v-if="!infoDATA.residenceNo && addService==1" @click="additional()">追加服务</view>
228 221
         <view class="btn3" :class="(!infoDATA.residenceNo && addService==0)?'btn4':''" @click="showAlert">知道了</view>
@@ -233,9 +226,6 @@
233 226
         <view class="btn3" :class="(!infoDATA.residenceNo && addService==0)?'btn4':''" @click="showAlert">知道了</view>
234 227
       </view>
235 228
     </view>
236
-    <!-- 弹窗 -->
237
-    <!-- <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
238
-      @know="know" :operate="models.operate" @ok="ok" @cancel="cancel"></showModel> -->
239 229
     <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
240 230
       @know="know" :operate="models.operate"></showModel>
241 231
     <!-- 送回病房弹窗 -->
@@ -307,7 +297,8 @@
307 297
         animationData: {}, //动画
308 298
         isShow: true, //是否显示“一键操作”
309 299
         currentStartDept: {}, //扫描的起点科室
310
-				addService:null //是否开启允许追加服务
300
+				addService:null, //是否开启允许追加服务
301
+				batchCreationAndReturn:null //批量建立送回
311 302
       };
312 303
     },
313 304
     methods: {
@@ -505,7 +496,7 @@
505 496
         })
506 497
         let userId = uni.getStorageSync("userData").user.id;
507 498
         let postData = {
508
-          "workOrder": {
499
+          "workOrder": [{
509 500
             sourceId: 4,
510 501
             "hosId": this.hosId,
511 502
             "startDept": {
@@ -518,7 +509,7 @@
518 509
             "worker": {
519 510
               "id": userId
520 511
             },
521
-          },
512
+          }],
522 513
           "inspectMode": this.selectRadio.length > 0 ? this.selectRadio[0] : undefined,
523 514
         };
524 515
         post("/workerOrder/returnSickRoom", postData).then((res) => {
@@ -565,7 +556,7 @@
565 556
 			  });
566 557
 			},
567 558
       // 送回病房-扫描科室
568
-      scanDept() {
559
+      scanDept(type = '') {
569 560
         this.isInspectAndPatientTransform = false;
570 561
         if (!this.SMFlag) {
571 562
           return;
@@ -601,16 +592,24 @@
601 592
                       }else{
602 593
                         this.currentStartDept = res.data;
603 594
                       }
604
-                       this.models3 = {
605
-                         disjunctor: true,
606
-                         title: "提示",
607
-                         content: `您选择的起点科室为【${this.currentStartDept.dept}】,您将从【${this.currentStartDept.dept}】把【${infoDATA.patientName}】送回【${infoDATA.department.dept}】,如您确认请点击“确认建单”。`,
608
-                         icon: "warn",
609
-                         operate: {
610
-                           ok: "确认建单",
611
-                           cancel: "取消",
612
-                         },
613
-                       };
595
+                      if(type === 'all'){
596
+                        // 批量送回
597
+                        console.log('批量送回');
598
+                        uni.navigateTo({
599
+                          url: `/pages/newSendBack/sendBackPatient/sendBackPatient?patientId=${infoDATA.id}&patientName=${infoDATA.patientName}&patientResidenceNo=${infoDATA.residenceNo}&patientCode=${infoDATA.patientCode}&startDeptId=${this.currentStartDept.id}`,
600
+                        });
601
+                      }else{
602
+                        this.models3 = {
603
+                          disjunctor: true,
604
+                          title: "提示",
605
+                          content: `您选择的起点科室为【${this.currentStartDept.dept}】,您将从【${this.currentStartDept.dept}】把【${infoDATA.patientName}】送回【${infoDATA.department.dept}】,如您确认请点击“确认建单”。`,
606
+                          icon: "warn",
607
+                          operate: {
608
+                            ok: "确认建单",
609
+                            cancel: "取消",
610
+                          },
611
+                        };
612
+                      }
614 613
                     } else {
615 614
                       uni.hideLoading();
616 615
                       uni.showToast({
@@ -962,7 +961,8 @@
962 961
 			    if (result.status == 200) {
963 962
 			      let configs = result.list || [];
964 963
 			      if(configs.length){
965
-			        this.addService = configs[0].addService
964
+			        this.addService = configs[0].addService;
965
+			        this.batchCreationAndReturn = configs[0].batchCreationAndReturn;
966 966
 			      }
967 967
 			    } else {
968 968
 			      uni.showToast({
@@ -1428,6 +1428,47 @@
1428 1428
         }
1429 1429
       }
1430 1430
 
1431
+      .foot_btn1 {
1432
+        position: fixed;
1433
+        bottom: 84rpx;
1434
+        right: 20rpx;
1435
+        left: 20rpx;
1436
+        line-height: 66rpx;
1437
+        height: 100rpx;
1438
+        border-top: 2rpx solid #e5e9ed;
1439
+        background: #f9fafb;
1440
+        display: flex;
1441
+        justify-content: space-between;
1442
+
1443
+        .btn1,
1444
+        .btn2 {
1445
+          height: 66rpx;
1446
+          width: 32%;
1447
+          background-image: linear-gradient(to right, #72c172, #3bb197);
1448
+          color: #fff;
1449
+          border-radius: 8rpx;
1450
+          font-size: 32rpx;
1451
+          margin-top: 16rpx;
1452
+          text-align: center;
1453
+        }
1454
+
1455
+        .btn3 {
1456
+          height: 66rpx;
1457
+          width: 48%;
1458
+          background-image: linear-gradient(to right, #72c172, #3bb197);
1459
+          color: #fff;
1460
+          border-radius: 8rpx;
1461
+          font-size: 32rpx;
1462
+          margin-top: 16rpx;
1463
+          text-align: center;
1464
+        }
1465
+				.btn4{
1466
+					width: 100% !important;
1467
+				}
1468
+				.btn5{
1469
+					width: 48% !important;
1470
+				}
1471
+      }
1431 1472
       .foot_btn2 {
1432 1473
         position: fixed;
1433 1474
         bottom: 0;
@@ -1435,7 +1476,6 @@
1435 1476
         left: 20rpx;
1436 1477
         line-height: 66rpx;
1437 1478
         height: 100rpx;
1438
-        border-top: 2rpx solid #e5e9ed;
1439 1479
         background: #f9fafb;
1440 1480
         display: flex;
1441 1481
         justify-content: space-between;