瀏覽代碼

工单列表

seimin 2 年之前
父節點
當前提交
1fa60a79be

+ 1 - 1
.vscode/settings.json

@@ -1,5 +1,5 @@
1 1
 {
2
-  "editor.formatOnSave": true,
2
+  "editor.formatOnSave": false,
3 3
   "[vue]": {
4 4
     "editor.defaultFormatter": "esbenp.prettier-vscode"
5 5
   },

+ 120 - 4
components/seiminModel/seiminModel.vue

@@ -9,7 +9,7 @@
9 9
   <view class="seiminModel seiminModel_mask" v-if="opts.isVisible">
10 10
     <view class="seiminModel_container animate__animated animate__fadeIn animate__faster">
11 11
       <!-- 标题 -->
12
-      <view class="seiminModel_header">
12
+      <view class="seiminModel_header" :class="{noTitle:!opts.title}">
13 13
         <text>{{ opts.title }}</text>
14 14
         <text class="seiminModel_countDown" v-if="
15 15
             nurseDeptSwitchTip < 0 || (nurseDeptSwitchTip > 0 && closeTime > 0)
@@ -25,11 +25,35 @@
25 25
           <view>{{ refreshQRCodeTime }}s</view>
26 26
         </view>
27 27
       </view>
28
+      <!-- 加急 -->
29
+      <view class="seiminModel_content urgent" v-else-if="opts.skin === 'urgent'">
30
+        <view class="urgent_txt" v-html="opts.content"></view>
31
+        <textarea :focus="true" class="urgent_textarea" auto-height :maxlength="100"
32
+          :placeholder-style="placeholderStyle" placeholder="请填写加急原因" v-model="urgentTextArea" />
33
+      </view>
34
+      <!-- 评价 -->
35
+      <view class="seiminModel_content evaluate" v-else-if="opts.skin === 'evaluate'">
36
+        <view class="evaluate_txt" v-html="opts.content"></view>
37
+        <view class="evaluate_list">
38
+          <view class="evaluate_item">
39
+            <text class="evaluate_label">星级:</text>
40
+            <view class="evaluate_icons">
41
+              <text class="pda" :class="star" v-for="(star,i) in stars" :key="i"></text>
42
+            </view>
43
+          </view>
44
+          <view class="evaluate_item">
45
+            <text class="evaluate_label">评级:</text>
46
+            <textarea :focus="true" class="evaluate_textarea" auto-height :maxlength="100"
47
+              :placeholder-style="placeholderStyle" placeholder="请输入..." v-model="urgentTextArea" />
48
+          </view>
49
+        </view>
50
+      </view>
28 51
       <!-- 正常弹窗 -->
29 52
       <view class="seiminModel_content" v-else>
30 53
         <!-- 图标 -->
31 54
         <view class="seiminModel_status">
32 55
           <text class="pda pda-shibai red" v-if="opts.icon === 'error'"></text>
56
+          <text class="pda pda-wenhao yellow" v-if="opts.icon === 'warn'"></text>
33 57
           <text class="pda pda-duigou green" v-if="opts.icon === 'success'"></text>
34 58
         </view>
35 59
         <!-- 内容 -->
@@ -71,6 +95,12 @@
71 95
         closeTime: 0,
72 96
         // 护士科室切换提示自动关闭设置(定时器,单位秒)
73 97
         timerCloseTime: null,
98
+        // 加急原因
99
+        urgentTextArea: '',
100
+        // 加急原因的placeholder样式
101
+        placeholderStyle: 'color:#999;padding:18rpx;',
102
+        // 星级
103
+        stars: [],
74 104
       };
75 105
     },
76 106
     computed: {
@@ -80,12 +110,13 @@
80 110
     methods: {
81 111
       // 显示弹窗
82 112
       show(args = {}) {
113
+        this.stars = ['pda-haoping','pda-haoping','pda-haoping','pda-haoping','pda-haoping']
83 114
         // 默认配置项
84 115
         let defaultOptions = {
85 116
           skin: "default", //弹窗风格(default|toast|qrcode|)
86 117
           isVisible: false, //是否显示弹窗
87 118
           title: "提示", //标题
88
-          icon: "success", //图标(success|error|)
119
+          icon: "success", //图标(success|error|warn|)
89 120
           content: "", //内容
90 121
           btns: [{
91 122
               name: "取消",
@@ -94,8 +125,8 @@
94 125
               click: this.close,
95 126
             },
96 127
             {
97
-              name: "确",
98
-              textColor: "#666",
128
+              name: "确",
129
+              textColor: "#49B856",
99 130
               flex: 1,
100 131
               click: this.close,
101 132
             },
@@ -227,6 +258,10 @@
227 258
           position: relative;
228 259
           @include flex(center, center);
229 260
 
261
+          &.noTitle {
262
+            height: 40rpx;
263
+          }
264
+
230 265
           .seiminModel_countDown {
231 266
             position: absolute;
232 267
             right: 26rpx;
@@ -244,6 +279,7 @@
244 279
           padding: 76rpx 24rpx;
245 280
           @include numbersAndLettersNoWrap;
246 281
 
282
+          // 动态二维码
247 283
           &.qrcode {
248 284
             padding: 24rpx;
249 285
             font-size: 32rpx;
@@ -257,6 +293,86 @@
257 293
               }
258 294
             }
259 295
           }
296
+
297
+          // 加急
298
+          &.urgent {
299
+            padding: 0;
300
+
301
+            .urgent_txt {
302
+              font-size: 28rpx;
303
+              color: #666;
304
+              line-height: 40rpx;
305
+              border-bottom: 2rpx solid #E5E9ED;
306
+              padding: 24rpx;
307
+            }
308
+
309
+            .urgent_textarea {
310
+              width: 440rpx;
311
+              margin: 24rpx;
312
+              min-height: 212rpx;
313
+              background: #FFFFFF;
314
+              border-radius: 2rpx;
315
+              border: 2rpx solid #E5E9ED;
316
+              text-align: left;
317
+
318
+              ::v-deep .uni-textarea-textarea {
319
+                padding: 18rpx;
320
+              }
321
+            }
322
+          }
323
+
324
+          // 评价
325
+          &.evaluate {
326
+            padding: 0;
327
+
328
+            .evaluate_txt {
329
+              font-size: 28rpx;
330
+              color: #666;
331
+              line-height: 40rpx;
332
+              border-bottom: 2rpx solid #E5E9ED;
333
+              padding: 24rpx 0;
334
+            }
335
+
336
+            .evaluate_list {
337
+              padding: 20rpx 34rpx;
338
+
339
+              .evaluate_item {
340
+                font-size: 34rpx;
341
+                color: #666;
342
+                margin-top: 10rpx;
343
+                @include flex;
344
+
345
+                .evaluate_label {}
346
+
347
+                .evaluate_icons {
348
+                  flex: 1;
349
+                  @include flex;
350
+
351
+                  .pda {
352
+                    font-size: 40rpx;
353
+                    margin-right: 10rpx;
354
+
355
+                    &.pda-haoping {
356
+                      color: $defaultColor;
357
+                    }
358
+                  }
359
+                }
360
+
361
+                .evaluate_textarea {
362
+                  flex: 1;
363
+                  min-height: 212rpx;
364
+                  background: #FFFFFF;
365
+                  border-radius: 2rpx;
366
+                  border: 2rpx solid #E5E9ED;
367
+                  text-align: left;
368
+
369
+                  ::v-deep .uni-textarea-textarea {
370
+                    padding: 18rpx;
371
+                  }
372
+                }
373
+              }
374
+            }
375
+          }
260 376
         }
261 377
 
262 378
         .seiminModel_footer {

+ 1 - 1
components/seiminPicker/seiminPicker.vue

@@ -2,7 +2,7 @@
2 2
   <view class="seiminPicker">
3 3
     <view class="picker-modal" v-if="showPicker" @click="_close"></view>
4 4
     <view class="picker-content" :style="{transform:  showPicker ? 'translateY(0)' : 'translateY(100%)'}">
5
-      <view class="picker-header">
5
+      <view class="picker-header" v-if="title">
6 6
         <view class="packer-title" :style="{color:titleColor, fontSize:titleFontSize}" v-html="title"></view>
7 7
       </view>
8 8
       <picker-view indicator-style="height: 90rpx;" class="picker-view" :value="pickerValue" @change="changePicker">

+ 25 - 12
pages/index/index.vue

@@ -42,6 +42,10 @@
42 42
           <text class="newOrders_header_more" @click="goToMore">更多&gt;&gt;</text>
43 43
         </view>
44 44
         <view class="newOrders_item" v-for="newOrder in newOrderList" :key="newOrder.id">
45
+          <image class="ji" src="../../static/imgs/icon_ji.png" mode="widthFix"
46
+            v-if="newOrder.emergencyType && newOrder.emergencyType.value == 2"></image>
47
+          <image class="jiaji" src="../../static/imgs/icon_jiaji.png" mode="widthFix"
48
+            v-if="newOrder.emergencyType && newOrder.emergencyType.value == 3"></image>
45 49
           <view class="newOrders_item_time" v-if="newOrder.showCreateTime">{{ newOrder.showCreateTime }}</view>
46 50
           <view class="newOrders_item_time" v-else-if="newOrder.yyjdTime && newOrder.gdState.value == 11">
47 51
             {{newOrder.yyjdTime | formatDate('MM-dd HH:mm')}}
@@ -183,7 +187,7 @@
183 187
             this.ordinaryNum = res.specimenCount.noUrgent;
184 188
           }
185 189
         } else {
186
-          this.$refs.seiminModel.showChangeDept({
190
+          this.$refs.seiminModel.show({
187 191
             skin: "toast",
188 192
             icon: "error",
189 193
             content: res.msg || "获取数据失败",
@@ -226,7 +230,7 @@
226 230
             return v;
227 231
           });
228 232
         } else {
229
-          this.$refs.seiminModel.showChangeDept({
233
+          this.$refs.seiminModel.show({
230 234
             skin: "toast",
231 235
             icon: "error",
232 236
             content: res.msg || "获取数据失败",
@@ -253,7 +257,7 @@
253 257
           );
254 258
           this.specimenTaskTypeId = specimenTaskType && specimenTaskType.id;
255 259
         } else {
256
-          this.$refs.seiminModel.showChangeDept({
260
+          this.$refs.seiminModel.show({
257 261
             skin: "toast",
258 262
             icon: "error",
259 263
             content: res.msg || "获取数据失败",
@@ -277,7 +281,7 @@
277 281
           res.list = res.list || [];
278 282
           res.list[0] = res.list[0] || {};
279 283
           if (!res.list[0].id) {
280
-            this.$refs.seiminModel.showChangeDept({
284
+            this.$refs.seiminModel.show({
281 285
               skin: "toast",
282 286
               icon: "error",
283 287
               content: "无法获取到【护士端科室显示选择】配置,请前往配置",
@@ -286,7 +290,7 @@
286 290
           }
287 291
           this.changeDeptDisplay(res.list[0].valueconfig);
288 292
         } else {
289
-          this.$refs.seiminModel.showChangeDept({
293
+          this.$refs.seiminModel.show({
290 294
             skin: "toast",
291 295
             icon: "error",
292 296
             content: res.msg || "无法获取到【护士端科室显示选择】配置,请前往配置",
@@ -310,7 +314,7 @@
310 314
           res.list = res.list || [];
311 315
           res.list[0] = res.list[0] || {};
312 316
           if (!res.list[0].id) {
313
-            this.$refs.seiminModel.showChangeDept({
317
+            this.$refs.seiminModel.show({
314 318
               skin: "toast",
315 319
               icon: "error",
316 320
               content: "无法获取到【护士端更新提示】配置,请前往配置",
@@ -319,7 +323,7 @@
319 323
           }
320 324
           this.changeUpdateTipsForNurses(res.list[0].valueconfig);
321 325
         } else {
322
-          this.$refs.seiminModel.showChangeDept({
326
+          this.$refs.seiminModel.show({
323 327
             skin: "toast",
324 328
             icon: "error",
325 329
             content: res.msg || "无法获取到【护士端更新提示】配置,请前往配置",
@@ -343,7 +347,7 @@
343 347
           res.list = res.list || [];
344 348
           res.list[0] = res.list[0] || {};
345 349
           if (!res.list[0].id) {
346
-            this.$refs.seiminModel.showChangeDept({
350
+            this.$refs.seiminModel.show({
347 351
               skin: "toast",
348 352
               icon: "error",
349 353
               content: "无法获取到【标本按钮文字】配置,请前往配置",
@@ -352,7 +356,7 @@
352 356
           }
353 357
           this.changeSpecimenButton(res.list[0].valueconfig);
354 358
         } else {
355
-          this.$refs.seiminModel.showChangeDept({
359
+          this.$refs.seiminModel.show({
356 360
             skin: "toast",
357 361
             icon: "error",
358 362
             content: res.msg || "无法获取到【标本按钮文字】配置,请前往配置",
@@ -376,7 +380,7 @@
376 380
           res.list = res.list || [];
377 381
           res.list[0] = res.list[0] || {};
378 382
           if (!res.list[0].id) {
379
-            this.$refs.seiminModel.showChangeDept({
383
+            this.$refs.seiminModel.show({
380 384
               skin: "toast",
381 385
               icon: "error",
382 386
               content: "无法获取到【护士科室切换提示自动关闭设置】配置,请前往配置",
@@ -385,7 +389,7 @@
385 389
           }
386 390
           this.changeNurseDeptSwitchTip(res.list[0].valueconfig);
387 391
         } else {
388
-          this.$refs.seiminModel.showChangeDept({
392
+          this.$refs.seiminModel.show({
389 393
             skin: "toast",
390 394
             icon: "error",
391 395
             content: res.msg || "无法获取到【护士科室切换提示自动关闭设置】配置,请前往配置",
@@ -396,7 +400,7 @@
396 400
       // 一键收取标本
397 401
       collectSpecimens() {
398 402
         if (!this.specimenTaskTypeId) {
399
-          this.$refs.seiminModel.showChangeDept({
403
+          this.$refs.seiminModel.show({
400 404
             skin: "toast",
401 405
             icon: "error",
402 406
             content: "无法获取到临时标本业务",
@@ -650,8 +654,17 @@
650 654
           border-bottom: 1px solid #e5e9ed;
651 655
           color: #333;
652 656
           font-size: 30rpx;
657
+          position: relative;
653 658
           @include flex(center, center);
654 659
 
660
+          .ji,
661
+          .jiaji {
662
+            width: 60rpx;
663
+            position: absolute;
664
+            right: 0;
665
+            top: 0;
666
+          }
667
+
655 668
           &:last-of-type {
656 669
             border-bottom: none;
657 670
           }

+ 1 - 1
pages/login/login.vue

@@ -124,7 +124,7 @@
124 124
 						});
125 125
 						this.changeSeiminModel(true);
126 126
 					} else {
127
-						this.$refs.seiminModel.showChangeDept({
127
+						this.$refs.seiminModel.show({
128 128
 							skin: "toast",
129 129
 							icon: "error",
130 130
 							content: res.remarks || "登录失败",

+ 256 - 16
pages/orderList/orderList.vue

@@ -14,6 +14,10 @@
14 14
     <!-- 列表 -->
15 15
     <view class="orderList_list">
16 16
       <view class="orderList_listItem" v-for="newOrder in newOrderList" :key="newOrder.id">
17
+        <image class="ji" src="../../static/imgs/icon_ji.png" mode="widthFix"
18
+          v-if="newOrder.emergencyType && newOrder.emergencyType.value == 2"></image>
19
+        <image class="jiaji" src="../../static/imgs/icon_jiaji.png" mode="widthFix"
20
+          v-if="newOrder.emergencyType && newOrder.emergencyType.value == 3"></image>
17 21
         <view class="orderList_listItem_header">
18 22
           <view class="orderList_listItem_header_title">
19 23
             <view class="associationType_icon" v-if="newOrder.isHalfInspect === 1"> 半 </view>
@@ -47,11 +51,31 @@
47 51
             <text class="orderList_listItem_item_name" v-else>暂未接单</text>
48 52
             <text class="orderList_listItem_item_time" v-if="newOrder.showCreateTime">{{newOrder.showCreateTime}}</text>
49 53
             <text class="orderList_listItem_item_time"
50
-              v-else-if="newOrder.yyjdTime && newOrder.gdState.value == 11">{{newOrder.yyjdTime | formatDate('MM-dd HH:mm')}}</text>
54
+              v-else-if="newOrder.yyjdTime && newOrder.gdState.value == GDSTATE['定时预约']">{{newOrder.yyjdTime | formatDate('MM-dd HH:mm')}}</text>
51 55
           </view>
52
-          <view class="orderList_listItem_item_btns">
53
-            <button type="primary" class="btn">撤销</button>
54
-            <button type="primary" class="btn">加急</button>
56
+          <view class="orderList_listItem_item_btns" v-if="
57
+          newOrder.gdState.value == GDSTATE['待抢单'] ||
58
+          newOrder.gdState.value == GDSTATE['待接单'] ||
59
+          newOrder.gdState.value == GDSTATE['待到达'] ||
60
+          newOrder.gdState.value == GDSTATE['定时预约'] ||
61
+          newOrder.gdState.value == GDSTATE['待评价']
62
+          ">
63
+            <button type="primary" class="btn" v-if="newOrder.gdState.value == GDSTATE['待评价']"
64
+              @click="showAppraise(newOrder.id)">评价</button>
65
+            <button type="primary" class="btn" v-if="
66
+            newOrder.gdState.value == GDSTATE['待抢单'] ||
67
+            newOrder.gdState.value == GDSTATE['待接单'] ||
68
+            newOrder.gdState.value == GDSTATE['待到达'] ||
69
+            newOrder.gdState.value == GDSTATE['定时预约']
70
+            " @click="openRecallModal(newOrder.id)">撤销</button>
71
+            <button type="primary" class="btn" v-if="newOrder.gdState.value == GDSTATE['定时预约']"
72
+              @click="openExecModal(newOrder.id)">立即执行</button>
73
+            <button type="primary" class="btn" v-if="
74
+            (newOrder.gdState.value == GDSTATE['待抢单'] ||
75
+            newOrder.gdState.value == GDSTATE['待到达']) &&
76
+            newOrder.taskType.allowUrgent == 1 &&
77
+            !newOrder.urgentDetails
78
+            " @click="showJiaji(newOrder.id)">加急</button>
55 79
           </view>
56 80
         </view>
57 81
       </view>
@@ -71,7 +95,10 @@
71 95
     mapActions
72 96
   } from "vuex";
73 97
   import {
74
-    reqFetchDataList
98
+    reqFetchDataList,
99
+    reqDelWorkOrder,
100
+    reqUrge,
101
+    reqDirectStartOrder
75 102
   } from "../../request/api.js";
76 103
   import {
77 104
     GDSTATE
@@ -80,8 +107,13 @@
80 107
     name: 'orderList',
81 108
     data() {
82 109
       return {
110
+        // 工单状态
111
+        GDSTATE: GDSTATE,
112
+        // 当前筛选的工单状态
83 113
         selectedGdState: '执行中',
114
+        // 当前筛选的关联类型
84 115
         selectedAssociationType: '全部',
116
+        //工单状态筛选列表
85 117
         gdStates: [{
86 118
             value: -1,
87 119
             label: '全部'
@@ -94,17 +126,19 @@
94 126
             value: 2,
95 127
             label: '待评价'
96 128
           },
97
-        ], //工单状态筛选列表
129
+        ],
130
+        //关联类型筛选列表
98 131
         associationTypes: [{
99 132
           value: -1,
100 133
           label: '全部'
101
-        }, ], //关联类型筛选列表
134
+        }, ],
102 135
         newOrderList: [], //工单列表
103 136
         totalNum: 0, //工单总数量
104 137
         idx: 0, //页码
105 138
         pageNum: 20, //每页的工单数量
106 139
         pickerList: [], //picker列表
107
-        type: '',
140
+        type: '', //打开picker的类型,工单状态||关联类型
141
+        checkStatus: {}, //审核状态列表
108 142
       };
109 143
     },
110 144
     computed: {
@@ -112,6 +146,183 @@
112 146
     },
113 147
     methods: {
114 148
       ...mapActions("dictionary", ["vxDictionary"]),
149
+      //评价
150
+      showAppraise(id) {
151
+        this.$refs.seiminModel.show({
152
+          skin: 'evaluate',
153
+          content: "工单已完成,请对本次服务做出评价!",
154
+          btns: [{
155
+              click: () => {
156
+                console.log('取消');
157
+                this.$refs.seiminModel.close();
158
+              }
159
+            },
160
+            {
161
+              click: () => {
162
+                console.log('确定');
163
+                this.$refs.seiminModel.close();
164
+                uni.showLoading({
165
+                  title: '加载中',
166
+                  mask: true,
167
+                })
168
+                reqDelWorkOrder(id).then(res => {
169
+                  uni.hideLoading();
170
+                  if (res.status == 200) {
171
+                    this.$refs.seiminModel.show({
172
+                      skin: 'toast',
173
+                      icon: 'success',
174
+                      content: '撤销成功',
175
+                    })
176
+                    this.init();
177
+                  } else {
178
+                    this.$refs.seiminModel.show({
179
+                      skin: 'toast',
180
+                      icon: 'error',
181
+                      content: '撤销失败',
182
+                    })
183
+                  }
184
+                })
185
+              }
186
+            }
187
+          ]
188
+        });
189
+      },
190
+      //撤销
191
+      openRecallModal(id) {
192
+        this.$refs.seiminModel.show({
193
+          icon: "warn",
194
+          content: "您确认要撤销工单吗?撤销工单我们会通知服务台、支助人员不再执行此工单,请谨慎操作,如确认撤销请点击确认。",
195
+          btns: [{
196
+              click: () => {
197
+                console.log('取消');
198
+                this.$refs.seiminModel.close();
199
+              }
200
+            },
201
+            {
202
+              click: () => {
203
+                console.log('确定');
204
+                this.$refs.seiminModel.close();
205
+                uni.showLoading({
206
+                  title: '加载中',
207
+                  mask: true,
208
+                })
209
+                reqDelWorkOrder(id).then(res => {
210
+                  uni.hideLoading();
211
+                  if (res.status == 200) {
212
+                    this.$refs.seiminModel.show({
213
+                      skin: 'toast',
214
+                      icon: 'success',
215
+                      content: '撤销成功',
216
+                    })
217
+                    this.init();
218
+                  } else {
219
+                    this.$refs.seiminModel.show({
220
+                      skin: 'toast',
221
+                      icon: 'error',
222
+                      content: '撤销失败',
223
+                    })
224
+                  }
225
+                })
226
+              }
227
+            }
228
+          ]
229
+        });
230
+      },
231
+      //立即执行
232
+      openExecModal(id) {
233
+        this.$refs.seiminModel.show({
234
+          icon: 'warn',
235
+          content: '您确认要立即执行该工单吗?',
236
+          btns: [{
237
+            click: () => {
238
+              console.log('取消');
239
+              this.$refs.seiminModel.close();
240
+            }
241
+          }, {
242
+            click: () => {
243
+              console.log('确认');
244
+              this.$refs.seiminModel.close();
245
+              uni.showLoading({
246
+                title: '加载中',
247
+                mask: true,
248
+              })
249
+              reqDirectStartOrder(id).then(res => {
250
+                uni.hideLoading();
251
+                if (res.status == 200) {
252
+                  this.$refs.seiminModel.show({
253
+                    skin: 'toast',
254
+                    icon: 'success',
255
+                    content: '您的加急申请已成功,调度人员会紧急处理!',
256
+                  })
257
+                  this.init();
258
+                } else {
259
+                  this.$refs.seiminModel.show({
260
+                    skin: 'toast',
261
+                    icon: 'error',
262
+                    content: '加急失败',
263
+                  })
264
+                }
265
+              })
266
+            }
267
+          }, ]
268
+        })
269
+      },
270
+      //加急
271
+      showJiaji(id) {
272
+        this.$refs.seiminModel.urgentTextArea = '';
273
+        this.$refs.seiminModel.show({
274
+          title: '',
275
+          skin: 'urgent',
276
+          content: "请填写加急原因,填写后我们会根据您的诉求优先处理",
277
+          btns: [{
278
+              click: () => {
279
+                console.log('取消');
280
+                this.$refs.seiminModel.close();
281
+              }
282
+            },
283
+            {
284
+              click: () => {
285
+                console.log('确定', this.$refs.seiminModel.urgentTextArea);
286
+                const urgentTextArea = this.$refs.seiminModel.urgentTextArea;
287
+                if (urgentTextArea.trim() === '') {
288
+                  return;
289
+                }
290
+                this.$refs.seiminModel.close();
291
+                uni.showLoading({
292
+                  title: '加载中',
293
+                  mask: true,
294
+                })
295
+                let postData = {
296
+                  urgentDetails: {
297
+                    workerOrder: id,
298
+                    checkStatus: {
299
+                      id: this.checkStatus[1]
300
+                    },
301
+                    urgentReason: urgentTextArea,
302
+                  },
303
+                };
304
+                reqUrge(postData).then(res => {
305
+                  uni.hideLoading();
306
+                  if (res.status == 200) {
307
+                    this.$refs.seiminModel.show({
308
+                      skin: 'toast',
309
+                      icon: 'success',
310
+                      content: '加急成功',
311
+                    })
312
+                    this.init();
313
+                  } else {
314
+                    this.$refs.seiminModel.show({
315
+                      skin: 'toast',
316
+                      icon: 'error',
317
+                      content: '加急失败',
318
+                    })
319
+                  }
320
+                })
321
+              }
322
+            }
323
+          ]
324
+        });
325
+      },
115 326
       //关闭
116 327
       closePicker() {
117 328
         this.$refs.sPicker._close();
@@ -157,12 +368,14 @@
157 368
         });
158 369
         Promise.all([
159 370
           this.queryWorkOrdersRequest(), //查询最新工单列表
160
-          this.queryDictionary('association_types'), //获取数据字典
371
+          this.queryDictionary('association_types'), //获取数据字典-关联类型
372
+          this.queryDictionary('check_status'), //获取数据字典-审核状态
161 373
         ]).then((values) => {
162 374
           uni.hideLoading();
163 375
           uni.stopPullDownRefresh();
164 376
           this.queryWorkOrdersResponse(values[0]);
165 377
           this.queryDictionaryResponse(values[1], 'association_types');
378
+          this.queryDictionaryResponse(values[2], 'check_status');
166 379
         });
167 380
       },
168 381
       // 查询最新工单列表(上拉)
@@ -258,7 +471,7 @@
258 471
             this.newOrderList = newOrderList;
259 472
           }
260 473
         } else {
261
-          this.$refs.seiminModel.showChangeDept({
474
+          this.$refs.seiminModel.show({
262 475
             skin: "toast",
263 476
             icon: "error",
264 477
             content: res.msg || "获取数据失败",
@@ -276,9 +489,11 @@
276 489
       },
277 490
       // 获取数据字典
278 491
       queryDictionaryResponse(res, type) {
492
+        let obj = {};
493
+        let arr = [];
279 494
         switch (type) {
280 495
           case 'association_types':
281
-            let arr = res.map(v => ({
496
+            arr = res.map(v => ({
282 497
               value: v.id,
283 498
               label: v.name
284 499
             }));
@@ -287,6 +502,13 @@
287 502
               value: -1
288 503
             }, ...arr];
289 504
             break;
505
+          case 'check_status':
506
+            obj = {};
507
+            res.forEach(v => {
508
+              obj[v.value] = v.id;
509
+            })
510
+            this.checkStatus = obj;
511
+            break;
290 512
         }
291 513
       },
292 514
     },
@@ -353,14 +575,22 @@
353 575
         border-radius: 8rpx;
354 576
         border: 2rpx solid #e5e9ed;
355 577
         position: relative;
356
-        padding: 0 15rpx;
578
+        padding: 0 24rpx;
357 579
         font-size: 32rpx;
358 580
         @include semicircle(#f9fafb, 82rpx);
359 581
         @include flex(flex-start, stretch, column);
360 582
 
583
+        .ji,
584
+        .jiaji {
585
+          width: 60rpx;
586
+          position: absolute;
587
+          right: 0;
588
+          top: 0;
589
+        }
590
+
361 591
         .orderList_listItem_header {
362 592
           height: 86rpx;
363
-          border-bottom: 1px dashed #e5e9ed;
593
+          border-bottom: 2rpx dashed #e5e9ed;
364 594
           @include flex(space-between, center);
365 595
 
366 596
           .orderList_listItem_header_title {
@@ -431,7 +661,7 @@
431 661
 
432 662
           .orderList_listItem_item_btns {
433 663
             position: relative;
434
-            left: -14rpx;
664
+            left: -24rpx;
435 665
             width: 698rpx;
436 666
             height: 88rpx;
437 667
             @include btn_background;
@@ -440,9 +670,19 @@
440 670
             .btn {
441 671
               flex: 1;
442 672
               background-color: transparent;
443
-              border-right: 2rpx solid #fff;
673
+              position: relative;
674
+
675
+              &::before {
676
+                content: '';
677
+                position: absolute;
678
+                right: 0;
679
+                top: 0;
680
+                width: 2rpx;
681
+                height: 100%;
682
+                border-right: 2rpx solid #fff;
683
+              }
444 684
 
445
-              &:last-of-type {
685
+              &:last-of-type::before {
446 686
                 border-right: none;
447 687
               }
448 688
 

+ 6 - 6
pages/quickCreateOrder/quickCreateOrder.vue

@@ -232,7 +232,7 @@
232 232
           }
233 233
           this.dataObj = res;
234 234
         } else {
235
-          this.$refs.seiminModel.showChangeDept({
235
+          this.$refs.seiminModel.show({
236 236
             skin: "toast",
237 237
             icon: "error",
238 238
             content: res.msg || "获取数据失败",
@@ -245,7 +245,7 @@
245 245
         if (res.state == 200) {
246 246
           this.historyCustomRemarks = res.data || [];
247 247
         } else {
248
-          this.$refs.seiminModel.showChangeDept({
248
+          this.$refs.seiminModel.show({
249 249
             skin: "toast",
250 250
             icon: "error",
251 251
             content: res.msg || "获取数据失败",
@@ -286,7 +286,7 @@
286 286
           }]; //终点科室
287 287
           // 验证起点科室和终点科室必填
288 288
           if (!startDept.id) {
289
-            this.$refs.seiminModel.showChangeDept({
289
+            this.$refs.seiminModel.show({
290 290
               skin: "toast",
291 291
               icon: "error",
292 292
               content: "请选择起点科室",
@@ -295,7 +295,7 @@
295 295
             return;
296 296
           }
297 297
           if (!endDepts[0].id) {
298
-            this.$refs.seiminModel.showChangeDept({
298
+            this.$refs.seiminModel.show({
299 299
               skin: "toast",
300 300
               icon: "error",
301 301
               content: "请选择终点科室",
@@ -321,7 +321,7 @@
321 321
         reqBuildOrder(postData).then((res) => {
322 322
           uni.hideLoading();
323 323
           if (res.status == 200) {
324
-            this.$refs.seiminModel.showChangeDept({
324
+            this.$refs.seiminModel.show({
325 325
               skin: "toast",
326 326
               content: "创建成功",
327 327
               btns: [{
@@ -336,7 +336,7 @@
336 336
               }, ],
337 337
             });
338 338
           } else {
339
-            this.$refs.seiminModel.showChangeDept({
339
+            this.$refs.seiminModel.show({
340 340
               skin: "toast",
341 341
               icon: "error",
342 342
               content: res.msg || "建单失败",

+ 5 - 5
pages/searchDept/searchDept.vue

@@ -189,7 +189,7 @@
189 189
               keyword
190 190
             );
191 191
           } else {
192
-            this.$refs.seiminModel.showChangeDept({
192
+            this.$refs.seiminModel.show({
193 193
               skin: "toast",
194 194
               icon: "error",
195 195
               content: res.msg || "获取数据失败",
@@ -332,7 +332,7 @@
332 332
                 this.changeDept_index_handler_common();
333 333
               } else {
334 334
                 uni.hideLoading();
335
-                this.$refs.seiminModel.showChangeDept({
335
+                this.$refs.seiminModel.show({
336 336
                   skin: "toast",
337 337
                   icon: "error",
338 338
                   content: res.msg || "操作失败",
@@ -359,7 +359,7 @@
359 359
             reqGetCurrentUser().then((res) => {
360 360
               uni.hideLoading();
361 361
               if (res.status == 200) {
362
-                this.$refs.seiminModel.showChangeDept({
362
+                this.$refs.seiminModel.show({
363 363
                   skin: "toast",
364 364
                   icon: "success",
365 365
                   content: "切换科室成功",
@@ -374,7 +374,7 @@
374 374
                   }, ],
375 375
                 });
376 376
               } else {
377
-                this.$refs.seiminModel.showChangeDept({
377
+                this.$refs.seiminModel.show({
378 378
                   skin: "toast",
379 379
                   icon: "error",
380 380
                   content: res.msg || "操作失败",
@@ -384,7 +384,7 @@
384 384
             });
385 385
           } else {
386 386
             uni.hideLoading();
387
-            this.$refs.seiminModel.showChangeDept({
387
+            this.$refs.seiminModel.show({
388 388
               skin: "toast",
389 389
               icon: "error",
390 390
               content: res.msg || "操作失败",

+ 20 - 0
request/api.js

@@ -95,3 +95,23 @@ export const reqGetCurrentUser = () =>
95 95
   request({
96 96
     url: '/user/data/getCurrentUser',
97 97
   });
98
+
99
+// 撤回
100
+export const reqDelWorkOrder = (orderId) =>
101
+  request({
102
+    url: `/workerOrder/delWorkOrder/${orderId}`,
103
+  });
104
+
105
+// 加急
106
+export const reqUrge = (postData) =>
107
+  request({
108
+    url: `/workerOrder/urge`,
109
+    data: postData,
110
+    method: 'POST'
111
+  });
112
+
113
+// 立即执行
114
+export const reqDirectStartOrder = (id) =>
115
+  request({
116
+    url: `/api/directStartOrder/${id}`,
117
+  });

+ 72 - 3
static/fonts/demo_index.html

@@ -55,6 +55,24 @@
55 55
           <ul class="icon_lists dib-box">
56 56
           
57 57
             <li class="dib">
58
+              <span class="icon pda">&#xe612;</span>
59
+                <div class="name">好评</div>
60
+                <div class="code-name">&amp;#xe612;</div>
61
+              </li>
62
+          
63
+            <li class="dib">
64
+              <span class="icon pda">&#xe640;</span>
65
+                <div class="name">好评</div>
66
+                <div class="code-name">&amp;#xe640;</div>
67
+              </li>
68
+          
69
+            <li class="dib">
70
+              <span class="icon pda">&#xe7d2;</span>
71
+                <div class="name">问好</div>
72
+                <div class="code-name">&amp;#xe7d2;</div>
73
+              </li>
74
+          
75
+            <li class="dib">
58 76
               <span class="icon pda">&#xe68f;</span>
59 77
                 <div class="name">下拉</div>
60 78
                 <div class="code-name">&amp;#xe68f;</div>
@@ -132,9 +150,9 @@
132 150
 <pre><code class="language-css"
133 151
 >@font-face {
134 152
   font-family: 'pda';
135
-  src: url('iconfont.woff2?t=1650447797513') format('woff2'),
136
-       url('iconfont.woff?t=1650447797513') format('woff'),
137
-       url('iconfont.ttf?t=1650447797513') format('truetype');
153
+  src: url('iconfont.woff2?t=1651040512454') format('woff2'),
154
+       url('iconfont.woff?t=1651040512454') format('woff'),
155
+       url('iconfont.ttf?t=1651040512454') format('truetype');
138 156
 }
139 157
 </code></pre>
140 158
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -161,6 +179,33 @@
161 179
         <ul class="icon_lists dib-box">
162 180
           
163 181
           <li class="dib">
182
+            <span class="icon pda pda-haoping"></span>
183
+            <div class="name">
184
+              好评
185
+            </div>
186
+            <div class="code-name">.pda-haoping
187
+            </div>
188
+          </li>
189
+          
190
+          <li class="dib">
191
+            <span class="icon pda pda-haoping1"></span>
192
+            <div class="name">
193
+              好评
194
+            </div>
195
+            <div class="code-name">.pda-haoping1
196
+            </div>
197
+          </li>
198
+          
199
+          <li class="dib">
200
+            <span class="icon pda pda-wenhao"></span>
201
+            <div class="name">
202
+              问好
203
+            </div>
204
+            <div class="code-name">.pda-wenhao
205
+            </div>
206
+          </li>
207
+          
208
+          <li class="dib">
164 209
             <span class="icon pda pda-xiala"></span>
165 210
             <div class="name">
166 211
               下拉
@@ -279,6 +324,30 @@
279 324
           
280 325
             <li class="dib">
281 326
                 <svg class="icon svg-icon" aria-hidden="true">
327
+                  <use xlink:href="#pda-haoping"></use>
328
+                </svg>
329
+                <div class="name">好评</div>
330
+                <div class="code-name">#pda-haoping</div>
331
+            </li>
332
+          
333
+            <li class="dib">
334
+                <svg class="icon svg-icon" aria-hidden="true">
335
+                  <use xlink:href="#pda-haoping1"></use>
336
+                </svg>
337
+                <div class="name">好评</div>
338
+                <div class="code-name">#pda-haoping1</div>
339
+            </li>
340
+          
341
+            <li class="dib">
342
+                <svg class="icon svg-icon" aria-hidden="true">
343
+                  <use xlink:href="#pda-wenhao"></use>
344
+                </svg>
345
+                <div class="name">问好</div>
346
+                <div class="code-name">#pda-wenhao</div>
347
+            </li>
348
+          
349
+            <li class="dib">
350
+                <svg class="icon svg-icon" aria-hidden="true">
282 351
                   <use xlink:href="#pda-xiala"></use>
283 352
                 </svg>
284 353
                 <div class="name">下拉</div>

+ 15 - 3
static/fonts/iconfont.css

@@ -1,8 +1,8 @@
1 1
 @font-face {
2 2
   font-family: "pda"; /* Project id 3307922 */
3
-  src: url('/static/fonts/iconfont.woff2?t=1650447797513') format('woff2'),
4
-       url('/static/fonts/iconfont.woff?t=1650447797513') format('woff'),
5
-       url('/static/fonts/iconfont.ttf?t=1650447797513') format('truetype');
3
+  src: url('/static/fonts/iconfont.woff2?t=1651040512454') format('woff2'),
4
+       url('/static/fonts/iconfont.woff?t=1651040512454') format('woff'),
5
+       url('/static/fonts/iconfont.ttf?t=1651040512454') format('truetype');
6 6
 }
7 7
 
8 8
 .pda {
@@ -13,6 +13,18 @@
13 13
   -moz-osx-font-smoothing: grayscale;
14 14
 }
15 15
 
16
+.pda-haoping:before {
17
+  content: "\e612";
18
+}
19
+
20
+.pda-haoping1:before {
21
+  content: "\e640";
22
+}
23
+
24
+.pda-wenhao:before {
25
+  content: "\e7d2";
26
+}
27
+
16 28
 .pda-xiala:before {
17 29
   content: "\e68f";
18 30
 }

文件差異過大導致無法顯示
+ 1 - 1
static/fonts/iconfont.js


+ 21 - 0
static/fonts/iconfont.json

@@ -6,6 +6,27 @@
6 6
   "description": "转运PDA",
7 7
   "glyphs": [
8 8
     {
9
+      "icon_id": "398877",
10
+      "name": "好评",
11
+      "font_class": "haoping",
12
+      "unicode": "e612",
13
+      "unicode_decimal": 58898
14
+    },
15
+    {
16
+      "icon_id": "1351206",
17
+      "name": "好评",
18
+      "font_class": "haoping1",
19
+      "unicode": "e640",
20
+      "unicode_decimal": 58944
21
+    },
22
+    {
23
+      "icon_id": "6771223",
24
+      "name": "问好",
25
+      "font_class": "wenhao",
26
+      "unicode": "e7d2",
27
+      "unicode_decimal": 59346
28
+    },
29
+    {
9 30
       "icon_id": "704337",
10 31
       "name": "下拉",
11 32
       "font_class": "xiala",

二進制
static/fonts/iconfont.ttf


二進制
static/fonts/iconfont.woff


二進制
static/fonts/iconfont.woff2


二進制
static/imgs/icon_ji.png


二進制
static/imgs/icon_jiaji.png