seimin hai 1 ano
pai
achega
54155b5fcf

+ 1 - 1
components/bigScreen/bigScreen.vue

@@ -338,7 +338,7 @@
338 338
                         if(res.data){
339 339
                           //新血制品-扫科室
340 340
                           uni.navigateTo({
341
-                            url: `/pages/startOrderSignBlood/startOrderSignBlood?deptId=${res.deptId}&deptName=${res.deptName}&taskTypeId=${res.taskTypeId}`,
341
+                            url: `/pages/newBlood/startOrderSignBlood/startOrderSignBlood?deptId=${res.deptId}&deptName=${res.deptName}&taskTypeId=${res.taskTypeId}`,
342 342
                           });
343 343
                         }else{
344 344
                           // 走type是dept的流程

+ 222 - 0
components/cancelBlood/cancelBlood.vue

@@ -0,0 +1,222 @@
1
+<template>
2
+  <text @click.stop="selectAccountHandler(data, index)">
3
+    <text class="text">{{data.patientName}}</text><text>{{data.hosNum}}</text>
4
+    <!-- 取消发血弹窗 -->
5
+    <selectAccount2 @click.stop.native v-if="hosModels2.disjunctor" :content="hosModels2.content" :disjunctor="hosModels2.disjunctor" @ok="hosOk2"
6
+      @cancel="hosCancel2" :tips="hosModels2.tips" :cancelBloodHandover="cancelBloodHandover">
7
+    </selectAccount2>
8
+  </text>
9
+</template>
10
+
11
+<script>
12
+  import {
13
+    post
14
+  } from "@/http/http.js";
15
+  export default {
16
+    data() {
17
+      return {
18
+        // 弹窗model
19
+        hosModels2: {
20
+          disjunctor: false,
21
+        },
22
+        
23
+        coopData: {},
24
+        isShowTips: false,
25
+      };
26
+    },
27
+    props: {
28
+      data: {
29
+        type: Object,
30
+      },
31
+      index: {
32
+        type: Number,
33
+      },
34
+      delivery: {
35
+        type: Number,
36
+        default: 0,
37
+      },
38
+      cancelBlood: {
39
+        type: Number,
40
+        default: 0,
41
+      },
42
+      cancelBloodHandover: {
43
+        type: Number,
44
+        default: 0,
45
+      },
46
+      dataList: {
47
+        type: Object,
48
+      },
49
+      type: {
50
+        type: String,
51
+      },
52
+    },
53
+    methods: {
54
+      cancelBloodHandler(data){
55
+        console.log(data);
56
+        console.log(this.coopData);
57
+        uni.showLoading({
58
+          title: "加载中",
59
+          mask: true,
60
+        });
61
+        let postData = {
62
+          "type": "bloodTake",
63
+          service: 'cancelBlood',
64
+          bloodIds: this.coopData.children.map(v => v.children).flat().map(v => v.id).toString(),
65
+          closeOrder: this.isShowTips ? 1 : 0,
66
+          handoverUser: data.accountId,
67
+          cancelReason: data.cancelReason.id,
68
+        };
69
+      
70
+        post('/transflow/extra', postData).then(res => {
71
+          uni.hideLoading();
72
+          if(res.state == 200){
73
+             uni.showModal({
74
+               title: "提示",
75
+               content: "操作成功!",
76
+               showCancel: false,
77
+               success: (res) => {
78
+                 if (res.confirm) {
79
+                   console.log("用户点击确定");
80
+                   if(this.type == 'start'){
81
+                     if(this.isShowTips){
82
+                       uni.navigateTo({
83
+                         url: `/pages/receiptpage/receiptpage`,
84
+                       });
85
+                     }else{
86
+                       // 触发自定义事件并传递参数给上一页
87
+                       uni.$emit('refresh', { refresh: true });
88
+                       
89
+                       // 跳转回上一页
90
+                       uni.navigateBack({
91
+                           delta: 1
92
+                       });
93
+                     }
94
+                   }else if(this.type == 'end'){
95
+                     if(this.isShowTips){
96
+                       uni.navigateTo({
97
+                         url: `/pages/receiptpage/receiptpage`,
98
+                       });
99
+                     }else{
100
+                       this.$emit('refresh');
101
+                     }
102
+                   }
103
+                 } else if (res.cancel) {
104
+                   console.log("用户点击取消");
105
+                 }
106
+               },
107
+             });
108
+          }else{
109
+            uni.showToast({
110
+              icon: "none",
111
+              title: res.msg || "接口获取数据失败!",
112
+            });
113
+          }
114
+        })
115
+      },
116
+      // 确认
117
+      hosOk2(data) {
118
+        console.log(data);
119
+        const {
120
+          accountName,
121
+          account,
122
+          accountId,
123
+          cancelReason,
124
+        } = data;
125
+        
126
+        if (!cancelReason) {
127
+          //没有填写交接人
128
+          uni.showModal({
129
+            title: "提示",
130
+            content: "请填写取消原因!",
131
+            showCancel: false,
132
+            success: function(res) {
133
+              if (res.confirm) {
134
+                console.log("用户点击确定");
135
+              } else if (res.cancel) {
136
+                console.log("用户点击取消");
137
+              }
138
+            },
139
+          });
140
+          return;
141
+        }
142
+        
143
+        // 必填交接人
144
+        if(this.cancelBloodHandover == 1){
145
+          if (!accountName && !account) {
146
+            //没有填写交接人
147
+            uni.showModal({
148
+              title: "提示",
149
+              content: "请填写交接人工号!",
150
+              showCancel: false,
151
+              success: function(res) {
152
+                if (res.confirm) {
153
+                  console.log("用户点击确定");
154
+                } else if (res.cancel) {
155
+                  console.log("用户点击取消");
156
+                }
157
+              },
158
+            });
159
+            return;
160
+          } else if ((!accountName && account) || (accountName && !account)) {
161
+            //没有填写交接人
162
+            uni.showModal({
163
+              title: "提示",
164
+              content: "请填写正确的交接人工号!",
165
+              showCancel: false,
166
+              success: function(res) {
167
+                if (res.confirm) {
168
+                  console.log("用户点击确定");
169
+                } else if (res.cancel) {
170
+                  console.log("用户点击取消");
171
+                }
172
+              },
173
+            });
174
+            return;
175
+          }
176
+        }
177
+        
178
+        this.hosModels2.disjunctor = false;
179
+        this.cancelBloodHandler(data);
180
+      },
181
+      // 取消
182
+      hosCancel2() {
183
+        this.hosModels2.disjunctor = false;
184
+      },
185
+      // 取消发血弹窗
186
+      showSelectAccount2(isShowTips = false) {
187
+        this.isShowTips = isShowTips;
188
+        this.hosModels2 = {
189
+          content: `请填写取消原因和交接人信息`,
190
+          disjunctor: true,
191
+          tips: isShowTips ? '本患者取消发血后,工单将关闭!' : '',
192
+        };
193
+      },
194
+      // 取消发血
195
+      selectAccountHandler(data, index){
196
+        console.log(this.cancelBlood)
197
+        if(this.cancelBlood != 1){
198
+          return;
199
+        }
200
+        this.coopData = data;
201
+        let arr = this.dataList.children.filter((v, i) => i !== index);
202
+        if(arr.length){
203
+          let flag = false;
204
+          if(this.type == 'end'){
205
+            // 其他患者的血都是"病房接收"状态
206
+            flag = arr.map(v => v.children).flat().map(v => v.children).flat().every(v => v.state.value == 5);
207
+          }
208
+          this.showSelectAccount2(flag);
209
+        }else{
210
+          // 没有其他患者
211
+          this.showSelectAccount2(true);
212
+        }
213
+      },
214
+    },
215
+  };
216
+</script>
217
+
218
+<style lang="less" scoped>
219
+  .text{
220
+    margin-right: 16rpx
221
+  }
222
+</style>

+ 386 - 0
components/selectAccount2/selectAccount2.vue

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

+ 283 - 0
components/showCertificat/showCertificat.vue

@@ -0,0 +1,283 @@
1
+<template>
2
+  <view class="showModel" v-show="disjunctor">
3
+    <view class="showModel__wrap">
4
+      <view class="showModel__header">
5
+        领血证二维码
6
+      </view>
7
+      <view class="showModel__article">
8
+        <view class="showModel__content">
9
+          <view class="leftIcon" @click="toLeft">
10
+            <view class="icon_transport transport-xiala1" :class="{ disable: current === 0 }"></view>
11
+          </view>
12
+          <swiper class="swiper" :current="current" @change="changeCurrent">
13
+            <swiper-item v-for="(qrCode, index) in qrCodes" :key="index">
14
+              <image :src="qrCode.base64" mode="widthFix" class="qrCode"></image>
15
+            </swiper-item>
16
+          </swiper>
17
+          <view class="rightIcon" @click="toRight">
18
+            <view class="icon_transport transport-xiala1" :class="{ disable: current === qrCodes.length - 1 }"></view>
19
+          </view>
20
+        </view>
21
+      </view>
22
+      <view class="showModel__footer">
23
+        <view class="showModel__know" @click="know" hover-class="seimin-btn-hover">知道了</view>
24
+      </view>
25
+    </view>
26
+  </view>
27
+</template>
28
+
29
+<script>
30
+  import {
31
+    get,
32
+    post,
33
+    webHandle
34
+  } from "../../http/http.js";
35
+  export default {
36
+    data() {
37
+      return {
38
+        qrCodes: [],
39
+        current: 0,
40
+      };
41
+    },
42
+    props: {
43
+      // 显示隐藏
44
+      disjunctor: {
45
+        type: Boolean,
46
+        default: false,
47
+      },
48
+      // id
49
+      id: {
50
+        type: Number,
51
+      },
52
+    },
53
+    methods: {
54
+      // 左箭头点击
55
+      toLeft(){
56
+        this.current = Math.max(--this.current, 0);
57
+      },
58
+      // 右箭头点击
59
+      toRight(){
60
+        this.current = Math.min(++this.current, this.qrCodes.length - 1);
61
+      },
62
+      // 滑动二维码
63
+      changeCurrent(event){
64
+        this.current = event.detail.current;
65
+      },
66
+      // 关闭
67
+      know() {
68
+        this.$emit("know");
69
+      },
70
+      // 获取二维码
71
+      getQrCode(){
72
+        uni.showLoading({
73
+          title: "加载中",
74
+          mask: true,
75
+        });
76
+        post("/transflow/scanInfo", {
77
+          type: 'bloodTake',
78
+          takeCodeList: 1,
79
+          id: 0,
80
+          orderIds: this.id.toString(),
81
+        }).then((result) => {
82
+            uni.hideLoading();
83
+            if (result.state == 200) {
84
+              this.qrCodes = result.data.data || [];
85
+            } else {
86
+              uni.showToast({
87
+                icon: "none",
88
+                title: result.msg || "接口获取数据失败!",
89
+              });
90
+            }
91
+          })
92
+      }
93
+    },
94
+    mounted() {
95
+      this.getQrCode();
96
+    }
97
+  };
98
+</script>
99
+
100
+<style lang="less" scoped>
101
+  /deep/ uni-swiper .uni-swiper-wrapper{
102
+    position: absolute!important;
103
+    top: 0!important;
104
+    left: 0!important;
105
+    width: 100%!important;
106
+    height: 100%!important;
107
+  }
108
+  /deep/ uni-swiper uni-swiper-item{
109
+    display: flex!important;
110
+    align-items: center!important;
111
+  }
112
+  .showModel {
113
+    position: fixed;
114
+    left: 0;
115
+    right: 0;
116
+    top: 0;
117
+    bottom: 0;
118
+    background-color: rgba(0, 0, 0, 0.2);
119
+    z-index: 999999;
120
+
121
+    .showModel__wrap {
122
+      width: 560rpx;
123
+      position: absolute;
124
+      left: 50%;
125
+      top: 50%;
126
+      transform: translate(-50%, -50%);
127
+      background-color: #fff;
128
+      border-radius: 12rpx;
129
+
130
+      .showModel__header {
131
+        font-size: 36rpx;
132
+        color: #000;
133
+        height: 84rpx;
134
+        display: flex;
135
+        justify-content: center;
136
+        align-items: center;
137
+      }
138
+
139
+      .showModel__article {
140
+        color: #000;
141
+        margin: 0 auto 25rpx;
142
+        width: 488rpx;
143
+        background-color: rgb(249, 250, 251);
144
+        border: 2rpx solid rgb(229, 233, 237);
145
+        border-radius: 12rpx;
146
+        box-sizing: border-box;
147
+        display: flex;
148
+        flex-direction: column;
149
+        justify-content: center;
150
+        align-items: center;
151
+
152
+        &.p0 {
153
+          padding: 0;
154
+        }
155
+
156
+        &.p1 {
157
+          text-align: left;
158
+        }
159
+
160
+        .showModel__icon {
161
+          font-size: 138rpx;
162
+          margin-bottom: 32rpx;
163
+
164
+          &.showModel__icon--success {
165
+            color: rgb(52, 179, 73);
166
+          }
167
+
168
+          &.showModel__icon--warn {
169
+            color: rgb(245, 165, 35);
170
+          }
171
+
172
+          &.showModel__icon--error {
173
+            color: rgb(255, 58, 82);
174
+          }
175
+        }
176
+
177
+        .showModel__content {
178
+          font-size: 36rpx;
179
+          word-break: break-all;
180
+          width: 100%;
181
+          display: flex;
182
+          .leftIcon{
183
+            width: 40rpx;
184
+            display: flex;
185
+            align-items: center;
186
+            justify-content: center;
187
+            view{
188
+              transform: rotateZ(90deg);
189
+              &.disable{
190
+                color: #dbdbdb;
191
+              }
192
+            }
193
+          }
194
+          .rightIcon{
195
+            width: 40rpx;
196
+            display: flex;
197
+            align-items: center;
198
+            justify-content: center;
199
+            view{
200
+              transform: rotateZ(-90deg);
201
+              &.disable{
202
+                color: #dbdbdb;
203
+              }
204
+            }
205
+          }
206
+          .swiper{
207
+            flex: 1;
208
+            padding-top: 100%;
209
+            position: relative;
210
+            height: 0;
211
+            .qrCode{
212
+              width: 100%;
213
+            }
214
+          }
215
+        }
216
+
217
+        .showModel__info {
218
+          font-size: 32rpx;
219
+          color: rgb(102, 102, 102);
220
+        }
221
+
222
+        .specialCloseFlag {
223
+          width: 90%;
224
+          height: 100%;
225
+          padding: 16rpx;
226
+        }
227
+
228
+        .radio-wrap {
229
+          .radio-item {
230
+            margin-top: 16rpx;
231
+
232
+            /deep/ .uni-radio-input-checked {
233
+              background-color: #49b856 !important;
234
+              border-color: #49b856 !important;
235
+            }
236
+          }
237
+        }
238
+      }
239
+
240
+      .showModel__footer {
241
+        box-sizing: border-box;
242
+        height: 100rpx;
243
+        border-top: 2rpx solid rgb(229, 233, 237);
244
+        display: flex;
245
+        align-items: center;
246
+
247
+        view {
248
+          height: 100%;
249
+          display: flex;
250
+          align-items: center;
251
+          justify-content: center;
252
+          font-size: 36rpx;
253
+          color: rgb(102, 102, 102);
254
+          position: relative;
255
+
256
+          &:nth-of-type(2)::before {
257
+            content: "";
258
+            position: absolute;
259
+            left: 0;
260
+            bottom: 0;
261
+            width: 2rpx;
262
+            height: 87rpx;
263
+            background-color: rgb(229, 233, 237);
264
+          }
265
+        }
266
+
267
+        .showModel__ok {
268
+          flex: 1;
269
+          color: rgb(73, 184, 86);
270
+        }
271
+
272
+        .showModel__cancel {
273
+          flex: 1;
274
+        }
275
+
276
+        .showModel__know {
277
+          flex: 1;
278
+          color: rgb(73, 184, 86);
279
+        }
280
+      }
281
+    }
282
+  }
283
+</style>

+ 298 - 0
components/specimenListItem/specimenListItem.vue

@@ -0,0 +1,298 @@
1
+<template>
2
+  <view class="page_item">
3
+    <view class="page_item_top">
4
+      <view class="page_item_top-inner">
5
+        <view class="page_item_top_L">
6
+          <view class="L_text"><text class="serialNumber">{{i + 1}}</text>{{ item.specimenDesc || "无" }}</view>
7
+        </view>
8
+        <view class="page_item_top_R">
9
+          <text :style="{color:item.urgent == 1?'red':'green'}">{{item.urgent == 1 ? "急" : "普"}}</text>
10
+        </view>
11
+      </view>
12
+    </view>
13
+    <view class="page_item_cont">
14
+      <view class="page_item_cont_T">
15
+        <view class="page_item_cont_title">
16
+          <view style="width: 10em;"> {{item.stype ? item.stype.name : '无'}} </view>
17
+          <view class="text_big">{{ item.scode || "无" }}</view>
18
+        </view>
19
+        <view class="page_item_cont_title">
20
+          <view class="text_big"> {{ item.patientName }}<text v-if="item.bedNum">({{item.bedNum}}床)</text> </view>
21
+          <view class="text_big">{{ item.residenceNo }}</view>
22
+        </view>
23
+        <view class="page_item_cont_title">
24
+          <view class="text_big"> 收取:{{item.receiverName||'无'}} </view>
25
+          <view class="text_big">{{item.arriveTime||'无'}}</text></view>
26
+        </view>
27
+        <view class="page_item_cont_title">
28
+          <view class="text_big">{{
29
+            item.sickRoom ? item.sickRoom.dept : "无"
30
+          }}</view>
31
+          <text style="width: 4em;text-align: center;" class="icon_transport transport-arrow-right-full"></text>
32
+          <view class="text_big">{{
33
+            item.checkDept ? item.checkDept.dept : "无"
34
+          }}</view>
35
+        </view>
36
+      </view>
37
+    </view>
38
+    <view class="L"></view>
39
+    <view class="R"></view>
40
+  </view>
41
+</template>
42
+
43
+<script>
44
+  export default {
45
+    props: {
46
+      i: {
47
+        type: Number,
48
+      },
49
+      item: {
50
+        type: Object,
51
+      },
52
+    },
53
+  };
54
+</script>
55
+
56
+<style lang="less" scoped>
57
+  .page_item {
58
+    margin-top: 16rpx;
59
+    margin-bottom: 124rpx;
60
+    background: #fff;
61
+    border-radius: 8rpx;
62
+    margin: 0 20rpx;
63
+    border: 2rpx solid #e5e9ed;
64
+    position: relative;
65
+    overflow: hidden;
66
+    padding: 0 16rpx;
67
+  
68
+    .L {
69
+      width: 40rpx;
70
+      height: 40rpx;
71
+      border-radius: 50%;
72
+      background: #f9fafb;
73
+      position: absolute;
74
+      left: -20rpx;
75
+      top: 68rpx;
76
+      border: 2rpx solid #e5e9ed;
77
+    }
78
+  
79
+    .R {
80
+      width: 40rpx;
81
+      height: 40rpx;
82
+      border-radius: 50%;
83
+      background: #f9fafb;
84
+      position: absolute;
85
+      float: right;
86
+      right: -20rpx;
87
+      top: 68rpx;
88
+      border: 2rpx solid #e5e9ed;
89
+    }
90
+  
91
+    .starting {
92
+      width: 50rpx;
93
+      height: 50rpx;
94
+      color: #fff;
95
+      background: #49b856;
96
+      display: inline-block;
97
+      border-radius: 50%;
98
+      text-align: center;
99
+      line-height: 46rpx;
100
+      font-size: 32rpx;
101
+      margin-right: 6rpx;
102
+    }
103
+  
104
+    .End {
105
+      width: 50rpx;
106
+      height: 50rpx;
107
+      color: #fff;
108
+      background: #39b199;
109
+      display: inline-block;
110
+      border-radius: 50%;
111
+      text-align: center;
112
+      line-height: 46rpx;
113
+      font-size: 32rpx;
114
+      margin-right: 6rpx;
115
+    }
116
+  
117
+    .page_item_top {
118
+      height: 88rpx;
119
+      border-bottom: 2rpx dashed #e5e9ed;
120
+      padding: 0 16rpx;
121
+  
122
+      .page_item_top-inner {
123
+        display: flex;
124
+        justify-content: space-between;
125
+        align-items: center;
126
+        height: 100%;
127
+  
128
+        .page_item_top_L {
129
+          .serialNumber{
130
+            width: 50rpx;
131
+            height: 50rpx;
132
+            border-radius: 50%;
133
+            background-color: #49b856;
134
+            display: flex;
135
+            justify-content: center;
136
+            align-items: center;
137
+            color: #fff;
138
+            line-height: 0;
139
+            margin-right: 8rpx;
140
+          }
141
+          .emergencys {
142
+            background: #ff3b53 !important;
143
+            width: 124rpx !important;
144
+          }
145
+  
146
+          .emergency {
147
+            background: #ff3b53 !important;
148
+          }
149
+  
150
+          .emergency1 {
151
+            background: #49b856 !important;
152
+          }
153
+  
154
+          .page_item_cont_start {
155
+            text-align: center;
156
+            height: 44rpx;
157
+            width: 104rpx;
158
+            line-height: 44rpx;
159
+            border-radius: 8rpx;
160
+            background: #49b856;
161
+            color: #fff;
162
+            display: inline-block;
163
+          }
164
+  
165
+          .L_time {
166
+            color: #6cc076;
167
+            font-size: 32rpx;
168
+          }
169
+  
170
+          .L_text {
171
+            font-size: 32rpx;
172
+            font-weight: 700;
173
+            display: flex;
174
+            align-items: center;
175
+          }
176
+        }
177
+  
178
+        .page_item_top_R {
179
+          font-size: 32rpx;
180
+  
181
+          .back {
182
+            background-color: #49b856;
183
+          }
184
+  
185
+          .L_iocn {
186
+            color: rgb(7, 134, 60);
187
+            font-size: 36rpx;
188
+            font-weight: 700;
189
+          }
190
+        }
191
+      }
192
+    }
193
+  
194
+    .page_item_cont {
195
+      min-height: 90rpx;
196
+      padding: 0 16rpx;
197
+      text-align: left;
198
+      position: relative;
199
+  
200
+      .text_big {
201
+        font-size: 32rpx;
202
+        font-weight: 700;
203
+        margin-top: 10rpx;
204
+        text-align: right;
205
+        word-break: break-all;
206
+        line-height: 1.25;
207
+  
208
+        p {
209
+          font-weight: 700;
210
+          line-height: 1.5;
211
+        }
212
+      }
213
+  
214
+      .page_item_cont_T {
215
+        padding-top: 28rpx;
216
+        padding-bottom: 28rpx;
217
+        font-size: 28rpx;
218
+  
219
+        .page_item_cont_title {
220
+          height: 100%;
221
+          font-size: 32rpx;
222
+          display: flex;
223
+          justify-content: space-between;
224
+          align-items: center;
225
+        }
226
+      }
227
+  
228
+      .page_item_cont_B {
229
+        padding-top: 28rpx;
230
+        margin-bottom: 28rpx;
231
+  
232
+        .page_item_cont_title {
233
+          font-size: 32rpx;
234
+          display: flex;
235
+          justify-content: space-between;
236
+        }
237
+  
238
+        .page_item_cont_title1 {
239
+          height: 60rpx;
240
+          line-height: 60rpx;
241
+          font-size: 32rpx;
242
+          padding-left: 64rpx;
243
+        }
244
+      }
245
+    }
246
+  
247
+    .page_item_foot {
248
+      border-top: 2rpx dashed #e5e9ed;
249
+      border-bottom: 2rpx dashed #e5e9ed;
250
+      padding: 28rpx 16rpx;
251
+      text-align: left;
252
+  
253
+      .page_item_foot_text {
254
+        font-size: 32rpx;
255
+        margin-bottom: 20rpx;
256
+  
257
+        .text1 {
258
+          color: rgb(102, 102, 102);
259
+        }
260
+  
261
+        .text2 {
262
+          float: right;
263
+          font-weight: 700;
264
+        }
265
+      }
266
+    }
267
+  
268
+    #infos {
269
+      display: none;
270
+    }
271
+  
272
+    .page_item_infos {
273
+      padding-bottom: 20rpx;
274
+      border-bottom: 2rpx dashed #e5e9ed;
275
+  
276
+      .page_item_info2 {
277
+        text-align: left;
278
+        line-height: 60rpx;
279
+        font-size: 32rpx;
280
+        padding-left: 16rpx;
281
+  
282
+        .page_item_foot_text {
283
+          font-size: 32rpx;
284
+          margin-bottom: 20rpx;
285
+  
286
+          .text1 {
287
+            color: rgb(102, 102, 102);
288
+          }
289
+  
290
+          .text2 {
291
+            float: right;
292
+            font-weight: 700;
293
+          }
294
+        }
295
+      }
296
+    }
297
+  }
298
+</style>

+ 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.45');
10
+console.info('v2.4.46');
11 11
 Vue.prototype.wx = wx //声明扫码
12 12
 Vue.prototype.audios = [] //待播放的语音集合
13 13
 // #endif

+ 3 - 3
pages.json

@@ -445,7 +445,7 @@
445 445
       }
446 446
 
447 447
     }, {
448
-      "path": "pages/startOrderSignBlood/startOrderSignBlood",
448
+      "path": "pages/newBlood/startOrderSignBlood/startOrderSignBlood",
449 449
       "style": {
450 450
         "h5": {
451 451
           "titleNView": false
@@ -453,7 +453,7 @@
453 453
       }
454 454
     },
455 455
     {
456
-      "path": "pages/startOrderSignBloodDetail/startOrderSignBloodDetail",
456
+      "path": "pages/newBlood/startOrderSignBloodDetail/startOrderSignBloodDetail",
457 457
       "style": {
458 458
         "h5": {
459 459
           "titleNView": false
@@ -461,7 +461,7 @@
461 461
       }
462 462
 
463 463
     }, {
464
-      "path": "pages/endOrderSignBlood/endOrderSignBlood",
464
+      "path": "pages/newBlood/endOrderSignBlood/endOrderSignBlood",
465 465
       "style": {
466 466
         "h5": {
467 467
           "titleNView": false

+ 25 - 1
pages/checkAfterBigScreen/checkAfterBigScreen.vue

@@ -33,6 +33,9 @@
33 33
     <selectAccount v-if="hosModels.disjunctor" :disjunctor="hosModels.disjunctor" @ok="hosOk"
34 34
       @cancel="hosCancel">
35 35
     </selectAccount>
36
+    <!-- 弹窗 -->
37
+    <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
38
+      @ok="ok" @cancel="cancel" :operate="models.operate"></showModel>
36 39
   </view>
37 40
 </template>
38 41
 <script>
@@ -45,6 +48,10 @@
45 48
   export default {
46 49
     data() {
47 50
       return {
51
+        // 弹窗model
52
+        models: {
53
+          disjunctor: false,
54
+        },
48 55
         // 填写交接人工号弹窗model
49 56
         hosModels: {
50 57
           disjunctor: false,
@@ -142,9 +149,26 @@
142 149
           url: `../noScanSpecimen/noScanSpecimen?deptName=${deptName}&workOrderId=${this.queryObj.ids}&deptCode=${qrCode}&isScan=1&specimensCheck=1&noScan=1`,
143 150
         });
144 151
       },
152
+      ok(){
153
+        this.models.disjunctor = false;
154
+        this.orderDeptHandler(true);
155
+      },
156
+      // 取消
157
+      cancel() {
158
+        this.models.disjunctor = false;
159
+      },
145 160
       //核对完成
146 161
       allStart() {
147
-        this.orderDeptHandler(true);
162
+        this.models = {
163
+          disjunctor: true,
164
+          title: "提示",
165
+          content: "是否确定标本已核对完成?",
166
+          icon: "warn",
167
+          operate: {
168
+            ok: "确定",
169
+            cancel: "取消",
170
+          },
171
+        };
148 172
       },
149 173
       //科室签到
150 174
       //bigScanner----判断是否需要交接人

+ 44 - 3
pages/endOrderSignBlood/endOrderSignBlood.vue

@@ -27,7 +27,7 @@
27 27
               <checkbox class="checkbox" :checked="v2.checked" :disabled="v2.state.value == 5" />
28 28
               <text class="newicon newicon-a-ziyuan7"></text>
29 29
               <view class="title1 ellipsis">
30
-                <text>{{v2.patientName}}</text><text>{{v2.hosNum}}</text>
30
+                <cancelBlood :data="v2" :index="i2" @refresh="getInfo" :delivery="delivery" :cancelBlood="cancelBlood" :cancelBloodHandover="cancelBloodHandover" :dataList="dataList" type="end"></cancelBlood>
31 31
               </view>
32 32
               <view style="display: flex;align-items: center;justify-content: space-between;">
33 33
                 <text>{{v2.count}}袋</text>
@@ -89,7 +89,7 @@
89 89
     post,
90 90
     SM,
91 91
     webHandle
92
-  } from "../../http/http.js";
92
+  } from "@/http/http.js";
93 93
   export default {
94 94
     data() {
95 95
       return {
@@ -102,9 +102,49 @@
102 102
         queryObj: {}, //路由传递过来的数据
103 103
         isComplete: false,
104 104
         isShowCompleteBtn: false,
105
+        delivery: 0,
106
+        cancelBlood: 0,
107
+        cancelBloodHandover: 0,
105 108
       };
106 109
     },
107 110
     methods: {
111
+      // 获取血制品页面控制开关
112
+      getTaskBloodConfig(){
113
+        return post("/simple/data/fetchDataList/taskTypeConfig", {
114
+            "idx": 0,
115
+            "sum": 10,
116
+            "taskTypeConfig": {
117
+                "taskTypeDTO": {
118
+                    "hosId": {
119
+                        "id": this.hosId
120
+                    },
121
+                    "ordinaryField": {
122
+                        "key": "ordinary_field",
123
+                        "value": "blood"
124
+                    }
125
+                }
126
+            }
127
+        });
128
+      },
129
+      // 获取血制品页面控制开关
130
+      async getBloodPageConfig(){
131
+        let result = await this.getTaskBloodConfig();
132
+        if (result.status == 200) {
133
+          if(result.list && result.list[0]){
134
+            this.delivery = result.list[0].delivery;
135
+            this.cancelBlood = result.list[0].cancelBlood;
136
+            this.cancelBloodHandover = result.list[0].cancelBloodHandover;
137
+          }else{
138
+            this.delivery = 0;
139
+            this.cancelBlood = 0;
140
+            this.cancelBloodHandover = 0;
141
+          }
142
+        } else {
143
+          this.delivery = 0;
144
+          this.cancelBlood = 0;
145
+          this.cancelBloodHandover = 0;
146
+        }
147
+      },
108 148
       // arrayToObject(dataList){
109 149
       //   let bloodList = [];
110 150
       //   dataList.forEach(item1 => {
@@ -281,7 +321,7 @@
281 321
           uni.hideLoading();
282 322
           if(res.state == 200){
283 323
              uni.navigateTo({
284
-               url: `../receiptpage/receiptpage`,
324
+               url: `/pages/receiptpage/receiptpage`,
285 325
              });
286 326
           }else{
287 327
             uni.showToast({
@@ -372,6 +412,7 @@
372 412
       console.log(options, "result");
373 413
       this.queryObj = options;
374 414
       this.getInfo();
415
+      this.getBloodPageConfig();
375 416
       // #ifdef APP-PLUS
376 417
       webHandle("no", "app");
377 418
       // #endif

+ 15 - 3
pages/startOrderSignBlood/startOrderSignBlood.vue

@@ -41,7 +41,7 @@
41 41
     post,
42 42
     SM,
43 43
     webHandle
44
-  } from "../../http/http.js";
44
+  } from "@/http/http.js";
45 45
   export default {
46 46
     data() {
47 47
       return {
@@ -177,7 +177,7 @@
177 177
           uni.hideLoading();
178 178
           if(res.state == 200){
179 179
              uni.navigateTo({
180
-               url: `../receiptpage/receiptpage`,
180
+               url: `/pages/receiptpage/receiptpage`,
181 181
              });
182 182
           }else{
183 183
             uni.showToast({
@@ -194,7 +194,7 @@
194 194
       // 跳转血制品列表
195 195
       toDetail(data){
196 196
         uni.navigateTo({
197
-          url: `../startOrderSignBloodDetail/startOrderSignBloodDetail?bloodIds=${data.bloodIds}&deptName=${data.dept}`,
197
+          url: `/pages/newBlood/startOrderSignBloodDetail/startOrderSignBloodDetail?bloodIds=${data.bloodIds}&deptName=${data.dept}`,
198 198
         });
199 199
       },
200 200
       //获取页面信息
@@ -240,6 +240,18 @@
240 240
       webHandle("no", "wx");
241 241
       // #endif
242 242
     },
243
+    // 监听自定义事件并进行页面刷新操作
244
+    onShow() {
245
+      uni.$on('refresh', (data) => {
246
+        if (data.refresh) {
247
+            // 刷新操作
248
+          this.getInfo();
249
+        }
250
+      });
251
+    },
252
+    onUnload() {
253
+      uni.$off('refresh'); // 需要手动解绑自定义事件
254
+    }
243 255
   };
244 256
 </script>
245 257
 <style lang="less" scoped>

+ 44 - 2
pages/startOrderSignBloodDetail/startOrderSignBloodDetail.vue

@@ -11,7 +11,7 @@
11 11
         <view class="list_top">
12 12
           <text class="newicon newicon-a-ziyuan7"></text>
13 13
           <view class="title1 ellipsis">
14
-            <text>{{v2.patientName}}</text><text>{{v2.hosNum}}</text>
14
+            <cancelBlood :data="v2" :index="i2" :delivery="delivery" :cancelBlood="cancelBlood" :cancelBloodHandover="cancelBloodHandover" :dataList="dataList" type="start"></cancelBlood>
15 15
           </view>
16 16
           <view>
17 17
             <text>{{v2.count}}袋</text>
@@ -67,15 +67,56 @@
67 67
     post,
68 68
     SM,
69 69
     webHandle
70
-  } from "../../http/http.js";
70
+  } from "@/http/http.js";
71 71
   export default {
72 72
     data() {
73 73
       return {
74
+        hosId: uni.getStorageSync('userData').user.currentHospital.id,
74 75
         dataList: {},
75 76
         queryObj: {}, //路由传递过来的数据
77
+        delivery: 0,
78
+        cancelBlood: 0,
79
+        cancelBloodHandover: 0,
76 80
       };
77 81
     },
78 82
     methods: {
83
+      // 获取血制品页面控制开关
84
+      getTaskBloodConfig(){
85
+        return post("/simple/data/fetchDataList/taskTypeConfig", {
86
+            "idx": 0,
87
+            "sum": 10,
88
+            "taskTypeConfig": {
89
+                "taskTypeDTO": {
90
+                    "hosId": {
91
+                        "id": this.hosId
92
+                    },
93
+                    "ordinaryField": {
94
+                        "key": "ordinary_field",
95
+                        "value": "blood"
96
+                    }
97
+                }
98
+            }
99
+        });
100
+      },
101
+      // 获取血制品页面控制开关
102
+      async getBloodPageConfig(){
103
+        let result = await this.getTaskBloodConfig();
104
+        if (result.status == 200) {
105
+          if(result.list && result.list[0]){
106
+            this.delivery = result.list[0].delivery;
107
+            this.cancelBlood = result.list[0].cancelBlood;
108
+            this.cancelBloodHandover = result.list[0].cancelBloodHandover;
109
+          }else{
110
+            this.delivery = 0;
111
+            this.cancelBlood = 0;
112
+            this.cancelBloodHandover = 0;
113
+          }
114
+        } else {
115
+          this.delivery = 0;
116
+          this.cancelBlood = 0;
117
+          this.cancelBloodHandover = 0;
118
+        }
119
+      },
79 120
       // 返回
80 121
       goBack() {
81 122
         uni.navigateBack();
@@ -149,6 +190,7 @@
149 190
       console.log(options, "result");
150 191
       this.queryObj = options;
151 192
       this.getInfo();
193
+      this.getBloodPageConfig();
152 194
       // #ifdef APP-PLUS
153 195
       webHandle("no", "app");
154 196
       // #endif

+ 2 - 40
pages/noScanSpecimen/noScanSpecimen.vue

@@ -2,46 +2,8 @@
2 2
   <view class="pharmacyDetails">
3 3
     <view class="pharmacyDetails_title"><text v-if="queryObj.deptName">{{queryObj.deptName}}-</text>{{isScan?'已':'未'}}扫描标本信息</view>
4 4
     <view class="page_item footerOtherMargin">
5
-      <view class="page_item_wrap" v-for="spe in specimens" :key="spe.id">
6
-        <view class="page_item">
7
-          <view class="page_item_top">
8
-            <view class="page_item_top-inner">
9
-              <view class="page_item_top_L">
10
-                <view class="L_text">{{ spe.scode }}<text v-if="spe.stype">({{spe.stype.name}})</text></view>
11
-              </view>
12
-              <view class="page_item_top_R">
13
-                <text :style="{color:spe.urgent == 1?'red':'green'}">{{spe.urgent == 1 ? "急" : "普"}}</text>
14
-              </view>
15
-            </view>
16
-          </view>
17
-          <view class="page_item_cont">
18
-            <view class="page_item_cont_T">
19
-              <view class="page_item_cont_title">
20
-                <view> 检验项目 </view>
21
-                <view class="text_big">{{ spe.specimenDesc || "无" }}</view>
22
-              </view>
23
-              <view class="page_item_cont_title">
24
-                <view> 患者姓名 </view>
25
-                <view class="text_big">{{ spe.patientName }}<text v-if="spe.bedNum">({{spe.bedNum}})</text></view>
26
-              </view>
27
-              <view class="page_item_cont_title">
28
-                <view> 住院号 </view>
29
-                <view class="text_big">{{spe.residenceNo||'无'}}</text></view>
30
-              </view>
31
-              <view class="page_item_cont_title">
32
-                <view class="text_big">{{
33
-                  spe.sickRoom ? spe.sickRoom.dept : "无"
34
-                }}</view>
35
-                <text style="width: 4em;text-align: center;" class="icon_transport transport-arrow-right-full"></text>
36
-                <view class="text_big">{{
37
-                  spe.checkDept ? spe.checkDept.dept : "无"
38
-                }}</view>
39
-              </view>
40
-            </view>
41
-          </view>
42
-          <view class="L"></view>
43
-          <view class="R"></view>
44
-        </view>
5
+      <view class="page_item_wrap" v-for="(spe, i) in specimens" :key="spe.id">
6
+        <specimenListItem :i="i" :item="spe"></specimenListItem>
45 7
         <view class="L-l"></view>
46 8
         <view class="R-l"></view>
47 9
       </view>

+ 33 - 4
pages/receiptpage/receiptpage.vue

@@ -292,8 +292,11 @@
292 292
               <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>
293 293
             </view>
294 294
             <!-- 如果是万能交接-血制品 -->
295
-            <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">
296
-              <view class="page_item_btn" @click="goTobloodEnd(item)" hover-class="seimin-btn-hover">送达交接</view>
295
+            <view class="page_item_btn_wrap" v-if="selectedLabelSlots == '执行中' && item.taskType.associationType.value == 'ordinary' && delivery === 1 && item.taskType.ordinaryField.value == 'blood'">
296
+              <!-- 送达交接 -->
297
+              <view class="page_item_btn" @click="goTobloodEnd(item)" hover-class="seimin-btn-hover" v-if="item.gdState.value == 5">送达交接</view>
298
+              <!-- 领血证 -->
299
+              <view class="page_item_btn" @click="certificatHandler(item)" hover-class="seimin-btn-hover" v-if="useTakeCode == 1">领血证</view>
297 300
             </view>
298 301
             
299 302
             <!-- 如果是万能交接-被服洗涤送回 -->
@@ -324,6 +327,8 @@
324 327
       @ok="ok" @cancel="cancel" @know="know" :operate="models.operate"></showModel>
325 328
     <!-- 我的二维码-弹窗 -->
326 329
     <showMyQrcode v-if="showMyQrcodeModel.disjunctor" :disjunctor="showMyQrcodeModel.disjunctor" @know="closeMyQrcodeModel"></showMyQrcode>
330
+    <!-- 领血证-弹窗 -->
331
+    <showCertificat v-if="showCertificatModel.disjunctor" :disjunctor="showCertificatModel.disjunctor" :id="showCertificatModel.id" @know="closeCertificatModel"></showCertificat>
327 332
     <!-- 科室二维码-弹窗 -->
328 333
     <showDepartmentQrcode v-if="showDepartmentQrcodeModel.disjunctor" :disjunctor="showDepartmentQrcodeModel.disjunctor" @know="closeDepartmentQrcodeModel"></showDepartmentQrcode>
329 334
     <!-- 手动查询标本弹窗 -->
@@ -410,6 +415,8 @@
410 415
         clinicalMultiplayerMode: 0,
411 416
         showAppendUser: 0,
412 417
         delivery: 0,
418
+        useTakeCode: 0,
419
+        takeCodeType: {},
413 420
         clinicalTaskIds: [],
414 421
         other: {
415 422
           user: {},
@@ -430,6 +437,10 @@
430 437
           disjunctor: false,
431 438
         },
432 439
         // 弹窗model
440
+        showCertificatModel: {
441
+          disjunctor: false,
442
+        },
443
+        // 弹窗model
433 444
         showDepartmentQrcodeModel: {
434 445
           disjunctor: false,
435 446
         },
@@ -553,7 +564,7 @@
553 564
     methods: {
554 565
       goTobloodEnd(order){
555 566
         uni.navigateTo({
556
-          url: `../endOrderSignBlood/endOrderSignBlood?orderIds=${order.id}&deptName=${order.endDepts[0].dept}&deptId=${order.endDepts[0].id}&type=delivery`,
567
+          url: `/pages/newBlood/endOrderSignBlood/endOrderSignBlood?orderIds=${order.id}&deptName=${order.endDepts[0].dept}&deptId=${order.endDepts[0].id}&type=delivery`,
557 568
         });
558 569
       },
559 570
       goToWashingEnd(order){
@@ -603,11 +614,17 @@
603 614
         if (result.status == 200) {
604 615
           if(result.list && result.list[0]){
605 616
             this.delivery = result.list[0].delivery;
617
+            this.useTakeCode = result.list[0].useTakeCode;
618
+            this.takeCodeType = result.list[0].takeCodeType;
606 619
           }else{
607 620
             this.delivery = 0;
621
+            this.useTakeCode = 0;
622
+            this.takeCodeType = {};
608 623
           }
609 624
         } else {
610 625
           this.delivery = 0;
626
+          this.useTakeCode = 0;
627
+          this.takeCodeType = {};
611 628
         }
612 629
       },
613 630
       //获取其他临床服务业务类型
@@ -1591,6 +1608,16 @@
1591 1608
       closeMyQrcodeModel(){
1592 1609
         this.showMyQrcodeModel.disjunctor = false;
1593 1610
       },
1611
+      // 领血证二维码
1612
+      certificatHandler(data){
1613
+        this.showCertificatModel = {
1614
+          disjunctor: true,
1615
+          id: data.id,
1616
+        };
1617
+      },
1618
+      closeCertificatModel(){
1619
+        this.showCertificatModel.disjunctor = false;
1620
+      },
1594 1621
       // 科室二维码
1595 1622
       departmentQrcodeHandler(){
1596 1623
         this.showDepartmentQrcodeModel = {
@@ -2455,7 +2482,6 @@
2455 2482
                 height: 88rpx;
2456 2483
                 flex: 1;
2457 2484
                 margin-left: 1%;
2458
-                margin-right: 1%;
2459 2485
                 background-image: linear-gradient(to right, #72c172, #3bb197);
2460 2486
                 border-radius: 8rpx;
2461 2487
                 line-height: 88rpx;
@@ -2463,6 +2489,9 @@
2463 2489
                 font-size: 36rpx;
2464 2490
                 font-weight: 700;
2465 2491
                 text-align: center;
2492
+                &:first-of-type{
2493
+                  margin-left: 0;
2494
+                }
2466 2495
               }
2467 2496
             }
2468 2497
 

+ 3 - 40
pages/scannedDepartmentSpecimensDetail/scannedDepartmentSpecimensDetail.vue

@@ -16,46 +16,8 @@
16 16
           </view>
17 17
         </view>
18 18
       </view>
19
-      <view class="page_item_wrap" v-for="spe in specimens" :key="spe.id">
20
-        <view class="page_item">
21
-          <view class="page_item_top">
22
-            <view class="page_item_top-inner">
23
-              <view class="page_item_top_L">
24
-                <view class="L_text">{{ spe.scode }}<text v-if="spe.stype">({{spe.stype.name}})</text></view>
25
-              </view>
26
-              <view class="page_item_top_R">
27
-                <text :style="{color:spe.urgent == 1?'red':'green'}">{{spe.urgent == 1 ? "急" : "普"}}</text>
28
-              </view>
29
-            </view>
30
-          </view>
31
-          <view class="page_item_cont">
32
-            <view class="page_item_cont_T">
33
-              <view class="page_item_cont_title">
34
-                <view> 检验项目 </view>
35
-                <view class="text_big">{{ spe.specimenDesc || "无" }}</view>
36
-              </view>
37
-              <view class="page_item_cont_title">
38
-                <view> 患者姓名 </view>
39
-                <view class="text_big">{{ spe.patientName }}<text v-if="spe.bedNum">({{spe.bedNum}})</text></view>
40
-              </view>
41
-              <view class="page_item_cont_title">
42
-                <view> 住院号 </view>
43
-                <view class="text_big">{{spe.residenceNo||'无'}}</text></view>
44
-              </view>
45
-              <view class="page_item_cont_title">
46
-                <view class="text_big">{{
47
-                  spe.sickRoom ? spe.sickRoom.dept : "无"
48
-                }}</view>
49
-                <text style="width: 4em;text-align: center;" class="icon_transport transport-arrow-right-full"></text>
50
-                <view class="text_big">{{
51
-                  spe.checkDept ? spe.checkDept.dept : "无"
52
-                }}</view>
53
-              </view>
54
-            </view>
55
-          </view>
56
-          <view class="L"></view>
57
-          <view class="R"></view>
58
-        </view>
19
+      <view class="page_item_wrap" v-for="(spe, i) in specimens" :key="spe.id">
20
+        <specimenListItem :i="i" :item="spe"></specimenListItem>
59 21
         <view class="L-l"></view>
60 22
         <view class="R-l"></view>
61 23
       </view>
@@ -99,6 +61,7 @@
99 61
         };
100 62
         post(`/api/getStartDeptSpecimensNum`, postData).then(async (res) => {
101 63
           if (res.status == 200) {
64
+            res.data = res.data || [];
102 65
             for (let i = 0; i < res.data.length; i++) {
103 66
               let result = await get(`/common/common/listAttachment/specimenPhotos/${res.data[i].bindId}`);
104 67
               if (result.status == 200) {

+ 27 - 2
pages/scanning/scanning.vue

@@ -79,6 +79,9 @@
79 79
     <!-- 弹窗 -->
80 80
     <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
81 81
       @ok="ok" @cancel="cancel" :operate="models.operate"></showModel>
82
+    <!-- 弹窗 -->
83
+    <showModel :title="models1.title" :icon="models1.icon" :disjunctor="models1.disjunctor" :content="models1.content"
84
+      @ok="ok1" @cancel="cancel1" :operate="models1.operate"></showModel>
82 85
   </view>
83 86
 </template>
84 87
 <script>
@@ -97,6 +100,10 @@
97 100
         models: {
98 101
           disjunctor: false,
99 102
         },
103
+        // 弹窗model
104
+        models1: {
105
+          disjunctor: false,
106
+        },
100 107
         wcId: [], //完成工单id
101 108
         modelFlag: "", //弹窗标识
102 109
         infoDATA: [],
@@ -132,10 +139,28 @@
132 139
       },
133 140
       // 继续配送
134 141
       Scanning_again(id) {
142
+        this.models1 = {
143
+          disjunctor: true,
144
+          title: "提示",
145
+          content: `是否确定<span class="red">继续配送</span>?`,
146
+          icon: "warn",
147
+          operate: {
148
+            ok: "确定",
149
+            cancel: "取消",
150
+          },
151
+        };
152
+      },
153
+      // 确定
154
+      ok1() {
155
+        this.models1.disjunctor = false;
135 156
         uni.navigateTo({
136 157
           url: "../receiptpage/receiptpage",
137 158
         });
138 159
       },
160
+      // 取消
161
+      cancel1() {
162
+        this.models1.disjunctor = false;
163
+      },
139 164
       // 确定
140 165
       ok() {
141 166
         this.models.disjunctor = false;
@@ -221,7 +246,7 @@
221 246
         this.models = {
222 247
           disjunctor: true,
223 248
           title: "提示",
224
-          content: "是否确定标本配送完成?",
249
+          content: `是否确定标本<span class="red">配送完成</span>?`,
225 250
           icon: "warn",
226 251
           operate: {
227 252
             ok: "确定",
@@ -236,7 +261,7 @@
236 261
         this.models = {
237 262
           disjunctor: true,
238 263
           title: "提示",
239
-          content: "是否确定标本配送完成?",
264
+          content: `是否确定标本<span class="red">配送完成</span>?`,
240 265
           icon: "warn",
241 266
           operate: {
242 267
             ok: "确定",

+ 1 - 1
pages/scanning_B/scanning_B.vue

@@ -21,7 +21,7 @@
21 21
     <view class="Scanning_cont" v-if="res.status == 200 || res.status == 666">
22 22
       <view>标本类型 : {{ infoDATA.stype.name || "-" }}</view>
23 23
       <view>标本编码 : {{ infoDATA.scode || "-" }}</view>
24
-      <view>标本状态 : {{ res.data.speState ? res.data.speState.name : "-" }}</view>
24
+      <view>标本状态 : <text :class="{ red: res.data.speState && res.data.speState.value == 8 }">{{ res.data.speState ? res.data.speState.name : "-" }}</text></view>
25 25
       <view>申请科室 : {{ infoDATA.sickRoom || "-" }}</view>
26 26
       <view>检验科室 : {{ infoDATA.checkDept || "-" }}</view>
27 27
       <view>检验项目 : {{ res.data.specimenDesc || "-" }}</view>

+ 30 - 5
pages/scanning_Result/scanning_Result.vue

@@ -14,8 +14,17 @@
14 14
         </view>
15 15
       </view>
16 16
     </view>
17
+    
18
+    <view class="Scanning_top" v-if="res.status == 11111">
19
+      <view class="Scanning_top_icon">
20
+        <text class="cubeic-close icon_transport transport-shibai"></text>
21
+      </view>
22
+      <view class="Scanning_top_text">
23
+        <view class="text1" style="color: red;">操作失败</view>
24
+      </view>
25
+    </view>
17 26
 
18
-    <view class="Scanning_top" v-if="res.status != 200">
27
+    <view class="Scanning_top" v-if="(res.status != 200 && res.status != 11111)">
19 28
       <view class="Scanning_top_icon">
20 29
         <text class="cubeic-close icon_transport transport-shibai"></text>
21 30
       </view>
@@ -24,7 +33,7 @@
24 33
         <view class="text1 f30" v-if="queryObj.qrcode !== undefined"> 扫描内容:{{queryObj.qrcode}} </view>
25 34
       </view>
26 35
     </view>
27
-
36
+    
28 37
     <view class="Scanning_cont" v-if="
29 38
         (res.status == 200 && type == 'specimenPlan') ||
30 39
         (res.status == 200 && type == 'specimen')
@@ -39,6 +48,22 @@
39 48
       <view>患者姓名 : {{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
40 49
       <view>住院号 : {{ infoDATA.residenceNo || '-' }}</view>
41 50
     </view>
51
+    
52
+    <view class="Scanning_cont" v-if="
53
+        (res.status == 11111 && type == 'specimenPlan') ||
54
+        (res.status == 11111 && type == 'specimen')
55
+      ">
56
+      <view>{{ infoDATA.stype.name }}({{infoDATA.scode}})</view>
57
+      <view>检验项目 : {{ infoDATA.specimenDesc || "-" }}</view>
58
+      <view>标本状态 : <text style="color: red">{{ infoDATA.speState ? infoDATA.speState.name : '' }}</text></view>
59
+      <view>
60
+        {{ infoDATA.sickRoom ? infoDATA.sickRoom.dept : "" }}
61
+        <text style="width: 4em;text-align: center;margin-left: 1em;margin-right: 1em;" class="icon_transport transport-arrow-right-full"></text>
62
+        {{ infoDATA.checkDept ? infoDATA.checkDept.dept : "" }}
63
+      </view>
64
+      <view>患者姓名 : {{ infoDATA.patientName}}({{infoDATA.bedNum}})</view>
65
+      <view>住院号 : {{ infoDATA.residenceNo || '-' }}</view>
66
+    </view>
42 67
 
43 68
     <view class="Scanning_cont" v-if="
44 69
         (res.status == 200 && type == 'inspect') || type == 'patientTransport'
@@ -99,7 +124,7 @@
99 124
       <view class="red"> 如果您当前科室还有药包需要扫描,请点击“继续扫描”! </view>
100 125
     </view>
101 126
     <view class="Scanning_cont" v-if="res.status != 200">
102
-      <view class="Scanning_cont_center">
127
+      <view class="Scanning_cont_center" v-if="res.status != 11111">
103 128
         {{ res.msg === "undefined" || !res.msg ? "" : res.msg }}
104 129
       </view>
105 130
     </view>
@@ -383,9 +408,9 @@
383 408
               }
384 409
               post("/workerOrder/" + postType, data).then((ress) => {
385 410
                 uni.hideLoading();
386
-                if (ress.status == 200) {
411
+                if (ress.status == 200 || ress.status == 11111) {
387 412
                   //标本和标本轮巡工单,扫描标本后会自动调用摄像头,继续扫描,直到status不是200
388
-                  if (this.type == "specimenPlan" || this.type == "specimen") {
413
+                  if ((this.type == "specimenPlan" || this.type == "specimen") && ress.status != 11111) {
389 414
                     setTimeout(()=>{
390 415
                       if (type === 'scan') {
391 416
                         this.Scanning_again();

+ 1 - 1
pages/scanning_all/scanning_all.vue

@@ -427,7 +427,7 @@
427 427
                    if(signType){
428 428
                      uni.hideLoading();
429 429
                      uni.navigateTo({
430
-                       url: `../endOrderSignBlood/endOrderSignBlood?orderIds=${this.userId.ids.toString()}&deptName=${this.deptName}&deptId=${this.deptId}`,
430
+                       url: `/pages/newBlood/endOrderSignBlood/endOrderSignBlood?orderIds=${this.userId.ids.toString()}&deptName=${this.deptName}&deptId=${this.deptId}`,
431 431
                      });
432 432
                    }else{
433 433
                      // 万能交接服务的血制品

+ 3 - 3
pages/scanning_code/scanning_code.vue

@@ -877,10 +877,10 @@
877 877
               //扫描
878 878
               post("/workerOrder/" + postType, data).then((ress) => {
879 879
                 console.log(ress, 1111)
880
-                if (ress.status == 200) {
880
+                if (ress.status == 200 || ress.status == 11111) {
881 881
                   //标本和标本轮巡工单,扫描标本后会自动调用摄像头,继续扫描,直到status不是200
882
-                  if (this.infoDATA.taskType.associationType.value == 'specimen' || this.infoDATA.taskType
883
-                    .associationType.value == 'specimenPlan') {
882
+                  if ((this.infoDATA.taskType.associationType.value == 'specimen' || this.infoDATA.taskType
883
+                    .associationType.value == 'specimenPlan') && ress.status != 11111) {
884 884
                     if (type === 'scan') {
885 885
                       setTimeout(() => {
886 886
                         this.Scanning_again(this.dataId);

+ 2 - 2
pages/scanning_djEnd/scanning_djEnd.vue

@@ -662,9 +662,9 @@
662 662
             }
663 663
             post("/workerOrder/" + postType, data).then((ress) => {
664 664
               uni.hideLoading();
665
-              if (ress.status == 200) {
665
+              if (ress.status == 200 || ress.status == 11111) {
666 666
                 //标本和标本轮巡工单,扫描标本后会自动调用摄像头,继续扫描,直到status不是200
667
-                if (this.type == "specimenPlan" || this.type == "specimen") {
667
+                if ((this.type == "specimenPlan" || this.type == "specimen") && ress.status != 11111) {
668 668
                   if (type === 'scan') {
669 669
                     setTimeout(() => {
670 670
                       this.Scanning_again();

+ 25 - 22
pages/scanning_djInfo/scanning_djInfo.vue

@@ -11,6 +11,15 @@
11 11
         <view class="text1">操作成功</view>
12 12
       </view>
13 13
     </view>
14
+    
15
+    <view class="Scanning_top" v-if="res.status == 11111">
16
+      <view class="Scanning_top_icon">
17
+        <text class="cubeic-close icon_transport transport-shibai"></text>
18
+      </view>
19
+      <view class="Scanning_top_text">
20
+        <view class="text1" style="color: red;">操作失败</view>
21
+      </view>
22
+    </view>
14 23
 
15 24
     <view class="Scanning_top" v-if="
16 25
         res.status == 10005 ||
@@ -30,7 +39,7 @@
30 39
         <view class="text1 f30" v-if="queryObj.qrcode !== undefined">扫描内容:{{queryObj.qrcode}}</view>
31 40
       </view>
32 41
     </view>
33
-    <view class="Scanning_cont" v-if="res.status != 200 || res.msg != '成功!'">
42
+    <view class="Scanning_cont" v-if="(res.status != 200 || res.msg != '成功!') && res.status != 11111">
34 43
       <view>{{ res.msg }}</view>
35 44
     </view>
36 45
     <view class="Scanning_cont" v-if="
@@ -46,23 +55,21 @@
46 55
       </view>
47 56
       <view>患者姓名 : {{ infoDATA.data.patientName}}({{infoDATA.data.bedNum}})</view>
48 57
       <view>住院号 : {{ infoDATA.data.residenceNo || '-' }}</view>
49
-      <!-- <view>标本类型 : {{ infoDATA.data.stype.name || "-" }}</view>
50
-      <view>标本编号 : {{ infoDATA.data.scode || "-" }}</view>
51
-      <view>检验科室 : {{ infoDATA.data.checkDept ? infoDATA.data.checkDept.dept : "-" }}</view>
58
+    </view>
59
+    <view class="Scanning_cont" v-if="
60
+        (res.status == 11111 && type == 'specimenPlan') ||
61
+        (res.status == 11111 && type == 'specimen')
62
+      ">
63
+      <view>{{ infoDATA.data.stype.name }}({{infoDATA.data.scode}})</view>
52 64
       <view>检验项目 : {{ infoDATA.data.specimenDesc || "-" }}</view>
53
-      <view>患者姓名 : {{ infoDATA.data.patientName}}<text v-if="infoDATA.data.bedNum">({{infoDATA.data.bedNum}})</text></view>
54
-      <view>住院号 : {{ infoDATA.data.residenceNo || "-" }}</view>
55
-      <view v-if="
56
-          accountObj && infoType !== 'spe-ddd-1' && infoType !== 'spe-dsd-1'&& infoType !== 'plan-spe-ddd-1' && infoType !== 'plan-spe-dsd-1'
57
-        ">
58
-        交接人工号 : {{ accountObj.account }}
59
-      </view>
60
-      <view v-if="
61
-          accountObj && infoType !== 'spe-ddd-1' && infoType !== 'spe-dsd-1'&& infoType !== 'plan-spe-ddd-1' && infoType !== 'plan-spe-dsd-1'
62
-        ">
63
-        交接人姓名 : {{ accountObj.accountName }}
65
+      <view>标本状态 : <text style="color: red">{{ infoDATA.data.speState ? infoDATA.data.speState.name : '' }}</text></view>
66
+      <view>
67
+        {{ infoDATA.data.sickRoom ? infoDATA.data.sickRoom.dept : "" }}
68
+        <text style="width: 4em;text-align: center;margin-left: 1em;margin-right: 1em;" class="icon_transport transport-arrow-right-full"></text>
69
+        {{ infoDATA.data.checkDept ? infoDATA.data.checkDept.dept : "" }}
64 70
       </view>
65
-      <view>已扫描 : {{ speNum }}</view> -->
71
+      <view>患者姓名 : {{ infoDATA.data.patientName}}({{infoDATA.data.bedNum}})</view>
72
+      <view>住院号 : {{ infoDATA.data.residenceNo || '-' }}</view>
66 73
     </view>
67 74
     <view class="Scanning_cont" v-if="
68 75
         (res.status == 200 && type == 'inspect') || type == 'patientTransport'
@@ -104,10 +111,6 @@
104 111
       <view class="red"> 如果您当前科室还有药包需要扫描,请点击“继续扫描”! </view>
105 112
     </view>
106 113
 
107
-    <!-- <view class="foot_btn" v-if="idsType==1&&res.status==200">
108
-      <view class="btn1" @click="Scanning_again()">继续扫描</view>
109
-      <view class="btn2" @click="showAlert()">知道了</view>
110
-    </view> -->
111 114
     <view class="foot_btn_spe" v-if="
112 115
         res.status == 100018 || type == 'specimen' || type == 'specimenPlan'
113 116
       ">
@@ -323,9 +326,9 @@
323 326
               }
324 327
               post("/workerOrder/" + postType, list).then((res) => {
325 328
                 uni.hideLoading();
326
-                if (res.status == 200) {
329
+                if (res.status == 200 || res.status == 11111) {
327 330
                   //标本和标本轮巡工单,扫描标本后会自动调用摄像头,继续扫描,直到status不是200
328
-                  if (this.type == "specimenPlan" || this.type == "specimen") {
331
+                  if ((this.type == "specimenPlan" || this.type == "specimen") && res.status != 11111) {
329 332
                       if (type === 'scan') {
330 333
                         setTimeout(()=>{
331 334
                           this.Scanning_again();

+ 22 - 8
pages/specimenCheckingDetail/specimenCheckingDetail.vue

@@ -15,12 +15,12 @@
15 15
         </view>
16 16
       </view>
17 17
     </view>
18
-    <view class="page_item_wrap" v-for="item in list" :key="item.id">
18
+    <view class="page_item_wrap" v-for="(item, i) in list" :key="item.id">
19 19
       <view class="page_item">
20 20
         <view class="page_item_top">
21 21
           <view class="page_item_top-inner">
22 22
             <view class="page_item_top_L">
23
-              <view class="L_text">{{ item.scode }}<text v-if="item.stype">({{item.stype.name}})</text></view>
23
+              <view class="L_text"><text class="serialNumber">{{i + 1}}</text>{{ item.specimenDesc || "无" }}</view>
24 24
             </view>
25 25
             <view class="page_item_top_R">
26 26
               <view class="L_iocn">
@@ -35,16 +35,16 @@
35 35
         <view class="page_item_cont">
36 36
           <view class="page_item_cont_T">
37 37
             <view class="page_item_cont_title">
38
-              <view> 检验项目 </view>
39
-              <view class="text_big">{{ item.specimenDesc || "无" }}</view>
38
+              <view style="width: 10em;"> {{item.stype ? item.stype.name : '无'}} </view>
39
+              <view class="text_big">{{ item.scode || "无" }}</view>
40 40
             </view>
41 41
             <view class="page_item_cont_title">
42
-              <view> 患者姓名 </view>
43
-              <view class="text_big">{{ item.patientName }}<text v-if="item.bedNum">({{item.bedNum}})</text></view>
42
+              <view class="text_big"> {{ item.patientName }}<text v-if="item.bedNum">({{item.bedNum}}床)</text> </view>
43
+              <view class="text_big">{{ item.residenceNo }}</view>
44 44
             </view>
45 45
             <view class="page_item_cont_title">
46
-              <view> 住院号 </view>
47
-              <view class="text_big">{{item.residenceNo||'无'}}</text></view>
46
+              <view class="text_big"> 收取:{{item.receiverName||'无'}} </view>
47
+              <view class="text_big">{{item.arriveTime||'无'}}</text></view>
48 48
             </view>
49 49
             <view class="page_item_cont_title">
50 50
               <view class="text_big">{{
@@ -739,6 +739,18 @@
739 739
             height: 100%;
740 740
 
741 741
             .page_item_top_L {
742
+              .serialNumber{
743
+                width: 50rpx;
744
+                height: 50rpx;
745
+                border-radius: 50%;
746
+                background-color: #49b856;
747
+                display: flex;
748
+                justify-content: center;
749
+                align-items: center;
750
+                color: #fff;
751
+                line-height: 0;
752
+                margin-right: 8rpx;
753
+              }
742 754
               .emergencys {
743 755
                 background: #ff3b53 !important;
744 756
                 width: 124rpx !important;
@@ -771,6 +783,8 @@
771 783
               .L_text {
772 784
                 font-size: 32rpx;
773 785
                 font-weight: 700;
786
+                display: flex;
787
+                align-items: center;
774 788
               }
775 789
             }
776 790
 

+ 2 - 40
pages/specimenCheckingEndDetail/specimenCheckingEndDetail.vue

@@ -1,46 +1,8 @@
1 1
 <template>
2 2
   <view class="pharmacyDetails">
3 3
     <view class="page_item footerOtherMargin">
4
-      <view class="page_item_wrap" v-for="spe in specimens" :key="spe.id">
5
-        <view class="page_item">
6
-          <view class="page_item_top">
7
-            <view class="page_item_top-inner">
8
-              <view class="page_item_top_L">
9
-                <view class="L_text">{{ spe.scode }}<text v-if="spe.stype">({{spe.stype.name}})</text></view>
10
-              </view>
11
-              <view class="page_item_top_R">
12
-                <text :style="{color:spe.urgent == 1?'red':'green'}">{{spe.urgent == 1 ? "急" : "普"}}</text>
13
-              </view>
14
-            </view>
15
-          </view>
16
-          <view class="page_item_cont">
17
-            <view class="page_item_cont_T">
18
-              <view class="page_item_cont_title">
19
-                <view> 检验项目 </view>
20
-                <view class="text_big">{{ spe.specimenDesc || "无" }}</view>
21
-              </view>
22
-              <view class="page_item_cont_title">
23
-                <view> 患者姓名 </view>
24
-                <view class="text_big">{{ spe.patientName }}<text v-if="spe.bedNum">({{spe.bedNum}})</text></view>
25
-              </view>
26
-              <view class="page_item_cont_title">
27
-                <view> 住院号 </view>
28
-                <view class="text_big">{{spe.residenceNo||'无'}}</text></view>
29
-              </view>
30
-              <view class="page_item_cont_title">
31
-                <view class="text_big">{{
32
-                  spe.sickRoom ? spe.sickRoom.dept : "无"
33
-                }}</view>
34
-                <text style="width: 4em;text-align: center;" class="icon_transport transport-arrow-right-full"></text>
35
-                <view class="text_big">{{
36
-                  spe.checkDept ? spe.checkDept.dept : "无"
37
-                }}</view>
38
-              </view>
39
-            </view>
40
-          </view>
41
-          <view class="L"></view>
42
-          <view class="R"></view>
43
-        </view>
4
+      <view class="page_item_wrap" v-for="(spe, i) in specimens" :key="spe.id">
5
+        <specimenListItem :i="i" :item="spe"></specimenListItem>
44 6
         <view class="L-l"></view>
45 7
         <view class="R-l"></view>
46 8
       </view>

+ 17 - 50
pages/specimenDetail/specimenDetail.vue

@@ -12,54 +12,8 @@
12 12
       <image class="zwsj-img" mode="widthFix" src="../../static/img/zanwushuju.png"></image>
13 13
       <view class="zwsj-txt">暂无数据</view>
14 14
     </view>
15
-    <view class="page_item_wrap" v-for="item in list" :key="item.id">
16
-      <view class="page_item">
17
-        <view class="page_item_top">
18
-          <view class="page_item_top-inner">
19
-            <view class="page_item_top_L">
20
-              <view class="L_text">{{ item.scode }}<text v-if="item.stype">({{item.stype.name}})</text></view>
21
-            </view>
22
-            <view class="page_item_top_R">
23
-              <text :style="{color:item.urgent == 1?'red':'green'}">{{item.urgent == 1 ? "急" : "普"}}</text>
24
-            </view>
25
-          </view>
26
-        </view>
27
-        <view class="page_item_cont">
28
-          <view class="page_item_cont_T">
29
-            <view class="page_item_cont_title">
30
-              <view style="width: 10em;"> 检验项目 </view>
31
-              <view class="text_big">{{ item.specimenDesc || "无" }}</view>
32
-            </view>
33
-            <view class="page_item_cont_title">
34
-              <view> 患者姓名 </view>
35
-              <view class="text_big">{{ item.patientName }}<text v-if="item.bedNum">({{item.bedNum}})</text></view>
36
-            </view>
37
-            <view class="page_item_cont_title">
38
-              <view> 住院号 </view>
39
-              <view class="text_big">{{item.residenceNo||'无'}}</text></view>
40
-            </view>
41
-            <view class="page_item_cont_title">
42
-              <view> 收取人 </view>
43
-              <view class="text_big">{{item.receiverName||'无'}}</text></view>
44
-            </view>
45
-            <view class="page_item_cont_title">
46
-              <view> 收取时间 </view>
47
-              <view class="text_big">{{item.arriveTime||'无'}}</text></view>
48
-            </view>
49
-            <view class="page_item_cont_title">
50
-              <view class="text_big">{{
51
-                item.sickRoom ? item.sickRoom.dept : "无"
52
-              }}</view>
53
-              <text style="width: 4em;text-align: center;" class="icon_transport transport-arrow-right-full"></text>
54
-              <view class="text_big">{{
55
-                item.checkDept ? item.checkDept.dept : "无"
56
-              }}</view>
57
-            </view>
58
-          </view>
59
-        </view>
60
-        <view class="L"></view>
61
-        <view class="R"></view>
62
-      </view>
15
+    <view class="page_item_wrap" v-for="(item, i) in list" :key="item.id">
16
+      <specimenListItem :i="i" :item="item"></specimenListItem>
63 17
       <view class="L-l"></view>
64 18
       <view class="R-l"></view>
65 19
     </view>
@@ -133,9 +87,8 @@
133 87
           "specimen": {
134 88
             "gdid": this.workOrderId,
135 89
             "hosId": uni.getStorageSync('userData').user.currentHospital.id,
136
-            // "stype": this.array[this.index].id ? { id: this.array[this.index].id } : undefined,
137 90
             "specimenDesc": this.array[this.index].id ? this.array[this.index].name : undefined,
138
-            "orderBy": 'arrive_time desc',
91
+            "orderBy": 'patientNoDesc',
139 92
           }
140 93
         };
141 94
         post(`/simple/data/fetchDataList/specimen`, postData).then((res) => {
@@ -396,6 +349,18 @@
396 349
             height: 100%;
397 350
 
398 351
             .page_item_top_L {
352
+              .serialNumber{
353
+                width: 50rpx;
354
+                height: 50rpx;
355
+                border-radius: 50%;
356
+                background-color: #49b856;
357
+                display: flex;
358
+                justify-content: center;
359
+                align-items: center;
360
+                color: #fff;
361
+                line-height: 0;
362
+                margin-right: 8rpx;
363
+              }
399 364
               .emergencys {
400 365
                 background: #ff3b53 !important;
401 366
                 width: 124rpx !important;
@@ -428,6 +393,8 @@
428 393
               .L_text {
429 394
                 font-size: 32rpx;
430 395
                 font-weight: 700;
396
+                display: flex;
397
+                align-items: center;
431 398
               }
432 399
             }
433 400