seimin 1 неделя назад
Родитель
Сommit
f39c5d0cb4

+ 30 - 0
App.vue

@@ -178,8 +178,38 @@
178 178
   .mt8{
179 179
     margin-top: 16rpx !important;
180 180
   }
181
+  
182
+  .ml24{
183
+    margin-left: 24rpx !important;
184
+  }
181 185
 
182 186
 	.check{
183 187
 		border-color:#49b856 !important;
184 188
 	}
189
+  
190
+  .primaryButton{
191
+    color: #fff!important;
192
+    background-color: #49b856!important;
193
+    border-color: #49b856!important;
194
+  }
195
+  
196
+  .text_right{
197
+    text-align: right!important;
198
+  }
199
+  
200
+  .fwb{
201
+    font-weight: bold!important;
202
+  }
203
+  
204
+  .foot_common_btns{
205
+    width: 100%;
206
+    box-sizing: border-box;
207
+    padding: 24rpx;
208
+    display: flex;
209
+    align-items: center;
210
+    gap: 24rpx;
211
+    .btn{
212
+      flex: 1;
213
+    }
214
+  }
185 215
 </style>

+ 18 - 1
pages.json

@@ -776,7 +776,24 @@
776 776
 		      "titleNView": false
777 777
 		    }
778 778
 		  }
779
-		}
779
+		},
780
+    {
781
+      "path": "pages/patientInspectLog/patientInspectLogList", // 患者闭环-列表
782
+      "style": {
783
+        "h5": {
784
+          "titleNView": false
785
+        },
786
+        "enablePullDownRefresh": true
787
+      }
788
+    },
789
+    {
790
+      "path": "pages/patientInspectLog/patientInspectLogDetail", // 患者闭环-详情
791
+      "style": {
792
+        "h5": {
793
+          "titleNView": false
794
+        }
795
+      }
796
+    }
780 797
   ],
781 798
   "globalStyle": {
782 799
     "navigationBarTextStyle": "black",

+ 530 - 0
pages/patientInspectLog/components/patientInspectLogListFilter.vue

@@ -0,0 +1,530 @@
1
+<template>
2
+  <view>
3
+    <view class="container" @touchmove.stop.prevent v-if="pageData.pageRouter === 'default'">
4
+      <view class="container_form">
5
+        <view class="head">
6
+          <text class="name">状态</text>
7
+          <text class="status">{{searchData.state ? searchData.state.name : ''}}</text>
8
+        </view>
9
+        <view class="statusList">
10
+          <view class="statusItem" :class="{ active: searchData.state.id == item.id }" v-for="item in pageData.stateList" :key="item.id" @click="searchData.state = item;">{{item.name}}<text class="newicon newicon-xuanzejiaobiao" v-if="searchData.state.id == item.id"></text></view>
11
+        </view>
12
+        <view class="category" @click="clickPageRouter('department')">
13
+          <text class="name">科室</text>
14
+          <text class="value ellipsis">{{searchData.department ? searchData.department.dept : ''}}</text>
15
+        </view>
16
+        
17
+        <view class="signUser" @click="clickPageRouter('signUser')" v-if="tabActiveId != 3">
18
+          <text class="name">签到人</text>
19
+          <text class="value ellipsis">{{searchData.signUser ? searchData.signUser.name : ''}}</text>
20
+        </view>
21
+        
22
+        <view class="inspectUser" @click="clickPageRouter('inspectUser')" v-if="tabActiveId != 2">
23
+          <text class="name">出科陪检人</text>
24
+          <text class="value ellipsis">{{searchData.inspectUser ? searchData.inspectUser.name : ''}}</text>
25
+        </view>
26
+      </view>
27
+      <view class="container_foot">
28
+        <view class="clear" @click="clear">清除选项</view>
29
+        <view class="foot_btns">
30
+          <view class="cancel" @click="cancel">取消</view>
31
+          <view class="confirm" @click="confirm">确认</view>
32
+        </view>
33
+      </view>
34
+    </view>
35
+    <view class="container" @touchmove.stop.prevent v-else-if="pageData.pageRouter === 'signUser'">
36
+      <view class="container_form">
37
+        <view class="hospital">
38
+          <text class="name">签到人</text>
39
+          <view class="text-input">
40
+            <input class="m-input" type="text" :value="signUserKeyWord" @input="signUserInput" placeholder="请输入关键字"></input>
41
+          </view>
42
+        </view>
43
+        
44
+        <scroll-view scroll-y class="signUsers">
45
+          <view class="signUsers_item" v-for="signUser in pageData.signUserList" :key="signUser.id" @click="clickSignUser(signUser)">{{signUser.name}}<text v-if="signUser.account">({{signUser.account}})</text></view>
46
+        </scroll-view>
47
+      </view>
48
+      <view class="container_foot">
49
+        <view class="foot_btns">
50
+          <view class="cancel" @click="clickPageRouter('default')">取消</view>
51
+        </view>
52
+      </view>
53
+    </view>
54
+    <view class="container" @touchmove.stop.prevent v-else-if="pageData.pageRouter === 'inspectUser'">
55
+      <view class="container_form">
56
+        <view class="hospital">
57
+          <text class="name">出科陪检人</text>
58
+          <view class="text-input">
59
+            <input class="m-input" type="text" :value="inspectUserKeyWord" @input="inspectUserInput" placeholder="请输入关键字"></input>
60
+          </view>
61
+        </view>
62
+        
63
+        <scroll-view scroll-y class="inspectUsers">
64
+          <view class="inspectUsers_item" v-for="inspectUser in pageData.inspectUserList" :key="inspectUser.id" @click="clickInspectUser(inspectUser)">{{inspectUser.name}}<text v-if="inspectUser.account">({{inspectUser.account}})</text></view>
65
+        </scroll-view>
66
+      </view>
67
+      <view class="container_foot">
68
+        <view class="foot_btns">
69
+          <view class="cancel" @click="clickPageRouter('default')">取消</view>
70
+        </view>
71
+      </view>
72
+    </view>
73
+    <view class="container" @touchmove.stop.prevent v-else-if="pageData.pageRouter === 'department'">
74
+      <view class="container_form">
75
+        <view class="hospital">
76
+          <text class="name">科室</text>
77
+          <view class="text-input">
78
+            <input class="m-input" type="text" :value="departmentKeyWord" @input="departmentInput" placeholder="请输入关键字"></input>
79
+          </view>
80
+        </view>
81
+        
82
+        <scroll-view scroll-y class="categorys">
83
+          <view class="categorys_item" v-for="item in pageData.departmentList" :key="item.id" @click="clickDepartment(item)">{{item.dept}}</view>
84
+        </scroll-view>
85
+      </view>
86
+      <view class="container_foot">
87
+        <view class="foot_btns">
88
+          <view class="cancel" @click="clickPageRouter('default')">取消</view>
89
+        </view>
90
+      </view>
91
+    </view>
92
+    <view class="mask" @touchmove.stop.prevent></view>
93
+  </view>
94
+</template>
95
+
96
+<script>
97
+  import { get, post, SM, deleteIt, webHandle } from "../../../http/http.js";
98
+  import debounce from 'lodash-es/debounce'
99
+  export default {
100
+    props: {
101
+      // 搜索条件,看组件传参
102
+      evt: {
103
+        type: Object,
104
+        required: true,
105
+      },
106
+      // tab页面的id,看组件传参
107
+      tabActiveId: {
108
+        type: Number,
109
+        required: true,
110
+      }
111
+    },
112
+    data(){
113
+      return {
114
+        hosId: uni.getStorageSync('userData').user.currentHospital.id,
115
+        signUserKeyWord: '',
116
+        inspectUserKeyWord: '',
117
+        departmentKeyWord: '',
118
+        pageData: {
119
+          pageRouter: 'default',
120
+          signUserList: [],
121
+          inspectUserList: [],
122
+          departmentList: [],
123
+          stateList: [],
124
+        },
125
+        searchData: {
126
+          signUser: {id: 0, name: '全部'},
127
+          inspectUser: {id: 0, name: '全部'},
128
+          department: {id: 0, dept: '全部'},
129
+          state: {},
130
+        }
131
+      }
132
+    },
133
+    methods: {
134
+      // 获取状态列表
135
+      getStateList(){
136
+        let postData = {
137
+          "type": "list",
138
+          "key": "patient_inspect_state",
139
+        };
140
+        post("/common/common/getDictionary", postData).then(res => {
141
+          this.pageData.stateList = res || [];
142
+          if(this.evt.state.id){
143
+            this.searchData.state = this.evt.state;
144
+          }else{
145
+            // 默认出科陪检中
146
+            let state4 = this.pageData.stateList.find(v => v.value == 4);
147
+            this.searchData.state = state4 || {};
148
+          }
149
+        })
150
+      },
151
+      departmentInput(event) {
152
+          this.departmentKeyWord = event.detail.value;
153
+          this.handleDepartmentSearch(this.departmentKeyWord);
154
+      },
155
+      handleDepartmentSearch: debounce(function(keyword) {
156
+        this.getDepartmentList(keyword);
157
+      }, 500),
158
+      signUserInput(event) {
159
+          this.signUserKeyWord = event.detail.value;
160
+          this.handleSignUserSearch(this.signUserKeyWord);
161
+      },
162
+      handleSignUserSearch: debounce(function(keyword) {
163
+        this.getSignUserList(keyword);
164
+      }, 500),
165
+      inspectUserInput(event) {
166
+          this.inspectUserKeyWord = event.detail.value;
167
+          this.handleInspectUserSearch(this.inspectUserKeyWord);
168
+      },
169
+      handleInspectUserSearch: debounce(function(keyword) {
170
+        this.getInspectUserList(keyword);
171
+      }, 500),
172
+      // 取消
173
+      cancel(){
174
+        this.$emit("cancelEmit");
175
+      },
176
+      // 清空
177
+      clear(){
178
+        if(this.tabActiveId !== 3){
179
+          this.searchData.signUser = {id: 0, name: '全部'};
180
+        }
181
+        if(this.tabActiveId !== 2){
182
+          this.searchData.inspectUser = {id: 0, name: '全部'};
183
+        }
184
+        this.searchData.department = {id: 0, dept: '全部'};
185
+        let state4 = this.pageData.stateList.find(v => v.value == 4);
186
+        this.searchData.state = state4 || {};
187
+      },
188
+      // 确认
189
+      confirm(){
190
+        this.$emit('confirmEmit', this.searchData);
191
+      },
192
+      // 页面路由跳转
193
+      clickPageRouter(type){
194
+        this.pageData.pageRouter = type;
195
+        switch(type){
196
+          case 'signUser':
197
+            this.getSignUserList();
198
+          break;
199
+          case 'inspectUser':
200
+            this.getInspectUserList();
201
+          break;
202
+          case 'department':
203
+            this.getDepartmentList();
204
+          break;
205
+        }
206
+      },
207
+      // 点击科室
208
+      clickDepartment(department){
209
+        this.pageData.pageRouter = 'default';
210
+        this.searchData.department = department;
211
+      },
212
+      // 点击签到人
213
+      clickSignUser(signUser){
214
+        this.pageData.pageRouter = 'default';
215
+        this.searchData.signUser = signUser;
216
+      },
217
+      // 点击出科陪检人
218
+      clickInspectUser(inspectUser){
219
+        this.pageData.pageRouter = 'default';
220
+        this.searchData.inspectUser = inspectUser;
221
+      },
222
+      // 获取科室
223
+      getDepartmentList(keyWord){
224
+        uni.showLoading({
225
+          title: "加载中",
226
+        });
227
+        
228
+        let postData = {
229
+          idx: 0,
230
+          sum: 99,
231
+          department: {
232
+      			searchType: 1,
233
+            cascadeHosId: this.hosId,
234
+            dept: keyWord,
235
+          },
236
+        }
237
+        post("/data/fetchDataList/department", postData).then(res => {
238
+          uni.hideLoading();
239
+          if(res.status == 200){
240
+            let list = res.list || [];
241
+            this.pageData.departmentList = [{ id:0, dept: '全部' }, ...list];
242
+          }else{
243
+            uni.showToast({
244
+              icon: 'none',
245
+              title: res.msg || '请求数据失败!'
246
+            });
247
+          }
248
+        })
249
+      },
250
+      // 获取签到人列表
251
+      getSignUserList(keyWord){
252
+        uni.showLoading({
253
+          title: "加载中",
254
+        });
255
+      	let postData = {
256
+      	  idx: 0,
257
+      	  sum: 99,
258
+      		user:{
259
+            hospital: {
260
+              id: this.hosId,
261
+            },
262
+            name: keyWord,
263
+            simpleQuery: true,
264
+      		}
265
+      	};
266
+
267
+      	post("/data/fetchDataList/user", postData).then((res) => {
268
+      			uni.hideLoading();
269
+      	    let list = res.list || [];
270
+      	    this.pageData.signUserList = [{ id: 0, name: '全部' }, ...list];
271
+      	  });
272
+      },
273
+      // 获取出科陪检人列表
274
+      getInspectUserList(keyWord){
275
+        uni.showLoading({
276
+          title: "加载中",
277
+        });
278
+      	let postData = {
279
+      	  idx: 0,
280
+      	  sum: 99,
281
+      		user:{
282
+            hospital: {
283
+              id: this.hosId,
284
+            },
285
+            name: keyWord,
286
+            simpleQuery: true,
287
+      		}
288
+      	};
289
+      
290
+      	post("/data/fetchDataList/user", postData).then((res) => {
291
+      			uni.hideLoading();
292
+      	    let list = res.list || [];
293
+      	    this.pageData.inspectUserList = [{ id: 0, name: '全部' }, ...list];
294
+      	  });
295
+      }
296
+    },
297
+    mounted() {
298
+      this.getStateList();
299
+      this.searchData.signUser = this.evt.signUser || {id: 0, name: '全部'};
300
+      this.searchData.inspectUser = this.evt.inspectUser || {id: 0, name: '全部'};
301
+      this.searchData.department = this.evt.department || {id: 0, name: '全部'};
302
+    }
303
+  }
304
+</script>
305
+
306
+<style lang="scss" scoped>
307
+.text-input {
308
+  width: 100%;
309
+  display: inline-block;
310
+  padding: 0 12rpx;
311
+  border: 1rpx solid #49B856;
312
+  border-radius: 8rpx;
313
+
314
+  .m-input {
315
+    height: 64rpx;
316
+    line-height: 64rpx;
317
+  }
318
+}
319
+.mask{
320
+  position: fixed;
321
+  left: 0;
322
+  top: 0;
323
+  right: 0;
324
+  bottom: 0;
325
+  background-color: rgba(0, 0, 0, 0.4);
326
+  z-index: 99;
327
+}
328
+.line{
329
+  content: '';
330
+  position: fixed;
331
+  top: 0;
332
+  left: 0;
333
+  z-index: 999;
334
+  height: 8rpx;
335
+  width: 100%;
336
+  background-color: #EBEBEB;
337
+}
338
+.container{
339
+  position: fixed;
340
+  left: 125rpx;
341
+  top: 0;
342
+  right: 0;
343
+  bottom: 0;
344
+  z-index: 999;
345
+  background-color: #F7F7F7;
346
+  display: flex;
347
+  flex-direction: column;
348
+  justify-content: space-between;
349
+  font-size: 28rpx;
350
+  
351
+  .container_form{
352
+    height: 100%;
353
+    display: flex;
354
+    flex-direction: column;
355
+    flex: 1;
356
+    min-height: 0;
357
+    .head{
358
+      height: 90rpx;
359
+      display: flex;
360
+      align-items: center;
361
+      justify-content: space-between;
362
+      background-color: #fff;
363
+      padding: 0 24rpx;
364
+      .status{
365
+        color: #5DAAB6;
366
+      }
367
+    }
368
+    .statusList{
369
+      display: flex;
370
+      gap: 16rpx 32rpx;
371
+      flex-wrap: wrap;
372
+      background-color: #fff;
373
+      margin-top: 24rpx;
374
+      padding: 16rpx 8rpx;
375
+      .statusItem{
376
+        width: 182rpx;
377
+        height: 60rpx;
378
+        background: #EEEEEE;
379
+        display: flex;
380
+        justify-content: center;
381
+        align-items: center;
382
+        position: relative;
383
+        &.active{
384
+          background-color: #DCF2F5;
385
+        }
386
+        .newicon-xuanzejiaobiao{
387
+          position: absolute;
388
+          right: 0;
389
+          bottom: 0;
390
+          color: #65babb;
391
+        }
392
+      }
393
+    }
394
+  }
395
+  
396
+  .hospital{
397
+    display: flex;
398
+    justify-content: space-between;
399
+    align-items: center;
400
+    padding: 32rpx 24rpx 24rpx;
401
+    background-color: #fff;
402
+    .name{
403
+      font-size: 30rpx;
404
+      flex-shrink: 0;
405
+      margin-right: 24rpx;
406
+    }
407
+    .value{
408
+      font-size: 26rpx;
409
+      color: #5DAAB6;
410
+    }
411
+  }
412
+  
413
+  .signUsers{
414
+    flex: 1;
415
+    min-height: 0;
416
+    margin-top: 16rpx;
417
+    background-color: #fff;
418
+    .signUsers_item{
419
+      padding: 24rpx;
420
+      border-bottom: 1rpx solid #DEDEDE;
421
+    }
422
+  }
423
+  
424
+  .inspectUsers{
425
+    flex: 1;
426
+    min-height: 0;
427
+    margin-top: 16rpx;
428
+    background-color: #fff;
429
+    .inspectUsers_item{
430
+      padding: 24rpx;
431
+      border-bottom: 1rpx solid #DEDEDE;
432
+    }
433
+  }
434
+  
435
+  .categorys{
436
+    flex: 1;
437
+    min-height: 0;
438
+    margin-top: 16rpx;
439
+    background-color: #fff;
440
+    .categorys_item{
441
+      padding: 24rpx;
442
+      border-bottom: 1rpx solid #DEDEDE;
443
+    }
444
+  }
445
+  
446
+  .tabs{
447
+    margin-top: 16rpx;
448
+    background-color: #FBFBFB;
449
+    display: flex;
450
+    flex-wrap: wrap;
451
+    justify-content: space-between;
452
+    gap: 16rpx 0;
453
+    padding: 24rpx 16rpx;
454
+    .tab{
455
+      width: 180rpx;
456
+      height: 60rpx;
457
+      display: flex;
458
+      justify-content: center;
459
+      align-items: center;
460
+      background-color: #F7F7F7;
461
+      font-size: 28rpx;
462
+      position: relative;
463
+      .newicon-xuanzejiaobiao{
464
+        opacity: 0;
465
+        position: absolute;
466
+        right: 0;
467
+        bottom: 0;
468
+        font-size: 38rpx;
469
+        color: #53B9BB;
470
+      }
471
+      &.active{
472
+        background-color: rgba(149, 220, 231, 0.30);
473
+        .newicon-xuanzejiaobiao{
474
+          opacity: 1;
475
+        }
476
+      }
477
+    }
478
+  }
479
+  
480
+  .signUser,
481
+  .inspectUser,
482
+  .category,
483
+  .acceptDate{
484
+    display: flex;
485
+    justify-content: space-between;
486
+    align-items: center;
487
+    padding: 24rpx;
488
+    background-color: #fff;
489
+    margin-top: 24rpx;
490
+    .name{
491
+      flex-shrink: 0;
492
+      margin-right: 24rpx;
493
+    }
494
+  }
495
+  
496
+  .container_foot{
497
+    .clear{
498
+      padding: 24rpx;
499
+      font-size: 28rpx;
500
+      background-color: #fff;
501
+      margin: 0 16rpx;
502
+      display: flex;
503
+      align-items: center;
504
+      justify-content: center;
505
+    }
506
+    .foot_btns{
507
+      margin-top: 24rpx;
508
+      display: flex;
509
+      border-top: 1rpx solid #BFBFBF;
510
+      .cancel{
511
+        flex: 1;
512
+        background-color: #fff;
513
+        font-size: 32rpx;
514
+        padding: 24rpx;
515
+        display: flex;
516
+        justify-content: center;
517
+      }
518
+      .confirm{
519
+        flex: 1;
520
+        font-size: 32rpx;
521
+        padding: 24rpx;
522
+        background-color: #49B856;
523
+        display: flex;
524
+        justify-content: center;
525
+        color: #fff;
526
+      }
527
+    }
528
+  }
529
+}
530
+</style>

+ 768 - 0
pages/patientInspectLog/patientInspectLogDetail.vue

@@ -0,0 +1,768 @@
1
+<template>
2
+  <view class="incidentDetail">
3
+    <view class="head">
4
+      <view class="tab" :class="{active: tab.value === dataInfo.tabActiveValue}" v-for="tab in dataInfo.tabs" :key="tab.id" @click="clickTab(tab.value)">
5
+        {{tab.name}}<text v-if="tab.num !== ''">({{tab.num}})</text>
6
+      </view>
7
+    </view>
8
+    <scroll-view scroll-y class="body">
9
+      <!-- 基本信息 -->
10
+      <template v-if="dataInfo.tabActiveValue === '1'">
11
+        <view class="detail_head">
12
+          <text class="title">基本信息</text>
13
+          <view class="other">
14
+            <view class="status">{{dataInfo.patientInspectLogData.state ? dataInfo.patientInspectLogData.state.name : ''}}</view>
15
+          </view>
16
+        </view>
17
+        <view class="detail_item_wrap">
18
+          <view class="deital_item">
19
+            <text class="name">患者科室:</text>
20
+            <text class="value">{{dataInfo.patientInspectLogData.deptName}}</text>
21
+          </view>
22
+          <view class="deital_item">
23
+            <text class="name">患者姓名:</text>
24
+            <text class="value">{{dataInfo.patientInspectLogData.patientName}}</text>
25
+            <text class="value text_value">年龄:<text v-if="dataInfo.patientInspectLogData.age !== undefined">{{dataInfo.patientInspectLogData.age }}岁</text></text>
26
+          </view>
27
+          <view class="deital_item">
28
+            <text class="name">住院号:</text>
29
+            <text class="value">{{dataInfo.patientInspectLogData.patientCode}}</text>
30
+            <text class="value text_value">床号:{{dataInfo.patientInspectLogData.bedNum }}</text>
31
+          </view>
32
+          <view class="deital_item">
33
+            <text class="name">护理等级:</text>
34
+            <text class="value">{{dataInfo.patientInspectLogData.careLevel ? dataInfo.patientInspectLogData.careLevel.name : ''}}</text>
35
+            <text class="value text_value">危重等级:{{dataInfo.patientInspectLogData.illnessState ? dataInfo.patientInspectLogData.illnessState.name : ''}}</text>
36
+          </view>
37
+        </view>
38
+
39
+        <view class="detail_head">
40
+          <text class="title">陪检信息</text>
41
+        </view>
42
+        <view class="detail_item_wrap">
43
+          <view class="deital_item">
44
+            <text class="name">陪检方式:</text>
45
+            <text class="value">{{dataInfo.patientInspectLogData.tripTypeDTO ? dataInfo.patientInspectLogData.tripTypeDTO.inspectMode : ''}}</text>
46
+          </view>
47
+          <view class="deital_item">
48
+            <text class="name">携带设备:</text>
49
+            <text class="value">{{dataInfo.patientInspectLogData.goodsNames}}</text>
50
+          </view>
51
+          <view class="deital_item">
52
+            <text class="name">出科时间:</text>
53
+            <text class="value">{{dataInfo.patientInspectLogData.outDeptTime | formatDate('yyyy-MM-dd hh:mm')}}</text>
54
+          </view>
55
+          <view class="deital_item">
56
+            <text class="name">出科人:</text>
57
+            <text class="value">{{dataInfo.patientInspectLogData.backDeptUserDTO ? dataInfo.patientInspectLogData.backDeptUserDTO.name : ''}}</text>
58
+          </view>
59
+        </view>
60
+        
61
+        <view class="detail_head">
62
+          <text class="title">最新操作</text>
63
+        </view>
64
+        <view class="detail_item_wrap">
65
+          <view class="deital_item">
66
+            <text class="name">签到时间:</text>
67
+            <text class="value">{{dataInfo.patientInspectLogData.signTime | formatDate('yyyy-MM-dd hh:mm')}}</text>
68
+          </view>
69
+          <view class="deital_item">
70
+            <text class="name">签到人:</text>
71
+            <text class="value">{{dataInfo.patientInspectLogData.signUserDTO ? dataInfo.patientInspectLogData.signUserDTO.name : ''}}</text>
72
+          </view>
73
+          <view class="deital_item">
74
+            <text class="name">签到科室:</text>
75
+            <text class="value">{{dataInfo.patientInspectLogData.signDeptDTO ? dataInfo.patientInspectLogData.signDeptDTO.dept : ''}}</text>
76
+          </view>
77
+        </view>
78
+        
79
+        <view class="detail_head">
80
+          <text class="title">回科信息</text>
81
+        </view>
82
+        <view class="detail_item_wrap">
83
+          <view class="deital_item">
84
+            <text class="name">回科时间:</text>
85
+            <text class="value">{{dataInfo.patientInspectLogData.backDeptTime | formatDate('yyyy-MM-dd hh:mm')}}</text>
86
+          </view>
87
+          <view class="deital_item">
88
+            <text class="name">回科人:</text>
89
+            <text class="value">{{dataInfo.patientInspectLogData.backDeptUserDTO ? dataInfo.patientInspectLogData.backDeptUserDTO.name : ''}}</text>
90
+          </view>
91
+        </view>
92
+      </template>
93
+
94
+      <!-- 检查信息 -->
95
+      <template v-if="dataInfo.tabActiveValue === '2'">
96
+        <view class="info">
97
+          <view v-for="item in dataInfo.valueList" :key="item.id" class="infoItem">
98
+            <view class="name">检查项目:<text class="fwb">{{item.inspectName}}</text></view>
99
+            <view class="name">检查单号:<text>{{item.inspectCode}}</text></view>
100
+            <view class="name">状态:<text>{{item.inspectState ? item.inspectState.name : ''}}</text></view>
101
+            <view class="name">检查地点:<text>{{item.execDept ? item.execDept.dept : ''}}</text></view>
102
+          </view>
103
+        </view>
104
+      </template>
105
+
106
+      <!-- 流程图 -->
107
+      <template v-if="dataInfo.tabActiveValue === '3'">
108
+        <view class="process_item_wrap">
109
+          <view class="process_item" v-for="item in dataInfo.logList" :key="item.id">
110
+            <view class="process_item_top">
111
+              <view class="name">{{item.operationType ? item.operationType.name : '' }}</view>
112
+              <view class="value" v-if="item.remark">({{item.remark}})</view>
113
+            </view>
114
+            <view class="process_item_bottom">
115
+              <text class="name">{{item.operationTime | formatDate('yyyy-MM-dd hh:mm')}}</text>
116
+              <text class="value" v-if="item.username">{{item.username}}</text>
117
+            </view>
118
+          </view>
119
+        </view>
120
+      </template>
121
+    </scroll-view>
122
+    <view class="foot_common_btns">
123
+      <button @click="toList()" type="default" class="primaryButton btn">返回</button>
124
+      <button v-if="dataInfo.patientInspectLogData.state.value === '4'" @click="tagClick(dataInfo.patientInspectLogData)" type="default" class="primaryButton btn">标记回科</button>
125
+    </view>
126
+    <!-- 弹窗 -->
127
+    <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content" @ok="ok" @cancel="cancel" @know="know" :operate="models.operate"></showModel>
128
+  </view>
129
+</template>
130
+
131
+<script>
132
+  import { get, post, SM, deleteIt, webHandle } from "../../http/http.js";
133
+  export default {
134
+    data(){
135
+      return {
136
+        selectData: {},
137
+        // 弹窗model
138
+        models: {
139
+          disjunctor: false,
140
+        },
141
+        dataInfo: {
142
+          tabs: [
143
+             {id: 1, name: '基本信息', value: '1', num: ''},
144
+             {id: 2, name: '检查信息', value: '2', num: ''},
145
+             {id: 3, name: '流程信息', value: '3', num: ''},
146
+          ],
147
+          tabActiveValue: 1,//当前选择的tab
148
+          patientInspectLogId: undefined,//闭环ID
149
+          patientInspectLogData: {},//闭环对象
150
+          valueList: [],//检查信息
151
+          logList: [],//流程图
152
+         }
153
+      }
154
+    },
155
+    methods: {
156
+      // 标记回科
157
+      tagClick(data){
158
+        this.selectData = data;
159
+        this.models = {
160
+          disjunctor: true,
161
+          title: "提示",
162
+          content: `您确认${data.patientName}患者已回科吗?`,
163
+          icon: "warn",
164
+          operate: {
165
+            ok: "确定",
166
+            cancel: "取消",
167
+          },
168
+        };
169
+      },
170
+      //确定
171
+      ok() {
172
+        this.models.disjunctor = false;
173
+        uni.showLoading({
174
+          title: "加载中",
175
+          mask: true,
176
+        });
177
+        post("/nurse/patientInspect/setPatientInspectBackDept", {
178
+          pilId: this.selectData.id,
179
+        }).then((res) => {
180
+          uni.hideLoading();
181
+          let _this = this;
182
+          if (res.state == 200) {
183
+            uni.showToast({
184
+              icon: "none",
185
+              mask: true,
186
+              title: "操作成功!",
187
+            });
188
+            setTimeout(() => {
189
+              _this.toList();
190
+            },300)
191
+          } else {
192
+            uni.showToast({
193
+              icon: 'none',
194
+              title: res.msg || '请求数据失败!'
195
+            });
196
+          }
197
+        })
198
+      },
199
+      //取消
200
+      cancel() {
201
+        this.models.disjunctor = false;
202
+      },
203
+      // 点击tab
204
+      clickTab(tabValue){
205
+       if(this.dataInfo.tabActiveValue == tabValue){
206
+         return;
207
+       }
208
+       this.dataInfo.tabActiveValue = tabValue;
209
+       this.initData()
210
+      },
211
+      // tab业务数据接口
212
+      initData(){
213
+       if(this.dataInfo.tabActiveValue === '1'){
214
+         
215
+       }else if(this.dataInfo.tabActiveValue === '2'){
216
+         this.getValue();
217
+       }else if(this.dataInfo.tabActiveValue === '3'){
218
+         this.getLog();
219
+       }
220
+      },
221
+      // 获取检查信息
222
+      getValue(){
223
+       uni.showLoading({
224
+         title: "加载中",
225
+         mask: true,
226
+       });
227
+       let postData = {
228
+           pilId: this.dataInfo.patientInspectLogId,
229
+       };
230
+       post(`/nurse/patientInspect/getPatientInspectList`, postData).then(res => {
231
+         uni.hideLoading();
232
+         if(res.status == 200){
233
+           this.dataInfo.valueList = res.list || [];
234
+         }else{
235
+           uni.showToast({
236
+             icon: 'none',
237
+             title: res.msg || '请求数据失败!'
238
+           });
239
+         }
240
+       })
241
+      },
242
+      // 获取流程信息
243
+      getLog(){
244
+       uni.showLoading({
245
+         title: "加载中",
246
+         mask: true,
247
+       });
248
+      let postData = {
249
+        "idx": 0,
250
+        "sum": 9999,
251
+        "patientInspectLogLog": {
252
+          "pilId": this.dataInfo.patientInspectLogId
253
+        }
254
+      };
255
+       post(`/simple/data/fetchDataList/patientInspectLogLog`, postData).then(res => {
256
+         uni.hideLoading();
257
+         if(res.status == 200){
258
+           this.dataInfo.logList = res.list || [];
259
+         }else{
260
+           uni.showToast({
261
+             icon: 'none',
262
+             title: res.msg || '请求数据失败!'
263
+           });
264
+         }
265
+       })
266
+      },
267
+      // 获取详情
268
+      getDetail(){
269
+       uni.showLoading({
270
+         title: "加载中",
271
+         mask: true,
272
+       });
273
+
274
+       get(`/simple/data/fetchData/patientInspectLog/${this.dataInfo.patientInspectLogId}`).then(res => {
275
+         uni.hideLoading();
276
+         if(res.status == 200){
277
+           this.dataInfo.patientInspectLogData = res.data || {};
278
+           this.dataInfo.logList = this.dataInfo.patientInspectLogData.logList || [];
279
+           
280
+           this.dataInfo.tabActiveValue = this.dataInfo.tabs[0].value;
281
+           console.log(this.dataInfo.tabActiveValue)
282
+           this.initData()
283
+         }else{
284
+           uni.showToast({
285
+             icon: 'none',
286
+             title: res.msg || '请求数据失败!'
287
+           });
288
+         }
289
+       })
290
+      },
291
+      // 返回列表
292
+      toList(){
293
+       uni.reLaunch({
294
+         url: `/pages/patientInspectLog/patientInspectLogList`
295
+       })
296
+      }
297
+    },
298
+    onLoad(options){
299
+      this.dataInfo.patientInspectLogId = options.patientInspectLogId;
300
+      this.getDetail();
301
+    }
302
+  }
303
+ //  import chunk from 'lodash-es/chunk'
304
+ //  import { ref, reactive } from 'vue'
305
+ //  import { onLoad } from '@dcloudio/uni-app'
306
+ //  import { api_listAttachment, api_inspectionTaskDetail, api_inspectionFormValues } from "@/http/api.js"
307
+ //  import { defaultColor } from '@/static/js/theme.js'
308
+ //  import { useSetTitle } from '@/share/useSetTitle.js'
309
+ //  import { filterFormatDate } from '@/filters/filterFormatDate.js'
310
+
311
+ //  useSetTitle();
312
+ //  const { formatDate }  = filterFormatDate();
313
+
314
+ //  // 主题颜色
315
+ //  const primaryColor = ref(defaultColor)
316
+	
317
+ //  // 数据
318
+ //  const dataInfo = reactive({
319
+ //    tabs: [
320
+ //      {id: 1, name: '基础信息', value: '1', num: ''},
321
+ //      // {id: 2, name: '巡检信息', value: '2', num: ''},
322
+ //      {id: 3, name: '流程图', value: '3', num: ''},
323
+ //    ],
324
+ //    tabActiveValue: 0,//当前选择的tab
325
+ //    patientInspectLogId: undefined,//巡检执行ID
326
+ //    patientInspectLogData: {},//巡检执行对象
327
+ //    inspectionTaskImgs: [],//巡检图片
328
+ //    valueList: [],//巡检信息
329
+ //    logList: [],//流程图
330
+ //  })
331
+  
332
+ //  function getValuex(value){
333
+ //    return value.formItemConfigList ? value.formItemConfigList.map(v => v.valuex).toString() : value.valuex;
334
+ //  }
335
+
336
+ //  // 获取巡检信息
337
+ //  function getValue(){
338
+ //    uni.showLoading({
339
+ //      title: "加载中",
340
+ //      mask: true,
341
+ //    });
342
+ //    let postData = {
343
+ //        "idx": 0,
344
+ //        "sum": 9999,
345
+ //        "inspectionFormValues": {
346
+ //          taskId: dataInfo.patientInspectLogId,
347
+ //        }
348
+ //    };
349
+ //    api_inspectionFormValues(postData).then(res => {
350
+ //      uni.hideLoading();
351
+ //      if(res.status == 200){
352
+ //        let valueList = res.list || [];
353
+ //        let imgFlag = valueList.some(v => v.inspectionFormItemDTO.type.value == 7);
354
+
355
+ //        if(imgFlag){
356
+ //          valueList.forEach(v => {
357
+ //            if(v.inspectionFormItemDTO.type.value == 7){
358
+ //              v.valuex = [];
359
+ //            }
360
+ //          })
361
+ //        }
362
+
363
+ //        dataInfo.valueList = chunk(valueList, 3);
364
+
365
+ //        if(imgFlag){
366
+ //          getInspectionImgs();
367
+ //        }
368
+ //      }else{
369
+ //        uni.showToast({
370
+ //          icon: 'none',
371
+ //          title: res.msg || '请求数据失败!'
372
+ //        });
373
+ //      }
374
+ //    })
375
+ //  }
376
+
377
+ //  // 预览图片
378
+ //  function previewImg(index, type, imgList){
379
+ //    uni.previewImage({
380
+ //      current: index,
381
+ //      urls: imgList.map(v => v.previewUrl),
382
+ //      longPressActions: {
383
+ //        itemList: ['发送给朋友', '保存图片', '收藏'],
384
+ //        success: function(data) {
385
+ //          console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
386
+ //        },
387
+ //        fail: function(err) {
388
+ //          console.log(err.errMsg);
389
+ //        }
390
+ //      }
391
+ //    });
392
+ //  }
393
+
394
+ //  // 初始化表单
395
+ //  function initData(){
396
+ //    if(dataInfo.tabActiveValue === '1'){
397
+      
398
+ //    }else if(dataInfo.tabActiveValue === '2'){
399
+ //      getValue();
400
+ //    }else if(dataInfo.tabActiveValue === '3'){
401
+      
402
+ //    }
403
+ //  }
404
+
405
+ //  // 点击tab
406
+ //  function clickTab(tabValue){
407
+ //    if(dataInfo.tabActiveValue == tabValue){
408
+ //      return;
409
+ //    }
410
+ //    dataInfo.tabActiveValue = tabValue;
411
+ //    initData()
412
+ //  }
413
+
414
+ //  // 获取巡检执行详情
415
+ //  function getDetail(){
416
+ //    uni.showLoading({
417
+ //      title: "加载中",
418
+ //      mask: true,
419
+ //    });
420
+
421
+ //    api_inspectionTaskDetail(dataInfo.patientInspectLogId).then(res => {
422
+ //      uni.hideLoading();
423
+ //      if(res.status == 200){
424
+ //        dataInfo.patientInspectLogData = res.data || {};
425
+ //        dataInfo.logList = dataInfo.patientInspectLogData.logList || [];
426
+        
427
+ //        // 巡检信息
428
+ //        if(dataInfo.patientInspectLogData.status.value === '2'){
429
+ //          let flag = dataInfo.tabs.some(v => v.value === '2');
430
+ //          !flag && dataInfo.tabs.splice(1, 0, {id: 2, name: '巡检信息', value: '2', num: ''});
431
+ //        }
432
+        
433
+ //        dataInfo.tabActiveValue = dataInfo.tabs[0].value;
434
+ //        initData()
435
+ //      }else{
436
+ //        uni.showToast({
437
+ //          icon: 'none',
438
+ //          title: res.msg || '请求数据失败!'
439
+ //        });
440
+ //      }
441
+ //    })
442
+ //  }
443
+	
444
+ //  // 获取巡检图片
445
+ //  function getInspectionImgs(){
446
+ //    uni.showLoading({
447
+ //      title: "加载中",
448
+ //      mask: true,
449
+ //    });
450
+ //    api_listAttachment('inspection', dataInfo.patientInspectLogId).then(res => {
451
+ //      uni.hideLoading();
452
+ //      res.data = res.data || [];
453
+ //      res.data.forEach(v => {
454
+ //        v.previewUrl = location.origin + "/file" + v.relativeFilePath;
455
+ //        v.thumbFilePath = location.origin + "/file" + v.thumbFilePath;
456
+ //      })
457
+      
458
+ //      let imgList = res.data || [];
459
+ //      dataInfo.valueList.forEach(v => {
460
+ //        v.forEach(vv => {
461
+ //          imgList.forEach(item => {
462
+ //            if(vv.itemId == item.recordId){
463
+ //              if(vv.valuex && vv.valuex.length){
464
+ //                vv.valuex.push(item)
465
+ //              }else{
466
+ //                vv.valuex = [item];
467
+ //              }
468
+ //            }
469
+ //          })
470
+ //        })
471
+ //      })
472
+ //    })
473
+ //  }
474
+
475
+ //  // 返回巡检列表
476
+ //  function toList(){
477
+ //    uni.reLaunch({
478
+ //      url: `/pages/inspection/inspectionExecute/inspectionExecute`
479
+ //    })
480
+ //  }
481
+  
482
+ //  // 查看故障单
483
+ //  function viewIncidentDetail(incidentId){
484
+ //    uni.navigateTo({
485
+ //      url: `/pages/incidentDetail/incidentDetail?incidentId=${incidentId}`
486
+ //    })
487
+ //  }
488
+
489
+ //  onLoad((option) => {
490
+ //    dataInfo.patientInspectLogId = option.patientInspectLogId;
491
+	// 	getDetail();
492
+ //  })
493
+</script>
494
+
495
+<style lang="scss" scoped>
496
+.popup-content{
497
+	padding: 40rpx;
498
+}
499
+.incidentDetail{
500
+  height: 100vh;
501
+  display: flex;
502
+  flex-direction: column;
503
+  justify-content: space-between;
504
+  background-color: #EBEBEB;
505
+  .head{
506
+    height: 88rpx;
507
+    display: flex;
508
+    position: fixed;
509
+    z-index: 99;
510
+    width: 100%;
511
+    background-color: #fff;
512
+    font-size: 30rpx;
513
+    .tab{
514
+      flex: 1;
515
+      display: flex;
516
+      justify-content: center;
517
+      align-items: center;
518
+      border-bottom: 4rpx solid transparent;
519
+      position: relative;
520
+      &:last-of-type{
521
+        &:after{
522
+          display: none;
523
+        }
524
+      }
525
+      // &:after{
526
+      //   content: '';
527
+      //   position: absolute;
528
+      //   right: 0;
529
+      //   top: 50%;
530
+      //   transform: translateY(-50%);
531
+      //   width: 1rpx;
532
+      //   height: 44rpx;
533
+      //   background-color: #515151;
534
+      // }
535
+      &.active{
536
+        color: #49B856;
537
+        border-color: #49B856;
538
+      }
539
+    }
540
+  }
541
+  .body{
542
+    margin-top: 88rpx;
543
+    box-sizing: border-box;
544
+    flex: 1;
545
+    min-height: 0;
546
+    border-top: 7rpx solid #EBEBEB;
547
+    .phone-filled{
548
+      margin-left: 5rpx;
549
+    }
550
+    .mic-filled{
551
+      margin-right: 100rpx;
552
+    }
553
+    .detail_item_wrap{
554
+      padding-bottom: 24rpx;
555
+    }
556
+    .detail_head{
557
+      padding: 24rpx;
558
+      border-top: 8rpx solid #D2D2D2;
559
+      border-bottom: 1rpx solid #D2D2D2;
560
+      display: flex;
561
+      justify-content: space-between;
562
+      align-items: center;
563
+      &:first-of-type{
564
+        border-top: none;
565
+      }
566
+      .title{
567
+        font-size: 26rpx;
568
+        color: #49B856;
569
+        padding-left: 18rpx;
570
+        position: relative;
571
+        &:before{
572
+          content: '';
573
+          width: 8rpx;
574
+          height: 25rpx;
575
+          background-color: #49B856;
576
+          position: absolute;
577
+          left: 0;
578
+          top: 50%;
579
+          transform: translateY(-50%);
580
+        }
581
+      }
582
+      .other{
583
+        display: flex;
584
+        align-items: center;
585
+        .priority{
586
+          font-size: 26rpx;
587
+          margin-right: 15rpx;
588
+        }
589
+        .status{
590
+          font-size: 26rpx;
591
+        }
592
+      }
593
+    }
594
+
595
+    .deital_item{
596
+      font-size: 26rpx;
597
+      color: #555;
598
+      padding: 24rpx 24rpx 0;
599
+      display: flex;
600
+      align-items: center;
601
+      .name{
602
+        width: 5em;
603
+        margin-right: 24rpx;
604
+      }
605
+      .value{
606
+        flex: 2;
607
+        word-break: break-all;
608
+        &.text_value{
609
+          flex: 1;
610
+        }
611
+        &.img{
612
+          display: flex;
613
+          .imgItem{
614
+            width: 82rpx;
615
+            height: 82rpx;
616
+            margin-right: 24rpx;
617
+            &:last-of-type{
618
+              margin-right: 0;
619
+            }
620
+          }
621
+					.resourceItem{
622
+						width: 100rpx;
623
+						height: 100rpx;
624
+						margin-right: 24rpx;
625
+						&:last-of-type{
626
+						  margin-right: 0;
627
+						}
628
+					}
629
+					.resourceItem-audio{
630
+						width: 300rpx;
631
+						height: 60rpx;
632
+					}
633
+        }
634
+      }
635
+    }
636
+
637
+    .summaryItem_bodyItem{
638
+      padding: 24rpx 24rpx 0;
639
+      font-size: 26rpx;
640
+      .summaryItem_bodyItem_top{
641
+        display: flex;
642
+        justify-content: space-between;
643
+        align-items: center;
644
+        .value{
645
+          padding-left: 48rpx;
646
+          flex-shrink: 0;
647
+        }
648
+      }
649
+      .summaryItem_bodyItem_bottom{
650
+        margin-top: 24rpx;
651
+        display: flex;
652
+        justify-content: space-between;
653
+        align-items: center;
654
+        .name{
655
+          text-align: right;
656
+          flex: 1;
657
+        }
658
+        .value{
659
+          width: 220rpx;
660
+          text-align: right;
661
+          flex-shrink: 0;
662
+        }
663
+      }
664
+    }
665
+
666
+    .summaryItem_bodyItem_total{
667
+      text-align: right;
668
+      padding: 24rpx;
669
+      font-size: 26rpx;
670
+    }
671
+
672
+    .summaryItem_total{
673
+      text-align: center;
674
+      padding-top: 24rpx;
675
+      font-size: 32rpx;
676
+      font-weight: bold;
677
+      color: #49B856;
678
+      border-top: 1rpx solid #D2D2D2;
679
+    }
680
+    
681
+    .info{
682
+      .infoItem{
683
+        padding: 24rpx;
684
+        background-color: #fff;
685
+        border-top: 8rpx solid #D2D2D2;
686
+        font-size: 24rpx;
687
+        &:first-of-type{
688
+          border-top: none;
689
+        }
690
+        .name{
691
+          margin-top: 24rpx;
692
+          &:first-of-type{
693
+            margin-top: 0;
694
+          }
695
+        }
696
+      }
697
+    }
698
+
699
+    .process_item_wrap{
700
+      padding: 38rpx;
701
+      .process_item{
702
+        &:last-of-type{
703
+          .process_item_bottom{
704
+            border-left: none;
705
+          }
706
+        }
707
+        .process_item_top{
708
+          padding-left: 30rpx;
709
+          display: flex;
710
+          align-items: center;
711
+          position: relative;
712
+          &:before{
713
+            content: '';
714
+            position: absolute;
715
+            left: -13rpx;
716
+            top: 50%;
717
+            width: 26rpx;
718
+            height: 26rpx;
719
+            border-radius: 50%;
720
+            background-color: #49B856;
721
+            transform: translateY(-50%);
722
+          }
723
+          .name{
724
+            font-size: 30rpx;
725
+          }
726
+          .value{
727
+            margin-left: 20rpx;
728
+            font-size: 22rpx;
729
+            color: #A1A1A1;
730
+						flex: 1;
731
+          }
732
+        }
733
+        .process_item_bottom{
734
+          min-height: 82rpx;
735
+          border-left: 1rpx solid #B7BDC6;
736
+          margin-top: 5rpx;
737
+          padding-left: 30rpx;
738
+          display: flex;
739
+          font-size: 24rpx;
740
+          color: #A1A1A1;
741
+          .value{
742
+            margin-left: 20rpx;
743
+          }
744
+        }
745
+      }
746
+    }
747
+
748
+    .appraise_detail{
749
+      padding: 24rpx 24rpx 24rpx 40rpx;
750
+      .appraise_detail_top{
751
+        display: flex;
752
+        align-items: center;
753
+        justify-content: space-between;
754
+        font-size: 26rpx;
755
+        .name{
756
+          color: #A1A1A1;
757
+        }
758
+        .value{}
759
+      }
760
+      .appraise_detail_bottom{
761
+        font-size: 30rpx;
762
+        margin-top: 24rpx;
763
+        word-break: break-all;
764
+      }
765
+    }
766
+  }
767
+}
768
+</style>

+ 476 - 0
pages/patientInspectLog/patientInspectLogList.vue

@@ -0,0 +1,476 @@
1
+<template>
2
+  <view class="incidentList">
3
+    <view class="head">
4
+      <view class="tab" :class="{active: tab.id === dataInfo.tabActiveId}" v-for="tab in dataInfo.tabs" :key="tab.id" @click="clickTab(tab.id)">
5
+        {{tab.name}}<text v-if="tab.num !== ''">({{tab.num}})</text>
6
+      </view>
7
+      <view class="filter" @click="filterClick">
8
+        <text class="newicon newicon-shaixuan"></text>
9
+      </view>
10
+    </view>
11
+    <view class="body" v-if="dataInfo.list.length">
12
+      <view class="body_item" v-for="data in dataInfo.list" :key="data.id" @click="toDetail(data)">
13
+        <view class="body_item_head ellipsis-multiline">
14
+          <text>
15
+            <text class="sign signRed">{{ data.careLevel ? data.careLevel.name : '' }}<template v-if="data.careLevel && data.illnessState">、</template>{{ data.illnessState ? data.illnessState.name : '' }}</text> {{ data.patientName }}<text v-if="data.bedNum">({{ data.bedNum }})</text>
16
+          </text>
17
+          <text>{{ data.state ? data.state.name : '' }}</text>
18
+        </view>
19
+
20
+        <view class="body_item_content">
21
+          <view class="body_item_content_p">
22
+            <text class="name ellipsis">住院号:{{data.patientCode}}</text>
23
+            <text>{{(data.patientDTO && data.patientDTO.gender) ? data.patientDTO.gender.name : ''}}<text v-if="data.age !== undefined" class="ml24">{{data.age}}</text></text>
24
+          </view>
25
+          <view class="body_item_content_p">
26
+            <text class="name ellipsis">患者科室:{{ data.deptDTO ? data.deptDTO.dept : '' }}</text>
27
+            <text>{{data.tripTypeDTO ? data.tripTypeDTO.inspectMode : ''}}</text>
28
+          </view>
29
+          <view class="body_item_content_p">
30
+            <text class="name ellipsis">签到信息:{{data.signDeptDTO ? data.signDeptDTO.dept : ''}}</text>
31
+            <text>{{data.signTime | formatDate('MM-dd hh:mm')}}</text>
32
+          </view>
33
+        </view>
34
+
35
+        <view class="body_item_foot" v-if="data.state.value === '4'">
36
+          <view class="btns pt0">
37
+            <button @click.stop="tagClick(data)" type="default" class="primaryButton btn">标记回科</button>
38
+          </view>
39
+        </view>
40
+      </view>
41
+    </view>
42
+    <view class="zanwu" v-else>
43
+      <text class="newicon newicon-zanwu"></text>
44
+    </view>
45
+    <view class="toolbar" @click="scan()">
46
+      <text class="toolbar-icon newicon newicon-saoma"></text>
47
+      <text class="toolbar-sao">扫一扫</text>
48
+    </view>
49
+    <!-- 弹窗 -->
50
+    <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content" @ok="ok" @cancel="cancel" @know="know" :operate="models.operate"></showModel>
51
+    <!-- 搜索 -->
52
+    <patientInspectLogListFilter v-if="dataInfo.isFilter" @cancelEmit="cancelFilter" @confirmEmit="conformFilter" :evt="dataInfo.evtFilter" :tabActiveId="dataInfo.tabActiveId"></patientInspectLogListFilter>
53
+  </view>
54
+</template>
55
+
56
+<script>
57
+  import patientInspectLogListFilter from './components/patientInspectLogListFilter.vue';
58
+  import { get, post, SM, deleteIt, webHandle } from "../../http/http.js";
59
+  export default {
60
+    components:{
61
+      patientInspectLogListFilter,
62
+    },
63
+    onShow() {
64
+      this.SMFlag = true;
65
+    },
66
+    data(){
67
+      return {
68
+        selectData: {},
69
+        SMFlag: true,
70
+        loginUser: uni.getStorageSync('userData').user,
71
+        hosId: uni.getStorageSync('userData').user.currentHospital.id,
72
+        // 弹窗model
73
+        models: {
74
+          disjunctor: false,
75
+        },
76
+        dataInfo: {
77
+          tabs: [
78
+            {id: 1, name: '全部', value: '1', num: ''},
79
+            {id: 2, name: '我带出的', value: '2', num: ''},
80
+            {id: 3, name: '我接收的', value: '3', num: ''},
81
+          ],
82
+          tabActiveId: 1,//当前选择的tab
83
+          list: [],//工单列表
84
+          idx: 0,//页码
85
+          hasMore: true,//是否有更多数据
86
+          isFilter: false,//筛选框开关
87
+          evtFilter: {
88
+            signUser: {id: 0, name: '全部'},
89
+            inspectUser: {id: 0, name: '全部'},
90
+            department: {id: 0, dept: '全部'},
91
+            state: {},
92
+          },//筛选框数据
93
+        }
94
+      }
95
+    },
96
+    methods: {
97
+      // 扫一扫
98
+      scan(isFlag = false) {
99
+        if (!this.SMFlag) {
100
+          return;
101
+        }
102
+        this.SMFlag = false;
103
+        SM().then((ress1) => {
104
+          this.scan_common(ress1, isFlag);
105
+        }).catch(err => {
106
+          this.SMFlag = true;
107
+        });
108
+      },
109
+      // 扫一扫方法
110
+      scan_common(ress1, isFlag = false){
111
+        uni.showLoading({
112
+          title: "加载中",
113
+          mask: true,
114
+        });
115
+        let postData = {
116
+          idx: 0,
117
+          sum: 1,
118
+          patientInspectLog: {
119
+            hosId: this.hosId,
120
+            scanCode: ress1,
121
+          }
122
+        }
123
+        post("/simple/data/fetchDataList/patientInspectLog", postData).then((ress) => {
124
+          this.SMFlag = true;
125
+          uni.hideLoading();
126
+          if (ress.status == 200) {
127
+            let list = ress.list || [];
128
+            if(list.length){
129
+              let patientInspectLog = undefined;
130
+              patientInspectLog = list[0];
131
+              uni.navigateTo({
132
+                url: `/pages/patientInspectLog/patientInspectLogDetail?patientInspectLogId=${patientInspectLog.id}`
133
+              })
134
+            }else{
135
+              uni.showToast({
136
+                icon: "none",
137
+                title: "未查询到患者闭环信息!",
138
+              });
139
+            }
140
+          } else {
141
+            uni.showToast({
142
+              icon: "none",
143
+              title: ress.msg || "接口获取数据失败!",
144
+            });
145
+          }
146
+        });
147
+      },
148
+      // 初始化
149
+      onLoadFn(){
150
+        this.getTabs();
151
+      },
152
+      // 获取tab选项
153
+      getTabs(){
154
+        this.getList(0);
155
+      },
156
+      // 获取列表信息
157
+      getList(idx){
158
+        uni.showLoading({
159
+          title: "加载中",
160
+          mask: true,
161
+        });
162
+        this.dataInfo.idx = idx === undefined ? this.dataInfo.idx : idx;
163
+        if(this.dataInfo.idx === 0){
164
+          this.dataInfo.list = [];
165
+        }
166
+        
167
+        let postData = {
168
+            "idx": this.dataInfo.idx,
169
+            "sum": 20,
170
+            "patientInspectLog": {
171
+              "hosId": this.hosId,
172
+            }
173
+        }
174
+        
175
+        let tabActiveObj = this.dataInfo.tabs.find(v => v.id == this.dataInfo.tabActiveId);
176
+        console.log(tabActiveObj)
177
+        
178
+        if(tabActiveObj && tabActiveObj.id){
179
+          if(tabActiveObj.id === 1){
180
+            if(this.dataInfo.evtFilter && this.dataInfo.evtFilter.signUser && this.dataInfo.evtFilter.signUser.id){
181
+              postData.patientInspectLog.signUser = this.dataInfo.evtFilter.signUser.id;
182
+            }
183
+            if(this.dataInfo.evtFilter && this.dataInfo.evtFilter.inspectUser && this.dataInfo.evtFilter.inspectUser.id){
184
+              postData.patientInspectLog.outDeptUser = this.dataInfo.evtFilter.inspectUser.id;
185
+            }
186
+          }else if(tabActiveObj.id === 2){
187
+            postData.patientInspectLog.outDeptUser = this.loginUser.id;
188
+            if(this.dataInfo.evtFilter && this.dataInfo.evtFilter.signUser && this.dataInfo.evtFilter.signUser.id){
189
+              postData.patientInspectLog.signUser = this.dataInfo.evtFilter.signUser.id;
190
+            }
191
+          }else if(tabActiveObj.id === 3){
192
+            postData.patientInspectLog.signUser = this.loginUser.id;
193
+            if(this.dataInfo.evtFilter && this.dataInfo.evtFilter.inspectUser && this.dataInfo.evtFilter.inspectUser.id){
194
+              postData.patientInspectLog.outDeptUser = this.dataInfo.evtFilter.inspectUser.id;
195
+            }
196
+          }
197
+        }
198
+      
199
+        if(this.dataInfo.evtFilter && this.dataInfo.evtFilter.department && this.dataInfo.evtFilter.department.id){
200
+          postData.patientInspectLog.deptId = this.dataInfo.evtFilter.department.id;
201
+        }
202
+        
203
+        if(this.dataInfo.evtFilter && this.dataInfo.evtFilter.state && this.dataInfo.evtFilter.state.id){
204
+          postData.patientInspectLog.state = this.dataInfo.evtFilter.state;
205
+        }
206
+      
207
+        post("/simple/data/fetchDataList/patientInspectLog", postData).then(res => {
208
+          uni.hideLoading();
209
+          uni.stopPullDownRefresh();
210
+          if(res.status == 200){
211
+            let list = res.list || [];
212
+            if(list.length){
213
+              this.dataInfo.hasMore = true;
214
+              this.dataInfo.list = this.dataInfo.idx === 0 ? list : this.dataInfo.list.concat(list);
215
+            }else{
216
+              this.dataInfo.hasMore = false;
217
+            }
218
+          }else{
219
+            uni.showToast({
220
+              icon: 'none',
221
+              title: res.msg || '请求数据失败!'
222
+            });
223
+          }
224
+        })
225
+      },
226
+      // 详情
227
+      toDetail(data){
228
+        uni.navigateTo({
229
+          url: `/pages/patientInspectLog/patientInspectLogDetail?patientInspectLogId=${data.id}`
230
+        })
231
+      },
232
+      // 标记回科
233
+      tagClick(data){
234
+        this.selectData = data;
235
+        this.models = {
236
+          disjunctor: true,
237
+          title: "提示",
238
+          content: `将${data.patientName}患者标记为已回科,是否确认?`,
239
+          icon: "warn",
240
+          operate: {
241
+            ok: "确定",
242
+            cancel: "取消",
243
+          },
244
+        };
245
+      },
246
+      //确定
247
+      ok() {
248
+        this.models.disjunctor = false;
249
+        uni.showLoading({
250
+          title: "加载中",
251
+          mask: true,
252
+        });
253
+        post("/nurse/patientInspect/setPatientInspectBackDept", {
254
+          pilId: this.selectData.id,
255
+        }).then((res) => {
256
+          uni.hideLoading();
257
+          let _this = this;
258
+          if (res.state == 200) {
259
+            uni.showToast({
260
+              icon: "none",
261
+              mask: true,
262
+              title: "操作成功!",
263
+            });
264
+            setTimeout(() => {
265
+              _this.getList(0);
266
+            },300)
267
+          } else {
268
+            uni.showToast({
269
+              icon: 'none',
270
+              title: res.msg || '请求数据失败!'
271
+            });
272
+          }
273
+        })
274
+      },
275
+      //取消
276
+      cancel() {
277
+        this.models.disjunctor = false;
278
+      },
279
+      // 点击tab
280
+      clickTab(tabId){
281
+        this.dataInfo.tabActiveId = tabId;
282
+        if(tabId === 1){
283
+          this.dataInfo.evtFilter.signUser = {id: 0, name: '全部'};
284
+          this.dataInfo.evtFilter.inspectUser = {id: 0, name: '全部'};
285
+        }else if(tabId === 2){
286
+          this.dataInfo.evtFilter.signUser = {id: 0, name: '全部'};
287
+          this.dataInfo.evtFilter.inspectUser = this.loginUser;
288
+        }else if(tabId === 3){
289
+          this.dataInfo.evtFilter.signUser = this.loginUser;
290
+          this.dataInfo.evtFilter.inspectUser = {id: 0, name: '全部'};
291
+        }
292
+        this.getList(0);
293
+      },
294
+      // 点击筛选
295
+      filterClick(){
296
+        this.dataInfo.isFilter = true;
297
+      },
298
+      // 确认筛选
299
+      conformFilter(evtFilter){
300
+        this.dataInfo.evtFilter = evtFilter;
301
+        this.dataInfo.isFilter = false;
302
+        this.getList(0);
303
+      },
304
+      // 关闭筛选
305
+      cancelFilter(){
306
+        this.dataInfo.isFilter = false;
307
+      },
308
+    },
309
+    onLoad(options){
310
+      this.onLoadFn();
311
+    },
312
+    onTabItemTap(){
313
+      this.onLoadFn();
314
+    },
315
+    onPullDownRefresh(){
316
+      this.getList(0);
317
+    },
318
+    onReachBottom(){
319
+      this.dataInfo.idx += 1;
320
+      if (this.dataInfo.hasMore) {
321
+        this.getList(); // 当触底时加载更多数据
322
+      }
323
+    },
324
+  };
325
+</script>
326
+
327
+<style lang="scss" scoped>
328
+.toolbar {
329
+  position: fixed;
330
+  left: 0;
331
+  bottom: var(--window-bottom);
332
+  z-index: 99;
333
+  width: 100%;
334
+  height: 88rpx;
335
+  display: flex;
336
+  justify-content: center;
337
+  align-items: center;
338
+  box-sizing: border-box;
339
+  border-radius: 4rpx;
340
+  background-color: #E5E8ED;
341
+
342
+  .toolbar-icon {
343
+    font-size: 52rpx;
344
+    margin-right: 16rpx;
345
+    color: #49B856;
346
+  }
347
+
348
+  .toolbar-sao {
349
+    font-size: 36rpx;
350
+    color: #333;
351
+  }
352
+}
353
+page{
354
+  height: calc(100vh - var(--window-bottom));
355
+}
356
+.incidentList{
357
+  display: flex;
358
+  flex-direction: column;
359
+  justify-content: space-between;
360
+  .head{
361
+    height: 88rpx;
362
+    display: flex;
363
+    position: fixed;
364
+    z-index: 99;
365
+    width: 100%;
366
+    background-color: #fff;
367
+    font-size: 30rpx;
368
+    .tab{
369
+      flex: 1;
370
+      display: flex;
371
+      justify-content: center;
372
+      align-items: center;
373
+      border-bottom: 4rpx solid transparent;
374
+      &.active{
375
+        color: #49b856;
376
+        border-color: #49b856;
377
+      }
378
+    }
379
+    .filter{
380
+      width: 84rpx;
381
+      display: flex;
382
+      justify-content: center;
383
+      align-items: center;
384
+      .newicon-shaixuan{
385
+        font-size: 36rpx;
386
+        color: #2C2C2C;
387
+      }
388
+    }
389
+  }
390
+  .body{
391
+    margin-bottom: calc(var(--window-bottom) + 88rpx);
392
+    margin-top: 88rpx;
393
+    border-top: 6rpx solid #EBEBEB;
394
+    .body_item{
395
+      border-bottom: 8rpx solid #EBEBEB;
396
+      .body_item_head{
397
+        word-break: break-all;
398
+        text-align: justify;
399
+        text-align: left;
400
+        margin: 24rpx;
401
+        font-size: 30rpx;
402
+        display: flex;
403
+        align-items: center;
404
+        justify-content: space-between;
405
+        .sign{
406
+          margin-right: 16rpx;
407
+          color: #49B856;
408
+          &.signRed{
409
+            color: #FF0000;
410
+          }
411
+        }
412
+      }
413
+      .body_item_content{
414
+        border-top: 1rpx solid #D8D8D8;
415
+        padding: 24rpx;
416
+        .body_item_content_p{
417
+          color: #6A6A6A;
418
+          font-size: 26rpx;
419
+          display: flex;
420
+          justify-content: space-between;
421
+          align-items: center;
422
+          margin-bottom: 24rpx;
423
+          &:last-of-type{
424
+            margin-bottom: 0;
425
+          }
426
+          .name{
427
+            flex: 1;
428
+          }
429
+          .status{
430
+            padding: 4rpx 10rpx;
431
+            border-radius: 20rpx;
432
+            background-color: #DBE8FE;
433
+            font-size: 22rpx;
434
+            color: #006CF9;
435
+          }
436
+          .icon_all{
437
+            .mic-filled,
438
+            .image-filled
439
+            {
440
+              margin-left: 16rpx;
441
+            }
442
+          }
443
+        }
444
+      }
445
+      .body_item_foot{
446
+        border-top: 1rpx solid #D8D8D8;
447
+        font-size: 26rpx;
448
+        padding: 24rpx;
449
+        .foot_info{
450
+          display: flex;
451
+          justify-content: space-between;
452
+          align-items: center;
453
+          .phone-filled{
454
+            margin-left: 5rpx;
455
+          }
456
+        }
457
+      }
458
+    }
459
+  }
460
+  .zanwu{
461
+    box-sizing: border-box;
462
+    margin-bottom: calc(var(--window-bottom) + 88rpx);
463
+    margin-top: 88rpx;
464
+    border-top: 6rpx solid #EBEBEB;
465
+    height: calc(100vh - var(--window-bottom) - 176rpx);
466
+    display: flex;
467
+    justify-content: center;
468
+    background-color: #F7F7F7;
469
+    .newicon-zanwu{
470
+      font-size: 256rpx;
471
+      color: #D6D6D6;
472
+      margin-top: 140rpx;
473
+    }
474
+  }
475
+}
476
+</style>

+ 8 - 0
pages/receiptpage/receiptpage.vue

@@ -1760,6 +1760,10 @@
1760 1760
             this.content.push({
1761 1761
               text: "患者交接",
1762 1762
             });
1763
+          } else if (item.link === "wxPatientInspectLog") {
1764
+            this.content.push({
1765
+              text: "陪检闭环",
1766
+            });
1763 1767
           }
1764 1768
         });
1765 1769
       },
@@ -2226,6 +2230,10 @@
2226 2230
           uni.navigateTo({
2227 2231
             url: "/pages/transferWorkOrder/transferWorkOrderUser",
2228 2232
           });
2233
+        } else if (e.item.text === "陪检闭环") {
2234
+          uni.navigateTo({
2235
+            url: "/pages/patientInspectLog/patientInspectLogList",
2236
+          });
2229 2237
         }
2230 2238
       },
2231 2239
       //确定

+ 26 - 3
static/font/demo_index.html

@@ -55,6 +55,12 @@
55 55
           <ul class="icon_lists dib-box">
56 56
           
57 57
             <li class="dib">
58
+              <span class="icon newicon">&#xe717;</span>
59
+                <div class="name">选择角标</div>
60
+                <div class="code-name">&amp;#xe717;</div>
61
+              </li>
62
+          
63
+            <li class="dib">
58 64
               <span class="icon newicon">&#xe644;</span>
59 65
                 <div class="name">修改</div>
60 66
                 <div class="code-name">&amp;#xe644;</div>
@@ -738,9 +744,9 @@
738 744
 <pre><code class="language-css"
739 745
 >@font-face {
740 746
   font-family: 'newicon';
741
-  src: url('iconfont.woff2?t=1747104804641') format('woff2'),
742
-       url('iconfont.woff?t=1747104804641') format('woff'),
743
-       url('iconfont.ttf?t=1747104804641') format('truetype');
747
+  src: url('iconfont.woff2?t=1747972897466') format('woff2'),
748
+       url('iconfont.woff?t=1747972897466') format('woff'),
749
+       url('iconfont.ttf?t=1747972897466') format('truetype');
744 750
 }
745 751
 </code></pre>
746 752
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -767,6 +773,15 @@
767 773
         <ul class="icon_lists dib-box">
768 774
           
769 775
           <li class="dib">
776
+            <span class="icon newicon newicon-xuanzejiaobiao"></span>
777
+            <div class="name">
778
+              选择角标
779
+            </div>
780
+            <div class="code-name">.newicon-xuanzejiaobiao
781
+            </div>
782
+          </li>
783
+          
784
+          <li class="dib">
770 785
             <span class="icon newicon newicon-weibiaoti2010104"></span>
771 786
             <div class="name">
772 787
               修改
@@ -1794,6 +1809,14 @@
1794 1809
           
1795 1810
             <li class="dib">
1796 1811
                 <svg class="icon svg-icon" aria-hidden="true">
1812
+                  <use xlink:href="#newicon-xuanzejiaobiao"></use>
1813
+                </svg>
1814
+                <div class="name">选择角标</div>
1815
+                <div class="code-name">#newicon-xuanzejiaobiao</div>
1816
+            </li>
1817
+          
1818
+            <li class="dib">
1819
+                <svg class="icon svg-icon" aria-hidden="true">
1797 1820
                   <use xlink:href="#newicon-weibiaoti2010104"></use>
1798 1821
                 </svg>
1799 1822
                 <div class="name">修改</div>

+ 7 - 3
static/font/iconfont.css

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

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
static/font/iconfont.js


+ 7 - 0
static/font/iconfont.json

@@ -6,6 +6,13 @@
6 6
   "description": "",
7 7
   "glyphs": [
8 8
     {
9
+      "icon_id": "733991",
10
+      "name": "选择角标",
11
+      "font_class": "xuanzejiaobiao",
12
+      "unicode": "e717",
13
+      "unicode_decimal": 59159
14
+    },
15
+    {
9 16
       "icon_id": "1069107",
10 17
       "name": "修改",
11 18
       "font_class": "weibiaoti2010104",

BIN
static/font/iconfont.ttf


BIN
static/font/iconfont.woff


BIN
static/font/iconfont.woff2