Browse Source

项目初始化

seimin 3 years ago
commit
65bf4cc0ea
66 changed files with 29743 additions and 0 deletions
  1. 2 0
      .gitignore
  2. 11 0
      .hbuilderx/launch.json
  3. 120 0
      App.vue
  4. 135 0
      components/bigScreen/bigScreen.vue
  5. 253 0
      components/changeHospital/changeHospital.vue
  6. BIN
      components/fjj-condition/.DS_Store
  7. 604 0
      components/fjj-condition/fjj-condition.vue
  8. 58 0
      components/footTool/footTool.vue
  9. 238 0
      components/mehaotian-search-revision/mehaotian-search-revision.vue
  10. 829 0
      components/mx-datepicker/mx-datepicker.vue
  11. 265 0
      components/showIntegralModel/showIntegralModel.vue
  12. 317 0
      components/showModel/showModel.vue
  13. 144 0
      components/uni-drawer/uni-drawer.vue
  14. 433 0
      components/uni-fab/uni-fab.vue
  15. 259 0
      http/http.js
  16. 165 0
      js_sdk/u-charts/u-charts/component.vue
  17. 5658 0
      js_sdk/u-charts/u-charts/u-charts.js
  18. 1 0
      js_sdk/u-charts/u-charts/u-charts.min.js
  19. 45 0
      main.js
  20. 81 0
      manifest.json
  21. 18 0
      package-lock.json
  22. 20 0
      package.json
  23. 187 0
      pages.json
  24. 1008 0
      pages/homePage/homePage.vue
  25. 734 0
      pages/inspectList/inspectList.vue
  26. 759 0
      pages/my_list/my_list.vue
  27. 683 0
      pages/mypage/mypage.vue
  28. 193 0
      pages/patientInformationInfo/patientInformationInfo.vue
  29. 621 0
      pages/patientInformationList/patientInformationList.vue
  30. 536 0
      pages/pharmacy/pharmacy.vue
  31. 378 0
      pages/pharmacyDetails/pharmacyDetails.vue
  32. 1047 0
      pages/receipt_infopage/receipt_infopage.vue
  33. 1181 0
      pages/receiptpage/receiptpage.vue
  34. 554 0
      pages/scanning/scanning.vue
  35. 144 0
      pages/scanning_B/scanning_B.vue
  36. 671 0
      pages/scanning_Result/scanning_Result.vue
  37. 1119 0
      pages/scanning_all/scanning_all.vue
  38. 1275 0
      pages/scanning_code/scanning_code.vue
  39. 522 0
      pages/scanning_djEnd/scanning_djEnd.vue
  40. 514 0
      pages/scanning_djInfo/scanning_djInfo.vue
  41. 1076 0
      pages/scanning_ins/scanning_ins.vue
  42. 171 0
      pages/scanning_insEnd/scanning_insEnd.vue
  43. 636 0
      pages/scanning_orderSign/scanning_orderSign.vue
  44. 504 0
      pages/search/search.vue
  45. 418 0
      pages/setDept/setDept.vue
  46. 276 0
      pages/settingCode/settingCode.vue
  47. 380 0
      pages/shortcutbuildOrders/shortcutbuildOrders.vue
  48. BIN
      static/HM-search/attention.png
  49. BIN
      static/HM-search/attention_forbid.png
  50. BIN
      static/HM-search/back.png
  51. BIN
      static/HM-search/delete.png
  52. 539 0
      static/font/demo.css
  53. 2419 0
      static/font/demo_index.html
  54. 403 0
      static/font/iconfont.css
  55. 1 0
      static/font/iconfont.js
  56. 688 0
      static/font/iconfont.json
  57. BIN
      static/font/iconfont.ttf
  58. BIN
      static/font/iconfont.woff
  59. BIN
      static/font/iconfont.woff2
  60. BIN
      static/img/BG.png
  61. BIN
      static/img/BG_xiaban.png
  62. BIN
      static/img/icon_shandian.png
  63. BIN
      static/img/zanwushuju.png
  64. BIN
      static/logo.png
  65. 374 0
      tools/photograph.js
  66. 76 0
      uni.scss

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
1
+unpackage/
2
+node_modules/

+ 11 - 0
.hbuilderx/launch.json

@@ -0,0 +1,11 @@
1
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
2
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
3
+    "version": "0.0",
4
+    "configurations": [{
5
+            "type": "uniCloud",
6
+            "default": {
7
+                "launchtype": "remote"
8
+            }
9
+        }
10
+    ]
11
+}

+ 120 - 0
App.vue

@@ -0,0 +1,120 @@
1
+<script>
2
+  export default {
3
+    onLaunch: function() {
4
+      console.log('App Launch');
5
+      //#ifdef APP-PLUS
6
+      var info = plus.push.getClientInfo();
7
+      console.log(JSON.stringify(info));
8
+      uni.setStorageSync('clientid', info.clientid); //记住cid
9
+      //收到透传消息  
10
+      //只有APP在线时,才会触发receive事件,透传消息不会触发系统消息,需要创建本地消息  
11
+      plus.push.addEventListener("receive", function(msg) {
12
+        console.log("(receive):" + JSON.stringify(msg));
13
+        // 播报 start
14
+        // const innerAudioContext = uni.createInnerAudioContext();
15
+        // innerAudioContext.autoplay = true;
16
+        // innerAudioContext.src = 'http://fanyi.baidu.com/gettts?lan=zh&text=' + msg.content + '&spd=5&source=web';
17
+        // 播报 end
18
+        // if (app.isIOS()) { //如果是IOS  
19
+        //   var payload = msg.payload;
20
+        //   //【APP离线】收到消息,但没有提醒(发生在一次收到多个离线消息时,只有一个有提醒,但其他的没有提醒)  
21
+        //   //【APP在线】收到消息,不会触发系统消息,需要创建本地消息,但不能重复创建。必须加msg.type验证去除死循环                
22
+        //   if (msg.aps == null && msg.type == "receive") {
23
+        //     var messageTitle = payload.messageTitle;
24
+        //     var messageContent = payload.messageContent;
25
+        //     //创建本地消息,发送的本地消息也会被receive方法接收到,但没有type属性,且aps是null  
26
+        //     plus.push.createMessage(messageContent, JSON.stringify(payload), {
27
+        //       title: messageTitle
28
+        //     });
29
+        //   }
30
+        // }
31
+        // if (app.isAndroid()) { //如果是Android,当APP在线时,收到透传消息不会进入系统消息,需要发送本地提醒。 
32
+        //   var payload = JSON.parse(msg.payload);
33
+        //   var messageTitle = payload.messageTitle;
34
+        //   var messageContent = payload.messageContent;
35
+        //   plus.push.createMessage(messageContent, msg.payload, {
36
+        //     title: messageTitle
37
+        //   });
38
+        // }
39
+      }, false);
40
+
41
+      //消息点击事件  
42
+      //【APP在线】,收到透传消息通过,不会提醒至通知栏目,需要发送本地消息,再进行点击触发的点击事件。  
43
+      //【APP离线】,收到离线透传消息,必须通过Java后台的Intent字符串携带payload,且符合格式才能触发click事件,格式不符合不会触发。  
44
+      plus.push.addEventListener("click", function(msg) {
45
+        console.log("(click):" + JSON.stringify(msg));
46
+        // if (app.isIOS()) { //如果是IOS  
47
+        //   var payload;
48
+        //   if (msg.type == "click") { //APP离线点击包含click属性,这时payload是JSON对象  
49
+        //     payload = msg.payload;
50
+        //   } else { //APP在线,收到消息不会包含type属性,这时的payload是JSON字符串,需要转为JSON对象  
51
+        //     payload = JSON.parse(msg.payload);
52
+        //   }
53
+        //   if (payload != null || payload != undefined) {
54
+        //     var messageType = payload.messageType;
55
+        //     messageClick(messageType, payload);
56
+        //   }
57
+        // }
58
+        // if (app.isAndroid()) { //如果是Android,收到playload均是是JSON字符串,需要转为JSON对象  
59
+        //   var payload = JSON.parse(msg.payload);
60
+        //   if (payload != null || payload != undefined) {
61
+        //     var messageType = payload.messageType;
62
+        //     messageClick(messageType, payload);
63
+        //   }
64
+        // }
65
+      }, false);
66
+      //#endif
67
+    },
68
+    onShow: function() {
69
+      console.log('App Show');
70
+      // uni.redirectTo({
71
+      //   url: "../mypage/mypage",
72
+      // });
73
+    },
74
+    onHide: function() {
75
+      console.log('App Hide');
76
+      // uni.closeSocket();
77
+      // uni.onSocketClose(function(res) {
78
+      //   console.log('WebSocket 已关闭!');
79
+      // });
80
+    }
81
+  }
82
+</script>
83
+
84
+<style>
85
+  @import url("./static/font/iconfont.css");
86
+
87
+  /*每个页面公共css */
88
+  html {
89
+    width: 100%;
90
+    height: 100%;
91
+    background: #f9fafb;
92
+  }
93
+
94
+  body {
95
+    height: 100%;
96
+    box-sizing: border-box;
97
+    /* padding-top: 96rpx; */
98
+  }
99
+
100
+  #app {
101
+    margin: 0px;
102
+    padding: 0px;
103
+    font-family: "PingFangSC-Regular";
104
+    -webkit-font-smoothing: antialiased;
105
+    -moz-osx-font-smoothing: grayscale;
106
+    text-align: center;
107
+    font-size: 14px;
108
+    color: rgb(51, 51, 51);
109
+    width: 100%;
110
+    height: 100%;
111
+  }
112
+
113
+  /* 按钮点击态 */
114
+  .seimin-btn-hover {
115
+    box-shadow: 0px 0px 8px rgba(0, 0, 0, .1) inset !important;
116
+  }
117
+  .uni-picker-action-confirm{
118
+    color: #49b856!important;
119
+  }
120
+</style>

+ 135 - 0
components/bigScreen/bigScreen.vue

@@ -0,0 +1,135 @@
1
+<template>
2
+  <view class="toolbar" @click="Scanning()" hover-class="seimin-btn-hover">
3
+    <text class="toolbar-icon icon_transport transport-saoma"></text>
4
+    <text class="toolbar-sao">扫一扫</text>
5
+  </view>
6
+</template>
7
+
8
+<script>
9
+import { post, SM } from "../../http/http.js";
10
+export default {
11
+  methods: {
12
+    // 底部扫描
13
+    Scanning() {
14
+      SM().then((content) => {
15
+        uni.showLoading({
16
+          title: "加载中",
17
+          mask: true,
18
+        });
19
+        //检验二维码的有效性(扫码前必须验证)
20
+        post("/dept/scanning", {
21
+          content,
22
+        })
23
+          .then((result) => {
24
+            // 200检测通过,201没有有效期也通过。
25
+            if (result.state == 200 || result.state == 201) {
26
+              let data = {
27
+                code: result.code, //二维码
28
+              };
29
+              //微信—大扫描(科室码,患者码,标本码,快捷建单码)
30
+              post("/workerOrder/scanCode", data)
31
+                .then((res) => {
32
+                  uni.hideLoading();
33
+                  if (res.status == 200) {
34
+                    // 扫描标本码
35
+                    if (res.type == "specimen") {
36
+                      let infoDATA = {
37
+                        stype: res.data.stype,
38
+                        scode: res.data.scode,
39
+                        patientName: res.data.patientName,
40
+                        sickRoom: res.data.sickRoom
41
+                          ? res.data.sickRoom.dept
42
+                          : "-",
43
+                        checkDept: res.data.checkDept
44
+                          ? res.data.checkDept.dept
45
+                          : "-",
46
+                        bedNum: res.data.bedNum,
47
+                      };
48
+                      uni.navigateTo({
49
+                        url: `../scanning_B/scanning_B?status=${
50
+                          res.status
51
+                        }&msg=${res.msg}&infoDATA=${encodeURIComponent(
52
+                          JSON.stringify(infoDATA)
53
+                        )}`,
54
+                      });
55
+                    } else if (res.type == "patient") {
56
+                      //如果是患者腕带码
57
+                      // code: data.code //二维码
58
+                      res.workOrder = res.workOrder ? res.workOrder : []; //liao
59
+                      uni.navigateTo({
60
+                        url: `../scanning_ins/scanning_ins?code=${
61
+                          data.code
62
+                        }&infoDATA=${encodeURIComponent(
63
+                          JSON.stringify(res.data)
64
+                        )}&workData=${encodeURIComponent(
65
+                          JSON.stringify(res.workOrder)
66
+                        )}&patientOrders=${encodeURIComponent(
67
+                          JSON.stringify(res.patientOrders)
68
+                        )}`,
69
+                      });
70
+                    } else if (res.type == "quickOrder") {
71
+                      //快捷建单
72
+                      uni.navigateTo({
73
+                        url: `../shortcutbuildOrders/shortcutbuildOrders?infoDATA=${encodeURIComponent(
74
+                          JSON.stringify(res.data)
75
+                        )}`,
76
+                      });
77
+                    } else if (res.type == "dept") {
78
+                      // 扫描科室码
79
+                      // code: data.code //二维码
80
+                      let infoDATA = res.data;
81
+                      uni.navigateTo({
82
+                        url: `../scanning_all/scanning_all?infoDATA=${encodeURIComponent(
83
+                          JSON.stringify(infoDATA)
84
+                        )}&code=${data.code}`,
85
+                      });
86
+                    }
87
+                  } else {
88
+                    uni.navigateTo({
89
+                      url: `../scanning_Result/scanning_Result?status=${res.status}&msg=${res.msg}`,
90
+                    });
91
+                  }
92
+                });
93
+            } else {
94
+              uni.hideLoading();
95
+              uni.showToast({
96
+                icon: "none",
97
+                title: '请求失败',
98
+              });
99
+            }
100
+          })
101
+      });
102
+    },
103
+  },
104
+};
105
+</script>
106
+
107
+<style lang="less">
108
+// 底部扫一扫
109
+.toolbar {
110
+  position: fixed;
111
+  left: 0;
112
+  right: 0;
113
+  bottom: 0;
114
+  z-index: 9999;
115
+  height: 88rpx;
116
+  display: flex;
117
+  justify-content: center;
118
+  align-items: center;
119
+  box-sizing: border-box;
120
+  border-radius: 4rpx;
121
+  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.24);
122
+  background-color: #e5e9ed;
123
+
124
+  .toolbar-icon {
125
+    font-size: 52rpx;
126
+    margin-right: 16rpx;
127
+    color: #07863c;
128
+  }
129
+
130
+  .toolbar-sao {
131
+    font-size: 36rpx;
132
+    color: #333;
133
+  }
134
+}
135
+</style>

+ 253 - 0
components/changeHospital/changeHospital.vue

@@ -0,0 +1,253 @@
1
+<template>
2
+  <view class="changeHospital" v-show="disjunctor">
3
+    <view class="changeHospital__wrap">
4
+      <view class="changeHospital__header" v-if="title">
5
+        {{ title }}
6
+      </view>
7
+      <view class="changeHospital__article">
8
+        <view class="uni-list-cell">
9
+          <view class="uni-list-cell-left">
10
+            当前选择
11
+          </view>
12
+          <view class="uni-list-cell-db">
13
+            <picker @change="bindPickerChange" :value="index" :range="hospitals" range-key="hosName">
14
+              <view class="uni-input">{{hospitals[index].hosName}}</view>
15
+            </picker>
16
+          </view>
17
+        </view>
18
+      </view>
19
+      <view class="changeHospital__footer">
20
+        <view v-if="operate.ok" class="changeHospital__ok" @click="ok" hover-class="seimin-btn-hover">
21
+          {{ operate.ok || "" }}
22
+        </view>
23
+        <view v-if="operate.cancel" class="changeHospital__cancel" @click="cancel" hover-class="seimin-btn-hover">
24
+          {{ operate.cancel || "" }}
25
+        </view>
26
+      </view>
27
+    </view>
28
+  </view>
29
+</template>
30
+
31
+<script>
32
+  import {
33
+    post
34
+  } from "../../http/http.js";
35
+  export default {
36
+    data() {
37
+      return {
38
+        index: 0,
39
+        hospitals: [],
40
+        userData: null,
41
+      };
42
+    },
43
+    watch: {
44
+      disjunctor(newValue) {
45
+        if (newValue && this.operate.know == "知道了") {
46
+          this.time = 5;
47
+          this.timer = setInterval(() => {
48
+            this.time--;
49
+            if (this.time <= 0) {
50
+              clearInterval(this.timer);
51
+              this.know();
52
+            }
53
+          }, 1000);
54
+        }
55
+      },
56
+    },
57
+    props: {
58
+      // 显示隐藏
59
+      disjunctor: {
60
+        type: Boolean,
61
+        default: false,
62
+      },
63
+      // 标题
64
+      title: {
65
+        type: String,
66
+        default: "提示",
67
+      },
68
+      // 操作按钮文字
69
+      operate: {
70
+        type: Object,
71
+        default: () => {
72
+          return {
73
+            ok: "确认",
74
+            cancel: "取消",
75
+          };
76
+        },
77
+      },
78
+    },
79
+    methods: {
80
+      //修改picker的值
81
+      bindPickerChange: function(e) {
82
+        this.index = e.target.value
83
+      },
84
+      // 确定
85
+      ok() {
86
+        this.$emit("ok", this.hospitals[this.index].id);
87
+      },
88
+      // 取消
89
+      cancel() {
90
+        this.$emit("cancel");
91
+      },
92
+    },
93
+    created() {
94
+      this.userData = uni.getStorageSync('userData');
95
+      this.hospitals = this.userData.infoPermission.hospitals;
96
+      this.index = this.hospitals.findIndex(item => item.id == this.userData.user.currentHospital.id);
97
+    }
98
+  };
99
+</script>
100
+
101
+<style lang="less">
102
+  .changeHospital {
103
+    position: fixed;
104
+    left: 0;
105
+    right: 0;
106
+    top: 0;
107
+    bottom: 0;
108
+    background-color: rgba(0, 0, 0, 0.2);
109
+    z-index: 999;
110
+
111
+    .uni-list-cell {
112
+      width: 90%;
113
+      display: flex;
114
+      flex-direction: row;
115
+      justify-content: space-evenly;
116
+      align-items: center;
117
+      text-align: center;
118
+
119
+      .uni-list-cell-left {
120
+        flex: 2;
121
+      }
122
+
123
+      .uni-list-cell-db {
124
+        border: 1px solid #e5e9ed;
125
+        background-color: #fff;
126
+        padding: 16rpx 0;
127
+        flex: 5;
128
+      }
129
+    }
130
+
131
+    .changeHospital__wrap {
132
+      width: 90vw;
133
+      position: absolute;
134
+      left: 50%;
135
+      top: 50%;
136
+      transform: translate(-50%, -50%);
137
+      background-color: #fff;
138
+      border-radius: 12rpx;
139
+
140
+      .changeHospital__header {
141
+        font-size: 36rpx;
142
+        color: 000;
143
+        height: 84rpx;
144
+        display: flex;
145
+        justify-content: center;
146
+        align-items: center;
147
+      }
148
+
149
+      .changeHospital__article {
150
+        width: 90%;
151
+        margin: 40rpx auto 25rpx;
152
+        padding: 48rpx 0;
153
+        background-color: rgb(249, 250, 251);
154
+        border: 2rpx solid rgb(229, 233, 237);
155
+        border-radius: 12rpx;
156
+        box-sizing: border-box;
157
+        display: flex;
158
+        flex-direction: column;
159
+        justify-content: center;
160
+        align-items: center;
161
+
162
+        &.p0 {
163
+          padding: 0;
164
+        }
165
+
166
+        .changeHospital__icon {
167
+          font-size: 138rpx;
168
+          margin-bottom: 32rpx;
169
+
170
+          &.changeHospital__icon--success {
171
+            color: rgb(52, 179, 73);
172
+          }
173
+
174
+          &.changeHospital__icon--warn {
175
+            color: rgb(245, 165, 35);
176
+          }
177
+
178
+          &.changeHospital__icon--error {
179
+            color: rgb(255, 58, 82);
180
+          }
181
+        }
182
+
183
+        .changeHospital__content {
184
+          font-size: 36rpx;
185
+        }
186
+
187
+        .changeHospital__info {
188
+          font-size: 32rpx;
189
+          color: rgb(102, 102, 102);
190
+        }
191
+
192
+        .specialCloseFlag {
193
+          width: 90%;
194
+          height: 100%;
195
+          padding: 16rpx;
196
+        }
197
+
198
+        .radio-wrap {
199
+          .radio-item {
200
+            margin-top: 16rpx;
201
+
202
+            /deep/ .uni-radio-input-checked {
203
+              background-color: #49b856 !important;
204
+              border-color: #49b856 !important;
205
+            }
206
+          }
207
+        }
208
+      }
209
+
210
+      .changeHospital__footer {
211
+        box-sizing: border-box;
212
+        height: 100rpx;
213
+        border-top: 2rpx solid rgb(229, 233, 237);
214
+        display: flex;
215
+        align-items: center;
216
+
217
+        view {
218
+          height: 100%;
219
+          display: flex;
220
+          align-items: center;
221
+          justify-content: center;
222
+          font-size: 36rpx;
223
+          color: rgb(102, 102, 102);
224
+          position: relative;
225
+
226
+          &:nth-of-type(2)::before {
227
+            content: "";
228
+            position: absolute;
229
+            left: 0;
230
+            bottom: 0;
231
+            width: 2rpx;
232
+            height: 87rpx;
233
+            background-color: rgb(229, 233, 237);
234
+          }
235
+        }
236
+
237
+        .changeHospital__ok {
238
+          flex: 1;
239
+          color: rgb(73, 184, 86);
240
+        }
241
+
242
+        .changeHospital__cancel {
243
+          flex: 1;
244
+        }
245
+
246
+        .changeHospital__know {
247
+          flex: 1;
248
+          color: rgb(73, 184, 86);
249
+        }
250
+      }
251
+    }
252
+  }
253
+</style>

BIN
components/fjj-condition/.DS_Store


+ 604 - 0
components/fjj-condition/fjj-condition.vue

@@ -0,0 +1,604 @@
1
+<template>
2
+  <view>
3
+    <uni-drawer :visible="visibleDrawer" mode="right" @close="closeDrawer()">
4
+      <scroll-view class="drawer-list" scroll-y :style="{'height': drawerHeight}">
5
+        <block v-for="(item, index) in menuList" :key="index">
6
+          <!-- 单选、多选  isMutiple是否支持多选-->
7
+          <view v-if="item.type == 'custom' && item.detailList.length">
8
+            <view class="drawer-list-title flex justify-between">
9
+              <view>
10
+                {{item.title}}
11
+              </view>
12
+              <text v-if="item.detailList.length>showLenght" @tap="showMore(index)">{{item.showMoreList ? '收起' : '更多'}}</text>
13
+            </view>
14
+            <view class="draer-list-con">
15
+              <template v-if="!item.showMoreList">
16
+                <text :style="{background: textItem.isSelected ? color : '', color:  textItem.isSelected ? '#ffffff' : ''}"
17
+                  v-if="idx<showLenght" v-for="(textItem, idx) in item.detailList" :key="idx" :class="textItem.isSelected ? 'on' : ''"
18
+                  @tap="itemTap(idx,item.detailList,item.key, item.isMutiple)">
19
+                  {{textItem.title}}
20
+                </text>
21
+              </template>
22
+              <template v-else>
23
+                <text :style="{background: textItem.isSelected ? color : '', color:  textItem.isSelected ? '#ffffff' : ''}"
24
+                  v-for="(textItem, idx) in item.detailList" :key="idx" :class="textItem.isSelected ? 'on' : ''" @tap="itemTap(idx,item.detailList,item.key, item.isMutiple)">
25
+                  {{textItem.title}}
26
+                </text>
27
+              </template>
28
+            </view>
29
+          </view>
30
+          <!-- 时间带时分秒范围选择 -->
31
+          <view v-if="item.type == 'rangetime'">
32
+            <view class="drawer-list-title flex justify-between">
33
+              <view>
34
+                {{item.title}}
35
+              </view>
36
+            </view>
37
+            <view class="dateContent" @click="onShowDatePicker('rangetime', item.key)">
38
+              <view>
39
+                <template v-if="result[item.key] && result[item.key].length > 0">
40
+                  {{rangetime[0]}}
41
+                </template>
42
+              </view>
43
+              <view>
44
+                <template v-if="result[item.key] && result[item.key].length > 0">
45
+                  {{rangetime[1]}}
46
+                </template>
47
+              </view>
48
+            </view>
49
+          </view>
50
+          <!-- 时间不带时分秒范围选择 -->
51
+          <view v-if="item.type == 'range'">
52
+            <view class="drawer-list-title flex justify-between">
53
+              <view>
54
+                {{item.title}}
55
+              </view>
56
+            </view>
57
+            <view class="dateContent" @click="onShowDatePicker('range', item.key)">
58
+              <view>
59
+                <template v-if="result[item.key] && result[item.key].length > 0">
60
+                  {{range[0]}}-{{range[1]}}
61
+                </template>
62
+              </view>
63
+            </view>
64
+          </view>
65
+          <!-- 时间不带时分秒单个选择 -->
66
+          <view v-if="item.type == 'single'">
67
+            <view class="drawer-list-title flex justify-between">
68
+              <view>
69
+                {{item.title}}
70
+              </view>
71
+            </view>
72
+            <view class="dateContent" @click="onShowDatePicker('single', item.key)">
73
+              <view>
74
+                <!-- <template v-if="result[item.key] && result[item.key].length > 0"> -->
75
+                <view style="margin-left:16rpx;color:#666;">{{single[0]}}</view>
76
+                <!-- </template> -->
77
+                <!-- <template v-else>
78
+									<view style="margin-left:16rpx;color:#666;">请选择时间</view>
79
+								</template> -->
80
+              </view>
81
+            </view>
82
+          </view>
83
+          <!-- 数值范围选择 -->
84
+          <view v-if="item.type == 'rangenumber'">
85
+            <view class="drawer-list-title flex justify-between">
86
+              <view>
87
+                {{item.title}}
88
+              </view>
89
+            </view>
90
+            <view class="dateContent rangenumber-content flex">
91
+              <view class="rangenumber-input">
92
+                <input class="m-input" type="number" clearable v-model="minNumber" :placeholder="item.minPlaceholder || '最小值'"
93
+                  @blur="numberInputBlur(item.key)"></input>
94
+              </view>
95
+              <text>-</text>
96
+              <view class="rangenumber-input">
97
+                <input class="m-input" type="number" clearable v-model="maxNumber" :placeholder="item.maxPlaceholder || '最大值'"
98
+                  @blur="numberInputBlur(item.key)"></input>
99
+              </view>
100
+            </view>
101
+          </view>
102
+          <!-- 关键词 -->
103
+          <view v-if="item.type == 'keyWord'">
104
+            <view class="drawer-list-title flex justify-between">
105
+              <view>
106
+                {{item.title}}
107
+                <view style="color:red;font-size:28rpx;">(注:搜索住院号或检查项目名称)</view>
108
+              </view>
109
+            </view>
110
+            <view class="dateContent text-content flex">
111
+              <view class="text-input">
112
+                <input class="m-input" type="text" clearable v-model="keyWord" :placeholder="'请输入'+item.title" @blur="keyWordInputBlur(item.key)"></input>
113
+              </view>
114
+            </view>
115
+          </view>
116
+          <!-- 按床号排序 -->
117
+          <view v-if="item.type == 'bedNumSort'">
118
+            <view class="drawer-list-title flex justify-between">
119
+              <view>
120
+                {{item.title}}
121
+              </view>
122
+            </view>
123
+            <view class="dateContent sort-content flex">
124
+              <checkbox-group @change="bedNumSortInputBlur">
125
+                <checkbox value="bedNumSort" :checked="bedNumSort" color="#49b856" />按床号排序
126
+              </checkbox-group>
127
+            </view>
128
+          </view>
129
+          <!-- 检查信息状态 -->
130
+          <view v-if="item.type == 'inspectState'">
131
+            <view class="drawer-list-title flex justify-between">
132
+              <view>
133
+                {{item.title}}
134
+              </view>
135
+            </view>
136
+            <view class="dateContent inspectState-content flex">
137
+              <picker @change="inspectStateChange" :value="inspectStateIndex" :range="inspectStateNameList">
138
+                <view class="uni-input">{{inspectStateNameList[inspectStateIndex]}}</view>
139
+              </picker>
140
+            </view>
141
+          </view>
142
+        </block>
143
+      </scroll-view>
144
+      <view class="filter-content-footer flex justify-center">
145
+        <view class="filter-content-footer-item" @tap="resetClick">
146
+          <text>重置</text>
147
+        </view>
148
+        <view class="filter-content-footer-item" :style="{color}" @tap="sureClick">
149
+          <text>确认</text>
150
+        </view>
151
+      </view>
152
+    </uni-drawer>
153
+    <mx-date-picker :show="showPicker" :color="color" :type="dateType" :value="dateValue" :show-tips="true"
154
+      :show-seconds="true" @confirm="onSelected" @cancel="onSelected" />
155
+  </view>
156
+</template>
157
+
158
+<script>
159
+  /***
160
+   * 筛选组件,当前支持多选、单选
161
+   * list、visibleDrawer(是否显示)参数必填
162
+   * item.type (custom 单选、多选、rangetime 时间范围带时分秒、range 时间范围不带时分秒、rangenumber 数字范围)
163
+   * item.isMutiple 是否支持多选
164
+   * 筛选后返回格式{"listName1":[value,value](多选),"listName2":"value"(单选),...}
165
+   * rangenumber形式-可能为["",1]或[1,""]表示只有一个最大值或最小值
166
+   ***/
167
+  import uniDrawer from "@/components/uni-drawer/uni-drawer.vue";
168
+  import MxDatePicker from "@/components/mx-datepicker/mx-datepicker.vue";
169
+  export default {
170
+    props: {
171
+      inspectStateList: {
172
+        type: Array,
173
+        default () {
174
+          return [];
175
+        },
176
+      },
177
+      keyWordGvie: {
178
+        type: String,
179
+      },
180
+      bedNumSortGvie: {
181
+        type: Boolean,
182
+      },
183
+      list: {
184
+        required: true,
185
+        type: Array,
186
+        default () {
187
+          return [];
188
+        },
189
+      },
190
+      visibleDrawer: {
191
+        required: true,
192
+        type: Boolean,
193
+        default: false,
194
+      },
195
+      color: {
196
+        type: String,
197
+        default: "#49b856",
198
+      },
199
+    },
200
+    components: {
201
+      uniDrawer,
202
+      MxDatePicker,
203
+    },
204
+    created() {
205
+      this.keyWord = this.keyWordGvie;
206
+      this.bedNumSort = this.bedNumSortGvie;
207
+      this.resetResult();
208
+      uni.getSystemInfo({
209
+        success: (res) => {
210
+          this.drawerHeight = res.windowHeight - uni.upx2px(240) + "px";
211
+        },
212
+      });
213
+    },
214
+    watch: {
215
+      inspectStateList(val) {
216
+        this.inspectStateNameList = this.inspectStateList.map(item => item.name);
217
+        this.inspectStateValueList = this.inspectStateList.map(item => item.value);
218
+      }
219
+    },
220
+    computed: {
221
+      defaultSelectedObj() {
222
+        // 保存初始状态
223
+        return this.getSelectedObj();
224
+      },
225
+      selectedObj: {
226
+        get() {
227
+          return this.getSelectedObj();
228
+        },
229
+        set(newObj) {
230
+          return newObj;
231
+        },
232
+      },
233
+      menuList() {
234
+        return this.list;
235
+      },
236
+    },
237
+    data() {
238
+      return {
239
+        menuKey: 1,
240
+        showLenght: 6,
241
+        drawerHeight: "500px",
242
+        selectDetailList: [],
243
+        result: {},
244
+        showPicker: false,
245
+        date: "",
246
+        time: "",
247
+        datetime: "",
248
+        single: [new Date().Format("yyyy/MM/dd")],
249
+        range: [
250
+          new Date(new Date().getTime() - 24 * 60 * 60 * 1000).Format(
251
+            "yyyy/MM/dd"
252
+          ),
253
+          new Date().Format("yyyy/MM/dd"),
254
+        ],
255
+        rangetime: [
256
+          new Date(new Date().getTime() - 24 * 60 * 60 * 1000).Format(
257
+            "yyyy/MM/dd hh:mm"
258
+          ),
259
+          new Date().Format("yyyy/MM/dd hh:mm"),
260
+        ],
261
+        dateType: "rangetime",
262
+        dateValue: "",
263
+        minNumber: "",
264
+        maxNumber: "",
265
+        keyWord: "",
266
+        bedNumSort: false,
267
+        inspectStateIndex: 0,
268
+        inspectStateNameList: [], //检查状态名称列表
269
+        inspectStateValueList: [], //检查状态value列表
270
+      };
271
+    },
272
+
273
+    methods: {
274
+      getSelectedObj() {
275
+        return this.commonResultObj();
276
+      },
277
+      resetResult() {
278
+        this.result = this.commonResultObj();
279
+      },
280
+      commonResultObj() {
281
+        let obj = {};
282
+        this.menuList.map((item) => {
283
+          item.isMutiple ?
284
+            (obj[item.key] = []) :
285
+            item.type === "range" || item.type === "rangetime" ?
286
+            (obj[item.key] = []) :
287
+            item.type === "bedNumSort" ?
288
+            (obj[item.key] = false) :
289
+            item.type === "inspectState" ?
290
+            (obj[item.key] = 0) :
291
+            item.type === "single" ?
292
+            (obj[item.key] = [new Date().Format("yyyy/MM/dd")]) :
293
+            (obj[item.key] = "");
294
+        });
295
+        return obj;
296
+      },
297
+      //筛选项选中或取消
298
+      itemTap(index, list, key, isMutiple) {
299
+        if (isMutiple == true) {
300
+          list[index].isSelected = !list[index].isSelected;
301
+          if (list[index].isSelected) {
302
+            this.selectedObj[key].push(list[index].value);
303
+          } else {
304
+            list[index].isSelected = false;
305
+            var idx = this.selectedObj[key].indexOf(list[index].value);
306
+            this.selectedObj[key].splice(idx, 1);
307
+          }
308
+          this.result[key] = this.selectedObj[key];
309
+        } else {
310
+          this.result[key] = list[index].isSelected ? "" : list[index].value;
311
+          for (let i = 0; i < list.length; i++) {
312
+            if (index == i && !list[i].isSelected) {
313
+              list[i].isSelected = true;
314
+            } else {
315
+              list[i].isSelected = false;
316
+            }
317
+          }
318
+        }
319
+
320
+        // #ifdef H5
321
+        this.$forceUpdate();
322
+        // #endif
323
+      },
324
+
325
+      sureClick() {
326
+        let str_result = {};
327
+        let hasChoose = false;
328
+        for (let key in this.result) {
329
+          if (typeof this.result[key] == "object") {
330
+            str_result[key] = this.result[key].join(",");
331
+            if (!hasChoose) {
332
+              hasChoose = this.result[key].join(",") !== "" ? true : false;
333
+            }
334
+          } else {
335
+            str_result[key] = this.result[key];
336
+            if (!hasChoose) {
337
+              hasChoose = this.result[key] !== "" ? true : false;
338
+            }
339
+          }
340
+        }
341
+
342
+        this.$emit("result", {
343
+          str_result: str_result,
344
+          result: this.result,
345
+          hasChoose: hasChoose,
346
+          visibleDrawer: false,
347
+        });
348
+      },
349
+      resetClick() {
350
+        this.minNumber = "";
351
+        this.maxNumber = "";
352
+        this.keyWord = "";
353
+        this.bedNumSort = false;
354
+        this.inspectStateIndex = 0;
355
+        this.single = [new Date().Format("yyyy/MM/dd")];
356
+        for (let key in this.result) {
357
+          if (typeof this.result[key] == "object") {
358
+            if (key == "yyTime") {
359
+              this.result[key] = [new Date().Format("yyyy/MM/dd")];
360
+            } else {
361
+              this.result[key] = [];
362
+            }
363
+          } else {
364
+            if (key == "bedNumSort") {
365
+              this.result[key] = false;
366
+            } else if (key == "inspectState") {
367
+              this.result[key] = 0;
368
+              this.inspectStateIndex = 0;
369
+            } else {
370
+              this.result[key] = "";
371
+            }
372
+          }
373
+        }
374
+        for (let i = 0; i < this.menuList.length; i++) {
375
+          if (this.menuList[i].type == "custom") {
376
+            for (let j = 0; j < this.menuList[i].detailList.length; j++) {
377
+              this.menuList[i].detailList[j].isSelected = false;
378
+            }
379
+          }
380
+        }
381
+        // #ifdef H5
382
+        this.$forceUpdate();
383
+        // #endif
384
+      },
385
+      closeDrawer() {
386
+        this.$emit("result", {
387
+          changeStatus: true,
388
+          visibleDrawer: false,
389
+        });
390
+      },
391
+
392
+      showMore(index) {
393
+        this.menuList[index].showMoreList = !this.menuList[index].showMoreList;
394
+        ++this.menuKey;
395
+        // #ifdef H5
396
+        this.$forceUpdate();
397
+        // #endif
398
+      },
399
+
400
+      onShowDatePicker(type, key) {
401
+        //显示
402
+        this.dateType = type;
403
+        this.dateValue = this[type];
404
+        this.showPicker = true;
405
+        this.tempKey = key;
406
+      },
407
+
408
+      onSelected(e, key) {
409
+        //选择
410
+        this.showPicker = false;
411
+        if (e) {
412
+          this[this.dateType] = e.value;
413
+          this.result[this.tempKey] = e.value;
414
+          //选择的值
415
+          console.log("value => " + e.value);
416
+          //原始的Date对象
417
+          console.log("date => " + e.date);
418
+        }
419
+      },
420
+
421
+      numberInputBlur(key) {
422
+        if (
423
+          this.minNumber != "" &&
424
+          this.maxNumber != "" &&
425
+          parseFloat(this.minNumber) > parseFloat(this.maxNumber)
426
+        ) {
427
+          let temp = this.minNumber;
428
+          this.minNumber = this.maxNumber;
429
+          this.maxNumber = temp;
430
+        }
431
+        this.result[key] = [];
432
+        this.result[key].push(this.minNumber && parseFloat(this.minNumber));
433
+        this.result[key].push(this.maxNumber && parseFloat(this.maxNumber));
434
+      },
435
+      keyWordInputBlur(key) {
436
+        this.result[key] = [];
437
+        this.result[key].push(this.keyWord);
438
+      },
439
+      bedNumSortInputBlur(e) {
440
+        this.result.bedNumSort = e.detail.value.length > 0;
441
+        this.bedNumSort = e.detail.value.length > 0;
442
+      },
443
+      inspectStateChange(e) { //baba
444
+        this.result.inspectState = this.inspectStateValueList[e.detail.value];
445
+        this.inspectStateIndex = e.detail.value;
446
+      },
447
+    },
448
+  };
449
+</script>
450
+
451
+<style lang="scss" scoped>
452
+  .flex {
453
+    display: flex;
454
+  }
455
+
456
+  .justify-between {
457
+    justify-content: space-between;
458
+  }
459
+
460
+  view,
461
+  scroll-view,
462
+  swiper,
463
+  button,
464
+  input,
465
+  textarea,
466
+  label,
467
+  navigator,
468
+  image {
469
+    box-sizing: border-box;
470
+  }
471
+
472
+  /* 筛选样式 */
473
+  .drawer-list {
474
+    padding: 0 20rpx;
475
+    font-size: 26rpx;
476
+  }
477
+
478
+  input {
479
+    font-size: 26rpx;
480
+  }
481
+
482
+  .drawer-list .drawer-list-title {
483
+    font-size: 34rpx;
484
+    font-weight: 400;
485
+    line-height: 48rpx;
486
+    margin: 38rpx 0 18rpx;
487
+    color: rgba(34, 34, 34, 1);
488
+  }
489
+
490
+  .drawer-list .drawer-list-title>text {
491
+    font-size: 26rpx;
492
+    color: #666666;
493
+  }
494
+
495
+  .drawer-list .draer-list-con>text {
496
+    background: rgba(93, 92, 254, 0.1);
497
+    border-radius: 28px;
498
+    color: #666666;
499
+    font-size: 28rpx;
500
+    padding: 10rpx 28rpx;
501
+    margin: 10rpx 10rpx 10rpx 0;
502
+    display: inline-block;
503
+  }
504
+
505
+  .filter-content-footer-item {
506
+    width: 160rpx;
507
+    height: 72rpx;
508
+    line-height: 72rpx;
509
+    text-align: center;
510
+    box-shadow: 0rpx 4rpx 16rpx rgba(0, 0, 0, 0.18);
511
+    border-radius: 12rpx;
512
+    margin: 24rpx;
513
+  }
514
+
515
+  .filter-content-footer-item:first-child {
516
+    color: #49b856;
517
+  }
518
+
519
+  .picker {
520
+    z-index: 99999 !important;
521
+  }
522
+
523
+  .dateContent {
524
+    &>view {
525
+      background: rgba(244, 244, 244, 1);
526
+      border-radius: 8rpx;
527
+      width: 90%;
528
+      height: 64rpx;
529
+      line-height: 64rpx;
530
+      margin-bottom: 12rpx;
531
+    }
532
+  }
533
+
534
+  .rangenumber-content {
535
+    &>text {
536
+      display: inline-block;
537
+      width: 10%;
538
+      text-align: center;
539
+      height: 64rpx;
540
+      line-height: 64rpx;
541
+    }
542
+
543
+    .rangenumber-input {
544
+      width: 45%;
545
+      display: inline-block;
546
+      padding: 0 12rpx;
547
+
548
+      .m-input {
549
+        height: 64rpx;
550
+        line-height: 64rpx;
551
+      }
552
+    }
553
+  }
554
+
555
+  .text-content {
556
+    &>text {
557
+      display: inline-block;
558
+      width: 10%;
559
+      text-align: center;
560
+      height: 64rpx;
561
+      line-height: 64rpx;
562
+    }
563
+
564
+    .text-input {
565
+      width: 90%;
566
+      display: inline-block;
567
+      padding: 0 12rpx;
568
+
569
+      .m-input {
570
+        height: 64rpx;
571
+        line-height: 64rpx;
572
+      }
573
+    }
574
+  }
575
+
576
+  .sort-content {
577
+    font-size: 15px !important;
578
+    display: flex;
579
+    align-items: center;
580
+
581
+    /deep/ uni-checkbox:not([disabled]) .uni-checkbox-input:hover {
582
+      border-color: #49b856 !important;
583
+    }
584
+  }
585
+
586
+  .inspectState-content {
587
+    background: #f4f4f4;
588
+    border-radius: 4px;
589
+    width: 90%;
590
+    height: 32px;
591
+    line-height: 32px;
592
+    margin-bottom: 6px;
593
+    uni-picker{
594
+      width: 100%;
595
+    }
596
+    .uni-input{
597
+      padding-left: 16rpx;
598
+    }
599
+  }
600
+
601
+  /deep/.picker {
602
+    z-index: 999;
603
+  }
604
+</style>

+ 58 - 0
components/footTool/footTool.vue

@@ -0,0 +1,58 @@
1
+<template>
2
+  <view class="footTool">
3
+    <view v-for="(setting,i) in settings" :key="i" class="page_item_btn" @click="operate(i)"
4
+      hover-class="seimin-btn-hover">{{setting.name}}</view>
5
+  </view>
6
+</template>
7
+
8
+<script>
9
+  export default {
10
+    methods: {
11
+      operate(i) {
12
+        this.$emit('operate', i);
13
+      }
14
+    },
15
+    props: {
16
+      settings: {
17
+        type: Array,
18
+        default: () => []
19
+      }
20
+    }
21
+  };
22
+</script>
23
+
24
+<style lang="less">
25
+  .footTool {
26
+    position: fixed;
27
+    left: 0;
28
+    right: 0;
29
+    bottom: 0;
30
+    z-index: 9999;
31
+    height: 88rpx;
32
+    display: flex;
33
+    justify-content: center;
34
+    align-items: center;
35
+    box-sizing: border-box;
36
+    border-radius: 4rpx;
37
+
38
+    .page_item_btn {
39
+      flex: 1;
40
+      height: 88rpx;
41
+      background-image: linear-gradient(to right, #72c172, #3bb197);
42
+      border-radius: 8rpx;
43
+      line-height: 88rpx;
44
+      color: #fff;
45
+      font-size: 36rpx;
46
+      font-weight: 700;
47
+      text-align: center;
48
+      margin-right: 16rpx;
49
+
50
+      &:last-of-type {
51
+        margin-right: 0;
52
+      }
53
+      &:only-of-type {
54
+        margin: 0;
55
+      }
56
+    }
57
+  }
58
+</style>

File diff suppressed because it is too large
+ 238 - 0
components/mehaotian-search-revision/mehaotian-search-revision.vue


File diff suppressed because it is too large
+ 829 - 0
components/mx-datepicker/mx-datepicker.vue


+ 265 - 0
components/showIntegralModel/showIntegralModel.vue

@@ -0,0 +1,265 @@
1
+<template>
2
+  <view class="showIntegralModel" v-show="disjunctor">
3
+    <view class="showIntegralModel__wrap">
4
+      <view class="showIntegralModel__header">
5
+        积分详情
6
+      </view>
7
+      <view class="showIntegralModel__article">
8
+        <view class="showIntegralModel__title">
9
+          <view class="showIntegralModel__T">
10
+            <view class="showIntegralModel__item">考核项</view>
11
+            <view class="showIntegralModel__item">分值</view>
12
+            <view class="showIntegralModel__item">实际得分</view>
13
+          </view>
14
+        </view>
15
+        <scroll-view class="showIntegralModel__cc" scroll-y v-if="!loading">
16
+          <view class="showIntegralModel__list">
17
+            <view class="showIntegralModel__T">
18
+              <view class="showIntegralModel__item">响应时间</view>
19
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.estimateResponseGrade:'-'}}</view>
20
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.responseGrade:'-'}}</view>
21
+            </view>
22
+            <view class="showIntegralModel__text" v-if="orderInfo.grade"
23
+              :class="{pd:orderInfo.grade?(orderInfo.grade.responseDetails?true:false):false}">
24
+              {{orderInfo.grade.responseDetails?'('+orderInfo.grade.responseDetails+')':''}}
25
+            </view>
26
+          </view>
27
+          <view class="showIntegralModel__list">
28
+            <view class="showIntegralModel__T">
29
+              <view class="showIntegralModel__item">到达时间</view>
30
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.estimateArriveGrade:'-'}}</view>
31
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.arriveGrade:'-'}}</view>
32
+            </view>
33
+            <view class="showIntegralModel__text" v-if="orderInfo.grade"
34
+              :class="{pd:orderInfo.grade?(orderInfo.grade.arriveDetails?true:false):false}">
35
+              {{orderInfo.grade.arriveDetails?'('+orderInfo.grade.arriveDetails+')':''}}
36
+            </view>
37
+          </view>
38
+          <view class="showIntegralModel__list">
39
+            <view class="showIntegralModel__T">
40
+              <view class="showIntegralModel__item">执行时间</view>
41
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.estimateExecutionGrade:'-'}}
42
+              </view>
43
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.executionGrade:'-'}}</view>
44
+            </view>
45
+            <view class="showIntegralModel__text" v-if="orderInfo.grade"
46
+              :class="{pd:orderInfo.grade?(orderInfo.grade.executionDetails?true:false):false}">
47
+              {{orderInfo.grade.executionDetails?'('+orderInfo.grade.executionDetails+')':''}}
48
+            </view>
49
+          </view>
50
+          <view class="showIntegralModel__list">
51
+            <view class="showIntegralModel__T">
52
+              <view class="showIntegralModel__item">基础分</view>
53
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.estimateBaseGrade:'-'}}</view>
54
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.baseGrade:'-'}}</view>
55
+            </view>
56
+            <view class="showIntegralModel__text" v-if="orderInfo.grade"
57
+              :class="{pd:orderInfo.grade?(orderInfo.grade.baseDetails?true:false):false}">
58
+              {{orderInfo.grade.baseDetails?'('+orderInfo.grade.baseDetails+')':''}}
59
+            </view>
60
+          </view>
61
+          <view class="showIntegralModel__list">
62
+            <view class="showIntegralModel__T">
63
+              <view class="showIntegralModel__item">评价分</view>
64
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.estimateEvaluationGrade:'-'}}
65
+              </view>
66
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.evaluationGrade:'-'}}</view>
67
+            </view>
68
+            <view class="showIntegralModel__text" v-if="orderInfo.grade"
69
+              :class="{pd:orderInfo.grade?(orderInfo.grade.evaluationDetails?true:false):false}">
70
+              {{orderInfo.grade.evaluationDetails?'('+orderInfo.grade.evaluationDetails+')':''}}
71
+            </view>
72
+          </view>
73
+          <view class="showIntegralModel__list">
74
+            <view class="showIntegralModel__T">
75
+              <view class="showIntegralModel__item">楼栋分</view>
76
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.estimateBuildingGrade:'-'}}</view>
77
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.buildingGrade:'-'}}</view>
78
+            </view>
79
+            <view class="showIntegralModel__text" v-if="orderInfo.grade"
80
+              :class="{pd:orderInfo.grade?(orderInfo.grade.buildingDetails?true:false):false}">
81
+              {{orderInfo.grade.buildingDetails?'('+orderInfo.grade.buildingDetails+')':''}}
82
+            </view>
83
+          </view>
84
+          <view class="showIntegralModel__list">
85
+            <view class="showIntegralModel__T">
86
+              <view class="showIntegralModel__item">最终得分</view>
87
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.estimateGradeTotal:'-'}}</view>
88
+              <view class="showIntegralModel__item">{{orderInfo.grade?orderInfo.grade.gradeTotal:'-'}}</view>
89
+            </view>
90
+            <view class="showIntegralModel__text" v-if="orderInfo.grade"
91
+              :class="{pd:orderInfo.grade?(orderInfo.grade.totalDetails?true:false):false}">
92
+              {{orderInfo.grade.totalDetails?'('+orderInfo.grade.totalDetails+')':''}}
93
+            </view>
94
+          </view>
95
+        </scroll-view>
96
+      </view>
97
+      <view class="showIntegralModel__footer">
98
+        <view v-if="operate.know" class="showIntegralModel__know" @click="know" hover-class="seimin-btn-hover">
99
+          {{ operate.know || "" }}
100
+        </view>
101
+      </view>
102
+    </view>
103
+  </view>
104
+</template>
105
+
106
+<script>
107
+  import {
108
+    get
109
+  } from "../../http/http.js";
110
+  export default {
111
+    data() {
112
+      return {
113
+        orderInfo: {},
114
+        loading: false
115
+      };
116
+    },
117
+    props: {
118
+      // 显示隐藏
119
+      disjunctor: {
120
+        type: Boolean,
121
+        default: false,
122
+      },
123
+      // 工单ID
124
+      orderId: {
125
+        type: Number
126
+      },
127
+      // 时间戳
128
+      timestamp: {
129
+        type: Number
130
+      },
131
+      // 操作按钮文字
132
+      operate: {
133
+        type: Object,
134
+        default: () => {
135
+          return {
136
+            know: "知道了",
137
+          };
138
+        },
139
+      },
140
+    },
141
+    methods: {
142
+      // 知道了
143
+      know() {
144
+        this.$emit("know");
145
+      },
146
+      //获取积分详情项
147
+      getIntegralList() {
148
+        uni.showLoading({
149
+          title: '加载中',
150
+          mask: true
151
+        });
152
+        this.loading = true;
153
+        get('/api/fetchData/workOrder/' + this.orderId).then(res => {
154
+          uni.hideLoading();
155
+          this.loading = false;
156
+          if (res.status == 200) {
157
+            this.orderInfo = res.data;
158
+          }
159
+        })
160
+      }
161
+    },
162
+    watch: {
163
+      timestamp(newVal) {
164
+        this.getIntegralList();
165
+      }
166
+    },
167
+  };
168
+</script>
169
+
170
+<style lang="less">
171
+  .showIntegralModel {
172
+    position: fixed;
173
+    left: 0;
174
+    right: 0;
175
+    top: 0;
176
+    bottom: 0;
177
+    background-color: rgba(0, 0, 0, 0.2);
178
+    z-index: 999999;
179
+
180
+    .showIntegralModel__wrap {
181
+      width: 100vw;
182
+      height: 100vh;
183
+      position: absolute;
184
+      left: 50%;
185
+      top: 50%;
186
+      transform: translate(-50%, -50%);
187
+      background-color: #fff;
188
+      border-radius: 12rpx;
189
+
190
+      .showIntegralModel__header {
191
+        font-size: 36rpx;
192
+        color: #000;
193
+        height: 84rpx;
194
+        display: flex;
195
+        justify-content: center;
196
+        align-items: center;
197
+      }
198
+
199
+      .showIntegralModel__article {
200
+        overflow: hidden;
201
+        margin: 0 16rpx 16rpx;
202
+        height: calc(100% - 200rpx);
203
+        background-color: rgb(249, 250, 251);
204
+        border: 2rpx solid rgb(229, 233, 237);
205
+        border-radius: 12rpx;
206
+        box-sizing: border-box;
207
+
208
+        .showIntegralModel__cc {
209
+          height: calc(100vh - 274rpx);
210
+        }
211
+
212
+        .showIntegralModel__title,
213
+        .showIntegralModel__list {
214
+          border-bottom: 2rpx solid rgb(229, 233, 237);
215
+
216
+          .showIntegralModel__T {
217
+            display: flex;
218
+            height: 72rpx;
219
+
220
+            .showIntegralModel__item {
221
+              flex: 1;
222
+              display: flex;
223
+              justify-content: center;
224
+              align-items: center;
225
+            }
226
+          }
227
+
228
+          .showIntegralModel__text {
229
+            word-break: break-all;
230
+            text-align: center;
231
+            font-size: 28rpx;
232
+
233
+            &.pd {
234
+              padding-bottom: 16rpx;
235
+            }
236
+          }
237
+        }
238
+      }
239
+
240
+      .showIntegralModel__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
+
257
+        .showIntegralModel__know {
258
+          background-color: #fff;
259
+          flex: 1;
260
+          color: rgb(73, 184, 86);
261
+        }
262
+      }
263
+    }
264
+  }
265
+</style>

+ 317 - 0
components/showModel/showModel.vue

@@ -0,0 +1,317 @@
1
+<template>
2
+  <view class="showModel" v-show="disjunctor">
3
+    <view class="showModel__wrap">
4
+      <view class="showModel__header" v-if="title">
5
+        {{ title }}
6
+        <text v-if="operate.know == '知道了' && timerFlag">({{ time }})</text>
7
+      </view>
8
+      <view class="showModel__article" :class="{ p0: textareaFlag }">
9
+        <text
10
+          v-if="icon"
11
+          class="showModel__icon icon_transport"
12
+          :class="[
13
+            'showModel__icon--' + icon,
14
+            { 'transport-duigou': icon === 'success' },
15
+            { 'transport-shibai': icon === 'error' },
16
+            { 'transport-wenhao': icon === 'warn' },
17
+          ]"
18
+        ></text>
19
+        <view v-if="content" class="showModel__content" @click="tel()" v-html="content"></view>
20
+        <view v-if="info" class="showModel__info">{{ info }}</view>
21
+        <view class="specialCloseFlag" v-if="textareaFlag">
22
+          <textarea
23
+            style="width: 100%"
24
+            placeholder="请输入10~100个文字方可提交!"
25
+            maxlength="100"
26
+            @input="textareaInput"
27
+          />
28
+        </view>
29
+        <view class="radio-wrap" v-if="radioItem.length">
30
+          <radio-group @change="radioChange">
31
+            <view v-for="(item, index) in radioItem" :key="item.qrcode" class="radio-item">
32
+              <label>
33
+                <radio :value="item.qrcode" :checked="index === 0" />
34
+                <text>{{ item.deptName }}</text>
35
+              </label>
36
+            </view>
37
+          </radio-group>
38
+        </view>
39
+      </view>
40
+      <view class="showModel__footer">
41
+        <view
42
+          v-if="operate.ok"
43
+          class="showModel__ok"
44
+          @click="ok"
45
+          hover-class="seimin-btn-hover"
46
+          >{{ operate.ok || "" }}</view
47
+        >
48
+        <view
49
+          v-if="operate.cancel"
50
+          class="showModel__cancel"
51
+          @click="cancel"
52
+          hover-class="seimin-btn-hover"
53
+          >{{ operate.cancel || "" }}</view
54
+        >
55
+        <view
56
+          v-if="operate.know"
57
+          class="showModel__know"
58
+          @click="know"
59
+          hover-class="seimin-btn-hover"
60
+          >{{ operate.know || "" }}</view
61
+        >
62
+        <view
63
+          v-if="operate.know && timerFlag"
64
+          class="showModel__know"
65
+          @click="cancelTimer"
66
+          hover-class="seimin-btn-hover"
67
+          >取消自动关闭</view
68
+        >
69
+      </view>
70
+    </view>
71
+  </view>
72
+</template>
73
+
74
+<script>
75
+export default {
76
+  data() {
77
+    return {
78
+      time: 5, //5秒后自动关闭
79
+      timer: null, //5秒后自动关闭,定时器
80
+      timerFlag: true, //是否显示取消自动关闭按钮
81
+    };
82
+  },
83
+  watch: {
84
+    disjunctor(newValue) {
85
+      if (newValue && this.operate.know == "知道了") {
86
+        this.time = 5;
87
+        this.timer = setInterval(() => {
88
+          this.time--;
89
+          if (this.time <= 0) {
90
+            clearInterval(this.timer);
91
+            this.know();
92
+          }
93
+        }, 1000);
94
+      }
95
+    },
96
+  },
97
+  props: {
98
+    // 显示隐藏
99
+    disjunctor: {
100
+      type: Boolean,
101
+      default: false,
102
+    },
103
+    // 标题
104
+    title: {
105
+      type: String,
106
+      default: "提示",
107
+    },
108
+    // 图标
109
+    icon: {
110
+      type: String,
111
+      default: "success",
112
+    },
113
+    // 内容
114
+    content: {
115
+      type: String,
116
+      default: "",
117
+    },
118
+    // 说明
119
+    info: {
120
+      type: String,
121
+      default: "",
122
+    },
123
+    // 拨打电话
124
+    phone: {
125
+      type: String,
126
+      default: "",
127
+    },
128
+    // 特殊情况关闭原因
129
+    textareaFlag: {
130
+      type: Boolean,
131
+      default: false,
132
+    },
133
+    // 单选框选项
134
+    radioItem: {
135
+      type: Array,
136
+      default: () => {
137
+        return [];
138
+      },
139
+    },
140
+    // 操作按钮文字
141
+    operate: {
142
+      type: Object,
143
+      default: () => {
144
+        return {
145
+          know: "知道了",
146
+        };
147
+      },
148
+    },
149
+  },
150
+  methods: {
151
+    // 单选框选中
152
+    radioChange(item){
153
+      this.$emit('radioChange',item.target.value)
154
+    },
155
+    // 输入文字
156
+    textareaInput(e) {
157
+      this.$emit("textareaInput", e.detail.value);
158
+    },
159
+    // 确定
160
+    ok() {
161
+      this.$emit("ok");
162
+    },
163
+    // 取消
164
+    cancel() {
165
+      this.$emit("cancel");
166
+    },
167
+    // 知道了
168
+    know() {
169
+      clearInterval(this.timer);
170
+      this.$emit("know");
171
+    },
172
+    // 取消自动关闭
173
+    cancelTimer() {
174
+      this.timerFlag = false;
175
+      clearInterval(this.timer);
176
+    },
177
+    // 拨打电话
178
+    tel() {
179
+      if (this.phone) {
180
+        uni.makePhoneCall({
181
+          phoneNumber: this.phone,
182
+        });
183
+      }
184
+    },
185
+  },
186
+};
187
+</script>
188
+
189
+<style lang="less">
190
+.showModel {
191
+  position: fixed;
192
+  left: 0;
193
+  right: 0;
194
+  top: 0;
195
+  bottom: 0;
196
+  background-color: rgba(0, 0, 0, 0.2);
197
+  z-index: 999999;
198
+
199
+  .showModel__wrap {
200
+    width: 560rpx;
201
+    position: absolute;
202
+    left: 50%;
203
+    top: 50%;
204
+    transform: translate(-50%, -50%);
205
+    background-color: #fff;
206
+    border-radius: 12rpx;
207
+
208
+    .showModel__header {
209
+      font-size: 36rpx;
210
+      color: 000;
211
+      height: 84rpx;
212
+      display: flex;
213
+      justify-content: center;
214
+      align-items: center;
215
+    }
216
+
217
+    .showModel__article {
218
+      margin: 40rpx auto 25rpx;
219
+      width: 488rpx;
220
+      padding: 60rpx 0;
221
+      background-color: rgb(249, 250, 251);
222
+      border: 2rpx solid rgb(229, 233, 237);
223
+      border-radius: 12rpx;
224
+      box-sizing: border-box;
225
+      display: flex;
226
+      flex-direction: column;
227
+      justify-content: center;
228
+      align-items: center;
229
+      &.p0 {
230
+        padding: 0;
231
+      }
232
+
233
+      .showModel__icon {
234
+        font-size: 138rpx;
235
+        margin-bottom: 32rpx;
236
+
237
+        &.showModel__icon--success {
238
+          color: rgb(52, 179, 73);
239
+        }
240
+
241
+        &.showModel__icon--warn {
242
+          color: rgb(245, 165, 35);
243
+        }
244
+
245
+        &.showModel__icon--error {
246
+          color: rgb(255, 58, 82);
247
+        }
248
+      }
249
+
250
+      .showModel__content {
251
+        font-size: 36rpx;
252
+      }
253
+
254
+      .showModel__info {
255
+        font-size: 32rpx;
256
+        color: rgb(102, 102, 102);
257
+      }
258
+      .specialCloseFlag {
259
+        width: 90%;
260
+        height: 100%;
261
+        padding: 16rpx;
262
+      }
263
+      .radio-wrap{
264
+        .radio-item{
265
+          margin-top: 16rpx;
266
+          /deep/ .uni-radio-input-checked{
267
+            background-color: #49b856!important;
268
+            border-color: #49b856!important;
269
+          }
270
+        }
271
+      }
272
+    }
273
+
274
+    .showModel__footer {
275
+      box-sizing: border-box;
276
+      height: 100rpx;
277
+      border-top: 2rpx solid rgb(229, 233, 237);
278
+      display: flex;
279
+      align-items: center;
280
+
281
+      view {
282
+        height: 100%;
283
+        display: flex;
284
+        align-items: center;
285
+        justify-content: center;
286
+        font-size: 36rpx;
287
+        color: rgb(102, 102, 102);
288
+        position: relative;
289
+
290
+        &:nth-of-type(2)::before {
291
+          content: "";
292
+          position: absolute;
293
+          left: 0;
294
+          bottom: 0;
295
+          width: 2rpx;
296
+          height: 87rpx;
297
+          background-color: rgb(229, 233, 237);
298
+        }
299
+      }
300
+
301
+      .showModel__ok {
302
+        flex: 1;
303
+        color: rgb(73, 184, 86);
304
+      }
305
+
306
+      .showModel__cancel {
307
+        flex: 1;
308
+      }
309
+
310
+      .showModel__know {
311
+        flex: 1;
312
+        color: rgb(73, 184, 86);
313
+      }
314
+    }
315
+  }
316
+}
317
+</style>

+ 144 - 0
components/uni-drawer/uni-drawer.vue

@@ -0,0 +1,144 @@
1
+<template>
2
+	<view v-if="visibleSync" :class="{ 'uni-drawer--visible': showDrawer }" class="uni-drawer">
3
+		<view class="uni-drawer__mask" :class="{ 'uni-drawer__mask--visible': showDrawer && mask }" @tap="close" />
4
+		<view class="uni-drawer__content" :class="{'uni-drawer--right': rightMode,'uni-drawer--left': !rightMode, 'uni-drawer__content--visible': showDrawer}">
5
+			<slot />
6
+		</view>
7
+	</view>
8
+</template>
9
+
10
+<script>
11
+	export default {
12
+		name: 'UniDrawer',
13
+		props: {
14
+			/**
15
+			 * 显示状态
16
+			 */
17
+			visible: {
18
+				type: Boolean,
19
+				default: false
20
+			},
21
+			/**
22
+			 * 显示模式(左、右),只在初始化生效
23
+			 */
24
+			mode: {
25
+				type: String,
26
+				default: ''
27
+			},
28
+			/**
29
+			 * 蒙层显示状态
30
+			 */
31
+			mask: {
32
+				type: Boolean,
33
+				default: true
34
+			}
35
+		},
36
+		data() {
37
+			return {
38
+				visibleSync: false,
39
+				showDrawer: false,
40
+				rightMode: false,
41
+				watchTimer: null
42
+			}
43
+		},
44
+		watch: {
45
+			visible(val) {
46
+				if (val) {
47
+					this.open()
48
+				} else {
49
+					this.close()
50
+				}
51
+			}
52
+		},
53
+		created() {
54
+			this.visibleSync = this.visible
55
+			setTimeout(() => {
56
+				this.showDrawer = this.visible
57
+			}, 100)
58
+			this.rightMode = this.mode === 'right'
59
+		},
60
+		methods: {
61
+			close() {
62
+				this._change('showDrawer', 'visibleSync', false)
63
+			},
64
+			open() {
65
+				this._change('visibleSync', 'showDrawer', true)
66
+			},
67
+			_change(param1, param2, status) {
68
+				this[param1] = status
69
+				if (this.watchTimer) {
70
+					clearTimeout(this.watchTimer)
71
+				}
72
+				this.watchTimer = setTimeout(() => {
73
+					this[param2] = status
74
+					this.$emit(status ? 'open' : 'close')
75
+				}, status ? 50 : 300)
76
+			}
77
+		}
78
+	}
79
+</script>
80
+
81
+<style lang="scss" scoped>
82
+	// 抽屉宽度
83
+	$drawer-width: 220px;
84
+	.uni-drawer {
85
+		/* #ifndef APP-NVUE */
86
+		display: block;
87
+		/* #endif */
88
+		position: fixed;
89
+		top: 0;
90
+		left: 0;
91
+		right: 0;
92
+		bottom: 0;
93
+		overflow: hidden;
94
+		z-index: 999;
95
+	}
96
+
97
+	.uni-drawer__content {
98
+		/* #ifndef APP-NVUE */
99
+		display: block;
100
+		/* #endif */
101
+		position: absolute;
102
+		top: 0;
103
+		width: $drawer-width;
104
+		bottom: 0;
105
+		background-color: $uni-bg-color;
106
+		transition: transform 0.3s ease;
107
+	}
108
+
109
+	.uni-drawer--left {
110
+		left: 0;
111
+		transform: translateX(-$drawer-width);
112
+	}
113
+
114
+	.uni-drawer--right {
115
+		right: 0;
116
+		transform: translateX($drawer-width);
117
+	}
118
+
119
+	.uni-drawer__content--visible {
120
+		transform: translateX(0px);
121
+	}
122
+
123
+
124
+	.uni-drawer__mask {
125
+		/* #ifndef APP-NVUE */
126
+		display: block;
127
+		/* #endif */
128
+		opacity: 0;
129
+		position: absolute;
130
+		top: 0;
131
+		left: 0;
132
+		bottom: 0;
133
+		right: 0;
134
+		background-color: $uni-bg-color-mask;
135
+		transition: opacity 0.3s;
136
+	}
137
+
138
+	.uni-drawer__mask--visible {
139
+		/* #ifndef APP-NVUE */
140
+		display: block;
141
+		/* #endif */
142
+		opacity: 1;
143
+	}
144
+</style>

+ 433 - 0
components/uni-fab/uni-fab.vue

@@ -0,0 +1,433 @@
1
+<template>
2
+	<view>
3
+		<view v-if="popMenu && (leftBottom||rightBottom||leftTop||rightTop)" :class="{
4
+        'uni-fab--leftBottom': leftBottom,
5
+        'uni-fab--rightBottom': rightBottom,
6
+        'uni-fab--leftTop': leftTop,
7
+        'uni-fab--rightTop': rightTop
8
+      }"
9
+		 class="uni-fab">
10
+			<view :class="{
11
+          'uni-fab__content--left': horizontal === 'left',
12
+          'uni-fab__content--right': horizontal === 'right',
13
+          'uni-fab__content--flexDirection': direction === 'vertical',
14
+          'uni-fab__content--flexDirectionStart': flexDirectionStart,
15
+          'uni-fab__content--flexDirectionEnd': flexDirectionEnd,
16
+		  'uni-fab__content--other-platform': !isAndroidNvue
17
+        }"
18
+			 :style="{ width: boxWidth, height: boxHeight, backgroundColor: styles.backgroundColor }" class="uni-fab__content"
19
+			 elevation="5">
20
+				<view v-if="flexDirectionStart || horizontalLeft" class="uni-fab__item uni-fab__item--first" />
21
+				<view v-for="(item, index) in content" :key="index" :class="{ 'uni-fab__item--active': isShow }" class="uni-fab__item"
22
+				 @click="_onItemClick(index, item)">
23
+					<image :src="item.active ? item.selectedIconPath : item.iconPath" class="uni-fab__item-image" mode="widthFix" />
24
+					<text class="uni-fab__item-text" :style="{ color: item.active ? styles.selectedColor : styles.color }">{{ item.text }}</text>
25
+				</view>
26
+				<view v-if="flexDirectionEnd || horizontalRight" class="uni-fab__item uni-fab__item--first" />
27
+			</view>
28
+		</view>
29
+		<view :class="{
30
+		  'uni-fab__circle--leftBottom': leftBottom,
31
+		  'uni-fab__circle--rightBottom': rightBottom,
32
+		  'uni-fab__circle--leftTop': leftTop,
33
+		  'uni-fab__circle--rightTop': rightTop,
34
+		  'uni-fab__content--other-platform': !isAndroidNvue
35
+		}"
36
+		 class="uni-fab__circle uni-fab__plus" :style="{ 'background-color': styles.buttonColor }" @click="_onClick">
37
+			<view class="fab-circle-v" :class="{'uni-fab__plus--active': isShow}"></view>
38
+			<view class="fab-circle-h" :class="{'uni-fab__plus--active': isShow}"></view>
39
+		</view>
40
+	</view>
41
+</template>
42
+
43
+<script>
44
+	let platform = 'other'
45
+	// #ifdef APP-NVUE
46
+	platform = uni.getSystemInfoSync().platform
47
+	// #endif
48
+
49
+	/**
50
+	 * Fab 悬浮按钮
51
+	 * @description 点击可展开一个图形按钮菜单
52
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=144
53
+	 * @property {Object} pattern 可选样式配置项
54
+	 * @property {Object} horizontal = [left | right] 水平对齐方式
55
+	 * 	@value left 左对齐
56
+	 * 	@value right 右对齐
57
+	 * @property {Object} vertical = [bottom | top] 垂直对齐方式
58
+	 * 	@value bottom 下对齐
59
+	 * 	@value top 上对齐
60
+	 * @property {Object} direction = [horizontal | vertical] 展开菜单显示方式
61
+	 * 	@value horizontal 水平显示
62
+	 * 	@value vertical 垂直显示
63
+	 * @property {Array} content 展开菜单内容配置项
64
+	 * @property {Boolean} popMenu 是否使用弹出菜单
65
+	 * @event {Function} trigger 展开菜单点击事件,返回点击信息
66
+	 * @event {Function} fabClick 悬浮按钮点击事件
67
+	 */
68
+	export default {
69
+		name: 'UniFab',
70
+		props: {
71
+			pattern: {
72
+				type: Object,
73
+				default () {
74
+					return {}
75
+				}
76
+			},
77
+			horizontal: {
78
+				type: String,
79
+				default: 'left'
80
+			},
81
+			vertical: {
82
+				type: String,
83
+				default: 'bottom'
84
+			},
85
+			direction: {
86
+				type: String,
87
+				default: 'horizontal'
88
+			},
89
+			content: {
90
+				type: Array,
91
+				default () {
92
+					return []
93
+				}
94
+			},
95
+			show: {
96
+				type: Boolean,
97
+				default: false
98
+			},
99
+			popMenu: {
100
+				type: Boolean,
101
+				default: true
102
+			}
103
+		},
104
+		data() {
105
+			return {
106
+				fabShow: false,
107
+				isShow: false,
108
+				isAndroidNvue: platform === 'android',
109
+				styles: {
110
+					color: '#3c3e49',
111
+					selectedColor: '#007AFF',
112
+					backgroundColor: '#fff',
113
+					buttonColor: '#3c3e49'
114
+				}
115
+			}
116
+		},
117
+		computed: {
118
+			contentWidth(e) {
119
+				return (this.content.length + 1) * 55 + 10 + 'px'
120
+			},
121
+			contentWidthMin() {
122
+				return 55 + 'px'
123
+			},
124
+			// 动态计算宽度
125
+			boxWidth() {
126
+				return this.getPosition(3, 'horizontal')
127
+			},
128
+			// 动态计算高度
129
+			boxHeight() {
130
+				return this.getPosition(3, 'vertical')
131
+			},
132
+			// 计算左下位置
133
+			leftBottom() {
134
+				return this.getPosition(0, 'left', 'bottom')
135
+			},
136
+			// 计算右下位置
137
+			rightBottom() {
138
+				return this.getPosition(0, 'right', 'bottom')
139
+			},
140
+			// 计算左上位置
141
+			leftTop() {
142
+				return this.getPosition(0, 'left', 'top')
143
+			},
144
+			rightTop() {
145
+				return this.getPosition(0, 'right', 'top')
146
+			},
147
+			flexDirectionStart() {
148
+				return this.getPosition(1, 'vertical', 'top')
149
+			},
150
+			flexDirectionEnd() {
151
+				return this.getPosition(1, 'vertical', 'bottom')
152
+			},
153
+			horizontalLeft() {
154
+				return this.getPosition(2, 'horizontal', 'left')
155
+			},
156
+			horizontalRight() {
157
+				return this.getPosition(2, 'horizontal', 'right')
158
+			}
159
+		},
160
+		watch: {
161
+			pattern(newValue, oldValue) {
162
+				this.styles = Object.assign({}, this.styles, newValue)
163
+			}
164
+		},
165
+		created() {
166
+			this.isShow = this.show
167
+			if (this.top === 0) {
168
+				this.fabShow = true
169
+			}
170
+			// 初始化样式
171
+			this.styles = Object.assign({}, this.styles, this.pattern)
172
+		},
173
+		methods: {
174
+			_onClick() {
175
+				this.$emit('fabClick')
176
+				if (!this.popMenu) {
177
+					return
178
+				}
179
+				this.isShow = !this.isShow
180
+			},
181
+			open() {
182
+				this.isShow = true
183
+			},
184
+			close() {
185
+				this.isShow = false
186
+			},
187
+			/**
188
+			 * 按钮点击事件
189
+			 */
190
+			_onItemClick(index, item) {
191
+				this.$emit('trigger', {
192
+					index,
193
+					item
194
+				})
195
+			},
196
+			/**
197
+			 * 获取 位置信息
198
+			 */
199
+			getPosition(types, paramA, paramB) {
200
+				if (types === 0) {
201
+					return this.horizontal === paramA && this.vertical === paramB
202
+				} else if (types === 1) {
203
+					return this.direction === paramA && this.vertical === paramB
204
+				} else if (types === 2) {
205
+					return this.direction === paramA && this.horizontal === paramB
206
+				} else {
207
+					return this.isShow && this.direction === paramA ? this.contentWidth : this.contentWidthMin
208
+				}
209
+			}
210
+		}
211
+	}
212
+</script>
213
+
214
+<style lang="scss" scoped>
215
+	.uni-fab {
216
+		position: fixed;
217
+		/* #ifndef APP-NVUE */
218
+		display: flex;
219
+		/* #endif */
220
+		justify-content: center;
221
+		align-items: center;
222
+		z-index: 10;
223
+	}
224
+
225
+	.uni-fab--active {
226
+		opacity: 1;
227
+	}
228
+
229
+	.uni-fab--leftBottom {
230
+		left: 5px;
231
+		bottom: 40px;
232
+		/* #ifdef H5 */
233
+		bottom: calc(40px + var(--window-bottom));
234
+		/* #endif */
235
+		padding: 10px;
236
+	}
237
+
238
+	.uni-fab--leftTop {
239
+		left: 5px;
240
+		top: 30px;
241
+		/* #ifdef H5 */
242
+		top: calc(30px + var(--window-top));
243
+		/* #endif */
244
+		padding: 10px;
245
+	}
246
+
247
+	.uni-fab--rightBottom {
248
+		right: 5px;
249
+		bottom: 20px;
250
+		/* #ifdef H5 */
251
+		bottom: calc(20px + var(--window-bottom));
252
+		/* #endif */
253
+		padding: 10px;
254
+	}
255
+
256
+	.uni-fab--rightTop {
257
+		right: 5px;
258
+		top: 30px;
259
+		/* #ifdef H5 */
260
+		top: calc(30px + var(--window-top));
261
+		/* #endif */
262
+		padding: 10px;
263
+	}
264
+
265
+	.uni-fab__circle {
266
+		position: fixed;
267
+		/* #ifndef APP-NVUE */
268
+		display: flex;
269
+		/* #endif */
270
+		justify-content: center;
271
+		align-items: center;
272
+		width: 55px;
273
+		height: 55px;
274
+		background-color: #3c3e49;
275
+		border-radius: 55px;
276
+		z-index: 11;
277
+	}
278
+
279
+	.uni-fab__circle--leftBottom {
280
+		left: 15px;
281
+		bottom: 50px;
282
+		/* #ifdef H5 */
283
+		bottom: calc(50px + var(--window-bottom));
284
+		/* #endif */
285
+	}
286
+
287
+	.uni-fab__circle--leftTop {
288
+		left: 15px;
289
+		top: 40px;
290
+		/* #ifdef H5 */
291
+		top: calc(40px + var(--window-top));
292
+		/* #endif */
293
+	}
294
+
295
+	.uni-fab__circle--rightBottom {
296
+		right: 15px;
297
+		bottom: 30px;
298
+		/* #ifdef H5 */
299
+		bottom: calc(30px + var(--window-bottom));
300
+		/* #endif */
301
+	}
302
+
303
+	.uni-fab__circle--rightTop {
304
+		right: 15px;
305
+		top: 40px;
306
+		/* #ifdef H5 */
307
+		top: calc(40px + var(--window-top));
308
+		/* #endif */
309
+	}
310
+
311
+	.uni-fab__circle--left {
312
+		left: 0;
313
+	}
314
+
315
+	.uni-fab__circle--right {
316
+		right: 0;
317
+	}
318
+
319
+	.uni-fab__circle--top {
320
+		top: 0;
321
+	}
322
+
323
+	.uni-fab__circle--bottom {
324
+		bottom: 0;
325
+	}
326
+
327
+	.uni-fab__plus {
328
+		font-weight: bold;
329
+	}
330
+
331
+	.fab-circle-v {
332
+		position: absolute;
333
+		width: 3px;
334
+		height: 31px;
335
+		left: 26px;
336
+		top: 12px;
337
+		background-color: white;
338
+		transform: rotate(0deg);
339
+		transition: transform 0.3s;
340
+	}
341
+
342
+	.fab-circle-h {
343
+		position: absolute;
344
+		width: 31px;
345
+		height: 3px;
346
+		left: 12px;
347
+		top: 26px;
348
+		background-color: white;
349
+		transform: rotate(0deg);
350
+		transition: transform 0.3s;
351
+	}
352
+
353
+	.uni-fab__plus--active {
354
+		transform: rotate(135deg);
355
+	}
356
+
357
+	.uni-fab__content {
358
+		/* #ifndef APP-NVUE */
359
+		box-sizing: border-box;
360
+		display: flex;
361
+		/* #endif */
362
+		flex-direction: row;
363
+		border-radius: 55px;
364
+		overflow: hidden;
365
+		transition-property: width, height;
366
+		transition-duration: 0.2s;
367
+		width: 55px;
368
+		border-color: #DDDDDD;
369
+		border-width: 1rpx;
370
+		border-style: solid;
371
+	}
372
+
373
+	.uni-fab__content--other-platform {
374
+		border-width: 0px;
375
+		box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.2);
376
+	}
377
+
378
+	.uni-fab__content--left {
379
+		justify-content: flex-start;
380
+	}
381
+
382
+	.uni-fab__content--right {
383
+		justify-content: flex-end;
384
+	}
385
+
386
+	.uni-fab__content--flexDirection {
387
+		flex-direction: column;
388
+		justify-content: flex-end;
389
+	}
390
+
391
+	.uni-fab__content--flexDirectionStart {
392
+		flex-direction: column;
393
+		justify-content: flex-start;
394
+	}
395
+
396
+	.uni-fab__content--flexDirectionEnd {
397
+		flex-direction: column;
398
+		justify-content: flex-end;
399
+	}
400
+
401
+	.uni-fab__item {
402
+		/* #ifndef APP-NVUE */
403
+		display: flex;
404
+		/* #endif */
405
+		flex-direction: column;
406
+		justify-content: center;
407
+		align-items: center;
408
+		width: 55px;
409
+		height: 55px;
410
+		opacity: 0;
411
+		transition: opacity 0.2s;
412
+	}
413
+
414
+	.uni-fab__item--active {
415
+		opacity: 1;
416
+	}
417
+
418
+	.uni-fab__item-image {
419
+		width: 25px;
420
+		height: 25px;
421
+		margin-bottom: 3px;
422
+	}
423
+
424
+	.uni-fab__item-text {
425
+		color: #FFFFFF;
426
+		font-size: 12px;
427
+    text-align: center;
428
+	}
429
+
430
+	.uni-fab__item--first {
431
+		width: 55px;
432
+	}
433
+</style>

+ 259 - 0
http/http.js

@@ -0,0 +1,259 @@
1
+// #ifdef H5
2
+import wx from 'weixin-jsapi'
3
+// #endif
4
+let path = "";
5
+let appIp = "";
6
+// #ifdef H5
7
+let domainName = location.host; //域名+端口
8
+let protocolName = document.location.protocol; //http协议
9
+let wsName = protocolName === 'http:' ? 'ws' : 'wss'; //ws协议
10
+path = `${protocolName}//${domainName}/service`
11
+// #endif
12
+uni.setStorageSync('path', path);
13
+
14
+// get方法
15
+export function get(url, data = {}) {
16
+  url = path + url;
17
+  return new Promise((resolve, reject) => {
18
+    uni.request({
19
+      url,
20
+      data,
21
+      header: {
22
+        'Cache-Control': 'no-cache'
23
+      },
24
+      success(res) {
25
+        resolve(res.data);
26
+      },
27
+      fail(err) {
28
+        uni.showToast({
29
+          icon: 'none',
30
+          title: '请求数据失败!'
31
+        });
32
+      }
33
+    })
34
+  });
35
+}
36
+// post方法
37
+export function post(url, data = {}) {
38
+  url = path + url;
39
+  return new Promise((resolve, reject) => {
40
+    uni.request({
41
+      method: 'POST',
42
+      url,
43
+      data,
44
+      header: {
45
+        'Cache-Control': 'no-cache'
46
+      },
47
+      success(res) {
48
+        resolve(res.data);
49
+      },
50
+      fail(err) {
51
+        uni.showToast({
52
+          icon: 'none',
53
+          title: '请求数据失败!'
54
+        });
55
+      }
56
+    })
57
+  });
58
+}
59
+// delete方法
60
+export function deleteIt(url, data = {}) {
61
+  url = path + url;
62
+  return new Promise((resolve, reject) => {
63
+    uni.request({
64
+      method: 'DELETE',
65
+      url,
66
+      data,
67
+      header: {
68
+        'Cache-Control': 'no-cache'
69
+      },
70
+      success(res) {
71
+        resolve(res.data);
72
+      },
73
+      fail(err) {
74
+        uni.showToast({
75
+          icon: 'none',
76
+          title: '请求数据失败!'
77
+        });
78
+      }
79
+    })
80
+  });
81
+}
82
+// 扫一扫
83
+export function SM() {
84
+  // #ifndef H5
85
+  return new Promise((resolve, reject) => {
86
+    uni.scanCode({
87
+      onlyFromCamera: true,
88
+      success: function(res) {
89
+        let str = res.result.replace(/[\s\/]/g, '') || 'none'
90
+        resolve(str);
91
+      },
92
+      fail(err) {
93
+        console.error(err)
94
+      }
95
+    });
96
+  });
97
+  // #endif
98
+  // #ifdef H5
99
+  return new Promise((resolve, reject) => {
100
+    let param = {
101
+      requestUrl: location.href.split('#')[0]
102
+    };
103
+    post("/wechat/getJsConfig", param).then(res => {
104
+      if (res) {
105
+        wx.config({
106
+          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
107
+          appId: res.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
108
+          timestamp: res.timestamp, // 必填,生成签名的时间戳
109
+          nonceStr: res.nonceStr, // 必填,生成签名的随机串
110
+          signature: res.signature, // 必填,签名,见附录1
111
+          jsApiList: res.jsApiList // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
112
+        });
113
+        wx.ready(function() {
114
+          wx.scanQRCode({
115
+            desc: "scanQRCode desc",
116
+            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
117
+            scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
118
+            success: function(res) {
119
+              // 当needResult 为 1 时,扫码返回的结果
120
+              let str = res.resultStr.replace(/[\s\/]/g, '') || 'none';
121
+              resolve(str);
122
+            }
123
+          });
124
+        });
125
+      }
126
+    })
127
+  });
128
+  // #endif
129
+}
130
+// 修改接口域名
131
+export function changeIP(ip) {
132
+  console.log(ip)
133
+  path = `${ip}/service`;
134
+  appIp = ip;
135
+  uni.setStorageSync('path', path);
136
+}
137
+// 建立websocket
138
+export function webHandle(cate, type, ipe) {
139
+  // uni.closeSocket();
140
+  // 屏蔽语音播报
141
+  if (cate !== 'no') {
142
+    uni.navigateTo({
143
+      url: `../${cate}/${cate}`
144
+    })
145
+  }
146
+  return;
147
+  // 屏蔽语音播报
148
+  if (getApp().$ws) {
149
+    return;
150
+  }
151
+  console.log(getApp().$ws)
152
+  let clientid, ip, wws;
153
+  if (type === 'app') {
154
+    clientid = uni.getStorageSync('clientid'); //获取cid
155
+    ipe = ipe || appIp;
156
+    ip = ipe.split(':')[1]; //过滤掉端口
157
+    wws = ipe.split(':')[0] == 'http' ? 'ws' : 'wss';
158
+  } else if (type === 'wx') {
159
+    ip = document.domain; //过滤掉端口
160
+    // ip = '192.168.3.108'; //过滤掉端口
161
+    console.log(ip)
162
+    wws = wsName;
163
+  }
164
+  console.log(getApp())
165
+  getApp().$ws = uni.connectSocket({
166
+    url: `${wws}://${ip}:8080/webSocket/message/app`,
167
+    header: {
168
+      'content-type': 'application/json'
169
+    },
170
+    success(result) {
171
+      console.log(result);
172
+      // 监听WebSocket连接打开事件
173
+      uni.onSocketOpen(res1 => {
174
+        console.log(res1, 'websocket连接成功');
175
+        // 通过 WebSocket 连接发送数据
176
+        let obj = {};
177
+        if (type === 'app') {
178
+          obj = {
179
+            userCount: uni.getStorageSync('userData').user.id,
180
+            clientId: clientid
181
+          };
182
+        } else if (type === 'wx') {
183
+          obj = {
184
+            userCount: uni.getStorageSync('userData').user.id
185
+          };
186
+        }
187
+        console.log(JSON.stringify(obj))
188
+        uni.sendSocketMessage({
189
+          data: JSON.stringify(obj),
190
+          success(res2) {
191
+            console.log(res2)
192
+          }
193
+        });
194
+        // 监听WebSocket接受到服务器的消息事件
195
+        uni.onSocketMessage(res3 => {
196
+          console.log('收到服务器内容:' + res3.data);
197
+          // 连接成功后跳转到待接单列表baba
198
+          if (res3.data !== 'X') {
199
+            let objData = JSON.parse(res3.data);
200
+            if (objData.status == 200) {
201
+              if (cate !== 'no') {
202
+                uni.navigateTo({
203
+                  url: `../${cate}/${cate}`
204
+                })
205
+              }
206
+            } else {
207
+              // 播报 start
208
+              let msg = objData.content;
209
+              msg = msg.replace(/【[0-9]*】/g, function(word) {
210
+                return word.substring(0, 2) + ' ' + word.substring(2);
211
+              });
212
+              console.log(getApp().audios)
213
+              getApp().audios = getApp().audios || [];
214
+              getApp().audios.push(msg);
215
+              if (getApp().audios.length === 1) {
216
+                startAudio();
217
+              }
218
+              // 播报 end
219
+            }
220
+          }
221
+        });
222
+      });
223
+      uni.onSocketClose(function() {
224
+        console.log('WebSocket 已关闭!');
225
+      });
226
+    }
227
+  })
228
+}
229
+// 语音播放
230
+function startAudio() {
231
+  let arr = getApp().audios;
232
+  console.log(arr);
233
+  if (arr.length === 0) {
234
+    return;
235
+  } else {
236
+    const innerAudioContext = uni.createInnerAudioContext();
237
+    innerAudioContext.autoplay = true;
238
+    innerAudioContext.src = 'http://fanyi.baidu.com/gettts?lan=zh&text=' + arr[0] +
239
+      '&spd=5&source=web';
240
+    innerAudioContext.onEnded(() => {
241
+      arr.shift();
242
+      startAudio();
243
+    })
244
+  }
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+  // innerAudioContext.src = 'http://192.168.3.108/tts1.mp3';
253
+  // uni.request({
254
+  //     url: 'http://fanyi.baidu.com/gettts?lan=zh&text=这是一个测试&spd=5&source=web',
255
+  //     success: (res) => {
256
+  //         console.log(res.data);
257
+  //     }
258
+  // });
259
+}

+ 165 - 0
js_sdk/u-charts/u-charts/component.vue

@@ -0,0 +1,165 @@
1
+<template>
2
+	<canvas v-if="canvasId" :id="canvasId" :canvasId="canvasId" :style="{'width':cWidth*pixelRatio+'px','height':cHeight*pixelRatio+'px', 'transform': 'scale('+(1/pixelRatio)+')','margin-left':-cWidth*(pixelRatio-1)/2+'px','margin-top':-cHeight*(pixelRatio-1)/2+'px'}"
3
+	 @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd" @error="error">
4
+	</canvas>
5
+</template>
6
+
7
+<script>
8
+	import uCharts from './u-charts.js';
9
+	var canvases = {};
10
+	
11
+	export default {
12
+		props: {
13
+			chartType: {
14
+				required: true,
15
+				type: String,
16
+				default: 'column'
17
+			},
18
+			opts: {
19
+				required: true,
20
+				type: Object,
21
+				default () {
22
+					return null;
23
+				},
24
+			},
25
+			canvasId: {
26
+				type: String,
27
+				default: 'u-canvas',
28
+			},
29
+			cWidth: {
30
+				default: 375,
31
+			},
32
+			cHeight: {
33
+				default: 250,
34
+			},
35
+			pixelRatio: {
36
+				type: Number,
37
+				default: 1,
38
+			},
39
+		},
40
+		mounted() {
41
+			this.init();
42
+		},
43
+		methods: {
44
+			init() {
45
+				switch (this.chartType) {
46
+					case 'column':
47
+						this.initColumnChart();
48
+						break;
49
+					case 'line':
50
+						this.initLineChart();
51
+						break;
52
+					default:
53
+						break;
54
+				}
55
+			},
56
+			initColumnChart() {
57
+				canvases[this.canvasId] = new uCharts({
58
+					$this: this,
59
+					canvasId: this.canvasId,
60
+					type: 'column',
61
+					legend: true,
62
+					fontSize: 11,
63
+					background: '#FFFFFF',
64
+					pixelRatio: this.pixelRatio,
65
+					animation: true,
66
+					categories: this.opts.categories,
67
+					series: this.opts.series,
68
+					enableScroll: true,
69
+					xAxis: {
70
+						disableGrid: true,
71
+						itemCount: 4,
72
+						scrollShow: true
73
+					},
74
+					yAxis: {
75
+						//disabled:true
76
+					},
77
+					dataLabel: true,
78
+					width: this.cWidth * this.pixelRatio,
79
+					height: this.cHeight * this.pixelRatio,
80
+					extra: {
81
+						column: {
82
+							type: 'group',
83
+						}
84
+					}
85
+				});
86
+			},
87
+			initLineChart() {
88
+				canvases[this.canvasId] = new uCharts({
89
+					$this: this,
90
+					canvasId: this.canvasId,
91
+					type: 'line',
92
+					fontSize: 11,
93
+					legend: true,
94
+					dataLabel: false,
95
+					dataPointShape: true,
96
+					background: '#FFFFFF',
97
+					pixelRatio: this.pixelRatio,
98
+					categories: this.opts.categories,
99
+					series: this.opts.series,
100
+					animation: true,
101
+					enableScroll: true,
102
+					xAxis: {
103
+						type: 'grid',
104
+						gridColor: '#CCCCCC',
105
+						gridType: 'dash',
106
+						dashLength: 8,
107
+						itemCount: 4,
108
+						scrollShow: true
109
+					},
110
+					yAxis: {
111
+						gridType: 'dash',
112
+						gridColor: '#CCCCCC',
113
+						dashLength: 8,
114
+						splitNumber: 5,
115
+						min: 10,
116
+						max: 180,
117
+						format: (val) => {
118
+							return val.toFixed(0) + '元'
119
+						}
120
+					},
121
+					width: this.cWidth * this.pixelRatio,
122
+					height: this.cHeight * this.pixelRatio,
123
+					extra: {
124
+						line: {
125
+							type: 'straight'
126
+						}
127
+					}
128
+				});
129
+			},
130
+			// 这里仅作为示例传入两个参数,cid为canvas-id,newdata为更新的数据,需要更多参数请自行修改
131
+			changeData(cid,newdata) {
132
+				canvases[cid].updateData({
133
+					series: newdata.series,
134
+					categories: newdata.categories
135
+				});
136
+			},
137
+			touchStart(e) {
138
+				canvases[this.canvasId].showToolTip(e, {
139
+					format: function(item, category) {
140
+						return category + ' ' + item.name + ':' + item.data
141
+					}
142
+				});
143
+				canvases[this.canvasId].scrollStart(e);
144
+			},
145
+			touchMove(e) {
146
+				canvases[this.canvasId].scroll(e);
147
+			},
148
+			touchEnd(e) {
149
+				canvases[this.canvasId].scrollEnd(e);
150
+			},
151
+			error(e) {
152
+				console.log(e)
153
+			}
154
+		},
155
+	};
156
+</script>
157
+
158
+<style scoped>
159
+	.charts {
160
+		width: 100%;
161
+		height: 100%;
162
+		flex: 1;
163
+		background-color: #FFFFFF;
164
+	}
165
+</style>

File diff suppressed because it is too large
+ 5658 - 0
js_sdk/u-charts/u-charts/u-charts.js


File diff suppressed because it is too large
+ 1 - 0
js_sdk/u-charts/u-charts/u-charts.min.js


+ 45 - 0
main.js

@@ -0,0 +1,45 @@
1
+import Vue from 'vue'
2
+import App from './App'
3
+// #ifdef H5
4
+import wx from 'weixin-jsapi'
5
+import VConsole from 'vconsole'
6
+// new VConsole();
7
+
8
+Vue.prototype.wx = wx //声明扫码
9
+Vue.prototype.audios = [] //待播放的语音集合
10
+// #endif
11
+// #ifdef APP-PLUS
12
+Vue.prototype.$ws = null//websocket
13
+// #endif
14
+Vue.config.productionTip = false
15
+Date.prototype.Format = function (fmt) {
16
+    var o = {
17
+        "M+": this.getMonth() + 1, //月份
18
+        "d+": this.getDate(), //日
19
+        "h+": this.getHours(), //小时
20
+        "m+": this.getMinutes(), //分
21
+        "s+": this.getSeconds(), //秒
22
+        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
23
+        S: this.getMilliseconds(), //毫秒
24
+    };
25
+    if (/(y+)/.test(fmt))
26
+        fmt = fmt.replace(
27
+            RegExp.$1,
28
+            (this.getFullYear() + "").substr(4 - RegExp.$1.length)
29
+        );
30
+    for (var k in o)
31
+        if (new RegExp("(" + k + ")").test(fmt))
32
+            fmt = fmt.replace(
33
+                RegExp.$1,
34
+                RegExp.$1.length == 1
35
+                    ? o[k]
36
+                    : ("00" + o[k]).substr(("" + o[k]).length)
37
+            );
38
+    return fmt;
39
+};
40
+App.mpType = 'app'
41
+
42
+const app = new Vue({
43
+    ...App
44
+})
45
+app.$mount()

+ 81 - 0
manifest.json

@@ -0,0 +1,81 @@
1
+{
2
+    "name" : "大势医院转运",
3
+    "appid" : "__UNI__9F2011E",
4
+    "description" : "",
5
+    "versionName" : "1.0.0",
6
+    "versionCode" : "100",
7
+    "transformPx" : false,
8
+    /* 5+App特有相关 */
9
+    "app-plus" : {
10
+        "usingComponents" : true,
11
+        "nvueCompiler" : "uni-app",
12
+        "compilerVersion" : 3,
13
+        "splashscreen" : {
14
+            "alwaysShowBeforeRender" : true,
15
+            "waiting" : true,
16
+            "autoclose" : true,
17
+            "delay" : 0
18
+        },
19
+        /* 模块配置 */
20
+        "modules" : {
21
+            "Push" : {}
22
+        },
23
+        /* 应用发布信息 */
24
+        "distribute" : {
25
+            /* android打包配置 */
26
+            "android" : {
27
+                "permissions" : [
28
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
29
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>"
30
+                ],
31
+                "autoSdkPermissions" : false
32
+            },
33
+            /* ios打包配置 */
34
+            "ios" : {},
35
+            /* SDK配置 */
36
+            "sdkConfigs" : {
37
+                "ad" : {},
38
+                "push" : {
39
+                    "unipush" : {}
40
+                }
41
+            },
42
+            "splashscreen" : {
43
+                "androidStyle" : "common"
44
+            }
45
+        }
46
+    },
47
+    /* 快应用特有相关 */
48
+    "quickapp" : {},
49
+    /* 小程序特有相关 */
50
+    "mp-weixin" : {
51
+        "appid" : "",
52
+        "setting" : {
53
+            "urlCheck" : false
54
+        },
55
+        "usingComponents" : true
56
+    },
57
+    "mp-alipay" : {
58
+        "usingComponents" : true
59
+    },
60
+    "mp-baidu" : {
61
+        "usingComponents" : true
62
+    },
63
+    "mp-toutiao" : {
64
+        "usingComponents" : true
65
+    },
66
+    "uniStatistics" : {
67
+        "enable" : false
68
+    },
69
+    "h5" : {
70
+        "title" : "大势医院转运",
71
+        "domain" : "",
72
+        "router" : {
73
+            "base" : "/app/"
74
+        },
75
+        "optimization" : {
76
+            "treeShaking" : {
77
+                "enable" : true
78
+            }
79
+        }
80
+    }
81
+}

+ 18 - 0
package-lock.json

@@ -0,0 +1,18 @@
1
+{
2
+  "name": "HSMSV1-app",
3
+  "version": "1.0.0",
4
+  "lockfileVersion": 1,
5
+  "requires": true,
6
+  "dependencies": {
7
+    "vconsole": {
8
+      "version": "3.3.4",
9
+      "resolved": "https://registry.npm.taobao.org/vconsole/download/vconsole-3.3.4.tgz",
10
+      "integrity": "sha1-p9rNiIez0+kC6NGEJc2lbDTnf1E="
11
+    },
12
+    "weixin-jsapi": {
13
+      "version": "1.1.0",
14
+      "resolved": "https://registry.npm.taobao.org/weixin-jsapi/download/weixin-jsapi-1.1.0.tgz",
15
+      "integrity": "sha1-UalaIiTFnR2PAv3bxt5S2hazRLM="
16
+    }
17
+  }
18
+}

+ 20 - 0
package.json

@@ -0,0 +1,20 @@
1
+{
2
+  "name": "HSMSV1-app",
3
+  "version": "1.0.0",
4
+  "description": "",
5
+  "main": "main.js",
6
+  "scripts": {
7
+    "test": "echo \"Error: no test specified\" && exit 1"
8
+  },
9
+  "repository": {
10
+    "type": "git",
11
+    "url": "http://git.dashitech.com/wangyaxiang/HSMSV1-app.git"
12
+  },
13
+  "keywords": [],
14
+  "author": "",
15
+  "license": "ISC",
16
+  "dependencies": {
17
+    "vconsole": "^3.3.4",
18
+    "weixin-jsapi": "^1.1.0"
19
+  }
20
+}

+ 187 - 0
pages.json

@@ -0,0 +1,187 @@
1
+{
2
+  "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
3
+    {
4
+      "path": "pages/homePage/homePage", //上班和登录页面
5
+      "style": {
6
+        "h5": {
7
+          "titleNView": false
8
+        }
9
+      }
10
+    }, {
11
+      "path": "pages/setDept/setDept", //设置科室界面
12
+      "style": {
13
+        "h5": {
14
+          "titleNView": false
15
+        }
16
+      }
17
+    }, {
18
+      "path": "pages/receiptpage/receiptpage", //列表
19
+      "style": {
20
+        "h5": {
21
+          "titleNView": false
22
+        }
23
+      }
24
+    }, {
25
+      "path": "pages/receipt_infopage/receipt_infopage", //列表详情
26
+      "style": {
27
+        "h5": {
28
+          "titleNView": false
29
+        }
30
+      }
31
+    }, {
32
+      "path": "pages/scanning_code/scanning_code",
33
+      "style": {
34
+        "h5": {
35
+          "titleNView": false
36
+        }
37
+      }
38
+    }, {
39
+      "path": "pages/scanning_Result/scanning_Result", //大扫描结果->错误
40
+      "style": {
41
+        "h5": {
42
+          "titleNView": false
43
+        }
44
+      }
45
+    }, {
46
+      "path": "pages/scanning_B/scanning_B", //大扫描->标本结果->正确,错误
47
+      "style": {
48
+        "h5": {
49
+          "titleNView": false
50
+        }
51
+      }
52
+    }, {
53
+      "path": "pages/scanning_ins/scanning_ins", //大扫描->患者(陪检,转运)
54
+      "style": {
55
+        "h5": {
56
+          "titleNView": false
57
+        }
58
+      }
59
+    }, {
60
+      "path": "pages/shortcutbuildOrders/shortcutbuildOrders",
61
+      "style": {
62
+        "h5": {
63
+          "titleNView": false
64
+        }
65
+      }
66
+    }, {
67
+      "path": "pages/scanning_all/scanning_all", //大扫描->科室->正确
68
+      "style": {
69
+        "h5": {
70
+          "titleNView": false
71
+        }
72
+      }
73
+    }, {
74
+      "path": "pages/scanning_djInfo/scanning_djInfo",
75
+      "style": {
76
+        "h5": {
77
+          "titleNView": false
78
+        }
79
+      }
80
+    }, {
81
+      "path": "pages/scanning_djEnd/scanning_djEnd",
82
+      "style": {
83
+        "h5": {
84
+          "titleNView": false
85
+        }
86
+      }
87
+    }, {
88
+      "path": "pages/scanning/scanning",
89
+      "style": {
90
+        "h5": {
91
+          "titleNView": false
92
+        }
93
+      }
94
+    }, {
95
+      "path": "pages/scanning_orderSign/scanning_orderSign",
96
+      "style": {
97
+        "h5": {
98
+          "titleNView": false
99
+        }
100
+      }
101
+    }, {
102
+      "path": "pages/scanning_insEnd/scanning_insEnd",
103
+      "style": {
104
+        "h5": {
105
+          "titleNView": false
106
+        }
107
+      }
108
+    }, {
109
+      "path": "pages/my_list/my_list", //我的页面列表
110
+      "style": {
111
+        "h5": {
112
+          "titleNView": false
113
+        }
114
+      }
115
+    }, {
116
+      "path": "pages/mypage/mypage", //我的页面
117
+      "style": {
118
+        "h5": {
119
+          "titleNView": false
120
+        }
121
+      }
122
+    }, {
123
+      "path": "pages/pharmacy/pharmacy",
124
+      "style": {
125
+        "h5": {
126
+          "titleNView": false
127
+        }
128
+      }
129
+    }, {
130
+      "path": "pages/patientInformationList/patientInformationList", //患者信息列表
131
+      "style": {
132
+        "h5": {
133
+          "titleNView": false
134
+        }
135
+      }
136
+    }, {
137
+      "path": "pages/patientInformationInfo/patientInformationInfo", //患者信息详情
138
+      "style": {
139
+        "h5": {
140
+          "titleNView": false
141
+        }
142
+      }
143
+    }, {
144
+      "path": "pages/inspectList/inspectList", //检查信息列表
145
+      "style": {
146
+        "h5": {
147
+          "titleNView": false
148
+        }
149
+      }
150
+    }, {
151
+      "path": "pages/search/search", //搜索
152
+      "style": {
153
+        "h5": {
154
+          "titleNView": false
155
+        }
156
+      }
157
+    }, {
158
+      "path": "pages/pharmacyDetails/pharmacyDetails",
159
+      "style": {
160
+        "h5": {
161
+          "titleNView": false
162
+        }
163
+      }
164
+    }, {
165
+      "path": "pages/settingCode/settingCode",
166
+      "style": {
167
+        "h5": {
168
+          "titleNView": false
169
+        }
170
+      }
171
+
172
+    }, {
173
+      "path": "components/footTool/footTool",
174
+      "style": {
175
+        "navigationBarTitleText": "",
176
+        "enablePullDownRefresh": false
177
+      }
178
+
179
+    }
180
+  ],
181
+  "globalStyle": {
182
+    "navigationBarTextStyle": "black",
183
+    "navigationBarTitleText": "大势恒通转运系统",
184
+    "navigationBarBackgroundColor": "#F8F8F8",
185
+    "backgroundColor": "#F8F8F8"
186
+  }
187
+}

File diff suppressed because it is too large
+ 1008 - 0
pages/homePage/homePage.vue


+ 734 - 0
pages/inspectList/inspectList.vue

@@ -0,0 +1,734 @@
1
+<template>
2
+  <view class="inspectList">
3
+    <view class="page_tab">
4
+      <view class="page_tab_bar active">
5
+        <view class="tab_dept">
6
+          <text @click="changeDept">{{ currenDept.dept}}</text>
7
+          <!-- <button type="default" size="mini" class="changeDept" @click="changeDept">
8
+            切换科室
9
+          </button> -->
10
+          <!-- <button class="changeDept moreFilter" type="default" size="mini" @click="moreFilter()">
11
+            更多筛选
12
+          </button> -->
13
+          <button class="changeDept" type="default" size="mini" @click="moreFilter()">
14
+            更多筛选
15
+          </button>
16
+        </view>
17
+      </view>
18
+    </view>
19
+    <view v-if="zxzData.length == 0" class="zwsj">
20
+      <image class="zwsj-img" mode="widthFix" src="../../static/img/zanwushuju.png"></image>
21
+      <view class="zwsj-txt">暂无数据</view>
22
+    </view>
23
+    <view v-if="zxzData.length" class="page_items">
24
+      <scroll-view class="page_items_scroll" scroll-y :refresher-enabled="scroll_refresher_enabled"
25
+        :refresher-triggered="triggered" @refresherrefresh="refresherrefresh" @refresherrestore="refresherrestore"
26
+        @scrolltolower="scrolltolower" :scroll-top="scroll_top" @refresherabort="refresherabort" @scroll="scroll"
27
+        refresher-background="transport">
28
+        <view class="page_item_wrap" v-for="(item, index) of zxzData" :key="index">
29
+          <view class="page_item">
30
+            <view class="L"></view>
31
+            <view class="R"></view>
32
+            <view class="page_item_top">
33
+              <view class="page_item_top_L">
34
+                <template v-if="item.illnessState">
35
+                  <text v-if="item.illnessState.value === '2'"
36
+                    class="colorRed icon_transport transport-tubiao_wei"></text>
37
+                  <text v-if="item.illnessState.value === '3'" class="colorRed icon_transport transport-zhong"></text>
38
+                </template>
39
+                <template v-if="item.careLevel">
40
+                  <text v-if="item.careLevel.value === '0'" class="icon_transport transport-te1"></text>
41
+                  <text v-if="item.careLevel.value === '1'" class="icon_transport transport-1_round_solid"></text>
42
+                  <text v-if="item.careLevel.value === '2'" class="icon_transport transport-2_round_solid"></text>
43
+                  <text v-if="item.careLevel.value === '3'" class="icon_transport transport-3_round_solid"></text>
44
+                </template>
45
+                <text class="L_time"
46
+                  :style="{ color: item.focusPatient == 1 ? 'red' : '' }">{{ item.patientName }}({{ item.bedNum }})</text>
47
+              </view>
48
+              <view class="page_item_top_R">
49
+                <text>{{item.inspectState?item.inspectState.name:''}}</text>
50
+                <button @click="build(item)"
51
+                  v-if="!item.gdId&&(item.inspectState.value==1||item.inspectState.value==30)">建单</button>
52
+                <button @click="viewWorkOrder(item)" v-if="item.gdId">查看工单</button>
53
+              </view>
54
+            </view>
55
+            <view class="page_item_cont">
56
+              <view class="page_item_conts">
57
+                <view>
58
+                  <text class="p_title">住院号:</text>
59
+                  <text class="p_info">{{ item.residenceNo || "-" }}</text>
60
+                </view>
61
+                <view>
62
+                  <text class="p_title">检查科室:</text>
63
+                  <text class="p_info">{{
64
+                    item.execDept ? item.execDept.dept : "-"
65
+                  }}</text>
66
+                </view>
67
+                <view>
68
+                  <text class="p_title">检查项目:</text>
69
+                  <text class="p_info">{{ item.inspectName || "-" }}</text>
70
+                </view>
71
+                <view>
72
+                  <text class="p_title">预约时间:</text>
73
+                  <text class="p_info">{{ item.yyTime || "-" }}</text>
74
+                </view>
75
+                <view>
76
+                  <text class="p_title">预约叫号:</text>
77
+                  <text class="p_info">{{
78
+                    item.reservationNumber || "-"
79
+                  }}</text>
80
+                </view>
81
+              </view>
82
+            </view>
83
+          </view>
84
+          <view class="L-l"></view>
85
+          <view class="R-l"></view>
86
+        </view>
87
+      </scroll-view>
88
+    </view>
89
+    <!-- 底部扫一扫 -->
90
+    <bigScreen></bigScreen>
91
+    <!-- 筛选 -->
92
+    <fjj-condition @touchmove.stop :list="list" :visibleDrawer="visibleDrawer" @result="resultConditon"
93
+      :keyWordGvie="searchlist.keyWord" :bedNumSortGvie="searchlist.bedNumSort" :inspectStateList="inspectStateList" />
94
+    <!-- 弹窗 -->
95
+    <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
96
+      @ok="ok" @cancel="cancel" @know="know" :operate="models.operate"></showModel>
97
+  </view>
98
+</template>
99
+<script>
100
+  import bigScreen from "../../components/bigScreen/bigScreen.vue";
101
+  import {
102
+    get,
103
+    post,
104
+    deleteIt,
105
+    webHandle
106
+  } from "../../http/http.js";
107
+  // https://ext.dcloud.net.cn/plugin?id=2849
108
+  import fjjCondition from "@/components/fjj-condition/fjj-condition.vue";
109
+  import showModel from "../../components/showModel/showModel.vue";
110
+  export default {
111
+    data() {
112
+      return {
113
+        // 记录当前滚动条的位置
114
+        scrollYY: 0,
115
+        // 建单的对象
116
+        jdItem: {},
117
+        // 弹窗model
118
+        models: {
119
+          disjunctor: false,
120
+        },
121
+        // 面板是否显示
122
+        visibleDrawer: false,
123
+        // 面板数据
124
+        list: [{
125
+            title: "时间",
126
+            type: "single", //single不带时分秒
127
+            key: "yyTime",
128
+          },
129
+          {
130
+            title: "关键词",
131
+            type: "keyWord", //keyWord是input
132
+            key: "keyWord",
133
+          },
134
+          {
135
+            title: "排序",
136
+            type: "bedNumSort", //床号排序
137
+            key: "bedNumSort",
138
+          },
139
+          {
140
+            title: "检查信息状态",
141
+            type: "inspectState", //检查信息状态
142
+            key: "inspectState",
143
+          },
144
+        ],
145
+        // 面板搜索数据
146
+        searchlist: {
147
+          yyTime: new Date().Format("yyyy/MM/dd"),
148
+          keyWord: "",
149
+          bedNumSort: false,
150
+          inspectState: 0,
151
+        },
152
+        // 检查信息状态列表
153
+        inspectStateList: [],
154
+        //当前登录人所属科室
155
+        currenDept: {},
156
+        // 抢单的id
157
+        qdId: "",
158
+        //列表数据
159
+        zxzData: [],
160
+        //分页页码
161
+        idx: 0,
162
+        // 列表项总数
163
+        totalNum: -1,
164
+        triggered: false, //下拉刷新状态
165
+        freshing: false, //上拉加载开关
166
+        scroll_top: 0, //距离顶部的距离
167
+        scroll_refresher_enabled: true, //是否开启自定义下拉刷新
168
+      };
169
+    },
170
+    components: {
171
+      bigScreen,
172
+      fjjCondition,
173
+    },
174
+    methods: {
175
+      // 更多筛选
176
+      moreFilter() {
177
+        uni.showLoading({
178
+          title: "加载中",
179
+          mask: true,
180
+        });
181
+        let postData = {
182
+          "type": "list",
183
+          "key": "inspect_state"
184
+        };
185
+        post("/common/common/getDictionary", postData).then((result) => {
186
+          this.inspectStateList = result.map(item => {
187
+            return {
188
+              name: item.name,
189
+              value: item.value
190
+            }
191
+          });
192
+          this.inspectStateList.unshift({
193
+            name: '全部',
194
+            value: 0
195
+          });
196
+          uni.hideLoading();
197
+          this.visibleDrawer = true;
198
+        })
199
+      },
200
+      // 查看工单
201
+      viewWorkOrder(data) {
202
+        console.log(data)
203
+        uni.navigateTo({
204
+          url: `../receipt_infopage/receipt_infopage?id=${data.gdId}`,
205
+        });
206
+      },
207
+      // 建单
208
+      build(data) {
209
+        console.log(data);
210
+        this.jdItem = data;
211
+        this.models = {
212
+          disjunctor: true,
213
+          title: "提示",
214
+          content: `您即将创建【${data.patientName || ""}】患者前往【${
215
+          data.execDept ? data.execDept.dept : ""
216
+        }】进行【${data.inspectName || ""}】检查,您确认吗?`,
217
+          icon: "warn",
218
+          operate: {
219
+            ok: "确定",
220
+            cancel: "取消",
221
+          },
222
+        };
223
+      },
224
+      //建单后知道了
225
+      know() {
226
+        this.models.disjunctor = false;
227
+        this.idx = 0;
228
+        this.totalNum = -1;
229
+        this.waitingOrders(0);
230
+        // this.scroll_top = Math.random(); //回到顶部
231
+        this.scroll_top = this.scrollYY; //回到当前位置
232
+      },
233
+      //建单确定
234
+      ok() {
235
+        this.models.disjunctor = false;
236
+        let postData = {
237
+          deptId: this.currenDept.id
238
+        };
239
+        let taskId;
240
+        uni.showLoading({
241
+          title: "加载中",
242
+          mask: true,
243
+        });
244
+        post("/nurse/getDeptTaskType", postData).then((result) => {
245
+          if (result.status == 200) {
246
+            let obj = result.data.allTaskTypes.filter(
247
+              (item) => item.associationType.value == "inspect"
248
+            );
249
+            if (obj.length) {
250
+              taskId = obj[0].id;
251
+              let postData = {
252
+                workOrder: {
253
+                  taskType: {
254
+                    id: taskId
255
+                  },
256
+                  createDept: this.currenDept.id,
257
+                  startDept: {
258
+                    id: this.currenDept.id
259
+                  },
260
+                  patient: {
261
+                    patientCode: this.jdItem.patientCode
262
+                  },
263
+                  checkList: [{
264
+                    id: this.jdItem.id
265
+                  }],
266
+                  goods: "",
267
+                  worker: {
268
+                    id: uni.getStorageSync("userData").user.id
269
+                  },
270
+                  workerStartOrderFlag: 1,
271
+                },
272
+              };
273
+              post("/api/startOrder", postData).then((res) => {
274
+                uni.hideLoading();
275
+                let msg = res.msg;
276
+                let icon = "error";
277
+                if (res.status == 200) {
278
+                  msg = "建单成功";
279
+                  icon = "success";
280
+                }
281
+                this.models = {
282
+                  disjunctor: true,
283
+                  content: msg,
284
+                  icon: icon,
285
+                  operate: {
286
+                    know: "知道了",
287
+                  },
288
+                };
289
+              });
290
+            } else {
291
+              uni.hideLoading();
292
+              this.models = {
293
+                disjunctor: true,
294
+                content: "建单失败,科室未开通!",
295
+                icon: "error",
296
+                operate: {
297
+                  know: "知道了",
298
+                },
299
+              };
300
+            }
301
+          } else {
302
+            uni.hideLoading();
303
+            uni.showToast({
304
+              icon: "none",
305
+              title: "请求失败!",
306
+            });
307
+          }
308
+        });
309
+      },
310
+      //建单取消
311
+      cancel() {
312
+        this.models.disjunctor = false;
313
+      },
314
+      //点击确定后返回参数
315
+      resultConditon(obj) {
316
+        console.log(obj);
317
+        this.visibleDrawer = obj.visibleDrawer;
318
+        if (obj.str_result) {
319
+          this.searchlist = {
320
+            yyTime: obj.str_result.yyTime,
321
+            keyWord: obj.str_result.keyWord,
322
+            bedNumSort: obj.str_result.bedNumSort,
323
+            inspectState: obj.str_result.inspectState,
324
+          };
325
+          this.idx = 0;
326
+          this.totalNum = -1;
327
+          this.waitingOrders(0);
328
+        }
329
+      },
330
+      // 切换科室
331
+      changeDept() {
332
+        uni.navigateTo({
333
+          url: `../search/search?type=inspectList`,
334
+        });
335
+      },
336
+      //检查列表数据获取
337
+      waitingOrders(idx) {
338
+        if (this.zxzData.length == this.totalNum) {
339
+          uni.showToast({
340
+            icon: "none",
341
+            title: "没有更多数据了!",
342
+          });
343
+          this.freshing = true;
344
+          return;
345
+        }
346
+        console.log(this.searchlist, 222222)
347
+        let postData = {
348
+          idx,
349
+          sum: 99999,
350
+          inspect: {
351
+            hosId: uni.getStorageSync("userData").user.currentHospital.id,
352
+            platForm: 2,
353
+            searchDays: 10000,
354
+            applyDept: {
355
+              id: this.currenDept.id,
356
+            },
357
+            clickSort: this.searchlist.bedNumSort,
358
+            yyTime: this.searchlist.yyTime.split("/").join("-") + " 00:00:00",
359
+          },
360
+        };
361
+        if (this.searchlist.inspectState) {
362
+          postData.inspect.inspectState = {
363
+            "value": this.searchlist.inspectState
364
+          };
365
+        }
366
+        // url传递过来的住院号
367
+        if (this.currenDept.residenceNo) {
368
+          this.searchlist.keyWord = this.currenDept.residenceNo;
369
+          this.currenDept.residenceNo = "";
370
+        }
371
+        if (this.searchlist.keyWord) {
372
+          postData.inspect.keyWord = this.searchlist.keyWord;
373
+        }
374
+        uni.showLoading({
375
+          title: "加载中",
376
+          mask: true,
377
+        });
378
+        // 请求列表数据
379
+        post("/nurse/fetchDataList/inspect", postData).then((res) => {
380
+          uni.hideLoading();
381
+          if (res.status == 200) {
382
+            this.triggered = false;
383
+            this.freshing = true;
384
+            this.totalNum = res.totalNum;
385
+            if (idx === 0) {
386
+              this.zxzData = res.list;
387
+            } else {
388
+              this.zxzData.push(...res.list);
389
+            }
390
+          } else {
391
+            uni.showToast({
392
+              icon: "none",
393
+              title: "请求失败!",
394
+            });
395
+          }
396
+        });
397
+      },
398
+      //刷新
399
+      refresherrefresh() {
400
+        if (this.triggered) {
401
+          return;
402
+        }
403
+        console.log("下拉刷新");
404
+        this.triggered = true;
405
+        this.idx = 0;
406
+        this.totalNum = -1;
407
+        this.waitingOrders(0);
408
+      },
409
+      // 下拉刷新复位
410
+      refresherrestore() {
411
+        this.triggered = false;
412
+        console.log("下拉刷新复位");
413
+      },
414
+      //下拉刷新中止
415
+      refresherabort() {
416
+        this.triggered = false;
417
+        console.log("下拉刷新中止");
418
+      },
419
+      //分页,上拉加载
420
+      scrolltolower() {
421
+        if (this.freshing) {
422
+          console.log("上拉加载");
423
+          this.freshing = false;
424
+          this.waitingOrders(++this.idx);
425
+        }
426
+      },
427
+      // 滚动
428
+      scroll(e) {
429
+        this.scrollYY = e.detail.scrollTop;
430
+        if (e.detail.scrollTop < 20) {
431
+          this.scroll_refresher_enabled = true;
432
+        } else {
433
+          this.scroll_refresher_enabled = false;
434
+        }
435
+      },
436
+      // 阻止浏览器滑动
437
+      stop(e) {
438
+        e.preventDefault();
439
+      },
440
+    },
441
+    onLoad(options) {
442
+      let patientCurrentDept = uni.getStorageSync("patientCurrentDept");
443
+      if (Object.keys(options).length) {
444
+        let {
445
+          id,
446
+          dept,
447
+          residenceNo
448
+        } = options;
449
+        this.currenDept.id = id;
450
+        this.currenDept.dept = dept;
451
+        this.currenDept.residenceNo = residenceNo;
452
+      } else if (patientCurrentDept) {
453
+        this.currenDept.id = patientCurrentDept.id;
454
+        this.currenDept.dept = patientCurrentDept.dept;
455
+      } else {
456
+        this.currenDept = uni.getStorageSync("userData").user.dept;
457
+      }
458
+      this.waitingOrders(0);
459
+      // #ifdef APP-PLUS
460
+      webHandle("no", "app");
461
+      // #endif
462
+      // #ifdef H5
463
+      webHandle("no", "wx");
464
+      // #endif
465
+    },
466
+    onShow() {
467
+      // #ifdef H5
468
+      document.body.addEventListener("touchmove", this.stop, {
469
+        passive: false,
470
+      });
471
+      // #endif
472
+    },
473
+    onHide() {
474
+      // #ifdef H5
475
+      document.body.removeEventListener("touchmove", this.stop, {
476
+        passive: false,
477
+      });
478
+      // #endif
479
+    },
480
+  };
481
+</script>
482
+<style lang="less">
483
+  .inspectList {
484
+    width: 100%;
485
+    height: 100%;
486
+    position: relative;
487
+
488
+    .icon_transport {
489
+      color: #49b856;
490
+      font-size: 36rpx;
491
+
492
+      &.colorRed {
493
+        color: red;
494
+        font-size: 32rpx;
495
+      }
496
+    }
497
+
498
+    .page_tab {
499
+      width: 100%;
500
+      height: 96rpx;
501
+      display: flex;
502
+      position: fixed;
503
+      left: 0;
504
+      top: 0;
505
+      z-index: 999;
506
+
507
+      .page_tab_bar {
508
+        flex: 1;
509
+        font-size: 36rpx;
510
+        background: #fff;
511
+        display: flex;
512
+        justify-content: center;
513
+        align-items: center;
514
+        position: relative;
515
+
516
+        &:after {
517
+          content: "";
518
+          position: absolute;
519
+          left: 0;
520
+          bottom: 0;
521
+          height: 2rpx;
522
+          width: 100%;
523
+          background-color: transparent;
524
+        }
525
+
526
+        .tab_dept {
527
+          position: relative;
528
+
529
+          .changeDept {
530
+            width: 140rpx;
531
+            white-space: nowrap;
532
+            margin: 0;
533
+            position: absolute;
534
+            right: 0;
535
+            top: 50%;
536
+            transform: translate(105%, -50%);
537
+            padding: 0 0.5em;
538
+            line-height: 2;
539
+          }
540
+
541
+          .moreFilter {
542
+            left: 0;
543
+            transform: translate(-105%, -50%);
544
+          }
545
+        }
546
+
547
+        &.active {
548
+          color: #49b856;
549
+
550
+          &:after {
551
+            background-color: #49b856;
552
+          }
553
+        }
554
+      }
555
+    }
556
+
557
+    .zwsj {
558
+      position: absolute;
559
+      left: 50%;
560
+      top: 180rpx;
561
+      transform: translateX(-50%);
562
+
563
+      .zwsj-img {
564
+        width: 560rpx;
565
+      }
566
+
567
+      .zwsj-txt {
568
+        font-size: 36rpx;
569
+        font-weight: 700;
570
+        margin-top: 20rpx;
571
+        text-align: center;
572
+      }
573
+    }
574
+
575
+    .page_items {
576
+      height: calc(100vh - 184rpx);
577
+      padding: 0 20rpx;
578
+      padding-top: 96rpx;
579
+
580
+      .page_items_scroll {
581
+        height: 100%;
582
+
583
+        .page_item_wrap {
584
+          position: relative;
585
+          margin-bottom: 32rpx;
586
+
587
+          .page_item {
588
+            margin-bottom: 16rpx;
589
+            background: #fff;
590
+            border-radius: 8rpx;
591
+            overflow: hidden;
592
+            border: 2rpx solid #e5e9ed;
593
+            display: flex;
594
+            flex-direction: column;
595
+            justify-content: space-between;
596
+
597
+            .L {
598
+              width: 40rpx;
599
+              height: 40rpx;
600
+              border-radius: 50%;
601
+              background: #f9fafb;
602
+              position: absolute;
603
+              left: -24rpx;
604
+              top: 68rpx;
605
+              border: 2rpx solid #e5e9ed;
606
+            }
607
+
608
+            .R {
609
+              width: 40rpx;
610
+              height: 40rpx;
611
+              border-radius: 50%;
612
+              background: #f9fafb;
613
+              position: absolute;
614
+              float: right;
615
+              right: -24rpx;
616
+              top: 68rpx;
617
+              border: 2rpx solid #e5e9ed;
618
+            }
619
+
620
+            .page_item_top {
621
+              height: 86rpx;
622
+              border-bottom: 2rpx dashed #e5e9ed;
623
+              padding: 0 16rpx;
624
+              display: flex;
625
+              align-items: center;
626
+              justify-content: space-between;
627
+
628
+              .page_item_top_L {
629
+                height: 100%;
630
+                float: left;
631
+                display: flex;
632
+                align-items: center;
633
+                line-height: 88rpx;
634
+                text-overflow: ellipsis;
635
+                overflow: hidden;
636
+                white-space: nowrap;
637
+                color: #6cc076;
638
+
639
+                .L_time {
640
+                  font-size: 28rpx;
641
+                }
642
+              }
643
+
644
+              .page_item_top_R {
645
+                float: right;
646
+                display: flex;
647
+                align-items: center;
648
+                justify-content: space-between;
649
+
650
+                text {
651
+                  font-size: 28rpx;
652
+                  color: #49b856;
653
+                  margin-right: 16rpx;
654
+                }
655
+
656
+                button {
657
+                  font-size: 28rpx;
658
+                  color: #49b856;
659
+                  height: 50rpx;
660
+                  line-height: 50rpx;
661
+                  margin: 0;
662
+                }
663
+              }
664
+            }
665
+
666
+            .page_item_cont {
667
+              min-height: 100rpx;
668
+              max-height: 344rpx;
669
+              padding: 16rpx;
670
+              text-align: left;
671
+              position: relative;
672
+
673
+              .page_item_conts {
674
+                color: rgb(102, 102, 102);
675
+                font-size: 28rpx;
676
+                min-height: 100rpx;
677
+                max-height: 344rpx;
678
+
679
+                view {
680
+                  margin-bottom: 10rpx;
681
+                  margin-left: 40rpx;
682
+                  display: flex;
683
+                }
684
+
685
+                .p_title {
686
+                  width: 160rpx;
687
+                }
688
+
689
+                .p_info {
690
+                  flex: 1;
691
+                }
692
+
693
+                .num {
694
+                  float: right;
695
+                }
696
+              }
697
+            }
698
+
699
+            .page_item_btn {
700
+              height: 88rpx;
701
+              background-image: linear-gradient(to right, #72c172, #3bb197);
702
+              border-radius: 8rpx;
703
+              line-height: 88rpx;
704
+              color: #fff;
705
+              font-size: 36rpx;
706
+              font-weight: 700;
707
+              text-align: center;
708
+            }
709
+          }
710
+
711
+          .L-l {
712
+            width: 2rpx;
713
+            height: 40rpx;
714
+            background: #f9fafb;
715
+            position: absolute;
716
+            left: 20rpx;
717
+            top: 72rpx;
718
+            display: none;
719
+          }
720
+
721
+          .R-l {
722
+            width: 2rpx;
723
+            height: 40rpx;
724
+            background: #f9fafb;
725
+            position: absolute;
726
+            right: 20rpx;
727
+            top: 72rpx;
728
+            display: none;
729
+          }
730
+        }
731
+      }
732
+    }
733
+  }
734
+</style>

+ 759 - 0
pages/my_list/my_list.vue

@@ -0,0 +1,759 @@
1
+<template>
2
+  <scroll-view :scroll-y="!models.disjunctor" @scroll="scrollList" :scroll-top="scroll_t" class="my_list">
3
+    <view class="my_list_top">
4
+      <view class="my_list_topL" @click="act()">
5
+        筛选
6
+        <text class="cubeic-pulldown icon_transport transport-paixujiantouxia" v-if="!actType"></text>
7
+        <text class="cubeic-pullup icon_transport transport-paixujiantoushang" v-if="actType"></text>
8
+      </view>
9
+      <view class="my_list_topC">
10
+        <input type="text" placeholder="请输入关键字" v-model="listData.workOrder.keyWord" />
11
+      </view>
12
+      <view class="my_list_topR" @click="search(listData)"> 搜索 </view>
13
+    </view>
14
+    <view class="my_list_tops" id="actType" :animation="animationData" v-if="actType">
15
+      <view class="tops">
16
+        <view>类型筛选</view>
17
+        <view class="tops_cont">
18
+          <view v-for="(data, i) of typeData" :key="i" :class="{ ac: checkedSear[data.id] }"
19
+            @click="sxTab(data.associationTypes, data.id)" :id="data.id">
20
+            {{ data.name }}
21
+          </view>
22
+        </view>
23
+      </view>
24
+      <view class="tops">
25
+        <view>工单筛选</view>
26
+        <view class="tops_cont1">
27
+          <view :class="{ gdType: listData.workOrder.abnormityType == 0 }" @click="gdTab(0)">
28
+            正常工单
29
+          </view>
30
+          <view :class="{ gdType: listData.workOrder.abnormityType == 1 }" @click="gdTab(1)">
31
+            异常工单
32
+          </view>
33
+        </view>
34
+      </view>
35
+      <view class="foot_btn2">
36
+        <view class="btn1" :class="{ btnType: btnType == 1 }" @click="ok(listData)">
37
+          确定
38
+        </view>
39
+        <view class="btn2" @click="Reset()"> 重置 </view>
40
+      </view>
41
+    </view>
42
+    <view class="item" @click="item()">
43
+      <view class="page_items" v-if="workData && workData.length > 0">
44
+        <view class="page_item" v-for="(infoDATA, i) of workData" :key="i" @click="detailIt(infoDATA)">
45
+          <view class="page_item_top">
46
+            <view class="page_item_top_L">
47
+              <text class="L_text">单号:{{ infoDATA.gdcode }}</text>
48
+              <view class="page_item_cont_start emergency1" v-if="infoDATA.emergencyType.value == 1">
49
+                <text>
50
+                  <text
51
+                    class="cubeic-star icon_transport transport-shiwujiaoxing"></text>{{ infoDATA.emergencyType.name }}</text>
52
+              </view>
53
+              <view class="page_item_cont_start emergency" v-if="infoDATA.emergencyType.value == 2">
54
+                <text>
55
+                  <text
56
+                    class="cubeic-star icon_transport transport-shiwujiaoxing"></text>{{ infoDATA.emergencyType.name }}</text>
57
+              </view>
58
+              <view class="page_item_cont_start emergencys" v-if="infoDATA.emergencyType.value == 3">
59
+                <text>
60
+                  <text
61
+                    class="cubeic-star icon_transport transport-shiwujiaoxing"></text>{{ infoDATA.emergencyType.name }}</text>
62
+              </view>
63
+            </view>
64
+            <view class="page_item_top_L">
65
+              <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'specimen'">标本</text>
66
+              <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'specimenPlan'">标本</text>
67
+              <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'drugsBag'">药品</text>
68
+              <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'jPBag'">静配</text>
69
+              <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'inspect'">陪检</text>
70
+              <text class="L_iocn" v-if="
71
+                  infoDATA.taskType.associationType.value == 'patientTransport'
72
+                ">转运</text>
73
+              <text class="L_iocn" v-if="infoDATA.taskType.associationType.value == 'other'">其他</text>
74
+            </view>
75
+            <view class="page_item_top_R">
76
+              <view class="num">
77
+                {{infoDATA.grade?(infoDATA.grade.gradeTotal>=0?'+'+infoDATA.grade.gradeTotal:'-'+infoDATA.grade.gradeTotal):''}}
78
+              </view>
79
+            </view>
80
+            <view class="L"> </view>
81
+            <view class="R"> </view>
82
+          </view>
83
+          <view class="page_item_cont">
84
+            <view class="page_item_cont_T">
85
+              <view class="page_item_cont_title">
86
+                <text> <text class="starting">起</text> 点科室</text>
87
+                <text class="text_big"> {{ infoDATA.startDept.dept }}</text>
88
+              </view>
89
+            </view>
90
+            <view class="line"> </view>
91
+            <view class="page_item_cont_B">
92
+              <view class="page_item_cont_title" v-for="(dept, i) of infoDATA.middleDept" :key="i">
93
+                <view v-if="infoDATA.taskType.associationType.value == 'inspect'">
94
+                  <text> <text class="End">检</text> 查科室</text>
95
+                  <text class="text_big"> {{ dept.dept }}</text>
96
+                  <view></view>
97
+                </view>
98
+              </view>
99
+              <view class="page_item_cont_title" v-for="(dept, i) of infoDATA.endDepts" :key="i">
100
+                <view v-if="infoDATA.taskType.associationType.value != 'inspect'">
101
+                  <text> <text class="End">终</text> 点科室</text>
102
+                  <text class="text_big"> {{ dept.dept }}</text>
103
+                </view>
104
+              </view>
105
+            </view>
106
+          </view>
107
+          <view class="page_item_foot">
108
+            <view class="page_item_foot_text">
109
+              <text class="text1">完成时间</text>&nbsp;&nbsp;
110
+              <text class="text1">{{ infoDATA.completeTime || 0 }}</text>
111
+            </view>
112
+          </view>
113
+        </view>
114
+      </view>
115
+    </view>
116
+    <!-- 弹窗 -->
117
+    <showIntegralModel :disjunctor="models.disjunctor" :operate="models.operate" :timestamp="models.timestamp"
118
+      :orderId="models.orderId" @know="know()"></showIntegralModel>
119
+  </scroll-view>
120
+</template>
121
+<script>
122
+  import {
123
+    get,
124
+    post,
125
+    webHandle
126
+  } from "../../http/http.js";
127
+  import showIntegralModel from "../../components/showIntegralModel/showIntegralModel.vue";
128
+  export default {
129
+    data() {
130
+      return {
131
+        //滚动距离
132
+        scroll_t: 0,
133
+        scroll_t_old: 0,
134
+        // 弹窗model
135
+        models: {
136
+          disjunctor: false,
137
+        },
138
+        animationData: {}, //动画
139
+        actType: false,
140
+        btnType: 1,
141
+        checkedSear: {}, //筛选多选box
142
+        types: "",
143
+        typeData: [],
144
+        listData: {
145
+          idx: 0,
146
+          sum: 20,
147
+          workOrder: {
148
+            abnormityType: "0",
149
+            associationTypes: [],
150
+            keyWord: "",
151
+          },
152
+        },
153
+        workData: [],
154
+      };
155
+    },
156
+    components: {
157
+      showIntegralModel,
158
+    },
159
+    methods: {
160
+      //滚动距离
161
+      scrollList(e) {
162
+        this.scroll_t_old = e.detail.scrollTop;
163
+      },
164
+      // 知道了
165
+      know() {
166
+        this.scroll_t = this.scroll_t_old;
167
+        this.models.disjunctor = false;
168
+      },
169
+      //积分详情
170
+      detailIt(infoDATA) {
171
+        this.models.disjunctor = true;
172
+        this.models.orderId = infoDATA.id;
173
+        this.models.timestamp = Date.now();
174
+      },
175
+      item() {
176
+        this.actType = false;
177
+        this.animation.opacity(0).step();
178
+        this.animationData = this.animation.export();
179
+      },
180
+      // 确定
181
+      ok(data) {
182
+        this.getData(data);
183
+        this.actType = false;
184
+        this.animation.opacity(0).step();
185
+        this.animationData = this.animation.export();
186
+      },
187
+      // 搜索
188
+      search(data) {
189
+        this.getData(data);
190
+        this.actType = false;
191
+        this.animation.opacity(0).step();
192
+        this.animationData = this.animation.export();
193
+      },
194
+      // 重置
195
+      Reset() {
196
+        for (var k in this.checkedSear) {
197
+          this.checkedSear[k] = false;
198
+        }
199
+        this.listData.workOrder.associationType = [];
200
+        this.listData.workOrder.abnormityType = "0";
201
+        this.listData.workOrder.keyWord = "";
202
+        this.getData(this.listData);
203
+      },
204
+      // 筛选
205
+      act() {
206
+        if (this.actType) {
207
+          //当前状态时展开
208
+          this.animation.opacity(0).step();
209
+          this.animationData = this.animation.export();
210
+        } else {
211
+          //seimin
212
+          this.animation.opacity(1).step();
213
+          this.animationData = this.animation.export();
214
+        }
215
+        this.actType = !this.actType;
216
+      },
217
+      // 类型筛选
218
+      sxTab(type, id) {
219
+        this.$set(this.checkedSear, id, !this.checkedSear[id]);
220
+        let checkedArr = [];
221
+        for (var k in this.checkedSear) {
222
+          if (this.checkedSear[k]) {
223
+            checkedArr.push(k);
224
+          }
225
+        }
226
+        this.listData.workOrder.associationTypes = checkedArr;
227
+      },
228
+      gdTab(type) {
229
+        this.listData.workOrder.abnormityType = type;
230
+      },
231
+
232
+      getType() {
233
+        let data = {
234
+          type: "list",
235
+          key: "association_types",
236
+        };
237
+
238
+        post("/common/common/getDictionary", data).then((res) => {
239
+          for (var i = 0; i < res.length; i++) {
240
+            let list = {
241
+              name: "",
242
+              associationTypes: "",
243
+              id: "",
244
+            };
245
+            list.name = res[i].name;
246
+            list.associationTypes = res[i].value;
247
+            list.id = res[i].id;
248
+            this.typeData.push(list);
249
+            let id = res[i].id;
250
+            this.$set(this.checkedSear, id, false);
251
+          }
252
+        });
253
+      },
254
+      getData(data) {
255
+        uni.showLoading({
256
+          title: '加载中',
257
+          mask: true
258
+        });
259
+        post("/api/getOrdersByDate/" + this.types, data).then((res) => {
260
+          uni.hideLoading();
261
+          if (res.status == 200) {
262
+            this.workData = res.data.data;
263
+          } else {
264
+            uni.showToast({
265
+              icon: "none",
266
+              title: "请求失败!",
267
+            });
268
+          }
269
+        });
270
+      },
271
+    },
272
+    onLoad(options) {
273
+      console.log(options)
274
+      this.types = options.type;
275
+      this.getType();
276
+      this.getData(this.listData);
277
+      // 创建动画
278
+      this.animation = uni.createAnimation({
279
+        duration: 500,
280
+        timingFunction: "ease",
281
+      });
282
+      // #ifdef APP-PLUS
283
+      webHandle("no", "app");
284
+      // #endif
285
+      // #ifdef H5
286
+      webHandle("no", "wx");
287
+      // #endif
288
+    },
289
+    onUnload() {
290
+      // 页面关闭后清空数据
291
+      this.animationData = {};
292
+    },
293
+  };
294
+</script>
295
+<style lang="less">
296
+  .my_list {
297
+    height: 100vh;
298
+
299
+    .my_list_top {
300
+      height: 90rpx;
301
+      background: #fff;
302
+      line-height: 90rpx;
303
+      border-bottom: 2rpx solid rgb(142, 157, 158);
304
+      position: fixed;
305
+      top: 0;
306
+      width: 100%;
307
+      z-index: 999;
308
+      display: flex;
309
+      align-items: center;
310
+      justify-content: space-between;
311
+
312
+      .my_list_topL {
313
+        float: left;
314
+        width: 22%;
315
+        height: 100%;
316
+        font-size: 32rpx;
317
+        text-align: center;
318
+        display: flex;
319
+        justify-content: center;
320
+        align-items: center;
321
+
322
+        text {
323
+          font-size: 34rpx;
324
+        }
325
+      }
326
+
327
+      .my_list_topC {
328
+        float: left;
329
+        width: 55%;
330
+
331
+        input {
332
+          height: 60rpx;
333
+          border: 2rpx solid rgb(142, 157, 158);
334
+          border-radius: 40rpx;
335
+          width: 100%;
336
+          padding-left: 10rpx;
337
+          padding-right: 10rpx;
338
+        }
339
+      }
340
+
341
+      .my_list_topR {
342
+        float: right;
343
+        width: 22%;
344
+        height: 100%;
345
+        font-size: 32rpx;
346
+        text-align: center;
347
+      }
348
+    }
349
+
350
+    .my_list_tops {
351
+      background: #fff;
352
+      position: fixed;
353
+      padding-top: 20rpx;
354
+      z-index: 999;
355
+      top: 92rpx;
356
+      width: 100%;
357
+      opacity: 0;
358
+
359
+      .tops {
360
+        height: 100%;
361
+        text-align: left;
362
+        padding-left: 30rpx;
363
+        font-size: 32rpx;
364
+
365
+        .tops_cont {
366
+          height: 100%;
367
+          margin-top: 10rpx;
368
+          overflow: hidden;
369
+          display: flex;
370
+          flex-wrap: wrap;
371
+          justify-content: space-between;
372
+
373
+          view {
374
+            width: 32%;
375
+            height: 70rpx;
376
+            line-height: 70rpx;
377
+            // float: left;
378
+            text-align: center;
379
+            // margin-right: 2%;
380
+            color: rgb(142, 157, 158);
381
+            background: rgb(249, 250, 251);
382
+            border-radius: 8rpx;
383
+            margin-bottom: 2%;
384
+          }
385
+
386
+          .ac {
387
+            color: #fff !important;
388
+            background-image: linear-gradient(to right,
389
+                #72c172,
390
+                #3bb197) !important;
391
+          }
392
+
393
+          .ac1 {
394
+            display: inline-block;
395
+          }
396
+        }
397
+
398
+        .tops_cont1 {
399
+          height: 100rpx;
400
+          margin-top: 10rpx;
401
+          overflow: hidden;
402
+
403
+          view {
404
+            width: 45%;
405
+            color: rgb(142, 157, 158);
406
+            height: 70rpx;
407
+            line-height: 70rpx;
408
+            float: left;
409
+            text-align: center;
410
+            margin-right: 2%;
411
+            background: rgb(249, 250, 251);
412
+            border-radius: 8rpx;
413
+          }
414
+        }
415
+
416
+        .tops_cont2 {
417
+          height: 90rpx;
418
+          line-height: 90rpx;
419
+        }
420
+
421
+        .lxType {
422
+          color: #fff !important;
423
+          background-image: linear-gradient(to right,
424
+              #72c172,
425
+              #3bb197) !important;
426
+        }
427
+
428
+        .gdType {
429
+          color: #fff !important;
430
+          background-image: linear-gradient(to right,
431
+              #72c172,
432
+              #3bb197) !important;
433
+        }
434
+      }
435
+
436
+      .foot_btn2 {
437
+        position: absolute;
438
+        width: 100%;
439
+        line-height: 90rpx;
440
+        height: 90rpx;
441
+        border-top: 2rpx solid #e5e9ed;
442
+        border-bottom: 2rpx solid #e5e9ed;
443
+        background: #f9fafb;
444
+        text-align: center;
445
+
446
+        view {
447
+          height: 90rpx;
448
+          width: 49%;
449
+          color: rgb(153, 153, 153);
450
+          font-size: 32rpx;
451
+        }
452
+
453
+        .btn1 {
454
+          float: left;
455
+        }
456
+
457
+        .btn2 {
458
+          float: right;
459
+          border-left: 2rpx solid #e5e9ed;
460
+        }
461
+      }
462
+
463
+      .btnType {
464
+        color: rgb(102, 102, 102) !important;
465
+      }
466
+    }
467
+
468
+    .item {
469
+      padding: 0 20rpx;
470
+      margin-top: 120rpx;
471
+
472
+      .page_items {
473
+        margin-bottom: 110rpx;
474
+
475
+        .page_item {
476
+          margin-top: 16rpx;
477
+          min-height: 356rpx;
478
+          background: #fff;
479
+          border-radius: 8rpx;
480
+          overflow: hidden;
481
+          padding: 0 16rpx;
482
+          border: 2rpx solid #e5e9ed;
483
+
484
+          .L {
485
+            width: 40rpx;
486
+            height: 40rpx;
487
+            border-radius: 50%;
488
+            background: #f9fafb; // background: blue;
489
+            position: relative;
490
+            left: -50rpx;
491
+            top: 66rpx;
492
+          }
493
+
494
+          .R {
495
+            width: 40rpx;
496
+            height: 40rpx;
497
+            border-radius: 50%;
498
+            background: #f9fafb;
499
+            position: relative;
500
+            float: right;
501
+            right: -50rpx;
502
+            top: 26rpx;
503
+          }
504
+
505
+          .starting {
506
+            width: 50rpx;
507
+            height: 50rpx;
508
+            color: #fff;
509
+            background: #49b856;
510
+            display: inline-block;
511
+            border-radius: 50%;
512
+            text-align: center;
513
+            line-height: 46rpx;
514
+            font-size: 32rpx;
515
+            margin-right: 6rpx;
516
+          }
517
+
518
+          .End {
519
+            width: 50rpx;
520
+            height: 50rpx;
521
+            color: #fff;
522
+            background: #39b199;
523
+            display: inline-block;
524
+            border-radius: 50%;
525
+            text-align: center;
526
+            line-height: 46rpx;
527
+            font-size: 32rpx;
528
+            margin-right: 6rpx;
529
+          }
530
+
531
+          .page_item_top {
532
+            height: 86rpx;
533
+            border-bottom: 2rpx dashed #e5e9ed;
534
+
535
+            .page_item_top_L {
536
+              height: 100%;
537
+              float: left;
538
+              line-height: 88rpx;
539
+
540
+              .ac {
541
+                width: 32rpx;
542
+                height: 32rpx;
543
+                border: 2rpx solid #ccc;
544
+                display: inline-block;
545
+                position: relative;
546
+                top: 6rpx;
547
+                display: none;
548
+
549
+                text {
550
+                  width: 24rpx;
551
+                  height: 24rpx;
552
+                  background: #39b199;
553
+                  display: block;
554
+                  margin: 0 auto;
555
+                  margin-top: 4rpx;
556
+                }
557
+              }
558
+
559
+              .ac1 {
560
+                width: 32rpx;
561
+                height: 32rpx;
562
+                border: 2rpx solid #ccc;
563
+                display: inline-block;
564
+                position: relative;
565
+                top: 6rpx;
566
+              }
567
+
568
+              .emergencys {
569
+                background: #ff3b53 !important;
570
+                width: 124rpx !important;
571
+              }
572
+
573
+              .emergency {
574
+                background: #ff3b53 !important;
575
+              }
576
+
577
+              .emergency1 {
578
+                background: #49b856 !important;
579
+              }
580
+
581
+              .page_item_cont_start {
582
+                text-align: center;
583
+                height: 44rpx;
584
+                width: 104rpx;
585
+                line-height: 44rpx;
586
+                border-radius: 8rpx;
587
+                background: #49b856;
588
+                color: #fff;
589
+                display: inline-block;
590
+                font-size: 28rpx;
591
+              }
592
+
593
+              .L_time {
594
+                color: #6cc076;
595
+                font-size: 32rpx;
596
+              }
597
+
598
+              .L_text {
599
+                font-size: 32rpx;
600
+                display: inline-block;
601
+                font-weight: 700;
602
+              }
603
+
604
+              .L_iocn {
605
+                display: inline-block;
606
+                height: 52rpx;
607
+                color: rgb(7, 134, 60);
608
+                font-size: 28rpx;
609
+                font-weight: 700;
610
+                margin-left: 20rpx;
611
+              }
612
+            }
613
+
614
+            .page_item_top_R {
615
+              height: 60rpx;
616
+              float: right;
617
+              padding-top: 20rpx;
618
+              font-size: 32rpx;
619
+              position: absolute;
620
+              right: 50rpx;
621
+              line-height: 48rpx;
622
+
623
+              .num {
624
+                color: rgb(7, 134, 60);
625
+              }
626
+
627
+              .num1 {
628
+                color: #ff3b53 !important;
629
+              }
630
+            }
631
+          }
632
+
633
+          .page_item_cont {
634
+            min-height: 180rpx;
635
+            max-height: 424rpx;
636
+            padding: 0 16rpx;
637
+            text-align: left;
638
+            position: relative;
639
+
640
+            .text_big {
641
+              font-size: 32rpx;
642
+              position: absolute;
643
+              right: 16rpx;
644
+              font-weight: 700;
645
+              margin-top: 10rpx;
646
+            }
647
+
648
+            .text_big2 {
649
+              font-size: 32rpx;
650
+              position: absolute;
651
+              right: 16rpx;
652
+              font-weight: 700;
653
+            }
654
+
655
+            .line {
656
+              height: 20rpx;
657
+              width: 2rpx;
658
+              border-left: 2rpx solid #e5e9ed;
659
+              position: absolute;
660
+              top: 82rpx;
661
+              left: 40rpx;
662
+            }
663
+
664
+            .lines {
665
+              height: 40%;
666
+              width: 2rpx;
667
+              border-left: 2rpx solid #e5e9ed;
668
+              position: absolute;
669
+              top: 23%;
670
+              left: 36rpx;
671
+            }
672
+
673
+            .page_item_cont_T {
674
+              padding-top: 28rpx;
675
+              font-size: 28rpx;
676
+
677
+              .page_item_cont_title {
678
+                height: 100%;
679
+                font-size: 32rpx;
680
+              }
681
+            }
682
+
683
+            .page_item_cont_B {
684
+              padding-top: 28rpx;
685
+              margin-bottom: 28rpx;
686
+
687
+              .page_item_cont_title {
688
+                height: 60rpx;
689
+                font-size: 32rpx;
690
+              }
691
+
692
+              .page_item_cont_title1 {
693
+                height: 60rpx;
694
+                line-height: 60rpx;
695
+                font-size: 32rpx;
696
+                padding-left: 64rpx;
697
+              }
698
+            }
699
+          }
700
+
701
+          .page_item_foot {
702
+            border-top: 2rpx dashed #e5e9ed;
703
+            border-bottom: 2rpx dashed #e5e9ed;
704
+            padding: 28rpx 16rpx;
705
+            text-align: left;
706
+
707
+            .page_item_foot_text {
708
+              height: 48rpx;
709
+              font-size: 32rpx;
710
+              line-height: 48rpx;
711
+              margin-bottom: 20rpx;
712
+
713
+              .text1 {
714
+                color: rgb(102, 102, 102);
715
+              }
716
+
717
+              .text2 {
718
+                float: right;
719
+                font-weight: 700;
720
+              }
721
+            }
722
+          }
723
+
724
+          #infos {
725
+            display: none;
726
+          }
727
+
728
+          .page_item_infos {
729
+            padding-bottom: 20rpx;
730
+            border-bottom: 2rpx dashed #e5e9ed;
731
+
732
+            .page_item_info2 {
733
+              text-align: left;
734
+              line-height: 60rpx;
735
+              font-size: 32rpx;
736
+              padding-left: 16rpx;
737
+
738
+              .page_item_foot_text {
739
+                height: 48rpx;
740
+                font-size: 32rpx;
741
+                line-height: 48rpx;
742
+                margin-bottom: 20rpx;
743
+
744
+                .text1 {
745
+                  color: rgb(102, 102, 102);
746
+                }
747
+
748
+                .text2 {
749
+                  float: right;
750
+                  font-weight: 700;
751
+                }
752
+              }
753
+            }
754
+          }
755
+        }
756
+      }
757
+    }
758
+  }
759
+</style>

+ 683 - 0
pages/mypage/mypage.vue

@@ -0,0 +1,683 @@
1
+<template>
2
+  <view class="mypage">
3
+    <view class="myTop">
4
+      <view class="goWork" @click="GoWork()">
5
+        <view class="goWork_btn_E">
6
+          <view class="goWork_btn_W" v-show="userData.online"> 下班 </view>
7
+          <view class="goWork_btn_X" v-show="!userData.online"> 上班 </view>
8
+        </view>
9
+      </view>
10
+      <view class="topText">
11
+        <view class="topTextHeader">
12
+          <text>您好,{{ userData.name }}</text>
13
+          <button v-show="!userData.online" class="changeHospital" size="mini" type="default" @click="changeHospital">切换院区</button>
14
+        </view>
15
+        <view>当前积分 : {{ tabNum.score }}</view>
16
+      </view>
17
+    </view>
18
+    <view class="myCont">
19
+      <view class="myCont_cont">
20
+        <view class="myCont_cont_tab">
21
+          <view style="border-right: 1px solid rgb(229, 233, 237)" @click="tab('day', '今日')"
22
+            :class="{ acts: tabType == 'day' }">
23
+            今日 ({{ tabNum.day || 0 }})
24
+          </view>
25
+          <view style="border-right: 1px solid rgb(229, 233, 237)" @click="tab('week', '本周')"
26
+            :class="{ acts: tabType == 'week' }">
27
+            本周 ({{ tabNum.week || 0 }})
28
+          </view>
29
+          <view @click="tab('month', '本月')" :class="{ acts: tabType == 'month' }">
30
+            本月 ({{ tabNum.month || 0 }})
31
+          </view>
32
+        </view>
33
+        <view class="TB" v-show="tabNums > 0 && !TBLoading">
34
+          <view class="TB_inner" style="
35
+              display: flex;
36
+              align-items: center;
37
+              justify-content: space-between;
38
+            ">
39
+            <view class="tbTitle"> {{ types }}已完成{{ tabNums }}单,共计{{tabScores}}分 </view>
40
+            <view class="tbText" @click="my_list(tabType)"> 查看明细>> </view>
41
+          </view>
42
+          <view class="canvasRing_wrap">
43
+            <canvas ref="canvasRef" canvas-id="canvasRing" id="canvasRing" class="charts"
44
+              @touchstart="touchRing"></canvas>
45
+          </view>
46
+        </view>
47
+        <view class="TB1" v-show="tabNums == 0 && !TBLoading">
48
+          <view class="title"> {{ types }}已完成{{ tabNums }}单,共计{{tabScores}}分 </view>
49
+          <view class="cont"> 暂无数据 </view>
50
+        </view>
51
+        <view class="TB_list" v-show="!TBLoading">
52
+          <view v-for="(data, i) of BtData" :key="i">
53
+            <view class="TB_list_L">
54
+              {{ data.name }}
55
+            </view>
56
+            <view class="TB_list_R">
57
+              {{ data.value }}单
58
+              <text :style="{ color: data.itemStyle.color }">{{
59
+                data.percent
60
+              }}</text>
61
+            </view>
62
+          </view>
63
+        </view>
64
+      </view>
65
+    </view>
66
+    <!-- 弹窗 -->
67
+    <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
68
+      @ok="ok" @cancel="cancel" :operate="models.operate"></showModel>
69
+    <!-- 切换院区弹窗 -->
70
+    <changeHospital v-if="hosModels.disjunctor" :title="hosModels.title" :disjunctor="hosModels.disjunctor" @ok="hosOk"
71
+      @cancel="hosCancel">
72
+    </changeHospital>
73
+  </view>
74
+</template>
75
+<script>
76
+  import showModel from "../../components/showModel/showModel.vue";
77
+  import changeHospital from "../../components/changeHospital/changeHospital.vue";
78
+  // http://doc.ucharts.cn/1172177
79
+  import uCharts from "../../js_sdk/u-charts/u-charts/u-charts.js";
80
+  import {
81
+    get,
82
+    post,
83
+    webHandle
84
+  } from "../../http/http.js";
85
+  export default {
86
+    data() {
87
+      return {
88
+        // 弹窗model
89
+        models: {
90
+          disjunctor: false,
91
+        },
92
+        // 切换院区弹窗model
93
+        hosModels: {
94
+          disjunctor: false,
95
+        },
96
+        type: '',
97
+        tabType: "day",
98
+        tabNum: {},
99
+        BtData: [],
100
+        types: "今日",
101
+        tabNums: "", //数量
102
+        tabScores: "", //积分
103
+        sxbType: false,
104
+        userData: {},
105
+        // 图表数据
106
+        cWidth: "",
107
+        cHeight: "",
108
+        pixelRatio: 1,
109
+        serverData: "",
110
+        canvaRing: null,
111
+        TBLoading: false,
112
+      };
113
+    },
114
+    components: {
115
+      showModel,
116
+      changeHospital,
117
+    },
118
+    methods: {
119
+      // 切换院区-确认
120
+      hosOk(hosId) {
121
+        this.hosModels.disjunctor = false;
122
+        uni.showLoading({
123
+          title: '正在加载中',
124
+          mask: true
125
+        });
126
+        let type = '';
127
+        // #ifdef APP-PLUS
128
+        type = 'APP';
129
+        // #endif
130
+        // #ifdef H5
131
+        type = 'Wechat';
132
+        // #endif
133
+        post("/auth/changeHospital", {
134
+          "currentHosId": hosId,
135
+          loginType: type
136
+        }).then(result => {
137
+          uni.hideLoading()
138
+          if (result.status == 200) {
139
+            uni.showToast({
140
+              icon: 'success',
141
+              title: '切换院区成功'
142
+            });
143
+            let userData = uni.getStorageSync('userData');
144
+            console.log(userData)
145
+            userData.user.currentHospital = result.user.user.currentHospital;
146
+            uni.setStorageSync('userData', userData);
147
+            this.tab("day", "今日");
148
+          } else {
149
+            uni.showToast({
150
+              icon: 'none',
151
+              title: '切换院区失败'
152
+            });
153
+          }
154
+        })
155
+      },
156
+      // 切换院区-取消
157
+      hosCancel() {
158
+        this.hosModels.disjunctor = false;
159
+      },
160
+      // 切换院区
161
+      changeHospital() {
162
+        this.hosModels = {
163
+          title: '切换院区',
164
+          disjunctor: true,
165
+        }
166
+      },
167
+      // 绘图
168
+      showRing(canvasId, chartData) {
169
+        this.canvaRing = new uCharts({
170
+          $this: this,
171
+          canvasId: canvasId,
172
+          type: "ring",
173
+          fontSize: 11,
174
+          padding: [5, 5, 5, 5],
175
+          legend: {
176
+            show: false, //右侧描述
177
+            position: "right",
178
+            float: "center",
179
+            itemGap: 10,
180
+            padding: 5,
181
+            lineHeight: 26,
182
+            margin: 5,
183
+            borderWidth: 1,
184
+          },
185
+          background: "#FFFFFF",
186
+          pixelRatio: this.pixelRatio,
187
+          series: chartData.series,
188
+          animation: true,
189
+          width: this.cWidth * this.pixelRatio,
190
+          height: this.cHeight * this.pixelRatio,
191
+          disablePieStroke: true,
192
+          dataLabel: false, //折线描述
193
+          subtitle: {
194
+            name: "",
195
+            color: "#7cb5ec",
196
+            fontSize: 25 * this.pixelRatio,
197
+          },
198
+          title: {
199
+            name: "",
200
+            color: "#666666",
201
+            fontSize: 15 * this.pixelRatio,
202
+          },
203
+          extra: {
204
+            pie: {
205
+              offsetAngle: 0,
206
+              ringWidth: 28 * this.pixelRatio,
207
+              labelWidth: 15,
208
+            },
209
+          },
210
+        });
211
+        this.TBLoading = false;
212
+        uni.hideLoading();
213
+      },
214
+      touchRing(e) {
215
+        this.canvaRing.touchLegend(e, {
216
+          animation: false,
217
+        });
218
+        this.canvaRing.showToolTip(e, {
219
+          format: function(item) {
220
+            return item.name + ":" + item.data;
221
+          },
222
+        });
223
+      },
224
+      // 查看明细
225
+      my_list(type) {
226
+        uni.navigateTo({
227
+          url: `../my_list/my_list?type=${type}`,
228
+        });
229
+      },
230
+      // 获取启动中的工作分配方案
231
+      getWorkSchemeAndRule() {
232
+        return post("/auth/getUserWorkDept", {});
233
+      },
234
+      // 获取执行中列表
235
+      getWorkingNum() {
236
+        return post("/workerOrder/executingOrders", {
237
+          "idx": 0,
238
+          "sum": 1
239
+        });
240
+      },
241
+      //上下班弹窗确定
242
+      ok() {
243
+        this.models.disjunctor = false;
244
+        let setDeptConfg = uni.getStorageSync("setDeptConfg");
245
+        if (this.type == "on") {
246
+          uni.redirectTo({
247
+            url: `../homePage/homePage`,
248
+          });
249
+        } else if (this.type == "off") {
250
+          uni.showLoading({
251
+            title: "加载中",
252
+            mask: true,
253
+          });
254
+          // 判断当前启用的工作方案是自主还是综合排班
255
+          this.getWorkSchemeAndRule().then((ress) => {
256
+            if (ress.status == 200) {
257
+              let workType = ress.settings ? ress.settings.workType : -1; //1是综合,2是自主
258
+              let ruleType = ress.settings ? ress.settings.ruleType : -1; //3是科室绑定人员
259
+              // 自主下班,并且是科室绑定人员
260
+              if (workType == 2 && ruleType == 3) {
261
+                post("/auth/onOrOffLine", {
262
+                  type: "off",
263
+                  customWorking: "off",
264
+                }).then((res) => {
265
+                  uni.hideLoading();
266
+                  if (res.status == 200) {
267
+                    let obj = uni.getStorageSync("userData");
268
+                    obj.user.online = false;
269
+                    if (uni.getStorageSync("setDeptConfg")) {
270
+                      uni.removeStorageSync("setDeptConfg"); //清空选择的科室配置,初始化
271
+                    }
272
+                    if (uni.getStorageSync("setDepts")) {
273
+                      uni.removeStorageSync("setDepts"); //清空选择的科室,初始化
274
+                    }
275
+                    uni.setStorageSync("userData", obj);
276
+                    this.getCurrentUser();
277
+                    this.getTabData();
278
+                  } else {
279
+                    uni.showToast({
280
+                      icon: "none",
281
+                      title: "请求失败!",
282
+                    });
283
+                  }
284
+                });
285
+              } else {
286
+                post("/auth/onOrOffLine", {
287
+                  type: "off"
288
+                }).then((res) => {
289
+                  uni.hideLoading();
290
+                  if (res.status == 200) {
291
+                    if (uni.getStorageSync("setDeptConfg")) {
292
+                      uni.removeStorageSync("setDeptConfg"); //清空选择的科室配置,初始化
293
+                    }
294
+                    if (uni.getStorageSync("setDepts")) {
295
+                      uni.removeStorageSync("setDepts"); //清空选择的科室,初始化
296
+                    }
297
+                    let obj = uni.getStorageSync("userData");
298
+                    obj.user.online = false;
299
+                    uni.setStorageSync("userData", obj);
300
+                    this.getCurrentUser();
301
+                    this.getTabData();
302
+                  } else {
303
+                    uni.showToast({
304
+                      icon: "none",
305
+                      title: "请求失败!",
306
+                    });
307
+                  }
308
+                });
309
+              }
310
+            } else {
311
+              uni.hideLoading();
312
+              uni.showToast({
313
+                icon: "none",
314
+                title: "请求失败!",
315
+              });
316
+            }
317
+          });
318
+        }
319
+      },
320
+      //上下班弹窗取消
321
+      cancel() {
322
+        this.models.disjunctor = false;
323
+      },
324
+      // 上下班
325
+      async GoWork() {
326
+        let types = "";
327
+        let workingNum = 0;
328
+        if (this.userData.online) {
329
+          //有online为上班 传off
330
+          this.type = "off";
331
+          uni.showLoading({
332
+            title: '加载中',
333
+            mask: true
334
+          });
335
+          let workingNumResult = await this.getWorkingNum();
336
+          uni.hideLoading();
337
+          if (workingNumResult.status == 200) {
338
+            workingNum = workingNumResult.data.data.length;
339
+          }
340
+          if (workingNum) {
341
+            types = "您还<b style='color:red'>有未完成的工单</b>,确定下班后,<b style='color:red'>未完成工单将不计算积分。</b>";
342
+          } else {
343
+            types = "确定是否下班 ?";
344
+          }
345
+        } else {
346
+          this.type = "on";
347
+          types = "确定是否上班 ?";
348
+        }
349
+        this.models = {
350
+          disjunctor: true,
351
+          title: this.type == 'off' ? '下班提醒' : "上班提醒",
352
+          content: types,
353
+          icon: "warn",
354
+          operate: {
355
+            ok: "确定",
356
+            cancel: "取消",
357
+          },
358
+        };
359
+      },
360
+      //环形图数据
361
+      getBtData() {
362
+        get("/api/countOrderTypesByDate/" + this.tabType).then((res) => {
363
+          if (res.status == 200) {
364
+            this.BtData = [];
365
+            let color = [
366
+              "#39B199",
367
+              "#56BAB6",
368
+              "#A4C4C1",
369
+              "#48717F",
370
+              "#07863C",
371
+              "#BEE1A7",
372
+            ];
373
+            for (var i = 0; i < res.data.length; i++) {
374
+              let data = {
375
+                value: Number,
376
+                name: "",
377
+                itemStyle: {
378
+                  color: "",
379
+                },
380
+              };
381
+              data.value = Number(res.data[i].num);
382
+              data.percent = res.data[i].percent;
383
+              data.name = res.data[i].name;
384
+              data.itemStyle.color = color[i];
385
+              this.BtData.push(data);
386
+            }
387
+            let Ring = {
388
+              series: [],
389
+            };
390
+            let dataRing = res.data.map((item) => {
391
+              return {
392
+                name: item.name,
393
+                data: item.num - 0,
394
+              };
395
+            });
396
+            //这里我后台返回的是数组,所以用等于,如果您后台返回的是单条数据,需要push进去
397
+            Ring.series = dataRing;
398
+            console.log(this.tabNums);
399
+            if (this.tabNums > 0) {
400
+              this.showRing("canvasRing", Ring);
401
+            } else {
402
+              this.TBLoading = false;
403
+              uni.hideLoading();
404
+            }
405
+          } else {
406
+            this.TBLoading = false;
407
+            uni.hideLoading();
408
+            uni.showToast({
409
+              icon: "none",
410
+              title: "请求失败!",
411
+            });
412
+          }
413
+        });
414
+      },
415
+      //tab数据
416
+      getTabData() {
417
+        this.TBLoading = true;
418
+        uni.showLoading({
419
+          title: "加载中",
420
+          mask: true,
421
+        });
422
+        get("/api/countOrderByDate").then((res) => {
423
+          this.tabNum = res;
424
+          if (this.tabType == "day") {
425
+            this.tabNums = this.tabNum.day;
426
+            this.tabScores = this.tabNum.dayTotal;
427
+          }
428
+          if (this.tabType == "week") {
429
+            this.tabNums = this.tabNum.week;
430
+            this.tabScores = this.tabNum.weekTotal;
431
+          }
432
+          if (this.tabType == "month") {
433
+            this.tabNums = this.tabNum.month;
434
+            this.tabScores = this.tabNum.monthTotal;
435
+          }
436
+          this.getBtData();
437
+        });
438
+      },
439
+      // 本日,本周,本月
440
+      tab(type, types) {
441
+        this.types = types;
442
+        this.tabType = type;
443
+        this.getTabData();
444
+      },
445
+      // 获取当前用户信息
446
+      getCurrentUser() {
447
+        if (uni.getStorageSync("userData")) {
448
+          this.userData = uni.getStorageSync("userData").user;
449
+        } else {
450
+          this.userData = {};
451
+        }
452
+      },
453
+    },
454
+    onLoad(options) {
455
+      this.getCurrentUser();
456
+      //#ifdef H5
457
+      if (options.login == 1) {
458
+        uni.redirectTo({
459
+          url: "../homePage/homePage?type=mypage",
460
+        });
461
+      }
462
+      //#endif
463
+      this.tab("day", "今日");
464
+
465
+      //图表
466
+      this.cWidth = uni.upx2px(500);
467
+      this.cHeight = uni.upx2px(500);
468
+      // #ifdef APP-PLUS
469
+      webHandle("no", "app");
470
+      // #endif
471
+      // #ifdef H5
472
+      webHandle("no", "wx");
473
+      // #endif
474
+    },
475
+  };
476
+</script>
477
+<style lang="less">
478
+  .mypage {
479
+    .charts {
480
+      width: 625upx;
481
+      height: 500upx;
482
+      background-color: #ffffff;
483
+    }
484
+
485
+    .canvasRing_wrap {
486
+      background-color: #ffffff;
487
+    }
488
+
489
+    #canvasRing {
490
+      left: 50%;
491
+      margin-left: -250rpx;
492
+    }
493
+
494
+    .myTop {
495
+      height: 390rpx;
496
+      background-image: url(../../static/img/BG_xiaban.png);
497
+      background-repeat: no-repeat;
498
+      background-size: 100% 100%;
499
+
500
+      .goWork {
501
+        margin: 0 auto 20rpx auto;
502
+        padding-top: 30rpx;
503
+        width: 240rpx;
504
+        height: 240rpx;
505
+
506
+        .goWork_btn_E {
507
+          width: 100%;
508
+          height: 100%;
509
+          background: #bee1a7;
510
+          border-radius: 30%;
511
+          text-align: center;
512
+
513
+          .goWork_btn_W {
514
+            width: 75%;
515
+            height: 75%;
516
+            background-image: linear-gradient(to right, #72c172, #3bb197);
517
+            border-radius: 30%;
518
+            margin: 0 auto;
519
+            /*水平居中*/
520
+            position: relative;
521
+            /*脱离文档流*/
522
+            top: 12.5%;
523
+            /*偏移*/
524
+            line-height: 180rpx;
525
+            color: #fff;
526
+            font-size: 36rpx;
527
+          }
528
+
529
+          .goWork_btn_X {
530
+            width: 75%;
531
+            height: 75%;
532
+            background-image: linear-gradient(to left, #72c172, #3bb197);
533
+            border-radius: 30%;
534
+            margin: 0 auto;
535
+            /*水平居中*/
536
+            position: relative;
537
+            /*脱离文档流*/
538
+            top: 12.5%;
539
+            /*偏移*/
540
+            line-height: 180rpx;
541
+            color: #fff;
542
+            font-size: 36rpx;
543
+          }
544
+        }
545
+      }
546
+
547
+      .topText {
548
+        font-size: 36rpx;
549
+        text-align: center;
550
+
551
+        .topTextHeader {
552
+          display: flex;
553
+          justify-content: center;
554
+          align-items: center;
555
+
556
+          .changeHospital {
557
+            margin-left: 16rpx;
558
+            margin-right: 0;
559
+          }
560
+        }
561
+      }
562
+    }
563
+
564
+    .myCont {
565
+      .myCont_top {
566
+        text-align: left;
567
+        line-height: 90rpx;
568
+        height: 90rpx;
569
+        background: rgb(229, 233, 237);
570
+        padding-left: 10rpx;
571
+        padding-right: 10rpx;
572
+
573
+        .myCont_topL {
574
+          float: left;
575
+          width: 60%;
576
+          height: 100%;
577
+          overflow: hidden;
578
+          text-overflow: ellipsis;
579
+          white-space: nowrap;
580
+        }
581
+
582
+        .myCont_topR {
583
+          width: 35%;
584
+          height: 100%;
585
+          float: right;
586
+          overflow: hidden;
587
+          text-overflow: ellipsis;
588
+          white-space: nowrap;
589
+        }
590
+      }
591
+
592
+      .myCont_cont {
593
+        .myCont_cont_tab {
594
+          height: 90rpx;
595
+          line-height: 90rpx;
596
+          font-size: 32rpx;
597
+          border-bottom: 4rpx solid rgb(229, 233, 237);
598
+
599
+          view {
600
+            float: left;
601
+            width: 33%;
602
+            height: 100%;
603
+            text-align: center;
604
+          }
605
+        }
606
+
607
+        .TB {
608
+          position: relative;
609
+
610
+          .TB_inner {
611
+            display: flex;
612
+            justify-content: space-between;
613
+            align-items: center;
614
+            background-color: #fff;
615
+            margin-top: 26rpx;
616
+
617
+            .tbTitle {
618
+              font-size: 32rpx;
619
+              color: rgb(72, 113, 127);
620
+              font-weight: 500;
621
+              margin-left: 10rpx;
622
+            }
623
+
624
+            .tbText {
625
+              font-size: 32rpx;
626
+              color: rgb(72, 113, 127);
627
+              margin-right: 10rpx;
628
+            }
629
+          }
630
+        }
631
+
632
+        .TB1 {
633
+          height: 200rpx;
634
+
635
+          .title {
636
+            text-align: left;
637
+            font-size: 32rpx;
638
+            color: rgb(72, 113, 127);
639
+            font-weight: 500;
640
+            margin-top: 26rpx;
641
+            padding-left: 10rpx;
642
+          }
643
+
644
+          .cont {
645
+            font-size: 36rpx;
646
+            margin-top: 30rpx;
647
+            text-align: center;
648
+          }
649
+        }
650
+
651
+        .acts {
652
+          color: rgb(73, 184, 86);
653
+          border-bottom: 2rpx solid rgb(73, 184, 86);
654
+        }
655
+
656
+        .TB_list {
657
+          width: 100%;
658
+          text-align: left;
659
+
660
+          view {
661
+            height: 84rpx;
662
+            line-height: 84rpx;
663
+            border-bottom: 2rpx solid rgb(229, 233, 237);
664
+            padding: 0 10rpx;
665
+            font-size: 32rpx;
666
+
667
+            .TB_list_L {
668
+              float: left;
669
+            }
670
+
671
+            .TB_list_R {
672
+              float: right;
673
+
674
+              text {
675
+                font-size: 28rpx;
676
+              }
677
+            }
678
+          }
679
+        }
680
+      }
681
+    }
682
+  }
683
+</style>

+ 193 - 0
pages/patientInformationInfo/patientInformationInfo.vue

@@ -0,0 +1,193 @@
1
+<template>
2
+  <view class="patientInformationInfo" v-if="Object.keys(infoDATA).length > 0">
3
+    <view class="page_head">
4
+      <view class="title">{{ infoDATA.patientName }}</view>
5
+      <view class="patientCode">{{ infoDATA.patientCode }}</view>
6
+      <view class="info">
7
+        <view class="bedNum">
8
+          <text class="info_h">床号</text>
9
+          <text class="info_b">{{ infoDATA.bedNum || "-" }}</text>
10
+        </view>
11
+        <view :class="infoDATA.careLevel?'bedNum':'waitingCount'">
12
+          <text class="info_h">待检查数</text>
13
+          <text class="info_b">{{ infoDATA.watingCount }}</text>
14
+        </view>
15
+        <view class="bedNum" v-if="infoDATA.careLevel">
16
+          <text class="info_h">护理等级</text>
17
+          <text class="info_b">{{ infoDATA.careLevel.name }}</text>
18
+        </view>
19
+        <view class="waitingCount" v-if="infoDATA.illnessState">
20
+          <text class="info_h">病情级别</text>
21
+          <text class="info_b">{{ infoDATA.illnessState.name }}</text>
22
+        </view>
23
+      </view>
24
+    </view>
25
+    <view class="page_item" v-for="item in infoDATA.inspects" :key="item.id">
26
+      <view class="page_item_info">
27
+        <view class="page_item_info_title">检查项目:<text>{{ item.inspectName || "-" }}</text></view>
28
+        <view class="page_item_info_title">检查科室:<text>{{
29
+            item.execDept ? item.execDept.dept : "-"
30
+          }}</text></view>
31
+        <view class="page_item_info_title">预约时间:<text>{{ item.yyTime || "-" }}</text></view>
32
+        <view class="page_item_info_title">预约叫号:<text>{{ item.reservationNumber || "-" }}</text></view>
33
+      </view>
34
+    </view>
35
+    <view v-if="infoDATA.inspects.length == 0" class="zwsj">
36
+      <image class="zwsj-img" mode="widthFix" src="../../static/img/zanwushuju.png"></image>
37
+      <view class="zwsj-txt">暂无检查信息</view>
38
+    </view>
39
+  </view>
40
+</template>
41
+<script>
42
+  import {
43
+    get,
44
+    post,
45
+    SM,
46
+    webHandle
47
+  } from "../../http/http.js";
48
+  export default {
49
+    data() {
50
+      return {
51
+        infoDATA: {},
52
+      };
53
+    },
54
+    methods: {
55
+      // 请求详细页面的数据
56
+      getInfo(patientCode) {
57
+        uni.showLoading({
58
+          title: "加载中",
59
+          mask: true,
60
+        });
61
+        post("/nurse/workOrder/getPatientInspectInfo", {
62
+          patientCode,
63
+        }).then((res) => {
64
+          uni.hideLoading();
65
+          if (res.status == 200) {
66
+            this.infoDATA = res.data;
67
+          } else {
68
+            uni.showToast({
69
+              icon: "none",
70
+              title: "请求失败!",
71
+            });
72
+          }
73
+        });
74
+      },
75
+    },
76
+    onLoad(options) {
77
+      let {
78
+        patientCode
79
+      } = options;
80
+      this.getInfo(patientCode);
81
+      // #ifdef APP-PLUS
82
+      webHandle("no", "app");
83
+      // #endif
84
+      // #ifdef H5
85
+      webHandle("no", "wx");
86
+      // #endif
87
+    },
88
+  };
89
+</script>
90
+<style lang="less">
91
+  .patientInformationInfo {
92
+    padding: 0 20rpx;
93
+    overflow: hidden;
94
+
95
+    .zwsj {
96
+      text-align: center;
97
+
98
+      .zwsj-img {
99
+        width: 560rpx;
100
+      }
101
+
102
+      .zwsj-txt {
103
+        font-size: 36rpx;
104
+        font-weight: 700;
105
+        margin-top: 20rpx;
106
+        text-align: center;
107
+      }
108
+    }
109
+
110
+    .page_head {
111
+      background-color: #49b856;
112
+      color: #fff;
113
+
114
+      .title {
115
+        font-size: 48rpx;
116
+        padding-top: 24rpx;
117
+        text-align: center;
118
+      }
119
+
120
+      .patientCode {
121
+        padding-bottom: 12rpx;
122
+        font-size: 28rpx;
123
+        text-align: center;
124
+      }
125
+
126
+      .info {
127
+        padding-bottom: 24rpx;
128
+        margin: 8rpx 0;
129
+        height: 80rpx;
130
+        display: flex;
131
+        justify-content: center;
132
+        align-items: center;
133
+
134
+        .bedNum,
135
+        .waitingCount {
136
+          width: 300rpx;
137
+          height: 100%;
138
+          display: flex;
139
+          flex-direction: column;
140
+          justify-content: center;
141
+          align-items: center;
142
+
143
+          .info_h {
144
+            font-size: 30rpx;
145
+          }
146
+
147
+          .info_b {
148
+            font-size: 26rpx;
149
+          }
150
+        }
151
+
152
+        .bedNum {
153
+          position: relative;
154
+
155
+          &:after {
156
+            content: "";
157
+            position: absolute;
158
+            width: 4rpx;
159
+            height: 50rpx;
160
+            right: -2rpx;
161
+            top: 15rpx;
162
+            background-color: #fff;
163
+          }
164
+        }
165
+      }
166
+    }
167
+
168
+    .page_item {
169
+      margin-top: 16rpx;
170
+      margin-bottom: 16rpx;
171
+      background: #fff;
172
+      border-radius: 8rpx;
173
+      overflow: hidden;
174
+      padding: 0 16rpx;
175
+      border: 2rpx solid #e5e9ed;
176
+
177
+      .page_item_info {
178
+        padding: 20rpx 16rpx;
179
+        text-align: left;
180
+        line-height: 60rpx;
181
+        font-size: 30rpx;
182
+
183
+        .page_item_info_title {
184
+          font-weight: 700;
185
+
186
+          text {
187
+            font-weight: normal;
188
+          }
189
+        }
190
+      }
191
+    }
192
+  }
193
+</style>

+ 621 - 0
pages/patientInformationList/patientInformationList.vue

@@ -0,0 +1,621 @@
1
+<template>
2
+  <view class="patientInformationList">
3
+    <view class="page_tab">
4
+      <view class="page_tab_bar active">
5
+        <view class="tab_dept">{{ currenDept.dept
6
+          }}<button type="default" size="mini" class="changeDept" @click="changeDept">
7
+            切换科室
8
+          </button></view>
9
+      </view>
10
+    </view>
11
+    <view v-if="zxzData.length == 0" class="zwsj">
12
+      <image class="zwsj-img" mode="widthFix" src="../../static/img/zanwushuju.png"></image>
13
+      <view class="zwsj-txt">暂无数据</view>
14
+    </view>
15
+    <view v-if="zxzData.length" class="page_items">
16
+      <scroll-view class="page_items_scroll" scroll-y :refresher-enabled="scroll_refresher_enabled"
17
+        :refresher-triggered="triggered" @refresherrefresh="refresherrefresh" @refresherrestore="refresherrestore"
18
+        @scrolltolower="scrolltolower" :scroll-top="scroll_top" @refresherabort="refresherabort" @scroll="scroll"
19
+        refresher-background="transport">
20
+        <view class="page_item_wrap" v-for="(item, index) of zxzData" :key="index">
21
+          <view class="page_item">
22
+            <view class="L"></view>
23
+            <view class="R"></view>
24
+            <view class="page_item_top">
25
+              <view class="page_item_top_L">
26
+                <template v-if="item.illnessState">
27
+                  <text v-if="item.illnessState.value === '2'"
28
+                    class="colorRed icon_transport transport-tubiao_wei"></text>
29
+                  <text v-if="item.illnessState.value === '3'" class="colorRed icon_transport transport-zhong"></text>
30
+                </template>
31
+                <template v-if="item.careLevel">
32
+                  <text v-if="item.careLevel.value === '0'" class="icon_transport transport-te1"></text>
33
+                  <text v-if="item.careLevel.value === '1'" class="icon_transport transport-1_round_solid"></text>
34
+                  <text v-if="item.careLevel.value === '2'" class="icon_transport transport-2_round_solid"></text>
35
+                  <text v-if="item.careLevel.value === '3'" class="icon_transport transport-3_round_solid"></text>
36
+                </template>
37
+                <view class="page_item_top_R" v-show="wechatFocusSwitch == 1 && item.focusPatient == 1">
38
+                  需要帮助
39
+                </view>
40
+                <view class="page_item_top_R" style="background-color: #49b856"
41
+                  v-show="wechatFocusSwitch == 1 && !item.focusPatient">
42
+                  无需帮助
43
+                </view>
44
+              </view>
45
+              <view class="send_wrap">
46
+                <view class="sendBack">
47
+                  <button @click="sendBack(item)">送回病房</button>
48
+                </view>
49
+              </view>
50
+            </view>
51
+            <view class="page_item_cont">
52
+              <view class="page_item_conts">
53
+                <view>{{ item.patientName }}({{ item.patientCode }})</view>
54
+                <view> 床号:{{ item.bedNum || "-" }} </view>
55
+                <view> 待检:{{ item.watingCount }} </view>
56
+              </view>
57
+            </view>
58
+            <view class="page_item_btn" hover-class="seimin-btn-hover" @click="itemInfo(item.patientCode)">患者详情</view>
59
+          </view>
60
+          <view class="L-l"></view>
61
+          <view class="R-l"></view>
62
+        </view>
63
+      </scroll-view>
64
+    </view>
65
+    <!-- 底部扫一扫 -->
66
+    <bigScreen></bigScreen>
67
+    <!-- 送回病房弹窗 -->
68
+    <showModel :title="models1.title" :icon="models1.icon" :disjunctor="models1.disjunctor" :content="models1.content"
69
+      :operate="models1.operate" @ok="ok1" @cancel="cancel1"></showModel>
70
+    <!-- 送回病房建单弹窗 -->
71
+    <showModel :title="models2.title" :icon="models2.icon" :disjunctor="models2.disjunctor" :content="models2.content"
72
+      :operate="models2.operate" @ok="ok2" @cancel="cancel2"></showModel>
73
+  </view>
74
+</template>
75
+<script>
76
+  import bigScreen from "../../components/bigScreen/bigScreen.vue";
77
+  import {
78
+    get,
79
+    post,
80
+    deleteIt,
81
+    webHandle
82
+  } from "../../http/http.js";
83
+  export default {
84
+    data() {
85
+      return {
86
+        // 选中的患者项
87
+        currentItem: {},
88
+        // 送回病房弹窗model
89
+        models1: {
90
+          disjunctor: false,
91
+        },
92
+        // 送回病房建单弹窗model
93
+        models2: {
94
+          disjunctor: false,
95
+        },
96
+        scrollYY: 0, //滚动条滚动的距离
97
+        options: {},
98
+        wechatFocusSwitch: 0,
99
+        //当前登录人所属科室
100
+        currenDept: {},
101
+        // 抢单的id
102
+        qdId: "",
103
+        //列表数据
104
+        zxzData: [],
105
+        //分页页码
106
+        idx: 0,
107
+        // 列表项总数
108
+        totalNum: -1,
109
+        triggered: false, //下拉刷新状态
110
+        freshing: false, //上拉加载开关
111
+        scroll_top: 0, //距离顶部的距离
112
+        scroll_refresher_enabled: true, //是否开启自定义下拉刷新
113
+      };
114
+    },
115
+    components: {
116
+      bigScreen,
117
+    },
118
+    methods: {
119
+      ok2() {
120
+        this.models2.disjunctor = false;
121
+        let currentItem = JSON.parse(this.options.currentItem);
122
+        uni.showLoading({
123
+          mask: true,
124
+          title: '加载中'
125
+        })
126
+        let userId = uni.getStorageSync("userData").user.id;
127
+        let postData = {
128
+          "workOrder": {
129
+            "startDept": {
130
+              "id": this.options.did
131
+            },
132
+            "createDept": this.options.did,
133
+            "patient": {
134
+              "patientCode": currentItem.patientCode
135
+            },
136
+            "worker": {
137
+              "id": userId
138
+            }
139
+          }
140
+        };
141
+        post("/workerOrder/returnSickRoom", postData).then((res) => {
142
+          uni.hideLoading();
143
+          if (res.status == 200) {
144
+            uni.showToast({
145
+              icon: 'success',
146
+              title: '建单成功',
147
+            });
148
+          } else {
149
+            uni.showToast({
150
+              icon: "none",
151
+              title: "请求失败!",
152
+            });
153
+          }
154
+        })
155
+      },
156
+      cancel2() {
157
+        this.models2.disjunctor = false;
158
+      },
159
+      // 送回病房-建单
160
+      sendBuild() {
161
+        let currentItem = JSON.parse(this.options.currentItem);
162
+        this.models2 = {
163
+          disjunctor: true,
164
+          title: "提示",
165
+          content: `您选择的起点科室为【${this.options.ddept}】,您将从【${this.options.ddept}】把【${currentItem.patientName}】送回【${this.options.dept}】,如您确认请点击“确认建单”。`,
166
+          icon: "warn",
167
+          operate: {
168
+            ok: "确认建单",
169
+            cancel: "取消",
170
+          },
171
+        };
172
+      },
173
+      // 送回病房-选择起点科室
174
+      sendBack(item) {
175
+        this.currentItem = item;
176
+        this.models1 = {
177
+          disjunctor: true,
178
+          title: "提示",
179
+          content: `您好,您是要将【${item.patientName}】送回病房吗?如确认请您点击“选择起点科室”建立工单。`,
180
+          icon: "warn",
181
+          operate: {
182
+            ok: "选择起点科室",
183
+            cancel: "取消",
184
+          },
185
+        };
186
+      },
187
+      ok1() {
188
+        this.models1.disjunctor = false;
189
+        uni.navigateTo({
190
+          url: `../search/search?type=sendBackPatientList&currentItem=${JSON.stringify(this.currentItem)}&cid=${this.currenDept.id}&cdept=${this.currenDept.dept}&scrollYY=${this.scrollYY}`,
191
+        });
192
+      },
193
+      cancel1() {
194
+        this.models1.disjunctor = false;
195
+      },
196
+      // 切换科室
197
+      changeDept() {
198
+        uni.navigateTo({
199
+          url: `../search/search?type=patientInformationList`,
200
+        });
201
+      },
202
+      // 进入详情页
203
+      itemInfo(patientCode) {
204
+        // #ifdef H5
205
+        document.body.removeEventListener("touchmove", this.stop, {
206
+          passive: false,
207
+        });
208
+        // #endif
209
+        uni.navigateTo({
210
+          url: `../patientInformationInfo/patientInformationInfo?patientCode=${patientCode}`,
211
+        });
212
+      },
213
+      //患者列表数据获取
214
+      waitingOrders(idx) {
215
+        if (this.zxzData.length == this.totalNum) {
216
+          uni.showToast({
217
+            icon: "none",
218
+            title: "没有更多数据了!",
219
+          });
220
+          this.freshing = true;
221
+          return;
222
+        }
223
+        let data = {
224
+          idx,
225
+          sum: 99999,
226
+          patient: {
227
+            department: {
228
+              id: this.currenDept.id,
229
+            },
230
+          },
231
+        };
232
+        uni.showLoading({
233
+          title: "加载中",
234
+          mask: true,
235
+        });
236
+        // 请求列表数据
237
+        post("/nurse/fetchDataList/patient", data).then((res) => {
238
+          uni.hideLoading();
239
+          if (res.status == 200) {
240
+            this.triggered = false;
241
+            this.freshing = true;
242
+            this.totalNum = res.totalNum;
243
+            if (idx === 0) {
244
+              this.zxzData = res.list;
245
+            } else {
246
+              this.zxzData.push(...res.list);
247
+            }
248
+          } else {
249
+            uni.showToast({
250
+              icon: "none",
251
+              title: "请求失败!",
252
+            });
253
+          }
254
+        });
255
+      },
256
+      //刷新
257
+      refresherrefresh() {
258
+        if (this.triggered) {
259
+          return;
260
+        }
261
+        console.log("下拉刷新");
262
+        this.triggered = true;
263
+        this.idx = 0;
264
+        this.totalNum = -1;
265
+        this.waitingOrders(0);
266
+      },
267
+      // 下拉刷新复位
268
+      refresherrestore() {
269
+        this.triggered = false;
270
+        console.log("下拉刷新复位");
271
+      },
272
+      //下拉刷新中止
273
+      refresherabort() {
274
+        this.triggered = false;
275
+        console.log("下拉刷新中止");
276
+      },
277
+      //分页,上拉加载
278
+      scrolltolower() {
279
+        if (this.freshing) {
280
+          console.log("上拉加载");
281
+          this.freshing = false;
282
+          this.waitingOrders(++this.idx);
283
+        }
284
+      },
285
+      // 滚动
286
+      scroll(e) {
287
+        this.scrollYY = e.detail.scrollTop;
288
+        if (e.detail.scrollTop < 20) {
289
+          this.scroll_refresher_enabled = true;
290
+        } else {
291
+          this.scroll_refresher_enabled = false;
292
+        }
293
+      },
294
+      // 阻止浏览器滑动
295
+      stop(e) {
296
+        e.preventDefault();
297
+      },
298
+      // 获取需要帮助权限
299
+      getWechatFocusSwitch() {
300
+        let postData = {
301
+          idx: 0,
302
+          sum: 1,
303
+          taskType: {
304
+            hosIds: this.hosId,
305
+            associationType: {
306
+              id: 260,
307
+            },
308
+          },
309
+        };
310
+        post("/configuration/fetchDataList/taskType", postData).then((res) => {
311
+          if (res.status == 200) {
312
+            this.wechatFocusSwitch = res.list[0].wechatFocusSwitch;
313
+          } else {
314
+            uni.showToast({
315
+              icon: "none",
316
+              title: "请求失败!",
317
+            });
318
+          }
319
+        });
320
+      },
321
+    },
322
+    onLoad(options) {
323
+      console.log(options);
324
+      this.options = options;
325
+      //滚动条位置设置
326
+      if (options.scrollYY !== undefined) {
327
+        this.scroll_top = options.scrollYY;
328
+      }
329
+      if (options.did && options.ddept && options.currentItem) {
330
+        this.sendBuild();
331
+      }
332
+      let patientCurrentDept = uni.getStorageSync("patientCurrentDept");
333
+      if (options.id && options.dept) {
334
+        let {
335
+          id,
336
+          dept
337
+        } = options;
338
+        this.currenDept.id = id;
339
+        this.currenDept.dept = dept;
340
+      } else if (patientCurrentDept) {
341
+        this.currenDept.id = patientCurrentDept.id;
342
+        this.currenDept.dept = patientCurrentDept.dept;
343
+      } else {
344
+        this.currenDept = uni.getStorageSync("userData").user.dept;
345
+      }
346
+      this.getWechatFocusSwitch();
347
+      this.waitingOrders(0);
348
+      // #ifdef APP-PLUS
349
+      webHandle("no", "app");
350
+      // #endif
351
+      // #ifdef H5
352
+      webHandle("no", "wx");
353
+      // #endif
354
+    },
355
+    onShow() {
356
+      // #ifdef H5
357
+      document.body.addEventListener("touchmove", this.stop, {
358
+        passive: false,
359
+      });
360
+      // #endif
361
+    },
362
+    onHide() {
363
+      // #ifdef H5
364
+      document.body.removeEventListener("touchmove", this.stop, {
365
+        passive: false,
366
+      });
367
+      // #endif
368
+    },
369
+  };
370
+</script>
371
+<style lang="less">
372
+  .patientInformationList {
373
+    width: 100%;
374
+    height: 100%;
375
+    position: relative;
376
+
377
+    .icon_transport {
378
+      color: #49b856;
379
+      font-size: 50rpx;
380
+
381
+      &.colorRed {
382
+        color: red;
383
+        font-size: 40rpx;
384
+      }
385
+    }
386
+
387
+    .page_tab {
388
+      width: 100%;
389
+      height: 96rpx;
390
+      display: flex;
391
+      position: fixed;
392
+      left: 0;
393
+      top: 0;
394
+      z-index: 999;
395
+
396
+      .page_tab_bar {
397
+        flex: 1;
398
+        font-size: 36rpx;
399
+        background: #fff;
400
+        display: flex;
401
+        justify-content: center;
402
+        align-items: center;
403
+        position: relative;
404
+
405
+        &:after {
406
+          content: "";
407
+          position: absolute;
408
+          left: 0;
409
+          bottom: 0;
410
+          height: 2rpx;
411
+          width: 100%;
412
+          background-color: transparent;
413
+        }
414
+
415
+        .tab_dept {
416
+          position: relative;
417
+
418
+          .changeDept {
419
+            white-space: nowrap;
420
+            margin: 0;
421
+            position: absolute;
422
+            right: 0;
423
+            top: 50%;
424
+            transform: translate(105%, -50%);
425
+            padding: 0 0.5em;
426
+            line-height: 2;
427
+          }
428
+        }
429
+
430
+        &.active {
431
+          color: #49b856;
432
+
433
+          &:after {
434
+            background-color: #49b856;
435
+          }
436
+        }
437
+      }
438
+    }
439
+
440
+    .zwsj {
441
+      position: absolute;
442
+      left: 50%;
443
+      top: 180rpx;
444
+      transform: translateX(-50%);
445
+
446
+      .zwsj-img {
447
+        width: 560rpx;
448
+      }
449
+
450
+      .zwsj-txt {
451
+        font-size: 36rpx;
452
+        font-weight: 700;
453
+        margin-top: 20rpx;
454
+        text-align: center;
455
+      }
456
+    }
457
+
458
+    .page_items {
459
+      height: calc(100vh - 184rpx);
460
+      padding: 0 20rpx;
461
+      padding-top: 96rpx;
462
+
463
+      .page_items_scroll {
464
+        height: 100%;
465
+
466
+        .page_item_wrap {
467
+          position: relative;
468
+          margin-bottom: 32rpx;
469
+
470
+          .page_item {
471
+            margin-bottom: 16rpx;
472
+            height: 276rpx;
473
+            background: #fff;
474
+            border-radius: 8rpx;
475
+            overflow: hidden;
476
+            border: 2rpx solid #e5e9ed;
477
+            display: flex;
478
+            flex-direction: column;
479
+            justify-content: space-between;
480
+
481
+            .L {
482
+              width: 40rpx;
483
+              height: 40rpx;
484
+              border-radius: 50%;
485
+              background: #f9fafb;
486
+              position: absolute;
487
+              left: -24rpx;
488
+              top: 68rpx;
489
+              border: 2rpx solid #e5e9ed;
490
+            }
491
+
492
+            .R {
493
+              width: 40rpx;
494
+              height: 40rpx;
495
+              border-radius: 50%;
496
+              background: #f9fafb;
497
+              position: absolute;
498
+              float: right;
499
+              right: -24rpx;
500
+              top: 68rpx;
501
+              border: 2rpx solid #e5e9ed;
502
+            }
503
+
504
+            .page_item_top {
505
+              height: 86rpx;
506
+              border-bottom: 2rpx dashed #e5e9ed;
507
+              padding: 0 16rpx;
508
+              display: flex;
509
+              align-items: center;
510
+              justify-content: space-between;
511
+
512
+              .send_wrap {
513
+                display: flex;
514
+                justify-content: space-between;
515
+                align-items: center;
516
+              }
517
+
518
+              .sendBack {
519
+                button {
520
+                  font-size: 28rpx;
521
+                  height: 52rpx;
522
+                  line-height: 52rpx;
523
+                  margin: 0;
524
+                  color: rgb(7, 134, 60);
525
+                }
526
+              }
527
+
528
+              .page_item_top_L {
529
+                height: 100%;
530
+                float: left;
531
+                display: flex;
532
+                align-items: center;
533
+                line-height: 88rpx;
534
+
535
+                .L_time {
536
+                  color: #6cc076;
537
+                  font-size: 32rpx;
538
+                }
539
+              }
540
+
541
+              .page_item_top_R {
542
+                height: 40rpx;
543
+                float: right;
544
+                line-height: 40rpx;
545
+                font-size: 24rpx;
546
+                padding: 0 8rpx;
547
+                background-color: red;
548
+                color: #fff;
549
+              }
550
+            }
551
+
552
+            .page_item_cont {
553
+              min-height: 100rpx;
554
+              max-height: 344rpx;
555
+              padding: 0 16rpx;
556
+              text-align: left;
557
+              position: relative;
558
+
559
+              .page_item_conts {
560
+                color: rgb(102, 102, 102);
561
+                font-size: 28rpx;
562
+                display: flex;
563
+                align-items: center;
564
+                min-height: 100rpx;
565
+                max-height: 344rpx;
566
+
567
+                view {
568
+                  margin-bottom: 10rpx;
569
+                  margin-left: 40rpx;
570
+
571
+                  &:first-of-type {
572
+                    margin-left: 0;
573
+                  }
574
+                }
575
+
576
+                text {
577
+                  color: #49b856;
578
+                }
579
+
580
+                .num {
581
+                  float: right;
582
+                }
583
+              }
584
+            }
585
+
586
+            .page_item_btn {
587
+              height: 88rpx;
588
+              background-image: linear-gradient(to right, #72c172, #3bb197);
589
+              border-radius: 8rpx;
590
+              line-height: 88rpx;
591
+              color: #fff;
592
+              font-size: 36rpx;
593
+              font-weight: 700;
594
+              text-align: center;
595
+            }
596
+          }
597
+
598
+          .L-l {
599
+            width: 2rpx;
600
+            height: 40rpx;
601
+            background: #f9fafb;
602
+            position: absolute;
603
+            left: 20rpx;
604
+            top: 72rpx;
605
+            display: none;
606
+          }
607
+
608
+          .R-l {
609
+            width: 2rpx;
610
+            height: 40rpx;
611
+            background: #f9fafb;
612
+            position: absolute;
613
+            right: 20rpx;
614
+            top: 72rpx;
615
+            display: none;
616
+          }
617
+        }
618
+      }
619
+    }
620
+  }
621
+</style>

+ 536 - 0
pages/pharmacy/pharmacy.vue

@@ -0,0 +1,536 @@
1
+<template>
2
+  <view class="pharmacy">
3
+    <view
4
+      class="scanning_btn"
5
+      hover-class="seimin-btn-hover"
6
+      @click="drugsScanning()"
7
+    >
8
+      <text class="icon_transport transport-saoma"></text>
9
+    </view>
10
+    <view class="scanFont">扫一扫</view>
11
+    <view class="pharmacy-heng">
12
+      <view
13
+        class="pharmacy-heng-tab"
14
+        :class="{ 'cube-tab_active': selectedLabelSlots === item.label }"
15
+        v-for="(item, i) in tabs"
16
+        :key="i"
17
+        @click="clickHandler(item.label)"
18
+      >
19
+        <view class="pharmacy-heng-label">{{ item.label }}</view>
20
+      </view>
21
+    </view>
22
+    <view>
23
+      <scroll-view
24
+        scroll-y
25
+        :refresher-enabled="scroll_refresher_enabled"
26
+        :refresher-triggered="triggered"
27
+        @refresherrefresh="refresherrefresh"
28
+        @refresherrestore="refresherrestore"
29
+        @scroll="scroll"
30
+        @scrolltolower="scrolltolower"
31
+        :scroll-top="scroll_top"
32
+        @refresherabort="refresherabort"
33
+      >
34
+        <view class="page_scrollIt">
35
+          <view
36
+            class="page_item_wrap"
37
+            v-for="row in list"
38
+            :key="row.id"
39
+            @click="getDetails(row.id)"
40
+          >
41
+            <view class="page_item">
42
+              <view class="page_item_top">
43
+                <view class="page_item_top-inner">
44
+                  <view class="page_item_top_L">
45
+                    <text class="L_text">请领单:{{ row.packid }}</text>
46
+                  </view>
47
+                  <view class="page_item_top_R">
48
+                    <text class="L_iocn">{{
49
+                      row.drugsState && row.drugsState.name
50
+                    }}</text>
51
+                  </view>
52
+                </view>
53
+              </view>
54
+              <view class="page_item_cont">
55
+                <view class="page_item_cont_T">
56
+                  <view class="page_item_cont_title">
57
+                    <text>批次号</text>
58
+                    <text class="text_big">{{ row.batchNo }}</text>
59
+                  </view>
60
+                </view>
61
+                <view class="page_item_cont_B">
62
+                  <view class="page_item_cont_title">
63
+                    <text>请领时间</text>
64
+                    <text class="text_big">
65
+                      <text>{{ row.creatTime }}</text>
66
+                    </text>
67
+                  </view>
68
+                </view>
69
+                <view class="page_item_cont_C">
70
+                  <view class="page_item_cont_title_C">
71
+                    <text>请领科室</text>
72
+                    <text class="text_big">
73
+                      <text>{{ row.target && row.target.dept }}</text>
74
+                    </text>
75
+                  </view>
76
+                </view>
77
+              </view>
78
+              <view class="L"></view>
79
+              <view class="R"></view>
80
+            </view>
81
+            <view class="L-l"></view>
82
+            <view class="R-l"></view>
83
+          </view>
84
+          <view v-if="list.length == 0" class="zwsj">
85
+            <image
86
+              class="zwsj_img"
87
+              mode="widthFix"
88
+              src="../../static/img/zanwushuju.png"
89
+            ></image>
90
+            <view class="zwsj_txt">暂无数据</view>
91
+          </view>
92
+        </view>
93
+      </scroll-view>
94
+    </view>
95
+  </view>
96
+</template>
97
+<script>
98
+import { get, post, SM, webHandle } from "../../http/http.js";
99
+export default {
100
+  data() {
101
+    return {
102
+      triggered: false, //下拉刷新状态
103
+      freshing: false, //上拉加载开关
104
+      scroll_top: 0, //距离顶部的距离
105
+      scroll_refresher_enabled: true, //是否开启自定义下拉刷新
106
+      selectedLabelSlots: "待配药",
107
+      list: [],
108
+      idx: 0,
109
+      totalNum: -1,
110
+      tabs: [
111
+        {
112
+          label: "待配药",
113
+        },
114
+        {
115
+          label: "配药中",
116
+        },
117
+        {
118
+          label: "核对中",
119
+        },
120
+      ],
121
+    };
122
+  },
123
+  methods: {
124
+    // tab切换
125
+    clickHandler(key) {
126
+      this.selectedLabelSlots = key;
127
+      this.idx = 0;
128
+      this.totalNum = -1;
129
+      this.scroll_top = Math.random();
130
+      //4为微信待配药、5为微信配药中、6为微信核对中
131
+      if (key == "待配药") {
132
+        this.getPharmacyListData(4, 0);
133
+      } else if (key == "配药中") {
134
+        this.getPharmacyListData(5, 0);
135
+      } else if (key == "核对中") {
136
+        this.getPharmacyListData(6, 0);
137
+      }
138
+    },
139
+    // 请求列表数据
140
+    getPharmacyListData(type, idx) {
141
+      if (this.list.length == this.totalNum) {
142
+        uni.showToast({
143
+          icon: "none",
144
+          title: "没有更多数据了!",
145
+        });
146
+        this.freshing = true;
147
+        return;
148
+      }
149
+      let data = {
150
+        idx,
151
+        sum: 20,
152
+        drugsBag: {
153
+          searchType: type,
154
+        },
155
+      };
156
+      uni.showLoading({
157
+        title: "加载中",
158
+        mask: true,
159
+      });
160
+      post("/api/fetchDataList/drugsBag", data).then((res) => {
161
+        uni.hideLoading();
162
+        if (res.status == 200) {
163
+          this.triggered = false;
164
+          this.freshing = true;
165
+          this.totalNum = res.totalNum;
166
+          if (idx === 0) {
167
+            this.list = res.list;
168
+          } else {
169
+            this.list.push(...res.list);
170
+          }
171
+        } else {
172
+          uni.showToast({
173
+            icon: "none",
174
+            title: "请求失败!",
175
+          });
176
+        }
177
+      });
178
+    },
179
+    // 扫一扫
180
+    drugsScanning() {
181
+      SM().then((ress) => {
182
+        uni.navigateTo({
183
+          url: "../pharmacyDetails/pharmacyDetails?qrcode=" + ress,
184
+        });
185
+      });
186
+    },
187
+    //刷新
188
+    refresherrefresh() {
189
+      if (this.triggered) {
190
+        return;
191
+      }
192
+      this.triggered = true;
193
+      this.idx = 0;
194
+      this.totalNum = -1;
195
+      if (this.selectedLabelSlots == "待配药") {
196
+        this.getPharmacyListData(4, 0);
197
+      } else if (this.selectedLabelSlots == "配药中") {
198
+        this.getPharmacyListData(5, 0);
199
+      } else if (this.selectedLabelSlots == "核对中") {
200
+        this.getPharmacyListData(6, 0);
201
+      }
202
+    },
203
+    // 滚动
204
+    scroll(e) {
205
+      if (e.detail.scrollTop < 20) {
206
+        this.scroll_refresher_enabled = true;
207
+      } else {
208
+        this.scroll_refresher_enabled = false;
209
+      }
210
+    },
211
+    // 下拉刷新复位
212
+    refresherrestore() {
213
+      this.triggered = false;
214
+      console.log("下拉刷新复位");
215
+    },
216
+    //下拉刷新中止
217
+    refresherabort() {
218
+      this.triggered = false;
219
+      console.log("下拉刷新中止");
220
+    },
221
+    //分页,上拉加载
222
+    scrolltolower() {
223
+      if (this.freshing) {
224
+        this.freshing = false;
225
+        if (this.selectedLabelSlots == "待配药") {
226
+          this.getPharmacyListData(4, ++this.idx);
227
+        } else if (this.selectedLabelSlots == "配药中") {
228
+          this.getPharmacyListData(5, ++this.idx);
229
+        } else if (this.selectedLabelSlots == "核对中") {
230
+          this.getPharmacyListData(6, ++this.idx);
231
+        }
232
+      }
233
+    },
234
+    // 详情页面
235
+    getDetails(id) {
236
+      uni.navigateTo({
237
+        url: `../pharmacyDetails/pharmacyDetails?id=${id}`,
238
+      });
239
+    },
240
+    // 阻止浏览器滑动
241
+    stop(e) {
242
+      e.preventDefault();
243
+    },
244
+  },
245
+  onLoad(options) {
246
+    //#ifdef H5
247
+    console.log(options.login, "login");
248
+    if (options.login == 1) {
249
+      // uni.setStorageSync('type', 'pharmacy')
250
+      uni.redirectTo({
251
+        url: "../homePage/homePage?type=pharmacy",
252
+      });
253
+    }
254
+    //#endif
255
+    // 待配药
256
+    this.getPharmacyListData(4, 0);
257
+    // #ifdef APP-PLUS
258
+    webHandle("no", "app");
259
+    // #endif
260
+    // #ifdef H5
261
+    webHandle("no", "wx");
262
+    // #endif
263
+  },
264
+  onShow() {
265
+    // #ifdef H5
266
+    document.body.addEventListener("touchmove", this.stop, { passive: false });
267
+    // #endif
268
+  },
269
+  onUnload() {
270
+    // #ifdef H5
271
+    document.body.removeEventListener("touchmove", this.stop, {
272
+      passive: false,
273
+    });
274
+    // #endif
275
+  },
276
+};
277
+</script>
278
+<style lang="less">
279
+// 覆盖cube
280
+.cube-tab-bar {
281
+  display: block !important;
282
+}
283
+
284
+.pharmacy /deep/ .cube-tab-bar-slider {
285
+  display: none !important;
286
+}
287
+
288
+.pharmacy {
289
+  background-color: rgb(249, 250, 251);
290
+  padding-top: 36rpx;
291
+
292
+  .scanning_btn {
293
+    margin: 0 auto;
294
+    width: 138rpx;
295
+    height: 138rpx;
296
+    background: #72c172;
297
+    border-radius: 50%;
298
+    /*偏移*/
299
+    line-height: 200rpx;
300
+    color: #fff;
301
+    font-size: 36rpx;
302
+    display: flex;
303
+    justify-content: center;
304
+    align-items: center;
305
+
306
+    text {
307
+      font-size: 48rpx;
308
+    }
309
+  }
310
+
311
+  .zwsj {
312
+    // margin-top: 180rpx;
313
+    padding-top: 10%;
314
+    display: flex;
315
+    flex-direction: column;
316
+    align-items: center;
317
+
318
+    .zwsj_txt {
319
+      font-size: 36rpx;
320
+      font-weight: 700;
321
+      margin-top: 20rpx;
322
+    }
323
+
324
+    .zwsj_img {
325
+      width: 582rpx;
326
+    }
327
+  }
328
+
329
+  .page_item_wrap {
330
+    position: relative;
331
+    margin-bottom: 32rpx;
332
+    .page_item {
333
+      margin-top: 16rpx;
334
+      margin-bottom: 124rpx;
335
+      background: #fff;
336
+      border-radius: 8rpx;
337
+      margin: 0 20rpx;
338
+      border: 2rpx solid #e5e9ed;
339
+      position: relative;
340
+      overflow: hidden;
341
+      padding: 0 16rpx;
342
+
343
+      .L {
344
+        width: 40rpx;
345
+        height: 40rpx;
346
+        border-radius: 50%;
347
+        background: #f9fafb;
348
+        position: absolute;
349
+        left: -20rpx;
350
+        top: 68rpx;
351
+        border: 2rpx solid #e5e9ed;
352
+      }
353
+
354
+      .R {
355
+        width: 40rpx;
356
+        height: 40rpx;
357
+        border-radius: 50%;
358
+        background: #f9fafb;
359
+        position: absolute;
360
+        float: right;
361
+        right: -20rpx;
362
+        top: 68rpx;
363
+        border: 2rpx solid #e5e9ed;
364
+      }
365
+
366
+      .page_item_top {
367
+        height: 88rpx;
368
+        border-bottom: 2rpx dashed #e5e9ed;
369
+        padding: 0 16rpx;
370
+
371
+        .page_item_top-inner {
372
+          display: flex;
373
+          justify-content: space-between;
374
+          align-items: center;
375
+          height: 100%;
376
+
377
+          .page_item_top_L {
378
+            .L_text {
379
+              font-size: 32rpx;
380
+              font-weight: 700;
381
+            }
382
+          }
383
+
384
+          .page_item_top_R {
385
+            font-size: 32rpx;
386
+
387
+            .L_iocn {
388
+              color: rgb(7, 134, 60);
389
+              font-size: 36rpx;
390
+              font-weight: 700;
391
+            }
392
+          }
393
+        }
394
+      }
395
+
396
+      .page_item_cont {
397
+        min-height: 180rpx;
398
+        max-height: 424rpx;
399
+        padding: 0 16rpx;
400
+        text-align: left;
401
+        position: relative;
402
+
403
+        .text_big {
404
+          font-size: 32rpx;
405
+          font-weight: 700;
406
+
407
+          text {
408
+            font-weight: 700;
409
+            line-height: 1.5;
410
+          }
411
+        }
412
+
413
+        .line {
414
+          height: 20rpx;
415
+          width: 2rpx;
416
+          border-left: 2rpx solid #e5e9ed;
417
+          position: absolute;
418
+          top: 82rpx;
419
+          left: 40rpx;
420
+        }
421
+
422
+        .page_item_cont_T {
423
+          padding-top: 28rpx;
424
+          font-size: 28rpx;
425
+
426
+          .page_item_cont_title {
427
+            height: 100%;
428
+            font-size: 32rpx;
429
+            display: flex;
430
+            justify-content: space-between;
431
+            align-items: center;
432
+          }
433
+        }
434
+
435
+        .page_item_cont_B {
436
+          padding-top: 28rpx;
437
+          margin-bottom: 28rpx;
438
+
439
+          .page_item_cont_title {
440
+            font-size: 32rpx;
441
+            display: flex;
442
+            justify-content: space-between;
443
+            align-items: center;
444
+          }
445
+        }
446
+
447
+        .page_item_cont_C {
448
+          margin-bottom: 28rpx;
449
+
450
+          .page_item_cont_title_C {
451
+            font-size: 32rpx;
452
+            display: flex;
453
+            justify-content: space-between;
454
+          }
455
+        }
456
+      }
457
+
458
+      #infos {
459
+        display: none;
460
+      }
461
+    }
462
+
463
+    .L-l {
464
+      width: 2rpx;
465
+      height: 40rpx;
466
+      background: #f9fafb;
467
+      position: absolute;
468
+      left: 20rpx;
469
+      top: 72rpx;
470
+    }
471
+
472
+    .R-l {
473
+      width: 2rpx;
474
+      height: 40rpx;
475
+      background: #f9fafb;
476
+      position: absolute;
477
+      right: 20rpx;
478
+      top: 72rpx;
479
+    }
480
+  }
481
+
482
+  .pharmacy-heng {
483
+    height: 90rpx;
484
+    display: flex;
485
+    background-color: #fff;
486
+    margin-bottom: 32rpx;
487
+
488
+    .pharmacy-heng-tab {
489
+      flex: 1 !important;
490
+      display: flex;
491
+      align-items: center;
492
+
493
+      .pharmacy-heng-label {
494
+        flex: 1;
495
+        display: flex;
496
+        justify-content: center;
497
+        align-items: center;
498
+        font-size: 36rpx;
499
+        width: 204rpx;
500
+        height: 60rpx;
501
+        border-radius: 30rpx;
502
+        background-color: #fff;
503
+        color: rgb(102, 102, 102);
504
+      }
505
+
506
+      &.cube-tab_active {
507
+        .pharmacy-heng-label {
508
+          display: flex;
509
+          justify-content: center;
510
+          align-items: center;
511
+          font-size: 36rpx;
512
+          width: 204rpx;
513
+          height: 60rpx;
514
+          border-radius: 30rpx;
515
+          background-color: rgb(229, 233, 237);
516
+          color: rgb(51, 51, 51);
517
+        }
518
+      }
519
+    }
520
+  }
521
+
522
+  // 滚动区域
523
+  .page_scrollIt {
524
+    height: calc(100vh - 380rpx);
525
+  }
526
+
527
+  // “扫一扫”文字
528
+  .scanFont {
529
+    font-size: 36rpx;
530
+    font-weight: 700;
531
+    margin-top: 16rpx;
532
+    margin-bottom: 32rpx;
533
+    text-align: center;
534
+  }
535
+}
536
+</style>

+ 378 - 0
pages/pharmacyDetails/pharmacyDetails.vue

@@ -0,0 +1,378 @@
1
+<template>
2
+  <view class="pharmacyDetails">
3
+    <view class="pharmacyDetails_title">请领信息</view>
4
+    <view class="page_item_wrap">
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
+              <text class="L_text">请领单:{{ infoDATA.packid }}</text>
10
+            </view>
11
+            <view class="page_item_top_R">
12
+              <text class="L_iocn">{{
13
+                infoDATA.drugsState && infoDATA.drugsState.name
14
+              }}</text>
15
+            </view>
16
+          </view>
17
+        </view>
18
+        <view class="page_item_cont">
19
+          <view class="page_item_cont_T">
20
+            <view class="page_item_cont_title">
21
+              <text>批次号</text>
22
+              <text class="text_big">{{ infoDATA.batchNo }}</text>
23
+            </view>
24
+          </view>
25
+          <view class="page_item_cont_B">
26
+            <view class="page_item_cont_title">
27
+              <text>请领时间</text>
28
+              <text class="text_big">
29
+                <text>{{ infoDATA.creatTime }}</text>
30
+              </text>
31
+            </view>
32
+          </view>
33
+          <view class="page_item_cont_C">
34
+            <view class="page_item_cont_title_C">
35
+              <text>请领科室</text>
36
+              <text class="text_big">
37
+                <text>{{ infoDATA.target && infoDATA.target.dept }}</text>
38
+              </text>
39
+            </view>
40
+          </view>
41
+        </view>
42
+        <view class="L"></view>
43
+        <view class="R"></view>
44
+      </view>
45
+      <view class="L-l"></view>
46
+      <view class="R-l"></view>
47
+    </view>
48
+    <button
49
+      class="cube-toolbar-item"
50
+      :loading="isLoading"
51
+      :disabled="isLoading"
52
+      @click="dispensing(1)"
53
+      v-if="infoDATA.drugsState && infoDATA.drugsState.name == '待配药'"
54
+    >
55
+      开始配药
56
+    </button>
57
+    <button
58
+      class="cube-toolbar-item"
59
+      :loading="isLoading"
60
+      :disabled="isLoading"
61
+      @click="dispensing(2)"
62
+      v-if="infoDATA.drugsState && infoDATA.drugsState.name == '配药中'"
63
+    >
64
+      完成配药
65
+    </button>
66
+  </view>
67
+</template>
68
+<script>
69
+import { get, post, SM, webHandle } from "../../http/http.js";
70
+export default {
71
+  data() {
72
+    return {
73
+      infoDATA: [],
74
+      isLoading: false,
75
+    };
76
+  },
77
+  methods: {
78
+    // 开始配药,完成配药,,,1是待配药,2是配药中
79
+    dispensing(type) {
80
+      this.isLoading = true;
81
+      if (type == 1) {
82
+        post("/drugsBag/changeToIng", {
83
+          id: this.infoDATA.id,
84
+        }).then((result) => {
85
+          if (result.state == 200) {
86
+            let data = {
87
+              launchId: this.infoDATA.launch.id,
88
+              drugsBagId: this.infoDATA.id,
89
+            };
90
+            post("/drugsBag/autoDrugsBags", data).then((result1) => {
91
+              this.isLoading = false;
92
+              if (result1.status == 200) {
93
+                uni.showToast({
94
+                  title: "操作成功!",
95
+                  success() {
96
+                    // setTimeout(() => {
97
+                    uni.navigateTo({
98
+                      url: "../pharmacy/pharmacy",
99
+                    });
100
+                    // }, 3000)
101
+                  },
102
+                });
103
+              }else if(result1.status == 501){
104
+                uni.showToast({
105
+                  icon: "none",
106
+                  title: result1.error,
107
+                });
108
+              }else {
109
+                uni.showToast({
110
+                  icon: "none",
111
+                  title: "请求失败!",
112
+                });
113
+              }
114
+            });
115
+          } else {
116
+            this.isLoading = false;
117
+            uni.showToast({
118
+              icon: "none",
119
+              title: "请求失败!",
120
+            });
121
+          }
122
+        });
123
+      } else if (type == 2) {
124
+        post("/drugsBag/changeToCheck", {
125
+          id: this.infoDATA.id,
126
+        }).then((result) => {
127
+          this.isLoading = false;
128
+          if (result.state == 200) {
129
+            uni.showToast({
130
+              title: "操作成功!",
131
+              success() {
132
+                // setTimeout(() => {
133
+                uni.navigateTo({
134
+                  url: "../pharmacy/pharmacy",
135
+                });
136
+                // }, 3000)
137
+              },
138
+            });
139
+          } else {
140
+            uni.showToast({
141
+              icon: "none",
142
+              title: "请求失败!",
143
+            });
144
+          }
145
+        });
146
+      }
147
+    },
148
+  },
149
+  onLoad(options) {
150
+    // #ifdef APP-PLUS
151
+    webHandle("no", "app");
152
+    // #endif
153
+    // #ifdef H5
154
+    webHandle("no", "wx");
155
+    // #endif
156
+    //扫码进入详情
157
+    let qrcode = options.qrcode;
158
+    if (qrcode) {
159
+      uni.showLoading({
160
+        title: "加载中",
161
+        mask: true,
162
+      });
163
+      post("/drugsBag/getDrugsBagByQr", {
164
+        qrcode,
165
+      }).then((result) => {
166
+        uni.hideLoading();
167
+        if (result.state == 200) {
168
+          this.infoDATA = result.result;
169
+        } else {
170
+          uni.showToast({
171
+            icon: "none",
172
+            title: "请求失败!",
173
+          });
174
+        }
175
+      });
176
+    }
177
+    // 点击列表进入详情
178
+    let id = options.id;
179
+    if (id) {
180
+      uni.showLoading({
181
+        title: "加载中",
182
+        mask: true,
183
+      });
184
+      get("/api/fetchData/drugsBag/" + id).then((res) => {
185
+        uni.hideLoading();
186
+        if (res.status == 200) {
187
+          this.infoDATA = res.data;
188
+        } else {
189
+          uni.showToast({
190
+            icon: "none",
191
+            title: "请求失败!",
192
+          });
193
+        }
194
+      });
195
+    }
196
+  },
197
+};
198
+</script>
199
+<style lang="less">
200
+.pharmacyDetails {
201
+  background-color: rgb(249, 250, 251);
202
+  padding-top: 10%;
203
+
204
+  .pharmacyDetails_title {
205
+    font-size: 46rpx;
206
+    font-weight: 550;
207
+    text-align: center;
208
+  }
209
+
210
+  .page_item_wrap {
211
+    position: relative;
212
+    margin-top: 32rpx;
213
+
214
+    .page_item {
215
+      margin-top: 16rpx;
216
+      margin-bottom: 124rpx;
217
+      background: #fff;
218
+      border-radius: 8rpx;
219
+      margin: 0 20rpx;
220
+      border: 2rpx solid #e5e9ed;
221
+      position: relative;
222
+      overflow: hidden;
223
+      padding: 0 16rpx;
224
+
225
+      .L {
226
+        width: 40rpx;
227
+        height: 40rpx;
228
+        border-radius: 50%;
229
+        background: #f9fafb;
230
+        position: absolute;
231
+        left: -20rpx;
232
+        top: 68rpx;
233
+        border: 2rpx solid #e5e9ed;
234
+      }
235
+
236
+      .R {
237
+        width: 40rpx;
238
+        height: 40rpx;
239
+        border-radius: 50%;
240
+        background: #f9fafb;
241
+        position: absolute;
242
+        float: right;
243
+        right: -20rpx;
244
+        top: 68rpx;
245
+        border: 2rpx solid #e5e9ed;
246
+      }
247
+
248
+      .page_item_top {
249
+        height: 88rpx;
250
+        border-bottom: 2rpx dashed #e5e9ed;
251
+        padding: 0 16rpx;
252
+
253
+        .page_item_top-inner {
254
+          display: flex;
255
+          justify-content: space-between;
256
+          align-items: center;
257
+          height: 100%;
258
+
259
+          .page_item_top_L {
260
+            .L_text {
261
+              font-size: 32rpx;
262
+              font-weight: 700;
263
+            }
264
+          }
265
+
266
+          .page_item_top_R {
267
+            font-size: 32rpx;
268
+
269
+            .L_iocn {
270
+              color: rgb(7, 134, 60);
271
+              font-size: 36rpx;
272
+              font-weight: 700;
273
+            }
274
+          }
275
+        }
276
+      }
277
+
278
+      .page_item_cont {
279
+        min-height: 180rpx;
280
+        max-height: 424rpx;
281
+        padding: 0 16rpx;
282
+        text-align: left;
283
+        position: relative;
284
+
285
+        .text_big {
286
+          font-size: 32rpx;
287
+          font-weight: 700;
288
+
289
+          text {
290
+            font-weight: 700;
291
+            line-height: 1.5;
292
+          }
293
+        }
294
+
295
+        .line {
296
+          height: 20rpx;
297
+          width: 2rpx;
298
+          border-left: 2rpx solid #e5e9ed;
299
+          position: absolute;
300
+          top: 82rpx;
301
+          left: 40rpx;
302
+        }
303
+
304
+        .page_item_cont_T {
305
+          padding-top: 28rpx;
306
+          font-size: 28rpx;
307
+
308
+          .page_item_cont_title {
309
+            height: 100%;
310
+            font-size: 32rpx;
311
+            display: flex;
312
+            justify-content: space-between;
313
+          }
314
+        }
315
+
316
+        .page_item_cont_B {
317
+          padding-top: 28rpx;
318
+          margin-bottom: 28rpx;
319
+
320
+          .page_item_cont_title {
321
+            font-size: 32rpx;
322
+            display: flex;
323
+            justify-content: space-between;
324
+            align-items: center;
325
+          }
326
+        }
327
+
328
+        .page_item_cont_C {
329
+          margin-bottom: 28rpx;
330
+
331
+          .page_item_cont_title_C {
332
+            font-size: 32rpx;
333
+            display: flex;
334
+            justify-content: space-between;
335
+            align-items: center;
336
+          }
337
+        }
338
+
339
+        #infos {
340
+          display: none;
341
+        }
342
+      }
343
+    }
344
+
345
+    .L-l {
346
+      width: 2rpx;
347
+      height: 40rpx;
348
+      background: #f9fafb;
349
+      position: absolute;
350
+      left: 20rpx;
351
+      top: 72rpx;
352
+    }
353
+
354
+    .R-l {
355
+      width: 2rpx;
356
+      height: 40rpx;
357
+      background: #f9fafb;
358
+      position: absolute;
359
+      right: 20rpx;
360
+      top: 72rpx;
361
+    }
362
+  }
363
+
364
+  .cube-toolbar-item {
365
+    width: 710rpx;
366
+    height: 68rpx;
367
+    line-height: 68rpx;
368
+    position: fixed;
369
+    left: 20rpx;
370
+    bottom: 32rpx;
371
+    border-radius: 8rpx;
372
+    background: linear-gradient(to right, #72c172, #3bb197);
373
+    font-size: 36rpx;
374
+    color: #fff;
375
+    text-align: center;
376
+  }
377
+}
378
+</style>

File diff suppressed because it is too large
+ 1047 - 0
pages/receipt_infopage/receipt_infopage.vue


File diff suppressed because it is too large
+ 1181 - 0
pages/receiptpage/receiptpage.vue


+ 554 - 0
pages/scanning/scanning.vue

@@ -0,0 +1,554 @@
1
+<template>
2
+  <view class="Scanning">
3
+    <view class="Scanning_top">
4
+      <view class="Scanning_top_icon">
5
+        <text class="cubeic-ok icon_transport transport-duigou"></text>
6
+      </view>
7
+      <view class="Scanning_top_text">
8
+        <view class="text1"> 扫描完成 </view>
9
+        <view class="text2">
10
+          您已在
11
+          <text
12
+            style="font-weight: 600; color: rgb(73, 184, 86)"
13
+            v-if="
14
+              infoType == 'plan-spe-ddd-1' ||
15
+              infoType == 'plan-spe-ddd-2' ||
16
+              infoType == 'spe-ddd-1' ||
17
+              infoType == 'spe-ddd-2' ||
18
+              infoType == 'drug-ddd-2' ||
19
+              infoType == 'jp-ddd-2'
20
+            "
21
+            >{{ infoDATA.startDept.dept }}</text
22
+          >
23
+          <text
24
+            style="font-weight: 600; color: rgb(73, 184, 86)"
25
+            v-if="infoType == 'drug-dsd-2' || infoType == 'jp-dsd-2'"
26
+            >{{ infoDATA.endDepts[0].dept }}</text
27
+          >
28
+          <text
29
+            style="font-weight: 600; color: rgb(73, 184, 86)"
30
+            v-if="
31
+              infoType == 'plan-spe-dsd-2' ||
32
+              infoType == 'plan-spe-dsd-3' ||
33
+              infoType == 'plan-spe-dsd-1' ||
34
+              infoType == 'spe-dsd-2' ||
35
+              infoType == 'spe-dsd-3' ||
36
+              infoType == 'spe-dsd-1' ||
37
+              infoType == 'ins-zxz-1' ||
38
+              infoType == 'ins-dsd-1' ||
39
+              infoType == 'trans-dsd-1' ||
40
+              (infoType == 'qt-ddd-1' && infoDATA.gdState.value == '5') ||
41
+              infoDATA.gdState.value == '6' ||
42
+              infoDATA.gdState.value == '8'
43
+            "
44
+            >{{ DEPT }}</text
45
+          >
46
+          <text
47
+            >扫描<text style="color: #ff3b53">{{ speNum }}</text> 个标本,
48
+            确认是否继续配送或是完成工单。</text
49
+          >
50
+        </view>
51
+      </view>
52
+    </view>
53
+    <view class="foot_btn1">
54
+      <view class="btn1" @click="Scanning_again()"> 继续配送 </view>
55
+      <view
56
+        class="btn2"
57
+        @click="Scanning_complete(dataId)"
58
+        v-if="
59
+          infoType == 'plan-spe-ddd-1' ||
60
+          infoType == 'plan-spe-dsd-1' ||
61
+          infoType == 'spe-ddd-1' ||
62
+          infoType == 'spe-dsd-1'
63
+        "
64
+      >
65
+        完成工单
66
+      </view>
67
+      <view
68
+        class="btn2"
69
+        @click="Scanning_complete1(dataId)"
70
+        v-if="
71
+          infoType == 'plan-spe-ddd-2' ||
72
+          infoType == 'plan-spe-dsd-2' ||
73
+          infoType == 'plan-spe-dsd-3' ||
74
+          infoType == 'spe-ddd-2' ||
75
+          infoType == 'spe-dsd-2' ||
76
+          infoType == 'spe-dsd-3'
77
+        "
78
+      >
79
+        完成工单
80
+      </view>
81
+    </view>
82
+    <!-- 弹窗 -->
83
+    <showModel
84
+      :title="models.title"
85
+      :icon="models.icon"
86
+      :disjunctor="models.disjunctor"
87
+      :content="models.content"
88
+      @ok="ok"
89
+      @cancel="cancel"
90
+      :operate="models.operate"
91
+    ></showModel>
92
+  </view>
93
+</template>
94
+<script>
95
+import showModel from "../../components/showModel/showModel.vue";
96
+import { get, post, SM, webHandle } from "../../http/http.js";
97
+export default {
98
+  data() {
99
+    return {
100
+      // 弹窗model
101
+      models: {
102
+        disjunctor: false,
103
+      },
104
+      wcId: [], //完成工单id
105
+      modelFlag: "", //弹窗标识
106
+      infoDATA: [],
107
+      infoType: "",
108
+      DEPTCode: "",
109
+      DEPT: "",
110
+      dataId: "",
111
+      speNum: 0,
112
+      queryObj: {}, //路由传递过来的参数
113
+    };
114
+  },
115
+  methods: {
116
+    // 继续配送
117
+    Scanning_again(id) {
118
+      uni.navigateTo({
119
+        url: "../receiptpage/receiptpage",
120
+      });
121
+    },
122
+    // 确定
123
+    ok() {
124
+      this.models.disjunctor = false;
125
+      if (this.modelFlag == "complete1") {
126
+        //一对多、多对多完成工单
127
+        let data = {
128
+          type: this.infoType,
129
+          ids: this.wcId,
130
+        };
131
+        let id = this.wcId;
132
+        if (this.queryObj.type === "specimenPlan") {
133
+          //标本轮巡
134
+          post("/workerOrder/finishPlanSpes", data).then((res) => {
135
+            if (res.status == 200) {
136
+              uni.navigateTo({
137
+                url: `../scanning_orderSign/scanning_orderSign?type=${
138
+                  this.queryObj.type
139
+                }&type1=${this.queryObj.type1}&deptCode=${
140
+                  this.queryObj.code
141
+                }&id=${encodeURIComponent(JSON.stringify(id))}`,
142
+              });
143
+            } else {
144
+              uni.showToast({
145
+                icon: "none",
146
+                title: "请求失败!",
147
+              });
148
+            }
149
+          });
150
+        } else {
151
+          post("/workerOrder/finishSpes", data).then((res) => {
152
+            if (res.status == 200) {
153
+              uni.navigateTo({
154
+                url: `../scanning_orderSign/scanning_orderSign?type=${
155
+                  this.queryObj.type
156
+                }&type1=${this.queryObj.type1}&deptCode=${
157
+                  this.queryObj.code
158
+                }&id=${encodeURIComponent(JSON.stringify(id))}`,
159
+              });
160
+            } else {
161
+              uni.showToast({
162
+                icon: "none",
163
+                title: "请求失败!",
164
+              });
165
+            }
166
+          });
167
+        }
168
+      } else if (this.modelFlag == "complete") {
169
+        //一对一完成工单
170
+        let id = this.wcId;
171
+        post("/workerOrder/finishSpeOrder", id).then((res) => {
172
+          if (res.status == 200) {
173
+            uni.navigateTo({
174
+              url: `../scanning_orderSign/scanning_orderSign?type=${
175
+                this.queryObj.type
176
+              }&type1=${this.queryObj.type1}&deptCode=${
177
+                this.queryObj.code
178
+              }&id=${encodeURIComponent(JSON.stringify(id))}`,
179
+            });
180
+          } else {
181
+            uni.showToast({
182
+              icon: "none",
183
+              title: "请求失败!",
184
+            });
185
+          }
186
+        });
187
+      }
188
+    },
189
+    // 取消
190
+    cancel() {
191
+      this.models.disjunctor = false;
192
+    },
193
+    //一对多、多对多完成工单
194
+    Scanning_complete1(id) {
195
+      this.wcId = id;
196
+      this.modelFlag = "complete1"; //弹窗标识
197
+      this.models = {
198
+        disjunctor: true,
199
+        title: "提示",
200
+        content: "是否确定标本配送完成?",
201
+        icon: "warn",
202
+        operate: {
203
+          ok: "确定",
204
+          cancel: "取消",
205
+        },
206
+      };
207
+    },
208
+    //一对一完成工单
209
+    Scanning_complete(id) {
210
+      this.wcId = id;
211
+      this.modelFlag = "complete"; //弹窗标识
212
+      this.models = {
213
+        disjunctor: true,
214
+        title: "提示",
215
+        content: "是否确定标本配送完成?",
216
+        icon: "warn",
217
+        operate: {
218
+          ok: "确定",
219
+          cancel: "取消",
220
+        },
221
+      };
222
+    },
223
+  },
224
+  onLoad(options) {
225
+    this.queryObj = options;
226
+    let id = JSON.parse(options.id);
227
+    this.dataId = id;
228
+    this.infoType = options.type1;
229
+    this.DEPTCode = options.deptCode;
230
+    this.DEPT = options.dept;
231
+    this.speNum = uni.getStorageSync("speNum");
232
+    this.speNum = Number(this.speNum);
233
+    // #ifdef APP-PLUS
234
+    webHandle("no", "app");
235
+    // #endif
236
+    // #ifdef H5
237
+    webHandle("no", "wx");
238
+    // #endif
239
+  },
240
+};
241
+</script>
242
+<style lang="less">
243
+.Scanning {
244
+  padding: 0 20rpx;
245
+
246
+  .Scanning_top {
247
+    height: 340rpx;
248
+
249
+    .Scanning_top_icon {
250
+      width: 140rpx;
251
+      height: 140rpx;
252
+      margin: 0 auto;
253
+      margin-top: 36rpx;
254
+      border-radius: 50%;
255
+      line-height: 140rpx;
256
+
257
+      .cubeic-ok {
258
+        font-size: 140rpx;
259
+        color: #35b34a;
260
+      }
261
+    }
262
+
263
+    .Scanning_top_text {
264
+      text-align: center;
265
+
266
+      .text1 {
267
+        margin-top: 40rpx;
268
+        font-size: 48rpx;
269
+      }
270
+
271
+      .text2 {
272
+        margin-top: 16rpx;
273
+        font-size: 36rpx;
274
+      }
275
+    }
276
+  }
277
+
278
+  .page_item {
279
+    margin-top: 16rpx;
280
+    margin-bottom: 124rpx;
281
+    min-height: 356rpx;
282
+    background: #fff;
283
+    border-radius: 8rpx;
284
+    overflow: hidden;
285
+    padding: 0 16rpx;
286
+    border: 2rpx solid #e5e9ed;
287
+
288
+    .L {
289
+      width: 40rpx;
290
+      height: 40rpx;
291
+      border-radius: 50%;
292
+      background: #f9fafb;
293
+      position: relative;
294
+      left: -50rpx;
295
+      top: 66rpx;
296
+    }
297
+
298
+    .R {
299
+      width: 40rpx;
300
+      height: 40rpx;
301
+      border-radius: 50%;
302
+      background: #f9fafb;
303
+      position: relative;
304
+      float: right;
305
+      right: -50rpx;
306
+      top: 26rpx;
307
+    }
308
+
309
+    .starting {
310
+      width: 50rpx;
311
+      height: 50rpx;
312
+      color: #fff;
313
+      background: #49b856;
314
+      display: inline-block;
315
+      border-radius: 50%;
316
+      text-align: center;
317
+      line-height: 46rpx;
318
+      font-size: 32rpx;
319
+      margin-right: 6rpx;
320
+    }
321
+
322
+    .End {
323
+      width: 50rpx;
324
+      height: 50rpx;
325
+      color: #fff;
326
+      background: #39b199;
327
+      display: inline-block;
328
+      border-radius: 50%;
329
+      text-align: center;
330
+      line-height: 46rpx;
331
+      font-size: 32rpx;
332
+      margin-right: 6rpx;
333
+    }
334
+
335
+    .page_item_top {
336
+      height: 86rpx;
337
+      border-bottom: 2rpx dashed #e5e9ed;
338
+      padding: 0 16rpx;
339
+
340
+      .page_item_top_L {
341
+        height: 100%;
342
+        float: left;
343
+        line-height: 88rpx;
344
+
345
+        .emergencys {
346
+          background: #ff3b53 !important;
347
+          width: 124rpx !important;
348
+        }
349
+
350
+        .emergency {
351
+          background: #ff3b53 !important;
352
+        }
353
+
354
+        .emergency1 {
355
+          background: #49b856 !important;
356
+        }
357
+
358
+        .page_item_cont_start {
359
+          text-align: center;
360
+          height: 44rpx;
361
+          width: 104rpx;
362
+          line-height: 44rpx;
363
+          border-radius: 8rpx;
364
+          background: #49b856;
365
+          color: #fff;
366
+          display: inline-block;
367
+        }
368
+
369
+        .L_time {
370
+          color: #6cc076;
371
+          font-size: 32rpx;
372
+        }
373
+
374
+        .L_text {
375
+          font-size: 32rpx;
376
+          display: inline-block;
377
+          font-weight: 700;
378
+        }
379
+      }
380
+
381
+      .page_item_top_R {
382
+        height: 60rpx;
383
+        float: right;
384
+        padding-top: 20rpx;
385
+        font-size: 32rpx;
386
+        position: absolute;
387
+        right: 50rpx;
388
+
389
+        .L_iocn {
390
+          display: inline-block;
391
+          height: 52rpx;
392
+          line-height: 48rpx;
393
+          color: rgb(7, 134, 60);
394
+          font-size: 36rpx;
395
+          font-weight: 700;
396
+        }
397
+      }
398
+    }
399
+
400
+    .page_item_cont {
401
+      min-height: 180rpx;
402
+      max-height: 424rpx;
403
+      padding: 0 16rpx;
404
+      text-align: left;
405
+      position: relative;
406
+
407
+      .text_big {
408
+        font-size: 32rpx;
409
+        position: absolute;
410
+        right: 16rpx;
411
+        font-weight: 700;
412
+        margin-top: 10rpx;
413
+      }
414
+
415
+      .text_big2 {
416
+        font-size: 32rpx;
417
+        position: absolute;
418
+        right: 16rpx;
419
+        font-weight: 700;
420
+      }
421
+
422
+      .line {
423
+        height: 20rpx;
424
+        width: 2rpx;
425
+        border-left: 2rpx solid #e5e9ed;
426
+        position: absolute;
427
+        top: 82rpx;
428
+        left: 40rpx;
429
+      }
430
+
431
+      .lines {
432
+        height: 40%;
433
+        width: 2rpx;
434
+        border-left: 2rpx solid #e5e9ed;
435
+        position: absolute;
436
+        top: 23%;
437
+        left: 36rpx;
438
+      }
439
+
440
+      .page_item_cont_T {
441
+        padding-top: 28rpx;
442
+        font-size: 28rpx;
443
+
444
+        .page_item_cont_title {
445
+          height: 100%;
446
+          font-size: 32rpx;
447
+        }
448
+      }
449
+
450
+      .page_item_cont_B {
451
+        padding-top: 28rpx;
452
+        margin-bottom: 28rpx;
453
+
454
+        .page_item_cont_title {
455
+          height: 60rpx;
456
+          font-size: 32rpx;
457
+        }
458
+
459
+        .page_item_cont_title1 {
460
+          height: 60rpx;
461
+          line-height: 60rpx;
462
+          font-size: 32rpx;
463
+          padding-left: 64rpx;
464
+        }
465
+      }
466
+    }
467
+
468
+    .page_item_foot {
469
+      border-top: 2rpx dashed #e5e9ed;
470
+      border-bottom: 2rpx dashed #e5e9ed;
471
+      padding: 28rpx 16rpx;
472
+      text-align: left;
473
+
474
+      .page_item_foot_text {
475
+        font-size: 32rpx;
476
+        margin-bottom: 20rpx;
477
+
478
+        .text1 {
479
+          color: rgb(102, 102, 102);
480
+        }
481
+
482
+        .text2 {
483
+          float: right;
484
+          font-weight: 700;
485
+        }
486
+      }
487
+
488
+      .text_padd {
489
+        padding: 0 10% 0 10%;
490
+      }
491
+    }
492
+
493
+    #infos {
494
+      display: none;
495
+    }
496
+
497
+    .page_item_infos {
498
+      padding-bottom: 20rpx;
499
+      border-bottom: 2rpx dashed #e5e9ed;
500
+
501
+      .page_item_info2 {
502
+        text-align: left;
503
+        line-height: 60rpx;
504
+        font-size: 32rpx;
505
+        padding-left: 16rpx;
506
+
507
+        .page_item_foot_text {
508
+          font-size: 32rpx;
509
+          margin-bottom: 20rpx;
510
+
511
+          .text1 {
512
+            color: rgb(102, 102, 102);
513
+          }
514
+
515
+          .text2 {
516
+            float: right;
517
+            font-weight: 700;
518
+          }
519
+        }
520
+      }
521
+    }
522
+  }
523
+
524
+  .foot_btn1 {
525
+    position: fixed;
526
+    bottom: 0;
527
+    right: 20rpx;
528
+    left: 20rpx;
529
+    line-height: 66rpx;
530
+    height: 100rpx;
531
+    border-top: 2rpx solid #e5e9ed;
532
+    background: #f9fafb;
533
+    text-align: center;
534
+
535
+    view {
536
+      height: 66rpx;
537
+      width: 45%;
538
+      background-image: linear-gradient(to right, #72c172, #3bb197);
539
+      color: #fff;
540
+      border-radius: 8rpx;
541
+      font-size: 32rpx;
542
+      margin-top: 16rpx;
543
+    }
544
+
545
+    .btn1 {
546
+      float: left;
547
+    }
548
+
549
+    .btn2 {
550
+      float: right;
551
+    }
552
+  }
553
+}
554
+</style>

+ 144 - 0
pages/scanning_B/scanning_B.vue

@@ -0,0 +1,144 @@
1
+<template>
2
+  <view class="Scanning_B">
3
+    <view class="Scanning_top" v-if="res.status==200">
4
+      <view class="Scanning_top_icon">
5
+        <text class="cubeic-ok icon_transport transport-duigou"></text>
6
+      </view>
7
+      <view class="Scanning_top_text">
8
+        <view class="text1">扫描成功</view>
9
+      </view>
10
+    </view>
11
+    <view class="Scanning_top" v-if="res.status!=200">
12
+      <view class="Scanning_top_icon">
13
+        <text class="cubeic-close icon_transport transport-shibai"></text>
14
+      </view>
15
+      <view class="Scanning_top_text">
16
+        <view class="text1">扫描失败</view>
17
+      </view>
18
+    </view>
19
+
20
+    <view class="Scanning_cont" v-if="res.status==200">
21
+      <view>标本类型 : {{infoDATA.stype.name||'-'}}</view>
22
+      <view>标本编码 : {{infoDATA.scode||'-'}}</view>
23
+      <view>患者床号 : {{infoDATA.bedNum||'-'}}</view>
24
+      <view>申请科室 : {{infoDATA.sickRoom||'-'}}</view>
25
+      <view>检查科室 : {{infoDATA.checkDept||'-'}}</view>
26
+    </view>
27
+    <view class="Scanning_cont" v-if="res.status!=200">
28
+      <view>{{res.msg}}</view>
29
+    </view>
30
+    <view class="foot_btn">
31
+      <view class="btn3" @click="showAlert()">知道了</view>
32
+    </view>
33
+  </view>
34
+</template>
35
+<script>
36
+  import {
37
+    webHandle
38
+  } from '../../http/http.js'
39
+  export default {
40
+    data() {
41
+      return {
42
+        infoDATA: {},
43
+        res: {}
44
+      };
45
+    },
46
+    methods: {
47
+      // 知道了
48
+      showAlert() {
49
+        uni.navigateTo({
50
+          url: '../receiptpage/receiptpage'
51
+        });
52
+      }
53
+    },
54
+    onLoad(options) {
55
+      this.infoDATA = JSON.parse(options.infoDATA); //详细信息
56
+      console.log(this.infoDATA)
57
+      this.res["status"] = options.status; //状态码
58
+      this.res["msg"] = options.msg; //返回的信息
59
+      // #ifdef APP-PLUS
60
+      webHandle('no', 'app')
61
+      // #endif
62
+      // #ifdef H5
63
+      webHandle('no', 'wx')
64
+      // #endif
65
+    }
66
+  };
67
+</script>
68
+<style lang="less">
69
+  .Scanning_B {
70
+    padding: 0px 74rpx;
71
+
72
+    .Scanning_top {
73
+      height: 270rpx;
74
+
75
+      .Scanning_top_icon {
76
+        width: 140rpx;
77
+        height: 140rpx;
78
+        margin: 0 auto;
79
+        margin-top: 116rpx;
80
+        border-radius: 50%;
81
+        line-height: 140rpx;
82
+        text-align: center;
83
+
84
+        .cubeic-ok {
85
+          font-size: 140rpx;
86
+          color: #35b34a
87
+        }
88
+
89
+        .cubeic-close {
90
+          font-size: 140rpx;
91
+          color: #ff3b53;
92
+        }
93
+      }
94
+
95
+      .Scanning_top_text {
96
+        .text1 {
97
+          margin-top: 40rpx;
98
+          font-size: 48rpx;
99
+          text-align: center;
100
+        }
101
+      }
102
+    }
103
+
104
+    .Scanning_cont {
105
+      font-size: 32rpx;
106
+
107
+      view {
108
+        margin-bottom: 16rpx;
109
+        text-align: center;
110
+      }
111
+
112
+      .text {
113
+        margin-top: 24rpx;
114
+        color: #35b34a;
115
+      }
116
+
117
+      .text1 {
118
+        margin-top: 24rpx;
119
+        color: #ff3b53;
120
+      }
121
+    }
122
+
123
+    .foot_btn {
124
+      line-height: 88rpx;
125
+      height: 100rpx;
126
+      margin-top: 40rpx;
127
+
128
+      .btn3 {
129
+        height: 88rpx;
130
+        width: 45%;
131
+        background-image: linear-gradient(to right, #72c172, #3bb197);
132
+        color: #fff;
133
+        border-radius: 8rpx;
134
+        font-size: 32rpx;
135
+        margin-top: 16rpx;
136
+        text-align: center;
137
+      }
138
+
139
+      .btn3 {
140
+        margin: 0 auto;
141
+      }
142
+    }
143
+  }
144
+</style>

+ 671 - 0
pages/scanning_Result/scanning_Result.vue

@@ -0,0 +1,671 @@
1
+<template>
2
+  <view class="Scanning_Result">
3
+    <view class="Scanning_top" v-if="res.status == 200">
4
+      <view class="Scanning_top_icon">
5
+        <text class="cubeic-ok icon_transport transport-duigou"></text>
6
+      </view>
7
+      <view class="Scanning_top_text">
8
+        <view class="text1"> 操作成功 </view>
9
+        <view class="success_tips" v-if="type == 'inspect' || type == 'patientTransport'">
10
+          (请您评估患者的意识状况、生命体征、配合程度,如有异常请及时联系护士!)
11
+        </view>
12
+      </view>
13
+    </view>
14
+
15
+    <view class="Scanning_top" v-if="res.status != 200">
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"> 操作失败 </view>
21
+      </view>
22
+    </view>
23
+
24
+    <view class="Scanning_cont" v-if="
25
+        (res.status == 200 && type == 'specimenPlan') ||
26
+        (res.status == 200 && type == 'specimen')
27
+      ">
28
+      <view> 标本类型 : {{ infoDATA.stype.name || "-" }} </view>
29
+      <view> 标本编号 : {{ infoDATA.scode || "-" }} </view>
30
+      <view> 患者姓名 : {{ infoDATA.patientName || "-" }} </view>
31
+      <view> 已扫描 : {{ speNum }} </view>
32
+    </view>
33
+
34
+    <view class="Scanning_cont" v-if="
35
+        (res.status == 200 && type == 'inspect') || type == 'patientTransport'
36
+      ">
37
+      <view v-if="res.patient"> 患者姓名 : {{ res.patient || "-" }} </view>
38
+      <view v-if="res.patientCode">
39
+        患者编号 : {{ res.patientCode || "-" }}
40
+      </view>
41
+      <view v-if="res.deptName">
42
+        住院科室 : {{ res.deptName !== "undefined" ? res.deptName : "-" }}
43
+      </view>
44
+      <view v-if="res.bedNum">
45
+        床号 : {{ res.bedNum !== "undefined" ? res.bedNum : "-" }}
46
+      </view>
47
+      <view v-if="res.data">
48
+        检查项目 :
49
+        <text v-for="(data, i) in res.data" :key="i">{{
50
+          data.inspectName
51
+        }}</text>
52
+      </view>
53
+      <view v-if="
54
+          res.status == 200 &&
55
+          infoType != 'ins-zxz-1' &&
56
+          infoType != 'ins-dsd-1' &&
57
+          infoType != 'ins-ddd-1' &&
58
+          infoType != 'trans-ddd-1' &&
59
+          infoType != 'trans-dsd-1'
60
+        ">
61
+        {{ res.msg || "" }}
62
+      </view>
63
+      <view v-if="infoType == 'trans-dsd-1' && res.status == 200">
64
+        工单已完成
65
+      </view>
66
+      <view v-if="infoType == 'ins-dsd-1' && res.status == 200">
67
+        工单已完成。
68
+      </view>
69
+    </view>
70
+    <view class="Scanning_cont" v-if="res.status == 200 && (type == 'drugsBag' || type == 'jPBag')">
71
+      <view v-if="type == 'drugsBag'"> 药包编码 : #{{ infoDATA.packid }} </view>
72
+      <view v-if="type == 'jPBag'">
73
+        静配药包编码 : #{{ infoDATA.packid }}
74
+      </view>
75
+      <view> 所属科室 : {{ infoDATA.target.dept || "-" }} </view>
76
+      <view v-if="infoType === 'drug-dsd-2' || infoType === 'jp-dsd-2'">
77
+        工单已完成。
78
+      </view>
79
+    </view>
80
+    <view class="Scanning_cont" v-if="res.status != 200">
81
+      <view class="Scanning_cont_center">
82
+        {{ res.msg === "undefined" || !res.msg ? "" : res.msg }}
83
+      </view>
84
+    </view>
85
+    <view class="foot_btn" v-if="
86
+        (type == 'specimen' && isKs != '1') ||
87
+        (type == 'specimenPlan' && isKs != '1')
88
+      ">
89
+      <view class="btn1" @click="Scanning_again()"> 继续扫描 </view>
90
+      <view class="btn2" @click="Scanning_complete(dataId)"> 完成扫描 </view>
91
+    </view>
92
+    <view class="foot_btn" v-if="
93
+        (type != 'specimenPlan' &&
94
+          type != 'specimen' &&
95
+          type != 'drugsBag' &&
96
+          type != 'jPBag' &&
97
+          (type != 'inspect') & (type != 'patientTransport')) ||
98
+        (queryObj.status == 200 &&
99
+          type == 'drugsBag' &&
100
+          infoType == 'drug-ddd-2') ||
101
+        (queryObj.status == 200 &&
102
+          type == 'drugsBag' &&
103
+          infoType == 'drug-dsd-2') ||
104
+        (queryObj.status == 200 && type == 'jPBag' && infoType == 'jp-ddd-2') ||
105
+        (queryObj.status == 200 && type == 'jPBag' && infoType == 'jp-dsd-2') ||
106
+        (queryObj.status == 200 && type == 'inspect') ||
107
+        (queryObj.status == 200 && type == 'patientTransport')
108
+      ">
109
+      <view class="btn3" @click="showAlert(dataId)"> 知道了 </view>
110
+    </view>
111
+    <view class="foot_btn" v-if="
112
+        (isKs != '1' &&
113
+          queryObj.status != 200 &&
114
+          type == 'drugsBag' &&
115
+          infoType == 'drug-ddd-2') ||
116
+        (isKs != '1' &&
117
+          queryObj.status != 200 &&
118
+          type == 'drugsBag' &&
119
+          infoType == 'drug-dsd-2') ||
120
+        (isKs != '1' &&
121
+          queryObj.status != 200 &&
122
+          type == 'jPBag' &&
123
+          infoType == 'jp-ddd-2') ||
124
+        (isKs != '1' &&
125
+          queryObj.status != 200 &&
126
+          type == 'jPBag' &&
127
+          infoType == 'jp-dsd-2') ||
128
+        (isKs != '1' && queryObj.status != 200 && type == 'inspect') ||
129
+        (isKs != '1' && queryObj.status != 200 && type == 'patientTransport')
130
+      ">
131
+      <view class="btn3" @click="Scanning_again()"> 继续扫描 </view>
132
+      <view class="btn3" @click="photograph(queryObj, { DEPTCode, DEPT, infoType })" v-if="
133
+          (isKs != '1' && queryObj.status != 200 && type == 'inspect') ||
134
+          (isKs != '1' && queryObj.status != 200 && type == 'patientTransport')
135
+        ">
136
+        拍照
137
+      </view>
138
+    </view>
139
+    <view class="foot_btn" v-if="
140
+        infoType == 'spe-ddd-1' ||
141
+        (isKs == '1' && queryObj.status != 200 && infoType == 'spe-dsd-2') ||
142
+        (isKs == '1' && queryObj.status != 200 && infoType == 'spe-dsd-1') ||
143
+        (isKs == '1' && queryObj.status != 200 && infoType == 'spe-ddd-2') ||
144
+        (isKs == '1' && queryObj.status != 200 && infoType == 'spe-dsd-3') ||
145
+        (isKs == '1' &&
146
+          queryObj.status != 200 &&
147
+          infoType == 'plan-spe-ddd-1') ||
148
+        (isKs == '1' &&
149
+          queryObj.status != 200 &&
150
+          infoType == 'plan-spe-ddd-2') ||
151
+        (isKs == '1' &&
152
+          queryObj.status != 200 &&
153
+          infoType == 'plan-spe-dsd-1') ||
154
+        (isKs == '1' &&
155
+          queryObj.status != 200 &&
156
+          infoType == 'plan-spe-dsd-2') ||
157
+        (isKs == '1' && queryObj.status != 200 && infoType == 'drug-ddd-2') ||
158
+        (isKs == '1' && queryObj.status != 200 && infoType == 'drug-dsd-2') ||
159
+        (isKs == '1' && queryObj.status != 200 && infoType == 'jp-ddd-2') ||
160
+        (isKs == '1' && queryObj.status != 200 && infoType == 'jp-dsd-2') ||
161
+        (isKs == '1' &&
162
+          queryObj.status != 200 &&
163
+          infoType == 'plan-spe-dsd-3') ||
164
+        (isKs == '1' &&
165
+          queryObj.status != 200 &&
166
+          type == 'inspect' &&
167
+          queryObj.type1 === 'undefined') ||
168
+        (isKs == '1' &&
169
+          queryObj.status != 200 &&
170
+          type == 'patientTransport' &&
171
+          queryObj.type1 === 'undefined')
172
+      ">
173
+      <view class="btn3" @click="showAlert(dataId)"> 知道了 </view>
174
+    </view>
175
+    <view class="foot_btn" v-if="
176
+        (isKs == '1' &&
177
+          queryObj.status != 200 &&
178
+          type == 'inspect' &&
179
+          queryObj.type1 === 'ins-zxz-1') ||
180
+        (isKs == '1' &&
181
+          queryObj.status != 200 &&
182
+          type == 'inspect' &&
183
+          queryObj.type1 === 'ins-dsd-1') ||
184
+        (isKs == '1' &&
185
+          queryObj.status != 200 &&
186
+          type == 'patientTransport' &&
187
+          queryObj.type1 === 'trans-dsd-1')
188
+      ">
189
+      <view class="btn1" @click="showAlert(dataId)"> 知道了 </view>
190
+      <view class="btn2" @click="goToRight(dataId)"> 继续执行工单 </view>
191
+    </view>
192
+    <!-- 弹窗 -->
193
+    <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
194
+      @ok="ok" @cancel="cancel" :operate="models.operate"></showModel>
195
+    <!-- 弹窗 -->
196
+    <showModel :title="models1.title" :icon="models1.icon" :disjunctor="models1.disjunctor"
197
+      :radioItem="models1.radioItem" @ok="ok1" @radioChange="radioChange1" @cancel="cancel1" :operate="models1.operate">
198
+    </showModel>
199
+  </view>
200
+</template>
201
+<script>
202
+  import showModel from "../../components/showModel/showModel.vue";
203
+  import {
204
+    get,
205
+    post,
206
+    SM,
207
+    webHandle
208
+  } from "../../http/http.js";
209
+  import {
210
+    photographTool
211
+  } from "../../tools/photograph.js";
212
+  export default {
213
+    data() {
214
+      return {
215
+        // 完成扫描的id
216
+        wcId: "",
217
+        // 弹窗model
218
+        models: {
219
+          disjunctor: false,
220
+        },
221
+        // 单选框弹窗model1
222
+        models1: {
223
+          disjunctor: false,
224
+        },
225
+        isKs: "", //是否科室签到 1
226
+        infoDATA: {},
227
+        res: {},
228
+        infoType: "",
229
+        DEPTCode: "",
230
+        RESData: {},
231
+        DEPT: "",
232
+        dataId: "",
233
+        type: "",
234
+        model: {},
235
+        speNum: 0,
236
+        queryObj: {}, //路由传递过来的数据
237
+        selectRadio: [], //单选框选中的数据,第一项是qrcode,第二项是名称
238
+      };
239
+    },
240
+    methods: {
241
+      // 拍照
242
+      photograph(data, obj) {
243
+        photographTool(data, obj);
244
+      },
245
+      // 继续扫描
246
+      Scanning_again() {
247
+        SM().then((ress1) => {
248
+          // ----------------
249
+          uni.showLoading({
250
+            title: "加载中",
251
+            mask: true,
252
+          });
253
+          //检验二维码的有效性
254
+          post("/dept/scanning", {
255
+            content: ress1,
256
+          }).then((result) => {
257
+            if (result.state == 200 || result.state == 201) {
258
+              let codes = result.code;
259
+              if (codes) {
260
+                let speCode = codes;
261
+                let data = {
262
+                  code: speCode,
263
+                  type: this.queryObj.type1,
264
+                  deptCode: this.DEPTCode,
265
+                  ids: [],
266
+                };
267
+                data.ids.push(this.dataId);
268
+                let postType = "";
269
+                if (this.type == "jPBag" || this.type == "drugsBag") {
270
+                  postType = "handleDrugsAndJp";
271
+                }
272
+                if (this.type == "specimen") {
273
+                  data["speCode"] = data.code;
274
+                  delete data.code;
275
+                  postType = "handleSpes";
276
+                }
277
+                if (this.type == "specimenPlan") {
278
+                  data["speCode"] = data.code;
279
+                  delete data.code;
280
+                  postType = "handlePlanSpes";
281
+                }
282
+                if (this.type == "inspect") {
283
+                  postType = "handleIns";
284
+                }
285
+                if (this.type == "patientTransport") {
286
+                  postType = "handleTrans";
287
+                }
288
+                post("/workerOrder/" + postType, data).then((ress) => {
289
+                  uni.hideLoading();
290
+                  if (ress.status == 200) {
291
+                    if (this.type == "specimenPlan" || this.type == "specimen") {
292
+                      this.infoDATA = ress.data;
293
+                      this.speNum++;
294
+                      uni.setStorageSync("speNum", this.speNum);
295
+                      uni.navigateTo({
296
+                        url: `../scanning_Result/scanning_Result?type=${
297
+                        this.queryObj.type
298
+                      }&type1=${
299
+                        this.queryObj.type1
300
+                      }&infoData=${encodeURIComponent(
301
+                        JSON.stringify(ress.data)
302
+                      )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
303
+                        this.queryObj.deptCode
304
+                      }&dept=${this.queryObj.dept}&id=${this.dataId}&speNum=${
305
+                        this.speNum
306
+                      }&model=${encodeURIComponent(JSON.stringify(ress))}`,
307
+                      });
308
+                    } else if (
309
+                      this.type == "inspect" ||
310
+                      this.type == "patientTransport"
311
+                    ) {
312
+                      uni.navigateTo({
313
+                        url: `../scanning_Result/scanning_Result?type=${
314
+                        this.queryObj.type //baba
315
+                      }&type1=${
316
+                        this.queryObj.type1
317
+                      }&infoData=${encodeURIComponent(
318
+                        JSON.stringify(ress.data)
319
+                      )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
320
+                        this.queryObj.deptCode
321
+                      }&dept=${this.queryObj.dept}&id=${this.dataId}&speNum=${
322
+                        this.speNum
323
+                      }&model=${encodeURIComponent(
324
+                        JSON.stringify(ress)
325
+                      )}&patient=${ress.patient}&patientCode=${
326
+                        ress.patientCode
327
+                      }&deptName=${ress.deptName}&bedNum=${ress.bedNum}`,
328
+                      });
329
+                    } else {
330
+                      uni.navigateTo({
331
+                        url: `../scanning_Result/scanning_Result?type=${
332
+                        this.queryObj.type
333
+                      }&type1=${
334
+                        this.queryObj.type1
335
+                      }&infoData=${encodeURIComponent(
336
+                        JSON.stringify(ress.data)
337
+                      )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
338
+                        this.queryObj.deptCode
339
+                      }&dept=${this.queryObj.dept}&id=${this.dataId}&speNum=${
340
+                        this.speNum
341
+                      }&model=${encodeURIComponent(JSON.stringify(ress))}`,
342
+                      });
343
+                    }
344
+                  } else {
345
+                    uni.navigateTo({
346
+                      url: `../scanning_Result/scanning_Result?type=${
347
+                      this.queryObj.type
348
+                    }&type1=${this.queryObj.type1}&status=${ress.status}&msg=${
349
+                      ress.msg
350
+                    }&deptCode=${this.queryObj.deptCode}&dept=${
351
+                      this.queryObj.dept
352
+                    }&id=${this.dataId}&speNum=${
353
+                      this.speNum
354
+                    }&model=${encodeURIComponent(
355
+                      JSON.stringify(this.infoDATA)
356
+                    )}`,
357
+                    });
358
+                  }
359
+                });
360
+              } else {
361
+                uni.hideLoading();
362
+              }
363
+            } else {
364
+              uni.hideLoading();
365
+              uni.showToast({
366
+                icon: "none",
367
+                title: "请求失败!",
368
+              });
369
+            }
370
+          });
371
+          // ------------------------------
372
+        });
373
+      },
374
+      // 确定
375
+      ok() {
376
+        this.models.disjunctor = false;
377
+        let data = {
378
+          type: this.queryObj.type1,
379
+          ids: [],
380
+        };
381
+        data.ids.push(this.wcId);
382
+        // uni.showLoading({
383
+        //   title: '加载中',
384
+        //   mask: true
385
+        // });
386
+        //只要是标本轮巡1对多或者多对多
387
+        if (
388
+          this.queryObj.type1 === "plan-spe-ddd-2" ||
389
+          this.queryObj.type1 === "plan-spe-ddd-3" ||
390
+          this.queryObj.type1 === "plan-spe-dsd-2" ||
391
+          this.queryObj.type1 === "plan-spe-dsd-3"
392
+        ) {
393
+          post("/workerOrder/finishPlanSpes", data).then((res) => {
394
+            // uni.hideLoading()
395
+            if (res.status == 200) {
396
+              uni.navigateTo({
397
+                url: "../receiptpage/receiptpage",
398
+              });
399
+            } else {
400
+              uni.showToast({
401
+                icon: "none",
402
+                title: "请求失败!",
403
+              });
404
+            }
405
+          });
406
+        } else {
407
+          post("/workerOrder/finishSpes", data).then((res) => {
408
+            // uni.hideLoading()
409
+            if (res.status == 200) {
410
+              uni.navigateTo({
411
+                url: "../receiptpage/receiptpage",
412
+              });
413
+            } else {
414
+              uni.showToast({
415
+                icon: "none",
416
+                title: "请求失败!",
417
+              });
418
+            }
419
+          });
420
+        }
421
+      },
422
+      // 取消
423
+      cancel() {
424
+        this.models.disjunctor = false;
425
+      },
426
+      // 完成扫描
427
+      Scanning_complete(id) {
428
+        let data = {
429
+          type: this.queryObj.type1,
430
+          ids: [],
431
+        };
432
+        data.ids.push(id);
433
+        if (
434
+          this.queryObj.type1 == "plan-spe-ddd-2" ||
435
+          this.queryObj.type1 == "spe-ddd-2"
436
+        ) {
437
+          this.wcId = id;
438
+          this.models = {
439
+            disjunctor: true,
440
+            title: "提示",
441
+            content: "是否确定标本已扫描完成?",
442
+            icon: "warn",
443
+            operate: {
444
+              ok: "确定",
445
+              cancel: "取消",
446
+            },
447
+          };
448
+        } else {
449
+          uni.navigateTo({
450
+            url: `../scanning/scanning?type=${this.queryObj.type}&type1=${
451
+            this.queryObj.type1
452
+          }&id=${encodeURIComponent(JSON.stringify(data.ids))}&deptCode=${
453
+            this.queryObj.deptCode
454
+          }&dept=${this.queryObj.dept}&speNum=${this.speNum}`,
455
+          });
456
+        }
457
+      },
458
+      // 继续执行工单,当扫错科室码的时候,直接跳过,默默执行正确的科室码
459
+      goToRight(id) {
460
+        // flag 为1时查检查科室,flag为2时查终点科室
461
+        let flag;
462
+        // 患者转科,患者陪检
463
+        if (
464
+          this.queryObj.type1 == "trans-dsd-1" ||
465
+          this.queryObj.type1 == "ins-dsd-1"
466
+        ) {
467
+          flag = 2;
468
+        }
469
+        if (this.queryObj.type1 == "ins-zxz-1") {
470
+          flag = 1;
471
+        }
472
+        let postData = {
473
+          workOrderId: id,
474
+          flag: flag,
475
+        };
476
+        uni.showLoading({
477
+          title: "加载中",
478
+          mask: true,
479
+        });
480
+        post("/workerOrder/continueWorkOrder", postData).then((res) => {
481
+          uni.hideLoading();
482
+          console.log(res);
483
+          if (res.state == 200) {
484
+            let radioItem = [];
485
+            res.data.forEach((item) => {
486
+              let flag = radioItem.every(
487
+                (item1) => item1.qrcode !== item.qrcode + "__" + item.deptName
488
+              ); //如果radioItem里的所有项都与之不重复
489
+              if (flag) {
490
+                radioItem.push({
491
+                  qrcode: item.qrcode + "__" + item.deptName,
492
+                  deptName: item.deptName,
493
+                });
494
+              }
495
+            });
496
+            this.models1 = {
497
+              disjunctor: true,
498
+              title: "请选择正确的科室",
499
+              radioItem,
500
+              icon: "",
501
+              operate: {
502
+                ok: "确定",
503
+                cancel: "取消",
504
+              },
505
+            };
506
+          } else {
507
+            uni.showToast({
508
+              icon: "none",
509
+              title: "请求失败!",
510
+            });
511
+          }
512
+        });
513
+      },
514
+      // 选中单选框
515
+      radioChange1(item) {
516
+        console.log(item);
517
+        this.selectRadio = item.split("__");
518
+      },
519
+      // 确定
520
+      ok1() {
521
+        this.models1.disjunctor = false;
522
+        if (!this.selectRadio.length) {
523
+          //默认选中第一项,选中则是选中项
524
+          this.selectRadio = [
525
+            this.models1.radioItem[0].qrcode.split("__")[0],
526
+            this.models1.radioItem[0].deptName,
527
+          ];
528
+        }
529
+        uni.navigateTo({
530
+          url: `../scanning_code/scanning_code?type=${this.queryObj.type}&type1=${this.queryObj.type1}&id=${this.queryObj.id}&deptCode=${this.selectRadio[0]}&dept=${this.selectRadio[1]}`,
531
+        });
532
+      },
533
+      // 取消
534
+      cancel1() {
535
+        this.models1.disjunctor = false;
536
+      },
537
+      // 知道了
538
+      showAlert(id) {
539
+        uni.navigateTo({
540
+          url: "../receiptpage/receiptpage",
541
+        });
542
+      },
543
+    },
544
+    onLoad(options) {
545
+      console.log(options, "result");
546
+      this.queryObj = options;
547
+      this.isKs = this.queryObj.isKs;
548
+      if (options.infoData && options.infoData != "undefined") {
549
+        this.infoDATA = JSON.parse(options.infoData);
550
+      } else if (options.model) {
551
+        this.infoDATA = JSON.parse(options.model);
552
+      }
553
+
554
+      this.dataId = options.id;
555
+      this.RESData = options.resData;
556
+      this.res["status"] = options.status;
557
+      this.res["msg"] = options.msg;
558
+      console.log(options.patient);
559
+      this.res["patient"] = options.patient;
560
+      this.res["patientCode"] = options.patientCode;
561
+      this.res["deptName"] = options.deptName;
562
+      this.res["bedNum"] = options.bedNum;
563
+      this.infoType = options.type1;
564
+      if (options.dept) {
565
+        this.DEPT = options.dept;
566
+      }
567
+      if (options.speNum) {
568
+        this.speNum = options.speNum;
569
+      } else {
570
+        this.speNumLocal = uni.getStorageSync("speNum");
571
+        if (this.speNumLocal) {
572
+          this.speNum = Number(this.speNumLocal);
573
+        } else {
574
+          this.speNum = 0;
575
+        }
576
+      }
577
+      this.DEPTCode = options.deptCode;
578
+      this.type = options.type;
579
+      // #ifdef APP-PLUS
580
+      webHandle("no", "app");
581
+      // #endif
582
+      // #ifdef H5
583
+      webHandle("no", "wx");
584
+      // #endif
585
+    },
586
+  };
587
+</script>
588
+<style lang="less">
589
+  .Scanning_Result {
590
+    padding: 0 74rpx;
591
+
592
+    .Scanning_top {
593
+      .Scanning_top_icon {
594
+        width: 140rpx;
595
+        height: 140rpx;
596
+        margin: 0 auto;
597
+        margin-top: 116rpx;
598
+        border-radius: 50%;
599
+        line-height: 140rpx;
600
+
601
+        .cubeic-ok {
602
+          font-size: 140rpx;
603
+          color: #35b34a;
604
+        }
605
+
606
+        .cubeic-close {
607
+          font-size: 140rpx;
608
+          color: #ff3b53;
609
+        }
610
+      }
611
+
612
+      .Scanning_top_text {
613
+        .text1 {
614
+          margin-top: 40rpx;
615
+          font-size: 48rpx;
616
+          text-align: center;
617
+        }
618
+
619
+        .success_tips {
620
+          color: red;
621
+          font-size: 30rpx;
622
+        }
623
+      }
624
+    }
625
+
626
+    .Scanning_cont {
627
+      font-size: 32rpx;
628
+      text-align: center;
629
+
630
+      view {
631
+        margin-bottom: 16rpx;
632
+      }
633
+
634
+      .Scanning_cont_center {
635
+        text-align: center;
636
+      }
637
+
638
+      .text {
639
+        margin-top: 24rpx;
640
+        color: #35b34a;
641
+      }
642
+
643
+      .text1 {
644
+        margin-top: 24rpx;
645
+        color: #ff3b53;
646
+      }
647
+    }
648
+
649
+    .foot_btn {
650
+      line-height: 88rpx;
651
+      height: 100rpx;
652
+      margin-top: 40rpx;
653
+      display: flex;
654
+      justify-content: center;
655
+
656
+      .btn1,
657
+      .btn2,
658
+      .btn3 {
659
+        height: 88rpx;
660
+        width: 45%;
661
+        margin: 0 1%;
662
+        background-image: linear-gradient(to right, #72c172, #3bb197);
663
+        color: #fff;
664
+        border-radius: 8rpx;
665
+        font-size: 32rpx;
666
+        margin-top: 16rpx;
667
+        text-align: center;
668
+      }
669
+    }
670
+  }
671
+</style>

File diff suppressed because it is too large
+ 1119 - 0
pages/scanning_all/scanning_all.vue


File diff suppressed because it is too large
+ 1275 - 0
pages/scanning_code/scanning_code.vue


+ 522 - 0
pages/scanning_djEnd/scanning_djEnd.vue

@@ -0,0 +1,522 @@
1
+<template>
2
+  <view class="Scanning_djEnd">
3
+    <view class="Scanning_top" v-if="infoDATA.status == 200">
4
+      <view class="Scanning_top_icon">
5
+        <text class="cubeic-ok icon_transport transport-duigou"></text>
6
+      </view>
7
+      <view class="Scanning_top_text">
8
+        <view class="text1">操作成功</view>
9
+      </view>
10
+    </view>
11
+
12
+    <view
13
+      class="Scanning_top"
14
+      v-if="
15
+        infoDATA.status == 10005 ||
16
+        infoDATA.status == 100018 ||
17
+        infoDATA.status == 10004 ||
18
+        infoDATA.status == 100021 ||
19
+        infoDATA.status == 500 ||
20
+        infoDATA.status == 100031
21
+      "
22
+    >
23
+      <view class="Scanning_top_icon">
24
+        <text class="cubeic-close icon_transport transport-shibai"></text>
25
+      </view>
26
+      <view class="Scanning_top_text">
27
+        <view class="text1">操作失败</view>
28
+      </view>
29
+    </view>
30
+
31
+    <view
32
+      class="Scanning_cont"
33
+      v-if="
34
+        (infoDATA.status == 200 && type == 'specimenPlan') ||
35
+        (infoDATA.status == 200 && type == 'specimen')
36
+      "
37
+    ></view>
38
+    <view
39
+      class="Scanning_cont"
40
+      v-if="
41
+        (infoDATA.status == 200 && type == 'patientTransport') ||
42
+        (infoDATA.status == 200 && type == 'inspect')
43
+      "
44
+      >扫描患者腕带并将患者送往目标科室.</view
45
+    >
46
+    <view
47
+      class="Scanning_cont"
48
+      v-if="
49
+        (infoDATA.status == 200 && type == 'drugsBag') ||
50
+        (infoDATA.status == 200 && type == 'jPBag')
51
+      "
52
+      >已到达目标科室,请扫描药包或静配包.</view
53
+    >
54
+    <view
55
+      class="Scanning_cont"
56
+      v-if="
57
+        infoDATA.status == 200 && type == 'other' && infoDATA.type == 'qt-ddd-1'
58
+      "
59
+      >已到达目标科室,请执行该工单.</view
60
+    >
61
+    <view
62
+      class="Scanning_cont"
63
+      v-if="
64
+        (infoDATA.state == 'finish' &&
65
+          infoDATA.status == 200 &&
66
+          type == 'specimenPlan' &&
67
+          infoDATA.type == 'plan-spe-dsd-1') ||
68
+        (infoDATA.status == 200 &&
69
+          type == 'other' &&
70
+          infoDATA.type == 'qt-dsd-1')
71
+      "
72
+      >已到达目标科室,工单已完成.</view
73
+    >
74
+    <view
75
+      class="Scanning_cont"
76
+      v-if="
77
+        (infoDATA.status == 200 &&
78
+          type == 'specimenPlan' &&
79
+          infoDATA.type != 'plan-spe-ddd-1' &&
80
+          infoDATA.type != 'plan-spe-dsd-1') ||
81
+        (infoDATA.status == 200 &&
82
+          type == 'specimen' &&
83
+          infoDATA.type != 'spe-ddd-1' &&
84
+          infoDATA.type != 'spe-dsd-1')
85
+      "
86
+      >已到达目标科室,请扫描标本.</view
87
+    >
88
+    <view
89
+      class="Scanning_cont"
90
+      v-if="
91
+        (infoDATA.status == 200 &&
92
+          type == 'specimenPlan' &&
93
+          infoDATA.type == 'plan-spe-ddd-1') ||
94
+        (infoDATA.status == 200 &&
95
+          type == 'specimen' &&
96
+          infoDATA.type == 'spe-ddd-1')
97
+      "
98
+      >已到达目标科室,请取标本后送达目标科室.</view
99
+    >
100
+    <view
101
+      class="Scanning_cont"
102
+      v-if="
103
+        (infoDATA.state != 'finish' &&
104
+          infoDATA.status == 200 &&
105
+          type == 'specimenPlan' &&
106
+          infoDATA.type == 'plan-spe-dsd-1') ||
107
+        (infoDATA.status == 200 &&
108
+          type == 'specimen' &&
109
+          infoDATA.type == 'spe-dsd-1')
110
+      "
111
+      >已到达目标科室,请放置标本完成该工单.</view
112
+    >
113
+    <view class="Scanning_cont" v-if="infoDATA.status != 200">
114
+      <view>{{ infoDATA.msg }}</view>
115
+    </view>
116
+    <view
117
+      class="foot_btn"
118
+      v-if="type == 'inspect' || type == 'patientTransport'"
119
+    >
120
+      <view class="btn3" @click="Scanning_again()">继续扫描</view>
121
+    </view>
122
+    <view class="foot_btn" v-if="type == 'drugsBag' || type == 'jPBag'">
123
+      <view class="btn3" @click="Scanning_again()">继续扫描</view>
124
+    </view>
125
+    <view
126
+      class="foot_btn"
127
+      v-if="
128
+        (type == 'specimenPlan' &&
129
+          type1 != 'plan-spe-dsd-1' &&
130
+          (type1 != 'plan-spe-ddd-1') & (type1 != 'plan-spe-ddd-2')) ||
131
+        (type == 'specimen' &&
132
+          type1 != 'spe-dsd-1' &&
133
+          (type1 != 'spe-ddd-1') & (type1 != 'spe-ddd-2'))
134
+      "
135
+    >
136
+      <view class="btn1" @click="Scanning_again()">继续扫描</view>
137
+      <view class="btn2" @click="Scanning_complete(ids)">完成扫描</view>
138
+    </view>
139
+    <view
140
+      class="foot_btn"
141
+      v-if="
142
+        (type == 'specimenPlan' && type1 == 'plan-spe-ddd-2') ||
143
+        (type == 'specimen' && type1 == 'spe-ddd-2')
144
+      "
145
+    >
146
+      <view class="btn1" @click="Scanning_again()">继续扫描</view>
147
+      <view class="btn2" @click="Scanning_complete(ids)">完成扫描</view>
148
+    </view>
149
+    <view
150
+      class="foot_btn"
151
+      v-if="
152
+        (infoDATA.state != 'finish' &&
153
+          type == 'specimenPlan' &&
154
+          type1 == 'plan-spe-dsd-1') ||
155
+        (type == 'specimen' && type1 == 'spe-dsd-1')
156
+      "
157
+    >
158
+      <view class="btn1" @click="Scanning_complete1(ids)">完成工单</view>
159
+      <view class="btn2" @click="showAlert()">继续配送</view>
160
+    </view>
161
+    <view
162
+      class="foot_btn"
163
+      v-if="
164
+        infoDATA.status != 200 &&
165
+        type != 'specimenPlan' &&
166
+        type != 'specimen' &&
167
+        type !== 'jPBag' &&
168
+        type !== 'inspect' &&
169
+        type !== 'drugsBag' &&
170
+        type !== 'patientTransport'
171
+      "
172
+    >
173
+      <view class="btn3" @click="showAlert()">知道了</view>
174
+    </view>
175
+    <view
176
+      class="foot_btn"
177
+      v-if="
178
+        (infoDATA.status == 200 && type1 == 'spe-ddd-1') ||
179
+        (infoDATA.status == 200 && type1 == 'plan-spe-ddd-1')
180
+      "
181
+    >
182
+      <view class="btn3" @click="showAlert()">知道了</view>
183
+    </view>
184
+    <view
185
+      class="foot_btn"
186
+      v-if="
187
+        (infoDATA.state == 'finish' &&
188
+          infoDATA.status == 200 &&
189
+          type == 'specimenPlan' &&
190
+          type1 == 'plan-spe-dsd-1') ||
191
+        (infoDATA.status == 200 && type == 'other')
192
+      "
193
+    >
194
+      <view class="btn3" @click="showAlert()">知道了</view>
195
+    </view>
196
+    <!-- 弹窗 -->
197
+    <showModel
198
+      :title="models.title"
199
+      :icon="models.icon"
200
+      :disjunctor="models.disjunctor"
201
+      :content="models.content"
202
+      @ok="ok"
203
+      @cancel="cancel"
204
+      :operate="models.operate"
205
+    ></showModel>
206
+  </view>
207
+</template>
208
+<script>
209
+import showModel from "../../components/showModel/showModel.vue";
210
+import { get, post, SM, webHandle } from "../../http/http.js";
211
+export default {
212
+  data() {
213
+    return {
214
+      // 弹窗model
215
+      models: {
216
+        disjunctor: false,
217
+      },
218
+      wcId: "", //工单完成ID
219
+      modelFlag: "", //工单完成类型
220
+      infoDATA: [],
221
+      ids: [],
222
+      speNum: 0,
223
+      type: "",
224
+      type1: "",
225
+      queryObj: {}, //路由传递过来的参数
226
+    };
227
+  },
228
+  methods: {
229
+    // 确定
230
+    ok() {
231
+      this.models.disjunctor = false;
232
+      if (this.modelFlag === "complete") {
233
+        //完成扫描
234
+        let postType = "";
235
+        if (this.queryObj.type1 == "plan-spe-ddd-2") {
236
+          postType = "finishPlanSpes";
237
+        } else if (this.queryObj.type1 == "spe-ddd-2") {
238
+          postType = "finishSpes";
239
+        }
240
+        let data = {
241
+          type: this.queryObj.type1,
242
+          ids: this.wcId,
243
+        };
244
+        post("/workerOrder/" + postType, data).then((res) => {
245
+          if (res.status == 200) {
246
+            uni.navigateTo({
247
+              url: "../receiptpage/receiptpage",
248
+            });
249
+          } else {
250
+            uni.showToast({
251
+              icon: "none",
252
+              title: "请求失败!",
253
+            });
254
+          }
255
+        });
256
+      } else if (this.modelFlag === "complete1") {
257
+        //1对1标本完成工单
258
+        let ids = this.wcId;
259
+        post("/workerOrder/finishSpeOrder", ids).then((res) => {
260
+          if (res.status == 200) {
261
+            uni.navigateTo({
262
+              url: "../receiptpage/receiptpage",
263
+            });
264
+          } else {
265
+            uni.showToast({
266
+              icon: "none",
267
+              title: "请求失败!",
268
+            });
269
+          }
270
+        });
271
+      }
272
+    },
273
+    // 取消
274
+    cancel() {
275
+      this.models.disjunctor = false;
276
+    },
277
+    //完成扫描
278
+    Scanning_complete(id) {
279
+      this.modelFlag = "complete";
280
+      if (
281
+        this.queryObj.type1 == "plan-spe-ddd-2" ||
282
+        this.queryObj.type1 == "spe-ddd-2"
283
+      ) {
284
+        this.wcId = id;
285
+        this.models = {
286
+          disjunctor: true,
287
+          title: "提示",
288
+          content: "是否确定标本已扫描完成?",
289
+          icon: "warn",
290
+          operate: {
291
+            ok: "确定",
292
+            cancel: "取消",
293
+          },
294
+        };
295
+      } else {
296
+        uni.navigateTo({
297
+          url: `../scanning/scanning?type=${this.queryObj.type}&type1=${
298
+            this.queryObj.type1
299
+          }&deptCode=${this.queryObj.code}&dept=${
300
+            this.queryObj.dept
301
+          }&id=${encodeURIComponent(JSON.stringify(this.ids))}`,
302
+        });
303
+      }
304
+    },
305
+    //一对一完成工单
306
+    Scanning_complete1(id) {
307
+      this.modelFlag = "complete1";
308
+      this.wcId = id;
309
+      this.models = {
310
+        disjunctor: true,
311
+        title: "提示",
312
+        content: "是否确定标本配送完成?",
313
+        icon: "warn",
314
+        operate: {
315
+          ok: "确定",
316
+          cancel: "取消",
317
+        },
318
+      };
319
+    },
320
+    //继续扫描
321
+    Scanning_again() {
322
+      SM().then((ress1) => {
323
+        // ----------------
324
+        //检验二维码的有效性
325
+        post("/dept/scanning", {
326
+          content: ress1,
327
+        }).then((result) => {
328
+          if (result.state == 200 || result.state == 201) {
329
+            let ress = result.code;
330
+            let speCode = ress;
331
+            let data = {
332
+              code: speCode,
333
+              type: this.queryObj.type1,
334
+              deptCode: this.code,
335
+              ids: this.ids,
336
+            };
337
+            let postType = "";
338
+            if (this.type == "jPBag" || this.type == "drugsBag") {
339
+              postType = "handleDrugsAndJp";
340
+            }
341
+            if (this.type == "specimen") {
342
+              postType = "handleSpes";
343
+              data["speCode"] = data.code;
344
+              delete data.code;
345
+            }
346
+            if (this.type == "specimenPlan") {
347
+              postType = "handlePlanSpes";
348
+              data["speCode"] = data.code;
349
+              delete data.code;
350
+            }
351
+            if (this.type == "inspect") {
352
+              postType = "handleIns";
353
+            }
354
+            if (this.type == "patientTransport") {
355
+              postType = "handleTrans";
356
+            }
357
+            post("/workerOrder/" + postType, data).then((ress) => {
358
+              if (ress.status == 200) {
359
+                this.speNum++;
360
+                uni.navigateTo({
361
+                  url: `../scanning_djInfo/scanning_djInfo?type=${
362
+                    this.queryObj.type
363
+                  }&type1=${this.queryObj.type1}&infoData=${encodeURIComponent(
364
+                    JSON.stringify(ress.data)
365
+                  )}&status=${ress.status}&msg=${ress.msg}&deptCode=${
366
+                    this.queryObj.code
367
+                  }&dept=${this.queryObj.dept}&ids=${encodeURIComponent(
368
+                    JSON.stringify(this.ids)
369
+                  )}&speNum=${this.speNum}&model=${encodeURIComponent(
370
+                    JSON.stringify(ress)
371
+                  )}`,
372
+                });
373
+                uni.setStorageSync("speNum", this.speNum);
374
+              } else {
375
+                uni.navigateTo({
376
+                  url: `../scanning_djInfo/scanning_djInfo?type=${
377
+                    this.queryObj.type
378
+                  }&type1=${this.queryObj.type1}&status=${ress.status}&msg=${
379
+                    ress.msg
380
+                  }&deptCode=${this.queryObj.code}&dept=${
381
+                    this.queryObj.dept
382
+                  }&ids=${encodeURIComponent(
383
+                    JSON.stringify(this.ids)
384
+                  )}&speNum=${this.speNum}&infoData=${encodeURIComponent(
385
+                    JSON.stringify(ress.data)
386
+                  )}&model=${encodeURIComponent(JSON.stringify(ress))}`,
387
+                });
388
+              }
389
+            });
390
+          } else {
391
+            uni.showToast({
392
+              icon: "none",
393
+              title: "请求失败!",
394
+            });
395
+          }
396
+        });
397
+        // ------------------------------
398
+      });
399
+    },
400
+    // 知道了
401
+    showAlert() {
402
+      uni.navigateTo({
403
+        url: "../receiptpage/receiptpage",
404
+      });
405
+    },
406
+  },
407
+  onLoad(options) {
408
+    console.log(options, "djEnd");
409
+    this.queryObj = options;
410
+    let list = JSON.parse(options.model); //签到返回的信息
411
+    this.code = options.code; //二维码code
412
+    this.ids = options.ids && JSON.parse(options.ids); //科室ID数组
413
+    this.infoDATA = list;
414
+    if (options.type) {
415
+      //关联类型
416
+      this.type = options.type;
417
+    } else {
418
+      this.type = list.type;
419
+    }
420
+    this.type1 = options.type1;
421
+    if (options.speNum) {
422
+      this.speNum = options.speNum;
423
+    } else {
424
+      this.speNumLocal = uni.getStorageSync("speNum");
425
+      // 本地存在speNum的时候
426
+      if (this.speNumLocal) {
427
+        this.speNum = Number(this.speNumLocal);
428
+      }
429
+    }
430
+    // #ifdef APP-PLUS
431
+    webHandle("no", "app");
432
+    // #endif
433
+    // #ifdef H5
434
+    webHandle("no", "wx");
435
+    // #endif
436
+  },
437
+};
438
+</script>
439
+<style lang="less">
440
+.Scanning_djEnd {
441
+  padding: 0px 74rpx;
442
+
443
+  .Scanning_top {
444
+    height: 270rpx;
445
+
446
+    .Scanning_top_icon {
447
+      width: 140rpx;
448
+      height: 140rpx;
449
+      margin: 0 auto;
450
+      // margin-top: 116rpx;
451
+      border-radius: 50%;
452
+      line-height: 140rpx;
453
+
454
+      .cubeic-ok {
455
+        font-size: 140rpx;
456
+        color: #35b34a;
457
+      }
458
+
459
+      .cubeic-close {
460
+        font-size: 140rpx;
461
+        color: #ff3b53;
462
+      }
463
+    }
464
+
465
+    .Scanning_top_text {
466
+      .text1 {
467
+        margin-top: 40rpx;
468
+        font-size: 48rpx;
469
+        text-align: center;
470
+      }
471
+    }
472
+  }
473
+
474
+  .Scanning_cont {
475
+    font-size: 32rpx;
476
+    text-align: center;
477
+
478
+    view {
479
+      margin-bottom: 16rpx;
480
+    }
481
+
482
+    .text {
483
+      margin-top: 24rpx;
484
+      color: #35b34a;
485
+    }
486
+
487
+    .text1 {
488
+      margin-top: 24rpx;
489
+      color: #ff3b53;
490
+    }
491
+  }
492
+
493
+  .foot_btn {
494
+    line-height: 88rpx;
495
+    height: 100rpx;
496
+    margin-top: 40rpx;
497
+    text-align: center;
498
+
499
+    view {
500
+      height: 88rpx;
501
+      width: 45%;
502
+      background-image: linear-gradient(to right, #72c172, #3bb197);
503
+      color: #fff;
504
+      border-radius: 8rpx;
505
+      font-size: 32rpx;
506
+      margin-top: 16rpx;
507
+    }
508
+
509
+    .btn1 {
510
+      float: left;
511
+    }
512
+
513
+    .btn2 {
514
+      float: right;
515
+    }
516
+
517
+    .btn3 {
518
+      margin: 0 auto;
519
+    }
520
+  }
521
+}
522
+</style>

+ 514 - 0
pages/scanning_djInfo/scanning_djInfo.vue

@@ -0,0 +1,514 @@
1
+<template>
2
+  <view class="Scanning_djInfo">
3
+    <view class="Scanning_top" v-if="res.status == 200">
4
+      <view class="Scanning_top_icon">
5
+        <text class="cubeic-ok icon_transport transport-duigou"></text>
6
+      </view>
7
+      <view class="Scanning_top_text">
8
+        <view class="text1">操作成功</view>
9
+      </view>
10
+    </view>
11
+
12
+    <view
13
+      class="Scanning_top"
14
+      v-if="
15
+        res.status == 10005 ||
16
+        res.status == 100018 ||
17
+        res.status == 500 ||
18
+        res.status == 10004 ||
19
+        res.status == 100021 ||
20
+        res.status == 100020 ||
21
+        res.status == 100019 ||
22
+        res.status == 100031
23
+      "
24
+    >
25
+      <view class="Scanning_top_icon">
26
+        <text class="cubeic-close icon_transport transport-shibai"></text>
27
+      </view>
28
+      <view class="Scanning_top_text">
29
+        <view class="text1">操作失败</view>
30
+      </view>
31
+    </view>
32
+    <view class="Scanning_cont" v-if="res.status != 200 || res.msg != '成功!'">
33
+      <view>{{ res.msg }}</view>
34
+    </view>
35
+    <view
36
+      class="Scanning_cont"
37
+      v-if="
38
+        (res.status == 200 && type == 'specimenPlan') ||
39
+        (res.status == 200 && type == 'specimen')
40
+      "
41
+    >
42
+      <view>标本类型 : {{ infoDATA.data.stype.name || "-" }}</view>
43
+      <view>标本编号 : {{ infoDATA.data.scode || "-" }}</view>
44
+      <view>患者姓名 : {{ infoDATA.data.patientName || "-" }}</view>
45
+      <view>已扫描 : {{ speNum }}</view>
46
+    </view>
47
+    <view
48
+      class="Scanning_cont"
49
+      v-if="
50
+        (res.status == 200 && type == 'inspect') || type == 'patientTransport'
51
+      "
52
+    >
53
+      <view v-if="infoDATA.patient"
54
+        >患者姓名 : {{ infoDATA.patient || "-" }}</view
55
+      >
56
+      <view v-if="infoDATA.patient"
57
+        >患者编号 : {{ infoDATA.patientCode || "-" }}</view
58
+      >
59
+      <view v-if="infoDATA.patient"
60
+        >住院科室 : {{ infoDATA.deptName || "-" }}</view
61
+      >
62
+      <view v-if="infoDATA.patient">床号 : {{ infoDATA.bedNum || "-" }}</view>
63
+      <view v-if="infoDATA.data">
64
+        检查项目 :
65
+        <text v-for="(data, i) in infoDATA.data" :key="i"
66
+          >{{ data.inspectName }},</text
67
+        >
68
+      </view>
69
+      <view
70
+        v-if="
71
+          infoType == 'ins-dsd-1' ||
72
+          infoType == 'trans-dsd-1' ||
73
+          infoDATA.type == 'trans-dsd-1'
74
+        "
75
+        >工单已完成</view
76
+      >
77
+    </view>
78
+    <view
79
+      class="Scanning_cont"
80
+      v-if="
81
+        (res.status == 200 && type == 'drugsBag') ||
82
+        (res.status == 200 && type == 'jPBag')
83
+      "
84
+    >
85
+      <view v-if="res.status == 200 && type == 'drugsBag'"
86
+        >药包编码 : #{{ infoDATA.data.packid }}</view
87
+      >
88
+      <view v-if="res.status == 200 && type == 'jPBag'"
89
+        >静配编码 : #{{ infoDATA.data.packid }}</view
90
+      >
91
+      <view>所属科室 : {{ infoDATA.data.target.dept }}</view>
92
+      <text v-if="infoType == 'drug-dsd-2' || infoType == 'jp-dsd-2'"
93
+        >工单已完成。</text
94
+      >
95
+    </view>
96
+
97
+    <!-- <view class="foot_btn" v-if="idsType==1&&res.status==200">
98
+      <view class="btn1" @click="Scanning_again()">继续扫描</view>
99
+      <view class="btn2" @click="showAlert()">知道了</view>
100
+    </view> -->
101
+    <view
102
+      class="foot_btn"
103
+      v-if="
104
+        res.status == 100018 || type == 'specimen' || type == 'specimenPlan'
105
+      "
106
+    >
107
+      <view class="btn1" @click="Scanning_again()">继续扫描</view>
108
+      <view class="btn2" @click="Scanning_complete(ids)">完成扫描</view>
109
+    </view>
110
+    <view
111
+      class="foot_btn"
112
+      v-if="
113
+        type != 'specimen' &&
114
+        res.status != 200 &&
115
+        type != 'specimenPlan' &&
116
+        type !== 'drugsBag' &&
117
+        type !== 'jPBag' &&
118
+        type !== 'patientTransport'
119
+      "
120
+    >
121
+      <view class="btn3" @click="showAlert()">知道了</view>
122
+    </view>
123
+    <view
124
+      class="foot_btn"
125
+      v-if="
126
+        (res.status != 200 && type == 'drugsBag') ||
127
+        (res.status != 200 && type == 'jPBag') ||
128
+        (res.status != 200 && type == 'patientTransport')
129
+      "
130
+    >
131
+      <view class="btn3" @click="Scanning_again()">继续扫描</view>
132
+    </view>
133
+    <view
134
+      class="foot_btn"
135
+      v-if="
136
+        idsType == 2 &&
137
+        res.status == 200 &&
138
+        type != 'specimen' &&
139
+        idsType == 2 &&
140
+        res.status == 200 &&
141
+        type != 'specimenPlan'
142
+      "
143
+    >
144
+      <view class="btn3" @click="showAlert()">知道了</view>
145
+    </view>
146
+    <!-- 弹窗 -->
147
+    <showModel
148
+      :title="models.title"
149
+      :icon="models.icon"
150
+      :disjunctor="models.disjunctor"
151
+      :content="models.content"
152
+      @ok="ok"
153
+      @cancel="cancel"
154
+      :operate="models.operate"
155
+    ></showModel>
156
+  </view>
157
+</template>
158
+<script>
159
+import showModel from "../../components/showModel/showModel.vue";
160
+import { get, post, SM, webHandle } from "../../http/http.js";
161
+export default {
162
+  data() {
163
+    return {
164
+      // 弹窗model
165
+      models: {
166
+        disjunctor: false,
167
+      },
168
+      wcId: "", //工单完成ID
169
+      infoDATA: [],
170
+      res: { status: "", msg: "" },
171
+      infoType: "",
172
+      DEPTCode: "",
173
+      RESData: {},
174
+      DEPT: "",
175
+      dataId: "",
176
+      type: "",
177
+      model: {},
178
+      idsType: 1,
179
+      packid: "",
180
+      speNum: 0,
181
+      queryObj: {}, //路由传递过来的参数
182
+    };
183
+  },
184
+  methods: {
185
+    // 确定
186
+    ok() {
187
+      let postType = "";
188
+      if (this.queryObj.type1 == "plan-spe-ddd-2") {
189
+        postType = "finishPlanSpes";
190
+      } else if (this.queryObj.type1 == "spe-ddd-2") {
191
+        postType = "finishSpes";
192
+      }
193
+      this.models.disjunctor = false;
194
+      let data = {
195
+        type: this.queryObj.type1,
196
+        ids: this.wcId,
197
+      };
198
+      post("/workerOrder/" + postType, data).then((res) => {
199
+        if (res.status == 200) {
200
+          uni.navigateTo({
201
+            url: "../receiptpage/receiptpage",
202
+          });
203
+        } else {
204
+          uni.showToast({
205
+            icon: "none",
206
+            title: "请求失败!",
207
+          });
208
+        }
209
+      });
210
+    },
211
+    // 取消
212
+    cancel() {
213
+      this.models.disjunctor = false;
214
+    },
215
+    //完成扫描
216
+    Scanning_complete(id) {
217
+      if (
218
+        this.queryObj.type1 == "plan-spe-ddd-2" ||
219
+        this.queryObj.type1 == "spe-ddd-2"
220
+      ) {
221
+        this.wcId = id;
222
+        this.models = {
223
+          disjunctor: true,
224
+          title: "提示",
225
+          content: "是否确定标本已扫描完成?",
226
+          icon: "warn",
227
+          operate: {
228
+            ok: "确定",
229
+            cancel: "取消",
230
+          },
231
+        };
232
+      } else {
233
+        uni.navigateTo({
234
+          url: `../scanning/scanning?type=${this.queryObj.type}&type1=${
235
+            this.queryObj.type1
236
+          }&id=${encodeURIComponent(JSON.stringify(id))}&deptCode=${
237
+            this.queryObj.deptCode
238
+          }&dept=${this.queryObj.dept}`,
239
+        });
240
+      }
241
+    },
242
+    // 继续扫描
243
+    Scanning_again() {
244
+      let list = [];
245
+      let postType = "";
246
+      let ids = [];
247
+      if (this.ids && this.ids[0]) {
248
+        ids = this.ids;
249
+      } else if (this.dataId) {
250
+        ids = [];
251
+        ids.push(this.dataId);
252
+      }
253
+      let data = {
254
+        ids: ids,
255
+        deptCode: this.DEPTCode,
256
+        code: "", // 2
257
+      };
258
+      SM().then((ress1) => {
259
+        // ----------------
260
+        //检验二维码的有效性
261
+        post("/dept/scanning", {
262
+          content: ress1,
263
+        }).then((result) => {
264
+          if (result.state == 200 || result.state == 201) {
265
+            let ress = result.code;
266
+            if (ress) {
267
+              data.code = ress;
268
+              if (this.type == "inspect") {
269
+                postType = "handleIns";
270
+                list = data;
271
+              }
272
+              if (this.type == "jPBag" || this.type == "drugsBag") {
273
+                postType = "handleDrugsAndJp";
274
+                data["type"] = this.infoType;
275
+                list = data;
276
+              }
277
+              if (this.type == "specimen") {
278
+                postType = "handleSpes";
279
+                data["speCode"] = data.code;
280
+                delete data.code;
281
+                data["type"] = this.infoType;
282
+                list = data;
283
+              }
284
+              if (this.type == "specimenPlan") {
285
+                postType = "handlePlanSpes";
286
+                data["speCode"] = data.code;
287
+                delete data.code;
288
+                data["type"] = this.infoType;
289
+                list = data;
290
+              }
291
+              if (this.type == "patientTransport") {
292
+                postType = "handleTrans";
293
+                list = data;
294
+              }
295
+              post("/workerOrder/" + postType, list).then((res) => {
296
+                if (res.status == 200) {
297
+                  if (
298
+                    this.type == "inspect" ||
299
+                    this.type == "patientTransport"
300
+                  ) {
301
+                    if (res.ids) {
302
+                      for (var i = 0; i < this.ids.length; i++) {
303
+                        if (this.ids[i] == res.ids[0]) {
304
+                          this.ids.splice(i, 1);
305
+                        }
306
+                      }
307
+                      if (this.ids.length > 1) {
308
+                        this.idsType = 1;
309
+                      } else {
310
+                        this.idsType = 2;
311
+                      }
312
+                    }
313
+                    this.infoDATA = res;
314
+                    this.type = this.type;
315
+                    this.DEPTCode = this.DEPTCode;
316
+                  } else if (this.type == "drugsBag") {
317
+                    // this.infoDATA.data.packid = res.data.packid;
318
+                    this.infoDATA = res;
319
+                    this.res["status"] = res.status;
320
+                    this.res["msg"] = res.msg;
321
+                  } else if (
322
+                    this.type == "specimenPlan" ||
323
+                    this.type == "specimen"
324
+                  ) {
325
+                    this.infoDATA = res;
326
+                    this.speNum++;
327
+                    uni.setStorageSync("speNum", this.speNum); //seimin 2020年6月15日18:45:46
328
+                    // --------------------------
329
+                    this.res["status"] = res.status;
330
+                    this.res["msg"] = res.msg;
331
+                    // --------------------------
332
+                  } else if (this.type == "jPBag") {
333
+                    // this.infoDATA.data.packid = res.data.packid;
334
+                    this.infoDATA = res;
335
+                    this.res["status"] = res.status;
336
+                    this.res["msg"] = res.msg;
337
+                  } else {
338
+                    uni.navigateTo({
339
+                      url: `../scanning_djEnd/scanning_djEnd?type=${
340
+                        this.queryObj.type
341
+                      }&type1=${this.queryObj.type1}&code=${
342
+                        this.queryObj.deptCode
343
+                      }&dept=${this.queryObj.dept}&ids=${encodeURIComponent(
344
+                        JSON.stringify(this.ids)
345
+                      )}&speNum=${this.speNum}&model=${encodeURIComponent(
346
+                        JSON.stringify(res)
347
+                      )}`,
348
+                    });
349
+                  }
350
+                } else {
351
+                  uni.navigateTo({
352
+                    url: `../scanning_djEnd/scanning_djEnd?type=${
353
+                      this.queryObj.type
354
+                    }&type1=${this.queryObj.type1}&code=${
355
+                      this.queryObj.deptCode
356
+                    }&dept=${this.queryObj.dept}&ids=${encodeURIComponent(
357
+                      JSON.stringify(this.ids)
358
+                    )}&speNum=${this.speNum}&model=${encodeURIComponent(
359
+                      JSON.stringify(res)
360
+                    )}`,
361
+                  });
362
+                }
363
+              });
364
+            }
365
+          } else {
366
+            uni.showToast({
367
+              icon: "none",
368
+              title: "请求失败!",
369
+            });
370
+          }
371
+        });
372
+        // ------------------------------
373
+      });
374
+    },
375
+    // 知道了
376
+    showAlert() {
377
+      uni.navigateTo({
378
+        url: "../receiptpage/receiptpage",
379
+      });
380
+    },
381
+  },
382
+  onLoad(options) {
383
+    this.queryObj = options;
384
+    if (this.queryObj.model) {
385
+      let list = JSON.parse(this.queryObj.model);
386
+      this.infoDATA = list;
387
+    } else {
388
+      this.infoDATA = this.queryObj.infoData;
389
+    }
390
+
391
+    this.RESData = this.queryObj.resData;
392
+    this.res["status"] = this.queryObj.status;
393
+    this.res["msg"] = this.queryObj.msg;
394
+    this.res["patient"] = this.queryObj.patient;
395
+    this.infoType = this.queryObj.type1;
396
+    if (this.queryObj.dept) {
397
+      this.DEPT = this.queryObj.dept;
398
+    }
399
+    this.queryObj.ids = JSON.parse(this.queryObj.ids);
400
+    if (this.queryObj.ids) {
401
+      this.ids = this.queryObj.ids;
402
+      if (this.ids.length > 1) {
403
+        this.idsType = 1;
404
+      } else {
405
+        this.idsType = 2;
406
+      }
407
+    }
408
+    if (this.queryObj.speNum) {
409
+      this.speNum = this.queryObj.speNum;
410
+    } else {
411
+      this.speNum = uni.getStorageSync("speNum");
412
+      this.speNum = Number(this.speNum);
413
+    }
414
+    this.DEPTCode = this.queryObj.deptCode;
415
+    this.type = this.queryObj.type;
416
+    // #ifdef APP-PLUS
417
+    webHandle("no", "app");
418
+    // #endif
419
+    // #ifdef H5
420
+    webHandle("no", "wx");
421
+    // #endif
422
+  },
423
+};
424
+</script>
425
+<style lang="less">
426
+.Scanning_djInfo {
427
+  padding: 0 74rpx;
428
+
429
+  .Scanning_top {
430
+    height: 270rpx;
431
+
432
+    .red {
433
+      background-color: #ff3b53 !important;
434
+    }
435
+
436
+    .Scanning_top_icon {
437
+      width: 140rpx;
438
+      height: 140rpx;
439
+      margin: 0 auto;
440
+      margin-top: 116rpx;
441
+      border-radius: 50%;
442
+      line-height: 140rpx;
443
+
444
+      .cubeic-ok {
445
+        font-size: 140rpx;
446
+        color: #35b34a;
447
+      }
448
+
449
+      .cubeic-close {
450
+        font-size: 140rpx;
451
+        color: #ff3b53;
452
+      }
453
+    }
454
+
455
+    .Scanning_top_text {
456
+      .text1 {
457
+        margin-top: 40rpx;
458
+        font-size: 48rpx;
459
+        text-align: center;
460
+      }
461
+    }
462
+  }
463
+
464
+  .Scanning_cont {
465
+    font-size: 32rpx;
466
+    text-align: center;
467
+
468
+    view {
469
+      margin-bottom: 16rpx;
470
+    }
471
+
472
+    .text {
473
+      margin-top: 24rpx;
474
+      color: #35b34a;
475
+    }
476
+
477
+    .text1 {
478
+      margin-top: 24rpx;
479
+      color: #ff3b53;
480
+    }
481
+  }
482
+
483
+  .foot_btn {
484
+    line-height: 88rpx;
485
+    height: 100rpx;
486
+    margin-top: 40rpx;
487
+    text-align: center;
488
+
489
+    .btn1,
490
+    .btn2,
491
+    .btn3 {
492
+      height: 88rpx;
493
+      width: 45%;
494
+      background-image: linear-gradient(to right, #72c172, #3bb197);
495
+      color: #fff;
496
+      border-radius: 8rpx;
497
+      font-size: 32rpx;
498
+      margin-top: 16rpx;
499
+    }
500
+
501
+    .btn1 {
502
+      float: left;
503
+    }
504
+
505
+    .btn2 {
506
+      float: right;
507
+    }
508
+
509
+    .btn3 {
510
+      margin: 0 auto;
511
+    }
512
+  }
513
+}
514
+</style>

File diff suppressed because it is too large
+ 1076 - 0
pages/scanning_ins/scanning_ins.vue


+ 171 - 0
pages/scanning_insEnd/scanning_insEnd.vue

@@ -0,0 +1,171 @@
1
+<template>
2
+  <view class="Scanning_insEnd">
3
+    <view class="Scanning_top" v-if="infoDATA.status==200">
4
+      <view class="Scanning_top_icon">
5
+        <text class="cubeic-ok icon_transport transport-duigou"></text>
6
+      </view>
7
+      <view class="Scanning_top_text">
8
+        <view class="text1">
9
+          操作成功
10
+        </view>
11
+      </view>
12
+    </view>
13
+
14
+    <view class="Scanning_top" v-if="infoDATA.status==10005||infoDATA.status==100018||infoDATA.status==10004||infoDATA.status==100021||infoDATA.status==100031||infoDATA.status==500">
15
+      <view class="Scanning_top_icon">
16
+        <text class="cubeic-close icon_transport transport-shibai"></text>
17
+      </view>
18
+      <view class="Scanning_top_text">
19
+        <view class="text1">
20
+          操作失败
21
+        </view>
22
+      </view>
23
+    </view>
24
+
25
+    <view class="Scanning_cont" v-if="infoDATA.status==200&&type=='specimenPlan'||infoDATA.status==200&&type=='specimen'">
26
+
27
+    </view>
28
+    <view class="Scanning_cont" v-if="infoDATA.status==200&&type=='patientTransport'||type=='inspect'">
29
+      <view>请将患者送往目标科室.</view>
30
+      <view v-if="infoDATA.patient">
31
+        患者姓名 : {{infoDATA.patient||'-'}}
32
+      </view>
33
+      <view v-if="infoDATA.patientCode">
34
+        患者编号 : {{infoDATA.patientCode||'-'}}
35
+      </view>
36
+      <view v-if="infoDATA.deptName">
37
+        住院科室 : {{infoDATA.deptName||'-'}}
38
+      </view>
39
+      <view v-if="infoDATA.bedNum">
40
+        床号 : {{infoDATA.bedNum||'-'}}
41
+      </view>
42
+    </view>
43
+    <view class="Scanning_cont" v-if="infoDATA.status==200&&type=='drugsBag'">
44
+      请将药品送往目标科室.
45
+    </view>
46
+    <view class="Scanning_cont" v-if="infoDATA.status!=200">
47
+      <view>
48
+        {{infoDATA.msg}}
49
+      </view>
50
+    </view>
51
+    <view class="foot_btn">
52
+      <view class="btn3" @click="showAlert()">
53
+        知道了
54
+      </view>
55
+    </view>
56
+  </view>
57
+</template>
58
+<script>
59
+  import {
60
+    get,
61
+    post,
62
+    webHandle
63
+  } from "../../http/http.js";
64
+  export default {
65
+    data() {
66
+      return {
67
+        infoDATA: [],
68
+        type: ""
69
+      };
70
+    },
71
+    methods: {
72
+      // 知道了
73
+      showAlert() {
74
+        uni.navigateTo({
75
+          url: '../receiptpage/receiptpage'
76
+        });
77
+      }
78
+    },
79
+    onLoad(options) {
80
+      let list = JSON.parse(options.model);
81
+      this.infoDATA = list;
82
+      if (options.type) {
83
+        this.type = options.type;
84
+      } else {
85
+        this.type = list.type;
86
+      }
87
+      // #ifdef APP-PLUS
88
+      webHandle('no','app')
89
+      // #endif
90
+      // #ifdef H5
91
+      webHandle('no','wx')
92
+      // #endif
93
+    }
94
+  };
95
+</script>
96
+<style lang="less">
97
+  .Scanning_insEnd {
98
+    padding: 0 74rpx;
99
+
100
+    .Scanning_top {
101
+      height: 270rpx;
102
+
103
+      .red {
104
+        background-color: #ff3b53 !important;
105
+      }
106
+
107
+      .Scanning_top_icon {
108
+        width: 140rpx;
109
+        height: 140rpx;
110
+        margin: 0 auto;
111
+        margin-top: 116rpx;
112
+        border-radius: 50%;
113
+        line-height: 140rpx;
114
+
115
+        .cubeic-ok {
116
+          font-size: 140rpx;
117
+          color: #35b34a
118
+        }
119
+
120
+        .cubeic-close {
121
+          font-size: 140rpx;
122
+          color: #ff3b53;
123
+        }
124
+      }
125
+
126
+      .Scanning_top_text {
127
+        .text1 {
128
+          margin-top: 40rpx;
129
+          font-size: 48rpx;
130
+          text-align: center;
131
+        }
132
+      }
133
+    }
134
+
135
+    .Scanning_cont {
136
+      font-size: 32rpx;
137
+      text-align: center;
138
+
139
+      view {
140
+        margin-bottom: 16rpx;
141
+      }
142
+
143
+      .text {
144
+        margin-top: 24rpx;
145
+        color: #35b34a;
146
+      }
147
+
148
+      .text1 {
149
+        margin-top: 24rpx;
150
+        color: #ff3b53;
151
+      }
152
+    }
153
+
154
+    .foot_btn {
155
+      line-height: 88rpx;
156
+      height: 100rpx;
157
+      margin-top: 40rpx;
158
+
159
+      .btn3 {
160
+        height: 88rpx;
161
+        width: 45%;
162
+        background-image: linear-gradient(to right, #72c172, #3bb197);
163
+        color: #fff;
164
+        border-radius: 8rpx;
165
+        font-size: 32rpx;
166
+        margin: 16rpx auto 0;
167
+        text-align: center;
168
+      }
169
+    }
170
+  }
171
+</style>

+ 636 - 0
pages/scanning_orderSign/scanning_orderSign.vue

@@ -0,0 +1,636 @@
1
+<template>
2
+  <view class="Scanning_orderSign">
3
+    <view class="Scanning_top">
4
+      <view class="Scanning_top_icon">
5
+        <text class="cubeic-ok icon_transport transport-duigou"></text>
6
+      </view>
7
+      <view class="Scanning_top_text">
8
+        <view class="text1">工单完成</view>
9
+      </view>
10
+    </view>
11
+    <view class="page_item" v-for="(infoDATA, i) of infoDATAS" :key="i">
12
+      <view class="page_item_top">
13
+        <view class="page_item_top_L">
14
+          <text class="L_text">单号:{{ infoDATA.gdcode }}</text>
15
+          <view
16
+            class="page_item_cont_start emergency1"
17
+            v-if="infoDATA.emergencyType.value == 1"
18
+          >
19
+            <text class="page_item_cont_start_txt">
20
+              <text
21
+                class="cubeic-star icon_transport transport-shiwujiaoxing"
22
+              ></text>
23
+              {{ infoDATA.emergencyType.name }}
24
+            </text>
25
+          </view>
26
+          <view
27
+            class="page_item_cont_start emergency"
28
+            v-if="infoDATA.emergencyType.value == 2"
29
+          >
30
+            <text class="page_item_cont_start_txt">
31
+              <text
32
+                class="cubeic-star icon_transport transport-shiwujiaoxing"
33
+              ></text>
34
+              {{ infoDATA.emergencyType.name }}
35
+            </text>
36
+          </view>
37
+          <view
38
+            class="page_item_cont_start emergencys"
39
+            v-if="infoDATA.emergencyType.value == 3"
40
+          >
41
+            <text class="page_item_cont_start_txt">
42
+              <text
43
+                class="cubeic-star icon_transport transport-shiwujiaoxing"
44
+              ></text>
45
+              {{ infoDATA.emergencyType.name }}
46
+            </text>
47
+          </view>
48
+        </view>
49
+        <view class="page_item_top_R">
50
+          <text
51
+            class="L_iocn"
52
+            v-if="infoDATA.taskType.associationType.value == 'specimen'"
53
+            >标本</text
54
+          >
55
+          <text
56
+            class="L_iocn"
57
+            v-if="infoDATA.taskType.associationType.value == 'specimenPlan'"
58
+            >标本</text
59
+          >
60
+          <text
61
+            class="L_iocn"
62
+            v-if="infoDATA.taskType.associationType.value == 'drugsBag'"
63
+            >药品</text
64
+          >
65
+          <text
66
+            class="L_iocn"
67
+            v-if="infoDATA.taskType.associationType.value == 'jPBag'"
68
+            >静配</text
69
+          >
70
+          <text
71
+            class="L_iocn"
72
+            v-if="infoDATA.taskType.associationType.value == 'inspect'"
73
+            >患者陪检</text
74
+          >
75
+          <text
76
+            class="L_iocn"
77
+            v-if="infoDATA.taskType.associationType.value == 'patientTransport'"
78
+            >患者转运</text
79
+          >
80
+          <text
81
+            class="L_iocn"
82
+            v-if="infoDATA.taskType.associationType.value == 'other'"
83
+            >其他配送</text
84
+          >
85
+        </view>
86
+
87
+        <view class="L"></view>
88
+        <view class="R"></view>
89
+      </view>
90
+      <view class="page_item_cont">
91
+        <view class="page_item_cont_T">
92
+          <view class="page_item_cont_title">
93
+            <text> <text class="starting">起</text> 点科室 </text>
94
+            <text class="text_big">{{ infoDATA.startDept.dept }}</text>
95
+          </view>
96
+        </view>
97
+        <view class="line"></view>
98
+        <view class="page_item_cont_B">
99
+          <view
100
+            class="page_item_cont_title"
101
+            v-for="(dept, i) of infoDATA.middleDept"
102
+            :key="i"
103
+          >
104
+            <view v-if="infoDATA.taskType.associationType.value == 'inspect'">
105
+              <text> <text class="End">检</text> 查科室 </text>
106
+              <text class="text_big">{{ dept.dept }}</text>
107
+            </view>
108
+          </view>
109
+          <view
110
+            class="page_item_cont_title"
111
+            v-for="(dept, i) of infoDATA.endDepts"
112
+            :key="i"
113
+          >
114
+            <view v-if="infoDATA.taskType.associationType.value != 'inspect'">
115
+              <text> <text class="End">终</text> 点科室 </text>
116
+              <text class="text_big">{{ dept.dept }}</text>
117
+            </view>
118
+          </view>
119
+        </view>
120
+      </view>
121
+      <view class="page_item_foot">
122
+        <view class="page_item_foot_text">
123
+          <text class="text1">状态</text>
124
+          <text
125
+            class="text2"
126
+            v-if="
127
+              !(
128
+                infoDATA.gdState.value == '5' &&
129
+                infoDATA.taskType.associationType.value == 'inspect'
130
+              )
131
+            "
132
+            >{{ infoDATA.gdState.name }}</text
133
+          >
134
+          <text
135
+            class="text2"
136
+            v-if="
137
+              infoDATA.gdState.value == '5' &&
138
+              infoDATA.taskType.associationType.value == 'inspect'
139
+            "
140
+            >待送回</text
141
+          >
142
+        </view>
143
+        <view class="page_item_foot_text" v-if="infoDATA.gdState.value == '2'">
144
+          <text class="text1">预计响应时间</text>
145
+          <text class="text2">{{ infoDATA.estimeResponseTime || 0 }}</text>
146
+        </view>
147
+        <view class="page_item_foot_text" v-if="infoDATA.gdState.value == '5'">
148
+          <text
149
+            class="text1"
150
+            v-if="!(infoDATA.taskType.associationType.value == 'inspect')"
151
+            >预计送达时间</text
152
+          >
153
+          <text
154
+            class="text1"
155
+            v-if="infoDATA.taskType.associationType.value == 'inspect'"
156
+            >预计送回时间</text
157
+          >
158
+          <text class="text2">{{ infoDATA.estimeCompleteTime || 0 }}</text>
159
+        </view>
160
+        <view class="page_item_foot_text" v-if="infoDATA.gdState.value == '4'">
161
+          <text class="text1">预计到达时间</text>
162
+          <text class="text2">{{ infoDATA.estimateArriveTime || 0 }}</text>
163
+        </view>
164
+        <view class="page_item_foot_text">
165
+          <text class="text1">创建时间</text>
166
+          <text class="text2">{{ infoDATA.startTime }}</text>
167
+        </view>
168
+      </view>
169
+      <!-- 标本 送达-->
170
+      <view
171
+        class="page_item_info"
172
+        v-if="
173
+          infoDATA.taskType.associationType.value == 'specimenPlan' ||
174
+          infoDATA.taskType.associationType.value == 'specimen'
175
+        "
176
+      >
177
+        <text class="page_item_info_title">标本信息</text>
178
+        <text
179
+          class="text"
180
+          v-if="
181
+            (infoType == 'plan-spe-dsd-3' && infoDATA.gdState.value == '7') ||
182
+            (infoType == 'spe-dsd-3' && infoDATA.gdState.value == '7')
183
+          "
184
+        >
185
+          已扫描标本总数
186
+          <text>{{ infoDATA.expectReceiveNum || 0 }}</text>
187
+        </text>
188
+        <view class="page_item_list">
189
+          <view class="page_item_list_head">
190
+            <view>标本类型</view>
191
+            <view>床号</view>
192
+            <view>标本编号</view>
193
+            <view>患者姓名</view>
194
+          </view>
195
+          <view
196
+            class="page_item_list_cont"
197
+            v-for="(data, i) of infoDATA.specimenSet"
198
+            :key="i"
199
+          >
200
+            <view>{{ data.stype.name || "-" }}</view>
201
+            <view>{{ data.bedNum || "-" }}</view>
202
+            <view>{{ data.scode || "-" }}</view>
203
+            <view>{{ data.patientName || "-" }}</view>
204
+          </view>
205
+        </view>
206
+      </view>
207
+    </view>
208
+    <view class="foot_btn2">
209
+      <view class="btn2" @click="Scanning_again()">知道了</view>
210
+    </view>
211
+  </view>
212
+</template>
213
+<script>
214
+import { get, post, SM, webHandle } from "../../http/http.js";
215
+export default {
216
+  data() {
217
+    return {
218
+      infoDATA: [],
219
+      infoDATAS: [],
220
+      infoType: "",
221
+      DEPTCode: "",
222
+      DEPT: "",
223
+      dataId: "",
224
+    };
225
+  },
226
+  methods: {
227
+    // 知道了
228
+    Scanning_again(id) {
229
+      uni.navigateTo({
230
+        url: "../receiptpage/receiptpage",
231
+      });
232
+    },
233
+    // 获取信息内容
234
+    getInfo(id) {
235
+      for (var i = 0; i < id.length; i++) {
236
+        get("/api/fetchData/workOrder/" + id[i]).then((res) => {
237
+          if (res.status == 200) {
238
+            this.infoDATA = res.data;
239
+            this.infoDATAS.push(this.infoDATA);
240
+          } else {
241
+            uni.showToast({
242
+              icon: "none",
243
+              title: "请求失败!",
244
+            });
245
+          }
246
+        });
247
+        let data = {};
248
+        post("/api/speDetails/" + id[i], data).then((res) => {
249
+          if (res.status == 200) {
250
+          } else {
251
+            uni.showToast({
252
+              icon: "none",
253
+              title: "请求失败!",
254
+            });
255
+          }
256
+        });
257
+      }
258
+    },
259
+  },
260
+  onLoad(options) {
261
+    let id = JSON.parse(options.id);
262
+    this.dataId = id;
263
+    this.infoType = options.type1;
264
+    this.DEPTCode = options.deptCode;
265
+    this.DEPT = options.dept;
266
+    this.getInfo(this.dataId);
267
+    // #ifdef APP-PLUS
268
+    webHandle("no", "app");
269
+    // #endif
270
+    // #ifdef H5
271
+    webHandle("no", "wx");
272
+    // #endif
273
+  },
274
+};
275
+</script>
276
+<style lang="less">
277
+.Scanning_orderSign {
278
+  padding: 0 20rpx;
279
+  height: calc(100% - 100rpx);
280
+
281
+  .Scanning_top {
282
+    height: 340rpx;
283
+
284
+    .Scanning_top_icon {
285
+      width: 140rpx;
286
+      height: 140rpx;
287
+      margin: 0 auto;
288
+      margin-top: 36rpx;
289
+      border-radius: 50%;
290
+      line-height: 140rpx;
291
+
292
+      .cubeic-ok {
293
+        font-size: 140rpx;
294
+        color: #35b34a;
295
+      }
296
+    }
297
+
298
+    .Scanning_top_text {
299
+      text-align: center;
300
+      .text1 {
301
+        margin-top: 40rpx;
302
+        font-size: 48rpx;
303
+      }
304
+
305
+      .text2 {
306
+        margin-top: 16rpx;
307
+        font-size: 36rpx;
308
+      }
309
+    }
310
+  }
311
+
312
+  .page_item {
313
+    position: relative;
314
+    margin-top: 16rpx;
315
+    margin-bottom: 124rpx;
316
+    min-height: 356rpx;
317
+    background: #fff;
318
+    border-radius: 8rpx;
319
+    overflow: hidden;
320
+    padding: 0 16rpx;
321
+    border: 2rpx solid #e5e9ed;
322
+
323
+    .L {
324
+      width: 40rpx;
325
+      height: 40rpx;
326
+      border-radius: 50%;
327
+      background: #f9fafb;
328
+      position: relative;
329
+      left: -50rpx;
330
+      top: 66rpx;
331
+    }
332
+
333
+    .R {
334
+      width: 20px;
335
+      height: 20px;
336
+      border-radius: 50%;
337
+      background: #f9fafb;
338
+      position: relative;
339
+      float: right;
340
+      right: -50rpx;
341
+      top: 26rpx;
342
+    }
343
+
344
+    .starting {
345
+      width: 50rpx;
346
+      height: 50rpx;
347
+      color: #fff;
348
+      background: #49b856;
349
+      display: inline-block;
350
+      border-radius: 50%;
351
+      text-align: center;
352
+      line-height: 46rpx;
353
+      font-size: 32rpx;
354
+      margin-right: 6rpx;
355
+    }
356
+
357
+    .End {
358
+      width: 50rpx;
359
+      height: 50rpx;
360
+      color: #fff;
361
+      background: #39b199;
362
+      display: inline-block;
363
+      border-radius: 50%;
364
+      text-align: center;
365
+      line-height: 46rpx;
366
+      font-size: 32rpx;
367
+      margin-right: 6rpx;
368
+    }
369
+
370
+    .page_item_top {
371
+      height: 86rpx;
372
+      border-bottom: 2rpx dashed #e5e9ed;
373
+      padding: 0 16rpx;
374
+
375
+      .page_item_top_L {
376
+        height: 100%;
377
+        float: left;
378
+        line-height: 88rpx;
379
+        display: flex;
380
+        align-items: center;
381
+
382
+        .emergencys {
383
+          background: #ff3b53 !important;
384
+          width: 124rpx !important;
385
+        }
386
+
387
+        .emergency {
388
+          background: #ff3b53 !important;
389
+        }
390
+
391
+        .emergency1 {
392
+          background: #49b856 !important;
393
+        }
394
+
395
+        .page_item_cont_start {
396
+          text-align: center;
397
+          height: 44rpx;
398
+          width: 104rpx;
399
+          line-height: 44rpx;
400
+          border-radius: 8rpx;
401
+          background: #49b856;
402
+          color: #fff;
403
+          display: inline-block;
404
+          .page_item_cont_start_txt {
405
+            font-size: 28rpx;
406
+            display: flex;
407
+            align-items: center;
408
+            justify-content: center;
409
+          }
410
+        }
411
+
412
+        .L_time {
413
+          color: #6cc076;
414
+          font-size: 32rpx;
415
+        }
416
+
417
+        .L_text {
418
+          font-size: 32rpx;
419
+          display: inline-block;
420
+          font-weight: 600;
421
+        }
422
+      }
423
+
424
+      .page_item_top_R {
425
+        height: 60rpx;
426
+        float: right;
427
+        padding-top: 20rpx;
428
+        font-size: 32rpx;
429
+        position: absolute;
430
+        right: 50rpx;
431
+
432
+        .L_iocn {
433
+          display: inline-block;
434
+          height: 52rpx;
435
+          line-height: 48rpx;
436
+          color: rgb(7, 134, 60);
437
+          font-size: 36rpx;
438
+          font-weight: 700;
439
+        }
440
+      }
441
+    }
442
+
443
+    .page_item_cont {
444
+      min-height: 180rpx;
445
+      max-height: 424rpx;
446
+      padding: 0 16rpx;
447
+      text-align: left;
448
+      position: relative;
449
+
450
+      .text_big {
451
+        font-size: 32rpx;
452
+        position: absolute;
453
+        right: 16rpx;
454
+        font-weight: 700;
455
+        margin-top: 10rpx;
456
+      }
457
+
458
+      .text_big2 {
459
+        font-size: 32rpx;
460
+        position: absolute;
461
+        right: 16rpx;
462
+        font-weight: 700;
463
+      }
464
+
465
+      .line {
466
+        height: 20rpx;
467
+        width: 2rpx;
468
+        border-left: 2rpx solid #e5e9ed;
469
+        position: absolute;
470
+        top: 82rpx;
471
+        left: 40rpx;
472
+      }
473
+
474
+      .lines {
475
+        height: 40%;
476
+        width: 2rpx;
477
+        border-left: 2rpx solid #e5e9ed;
478
+        position: absolute;
479
+        top: 23%;
480
+        left: 36rpx;
481
+      }
482
+
483
+      .page_item_cont_T {
484
+        padding-top: 28rpx;
485
+        font-size: 28rpx;
486
+
487
+        .page_item_cont_title {
488
+          height: 100%;
489
+          font-size: 32rpx;
490
+        }
491
+      }
492
+
493
+      .page_item_cont_B {
494
+        padding-top: 28rpx;
495
+        margin-bottom: 28rpx;
496
+
497
+        .page_item_cont_title {
498
+          height: 60rpx;
499
+          font-size: 32rpx;
500
+        }
501
+
502
+        .page_item_cont_title1 {
503
+          height: 60rpx;
504
+          line-height: 60rpx;
505
+          font-size: 32rpx;
506
+          padding-left: 64rpx;
507
+        }
508
+      }
509
+    }
510
+
511
+    .page_item_foot {
512
+      border-top: 2rpx dashed #e5e9ed;
513
+      border-bottom: 2rpx dashed #e5e9ed;
514
+      padding: 28rpx 16rpx;
515
+      text-align: left;
516
+
517
+      .page_item_foot_text {
518
+        font-size: 32rpx;
519
+        margin-bottom: 20rpx;
520
+
521
+        .text1 {
522
+          color: rgb(102, 102, 102);
523
+        }
524
+
525
+        .text2 {
526
+          float: right;
527
+          font-weight: 700;
528
+        }
529
+      }
530
+
531
+      .text_padd {
532
+        padding: 0 10% 0 10%;
533
+      }
534
+    }
535
+
536
+    .page_item_info {
537
+      padding: 20rpx 16rpx;
538
+      text-align: left;
539
+      line-height: 60rpx;
540
+      font-size: 32rpx;
541
+
542
+      .page_item_info_title {
543
+        font-weight: 700;
544
+      }
545
+
546
+      .text {
547
+        float: right;
548
+        font-weight: 700;
549
+
550
+        text {
551
+          color: #49b856;
552
+        }
553
+      }
554
+
555
+      .page_item_list {
556
+        .page_item_list_head {
557
+          height: 90rpx;
558
+          background-image: linear-gradient(to right, #72c172, #3bb197);
559
+          display: flex;
560
+
561
+          view {
562
+            flex: 1;
563
+            text-align: center;
564
+            line-height: 90rpx;
565
+            color: #fff;
566
+          }
567
+        }
568
+
569
+        .page_item_list_cont {
570
+          height: 90rpx;
571
+          display: flex;
572
+
573
+          view {
574
+            flex: 1;
575
+            text-align: center;
576
+            line-height: 90rpx;
577
+            color: rgb(51, 51, 51);
578
+          }
579
+        }
580
+      }
581
+    }
582
+
583
+    #infos {
584
+      display: none;
585
+    }
586
+
587
+    .page_item_infos {
588
+      padding-bottom: 20rpx;
589
+      border-bottom: 2rpx dashed #e5e9ed;
590
+
591
+      .page_item_info2 {
592
+        text-align: left;
593
+        line-height: 60rpx;
594
+        font-size: 32rpx;
595
+        padding-left: 16rpx;
596
+
597
+        .page_item_foot_text {
598
+          font-size: 32rpx;
599
+          margin-bottom: 20rpx;
600
+
601
+          .text1 {
602
+            color: rgb(102, 102, 102);
603
+          }
604
+
605
+          .text2 {
606
+            float: right;
607
+            font-weight: 700;
608
+          }
609
+        }
610
+      }
611
+    }
612
+  }
613
+
614
+  .foot_btn2 {
615
+    position: fixed;
616
+    bottom: 0;
617
+    right: 20rpx;
618
+    left: 20rpx;
619
+    line-height: 66rpx;
620
+    height: 100rpx;
621
+    border-top: 2rpx solid #e5e9ed;
622
+    background: #f9fafb;
623
+    text-align: center;
624
+
625
+    .btn2 {
626
+      height: 66rpx;
627
+      width: 100%;
628
+      background-image: linear-gradient(to right, #72c172, #3bb197);
629
+      color: #fff;
630
+      border-radius: 8rpx;
631
+      font-size: 32rpx;
632
+      margin-top: 16rpx;
633
+    }
634
+  }
635
+}
636
+</style>

+ 504 - 0
pages/search/search.vue

@@ -0,0 +1,504 @@
1
+<template>
2
+  <view class="content">
3
+    <view class="search-box">
4
+      <!-- mSearch组件 如果使用原样式,删除组件元素-->
5
+      <mSearch class="mSearch-input-box" :mode="2" button="inside" :placeholder="defaultKeyword"
6
+        @search="doSearch(false)" @input="changeInp" @confirm="doSearch(false)" v-model="keyword"></mSearch>
7
+    </view>
8
+    <view class="search-keyword">
9
+      <scroll-view class="keyword-list-box" v-show="isShowKeywordList" scroll-y>
10
+        <block v-for="(row, index) in keywordList" :key="index">
11
+          <view class="keyword-entry" hover-class="keyword-entry-tap">
12
+            <view class="keyword-text" @tap.stop="doSearch(keywordList[index].keyword)">
13
+              <rich-text :nodes="row.htmlStr"></rich-text>
14
+            </view>
15
+            <view class="keyword-img" @tap.stop="doSearch(keywordList[index].keyword)">
16
+              <image src="/static/HM-search/back.png"></image>
17
+            </view>
18
+          </view>
19
+        </block>
20
+      </scroll-view>
21
+      <scroll-view class="keyword-box" v-show="!isShowKeywordList" scroll-y>
22
+        <view class="keyword-block" v-if="oldKeywordList.length > 0">
23
+          <view class="keyword-list-header">
24
+            <view>历史搜索</view>
25
+            <view>
26
+              <image @tap="oldDelete" src="/static/HM-search/delete.png"></image>
27
+            </view>
28
+          </view>
29
+          <view class="keyword">
30
+            <view v-for="(keyword, index) in oldKeywordList" @tap="changeInp(keyword)" :key="index">{{ keyword }}
31
+            </view>
32
+          </view>
33
+        </view>
34
+      </scroll-view>
35
+    </view>
36
+  </view>
37
+</template>
38
+
39
+<script>
40
+  //引用mSearch组件,如不需要删除即可
41
+  import mSearch from "@/components/mehaotian-search-revision/mehaotian-search-revision.vue";
42
+  import {
43
+    post,
44
+    webHandle
45
+  } from "../../http/http.js";
46
+  export default {
47
+    data() {
48
+      return {
49
+        type: "", //进入该页面的类型
50
+        configName: "", //快速组合名称
51
+        id: "", //快速组合id
52
+        changedept: 0, //是否从列表过来的切换负责科室
53
+        hosId: "",
54
+        defaultKeyword: "",
55
+        keyword: "",
56
+        oldKeywordList: [],
57
+        keywordList: [],
58
+        isShowKeywordList: false,
59
+        deptList: [],
60
+        //送回病房扫码 start
61
+        code: '',
62
+        infoDATA: '',
63
+        patientOrders: '',
64
+        workData: '',
65
+        //送回病房扫码 end
66
+        //送回病房-患者列表 start
67
+        cid: '',
68
+        cdept: '',
69
+        currentItem: '',
70
+        scrollYY: '',
71
+        //送回病房-患者列表 end
72
+        // 设置科室二维码 start
73
+        uniName: '',
74
+        queryDept: '',
75
+        queryDeptId: '',
76
+        qrCode: '',
77
+        // 设置科室二维码 end
78
+        timer: null, //定时器
79
+        searchText: '', //搜索文本
80
+        searchData: [], //搜索结果
81
+      };
82
+    },
83
+    onUnload() {
84
+      if (this.timer) {
85
+        clearTimeout(this.timer);
86
+        this.timer = null;
87
+      }
88
+    },
89
+    onLoad(options) {
90
+      this.type = options.type;
91
+      if (this.type == "setDept") {
92
+        this.configName = options.configName;
93
+        this.id = options.id;
94
+        this.changedept = options.changedept;
95
+      } else if (this.type == "sendBack") {
96
+        this.code = options.code;
97
+        this.infoDATA = options.infoDATA;
98
+        this.patientOrders = options.patientOrders;
99
+        this.workData = options.workData;
100
+      } else if (this.type == "sendBackPatientList") {
101
+        this.cid = options.cid;
102
+        this.cdept = options.cdept;
103
+        this.currentItem = options.currentItem;
104
+        this.scrollYY = options.scrollYY;
105
+      } else if (this.type == "settingCode") { //设置科室二维码
106
+        this.uniName = options.uniName;
107
+        this.queryDept = options.queryDept;
108
+        this.queryDeptId = options.queryDeptId;
109
+        this.qrCode = options.qrCode;
110
+      }
111
+      this.init();
112
+      // #ifdef APP-PLUS
113
+      webHandle("no", "app");
114
+      // #endif
115
+      // #ifdef H5
116
+      webHandle("no", "wx");
117
+      // #endif
118
+    },
119
+    components: {
120
+      //引用mSearch组件,如不需要删除即可
121
+      mSearch,
122
+    },
123
+    methods: {
124
+      init() {
125
+        this.hosId = uni.getStorageSync("userData").user.currentHospital.id;
126
+        this.loadDefaultKeyword();
127
+        this.loadOldKeyword();
128
+      },
129
+      blur() {
130
+        uni.hideKeyboard();
131
+      },
132
+      //加载默认搜索关键字
133
+      loadDefaultKeyword() {
134
+        //定义默认搜索关键字,可以自己实现ajax请求数据再赋值,用户未输入时,以水印方式显示在输入框,直接不输入内容搜索会搜索默认关键字
135
+        this.defaultKeyword = "请输入科室名称";
136
+      },
137
+      //加载历史搜索,自动读取本地Storage
138
+      loadOldKeyword() {
139
+        uni.getStorage({
140
+          key: "OldKeys",
141
+          success: (res) => {
142
+            var OldKeys = JSON.parse(res.data);
143
+            this.oldKeywordList = OldKeys;
144
+          },
145
+        });
146
+      },
147
+      //防抖搜索
148
+      changeInp(event) {
149
+        this.searchText = event;
150
+        clearTimeout(this.timer);
151
+        this.timer = setTimeout(() => {
152
+          this.inputChange(event);
153
+        }, 500)
154
+      },
155
+      //监听输入
156
+      inputChange(event) {
157
+        //兼容引入组件时传入参数情况
158
+        var keyword = event.detail ? event.detail.value : event;
159
+        if (!keyword) {
160
+          this.keywordList = [];
161
+          this.isShowKeywordList = false;
162
+          return;
163
+        }
164
+        this.keyword = keyword;
165
+        this.isShowKeywordList = true;
166
+        let postData = {
167
+          idx: 0,
168
+          sum: 20,
169
+          department: {
170
+            hospital: {
171
+              id: this.hosId,
172
+            },
173
+            dept: keyword,
174
+          },
175
+        };
176
+        //不是送回病房
177
+        if (this.type != "sendBack" && this.type != "sendBackPatientList" && this.type != "settingCode") {
178
+          postData.department.type = {
179
+            id: "281"
180
+          }
181
+        }
182
+        uni.showLoading({
183
+          title: "加载中",
184
+        });
185
+        post("/data/fetchDataList/department", postData).then((res) => {
186
+          if (res.status == 200) {
187
+            this.searchData.push({
188
+              name: keyword,
189
+              list: res.list
190
+            });
191
+            let searchText = this.searchText.detail ? this.searchText.detail.value : this.searchText;
192
+            let index = this.searchData.findIndex(item => item.name === searchText);
193
+            this.deptList = index >= 0 ? this.searchData[index].list : [];
194
+            this.keywordList = this.drawCorrelativeKeyword(this.deptList, keyword);
195
+            uni.hideLoading();
196
+          } else {
197
+            uni.hideLoading();
198
+            uni.showToast({
199
+              icon: "none",
200
+              title: "请求失败!",
201
+            });
202
+          }
203
+        });
204
+      },
205
+      //高亮关键字
206
+      drawCorrelativeKeyword(keywords, keyword) {
207
+        var len = keywords.length,
208
+          keywordArr = [];
209
+        for (var i = 0; i < len; i++) {
210
+          var row = keywords[i];
211
+          //定义高亮#9f9f9f
212
+          var html = row.dept.replace(
213
+            keyword,
214
+            "<span style='color: #9f9f9f;'>" + keyword + "</span>"
215
+          );
216
+          html = "<div>" + html + "</div>";
217
+          var tmpObj = {
218
+            keyword: row.dept,
219
+            htmlStr: html,
220
+          };
221
+          keywordArr.push(tmpObj);
222
+        }
223
+        return keywordArr;
224
+      },
225
+      //清除历史搜索
226
+      oldDelete() {
227
+        uni.showModal({
228
+          content: "确定清除历史搜索记录?",
229
+          success: (res) => {
230
+            if (res.confirm) {
231
+              console.log("用户点击确定");
232
+              this.oldKeywordList = [];
233
+              uni.removeStorage({
234
+                key: "OldKeys",
235
+              });
236
+            } else if (res.cancel) {
237
+              console.log("用户点击取消");
238
+            }
239
+          },
240
+        });
241
+      },
242
+      //执行搜索
243
+      doSearch(keyword) {
244
+        keyword = keyword === false ? this.keyword : keyword;
245
+        this.keyword = keyword;
246
+        this.saveKeyword(keyword); //保存为历史
247
+        let arr = this.deptList.filter((item) => item.dept === keyword);
248
+        if (arr.length) {
249
+          let msg = "";
250
+          if (this.type == "patientInformationList" || this.type == "inspectList") {
251
+            msg = "切换科室成功";
252
+            uni.showToast({
253
+              title: msg,
254
+              icon: "none",
255
+              duration: 2000,
256
+            });
257
+          } else if (this.type == "setDept") {
258
+            msg = "添加科室成功";
259
+            uni.showToast({
260
+              title: msg,
261
+              icon: "none",
262
+              duration: 2000,
263
+            });
264
+          }
265
+          if (this.type == "patientInformationList") {
266
+            //患者列表进入
267
+            uni.setStorageSync("patientCurrentDept", arr[0]); //科室切换存本地
268
+            uni.navigateTo({
269
+              url: `../patientInformationList/patientInformationList?id=${arr[0].id}&dept=${arr[0].dept}`,
270
+            });
271
+          } else if (this.type == "inspectList") {
272
+            //患者列表进入
273
+            uni.setStorageSync("patientCurrentDept", arr[0]); //科室切换存本地
274
+            uni.navigateTo({
275
+              url: `../inspectList/inspectList?id=${arr[0].id}&dept=${arr[0].dept}`,
276
+            });
277
+          } else if (this.type == "setDept") {
278
+            //上班添加科室进入
279
+            let obj = uni.getStorageSync("setDepts");
280
+            if (obj) {
281
+              let i = obj.findIndex((item) => item.id == arr[0].id);
282
+              if (i < 0) {
283
+                uni.setStorageSync("setDepts", [arr[0], ...obj]);
284
+              }
285
+            } else {
286
+              uni.setStorageSync("setDepts", [arr[0]]);
287
+            }
288
+            uni.navigateTo({
289
+              url: `../setDept/setDept?configName=${this.configName}&id=${this.id}&changedept=${this.changedept}`,
290
+            });
291
+          } else if (this.type == "sendBack") {
292
+            uni.navigateTo({
293
+              url: `../scanning_ins/scanning_ins?id=${arr[0].id}&dept=${arr[0].dept}&code=${this.code}&infoDATA=${this.infoDATA}&patientOrders=${this.patientOrders}&workData=${this.workData}`,
294
+            });
295
+          } else if (this.type == "sendBackPatientList") {
296
+            uni.navigateTo({
297
+              url: `../patientInformationList/patientInformationList?did=${arr[0].id}&ddept=${arr[0].dept}&currentItem=${this.currentItem}&id=${this.cid}&dept=${this.cdept}&scrollYY=${this.scrollYY}`,
298
+            });
299
+          } else if (this.type == "settingCode") {
300
+            if (this.queryDept) { //替换
301
+              uni.navigateTo({
302
+                url: `../settingCode/settingCode?targetId=${arr[0].id}&targetDept=${arr[0].dept}&uniName=${this.uniName}&queryDept=${this.queryDept}&queryDeptId=${this.queryDeptId}&qrCode=${this.qrCode}`,
303
+              });
304
+            } else { //设置
305
+              uni.navigateTo({
306
+                url: `../settingCode/settingCode?targetId=${arr[0].id}&targetDept=${arr[0].dept}&uniName=${this.uniName}&qrCode=${this.qrCode}`,
307
+              });
308
+            }
309
+          }
310
+        }
311
+      },
312
+      //保存关键字到历史记录
313
+      saveKeyword(keyword) {
314
+        uni.getStorage({
315
+          key: "OldKeys",
316
+          success: (res) => {
317
+            var OldKeys = JSON.parse(res.data);
318
+            var findIndex = OldKeys.indexOf(keyword);
319
+            if (findIndex == -1) {
320
+              OldKeys.unshift(keyword);
321
+            } else {
322
+              OldKeys.splice(findIndex, 1);
323
+              OldKeys.unshift(keyword);
324
+            }
325
+            //最多10个纪录
326
+            OldKeys.length > 10 && OldKeys.pop();
327
+            uni.setStorage({
328
+              key: "OldKeys",
329
+              data: JSON.stringify(OldKeys),
330
+            });
331
+            this.oldKeywordList = OldKeys; //更新历史搜索
332
+          },
333
+          fail: (e) => {
334
+            var OldKeys = [keyword];
335
+            uni.setStorage({
336
+              key: "OldKeys",
337
+              data: JSON.stringify(OldKeys),
338
+            });
339
+            this.oldKeywordList = OldKeys; //更新历史搜索
340
+          },
341
+        });
342
+      },
343
+    },
344
+  };
345
+</script>
346
+<style>
347
+  view {
348
+    display: block;
349
+  }
350
+
351
+  .search-box {
352
+    width: 95%;
353
+    background-color: rgb(242, 242, 242);
354
+    padding: 15upx 2.5%;
355
+    display: flex;
356
+    justify-content: space-between;
357
+    position: sticky;
358
+    top: 0;
359
+  }
360
+
361
+  .search-box .mSearch-input-box {
362
+    width: 100%;
363
+  }
364
+
365
+  .search-box .input-box {
366
+    width: 85%;
367
+    flex-shrink: 1;
368
+    display: flex;
369
+    justify-content: center;
370
+    align-items: center;
371
+  }
372
+
373
+  .search-box .search-btn {
374
+    width: 15%;
375
+    margin: 0 0 0 2%;
376
+    display: flex;
377
+    justify-content: center;
378
+    align-items: center;
379
+    flex-shrink: 0;
380
+    font-size: 28upx;
381
+    color: #fff;
382
+    background: linear-gradient(to right, #ff9801, #ff570a);
383
+    border-radius: 60upx;
384
+  }
385
+
386
+  .search-box .input-box>input {
387
+    width: 100%;
388
+    height: 60upx;
389
+    font-size: 32upx;
390
+    border: 0;
391
+    border-radius: 60upx;
392
+    -webkit-appearance: none;
393
+    -moz-appearance: none;
394
+    appearance: none;
395
+    padding: 0 3%;
396
+    margin: 0;
397
+    background-color: #ffffff;
398
+  }
399
+
400
+  .placeholder-class {
401
+    color: #9e9e9e;
402
+  }
403
+
404
+  .search-keyword {
405
+    width: 100%;
406
+    background-color: rgb(242, 242, 242);
407
+  }
408
+
409
+  .keyword-list-box {
410
+    height: calc(100vh - 110upx);
411
+    padding-top: 10upx;
412
+    border-radius: 20upx 20upx 0 0;
413
+    background-color: #fff;
414
+  }
415
+
416
+  .keyword-entry-tap {
417
+    background-color: #eee;
418
+  }
419
+
420
+  .keyword-entry {
421
+    width: 94%;
422
+    height: 80upx;
423
+    margin: 0 3%;
424
+    font-size: 30upx;
425
+    color: #333;
426
+    display: flex;
427
+    justify-content: space-between;
428
+    align-items: center;
429
+    border-bottom: solid 1upx #e7e7e7;
430
+  }
431
+
432
+  .keyword-entry image {
433
+    width: 60upx;
434
+    height: 60upx;
435
+  }
436
+
437
+  .keyword-entry .keyword-text,
438
+  .keyword-entry .keyword-img {
439
+    height: 80upx;
440
+    display: flex;
441
+    align-items: center;
442
+  }
443
+
444
+  .keyword-entry .keyword-text {
445
+    width: 90%;
446
+  }
447
+
448
+  .keyword-entry .keyword-img {
449
+    width: 10%;
450
+    justify-content: center;
451
+  }
452
+
453
+  .keyword-box {
454
+    height: calc(100vh - 110upx);
455
+    border-radius: 20upx 20upx 0 0;
456
+    background-color: #fff;
457
+  }
458
+
459
+  .keyword-box .keyword-block {
460
+    padding: 10upx 0;
461
+  }
462
+
463
+  .keyword-box .keyword-block .keyword-list-header {
464
+    width: 94%;
465
+    padding: 10upx 3%;
466
+    font-size: 27upx;
467
+    color: #333;
468
+    display: flex;
469
+    justify-content: space-between;
470
+  }
471
+
472
+  .keyword-box .keyword-block .keyword-list-header image {
473
+    width: 40upx;
474
+    height: 40upx;
475
+  }
476
+
477
+  .keyword-box .keyword-block .keyword {
478
+    width: 94%;
479
+    padding: 3px 3%;
480
+    display: flex;
481
+    flex-flow: wrap;
482
+    justify-content: flex-start;
483
+  }
484
+
485
+  .keyword-box .keyword-block .hide-hot-tis {
486
+    display: flex;
487
+    justify-content: center;
488
+    font-size: 28upx;
489
+    color: #6b6b6b;
490
+  }
491
+
492
+  .keyword-box .keyword-block .keyword>view {
493
+    display: flex;
494
+    justify-content: center;
495
+    align-items: center;
496
+    border-radius: 60upx;
497
+    padding: 0 20upx;
498
+    margin: 10upx 20upx 10upx 0;
499
+    height: 60upx;
500
+    font-size: 28upx;
501
+    background-color: rgb(242, 242, 242);
502
+    color: #6b6b6b;
503
+  }
504
+</style>

+ 418 - 0
pages/setDept/setDept.vue

@@ -0,0 +1,418 @@
1
+<template>
2
+  <view class="setDept">
3
+    <view class="page_tab">
4
+      <view class="page_tab_bar active">
5
+        <view class="tab_dept">{{ configName
6
+          }}<button type="default" size="mini" class="addDept" @click="addDeptClick">
7
+            添加科室
8
+          </button></view>
9
+      </view>
10
+    </view>
11
+    <view v-if="zxzData.length == 0" class="zwsj">
12
+      <image class="zwsj-img" mode="widthFix" src="../../static/img/zanwushuju.png"></image>
13
+      <view class="zwsj-txt">暂无数据</view>
14
+    </view>
15
+    <view v-if="zxzData.length" class="page_items">
16
+      <view class="page_items_scroll">
17
+        <block v-for="row in zxzData" :key="row.id">
18
+          <view class="keyword-entry" hover-class="keyword-entry-tap">
19
+            <view class="keyword-text">
20
+              <rich-text :nodes="row.dept"></rich-text>
21
+            </view>
22
+            <view class="keyword-img" @tap.stop="deleteDept(row.id)">
23
+              删除科室
24
+            </view>
25
+          </view>
26
+        </block>
27
+      </view>
28
+    </view>
29
+    <!-- 底部确认负责科室 -->
30
+    <view class="toolbar" @click="determine()" hover-class="seimin-btn-hover">
31
+      <text class="toolbar-sao">确认负责科室</text>
32
+    </view>
33
+    <!-- 弹窗 -->
34
+    <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content" @ok="ok"
35
+      @cancel="cancel" @know="know" :operate="models.operate" :phone="models.phone"></showModel>
36
+    <!-- 提示下班弹窗 -->
37
+    <showModel :title="models1.title" :icon="models1.icon" :disjunctor="models1.disjunctor" :content="models1.content"
38
+      @know="know1" :operate="models1.operate"></showModel>
39
+  </view>
40
+</template>
41
+<script>
42
+  import {
43
+    post,
44
+    get
45
+  } from "../../http/http.js";
46
+  export default {
47
+    data() {
48
+      return {
49
+        configName: "", //快捷组合名称
50
+        id: "", //快速组合的id
51
+        changedept: 0, //是否是从切换负责科室过来的
52
+        zxzData: [], //已选择的科室
53
+        // 弹窗model
54
+        models: {
55
+          disjunctor: false,
56
+        },
57
+        // 下班弹窗model
58
+        models1: {
59
+          disjunctor: false,
60
+        },
61
+        delId: "", //科室删除的id
62
+        userId: uni.getStorageSync("userData").user.id, //当前用户的id
63
+      };
64
+    },
65
+    methods: {
66
+      //知道了(下班弹窗)
67
+      know1() {
68
+        this.models1.disjunctor = false;
69
+        uni.redirectTo({
70
+          url: "../homePage/homePage",
71
+        });
72
+      },
73
+      //知道了
74
+      know() {
75
+        this.models.disjunctor = false;
76
+      },
77
+      //确定
78
+      ok() {
79
+        this.models.disjunctor = false;
80
+        let i = this.zxzData.findIndex((item) => item.id == this.delId);
81
+        this.zxzData.splice(i, 1);
82
+        uni.setStorageSync("setDepts", this.zxzData);
83
+      },
84
+      //取消
85
+      cancel() {
86
+        this.models.disjunctor = false;
87
+      },
88
+      // 添加科室
89
+      addDeptClick() {
90
+        uni.navigateTo({
91
+          url: `../search/search?type=setDept&configName=${this.configName}&id=${this.id}&changedept=${this.changedept}`,
92
+        });
93
+      },
94
+      // 删除科室
95
+      deleteDept(id) {
96
+        this.delId = id;
97
+        this.models = {
98
+          disjunctor: true,
99
+          title: "提示",
100
+          content: "您确定要删除该科室吗?",
101
+          icon: "warn",
102
+          operate: {
103
+            ok: "确定",
104
+            cancel: "取消",
105
+          },
106
+        };
107
+      },
108
+      // 确认负责科室
109
+      determine() {
110
+        if (this.zxzData.length === 0) {
111
+          this.models = {
112
+            disjunctor: true,
113
+            title: "提示",
114
+            content: "请选择至少一个科室",
115
+            icon: "warn",
116
+            operate: {
117
+              know: "知道了",
118
+            },
119
+          };
120
+        } else {
121
+          let ids1 = this.zxzData.map((item) => item.id);
122
+          let ids2 = this.zxzData.map((item) => {
123
+            return {
124
+              id: item.id,
125
+            };
126
+          });
127
+          let postData1 = {
128
+            quickId: this.id,
129
+            deptIds: ids1.join(),
130
+            userId: this.userId,
131
+            changeDept: 1
132
+          };
133
+          let postData2 = {
134
+            workConfigHistory: {
135
+              user: {
136
+                id: this.userId,
137
+              },
138
+              workAllocationQuick: {
139
+                id: this.id,
140
+              },
141
+              deptList: ids2,
142
+              hosId: uni.getStorageSync("userData").user.currentHospital.id
143
+            },
144
+          };
145
+          uni.showLoading({
146
+            title: "加载中",
147
+            mask: true,
148
+          });
149
+          if (this.changedept == 1) { //单纯切换科室!!!!
150
+            //切换负责科室,不重新上班
151
+            post("/auth/customOnline", postData1).then((res) => {
152
+              if (res.status == 200) {
153
+                post("/configuration/addData/workConfigHistory", postData2).then(
154
+                  (result) => {
155
+                    uni.hideLoading();
156
+                    if (result.status == 200) {
157
+                      uni.redirectTo({
158
+                        url: "../receiptpage/receiptpage",
159
+                      });
160
+                    } else {
161
+                      uni.showToast({
162
+                        icon: "none",
163
+                        title: "请求失败!",
164
+                      });
165
+                    }
166
+                  }
167
+                );
168
+              } else if (res.status == 504) {
169
+                uni.hideLoading();
170
+                let dept = res.department.dept;
171
+                let user = res.user.name;
172
+                let phone = res.user.phone;
173
+                this.models = {
174
+                  disjunctor: true,
175
+                  title: "提示",
176
+                  content: `您选择的科室已经被使用,请换个科室,或者联系:科室[${dept}]人员[${user}]号码[${phone}] 切换科室解决`,
177
+                  icon: "warn",
178
+                  phone,
179
+                  operate: {
180
+                    know: "知道了",
181
+                  },
182
+                };
183
+              } else if (res.status == 505) {
184
+                uni.hideLoading();
185
+                this.models1 = {
186
+                  disjunctor: true,
187
+                  title: "提示",
188
+                  content: res.msg, //baba
189
+                  icon: "warn",
190
+                  operate: {
191
+                    know: "知道了",
192
+                  },
193
+                };
194
+              }
195
+            });
196
+          } else {
197
+            post("/auth/onOrOffLine", {
198
+              type: "on",
199
+              customWorking: "on",
200
+              quickId: this.id,
201
+              deptIds: ids1.join(),
202
+              userId: this.userId,
203
+            }).then((res) => {
204
+              if (res.status == 200) {
205
+                post("/configuration/addData/workConfigHistory", postData2).then(
206
+                  (result) => {
207
+                    uni.hideLoading();
208
+                    if (result.status == 200) {
209
+                      let obj = uni.getStorageSync("userData");
210
+                      obj.user.online = true;
211
+                      uni.setStorageSync("userData", obj);
212
+                      uni.redirectTo({
213
+                        url: "../receiptpage/receiptpage",
214
+                      });
215
+                    } else {
216
+                      uni.showToast({
217
+                        icon: "none",
218
+                        title: "请求失败!",
219
+                      });
220
+                    }
221
+                  }
222
+                );
223
+              } else if (res.status == 504) {
224
+                uni.hideLoading();
225
+                let dept = res.department.dept;
226
+                let user = res.user.name;
227
+                let phone = res.user.phone;
228
+                this.models = {
229
+                  disjunctor: true,
230
+                  title: "提示",
231
+                  content: `您选择的科室已经被使用,请换个科室,或者联系:科室[${dept}]人员[${user}]号码[${phone}] 切换科室解决`,
232
+                  icon: "warn",
233
+                  phone,
234
+                  operate: {
235
+                    know: "知道了",
236
+                  },
237
+                };
238
+              }
239
+            });
240
+          }
241
+        }
242
+      },
243
+      // 获取科室列表
244
+      getDeptList() {
245
+        uni.showLoading({
246
+          title: "加载中",
247
+          mask: true,
248
+        });
249
+        post("/auth/getUserWorkDept", {}).then((res) => {
250
+          uni.hideLoading();
251
+          if (res.status == 200) {
252
+            this.zxzData = res.data;
253
+            uni.setStorageSync("setDepts", this.zxzData); //存科室列表
254
+          } else {
255
+            uni.showToast({
256
+              icon: "none",
257
+              title: "请求失败!",
258
+            });
259
+          }
260
+        });
261
+      },
262
+    },
263
+    onLoad(options) {
264
+      console.log(options);
265
+      this.configName = options.configName;
266
+      this.id = options.id;
267
+      this.changedept = options.changedept;
268
+      if (uni.getStorageSync("setDepts")) {
269
+        this.zxzData = uni.getStorageSync("setDepts");
270
+      } else {
271
+        this.getDeptList();
272
+      }
273
+    },
274
+  };
275
+</script>
276
+<style lang="less">
277
+  .setDept {
278
+    width: 100%;
279
+    height: 100%;
280
+    position: relative;
281
+
282
+    .page_tab {
283
+      width: 100%;
284
+      height: 96rpx;
285
+      display: flex;
286
+      position: fixed;
287
+      left: 0;
288
+      top: 0;
289
+      z-index: 999;
290
+
291
+      .page_tab_bar {
292
+        flex: 1;
293
+        font-size: 36rpx;
294
+        background: #fff;
295
+        display: flex;
296
+        justify-content: center;
297
+        align-items: center;
298
+        position: relative;
299
+
300
+        &:after {
301
+          content: "";
302
+          position: absolute;
303
+          left: 0;
304
+          bottom: 0;
305
+          height: 2rpx;
306
+          width: 100%;
307
+          background-color: transparent;
308
+        }
309
+
310
+        .tab_dept {
311
+          position: relative;
312
+
313
+          .addDept {
314
+            white-space: nowrap;
315
+            margin: 0;
316
+            position: absolute;
317
+            right: 0;
318
+            top: 50%;
319
+            transform: translate(105%, -50%);
320
+            padding: 0 0.5em;
321
+            line-height: 2;
322
+          }
323
+        }
324
+
325
+        &.active {
326
+          color: #49b856;
327
+
328
+          &:after {
329
+            background-color: #49b856;
330
+          }
331
+        }
332
+      }
333
+    }
334
+
335
+    .zwsj {
336
+      position: absolute;
337
+      left: 50%;
338
+      top: 180rpx;
339
+      transform: translateX(-50%);
340
+
341
+      .zwsj-img {
342
+        width: 560rpx;
343
+      }
344
+
345
+      .zwsj-txt {
346
+        font-size: 36rpx;
347
+        font-weight: 700;
348
+        margin-top: 20rpx;
349
+        text-align: center;
350
+      }
351
+    }
352
+
353
+    .page_items {
354
+      height: calc(100vh - 184rpx);
355
+      padding-top: 96rpx;
356
+      overflow: auto;
357
+
358
+      .page_items_scroll {
359
+        height: 100%;
360
+
361
+        .keyword-entry-tap {
362
+          background-color: #eee;
363
+        }
364
+
365
+        .keyword-entry {
366
+          width: 94%;
367
+          height: 80upx;
368
+          padding: 0 3%;
369
+          font-size: 30upx;
370
+          color: #333;
371
+          display: flex;
372
+          justify-content: space-between;
373
+          align-items: center;
374
+          border-bottom: solid 1upx #e7e7e7;
375
+
376
+          .keyword-text,
377
+          .keyword-img {
378
+            height: 80upx;
379
+            display: flex;
380
+            align-items: center;
381
+          }
382
+
383
+          .keyword-text {
384
+            width: 90%;
385
+          }
386
+
387
+          .keyword-img {
388
+            width: 20%;
389
+            justify-content: center;
390
+            color: #49b856;
391
+          }
392
+        }
393
+      }
394
+    }
395
+
396
+    // 底部
397
+    .toolbar {
398
+      position: fixed;
399
+      left: 0;
400
+      right: 0;
401
+      bottom: 0;
402
+      z-index: 9999;
403
+      height: 88rpx;
404
+      display: flex;
405
+      justify-content: center;
406
+      align-items: center;
407
+      box-sizing: border-box;
408
+      border-radius: 4rpx;
409
+      box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.24);
410
+      background-color: #e5e9ed;
411
+
412
+      .toolbar-sao {
413
+        font-size: 36rpx;
414
+        color: #49b856;
415
+      }
416
+    }
417
+  }
418
+</style>

+ 276 - 0
pages/settingCode/settingCode.vue

@@ -0,0 +1,276 @@
1
+<template>
2
+  <view class="settingCode">
3
+    <view class="scanning_btn" hover-class="seimin-btn-hover" @click="drugsScanning()">
4
+      <text class="icon_transport transport-saoma"></text>
5
+    </view>
6
+    <view class="scanFont">可通过扫一扫功能设置科室,扫描二维码后设置或替换科室</view>
7
+    <view class="scanFont nr">
8
+      <text>查询科室结果:{{queryDept?queryDept.dept:"无"}}</text>
9
+    </view>
10
+    <view class="scanFont nr red">{{msg}}</view>
11
+    <footTool :settings="settings" @operate="operate"></footTool>
12
+    <!-- 弹窗 -->
13
+    <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
14
+      @ok="ok" @cancel="cancel" @know="know" :operate="models.operate"></showModel>
15
+  </view>
16
+</template>
17
+
18
+<script>
19
+  import footTool from "../../components/footTool/footTool.vue";
20
+  import {
21
+    get,
22
+    post,
23
+    SM,
24
+    webHandle
25
+  } from "../../http/http.js";
26
+  export default {
27
+    data() {
28
+      return {
29
+        queryDept: null, //根据二维码查询到的科室
30
+        settings: [], //底部按钮设置
31
+        msg: '', //提示信息
32
+        // 弹窗model
33
+        models: {
34
+          disjunctor: false,
35
+        },
36
+        options: null, //url传参
37
+        index: -1, //当前操作的索引
38
+        qrCode: '', //当前扫描的二维码
39
+        resetGo: false, //是否回到初始界面
40
+      }
41
+    },
42
+    components: {
43
+      footTool
44
+    },
45
+    methods: {
46
+      //抢单后知道了
47
+      know() {
48
+        this.models.disjunctor = false;
49
+        if (this.resetGo) {
50
+          uni.navigateTo({
51
+            url: `../settingCode/settingCode`,
52
+          });
53
+        }
54
+      },
55
+      //确定
56
+      ok() {
57
+        this.models.disjunctor = false;
58
+        uni.showLoading({
59
+          title: "加载中",
60
+          mask: true,
61
+        });
62
+        if (this.settings[this.index].uniName == 'replaceSave') { //替换保存
63
+          let postData = {
64
+            "type": "update",
65
+            "qrCode": this.qrCode,
66
+            "destDept": this.options.targetId,
67
+            "sourceDept": this.queryDept.id
68
+          };
69
+          post("/dept/scanChangeDept", postData).then((res) => {
70
+            uni.hideLoading();
71
+            let msg = "保存失败";
72
+            let icon = "error";
73
+            this.resetGo = false;
74
+            if (res.status == 200) {
75
+              this.resetGo = true;
76
+              msg = "保存成功";
77
+              icon = "success";
78
+            }
79
+            this.models = {
80
+              disjunctor: true,
81
+              content: msg,
82
+              icon: icon,
83
+              operate: {
84
+                know: "知道了",
85
+              },
86
+            };
87
+          })
88
+        } else if (this.settings[this.index].uniName == 'settingSave') { //设置保存
89
+          let postData = {
90
+            "type": "save",
91
+            "qrCode": this.qrCode,
92
+            "destDept": this.options.targetId
93
+          }
94
+          post("/dept/scanChangeDept", postData).then((res) => {
95
+            uni.hideLoading();
96
+            let msg = "保存失败";
97
+            let icon = "error";
98
+            this.resetGo = false;
99
+            if (res.status == 200) {
100
+              this.resetGo = true;
101
+              msg = "保存成功";
102
+              icon = "success";
103
+            }
104
+            this.models = {
105
+              disjunctor: true,
106
+              content: msg,
107
+              icon: icon,
108
+              operate: {
109
+                know: "知道了",
110
+              },
111
+            };
112
+          })
113
+        }
114
+      },
115
+      //取消
116
+      cancel() {
117
+        this.models.disjunctor = false;
118
+      },
119
+      // 底部按钮操作
120
+      operate(i) {
121
+        console.log(i,this.settings,'seimin')
122
+        if (this.settings[i].uniName == 'replaceGo') { //替换,去选择科室
123
+          uni.navigateTo({
124
+            url: `../search/search?type=settingCode&uniName=${this.settings[i].uniName}&queryDept=${this.queryDept.dept}&queryDeptId=${this.queryDept.id}&qrCode=${this.qrCode}`,
125
+          });
126
+        } else if (this.settings[i].uniName == 'settingGo') { //设置,去选择科室
127
+          uni.navigateTo({
128
+            url: `../search/search?type=settingCode&uniName=${this.settings[i].uniName}&qrCode=${this.qrCode}`,
129
+          });
130
+        } else if (this.settings[i].uniName == 'replaceSave') { //替换保存
131
+          this.index = i;
132
+          this.models = {
133
+            disjunctor: true,
134
+            title: "提示",
135
+            content: `此二维码绑定${this.options.targetDept}成功,${this.queryDept.dept}的二维码被清空`,
136
+            icon: "warn",
137
+            operate: {
138
+              ok: "确定",
139
+              cancel: "取消",
140
+            },
141
+          };
142
+        } else if (this.settings[i].uniName == 'settingSave') { //设置保存
143
+          this.index = i;
144
+          this.models = {
145
+            disjunctor: true,
146
+            title: "提示",
147
+            content: `将设置${this.options.targetDept}到此二维码上`,
148
+            icon: "warn",
149
+            operate: {
150
+              ok: "确定",
151
+              cancel: "取消",
152
+            },
153
+          };
154
+        }
155
+      },
156
+      // 扫一扫
157
+      drugsScanning() {
158
+        SM().then((ress) => {
159
+          this.qrCode = ress;
160
+          let postData = {
161
+            "type": "query",
162
+            "qrCode": ress
163
+          };
164
+          uni.showLoading({
165
+            title: "加载中",
166
+            mask: true,
167
+          });
168
+          post("/dept/scanChangeDept", postData).then((res) => {
169
+            uni.hideLoading();
170
+            if (res.status == 200) {
171
+              if (res.data) { //替换
172
+                this.queryDept = {
173
+                  dept: res.data.dept,
174
+                  id: res.data.id
175
+                };
176
+                this.settings = [{
177
+                  name: '替换',
178
+                  uniName: 'replaceGo'
179
+                }];
180
+              } else { //设置
181
+                this.queryDept = null;
182
+                this.settings = [{
183
+                  name: '设置',
184
+                  uniName: 'settingGo'
185
+                }];
186
+              }
187
+            } else {
188
+              uni.showToast({
189
+                icon: "none",
190
+                title: "请求失败!",
191
+              });
192
+            }
193
+          })
194
+        });
195
+      },
196
+    },
197
+    onLoad(options) {
198
+      console.log(options,'seimin')
199
+      this.options = options;
200
+      if (options.uniName == "replaceGo") { //替换
201
+        this.qrCode = options.qrCode
202
+        this.queryDept = {
203
+          dept: options.queryDept,
204
+          id: options.queryDeptId
205
+        };
206
+        this.msg = `此二维码绑定${options.targetDept}成功,${this.queryDept.dept}的二维码被清空`;
207
+        this.settings = [{
208
+          name: '替换',
209
+          uniName: 'replaceGo'
210
+        }, {
211
+          name: '保存',
212
+          uniName: 'replaceSave'
213
+        }];
214
+      } else if (options.uniName == "settingGo") { //设置
215
+        this.qrCode = options.qrCode;
216
+        this.msg = `将设置${options.targetDept}到此二维码上`;
217
+        this.settings = [{
218
+          name: '设置',
219
+          uniName: 'settingGo'
220
+        }, {
221
+          name: '保存',
222
+          uniName: 'settingSave'
223
+        }];
224
+      }
225
+      // #ifdef APP-PLUS
226
+      webHandle("no", "app");
227
+      // #endif
228
+      // #ifdef H5
229
+      webHandle("no", "wx");
230
+      // #endif
231
+    }
232
+  }
233
+</script>
234
+
235
+<style lang="less" scoped>
236
+  .settingCode {
237
+    background-color: rgb(249, 250, 251);
238
+    padding-top: 36rpx;
239
+    height: 100vh;
240
+    box-sizing: border-box;
241
+
242
+    .scanning_btn {
243
+      margin: 0 auto;
244
+      width: 138rpx;
245
+      height: 138rpx;
246
+      background: #72c172;
247
+      border-radius: 50%;
248
+      /*偏移*/
249
+      line-height: 200rpx;
250
+      color: #fff;
251
+      font-size: 36rpx;
252
+      display: flex;
253
+      justify-content: center;
254
+      align-items: center;
255
+
256
+      text {
257
+        font-size: 48rpx;
258
+      }
259
+    }
260
+
261
+    .scanFont {
262
+      font-size: 36rpx;
263
+      font-weight: 700;
264
+      margin: 32rpx;
265
+      text-align: center;
266
+
267
+      &.nr {
268
+        font-weight: normal;
269
+      }
270
+
271
+      &.red {
272
+        color: red;
273
+      }
274
+    }
275
+  }
276
+</style>

+ 380 - 0
pages/shortcutbuildOrders/shortcutbuildOrders.vue

@@ -0,0 +1,380 @@
1
+<template>
2
+  <view class="Receipt_infopage">
3
+    <view class="title">工单信息</view>
4
+    <view class="page_item_wrap">
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">创建人:{{ msg.createUserName }}</view>
10
+            </view>
11
+            <view class="page_item_top_R">
12
+              <view class="L_iocn">{{ msg.taskTypeShow }}</view>
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 class="starting">起</view> 起点科室 </view>
20
+              <view class="text_big">{{ msg.startDeptShow }}</view>
21
+            </view>
22
+          </view>
23
+          <view class="line"></view>
24
+          <view class="page_item_cont_B">
25
+            <view class="page_item_cont_title">
26
+              <view> <view class="End">终</view> 终点科室 </view>
27
+              <view class="text_big">
28
+                <view v-for="(item, i) in targetDeptShow" :key="i">{{
29
+                  item
30
+                }}</view>
31
+              </view>
32
+            </view>
33
+          </view>
34
+        </view>
35
+        <view class="L"></view>
36
+        <view class="R"></view>
37
+      </view>
38
+      <view class="L-l"></view>
39
+      <view class="R-l"></view>
40
+    </view>
41
+    <view class="foot_btn2">
42
+      <view class="btn2" @click="createOrder">新建工单并签到</view>
43
+    </view>
44
+  </view>
45
+</template>
46
+<script>
47
+import { get, post, SM, webHandle } from "../../http/http.js";
48
+export default {
49
+  data() {
50
+    return {
51
+      msg: {}, //页面展示信息
52
+      targetDeptShow: [], //目标科室
53
+    };
54
+  },
55
+  methods: {
56
+    // 新建工单并签到
57
+    createOrder() {
58
+      get(`/workerOrder/createQuickOrder/${this.msg.id}`, {}).then((res) => {
59
+        if (res.status == 200) {
60
+          uni.navigateTo({
61
+            url: "../receiptpage/receiptpage",
62
+          });
63
+        } else {
64
+          uni.showToast({
65
+            icon: "none",
66
+            title: "请求失败!",
67
+          });
68
+        }
69
+      });
70
+    },
71
+  },
72
+  onLoad(options) {
73
+    console.log(options, "快捷建单");
74
+    this.msg = JSON.parse(options.infoDATA);
75
+    this.targetDeptShow = this.msg.targetDeptShow.split(",");
76
+    // #ifdef APP-PLUS
77
+    webHandle("no", "app");
78
+    // #endif
79
+    // #ifdef H5
80
+    webHandle("no", "wx");
81
+    // #endif
82
+  },
83
+};
84
+</script>
85
+<style lang="less">
86
+.Receipt_infopage {
87
+  .title {
88
+    font-size: 48rpx;
89
+    margin-top: 24rpx;
90
+    margin-bottom: 24rpx;
91
+    text-align: center;
92
+  }
93
+
94
+  .page_item_wrap {
95
+    width: 100%;
96
+    height: auto;
97
+    box-sizing: border-box;
98
+    position: absolute;
99
+
100
+    .page_item {
101
+      margin-top: 16rpx;
102
+      margin-bottom: 124rpx;
103
+      background: #fff;
104
+      border-radius: 8rpx;
105
+      margin: 0 20rpx;
106
+      border: 2rpx solid #e5e9ed;
107
+      position: relative;
108
+      overflow: hidden;
109
+      padding: 0 16rpx;
110
+
111
+      .L {
112
+        width: 40rpx;
113
+        height: 40rpx;
114
+        border-radius: 50%;
115
+        background: #f9fafb;
116
+        position: absolute;
117
+        left: -20rpx;
118
+        top: 68rpx;
119
+        border: 2rpx solid #e5e9ed;
120
+      }
121
+
122
+      .R {
123
+        width: 40rpx;
124
+        height: 40rpx;
125
+        border-radius: 50%;
126
+        background: #f9fafb;
127
+        position: absolute;
128
+        float: right;
129
+        right: -20rpx;
130
+        top: 68rpx;
131
+        border: 2rpx solid #e5e9ed;
132
+      }
133
+
134
+      .starting {
135
+        width: 50rpx;
136
+        height: 50rpx;
137
+        color: #fff;
138
+        background: #49b856;
139
+        display: inline-block;
140
+        border-radius: 50%;
141
+        text-align: center;
142
+        line-height: 46rpx;
143
+        font-size: 32rpx;
144
+        margin-right: 6rpx;
145
+      }
146
+
147
+      .End {
148
+        width: 50rpx;
149
+        height: 50rpx;
150
+        color: #fff;
151
+        background: #39b199;
152
+        display: inline-block;
153
+        border-radius: 50%;
154
+        text-align: center;
155
+        line-height: 46rpx;
156
+        font-size: 32rpx;
157
+        margin-right: 6rpx;
158
+      }
159
+
160
+      .page_item_top {
161
+        height: 88rpx;
162
+        border-bottom: 2rpx dashed #e5e9ed;
163
+        padding: 0 16rpx;
164
+
165
+        .page_item_top-inner {
166
+          display: flex;
167
+          justify-content: space-between;
168
+          align-items: center;
169
+          height: 100%;
170
+
171
+          .page_item_top_L {
172
+            .emergencys {
173
+              background: #ff3b53 !important;
174
+              width: 124rpx !important;
175
+            }
176
+
177
+            .emergency {
178
+              background: #ff3b53 !important;
179
+            }
180
+
181
+            .emergency1 {
182
+              background: #49b856 !important;
183
+            }
184
+
185
+            .page_item_cont_start {
186
+              text-align: center;
187
+              height: 44rpx;
188
+              width: 104rpx;
189
+              line-height: 44rpx;
190
+              border-radius: 8rpx;
191
+              background: #49b856;
192
+              color: #fff;
193
+              display: inline-block;
194
+            }
195
+
196
+            .L_time {
197
+              color: #6cc076;
198
+              font-size: 32rpx;
199
+            }
200
+
201
+            .L_text {
202
+              font-size: 32rpx;
203
+              font-weight: 700;
204
+            }
205
+          }
206
+
207
+          .page_item_top_R {
208
+            font-size: 32rpx;
209
+
210
+            .L_iocn {
211
+              color: rgb(7, 134, 60);
212
+              font-size: 36rpx;
213
+              font-weight: 700;
214
+            }
215
+          }
216
+        }
217
+      }
218
+
219
+      .page_item_cont {
220
+        min-height: 180rpx;
221
+        // max-height: 424rpx;
222
+        padding: 0 16rpx;
223
+        text-align: left;
224
+        position: relative;
225
+
226
+        .text_big {
227
+          font-size: 32rpx;
228
+          font-weight: 700;
229
+          margin-top: 10rpx;
230
+
231
+          p {
232
+            font-weight: 700;
233
+            line-height: 1.5;
234
+          }
235
+        }
236
+
237
+        .line {
238
+          height: 20rpx;
239
+          width: 2rpx;
240
+          border-left: 2rpx solid #e5e9ed;
241
+          position: absolute;
242
+          top: 82rpx;
243
+          left: 40rpx;
244
+        }
245
+
246
+        .lines {
247
+          height: 40%;
248
+          width: 2rpx;
249
+          border-left: 2rpx solid #e5e9ed;
250
+          position: absolute;
251
+          top: 23%;
252
+          left: 36rpx;
253
+        }
254
+
255
+        .page_item_cont_T {
256
+          padding-top: 28rpx;
257
+          font-size: 28rpx;
258
+
259
+          .page_item_cont_title {
260
+            height: 100%;
261
+            font-size: 32rpx;
262
+            display: flex;
263
+            justify-content: space-between;
264
+          }
265
+        }
266
+
267
+        .page_item_cont_B {
268
+          padding-top: 28rpx;
269
+          margin-bottom: 28rpx;
270
+
271
+          .page_item_cont_title {
272
+            font-size: 32rpx;
273
+            display: flex;
274
+            justify-content: space-between;
275
+          }
276
+
277
+          .page_item_cont_title1 {
278
+            height: 60rpx;
279
+            line-height: 60rpx;
280
+            font-size: 32rpx;
281
+            padding-left: 64rpx;
282
+          }
283
+        }
284
+      }
285
+
286
+      .page_item_foot {
287
+        border-top: 2rpx dashed #e5e9ed;
288
+        border-bottom: 2rpx dashed #e5e9ed;
289
+        padding: 28rpx 16rpx;
290
+        text-align: left;
291
+
292
+        .page_item_foot_text {
293
+          font-size: 32rpx;
294
+          margin-bottom: 20rpx;
295
+
296
+          .text1 {
297
+            color: rgb(102, 102, 102);
298
+          }
299
+
300
+          .text2 {
301
+            float: right;
302
+            font-weight: 700;
303
+          }
304
+        }
305
+      }
306
+
307
+      #infos {
308
+        display: none;
309
+      }
310
+
311
+      .page_item_infos {
312
+        padding-bottom: 20rpx;
313
+        border-bottom: 2rpx dashed #e5e9ed;
314
+
315
+        .page_item_info2 {
316
+          text-align: left;
317
+          line-height: 60rpx;
318
+          font-size: 32rpx;
319
+          padding-left: 16rpx;
320
+
321
+          .page_item_foot_text {
322
+            font-size: 32rpx;
323
+            margin-bottom: 20rpx;
324
+
325
+            .text1 {
326
+              color: rgb(102, 102, 102);
327
+            }
328
+
329
+            .text2 {
330
+              float: right;
331
+              font-weight: 700;
332
+            }
333
+          }
334
+        }
335
+      }
336
+    }
337
+
338
+    .L-l {
339
+      width: 2rpx;
340
+      height: 40rpx;
341
+      background: #f9fafb;
342
+      position: absolute;
343
+      left: 20rpx;
344
+      top: 72rpx;
345
+    }
346
+
347
+    .R-l {
348
+      width: 2rpx;
349
+      height: 40rpx;
350
+      background: #f9fafb;
351
+      position: absolute;
352
+      right: 20rpx;
353
+      top: 72rpx;
354
+    }
355
+  }
356
+
357
+  .foot_btn2 {
358
+    position: fixed;
359
+    bottom: 0;
360
+    width: 100vw;
361
+    padding: 0 20rpx;
362
+    box-sizing: border-box;
363
+    line-height: 66rpx;
364
+    height: 100rpx;
365
+    border-top: 2rpx solid #e5e9ed;
366
+    background: #f9fafb;
367
+    text-align: center;
368
+
369
+    .btn2 {
370
+      height: 66rpx;
371
+      width: 100%;
372
+      background-image: linear-gradient(to right, #72c172, #3bb197);
373
+      color: #fff;
374
+      border-radius: 8rpx;
375
+      font-size: 32rpx;
376
+      margin-top: 16rpx;
377
+    }
378
+  }
379
+}
380
+</style>

BIN
static/HM-search/attention.png


BIN
static/HM-search/attention_forbid.png


BIN
static/HM-search/back.png


BIN
static/HM-search/delete.png


+ 539 - 0
static/font/demo.css

@@ -0,0 +1,539 @@
1
+/* Logo 字体 */
2
+@font-face {
3
+  font-family: "iconfont logo";
4
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
5
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
6
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
7
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
8
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
9
+}
10
+
11
+.logo {
12
+  font-family: "iconfont logo";
13
+  font-size: 160px;
14
+  font-style: normal;
15
+  -webkit-font-smoothing: antialiased;
16
+  -moz-osx-font-smoothing: grayscale;
17
+}
18
+
19
+/* tabs */
20
+.nav-tabs {
21
+  position: relative;
22
+}
23
+
24
+.nav-tabs .nav-more {
25
+  position: absolute;
26
+  right: 0;
27
+  bottom: 0;
28
+  height: 42px;
29
+  line-height: 42px;
30
+  color: #666;
31
+}
32
+
33
+#tabs {
34
+  border-bottom: 1px solid #eee;
35
+}
36
+
37
+#tabs li {
38
+  cursor: pointer;
39
+  width: 100px;
40
+  height: 40px;
41
+  line-height: 40px;
42
+  text-align: center;
43
+  font-size: 16px;
44
+  border-bottom: 2px solid transparent;
45
+  position: relative;
46
+  z-index: 1;
47
+  margin-bottom: -1px;
48
+  color: #666;
49
+}
50
+
51
+
52
+#tabs .active {
53
+  border-bottom-color: #f00;
54
+  color: #222;
55
+}
56
+
57
+.tab-container .content {
58
+  display: none;
59
+}
60
+
61
+/* 页面布局 */
62
+.main {
63
+  padding: 30px 100px;
64
+  width: 960px;
65
+  margin: 0 auto;
66
+}
67
+
68
+.main .logo {
69
+  color: #333;
70
+  text-align: left;
71
+  margin-bottom: 30px;
72
+  line-height: 1;
73
+  height: 110px;
74
+  margin-top: -50px;
75
+  overflow: hidden;
76
+  *zoom: 1;
77
+}
78
+
79
+.main .logo a {
80
+  font-size: 160px;
81
+  color: #333;
82
+}
83
+
84
+.helps {
85
+  margin-top: 40px;
86
+}
87
+
88
+.helps pre {
89
+  padding: 20px;
90
+  margin: 10px 0;
91
+  border: solid 1px #e7e1cd;
92
+  background-color: #fffdef;
93
+  overflow: auto;
94
+}
95
+
96
+.icon_lists {
97
+  width: 100% !important;
98
+  overflow: hidden;
99
+  *zoom: 1;
100
+}
101
+
102
+.icon_lists li {
103
+  width: 100px;
104
+  margin-bottom: 10px;
105
+  margin-right: 20px;
106
+  text-align: center;
107
+  list-style: none !important;
108
+  cursor: default;
109
+}
110
+
111
+.icon_lists li .code-name {
112
+  line-height: 1.2;
113
+}
114
+
115
+.icon_lists .icon {
116
+  display: block;
117
+  height: 100px;
118
+  line-height: 100px;
119
+  font-size: 42px;
120
+  margin: 10px auto;
121
+  color: #333;
122
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
123
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
124
+  transition: font-size 0.25s linear, width 0.25s linear;
125
+}
126
+
127
+.icon_lists .icon:hover {
128
+  font-size: 100px;
129
+}
130
+
131
+.icon_lists .svg-icon {
132
+  /* 通过设置 font-size 来改变图标大小 */
133
+  width: 1em;
134
+  /* 图标和文字相邻时,垂直对齐 */
135
+  vertical-align: -0.15em;
136
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
137
+  fill: currentColor;
138
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
139
+      normalize.css 中也包含这行 */
140
+  overflow: hidden;
141
+}
142
+
143
+.icon_lists li .name,
144
+.icon_lists li .code-name {
145
+  color: #666;
146
+}
147
+
148
+/* markdown 样式 */
149
+.markdown {
150
+  color: #666;
151
+  font-size: 14px;
152
+  line-height: 1.8;
153
+}
154
+
155
+.highlight {
156
+  line-height: 1.5;
157
+}
158
+
159
+.markdown img {
160
+  vertical-align: middle;
161
+  max-width: 100%;
162
+}
163
+
164
+.markdown h1 {
165
+  color: #404040;
166
+  font-weight: 500;
167
+  line-height: 40px;
168
+  margin-bottom: 24px;
169
+}
170
+
171
+.markdown h2,
172
+.markdown h3,
173
+.markdown h4,
174
+.markdown h5,
175
+.markdown h6 {
176
+  color: #404040;
177
+  margin: 1.6em 0 0.6em 0;
178
+  font-weight: 500;
179
+  clear: both;
180
+}
181
+
182
+.markdown h1 {
183
+  font-size: 28px;
184
+}
185
+
186
+.markdown h2 {
187
+  font-size: 22px;
188
+}
189
+
190
+.markdown h3 {
191
+  font-size: 16px;
192
+}
193
+
194
+.markdown h4 {
195
+  font-size: 14px;
196
+}
197
+
198
+.markdown h5 {
199
+  font-size: 12px;
200
+}
201
+
202
+.markdown h6 {
203
+  font-size: 12px;
204
+}
205
+
206
+.markdown hr {
207
+  height: 1px;
208
+  border: 0;
209
+  background: #e9e9e9;
210
+  margin: 16px 0;
211
+  clear: both;
212
+}
213
+
214
+.markdown p {
215
+  margin: 1em 0;
216
+}
217
+
218
+.markdown>p,
219
+.markdown>blockquote,
220
+.markdown>.highlight,
221
+.markdown>ol,
222
+.markdown>ul {
223
+  width: 80%;
224
+}
225
+
226
+.markdown ul>li {
227
+  list-style: circle;
228
+}
229
+
230
+.markdown>ul li,
231
+.markdown blockquote ul>li {
232
+  margin-left: 20px;
233
+  padding-left: 4px;
234
+}
235
+
236
+.markdown>ul li p,
237
+.markdown>ol li p {
238
+  margin: 0.6em 0;
239
+}
240
+
241
+.markdown ol>li {
242
+  list-style: decimal;
243
+}
244
+
245
+.markdown>ol li,
246
+.markdown blockquote ol>li {
247
+  margin-left: 20px;
248
+  padding-left: 4px;
249
+}
250
+
251
+.markdown code {
252
+  margin: 0 3px;
253
+  padding: 0 5px;
254
+  background: #eee;
255
+  border-radius: 3px;
256
+}
257
+
258
+.markdown strong,
259
+.markdown b {
260
+  font-weight: 600;
261
+}
262
+
263
+.markdown>table {
264
+  border-collapse: collapse;
265
+  border-spacing: 0px;
266
+  empty-cells: show;
267
+  border: 1px solid #e9e9e9;
268
+  width: 95%;
269
+  margin-bottom: 24px;
270
+}
271
+
272
+.markdown>table th {
273
+  white-space: nowrap;
274
+  color: #333;
275
+  font-weight: 600;
276
+}
277
+
278
+.markdown>table th,
279
+.markdown>table td {
280
+  border: 1px solid #e9e9e9;
281
+  padding: 8px 16px;
282
+  text-align: left;
283
+}
284
+
285
+.markdown>table th {
286
+  background: #F7F7F7;
287
+}
288
+
289
+.markdown blockquote {
290
+  font-size: 90%;
291
+  color: #999;
292
+  border-left: 4px solid #e9e9e9;
293
+  padding-left: 0.8em;
294
+  margin: 1em 0;
295
+}
296
+
297
+.markdown blockquote p {
298
+  margin: 0;
299
+}
300
+
301
+.markdown .anchor {
302
+  opacity: 0;
303
+  transition: opacity 0.3s ease;
304
+  margin-left: 8px;
305
+}
306
+
307
+.markdown .waiting {
308
+  color: #ccc;
309
+}
310
+
311
+.markdown h1:hover .anchor,
312
+.markdown h2:hover .anchor,
313
+.markdown h3:hover .anchor,
314
+.markdown h4:hover .anchor,
315
+.markdown h5:hover .anchor,
316
+.markdown h6:hover .anchor {
317
+  opacity: 1;
318
+  display: inline-block;
319
+}
320
+
321
+.markdown>br,
322
+.markdown>p>br {
323
+  clear: both;
324
+}
325
+
326
+
327
+.hljs {
328
+  display: block;
329
+  background: white;
330
+  padding: 0.5em;
331
+  color: #333333;
332
+  overflow-x: auto;
333
+}
334
+
335
+.hljs-comment,
336
+.hljs-meta {
337
+  color: #969896;
338
+}
339
+
340
+.hljs-string,
341
+.hljs-variable,
342
+.hljs-template-variable,
343
+.hljs-strong,
344
+.hljs-emphasis,
345
+.hljs-quote {
346
+  color: #df5000;
347
+}
348
+
349
+.hljs-keyword,
350
+.hljs-selector-tag,
351
+.hljs-type {
352
+  color: #a71d5d;
353
+}
354
+
355
+.hljs-literal,
356
+.hljs-symbol,
357
+.hljs-bullet,
358
+.hljs-attribute {
359
+  color: #0086b3;
360
+}
361
+
362
+.hljs-section,
363
+.hljs-name {
364
+  color: #63a35c;
365
+}
366
+
367
+.hljs-tag {
368
+  color: #333333;
369
+}
370
+
371
+.hljs-title,
372
+.hljs-attr,
373
+.hljs-selector-id,
374
+.hljs-selector-class,
375
+.hljs-selector-attr,
376
+.hljs-selector-pseudo {
377
+  color: #795da3;
378
+}
379
+
380
+.hljs-addition {
381
+  color: #55a532;
382
+  background-color: #eaffea;
383
+}
384
+
385
+.hljs-deletion {
386
+  color: #bd2c00;
387
+  background-color: #ffecec;
388
+}
389
+
390
+.hljs-link {
391
+  text-decoration: underline;
392
+}
393
+
394
+/* 代码高亮 */
395
+/* PrismJS 1.15.0
396
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
397
+/**
398
+ * prism.js default theme for JavaScript, CSS and HTML
399
+ * Based on dabblet (http://dabblet.com)
400
+ * @author Lea Verou
401
+ */
402
+code[class*="language-"],
403
+pre[class*="language-"] {
404
+  color: black;
405
+  background: none;
406
+  text-shadow: 0 1px white;
407
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
408
+  text-align: left;
409
+  white-space: pre;
410
+  word-spacing: normal;
411
+  word-break: normal;
412
+  word-wrap: normal;
413
+  line-height: 1.5;
414
+
415
+  -moz-tab-size: 4;
416
+  -o-tab-size: 4;
417
+  tab-size: 4;
418
+
419
+  -webkit-hyphens: none;
420
+  -moz-hyphens: none;
421
+  -ms-hyphens: none;
422
+  hyphens: none;
423
+}
424
+
425
+pre[class*="language-"]::-moz-selection,
426
+pre[class*="language-"] ::-moz-selection,
427
+code[class*="language-"]::-moz-selection,
428
+code[class*="language-"] ::-moz-selection {
429
+  text-shadow: none;
430
+  background: #b3d4fc;
431
+}
432
+
433
+pre[class*="language-"]::selection,
434
+pre[class*="language-"] ::selection,
435
+code[class*="language-"]::selection,
436
+code[class*="language-"] ::selection {
437
+  text-shadow: none;
438
+  background: #b3d4fc;
439
+}
440
+
441
+@media print {
442
+
443
+  code[class*="language-"],
444
+  pre[class*="language-"] {
445
+    text-shadow: none;
446
+  }
447
+}
448
+
449
+/* Code blocks */
450
+pre[class*="language-"] {
451
+  padding: 1em;
452
+  margin: .5em 0;
453
+  overflow: auto;
454
+}
455
+
456
+:not(pre)>code[class*="language-"],
457
+pre[class*="language-"] {
458
+  background: #f5f2f0;
459
+}
460
+
461
+/* Inline code */
462
+:not(pre)>code[class*="language-"] {
463
+  padding: .1em;
464
+  border-radius: .3em;
465
+  white-space: normal;
466
+}
467
+
468
+.token.comment,
469
+.token.prolog,
470
+.token.doctype,
471
+.token.cdata {
472
+  color: slategray;
473
+}
474
+
475
+.token.punctuation {
476
+  color: #999;
477
+}
478
+
479
+.namespace {
480
+  opacity: .7;
481
+}
482
+
483
+.token.property,
484
+.token.tag,
485
+.token.boolean,
486
+.token.number,
487
+.token.constant,
488
+.token.symbol,
489
+.token.deleted {
490
+  color: #905;
491
+}
492
+
493
+.token.selector,
494
+.token.attr-name,
495
+.token.string,
496
+.token.char,
497
+.token.builtin,
498
+.token.inserted {
499
+  color: #690;
500
+}
501
+
502
+.token.operator,
503
+.token.entity,
504
+.token.url,
505
+.language-css .token.string,
506
+.style .token.string {
507
+  color: #9a6e3a;
508
+  background: hsla(0, 0%, 100%, .5);
509
+}
510
+
511
+.token.atrule,
512
+.token.attr-value,
513
+.token.keyword {
514
+  color: #07a;
515
+}
516
+
517
+.token.function,
518
+.token.class-name {
519
+  color: #DD4A68;
520
+}
521
+
522
+.token.regex,
523
+.token.important,
524
+.token.variable {
525
+  color: #e90;
526
+}
527
+
528
+.token.important,
529
+.token.bold {
530
+  font-weight: bold;
531
+}
532
+
533
+.token.italic {
534
+  font-style: italic;
535
+}
536
+
537
+.token.entity {
538
+  cursor: help;
539
+}

File diff suppressed because it is too large
+ 2419 - 0
static/font/demo_index.html


+ 403 - 0
static/font/iconfont.css

@@ -0,0 +1,403 @@
1
+@font-face {
2
+  font-family: "icon_transport"; /* Project id 2522689 */
3
+  src: url('~@/static/font/iconfont.woff2?t=1619776255105') format('woff2'),
4
+       url('~@/static/font/iconfont.woff?t=1619776255105') format('woff'),
5
+       url('~@/static/font/iconfont.ttf?t=1619776255105') format('truetype');
6
+}
7
+
8
+.icon_transport {
9
+  font-family: "icon_transport" !important;
10
+  font-size: 16px;
11
+  font-style: normal;
12
+  -webkit-font-smoothing: antialiased;
13
+  -moz-osx-font-smoothing: grayscale;
14
+}
15
+
16
+.transport-Bduanshuzi:before {
17
+  content: "\e624";
18
+}
19
+
20
+.transport-Bduanshuzi1:before {
21
+  content: "\e625";
22
+}
23
+
24
+.transport-Bduanshuzi11:before {
25
+  content: "\e608";
26
+}
27
+
28
+.transport-zhong1:before {
29
+  content: "\e61d";
30
+}
31
+
32
+.transport-te1:before {
33
+  content: "\e739";
34
+}
35
+
36
+.transport-wei:before {
37
+  content: "\e61e";
38
+}
39
+
40
+.transport-keshijieshao:before {
41
+  content: "\e600";
42
+}
43
+
44
+.transport-xiala1:before {
45
+  content: "\e66b";
46
+}
47
+
48
+.transport-shouye:before {
49
+  content: "\e605";
50
+}
51
+
52
+.transport-liebiao:before {
53
+  content: "\e632";
54
+}
55
+
56
+.transport-tongjifenxi:before {
57
+  content: "\e712";
58
+}
59
+
60
+.transport-xiangzuo:before {
61
+  content: "\e601";
62
+}
63
+
64
+.transport-haoping:before {
65
+  content: "\e612";
66
+}
67
+
68
+.transport-gengduoda:before {
69
+  content: "\e633";
70
+}
71
+
72
+.transport-shouye1:before {
73
+  content: "\e62d";
74
+}
75
+
76
+.transport-haoping1:before {
77
+  content: "\e640";
78
+}
79
+
80
+.transport-guanbi:before {
81
+  content: "\e60c";
82
+}
83
+
84
+.transport-sousuo:before {
85
+  content: "\e634";
86
+}
87
+
88
+.transport-xiala:before {
89
+  content: "\e68f";
90
+}
91
+
92
+.transport-shouye2:before {
93
+  content: "\e613";
94
+}
95
+
96
+.transport-shouye3:before {
97
+  content: "\e615";
98
+}
99
+
100
+.transport-shouye4:before {
101
+  content: "\e616";
102
+}
103
+
104
+.transport-shouye5:before {
105
+  content: "\e61c";
106
+}
107
+
108
+.transport-shouye6:before {
109
+  content: "\e642";
110
+}
111
+
112
+.transport-icon:before {
113
+  content: "\e65f";
114
+}
115
+
116
+.transport-icon1:before {
117
+  content: "\e68e";
118
+}
119
+
120
+.transport-icon2:before {
121
+  content: "\e69e";
122
+}
123
+
124
+.transport-daojishi:before {
125
+  content: "\e668";
126
+}
127
+
128
+.transport-shouye7:before {
129
+  content: "\e619";
130
+}
131
+
132
+.transport-xiala2-01:before {
133
+  content: "\e62e";
134
+}
135
+
136
+.transport-shibai:before {
137
+  content: "\e626";
138
+}
139
+
140
+.transport-duigou:before {
141
+  content: "\e602";
142
+}
143
+
144
+.transport-shuangjiantouxiangyou-:before {
145
+  content: "\e71e";
146
+}
147
+
148
+.transport-shangla-:before {
149
+  content: "\e628";
150
+}
151
+
152
+.transport-xiaoxi:before {
153
+  content: "\e617";
154
+}
155
+
156
+.transport-xiangzuo1:before {
157
+  content: "\e673";
158
+}
159
+
160
+.transport-fuxuankuang:before {
161
+  content: "\e639";
162
+}
163
+
164
+.transport-fuxuankuang-:before {
165
+  content: "\e646";
166
+}
167
+
168
+.transport-xialajiantou:before {
169
+  content: "\e638";
170
+}
171
+
172
+.transport-shiwujiaoxing:before {
173
+  content: "\e635";
174
+}
175
+
176
+.transport-xiangyou:before {
177
+  content: "\e637";
178
+}
179
+
180
+.transport-xiangzuo2:before {
181
+  content: "\e6b0";
182
+}
183
+
184
+.transport-webicon19:before {
185
+  content: "\e67d";
186
+}
187
+
188
+.transport-webicon206:before {
189
+  content: "\e684";
190
+}
191
+
192
+.transport-paixujiantoushang:before {
193
+  content: "\e7fe";
194
+}
195
+
196
+.transport-paixujiantouxia:before {
197
+  content: "\e7ff";
198
+}
199
+
200
+.transport-paixu-shang:before {
201
+  content: "\eeeb";
202
+}
203
+
204
+.transport-paixu-xia:before {
205
+  content: "\eeec";
206
+}
207
+
208
+.transport-shouye8:before {
209
+  content: "\e621";
210
+}
211
+
212
+.transport-icon3:before {
213
+  content: "\e654";
214
+}
215
+
216
+.transport-tongjibaobiao:before {
217
+  content: "\e677";
218
+}
219
+
220
+.transport-chuangwei:before {
221
+  content: "\e64a";
222
+}
223
+
224
+.transport-tongji:before {
225
+  content: "\e6db";
226
+}
227
+
228
+.transport-yi-peisong:before {
229
+  content: "\e647";
230
+}
231
+
232
+.transport-wei-peisong:before {
233
+  content: "\e662";
234
+}
235
+
236
+.transport-shujuyuanzongshu:before {
237
+  content: "\e650";
238
+}
239
+
240
+.transport-keshidaozhen:before {
241
+  content: "\ead2";
242
+}
243
+
244
+.transport-shouye9:before {
245
+  content: "\e629";
246
+}
247
+
248
+.transport-luyin:before {
249
+  content: "\e6c5";
250
+}
251
+
252
+.transport-xiala2:before {
253
+  content: "\e669";
254
+}
255
+
256
+.transport-wenhao:before {
257
+  content: "\e7d2";
258
+}
259
+
260
+.transport-shouye10:before {
261
+  content: "\e63f";
262
+}
263
+
264
+.transport-shezhi:before {
265
+  content: "\e62f";
266
+}
267
+
268
+.transport-required:before {
269
+  content: "\e603";
270
+}
271
+
272
+.transport-yunzhuanzhentongjiicon-:before {
273
+  content: "\e61a";
274
+}
275
+
276
+.transport-tag27fuben:before {
277
+  content: "\e614";
278
+}
279
+
280
+.transport-qidian:before {
281
+  content: "\e6e7";
282
+}
283
+
284
+.transport-search:before {
285
+  content: "\e651";
286
+}
287
+
288
+.transport-saoma:before {
289
+  content: "\e660";
290
+}
291
+
292
+.transport-qita:before {
293
+  content: "\e60f";
294
+}
295
+
296
+.transport-shuyeguanli:before {
297
+  content: "\e678";
298
+}
299
+
300
+.transport-yidonghuliicon_biaobenliuqu:before {
301
+  content: "\e61b";
302
+}
303
+
304
+.transport-zhengchang:before {
305
+  content: "\e63e";
306
+}
307
+
308
+.transport-yichang:before {
309
+  content: "\e63a";
310
+}
311
+
312
+.transport-icon_liucheng:before {
313
+  content: "\e636";
314
+}
315
+
316
+.transport-peijianlunyitubiao:before {
317
+  content: "\e655";
318
+}
319
+
320
+.transport-ccgl-kuneizhuanyi-1:before {
321
+  content: "\e6e5";
322
+}
323
+
324
+.transport-qita1:before {
325
+  content: "\e663";
326
+}
327
+
328
+.transport--:before {
329
+  content: "\e60b";
330
+}
331
+
332
+.transport-yaopin:before {
333
+  content: "\e604";
334
+}
335
+
336
+.transport-biaobencaiji:before {
337
+  content: "\e6ea";
338
+}
339
+
340
+.transport-erweima:before {
341
+  content: "\e606";
342
+}
343
+
344
+.transport-chaoshi:before {
345
+  content: "\e63b";
346
+}
347
+
348
+.transport-guanbi1:before {
349
+  content: "\e658";
350
+}
351
+
352
+.transport-lingdang:before {
353
+  content: "\e60d";
354
+}
355
+
356
+.transport-laba1:before {
357
+  content: "\e681";
358
+}
359
+
360
+.transport-iconfontcrmtubiao68:before {
361
+  content: "\e61f";
362
+}
363
+
364
+.transport-qiehuan:before {
365
+  content: "\e63c";
366
+}
367
+
368
+.transport-duigou1:before {
369
+  content: "\e618";
370
+}
371
+
372
+.transport-shishijiankong_lunxun:before {
373
+  content: "\e641";
374
+}
375
+
376
+.transport-zhongdianguanzhu:before {
377
+  content: "\e607";
378
+}
379
+
380
+.transport-lajitong:before {
381
+  content: "\e631";
382
+}
383
+
384
+.transport-tubiao_wei:before {
385
+  content: "\e6b4";
386
+}
387
+
388
+.transport-zhong:before {
389
+  content: "\e69f";
390
+}
391
+
392
+.transport-1_round_solid:before {
393
+  content: "\e64e";
394
+}
395
+
396
+.transport-2_round_solid:before {
397
+  content: "\e64f";
398
+}
399
+
400
+.transport-3_round_solid:before {
401
+  content: "\e652";
402
+}
403
+

File diff suppressed because it is too large
+ 1 - 0
static/font/iconfont.js


+ 688 - 0
static/font/iconfont.json

@@ -0,0 +1,688 @@
1
+{
2
+  "id": "2522689",
3
+  "name": "转运图标",
4
+  "font_family": "icon_transport",
5
+  "css_prefix_text": "transport-",
6
+  "description": "",
7
+  "glyphs": [
8
+    {
9
+      "icon_id": "5532962",
10
+      "name": "B端数字2",
11
+      "font_class": "Bduanshuzi",
12
+      "unicode": "e624",
13
+      "unicode_decimal": 58916
14
+    },
15
+    {
16
+      "icon_id": "5532965",
17
+      "name": "B端数字1",
18
+      "font_class": "Bduanshuzi1",
19
+      "unicode": "e625",
20
+      "unicode_decimal": 58917
21
+    },
22
+    {
23
+      "icon_id": "18722118",
24
+      "name": "B端数字3",
25
+      "font_class": "Bduanshuzi11",
26
+      "unicode": "e608",
27
+      "unicode_decimal": 58888
28
+    },
29
+    {
30
+      "icon_id": "2759409",
31
+      "name": "重",
32
+      "font_class": "zhong1",
33
+      "unicode": "e61d",
34
+      "unicode_decimal": 58909
35
+    },
36
+    {
37
+      "icon_id": "15782971",
38
+      "name": "特",
39
+      "font_class": "te1",
40
+      "unicode": "e739",
41
+      "unicode_decimal": 59193
42
+    },
43
+    {
44
+      "icon_id": "17743297",
45
+      "name": "危",
46
+      "font_class": "wei",
47
+      "unicode": "e61e",
48
+      "unicode_decimal": 58910
49
+    },
50
+    {
51
+      "icon_id": "3022726",
52
+      "name": "科室介绍",
53
+      "font_class": "keshijieshao",
54
+      "unicode": "e600",
55
+      "unicode_decimal": 58880
56
+    },
57
+    {
58
+      "icon_id": "982411",
59
+      "name": "下拉1",
60
+      "font_class": "xiala1",
61
+      "unicode": "e66b",
62
+      "unicode_decimal": 58987
63
+    },
64
+    {
65
+      "icon_id": "1838258",
66
+      "name": "首页",
67
+      "font_class": "shouye",
68
+      "unicode": "e605",
69
+      "unicode_decimal": 58885
70
+    },
71
+    {
72
+      "icon_id": "3391239",
73
+      "name": "列表",
74
+      "font_class": "liebiao",
75
+      "unicode": "e632",
76
+      "unicode_decimal": 58930
77
+    },
78
+    {
79
+      "icon_id": "3721152",
80
+      "name": "统计分析",
81
+      "font_class": "tongjifenxi",
82
+      "unicode": "e712",
83
+      "unicode_decimal": 59154
84
+    },
85
+    {
86
+      "icon_id": "1353",
87
+      "name": "向左",
88
+      "font_class": "xiangzuo",
89
+      "unicode": "e601",
90
+      "unicode_decimal": 58881
91
+    },
92
+    {
93
+      "icon_id": "398877",
94
+      "name": "好评",
95
+      "font_class": "haoping",
96
+      "unicode": "e612",
97
+      "unicode_decimal": 58898
98
+    },
99
+    {
100
+      "icon_id": "695135",
101
+      "name": "更多 大",
102
+      "font_class": "gengduoda",
103
+      "unicode": "e633",
104
+      "unicode_decimal": 58931
105
+    },
106
+    {
107
+      "icon_id": "765588",
108
+      "name": "药箱",
109
+      "font_class": "shouye1",
110
+      "unicode": "e62d",
111
+      "unicode_decimal": 58925
112
+    },
113
+    {
114
+      "icon_id": "1351206",
115
+      "name": "好评",
116
+      "font_class": "haoping1",
117
+      "unicode": "e640",
118
+      "unicode_decimal": 58944
119
+    },
120
+    {
121
+      "icon_id": "2604472",
122
+      "name": "关闭",
123
+      "font_class": "guanbi",
124
+      "unicode": "e60c",
125
+      "unicode_decimal": 58892
126
+    },
127
+    {
128
+      "icon_id": "2675116",
129
+      "name": "搜索",
130
+      "font_class": "sousuo",
131
+      "unicode": "e634",
132
+      "unicode_decimal": 58932
133
+    },
134
+    {
135
+      "icon_id": "704337",
136
+      "name": "下拉",
137
+      "font_class": "xiala",
138
+      "unicode": "e68f",
139
+      "unicode_decimal": 59023
140
+    },
141
+    {
142
+      "icon_id": "765262",
143
+      "name": "首页",
144
+      "font_class": "shouye2",
145
+      "unicode": "e613",
146
+      "unicode_decimal": 58899
147
+    },
148
+    {
149
+      "icon_id": "765290",
150
+      "name": "我的",
151
+      "font_class": "shouye3",
152
+      "unicode": "e615",
153
+      "unicode_decimal": 58901
154
+    },
155
+    {
156
+      "icon_id": "765318",
157
+      "name": "药丸",
158
+      "font_class": "shouye4",
159
+      "unicode": "e616",
160
+      "unicode_decimal": 58902
161
+    },
162
+    {
163
+      "icon_id": "765360",
164
+      "name": "设置",
165
+      "font_class": "shouye5",
166
+      "unicode": "e61c",
167
+      "unicode_decimal": 58908
168
+    },
169
+    {
170
+      "icon_id": "769223",
171
+      "name": "待就诊",
172
+      "font_class": "shouye6",
173
+      "unicode": "e642",
174
+      "unicode_decimal": 58946
175
+    },
176
+    {
177
+      "icon_id": "784528",
178
+      "name": "日历",
179
+      "font_class": "icon",
180
+      "unicode": "e65f",
181
+      "unicode_decimal": 58975
182
+    },
183
+    {
184
+      "icon_id": "988620",
185
+      "name": "热度",
186
+      "font_class": "icon1",
187
+      "unicode": "e68e",
188
+      "unicode_decimal": 59022
189
+    },
190
+    {
191
+      "icon_id": "1167542",
192
+      "name": "化学",
193
+      "font_class": "icon2",
194
+      "unicode": "e69e",
195
+      "unicode_decimal": 59038
196
+    },
197
+    {
198
+      "icon_id": "3861282",
199
+      "name": "倒计时",
200
+      "font_class": "daojishi",
201
+      "unicode": "e668",
202
+      "unicode_decimal": 58984
203
+    },
204
+    {
205
+      "icon_id": "765340",
206
+      "name": "定位",
207
+      "font_class": "shouye7",
208
+      "unicode": "e619",
209
+      "unicode_decimal": 58905
210
+    },
211
+    {
212
+      "icon_id": "1312798",
213
+      "name": "下拉2-01",
214
+      "font_class": "xiala2-01",
215
+      "unicode": "e62e",
216
+      "unicode_decimal": 58926
217
+    },
218
+    {
219
+      "icon_id": "100733",
220
+      "name": "失败",
221
+      "font_class": "shibai",
222
+      "unicode": "e626",
223
+      "unicode_decimal": 58918
224
+    },
225
+    {
226
+      "icon_id": "3668000",
227
+      "name": "对勾",
228
+      "font_class": "duigou",
229
+      "unicode": "e602",
230
+      "unicode_decimal": 58882
231
+    },
232
+    {
233
+      "icon_id": "2015246",
234
+      "name": "双箭头(向右)-01",
235
+      "font_class": "shuangjiantouxiangyou-",
236
+      "unicode": "e71e",
237
+      "unicode_decimal": 59166
238
+    },
239
+    {
240
+      "icon_id": "4242826",
241
+      "name": "上拉2-01 (2)",
242
+      "font_class": "shangla-",
243
+      "unicode": "e628",
244
+      "unicode_decimal": 58920
245
+    },
246
+    {
247
+      "icon_id": "3315133",
248
+      "name": "消息",
249
+      "font_class": "xiaoxi",
250
+      "unicode": "e617",
251
+      "unicode_decimal": 58903
252
+    },
253
+    {
254
+      "icon_id": "3292558",
255
+      "name": "向左",
256
+      "font_class": "xiangzuo1",
257
+      "unicode": "e673",
258
+      "unicode_decimal": 58995
259
+    },
260
+    {
261
+      "icon_id": "3055031",
262
+      "name": "复选框。",
263
+      "font_class": "fuxuankuang",
264
+      "unicode": "e639",
265
+      "unicode_decimal": 58937
266
+    },
267
+    {
268
+      "icon_id": "3422864",
269
+      "name": "复选框 (1)-01",
270
+      "font_class": "fuxuankuang-",
271
+      "unicode": "e646",
272
+      "unicode_decimal": 58950
273
+    },
274
+    {
275
+      "icon_id": "287187",
276
+      "name": "下拉箭头",
277
+      "font_class": "xialajiantou",
278
+      "unicode": "e638",
279
+      "unicode_decimal": 58936
280
+    },
281
+    {
282
+      "icon_id": "383685",
283
+      "name": "实五角星",
284
+      "font_class": "shiwujiaoxing",
285
+      "unicode": "e635",
286
+      "unicode_decimal": 58933
287
+    },
288
+    {
289
+      "icon_id": "479506",
290
+      "name": "向右",
291
+      "font_class": "xiangyou",
292
+      "unicode": "e637",
293
+      "unicode_decimal": 58935
294
+    },
295
+    {
296
+      "icon_id": "814447",
297
+      "name": "向左",
298
+      "font_class": "xiangzuo2",
299
+      "unicode": "e6b0",
300
+      "unicode_decimal": 59056
301
+    },
302
+    {
303
+      "icon_id": "1053844",
304
+      "name": "单选框-选中",
305
+      "font_class": "webicon19",
306
+      "unicode": "e67d",
307
+      "unicode_decimal": 59005
308
+    },
309
+    {
310
+      "icon_id": "1053854",
311
+      "name": "单选框-未选中",
312
+      "font_class": "webicon206",
313
+      "unicode": "e684",
314
+      "unicode_decimal": 59012
315
+    },
316
+    {
317
+      "icon_id": "689267",
318
+      "name": "排序箭头上",
319
+      "font_class": "paixujiantoushang",
320
+      "unicode": "e7fe",
321
+      "unicode_decimal": 59390
322
+    },
323
+    {
324
+      "icon_id": "689268",
325
+      "name": "排序箭头下",
326
+      "font_class": "paixujiantouxia",
327
+      "unicode": "e7ff",
328
+      "unicode_decimal": 59391
329
+    },
330
+    {
331
+      "icon_id": "4965634",
332
+      "name": "排序-上",
333
+      "font_class": "paixu-shang",
334
+      "unicode": "eeeb",
335
+      "unicode_decimal": 61163
336
+    },
337
+    {
338
+      "icon_id": "4965639",
339
+      "name": "排序-下",
340
+      "font_class": "paixu-xia",
341
+      "unicode": "eeec",
342
+      "unicode_decimal": 61164
343
+    },
344
+    {
345
+      "icon_id": "765433",
346
+      "name": "历史记录",
347
+      "font_class": "shouye8",
348
+      "unicode": "e621",
349
+      "unicode_decimal": 58913
350
+    },
351
+    {
352
+      "icon_id": "782321",
353
+      "name": "说明",
354
+      "font_class": "icon3",
355
+      "unicode": "e654",
356
+      "unicode_decimal": 58964
357
+    },
358
+    {
359
+      "icon_id": "2938506",
360
+      "name": "统计报表",
361
+      "font_class": "tongjibaobiao",
362
+      "unicode": "e677",
363
+      "unicode_decimal": 58999
364
+    },
365
+    {
366
+      "icon_id": "3164198",
367
+      "name": "床位",
368
+      "font_class": "chuangwei",
369
+      "unicode": "e64a",
370
+      "unicode_decimal": 58954
371
+    },
372
+    {
373
+      "icon_id": "4195869",
374
+      "name": "统计",
375
+      "font_class": "tongji",
376
+      "unicode": "e6db",
377
+      "unicode_decimal": 59099
378
+    },
379
+    {
380
+      "icon_id": "3095282",
381
+      "name": "已-配送 ",
382
+      "font_class": "yi-peisong",
383
+      "unicode": "e647",
384
+      "unicode_decimal": 58951
385
+    },
386
+    {
387
+      "icon_id": "3264610",
388
+      "name": "未-配送",
389
+      "font_class": "wei-peisong",
390
+      "unicode": "e662",
391
+      "unicode_decimal": 58978
392
+    },
393
+    {
394
+      "icon_id": "5094525",
395
+      "name": "数据源总数",
396
+      "font_class": "shujuyuanzongshu",
397
+      "unicode": "e650",
398
+      "unicode_decimal": 58960
399
+    },
400
+    {
401
+      "icon_id": "5082433",
402
+      "name": "科室导诊#bl",
403
+      "font_class": "keshidaozhen",
404
+      "unicode": "ead2",
405
+      "unicode_decimal": 60114
406
+    },
407
+    {
408
+      "icon_id": "765558",
409
+      "name": "提醒",
410
+      "font_class": "shouye9",
411
+      "unicode": "e629",
412
+      "unicode_decimal": 58921
413
+    },
414
+    {
415
+      "icon_id": "4024735",
416
+      "name": "录音",
417
+      "font_class": "luyin",
418
+      "unicode": "e6c5",
419
+      "unicode_decimal": 59077
420
+    },
421
+    {
422
+      "icon_id": "6678312",
423
+      "name": "下  拉 (1)",
424
+      "font_class": "xiala2",
425
+      "unicode": "e669",
426
+      "unicode_decimal": 58985
427
+    },
428
+    {
429
+      "icon_id": "6771223",
430
+      "name": "问好",
431
+      "font_class": "wenhao",
432
+      "unicode": "e7d2",
433
+      "unicode_decimal": 59346
434
+    },
435
+    {
436
+      "icon_id": "768745",
437
+      "name": "进行中",
438
+      "font_class": "shouye10",
439
+      "unicode": "e63f",
440
+      "unicode_decimal": 58943
441
+    },
442
+    {
443
+      "icon_id": "453042",
444
+      "name": "设置",
445
+      "font_class": "shezhi",
446
+      "unicode": "e62f",
447
+      "unicode_decimal": 58927
448
+    },
449
+    {
450
+      "icon_id": "2817690",
451
+      "name": "星号",
452
+      "font_class": "required",
453
+      "unicode": "e603",
454
+      "unicode_decimal": 58883
455
+    },
456
+    {
457
+      "icon_id": "5260595",
458
+      "name": "空白页-暂无漏接诊单",
459
+      "font_class": "yunzhuanzhentongjiicon-",
460
+      "unicode": "e61a",
461
+      "unicode_decimal": 58906
462
+    },
463
+    {
464
+      "icon_id": "7035784",
465
+      "name": "增加",
466
+      "font_class": "tag27fuben",
467
+      "unicode": "e614",
468
+      "unicode_decimal": 58900
469
+    },
470
+    {
471
+      "icon_id": "8092249",
472
+      "name": "轨迹起点",
473
+      "font_class": "qidian",
474
+      "unicode": "e6e7",
475
+      "unicode_decimal": 59111
476
+    },
477
+    {
478
+      "icon_id": "10193579",
479
+      "name": "搜索",
480
+      "font_class": "search",
481
+      "unicode": "e651",
482
+      "unicode_decimal": 58961
483
+    },
484
+    {
485
+      "icon_id": "6757421",
486
+      "name": "扫一扫",
487
+      "font_class": "saoma",
488
+      "unicode": "e660",
489
+      "unicode_decimal": 58976
490
+    },
491
+    {
492
+      "icon_id": "4082004",
493
+      "name": "其他",
494
+      "font_class": "qita",
495
+      "unicode": "e60f",
496
+      "unicode_decimal": 58895
497
+    },
498
+    {
499
+      "icon_id": "9923151",
500
+      "name": "输液管理",
501
+      "font_class": "shuyeguanli",
502
+      "unicode": "e678",
503
+      "unicode_decimal": 59000
504
+    },
505
+    {
506
+      "icon_id": "10059601",
507
+      "name": "标本留取",
508
+      "font_class": "yidonghuliicon_biaobenliuqu",
509
+      "unicode": "e61b",
510
+      "unicode_decimal": 58907
511
+    },
512
+    {
513
+      "icon_id": "5762790",
514
+      "name": "正常",
515
+      "font_class": "zhengchang",
516
+      "unicode": "e63e",
517
+      "unicode_decimal": 58942
518
+    },
519
+    {
520
+      "icon_id": "6853490",
521
+      "name": "异常",
522
+      "font_class": "yichang",
523
+      "unicode": "e63a",
524
+      "unicode_decimal": 58938
525
+    },
526
+    {
527
+      "icon_id": "4852580",
528
+      "name": "icon_liucheng",
529
+      "font_class": "icon_liucheng",
530
+      "unicode": "e636",
531
+      "unicode_decimal": 58934
532
+    },
533
+    {
534
+      "icon_id": "1473516",
535
+      "name": "陪检(轮椅)图标",
536
+      "font_class": "peijianlunyitubiao",
537
+      "unicode": "e655",
538
+      "unicode_decimal": 58965
539
+    },
540
+    {
541
+      "icon_id": "1973826",
542
+      "name": "转移",
543
+      "font_class": "ccgl-kuneizhuanyi-1",
544
+      "unicode": "e6e5",
545
+      "unicode_decimal": 59109
546
+    },
547
+    {
548
+      "icon_id": "7503408",
549
+      "name": "其他",
550
+      "font_class": "qita1",
551
+      "unicode": "e663",
552
+      "unicode_decimal": 58979
553
+    },
554
+    {
555
+      "icon_id": "9385203",
556
+      "name": "注射器",
557
+      "font_class": "-",
558
+      "unicode": "e60b",
559
+      "unicode_decimal": 58891
560
+    },
561
+    {
562
+      "icon_id": "9714964",
563
+      "name": "药品",
564
+      "font_class": "yaopin",
565
+      "unicode": "e604",
566
+      "unicode_decimal": 58884
567
+    },
568
+    {
569
+      "icon_id": "11830234",
570
+      "name": "标本采集",
571
+      "font_class": "biaobencaiji",
572
+      "unicode": "e6ea",
573
+      "unicode_decimal": 59114
574
+    },
575
+    {
576
+      "icon_id": "3086025",
577
+      "name": "二维码",
578
+      "font_class": "erweima",
579
+      "unicode": "e606",
580
+      "unicode_decimal": 58886
581
+    },
582
+    {
583
+      "icon_id": "7489416",
584
+      "name": "超时",
585
+      "font_class": "chaoshi",
586
+      "unicode": "e63b",
587
+      "unicode_decimal": 58939
588
+    },
589
+    {
590
+      "icon_id": "9016785",
591
+      "name": "关 闭",
592
+      "font_class": "guanbi1",
593
+      "unicode": "e658",
594
+      "unicode_decimal": 58968
595
+    },
596
+    {
597
+      "icon_id": "10836451",
598
+      "name": "铃铛",
599
+      "font_class": "lingdang",
600
+      "unicode": "e60d",
601
+      "unicode_decimal": 58893
602
+    },
603
+    {
604
+      "icon_id": "15486827",
605
+      "name": "喇叭 (1)",
606
+      "font_class": "laba1",
607
+      "unicode": "e681",
608
+      "unicode_decimal": 59009
609
+    },
610
+    {
611
+      "icon_id": "492723",
612
+      "name": "喇叭",
613
+      "font_class": "iconfontcrmtubiao68",
614
+      "unicode": "e61f",
615
+      "unicode_decimal": 58911
616
+    },
617
+    {
618
+      "icon_id": "3136914",
619
+      "name": "切换",
620
+      "font_class": "qiehuan",
621
+      "unicode": "e63c",
622
+      "unicode_decimal": 58940
623
+    },
624
+    {
625
+      "icon_id": "4880388",
626
+      "name": "对勾",
627
+      "font_class": "duigou1",
628
+      "unicode": "e618",
629
+      "unicode_decimal": 58904
630
+    },
631
+    {
632
+      "icon_id": "8436465",
633
+      "name": "实时监控_轮巡",
634
+      "font_class": "shishijiankong_lunxun",
635
+      "unicode": "e641",
636
+      "unicode_decimal": 58945
637
+    },
638
+    {
639
+      "icon_id": "13254797",
640
+      "name": "重点关注",
641
+      "font_class": "zhongdianguanzhu",
642
+      "unicode": "e607",
643
+      "unicode_decimal": 58887
644
+    },
645
+    {
646
+      "icon_id": "1134075",
647
+      "name": "垃圾桶",
648
+      "font_class": "lajitong",
649
+      "unicode": "e631",
650
+      "unicode_decimal": 58929
651
+    },
652
+    {
653
+      "icon_id": "10161192",
654
+      "name": "危",
655
+      "font_class": "tubiao_wei",
656
+      "unicode": "e6b4",
657
+      "unicode_decimal": 59060
658
+    },
659
+    {
660
+      "icon_id": "10424403",
661
+      "name": "重",
662
+      "font_class": "zhong",
663
+      "unicode": "e69f",
664
+      "unicode_decimal": 59039
665
+    },
666
+    {
667
+      "icon_id": "15531892",
668
+      "name": "1_round_solid_数字1_by_climei",
669
+      "font_class": "1_round_solid",
670
+      "unicode": "e64e",
671
+      "unicode_decimal": 58958
672
+    },
673
+    {
674
+      "icon_id": "15531898",
675
+      "name": "2_round_solid_数字2_by_climei",
676
+      "font_class": "2_round_solid",
677
+      "unicode": "e64f",
678
+      "unicode_decimal": 58959
679
+    },
680
+    {
681
+      "icon_id": "15531901",
682
+      "name": "3_round_solid_数字3_by_climei",
683
+      "font_class": "3_round_solid",
684
+      "unicode": "e652",
685
+      "unicode_decimal": 58962
686
+    }
687
+  ]
688
+}

BIN
static/font/iconfont.ttf


BIN
static/font/iconfont.woff


BIN
static/font/iconfont.woff2


BIN
static/img/BG.png


BIN
static/img/BG_xiaban.png


BIN
static/img/icon_shandian.png


BIN
static/img/zanwushuju.png


BIN
static/logo.png


+ 374 - 0
tools/photograph.js

@@ -0,0 +1,374 @@
1
+import {
2
+  get,
3
+  post
4
+} from "./../http/http.js";
5
+const pathUrl = uni.getStorageSync('path');
6
+export function photographTool(data, deptObj) {
7
+  console.log(data, deptObj, 1111);
8
+  let id_seimin;
9
+  let asTypeValue_seimin;
10
+  let gdStateValue_seimin;
11
+  if (data.status != 200 && data.status !== undefined) {
12
+    id_seimin = data.id;
13
+    asTypeValue_seimin = data.type;
14
+    gdStateValue_seimin = JSON.parse(data.model).gdstate2; //type改成gdstate
15
+  } else {
16
+    id_seimin = data.id;
17
+    asTypeValue_seimin = data.taskType.associationType.value;
18
+    gdStateValue_seimin = data.gdState.value;
19
+  }
20
+  //#ifdef H5
21
+  uni.chooseImage({
22
+    sourceType: ['camera'],
23
+    success: (chooseImageRes) => {
24
+      console.log(chooseImageRes, pathUrl)
25
+      const tempFilePaths = chooseImageRes.tempFilePaths;
26
+      const tempFiles = chooseImageRes.tempFiles;
27
+      let tp = tempFilePaths[0];
28
+      uni.showLoading({
29
+        title: '上传中'
30
+      });
31
+      post('/workerOrder/findPatientCodeByWorkOrderId', {
32
+        WorkOrderId: id_seimin
33
+      }).then(result => {
34
+        console.log(result)
35
+        if (result.state == 200) {
36
+          uni.getImageInfo({
37
+            src: tp,
38
+            success(res) {
39
+              console.log('压缩前', res)
40
+              let canvasWidth = res.width //图片原始长宽
41
+              let canvasHeight = res.height
42
+              let img = new Image()
43
+              img.src = res.path
44
+              let canvas = document.createElement('canvas');
45
+              let ctx = canvas.getContext('2d')
46
+              canvas.width = canvasWidth
47
+              canvas.height = canvasHeight
48
+              ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight)
49
+              canvas.toBlob(function (fileSrc) {
50
+                tp = window.URL.createObjectURL(fileSrc)
51
+                console.log('压缩后', tp);
52
+                uni.uploadFile({
53
+                  url: pathUrl + '/common/common/uploadAttachment/inspectAndPatient/' + id_seimin + '/' + result.recordId,
54
+                  filePath: tp,
55
+                  name: 'file',
56
+                  formData: {
57
+                    'filename': tempFiles[0].name ? tempFiles[0].name.split('.')[0] + '.jpg' : tempFiles[
58
+                      0].path.split(
59
+                        /[\\/]/).reverse()[0].split('.')[0] + '.jpg'
60
+                  },
61
+                  success: (uploadFileRes) => {
62
+                    console.log(uploadFileRes, 10086, asTypeValue_seimin);
63
+                    if (asTypeValue_seimin === "patientTransport") {
64
+                      // 转运,扫描患者腕带码
65
+                      if (gdStateValue_seimin == 4) { //转运待到达
66
+                        post('/workerOrder/handleTrans', {
67
+                          "code": result.patientCode,
68
+                          "ids": [id_seimin]
69
+                        }).then(result1 => {
70
+                          console.log(result1);
71
+                          uni.hideLoading();
72
+                          if (result1.status == 200) {
73
+                            uni.showToast({
74
+                              title: '上传成功',
75
+                              duration: 2000
76
+                            });
77
+                            // 小扫描
78
+                            uni.navigateTo({
79
+                              url: `../scanning_Result/scanning_Result?type=${asTypeValue_seimin
80
+                                }&type1=${result1.type}&id=${id_seimin}&deptCode=${result.patientCode
81
+                                }&patient=${result1.patient}&patientCode=${result1.patientCode
82
+                                }&deptName=${result1.deptName}&bedNum=${result1.bedNum
83
+                                }&status=${result1.status}&msg=${result1.msg
84
+                                }&model=${encodeURIComponent(JSON.stringify(result1))}`,
85
+                            });
86
+                          } else {
87
+                            uni.showToast({
88
+                              icon: "none",
89
+                              title: "请求失败!",
90
+                            });
91
+                          }
92
+                        })
93
+                      } else if (gdStateValue_seimin == 5) { //转运待送达
94
+                        post('/workerOrder/handleTrans', {
95
+                          "code": result.patientCode,
96
+                          "ids": [id_seimin],
97
+                          "type": deptObj.infoType,
98
+                          "deptCode": deptObj.DEPTCode,
99
+                        }).then(result1 => {
100
+                          console.log(result1);
101
+                          uni.hideLoading();
102
+                          if (result1.status == 200) {
103
+                            uni.showToast({
104
+                              title: '上传成功',
105
+                              duration: 2000
106
+                            });
107
+                            // 小扫描
108
+                            uni.navigateTo({
109
+                              url: `../scanning_Result/scanning_Result?type=${asTypeValue_seimin}&type1=${result1.type1}&infoData=${encodeURIComponent(JSON.stringify(result1.data))}&status=${result1.status}&msg=${result1.msg}&patient=${result1.patient}&patientCode=${result1.patientCode}&deptName=${result1.deptName}&bedNum=${result1.bedNum}&deptCode=${deptObj.DEPTCode}&dept=${deptObj.DEPT}&id=${id_seimin}&model=${encodeURIComponent(JSON.stringify(result1))}`
110
+                            });
111
+                          } else {
112
+                            uni.showToast({
113
+                              icon: "none",
114
+                              title: "请求失败!",
115
+                            });
116
+                          }
117
+                        })
118
+                      }
119
+
120
+                    } else if (asTypeValue_seimin === "inspect") {
121
+                      // 陪检,扫描患者腕带码
122
+                      if (gdStateValue_seimin == 4) { //陪检待到达
123
+                        console.log('怎么了')
124
+                        post('/workerOrder/handleIns', {
125
+                          "code": result.patientCode,
126
+                          "ids": [id_seimin]
127
+                        }).then(result1 => {
128
+                          console.log(result1);
129
+                          uni.hideLoading();
130
+                          if (result1.status == 200) {
131
+                            uni.showToast({
132
+                              title: '上传成功',
133
+                              duration: 2000
134
+                            });
135
+                            // 小扫描
136
+                            uni.navigateTo({
137
+                              url: `../scanning_Result/scanning_Result?type=${asTypeValue_seimin
138
+                                }&type1=${result1.type}&id=${id_seimin}&deptCode=${result.patientCode
139
+                                }&patient=${result1.patient}&patientCode=${result1.patientCode
140
+                                }&deptName=${result1.deptName}&bedNum=${result1.bedNum
141
+                                }&status=${result1.status}&msg=${result1.msg
142
+                                }&model=${encodeURIComponent(JSON.stringify(result1))}`,
143
+                            });
144
+                          } else {
145
+                            uni.showToast({
146
+                              icon: "none",
147
+                              title: "请求失败!",
148
+                            });
149
+                          }
150
+                        })
151
+                      } else if (gdStateValue_seimin == 5 || gdStateValue_seimin == 8) { //陪检待送达,执行中
152
+                        post('/workerOrder/handleIns', {
153
+                          "code": result.patientCode,
154
+                          "ids": [id_seimin],
155
+                          "type": deptObj.infoType,
156
+                          "deptCode": deptObj.DEPTCode,
157
+                        }).then(result1 => {
158
+                          console.log(result1);
159
+                          uni.hideLoading();
160
+                          if (result1.status == 200) {
161
+                            uni.showToast({
162
+                              title: '上传成功',
163
+                              duration: 2000
164
+                            });
165
+                            // 小扫描
166
+                            uni.navigateTo({
167
+                              url: `../scanning_Result/scanning_Result?type=${asTypeValue_seimin}&type1=${result1.type1}&infoData=${encodeURIComponent(JSON.stringify(result1.data))}&status=${result1.status}&msg=${result1.msg}&patient=${result1.patient}&patientCode=${result1.patientCode}&deptName=${result1.deptName}&bedNum=${result1.bedNum}&deptCode=${deptObj.DEPTCode}&dept=${deptObj.DEPT}&id=${id_seimin}&model=${encodeURIComponent(JSON.stringify(result1))}`
168
+                            });
169
+                          } else {
170
+                            uni.showToast({
171
+                              icon: "none",
172
+                              title: "请求失败!",
173
+                            });
174
+                          }
175
+                        })
176
+                      }
177
+                    }
178
+                  },
179
+                  fail: err => {
180
+                    console.error(err);
181
+                    uni.hideLoading();
182
+                    uni.showToast({
183
+                      icon: 'none',
184
+                      title: '上传失败',
185
+                      duration: 2000
186
+                    });
187
+                  }
188
+                });
189
+              }, 'image/jpeg', 0.3)
190
+            },
191
+            fail: function () {
192
+              uni.hideLoading();
193
+              uni.showToast({
194
+                icon: 'none',
195
+                title: '上传失败',
196
+                duration: 2000
197
+              });
198
+            }
199
+          })
200
+        } else {
201
+          uni.showToast({
202
+            icon: "none",
203
+            title: "请求失败!",
204
+          });
205
+        }
206
+      })
207
+    }
208
+  });
209
+  //#endif
210
+  // #ifdef APP-PLUS
211
+  uni.chooseImage({
212
+    sourceType: ['camera'],
213
+    sizeType: ['compressed'],
214
+    success: (chooseImageRes) => {
215
+      console.log(chooseImageRes, pathUrl)
216
+      const tempFilePaths = chooseImageRes.tempFilePaths;
217
+      const tempFiles = chooseImageRes.tempFiles;
218
+      let tp = tempFilePaths[0];
219
+      uni.showLoading({
220
+        title: '上传中'
221
+      });
222
+      post('/workerOrder/findPatientCodeByWorkOrderId', {
223
+        WorkOrderId: id_seimin
224
+      }).then(result => {
225
+        console.log(result)
226
+        if (result.state == 200) {
227
+          uni.uploadFile({
228
+            url: pathUrl + '/common/common/uploadAttachment/inspectAndPatient/' + id_seimin + '/' + result.recordId,
229
+            filePath: tp,
230
+            name: 'file',
231
+            formData: {
232
+              'filename': tempFiles[0].name ? tempFiles[0].name.split('.')[0] + '.jpg' : tempFiles[0].path
233
+                .split(
234
+                  /[\\/]/).reverse()[0].split('.')[0] + '.jpg'
235
+            },
236
+            success: (uploadFileRes) => {
237
+              console.log(uploadFileRes, 10086, asTypeValue_seimin);
238
+              if (asTypeValue_seimin === "patientTransport") {
239
+                // 转运,扫描患者腕带码
240
+                if (gdStateValue_seimin == 4) { //转运待到达
241
+                  post('/workerOrder/handleTrans', {
242
+                    "code": result.patientCode,
243
+                    "ids": [id_seimin]
244
+                  }).then(result1 => {
245
+                    console.log(result1);
246
+                    uni.hideLoading();
247
+                    if (result1.status == 200) {
248
+                      uni.showToast({
249
+                        title: '上传成功',
250
+                        duration: 2000
251
+                      });
252
+                      // 小扫描
253
+                      uni.navigateTo({
254
+                        url: `../scanning_Result/scanning_Result?type=${asTypeValue_seimin
255
+                          }&type1=${result1.type}&id=${id_seimin}&deptCode=${result.patientCode
256
+                          }&patient=${result1.patient}&patientCode=${result1.patientCode
257
+                          }&deptName=${result1.deptName}&bedNum=${result1.bedNum
258
+                          }&status=${result1.status}&msg=${result1.msg
259
+                          }&model=${encodeURIComponent(JSON.stringify(result1))}`,
260
+                      });
261
+                    } else {
262
+                      uni.showToast({
263
+                        icon: "none",
264
+                        title: "请求失败!",
265
+                      });
266
+                    }
267
+                  })
268
+                } else if (gdStateValue_seimin == 5) { //转运待送达
269
+                  post('/workerOrder/handleTrans', {
270
+                    "code": result.patientCode,
271
+                    "ids": [id_seimin],
272
+                    "type": deptObj.infoType,
273
+                    "deptCode": deptObj.DEPTCode,
274
+                  }).then(result1 => {
275
+                    console.log(result1);
276
+                    uni.hideLoading();
277
+                    if (result1.status == 200) {
278
+                      uni.showToast({
279
+                        title: '上传成功',
280
+                        duration: 2000
281
+                      });
282
+                      // 小扫描
283
+                      uni.navigateTo({
284
+                        url: `../scanning_Result/scanning_Result?type=${asTypeValue_seimin}&type1=${result1.type1}&infoData=${encodeURIComponent(JSON.stringify(result1.data))}&status=${result1.status}&msg=${result1.msg}&patient=${result1.patient}&patientCode=${result1.patientCode}&deptName=${result1.deptName}&bedNum=${result1.bedNum}&deptCode=${deptObj.DEPTCode}&dept=${deptObj.DEPT}&id=${id_seimin}&model=${encodeURIComponent(JSON.stringify(result1))}`
285
+                      });
286
+                    } else {
287
+                      uni.showToast({
288
+                        icon: "none",
289
+                        title: "请求失败!",
290
+                      });
291
+                    }
292
+                  })
293
+                }
294
+
295
+              } else if (asTypeValue_seimin === "inspect") {
296
+                // 陪检,扫描患者腕带码
297
+                if (gdStateValue_seimin == 4) { //陪检待到达
298
+                  console.log('怎么了')
299
+                  post('/workerOrder/handleIns', {
300
+                    "code": result.patientCode,
301
+                    "ids": [id_seimin]
302
+                  }).then(result1 => {
303
+                    console.log(result1);
304
+                    uni.hideLoading();
305
+                    if (result1.status == 200) {
306
+                      uni.showToast({
307
+                        title: '上传成功',
308
+                        duration: 2000
309
+                      });
310
+                      // 小扫描
311
+                      uni.navigateTo({
312
+                        url: `../scanning_Result/scanning_Result?type=${asTypeValue_seimin
313
+                          }&type1=${result1.type}&id=${id_seimin}&deptCode=${result.patientCode
314
+                          }&patient=${result1.patient}&patientCode=${result1.patientCode
315
+                          }&deptName=${result1.deptName}&bedNum=${result1.bedNum
316
+                          }&status=${result1.status}&msg=${result1.msg
317
+                          }&model=${encodeURIComponent(JSON.stringify(result1))}`,
318
+                      });
319
+                    } else {
320
+                      uni.showToast({
321
+                        icon: "none",
322
+                        title: "请求失败!",
323
+                      });
324
+                    }
325
+                  })
326
+                } else if (gdStateValue_seimin == 5 || gdStateValue_seimin == 8) { //陪检待送达,执行中
327
+                  post('/workerOrder/handleIns', {
328
+                    "code": result.patientCode,
329
+                    "ids": [id_seimin],
330
+                    "type": deptObj.infoType,
331
+                    "deptCode": deptObj.DEPTCode,
332
+                  }).then(result1 => {
333
+                    console.log(result1);
334
+                    uni.hideLoading();
335
+                    if (result1.status == 200) {
336
+                      uni.showToast({
337
+                        title: '上传成功',
338
+                        duration: 2000
339
+                      });
340
+                      // 小扫描
341
+                      uni.navigateTo({
342
+                        url: `../scanning_Result/scanning_Result?type=${asTypeValue_seimin}&type1=${result1.type1}&infoData=${encodeURIComponent(JSON.stringify(result1.data))}&status=${result1.status}&msg=${result1.msg}&patient=${result1.patient}&patientCode=${result1.patientCode}&deptName=${result1.deptName}&bedNum=${result1.bedNum}&deptCode=${deptObj.DEPTCode}&dept=${deptObj.DEPT}&id=${id_seimin}&model=${encodeURIComponent(JSON.stringify(result1))}`
343
+                      });
344
+                    } else {
345
+                      uni.showToast({
346
+                        icon: "none",
347
+                        title: "请求失败!",
348
+                      });
349
+                    }
350
+                  })
351
+                }
352
+              }
353
+            },
354
+            fail: err => {
355
+              console.error(err);
356
+              uni.hideLoading();
357
+              uni.showToast({
358
+                icon: 'none',
359
+                title: '上传失败',
360
+                duration: 2000
361
+              });
362
+            }
363
+          });
364
+        } else {
365
+          uni.showToast({
366
+            icon: "none",
367
+            title: "请求失败!",
368
+          });
369
+        }
370
+      })
371
+    }
372
+  });
373
+  // #endif
374
+}

+ 76 - 0
uni.scss

@@ -0,0 +1,76 @@
1
+/**
2
+ * 这里是uni-app内置的常用样式变量
3
+ *
4
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
5
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
6
+ *
7
+ */
8
+
9
+/**
10
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
11
+ *
12
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
13
+ */
14
+
15
+/* 颜色变量 */
16
+
17
+/* 行为相关颜色 */
18
+$uni-color-primary: #007aff;
19
+$uni-color-success: #4cd964;
20
+$uni-color-warning: #f0ad4e;
21
+$uni-color-error: #dd524d;
22
+
23
+/* 文字基本颜色 */
24
+$uni-text-color:#333;//基本色
25
+$uni-text-color-inverse:#fff;//反色
26
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
27
+$uni-text-color-placeholder: #808080;
28
+$uni-text-color-disable:#c0c0c0;
29
+
30
+/* 背景颜色 */
31
+$uni-bg-color:#ffffff;
32
+$uni-bg-color-grey:#f8f8f8;
33
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
34
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
35
+
36
+/* 边框颜色 */
37
+$uni-border-color:#c8c7cc;
38
+
39
+/* 尺寸变量 */
40
+
41
+/* 文字尺寸 */
42
+$uni-font-size-sm:24rpx;
43
+$uni-font-size-base:28rpx;
44
+$uni-font-size-lg:32rpx;
45
+
46
+/* 图片尺寸 */
47
+$uni-img-size-sm:40rpx;
48
+$uni-img-size-base:52rpx;
49
+$uni-img-size-lg:80rpx;
50
+
51
+/* Border Radius */
52
+$uni-border-radius-sm: 4rpx;
53
+$uni-border-radius-base: 6rpx;
54
+$uni-border-radius-lg: 12rpx;
55
+$uni-border-radius-circle: 50%;
56
+
57
+/* 水平间距 */
58
+$uni-spacing-row-sm: 10px;
59
+$uni-spacing-row-base: 20rpx;
60
+$uni-spacing-row-lg: 30rpx;
61
+
62
+/* 垂直间距 */
63
+$uni-spacing-col-sm: 8rpx;
64
+$uni-spacing-col-base: 16rpx;
65
+$uni-spacing-col-lg: 24rpx;
66
+
67
+/* 透明度 */
68
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
69
+
70
+/* 文章场景相关 */
71
+$uni-color-title: #2C405A; // 文章标题颜色
72
+$uni-font-size-title:40rpx;
73
+$uni-color-subtitle: #555555; // 二级标题颜色
74
+$uni-font-size-subtitle:36rpx;
75
+$uni-color-paragraph: #3F536E; // 文章段落颜色
76
+$uni-font-size-paragraph:30rpx;