seimin 1 year ago
parent
commit
6d7b18821e
3 changed files with 890 additions and 15 deletions
  1. 597 0
      src/components/showModel2/showModel2.vue
  2. 146 7
      src/views/IncidentNewList.vue
  3. 147 8
      src/views/incidentList.vue

+ 597 - 0
src/components/showModel2/showModel2.vue

@@ -0,0 +1,597 @@
1
+<template>
2
+  <div class="showModel" v-if="disjunctor">
3
+    <div class="showModel__wrap">
4
+      <div class="showModel__header" v-if="title">
5
+        {{ title }}
6
+        <span v-if="operate.know == '知道了' && timerFlag">({{ time }})</span>
7
+      </div>
8
+      <div class="showModel__article">
9
+        <span
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
+        ></span>
19
+        <div v-if="content" class="showModel__content" v-html="content"></div>
20
+        <div v-if="info" class="showModel__info">{{ info }}</div>
21
+        <div class="select-wrap" v-if="selectName === 'user'">
22
+           <cube-switch v-model="isRadioGroup" style="margin-top:0.2rem;" @input="changeRadioGroup">是否转派到组</cube-switch>
23
+          <cube-select
24
+            v-model="selectGroupId"
25
+            :options="selectDataGroup"
26
+            placeholder="请选择工作组"
27
+            style="margin-top:0.2rem;" v-if="isRadioGroup"
28
+          ></cube-select>
29
+          <cube-select
30
+            v-model="selectUserId"
31
+            :options="selectDataUser"
32
+            placeholder="请选择指派对象"
33
+            style="margin-top:0.2rem;" v-if="!isRadioGroup"
34
+          ></cube-select>
35
+        </div>
36
+        <div v-if="textName === 'textarea'">
37
+          <div>
38
+            <div><span class="red">*</span>维修方式:</div>
39
+            <cube-select
40
+            v-model="maintenanceMode"
41
+            :options="modes"
42
+            placeholder="请选择维修方式"
43
+            style="margin:0.2rem 0;"
44
+          ></cube-select>
45
+          </div>
46
+          <div>
47
+            <div><span class="red">*</span>预估天数:</div>
48
+            <cube-select
49
+            v-model="estimatedNumberOfDays"
50
+            :options="days"
51
+            placeholder="请选择预估天数"
52
+            style="margin:0.2rem 0;"
53
+          ></cube-select>
54
+          </div>
55
+          <div>
56
+            <div><span class="red">*</span>备注:</div>
57
+            <cube-textarea
58
+              autofocus
59
+              :maxlength="255"
60
+              v-model="textareaData"
61
+              placeholder="请填写备注"
62
+              style="border:1px solid #ececec;height:2rem;resize:none;"
63
+            ></cube-textarea>
64
+            <div class="tipsAll">
65
+              <div class="tips" v-for="item in logs" :key="item.id" @click="copyTo(item.value)">
66
+                {{ item.value }}
67
+              </div>
68
+            </div>
69
+          </div>
70
+        </div>
71
+        <!-- 耗材 -->
72
+        <div class="select-wrap hc" v-if="selectName === 'hc_add' || selectName === 'hc_edit'">
73
+          <div class="hc_item">名称:{{ data.hc.name }}</div>
74
+          <div class="hc_item">型号品牌:{{ data.hc.brandModel }}</div>
75
+          <div class="hc_item">单价:{{ data.hc.endPrice }}元</div>
76
+          <div class="hc_item">使用数量:<cube-input type="number" style="flex:1" v-model="consumablesNum"></cube-input></div>
77
+        </div>
78
+        <!-- 工时 -->
79
+        <div class="select-wrap hc" v-if="selectName === 'gs_edit'">
80
+          <div class="hc_item">工时名称:{{ data.gs.workName }}<span v-if="data.workUnit">{{ data.gs.workUnit }}</span></div>
81
+          <div class="hc_item">单价:{{ data.gs.wage }}元</div>
82
+          <div class="hc_item">使用数量:<cube-input type="number" style="flex:1" v-model="workHourNum2"></cube-input></div>
83
+        </div>
84
+      </div>
85
+      <div class="showModel__footer">
86
+        <div v-if="operate.ok" class="showModel__ok" @click="ok">
87
+          {{ operate.ok || "" }}
88
+        </div>
89
+        <div v-if="operate.remove && (selectName === 'hc_edit' || selectName === 'gs_edit')" class="showModel__remove" @click.stop="remove">
90
+          {{ operate.remove || "" }}
91
+        </div>
92
+        <div v-if="operate.cancel" class="showModel__cancel" @click.stop="cancel">
93
+          {{ operate.cancel || "" }}
94
+        </div>
95
+        <div v-if="operate.know" class="showModel__know" @click.stop="know">
96
+          {{ operate.know || "" }}
97
+        </div>
98
+        <div
99
+          v-if="operate.know && timerFlag"
100
+          class="showModel__know"
101
+          @click="cancelTimer"
102
+        >
103
+          取消自动关闭
104
+        </div>
105
+      </div>
106
+    </div>
107
+  </div>
108
+</template>
109
+
110
+<script>
111
+export default {
112
+  data() {
113
+    return {
114
+      isShowRadioUser: false,
115
+      isRadioGroup: false,
116
+      consumablesNum: this.data ? (this.data.consumablesNum ? this.data.consumablesNum : 1) : 1,
117
+      workHourNum2: this.data ? (this.data.workHourNum2 ? this.data.workHourNum2 : 1) : 1,
118
+      loginUser: JSON.parse(localStorage.getItem("loginUser")),
119
+      logs: [],
120
+      time: 5, //5秒后自动关闭
121
+      timer: null, //5秒后自动关闭,定时器
122
+      timerFlag: true, //是否显示取消自动关闭按钮
123
+      selectDataUser: [], //select数据-用户
124
+      selectUserId: undefined, //select选中的数据-用户
125
+      selectDataGroup: [], //select数据-工作组
126
+      selectGroupId: undefined, //select选中的数据-工作组
127
+      selectDataBranch: [], //select数据-院区
128
+      selectBranchId: undefined, //select选中的数据-院区
129
+      selectDataDuty: [], //select数据-责任科室
130
+      selectDutyId: undefined, //select选中的数据-责任科室
131
+      textareaData: "", //textarea的数据
132
+      maintenanceMode: "", //维修方式
133
+      estimatedNumberOfDays: "", //预估天数
134
+      modes: [],//维修方式列表
135
+      modesResource: [],//维修方式列表
136
+      days: [
137
+        {text: 1, value: 1},
138
+        {text: 2, value: 2},
139
+        {text: 3, value: 3},
140
+        {text: 4, value: 4},
141
+        {text: 5, value: 5},
142
+        {text: 6, value: 6},
143
+        {text: 7, value: 7},
144
+        {text: 8, value: 8},
145
+        {text: 9, value: 9},
146
+        {text: 10, value: 10},
147
+        {text: 11, value: 11},
148
+        {text: 12, value: 12},
149
+        {text: 13, value: 13},
150
+        {text: 14, value: 14},
151
+        {text: 15, value: 15},
152
+      ],//预估天数列表
153
+    };
154
+  },
155
+  watch: {
156
+    disjunctor(newValue) {
157
+      if (newValue && this.textName === "textarea") {
158
+        this.textareaData = "";
159
+        this.maintenanceMode = "";
160
+        this.estimatedNumberOfDays = "";
161
+      }
162
+      if (newValue && this.operate.know == "知道了") {
163
+        this.time = 5;
164
+        this.timer = setInterval(() => {
165
+          this.time--;
166
+          if (this.time <= 0) {
167
+            clearInterval(this.timer);
168
+            this.know();
169
+          }
170
+        }, 1000);
171
+      }
172
+    }
173
+  },
174
+  props: {
175
+    // 携带的数据
176
+    data: {
177
+      type: Object,
178
+      default: () => {}
179
+    },
180
+    // 显示隐藏
181
+    disjunctor: {
182
+      type: Boolean,
183
+      default: false
184
+    },
185
+    // 标题
186
+    title: {
187
+      type: String,
188
+      default: "提示"
189
+    },
190
+    // 图标
191
+    icon: {
192
+      type: String,
193
+      default: "success"
194
+    },
195
+    // 内容
196
+    content: {
197
+      type: String,
198
+      default: ""
199
+    },
200
+    // 说明
201
+    info: {
202
+      type: String,
203
+      default: ""
204
+    },
205
+    // 下拉框(user)
206
+    selectName: {
207
+      type: String,
208
+      default: ""
209
+    },
210
+    // 下拉框(user)
211
+    dataObj: {
212
+      type: Object,
213
+      default: () => {}
214
+    },
215
+    // 文本块(维修记录)
216
+    textName: {
217
+      type: String,
218
+      default: ""
219
+    },
220
+    // 操作按钮文字
221
+    operate: {
222
+      type: Object,
223
+      default: () => {
224
+        return {
225
+          know: "知道了"
226
+        };
227
+      }
228
+    }
229
+  },
230
+  methods: {
231
+    changeRadioGroup(){
232
+      this.selectUserId = undefined;
233
+      this.selectGroupId = undefined;
234
+    },
235
+    copyTo(value){
236
+      this.textareaData += value;
237
+    },
238
+    getLogs() {
239
+      var postData = { idx: 0, sum: 999, dictionary: { key: "processingLog" } };
240
+      this.$http
241
+        .post("service/bpm/data/fetchDataList/dictionary", postData)
242
+        .then(res => {
243
+          res.data.list = res.data.list || [];
244
+          this.logs = res.data.list.slice(0,2);
245
+        });
246
+    },
247
+    getModes() {
248
+      var postData = { idx: 0, sum: 999, dictionary: { key: "repair_type" } };
249
+      this.$http
250
+        .post("service/bpm/data/fetchDataList/dictionary", postData)
251
+        .then(res => {
252
+          res.data.list = res.data.list || [];
253
+          this.modes = res.data.list.map(v => ({text: v.name, value: v.id}));
254
+          this.modesResource = res.data.list;
255
+        });
256
+    },
257
+    //选择组
258
+    changeGroup(groupId) {
259
+      this.getZpUser(groupId);
260
+    },
261
+    //选择院区
262
+    changeBranch(branchId) {
263
+      console.log(branchId);
264
+      this.getZpDuty(branchId);
265
+    },
266
+    //选择责任科室
267
+    changeDuty(dutyId) {
268
+      console.log(dutyId);
269
+      this.getZpGroup(dutyId);
270
+    },
271
+    // 获取指派对象
272
+    getZpUser() {
273
+      this.selectDataUser = [];
274
+      var postData = {
275
+        idx: 0,
276
+        sum: 9999,
277
+        user: {
278
+          currentDuty: this.dataObj.duty.id,
279
+          roledata: { rolecode: "first-line support" },
280
+          roledata2: { rolecode: "second-line support" },
281
+          selectType: "1",
282
+          selectDetails: 1,
283
+          simple: true,
284
+        }
285
+      };
286
+      this.$http
287
+        .post("service/user/data/fetchDataList/user", postData)
288
+        .then(res => {
289
+          res.data.list = res.data.list || [];
290
+          this.selectDataUser = res.data.list.map(v => {
291
+            return {
292
+              text: v.name + "【" + v.taskCount + "】",
293
+              value: v.id
294
+            };
295
+          });
296
+        });
297
+    },
298
+    // 获取工作组
299
+    getZpGroup() {
300
+      this.selectDataGroup = [];
301
+      this.selectDataUser = [];
302
+      this.selectUserId = undefined;
303
+      var postData = {
304
+        idx: 0,
305
+        sum: 1000,
306
+        group: {
307
+          duty: this.dataObj.duty,
308
+          selectType: "nouser"
309
+        }
310
+      };
311
+      this.$http
312
+        .post("service/user/data/fetchDataList/group", postData)
313
+        .then(res => {
314
+          res.data.list = res.data.list || [];
315
+          this.selectDataGroup = res.data.list.map(v => {
316
+            return {
317
+              text: v.groupName,
318
+              value: v.id
319
+            };
320
+          });
321
+        });
322
+    },
323
+    // 获取院区
324
+    getZpBranch() {
325
+      this.selectDataBranch = [];
326
+      this.selectDataBranch = [];
327
+      this.selectBranchId = undefined;
328
+      this.selectDataGroup = [];
329
+      this.selectGroupId = undefined;
330
+      this.selectDataUser = [];
331
+      this.selectUserId = undefined;
332
+      var postData = {
333
+        idx: 0,
334
+        sum: 1000
335
+      };
336
+      this.$http
337
+        .post("service/user/data/fetchDataList/branch", postData)
338
+        .then(res => {
339
+          res.data.list = res.data.list || [];
340
+          this.selectDataBranch = res.data.list.map(v => {
341
+            return {
342
+              text: v.hosName,
343
+              value: v.id
344
+            };
345
+          });
346
+          if(this.loginUser.duty){
347
+            this.selectBranchId = this.loginUser.duty.branch;
348
+            this.selectDutyId = this.loginUser.duty.id;
349
+            this.getZpGroup(this.selectDutyId);
350
+          }else if(this.loginUser.branch){
351
+            this.selectBranchId = this.loginUser.branch?this.loginUser.branch.id:undefined;
352
+          }
353
+          this.getZpDuty(this.selectBranchId);
354
+        });
355
+    },
356
+    // 获取责任科室
357
+    getZpDuty(branchId) {
358
+      this.selectDataDuty = [];
359
+      this.selectDataGroup = [];
360
+      this.selectGroupId = undefined;
361
+      this.selectDataUser = [];
362
+      this.selectUserId = undefined;
363
+      var postData = {
364
+        idx: 0,
365
+        sum: 1000,
366
+        dutyDepartment:{
367
+          branch:branchId
368
+        }
369
+      };
370
+      this.$http
371
+        .post("service/user/data/fetchDataList/dutyDepartment", postData)
372
+        .then(res => {
373
+          res.data.list = res.data.list || [];
374
+          this.selectDataDuty = res.data.list.map(v => {
375
+            return {
376
+              text: v.dept,
377
+              value: v.id
378
+            };
379
+          });
380
+        });
381
+    },
382
+    // 单选框选中
383
+    radioChange(item) {
384
+      this.$emit("radioChange", item.target.value);
385
+    },
386
+    // 确定
387
+    ok() {
388
+      if (this.selectName === "user") {
389
+        this.$emit("ok", {selectUserId: this.selectUserId, isRadioGroup: this.isRadioGroup, selectGroupId: this.selectGroupId});
390
+      } else if (this.selectName === "hc_add" || this.selectName === "hc_edit") {
391
+        this.$emit("ok", {hc: this.data.hc, consumablesNum:this.consumablesNum});
392
+      } else if (this.selectName === "gs_edit") {
393
+        this.$emit("ok", {gs: this.data.gs, workHourNum2:this.workHourNum2});
394
+      } else if (this.textName === "textarea") {
395
+        this.$emit("ok", {textareaData: this.textareaData, maintenanceMode: this.modesResource.find(v=> v.id == this.maintenanceMode), estimatedNumberOfDays: this.estimatedNumberOfDays});
396
+      } else {
397
+        this.$emit("ok");
398
+      }
399
+    },
400
+    // 移除
401
+    remove(){
402
+      if(this.selectName === "hc_edit"){
403
+        this.$emit("remove", {hc: this.data.hc, consumablesNum:this.consumablesNum});
404
+      }else if(this.selectName === "gs_edit"){
405
+        this.$emit("remove", {gs: this.data.gs, workHourNum2:this.workHourNum2});
406
+      }
407
+    },
408
+    // 取消
409
+    cancel() {
410
+      this.$emit("cancel");
411
+    },
412
+    // 知道了
413
+    know() {
414
+      clearInterval(this.timer);
415
+      this.$emit("know");
416
+    },
417
+    // 取消自动关闭
418
+    cancelTimer() {
419
+      this.timerFlag = false;
420
+      clearInterval(this.timer);
421
+    }
422
+  },
423
+  created() {
424
+    console.log(this.data)
425
+    console.log(this.dataObj)
426
+    if (this.selectName === "user") {
427
+      this.getZpGroup();
428
+      this.getZpUser();
429
+      // if(this.dataObj.state.id == 1544){
430
+      //   this.isShowRadioUser = false;
431
+      //   this.isRadioGroup = true;
432
+      // }else{
433
+      //   this.isShowRadioUser = true;
434
+      //   this.isRadioGroup = false;
435
+      // }
436
+    }
437
+    if (this.textName === "textarea") {
438
+      this.getLogs();
439
+      this.getModes();
440
+    }
441
+  }
442
+};
443
+</script>
444
+
445
+<style lang="less">
446
+.showModel {
447
+  position: fixed;
448
+  left: 0;
449
+  right: 0;
450
+  top: 0;
451
+  bottom: 0;
452
+  background-color: rgba(0, 0, 0, 0.2);
453
+  z-index: 99;
454
+  .red{
455
+    color: red;
456
+  }
457
+
458
+  .tipsAll {
459
+    .tips {
460
+      word-break: break-all;
461
+      margin-bottom: 0.1rem;
462
+    }
463
+  }
464
+
465
+  .showModel__wrap {
466
+    width: 5.6rem;
467
+    position: absolute;
468
+    left: 50%;
469
+    top: 50%;
470
+    transform: translate(-50%, -50%);
471
+    background-color: #fff;
472
+    border-radius: 0.12rem;
473
+
474
+    .showModel__header {
475
+      font-size: 0.36rem;
476
+      color: 000;
477
+      height: 0.84rem;
478
+      display: flex;
479
+      justify-content: center;
480
+      align-items: center;
481
+    }
482
+
483
+    .showModel__article {
484
+      margin: 0.2rem auto;
485
+      width: 4.88rem;
486
+      padding: 0.2rem;
487
+      background-color: rgb(249, 250, 251);
488
+      border: 0.02rem solid rgb(229, 233, 237);
489
+      border-radius: 0.12rem;
490
+      box-sizing: border-box;
491
+      display: flex;
492
+      flex-direction: column;
493
+      justify-content: center;
494
+      align-items: center;
495
+
496
+      .showModel__icon {
497
+        font-size: 1.38rem;
498
+        margin-bottom: 0.32rem;
499
+
500
+        &.showModel__icon--success {
501
+          color: rgb(52, 179, 73);
502
+        }
503
+
504
+        &.showModel__icon--warn {
505
+          color: rgb(245, 165, 35);
506
+        }
507
+
508
+        &.showModel__icon--error {
509
+          color: rgb(255, 58, 82);
510
+        }
511
+      }
512
+
513
+      .showModel__content {
514
+        font-size: 0.36rem;
515
+      }
516
+
517
+      .showModel__info {
518
+        font-size: 0.32rem;
519
+        color: rgb(102, 102, 102);
520
+      }
521
+      .select-wrap {
522
+        width: 80%;
523
+        margin: 0 auto;
524
+        &.hc{
525
+          font-size: 0.32rem;
526
+          .hc_item{
527
+            margin-bottom: 0.1rem;
528
+            display: flex;
529
+            align-items: center;
530
+          }
531
+        }
532
+      }
533
+      .specialCloseFlag {
534
+        width: 90%;
535
+        height: 100%;
536
+        padding: 0.16rem;
537
+      }
538
+    }
539
+
540
+    .showModel__footer {
541
+      box-sizing: border-box;
542
+      height: 1rem;
543
+      border-top: 0.02rem solid rgb(229, 233, 237);
544
+      display: flex;
545
+      align-items: center;
546
+
547
+      div {
548
+        height: 100%;
549
+        display: flex;
550
+        align-items: center;
551
+        justify-content: center;
552
+        font-size: 0.36rem;
553
+        color: rgb(102, 102, 102);
554
+        position: relative;
555
+
556
+        &:nth-of-type(2)::before {
557
+          content: "";
558
+          position: absolute;
559
+          left: 0;
560
+          bottom: 0;
561
+          width: 0.02rem;
562
+          height: 0.87rem;
563
+          background-color: rgb(229, 233, 237);
564
+        }
565
+        &:nth-of-type(3)::before {
566
+          content: "";
567
+          position: absolute;
568
+          left: 0;
569
+          bottom: 0;
570
+          width: 0.02rem;
571
+          height: 0.87rem;
572
+          background-color: rgb(229, 233, 237);
573
+        }
574
+      }
575
+
576
+      .showModel__ok {
577
+        flex: 1;
578
+        color: #005395;
579
+      }
580
+
581
+      .showModel__remove {
582
+        flex: 1;
583
+        color: #f30922;
584
+      }
585
+
586
+      .showModel__cancel {
587
+        flex: 1;
588
+      }
589
+
590
+      .showModel__know {
591
+        flex: 1;
592
+        color: #005395;
593
+      }
594
+    }
595
+  }
596
+}
597
+</style>

+ 146 - 7
src/views/IncidentNewList.vue

@@ -110,15 +110,12 @@
110 110
                   </span>
111 111
                 </div>
112 112
                 <div class="btns">
113
-                  <cube-form-group
114
-                    class="sub-btn"
115
-                    v-show="
116
-                      (item.state.id === 1544 || item.state.id === 1543) &&
117
-                        isAssign
118
-                    "
119
-                  >
113
+                  <cube-form-group class="sub-btn"  v-show=" (item.state.id === 1544 || item.state.id === 1543) && isAssign ">
120 114
                     <cube-button @click.stop="assign(item)">指派</cube-button>
121 115
                   </cube-form-group>
116
+                  <cube-form-group class="sub-btn"  v-show=" (item.state.id === 1544) && !isAssign && isTransfer ">
117
+                    <cube-button @click.stop="transfer(item)">转派</cube-button>
118
+                  </cube-form-group>
122 119
                   <cube-form-group
123 120
                     class="sub-btn"
124 121
                     v-show="item.state.id === 1544"
@@ -187,6 +184,18 @@
187 184
       selectName="user"
188 185
       :dataObj="modelsData"
189 186
     ></showModel>
187
+    <!-- 转派弹窗 -->
188
+    <showModel2
189
+      v-if="models2.disjunctor"
190
+      :title="models2.title"
191
+      :icon="models2.icon"
192
+      :disjunctor="models2.disjunctor"
193
+      @ok="ok2"
194
+      @cancel="cancel2"
195
+      :operate="models2.operate"
196
+      selectName="user"
197
+      :dataObj="modelsData"
198
+    ></showModel2>
190 199
     <!-- 新增维修记录弹窗 -->
191 200
     <showModel
192 201
       :title="models1.title"
@@ -208,6 +217,7 @@
208 217
 <script>
209 218
 import seiminDrawer from "../custom/seiminDrawer.vue";
210 219
 import showModel from "../components/showModel/showModel.vue";
220
+import showModel2 from "../components/showModel2/showModel2.vue";
211 221
 import CubePage from "../components/cube-page.vue";
212 222
 import SwitchOption from "../components/switch-option";
213 223
 import InputOption from "../components/input-option";
@@ -243,7 +253,11 @@ export default {
243 253
       models1: {
244 254
         disjunctor: false
245 255
       },
256
+      models2: {
257
+        disjunctor: false
258
+      },
246 259
       isAssign: false, //是否有权限指派
260
+      isTransfer: false, //是否有权限转派
247 261
       isAll: false, //是否显示全部事件
248 262
       loginUser: JSON.parse(localStorage.getItem("loginUser")),
249 263
       menu: JSON.parse(localStorage.getItem("menu")),
@@ -287,6 +301,7 @@ export default {
287 301
     SelectOption,
288 302
     LoadIng,
289 303
     showModel,
304
+    showModel2,
290 305
     seiminDrawer,
291 306
   },
292 307
   computed: {
@@ -559,6 +574,129 @@ export default {
559 574
         }
560 575
       };
561 576
     },
577
+    // 转派----------------------start
578
+    //确定
579
+    ok2(data) {
580
+      let {selectUserId, isRadioGroup, selectGroupId} = data;
581
+      console.log(data);
582
+      if (!isRadioGroup && !selectUserId) {
583
+        this.$createDialog({
584
+          type: "alert",
585
+          title: "请选择转派对象",
586
+          icon: "cubeic-warn"
587
+        }).show();
588
+        return;
589
+      }
590
+      if (isRadioGroup && !selectGroupId) {
591
+        this.$createDialog({
592
+          type: "alert",
593
+          title: "请选择工作组",
594
+          icon: "cubeic-warn"
595
+        }).show();
596
+        return;
597
+      }
598
+      const toast = this.$createToast({
599
+        txt: "Loading...",
600
+        mask: true
601
+      });
602
+      toast.show();
603
+      let postData = {};
604
+      if(selectUserId){
605
+          // 派人
606
+          // 接单
607
+          if(this.modelsData.state.value == 'pending'){
608
+              postData = {
609
+                  type: 'receiveAssginee',
610
+                  userId: selectUserId,
611
+                  taskId: this.modelsData.taskId,
612
+                  incidentId: this.modelsData.id,
613
+              }
614
+          }
615
+          // 处理中
616
+          if(this.modelsData.state.value == 'handler'){
617
+              postData = {
618
+                  type: 'handlerAssginee',
619
+                  userId: selectUserId,
620
+                  taskId: this.modelsData.taskId,
621
+                  incidentId: this.modelsData.id,
622
+              }
623
+          }
624
+      } else if(selectGroupId){
625
+          // 派组
626
+          // 接单,派组
627
+          if(this.modelsData.state.value == 'pending'){
628
+              postData = {
629
+                  type: 'receiveGroup',
630
+                  groupId: selectGroupId,
631
+                  taskId: this.modelsData.taskId,
632
+                  activityId: 'usertask5',
633
+                  executionId: this.modelsData.processInstanceId,
634
+                  incidentId: this.modelsData.id,
635
+              }
636
+          }
637
+          // 处理中
638
+          if(this.modelsData.state.value == 'handler'){
639
+              postData = {
640
+                  type: 'handlerGroup',
641
+                  groupId: selectGroupId,
642
+                  taskId: this.modelsData.taskId,
643
+                  activityId: 'usertask5',
644
+                  executionId: this.modelsData.processInstanceId,
645
+                  incidentId: this.modelsData.id,
646
+              }
647
+          }
648
+      }
649
+      this.$http
650
+        .post("service/bpm/bpm/delegateTask2", postData)
651
+        .then(res => {
652
+          toast.hide();
653
+          this.models2.disjunctor = false;
654
+          if (res.status == 200) {
655
+            this.$createDialog({
656
+              type: "alert",
657
+              title: "操作成功",
658
+              icon: "cubeic-right",
659
+              onConfirm: (e, promptValue) => {
660
+                this.loadShow = true;
661
+                this.items = [];
662
+                this.idx = 0;
663
+                this.getData();
664
+              }
665
+            }).show();
666
+          } else {
667
+            this.$createDialog({
668
+              type: "alert",
669
+              title: "系统错误,请稍后再试!",
670
+              icon: "cubeic-wrong",
671
+              onConfirm: (e, promptValue) => {
672
+                this.loadShow = true;
673
+                this.items = [];
674
+                this.idx = 0;
675
+                this.getData();
676
+              }
677
+            }).show();
678
+          }
679
+        });
680
+    },
681
+    //取消
682
+    cancel2() {
683
+      this.models2.disjunctor = false;
684
+    },
685
+    // 转派
686
+    transfer(item) {
687
+      console.log(item)
688
+      this.modelsData = item;
689
+      this.models2 = {
690
+        disjunctor: true,
691
+        title: "转派",
692
+        icon: "warn",
693
+        operate: {
694
+          ok: "确定",
695
+          cancel: "取消"
696
+        }
697
+      };
698
+    },
699
+    // 转派----------------------end
562 700
     //确定
563 701
     ok1(obj) {
564 702
       console.log(obj);
@@ -900,6 +1038,7 @@ export default {
900 1038
     let menu = JSON.parse(localStorage.getItem("menu"));
901 1039
     if (menu) {
902 1040
       this.isAssign = menu.some(v => v.link == "shijianliebiao_assign");
1041
+      this.isTransfer = menu.some(v => v.link == "shijianliebiao_transfer");
903 1042
       this.isAll = menu.some(v => v.link == "shijianliebiao_all");
904 1043
       if(this.isAll){
905 1044
         this.searchsType.unshift({

+ 147 - 8
src/views/incidentList.vue

@@ -116,15 +116,12 @@
116 116
                   </span>
117 117
                 </div>
118 118
                 <div class="btns">
119
-                  <cube-form-group
120
-                    class="sub-btn"
121
-                    v-show="
122
-                      (item.state.id === 1544 || item.state.id === 1543) &&
123
-                        isAssign
124
-                    "
125
-                  >
119
+                  <cube-form-group class="sub-btn"  v-show=" (item.state.id === 1544 || item.state.id === 1543) && isAssign ">
126 120
                     <cube-button @click.stop="assign(item)">指派</cube-button>
127 121
                   </cube-form-group>
122
+                  <cube-form-group class="sub-btn"  v-show=" (item.state.id === 1544) && !isAssign && isTransfer ">
123
+                    <cube-button @click.stop="transfer(item)">转派</cube-button>
124
+                  </cube-form-group>
128 125
                   <cube-form-group
129 126
                     class="sub-btn"
130 127
                     v-show="item.state.id === 1544"
@@ -193,6 +190,18 @@
193 190
       selectName="user"
194 191
       :dataObj="modelsData"
195 192
     ></showModel>
193
+    <!-- 转派弹窗 -->
194
+    <showModel2
195
+      v-if="models2.disjunctor"
196
+      :title="models2.title"
197
+      :icon="models2.icon"
198
+      :disjunctor="models2.disjunctor"
199
+      @ok="ok2"
200
+      @cancel="cancel2"
201
+      :operate="models2.operate"
202
+      selectName="user"
203
+      :dataObj="modelsData"
204
+    ></showModel2>
196 205
     <!-- 新增维修记录弹窗 -->
197 206
     <showModel
198 207
       :title="models1.title"
@@ -212,6 +221,7 @@
212 221
 </template>
213 222
 <script>
214 223
 import showModel from "../components/showModel/showModel.vue";
224
+import showModel2 from "../components/showModel2/showModel2.vue";
215 225
 import CubePage from "../components/cube-page.vue";
216 226
 import SwitchOption from "../components/switch-option";
217 227
 import InputOption from "../components/input-option";
@@ -232,7 +242,11 @@ export default {
232 242
       models1: {
233 243
         disjunctor: false
234 244
       },
245
+      models2: {
246
+        disjunctor: false
247
+      },
235 248
       isAssign: false, //是否有权限指派
249
+      isTransfer: false, //是否有权限转派
236 250
       isAll: false, //是否显示全部事件
237 251
       loginUser: JSON.parse(localStorage.getItem("loginUser")),
238 252
       menu: JSON.parse(localStorage.getItem("menu")),
@@ -275,7 +289,8 @@ export default {
275 289
     InputOption,
276 290
     SelectOption,
277 291
     LoadIng,
278
-    showModel
292
+    showModel,
293
+    showModel2,
279 294
   },
280 295
   computed: {
281 296
     options() {
@@ -527,6 +542,129 @@ export default {
527 542
         }
528 543
       };
529 544
     },
545
+    // 转派----------------------start
546
+    //确定
547
+    ok2(data) {
548
+      let {selectUserId, isRadioGroup, selectGroupId} = data;
549
+      console.log(data);
550
+      if (!isRadioGroup && !selectUserId) {
551
+        this.$createDialog({
552
+          type: "alert",
553
+          title: "请选择转派对象",
554
+          icon: "cubeic-warn"
555
+        }).show();
556
+        return;
557
+      }
558
+      if (isRadioGroup && !selectGroupId) {
559
+        this.$createDialog({
560
+          type: "alert",
561
+          title: "请选择工作组",
562
+          icon: "cubeic-warn"
563
+        }).show();
564
+        return;
565
+      }
566
+      const toast = this.$createToast({
567
+        txt: "Loading...",
568
+        mask: true
569
+      });
570
+      toast.show();
571
+      let postData = {};
572
+      if(selectUserId){
573
+          // 派人
574
+          // 接单
575
+          if(this.modelsData.state.value == 'pending'){
576
+              postData = {
577
+                  type: 'receiveAssginee',
578
+                  userId: selectUserId,
579
+                  taskId: this.modelsData.taskId,
580
+                  incidentId: this.modelsData.id,
581
+              }
582
+          }
583
+          // 处理中
584
+          if(this.modelsData.state.value == 'handler'){
585
+              postData = {
586
+                  type: 'handlerAssginee',
587
+                  userId: selectUserId,
588
+                  taskId: this.modelsData.taskId,
589
+                  incidentId: this.modelsData.id,
590
+              }
591
+          }
592
+      } else if(selectGroupId){
593
+          // 派组
594
+          // 接单,派组
595
+          if(this.modelsData.state.value == 'pending'){
596
+              postData = {
597
+                  type: 'receiveGroup',
598
+                  groupId: selectGroupId,
599
+                  taskId: this.modelsData.taskId,
600
+                  activityId: 'usertask5',
601
+                  executionId: this.modelsData.processInstanceId,
602
+                  incidentId: this.modelsData.id,
603
+              }
604
+          }
605
+          // 处理中
606
+          if(this.modelsData.state.value == 'handler'){
607
+              postData = {
608
+                  type: 'handlerGroup',
609
+                  groupId: selectGroupId,
610
+                  taskId: this.modelsData.taskId,
611
+                  activityId: 'usertask5',
612
+                  executionId: this.modelsData.processInstanceId,
613
+                  incidentId: this.modelsData.id,
614
+              }
615
+          }
616
+      }
617
+      this.$http
618
+        .post("service/bpm/bpm/delegateTask2", postData)
619
+        .then(res => {
620
+          toast.hide();
621
+          this.models2.disjunctor = false;
622
+          if (res.status == 200) {
623
+            this.$createDialog({
624
+              type: "alert",
625
+              title: "操作成功",
626
+              icon: "cubeic-right",
627
+              onConfirm: (e, promptValue) => {
628
+                this.loadShow = true;
629
+                this.items = [];
630
+                this.idx = 0;
631
+                this.getData();
632
+              }
633
+            }).show();
634
+          } else {
635
+            this.$createDialog({
636
+              type: "alert",
637
+              title: "系统错误,请稍后再试!",
638
+              icon: "cubeic-wrong",
639
+              onConfirm: (e, promptValue) => {
640
+                this.loadShow = true;
641
+                this.items = [];
642
+                this.idx = 0;
643
+                this.getData();
644
+              }
645
+            }).show();
646
+          }
647
+        });
648
+    },
649
+    //取消
650
+    cancel2() {
651
+      this.models2.disjunctor = false;
652
+    },
653
+    // 转派
654
+    transfer(item) {
655
+      console.log(item)
656
+      this.modelsData = item;
657
+      this.models2 = {
658
+        disjunctor: true,
659
+        title: "转派",
660
+        icon: "warn",
661
+        operate: {
662
+          ok: "确定",
663
+          cancel: "取消"
664
+        }
665
+      };
666
+    },
667
+    // 转派----------------------end
530 668
     //确定
531 669
     ok1(obj) {
532 670
       console.log(obj);
@@ -785,6 +923,7 @@ export default {
785 923
     let menu = JSON.parse(localStorage.getItem("menu"));
786 924
     if (menu) {
787 925
       this.isAssign = menu.some(v => v.link == "shijianliebiao_assign");
926
+      this.isTransfer = menu.some(v => v.link == "shijianliebiao_transfer");
788 927
       this.isAll = menu.some(v => v.link == "shijianliebiao_all");
789 928
       if(this.isAll){
790 929
         this.searchsType.unshift({