소스 검색

汇总单详情

seimin 2 년 전
부모
커밋
698b272845
5개의 변경된 파일616개의 추가작업 그리고 5개의 파일을 삭제
  1. 9 0
      src/router/index.js
  2. 17 1
      src/views/closed.vue
  3. 20 4
      src/views/solved.vue
  4. 6 0
      src/views/summaryOrder.vue
  5. 564 0
      src/views/summaryOrderDetail.vue

+ 9 - 0
src/router/index.js

@@ -29,6 +29,7 @@ import Solved from './../views/solved.vue' //已解决页面
29 29
 import Closed from './../views/closed.vue' //已关闭页面
30 30
 import WaitConfirm from './../views/waitConfirm.vue' //待审核页面
31 31
 import SummaryOrder from './../views/summaryOrder.vue' //汇总单处理页面
32
+import SummaryOrderDetail from './../views/SummaryOrderDetail.vue' //汇总单详情页面
32 33
 import ScanResult from './../views/scanResult.vue' //扫一扫结果页面
33 34
 import SearchDept from './../views/searchDept.vue' //搜索页面
34 35
 Vue.use(Router)
@@ -195,6 +196,14 @@ export default new Router({
195 196
     },
196 197
   },
197 198
   {
199
+    path: '/summaryOrderDetail/:incidentId',
200
+    name: 'SummaryOrderDetail',
201
+    component: SummaryOrderDetail,
202
+    meta: {
203
+      allowBack: false
204
+    },
205
+  },
206
+  {
198 207
     path: '/newIncident',
199 208
     name: 'NewIncident',
200 209
     component: NewIncident,

+ 17 - 1
src/views/closed.vue

@@ -175,6 +175,9 @@
175 175
               pro_hides ? "隐藏详情 <<" : "展开详情 >>"
176 176
             }}</span>
177 177
           </p>
178
+          <div class="sub">
179
+              <cube-button type="submit" @click="goToSummary()" v-if="model.incident.duty && model.incident.duty.addSummary == 1">查看汇总单</cube-button>
180
+          </div>
178 181
         </div>
179 182
       </div>
180 183
       <load-ing v-if="!model.incident"></load-ing>
@@ -216,6 +219,20 @@ export default {
216 219
     EventInformation,
217 220
   },
218 221
   methods: {
222
+    // 查看汇总单
223
+    goToSummary(){
224
+      if(this.model.incident.duty && this.model.incident.duty.addSummary == 1 && this.model.incident.state.value == "resolved"){
225
+        // 责任科室【是否需要填写汇总单】开启,并且工单状态是已解决
226
+        this.$router.push({
227
+          path: `/summaryOrderDetail/${this.model.incident.id}`
228
+        });
229
+      }else if(this.model.incident.duty && this.model.incident.duty.addSummary == 1 && this.model.incident.state.value == "close"){
230
+        // 责任科室【是否需要填写汇总单】开启,并且工单状态是已关闭
231
+        this.$router.push({
232
+          path: `/summaryOrderDetail/${this.model.incident.id}`
233
+        });
234
+      }
235
+    },
219 236
     //   获取事件数据
220 237
     getParamsData() {
221 238
       var that = this;
@@ -586,7 +603,6 @@ i.iconfont {
586 603
         background: #ececec;
587 604
         .cube-btn {
588 605
           background-color: #005395 !important;
589
-          width: 90%;
590 606
           margin: 0.2rem auto;
591 607
           border-radius: 8px;
592 608
         }

+ 20 - 4
src/views/solved.vue

@@ -198,9 +198,10 @@
198 198
               <div class="txt fl">回访备注:</div>
199 199
               <cube-input v-model="model.incident.visitRemarks"></cube-input>
200 200
             </div>
201
-            <cube-form-group class="sub">
201
+            <div class="sub">
202 202
               <cube-button type="submit" @click="subVali()">提交</cube-button>
203
-            </cube-form-group>
203
+              <cube-button type="submit" @click="goToSummary()" v-if="model.incident.duty && model.incident.duty.addSummary == 1">查看汇总单</cube-button>
204
+            </div>
204 205
           </div>
205 206
         </div>
206 207
       </div>
@@ -250,6 +251,20 @@ export default {
250 251
     // HandlerLog
251 252
   },
252 253
   methods: {
254
+    // 查看汇总单
255
+    goToSummary(){
256
+      if(this.model.incident.duty && this.model.incident.duty.addSummary == 1 && this.model.incident.state.value == "resolved"){
257
+        // 责任科室【是否需要填写汇总单】开启,并且工单状态是已解决
258
+        this.$router.push({
259
+          path: `/summaryOrderDetail/${this.model.incident.id}`
260
+        });
261
+      }else if(this.model.incident.duty && this.model.incident.duty.addSummary == 1 && this.model.incident.state.value == "close"){
262
+        // 责任科室【是否需要填写汇总单】开启,并且工单状态是已关闭
263
+        this.$router.push({
264
+          path: `/summaryOrderDetail/${this.model.incident.id}`
265
+        });
266
+      }
267
+    },
253 268
     //   获取事件数据
254 269
     getParamsData() {
255 270
       var that = this;
@@ -736,10 +751,11 @@ i.iconfont {
736 751
       }
737 752
       .sub {
738 753
         background: #ececec;
754
+        display: flex;
739 755
         .cube-btn {
740 756
           background-color: #005395 !important;
741
-          width: 90%;
742
-          margin: 0.2rem auto;
757
+          flex: 1;
758
+          margin: 0.2rem;
743 759
           border-radius: 8px;
744 760
         }
745 761
       }

+ 6 - 0
src/views/summaryOrder.vue

@@ -42,6 +42,9 @@
42 42
           <p class="addConsumableMaterial textCenter" @click="addWorkHourManagementOne()">
43 43
             <span class="dash dash-jia"></span>
44 44
           </p>
45
+          <p class="textCenter total">
46
+            <span>汇总单总价:<strong class="fontBold">{{ totalPriceConsumable + totalPriceWorkHourManagement }}元</strong></span>
47
+          </p>
45 48
         </div>
46 49
       </div>
47 50
       <load-ing v-if="loadShow"></load-ing>
@@ -279,6 +282,9 @@ export default {
279 282
 }
280 283
 .textCenter {
281 284
   text-align: center;
285
+  &.total{
286
+    border-top: 0.2rem solid #eee;
287
+  }
282 288
 }
283 289
 .addConsumableMaterial {
284 290
   border-top: 0.01rem solid #e6e6e6;

+ 564 - 0
src/views/summaryOrderDetail.vue

@@ -0,0 +1,564 @@
1
+<template>
2
+  <div class="againAssign">
3
+    <div class="conentBox">
4
+      <div class="header">汇总单</div>
5
+      <div v-if="$route.params.incidentId" class="conent">
6
+        <div class="navBar">
7
+          <div>事件单号:{{ summaryObj.incidentDTO.incidentsign }}</div>
8
+          <div>报修科室:{{ summaryObj.incidentDTO.department ? summaryObj.incidentDTO.department.dept : '' }}</div>
9
+          <div>登记时间:{{ summaryObj.incidentDTO.acceptDate }}</div>
10
+          <div>处理人/组:{{ summaryObj.incidentDTO.groupORHandlerUser }}</div>
11
+          <div>事件描述:{{ summaryObj.incidentDTO.description }}</div>
12
+        </div>
13
+        <div class="label headtop" id="info">耗材清单</div>
14
+
15
+        <div class="info">
16
+          <ConsumableMaterial v-for="item in summaryObj.consumableList" :key="item.id" class="bottomBorder" :model="item" :id="item.id" :summaryId="summaryId" :incidentId="$route.params.incidentId" :noClick="true"></ConsumableMaterial>
17
+          <p class="textCenter">
18
+            <span>耗材总价:<strong class="fontBold">{{ totalPriceConsumable }}元</strong></span>
19
+          </p>
20
+          <div class="label" id="progress">工时清单</div>
21
+          <WorkHourManagement v-for="item in summaryObj.workHourManagementList" :key="item.id" class="bottomBorder" :model="item" :id="item.id" :summaryId="summaryId" :incidentId="$route.params.incidentId" :summaryObj="summaryObj" :noClick="true"></WorkHourManagement>
22
+          <p class="textCenter">
23
+            <span>工时总价:<strong class="fontBold">{{ totalPriceWorkHourManagement }}元</strong></span>
24
+          </p>
25
+          <p class="textCenter total">
26
+            <span>汇总单总价:<strong class="fontBold">{{ totalPriceConsumable + totalPriceWorkHourManagement }}元</strong></span>
27
+          </p>
28
+        </div>
29
+      </div>
30
+      <load-ing v-if="loadShow"></load-ing>
31
+      <promp-ting
32
+        :conents="promptingConent"
33
+        :status="promptingStatus"
34
+      ></promp-ting>
35
+    </div>
36
+    <seiminModel ref="seiminModel"></seiminModel>
37
+    <div class="sub">
38
+      <cube-button type="submit" @click="goBackDetail()">返回事件详情</cube-button>
39
+    </div>
40
+  </div>
41
+</template>
42
+<script>
43
+import seiminModel from "./../custom/seiminModel";
44
+import LoadIng from "./loading.vue";
45
+import PrompTing from "./prompting.vue";
46
+import ConsumableMaterial from "../components/ConsumableMaterial/index.vue";
47
+import WorkHourManagement from "../components/WorkHourManagement/index.vue";
48
+
49
+export default {
50
+  data() {
51
+    return {
52
+      // 耗材总价格
53
+      totalPriceConsumable: 0,
54
+      totalPriceWorkHourManagement: 0,
55
+      summaryObj: {},
56
+      loginUser: JSON.parse(localStorage.getItem("loginUser")),
57
+      id: "",
58
+      model: {}, //提交数据
59
+      loadShow: false,
60
+      pro_hides: false, //展开/收起处理进度
61
+      name: "",
62
+      label: "incidentInfo", //顶部快速定位
63
+      modelData: {
64
+        incident: {}
65
+      }, //上传的model
66
+      model: {
67
+        handleCategory: "", //处理方式
68
+        closecode: "", //关闭代码
69
+        category: [], //确认事件分类
70
+        handleDescription: "", //处理方案
71
+        knowledge: false, //是否提交知识库
72
+        isHelper: false, //是否需要协同
73
+        solutionType: [], //知识库类型
74
+        handlerUser: "", //升级/转派对象
75
+        isupreason: "", //升级原因
76
+        transferReason: "", //转派原因
77
+        synergeticReason: "", //协同原因
78
+        selectArea: "",
79
+        selectPlace: "",
80
+        transferMode: "", //转派方式
81
+        branch: "", //院区
82
+        duty: "" //责任科室
83
+      },
84
+      promptingConent: "",
85
+      promptingStatus: ""
86
+    };
87
+  },
88
+  methods: {
89
+    // 刷新
90
+    refresh(){
91
+      this.getInfo();
92
+    },
93
+    // 新增耗材
94
+    addConsumableMaterial() {
95
+      this.$router.push({
96
+        path: `/main/ConsumableList/${this.$route.params.incidentId}/${this.summaryId}/${this.$route.params.processInstanceId}`
97
+      });
98
+    },
99
+    // 新增工时
100
+    addWorkHourManagementOne() {
101
+      this.$router.push({
102
+        path: `/main/WorkHourManagementOne/${this.$route.params.incidentId}/${this.summaryId}/${this.$route.params.processInstanceId}`
103
+      });
104
+    },
105
+    // 获取汇总单信息
106
+    getInfo() {
107
+      const toast = this.$createToast({
108
+        txt: "Loading...",
109
+        mask: true
110
+      });
111
+      toast.show();
112
+      this.$http.post("/service/bpm/data/querySummaryDoc", {incidentId: this.$route.params.incidentId}).then(res => {
113
+        toast.hide();
114
+        if(res.data.status == 200){
115
+          this.summaryObj = res.data;
116
+          if(this.summaryObj.consumableList){
117
+            this.totalPriceConsumable = this.summaryObj.consumableList.reduce((pre, current) => pre + current.consumableEndPrice * current.consumablesNum, 0)
118
+          }else{
119
+            this.totalPriceConsumable = 0;
120
+          }
121
+          if(this.summaryObj.workHourManagementList){
122
+            this.totalPriceWorkHourManagement = this.summaryObj.workHourManagementList.reduce((pre, current) => pre + current.wage, 0)
123
+          }else{
124
+            this.totalPriceWorkHourManagement = 0;
125
+          }
126
+          this.summaryId = res.data.summaryId;
127
+        }else if(res.data.status == 201){
128
+          // 事件第一次绑定汇总单
129
+          this.summaryId = res.data.summaryId;
130
+        }
131
+      });
132
+    },
133
+    // 返回事件详情
134
+    goBackDetail() {
135
+      this.$router.go(-1);
136
+    }
137
+  },
138
+  mounted() {
139
+    console.log(this.$route);
140
+    console.log(this.modelData, this.model, 999);
141
+    this.getInfo();
142
+  },
143
+  components: {
144
+    seiminModel,
145
+    LoadIng,
146
+    PrompTing,
147
+    ConsumableMaterial,
148
+    WorkHourManagement,
149
+  }
150
+};
151
+</script>
152
+
153
+<style lang="less" scoped>
154
+.bottomBorder {
155
+  border-bottom: 0.2rem solid #eee;
156
+}
157
+.textCenter {
158
+  text-align: center;
159
+  &.total{
160
+    border-top: 0.2rem solid #eee;
161
+  }
162
+}
163
+.addConsumableMaterial {
164
+  border-top: 0.01rem solid #e6e6e6;
165
+  border-bottom: 0.01rem solid #e6e6e6;
166
+}
167
+.hcList {
168
+  display: flex;
169
+  align-items: center;
170
+  margin-top: 0.1rem;
171
+}
172
+.hcItem {
173
+  flex: 4;
174
+  margin: 0 0.05rem;
175
+}
176
+.hcItemClose {
177
+  flex: 1;
178
+  font-size: 0.4rem;
179
+}
180
+.addHc {
181
+  width: 90%;
182
+  height: 1rem;
183
+  margin: 0 auto;
184
+  border: 0.02rem solid #ccc;
185
+  display: flex;
186
+  justify-content: center;
187
+  align-items: center;
188
+}
189
+.addHc .cubeic-add {
190
+  font-size: 0.8rem;
191
+}
192
+.newIncident .cube-form-group {
193
+  border-bottom: 0.02rem solid rgb(245, 245, 245);
194
+}
195
+.newIncident .sub .cube-btn {
196
+  margin-top: 1.1rem;
197
+}
198
+.btn_plcaeholde .cube-btn {
199
+  padding-left: 0;
200
+  padding-right: 0;
201
+  text-align: left;
202
+  color: inherit;
203
+  background: none;
204
+  border: none;
205
+}
206
+.btn_plcaeholde .cube-btn:active {
207
+  background-color: #fff;
208
+}
209
+.btn_plcaeholde .cube-btn::after {
210
+  content: ">";
211
+  float: right;
212
+  margin-right: 0.15rem;
213
+}
214
+.cube-form_standard .cube-upload-def .cube-upload-btn,
215
+.cube-form_standard .cube-upload-def .cube-upload-file {
216
+  margin-left: 3% !important;
217
+}
218
+.sub {
219
+  background: #ececec;
220
+  display: flex;
221
+  .cube-btn {
222
+    background-color: #005395 !important;
223
+    margin: 0.2rem auto;
224
+    border-radius: 8px;
225
+  }
226
+}
227
+.cube-picker-wheel-item {
228
+  text-overflow: ellipsis;
229
+}
230
+</style>
231
+<style lang="less" scoped>
232
+.header {
233
+  width: 100%;
234
+  height: 0.88rem;
235
+  line-height: 0.88rem;
236
+  text-align: center;
237
+  color: #fff;
238
+  font-size: 0.37rem;
239
+  background: linear-gradient(#2e2f32, #414246);
240
+  position: fixed;
241
+  top: 0;
242
+  z-index: 6;
243
+}
244
+.incidentTitle {
245
+  .titleRefer {
246
+    display: flex;
247
+    align-items: center;
248
+    justify-content: space-between;
249
+    .titleTxtArea {
250
+      font-size: 0.3rem;
251
+      color: #333;
252
+      height: 2rem;
253
+      width: 62%;
254
+      &:focus {
255
+        outline: none;
256
+      }
257
+    }
258
+    .abtn {
259
+      display: inline-block;
260
+      width: 37%;
261
+      text-align: center;
262
+      height: 0.48rem;
263
+      color: #005395;
264
+      font-size: 0.28rem;
265
+    }
266
+  }
267
+}
268
+.form-custom {
269
+  .cube-form-item {
270
+    .cube-btn {
271
+      padding-left: 0;
272
+      padding-right: 0;
273
+      text-align: left;
274
+      color: inherit;
275
+      background: none;
276
+      border: none;
277
+    }
278
+  }
279
+}
280
+
281
+.label {
282
+  background-color: rgb(238, 238, 238);
283
+  height: 0.6rem;
284
+  line-height: 0.6rem;
285
+  padding-left: 0.2rem;
286
+  font-size: 0.24rem;
287
+  color: #666666;
288
+  span {
289
+    font-size: 0.2rem;
290
+    display: inline-block;
291
+    margin-left: 0.08rem;
292
+    color: #999999;
293
+  }
294
+  &.formLabel {
295
+    background-color: #fff;
296
+  }
297
+}
298
+
299
+.zhidu {
300
+  display: flex;
301
+  height: 0.7rem;
302
+  line-height: 0.7rem;
303
+  border-bottom: 0.02rem solid rgb(245, 245, 245);
304
+  div:nth-child(1) {
305
+    width: 27.5%;
306
+    padding-left: 6%;
307
+  }
308
+}
309
+
310
+.bgColor {
311
+  background-color: white;
312
+  &.newIncident {
313
+    padding-top: 1.84rem;
314
+  }
315
+}
316
+
317
+.uplod {
318
+  padding: 0 0.24rem;
319
+  border-bottom: 0.02rem solid rgb(245, 245, 245);
320
+}
321
+.handleRadio {
322
+  border-bottom: 0.02rem solid rgb(245, 245, 245);
323
+}
324
+.synerBox {
325
+  height: 3rem;
326
+  overflow: scroll;
327
+}
328
+
329
+i.iconfont.blue {
330
+  color: #005395;
331
+  // &::after {
332
+  //   content: "";
333
+  //   width: 0.01rem;
334
+  //   height: 0.4rem;
335
+  //   background: #005395;
336
+  //   position: relative;
337
+  //   display: block;
338
+  //   left: 0.14rem;
339
+  // }
340
+}
341
+.againAssign {
342
+  .header {
343
+    width: 100%;
344
+    height: 0.88rem;
345
+    line-height: 0.88rem;
346
+    text-align: center;
347
+    color: #fff;
348
+    font-size: 0.37rem;
349
+    background: linear-gradient(#2e2f32, #414246);
350
+    position: fixed;
351
+    top: 0;
352
+    z-index: 6;
353
+  }
354
+  .navBar {
355
+    width: 100%;
356
+    line-height: 0.6rem;
357
+    background-color: #fff;
358
+    font-size: 0.28rem;
359
+    padding-top: 0.88rem;
360
+    color: #999;
361
+    div {
362
+      padding: 0 0.2rem;
363
+      &.p50 {
364
+        width: 49.99%;
365
+      }
366
+      a {
367
+        display: inline-block;
368
+        height: 0.9rem;
369
+        width: 1.7rem;
370
+        padding: 0 0.1rem;
371
+        &.active {
372
+          color: #005395;
373
+          border-bottom: 0.06rem solid #005395;
374
+        }
375
+      }
376
+    }
377
+  }
378
+
379
+  .label {
380
+    background-color: #eeeeee;
381
+    height: 0.6rem;
382
+    line-height: 0.58rem;
383
+    padding-left: 0.2rem;
384
+    font-size: 0.24rem;
385
+    color: #666666;
386
+    span {
387
+      font-size: 0.2rem;
388
+      display: inline-block;
389
+      margin-left: 0.08rem;
390
+      color: #999999;
391
+    }
392
+    &.formLabel {
393
+      background-color: #fff;
394
+    }
395
+  }
396
+  .conentBox {
397
+    width: 100%;
398
+    .conent {
399
+      font-size: 0.32rem;
400
+      font-weight: 400;
401
+      line-height: 0.45rem;
402
+      // border-bottom: 0.16rem solid #e5e5e5;
403
+
404
+      .shows {
405
+        display: none;
406
+      }
407
+      .boeder_B {
408
+        border-bottom: 0.01rem solid #ccc;
409
+      }
410
+      p {
411
+        &.desc {
412
+          overflow: hidden;
413
+        }
414
+        .grayFont {
415
+          width: 75%;
416
+          text-align: right;
417
+          overflow-x: scroll;
418
+        }
419
+      }
420
+      .bottom {
421
+        overflow: hidden;
422
+        line-height: 0.86rem;
423
+        border-bottom: 0.01rem solid #e6e6e6;
424
+        font-size: 0.24rem;
425
+        color: #999;
426
+        padding: 0 0.24rem 0 0.48rem;
427
+      }
428
+      .info {
429
+        color: #999;
430
+        font-size: 0.28rem;
431
+        overflow: hidden;
432
+        .head {
433
+          border-bottom: 0.01rem solid #e6e6e6;
434
+          p {
435
+            padding: 0.24rem 0.3rem;
436
+            i {
437
+              color: #00559d;
438
+            }
439
+          }
440
+        }
441
+        p {
442
+          line-height: 0.4rem;
443
+          padding: 0.1rem 0.24rem;
444
+          overflow: hidden;
445
+          .overflowEllipsis2 {
446
+            margin-left: 1.96rem;
447
+          }
448
+        }
449
+        .info_hide {
450
+          padding: 0.2rem 0.24rem;
451
+          border-bottom: 0.01rem solid #e6e6e6;
452
+          .hide {
453
+            color: #00559d;
454
+          }
455
+        }
456
+        .imgs-container {
457
+          a {
458
+            color: #03c !important;
459
+            &:visited {
460
+              color: #551a8b !important;
461
+            }
462
+          }
463
+          img {
464
+            width: 1.5rem;
465
+            height: 1.5rem;
466
+            margin-right: 0.7rem;
467
+            &:nth-child(1) {
468
+              margin-left: 0.75rem;
469
+            }
470
+          }
471
+        }
472
+        .progress {
473
+          padding: 0.2rem 0.2rem;
474
+          overflow: hidden;
475
+          transition-duration: 0.2s;
476
+          transition-timing-function: linear;
477
+          &.progressHide {
478
+            height: 1.7rem;
479
+          }
480
+          .progress_info {
481
+            overflow: hidden;
482
+            margin-bottom: 0.1rem;
483
+            &:nth-last-child(1) {
484
+              .cont {
485
+                border: none !important;
486
+              }
487
+            }
488
+            .progress_info_L {
489
+              float: left;
490
+              color: #333;
491
+              max-width: 18%;
492
+            }
493
+            .progress_info_R {
494
+              float: right;
495
+              margin-left: 0.09rem;
496
+              width: 80%;
497
+              font-size: 0.25rem;
498
+              .time {
499
+                i {
500
+                  margin-left: -0.15rem;
501
+                  &.icon-icon_weizuo {
502
+                    color: #005495;
503
+                  }
504
+                  &.icon-icon_zhengzaijinx {
505
+                    color: #48a843;
506
+                    font-size: 0.37rem;
507
+                  }
508
+                }
509
+                span {
510
+                  margin-left: 0.15rem;
511
+                }
512
+              }
513
+              .cont {
514
+                border-left: 1px solid #999;
515
+                padding-left: 0.4rem;
516
+                min-height: 0.4rem;
517
+                &.blue {
518
+                  border-left: 1px solid #005395;
519
+                }
520
+              }
521
+
522
+              .text1 {
523
+                font-size: 0.15rem;
524
+              }
525
+              .text2 {
526
+                color: #666;
527
+                word-break: break-all;
528
+              }
529
+              p {
530
+                padding: 0;
531
+              }
532
+            }
533
+          }
534
+        }
535
+      }
536
+      .txtLabel {
537
+        width: 100%;
538
+        overflow: hidden;
539
+        padding: 0.32rem 0.24rem 0.32rem 0.32rem;
540
+        .txt {
541
+          width: 30%;
542
+          color: #666;
543
+        }
544
+        .cube-textarea-wrapper {
545
+          width: 62%;
546
+        }
547
+      }
548
+      .sub {
549
+        background: #ececec;
550
+        .cube-btn {
551
+          background-color: #005395 !important;
552
+          width: 90%;
553
+          margin: 0.2rem auto;
554
+          border-radius: 8px;
555
+        }
556
+      }
557
+    }
558
+  }
559
+  .showwrap {
560
+    width: 75%;
561
+    text-align: right;
562
+  }
563
+}
564
+</style>